Updating to Qt6
This commit is contained in:
parent
78ffc8c645
commit
aecc02c606
35 changed files with 362 additions and 263 deletions
|
@ -18,10 +18,10 @@
|
||||||
|
|
||||||
from time import time
|
from time import time
|
||||||
|
|
||||||
from PySide2.QtWidgets import QApplication
|
from PySide6.QtWidgets import QApplication
|
||||||
from PySide2.QtQml import QQmlApplicationEngine
|
from PySide6.QtQml import QQmlApplicationEngine
|
||||||
from PySide2.QtCore import Qt, QTranslator, QLocale
|
from PySide6.QtCore import Qt, QTranslator, QLocale
|
||||||
from PySide2.QtGui import QIcon
|
from PySide6.QtGui import QIcon
|
||||||
|
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
from os import getcwd, chdir, environ, path, remove, close
|
from os import getcwd, chdir, environ, path, remove, close
|
||||||
|
@ -52,7 +52,7 @@ config.init()
|
||||||
|
|
||||||
def get_linux_theme():
|
def get_linux_theme():
|
||||||
des = {
|
des = {
|
||||||
"KDE": "org.kde.desktop",
|
"KDE": "default",
|
||||||
"gnome": "default",
|
"gnome": "default",
|
||||||
"lxqt": "fusion",
|
"lxqt": "fusion",
|
||||||
"mate": "fusion",
|
"mate": "fusion",
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Dialogs 1.3
|
import Qt.labs.platform as Native
|
||||||
//import QtQuick.Controls 2.15
|
//import QtQuick.Controls 2.15
|
||||||
import eu.ad5001.MixedMenu 1.1
|
import eu.ad5001.MixedMenu 1.1
|
||||||
import "js/objects.js" as Objects
|
import "js/objects.js" as Objects
|
||||||
|
@ -133,6 +133,7 @@ MenuBar {
|
||||||
checked: Helper.getSettingBool("check_for_updates")
|
checked: Helper.getSettingBool("check_for_updates")
|
||||||
onTriggered: Helper.setSettingBool("check_for_updates", checked)
|
onTriggered: Helper.setSettingBool("check_for_updates", checked)
|
||||||
icon.name: 'update'
|
icon.name: 'update'
|
||||||
|
icon.color: sysPalette.buttonText
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action {
|
||||||
|
@ -142,6 +143,7 @@ MenuBar {
|
||||||
checked: Helper.getSettingBool("reset_redo_stack")
|
checked: Helper.getSettingBool("reset_redo_stack")
|
||||||
onTriggered: Helper.setSettingBool("reset_redo_stack", checked)
|
onTriggered: Helper.setSettingBool("reset_redo_stack", checked)
|
||||||
icon.name: 'timeline'
|
icon.name: 'timeline'
|
||||||
|
icon.color: sysPalette.buttonText
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action {
|
||||||
|
@ -155,6 +157,7 @@ MenuBar {
|
||||||
drawCanvas.requestPaint()
|
drawCanvas.requestPaint()
|
||||||
}
|
}
|
||||||
icon.name: 'Expression'
|
icon.name: 'Expression'
|
||||||
|
icon.color: sysPalette.buttonText
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu {
|
Menu {
|
||||||
|
@ -169,6 +172,7 @@ MenuBar {
|
||||||
Helper.setSettingBool("expression_editor.autoclose", checked)
|
Helper.setSettingBool("expression_editor.autoclose", checked)
|
||||||
}
|
}
|
||||||
icon.name: 'Text'
|
icon.name: 'Text'
|
||||||
|
icon.color: sysPalette.buttonText
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action {
|
||||||
|
@ -180,6 +184,7 @@ MenuBar {
|
||||||
Helper.setSettingBool("expression_editor.colorize", checked)
|
Helper.setSettingBool("expression_editor.colorize", checked)
|
||||||
}
|
}
|
||||||
icon.name: 'appearance'
|
icon.name: 'appearance'
|
||||||
|
icon.color: sysPalette.buttonText
|
||||||
}
|
}
|
||||||
|
|
||||||
Action {
|
Action {
|
||||||
|
@ -191,6 +196,7 @@ MenuBar {
|
||||||
Helper.setSettingBool("autocompletion.enabled", checked)
|
Helper.setSettingBool("autocompletion.enabled", checked)
|
||||||
}
|
}
|
||||||
icon.name: 'label'
|
icon.name: 'label'
|
||||||
|
icon.color: sysPalette.buttonText
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -236,16 +242,17 @@ MenuBar {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageDialog {
|
Native.MessageDialog {
|
||||||
id: saveUnsavedChangesDialog
|
id: saveUnsavedChangesDialog
|
||||||
title: qsTr("Save unsaved changes?")
|
title: qsTr("Save unsaved changes?")
|
||||||
icon: StandardIcon.Question
|
|
||||||
text: qsTr("This plot contains unsaved changes. By doing this, all unsaved data will be lost. Continue?")
|
text: qsTr("This plot contains unsaved changes. By doing this, all unsaved data will be lost. Continue?")
|
||||||
standardButtons: StandardButton.Yes | StandardButton.No
|
buttons: Native.MessageDialog.Save | Native.MessageDialog.Discard | Native.MessageDialog.Cancel
|
||||||
onYes: Qt.quit()
|
|
||||||
|
onSaveClicked: settings.save()
|
||||||
|
onDiscardClicked: Qt.quit()
|
||||||
}
|
}
|
||||||
|
|
||||||
function showSaveUnsavedChangesDialog() {
|
function openSaveUnsavedChangesDialog() {
|
||||||
saveUnsavedChangesDialog.visible = true
|
saveUnsavedChangesDialog.open()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQml 2.12
|
import QtQml
|
||||||
import QtQuick.Window 2.12
|
import QtQuick.Window
|
||||||
import "../js/objects.js" as Objects
|
import "../js/objects.js" as Objects
|
||||||
import "../js/historylib.js" as HistoryLib
|
import "../js/historylib.js" as HistoryLib
|
||||||
import "../js/history/common.js" as HistoryCommon
|
import "../js/history/common.js" as HistoryCommon
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
||||||
import "../js/utils.js" as Utils
|
import "../js/utils.js" as Utils
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtGraphicalEffects 1.15
|
import Qt5Compat.GraphicalEffects
|
||||||
import "../js/utils.js" as Utils
|
import "../js/utils.js" as Utils
|
||||||
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import "js/objects.js" as Objects
|
import "js/objects.js" as Objects
|
||||||
import "js/utils.js" as Utils
|
import "js/utils.js" as Utils
|
||||||
import "js/mathlib.js" as MathLib
|
import "js/mathlib.js" as MathLib
|
||||||
|
@ -278,7 +278,7 @@ Canvas {
|
||||||
for(var xpow = -maxgradx; xpow <= maxgradx; xpow+=1) {
|
for(var xpow = -maxgradx; xpow <= maxgradx; xpow+=1) {
|
||||||
var textSize = ctx.measureText("10"+Utils.textsup(xpow)).width
|
var textSize = ctx.measureText("10"+Utils.textsup(xpow)).width
|
||||||
if(xpow != 0)
|
if(xpow != 0)
|
||||||
drawVisibleText(ctx, "10"+Utils.textsup(xpow), x2px(Math.pow(10,xpow))-textSize/2, axisxpx+16+(6*(y==0)))
|
drawVisibleText(ctx, "10"+Utils.textsup(xpow), x2px(Math.pow(10,xpow))-textSize/2, axisxpx+16+(6*(xpow==1)))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for(var x = 1; x < drawMaxX; x += 1) {
|
for(var x = 1; x < drawMaxX; x += 1) {
|
||||||
|
@ -308,7 +308,7 @@ Canvas {
|
||||||
Draws an horizontal line at \c x plot coordinate using 2D \c ctx.
|
Draws an horizontal line at \c x plot coordinate using 2D \c ctx.
|
||||||
*/
|
*/
|
||||||
function drawXLine(ctx, x) {
|
function drawXLine(ctx, x) {
|
||||||
if(visible(x, ymax)) {
|
if(isVisible(x, ymax)) {
|
||||||
drawLine(ctx, x2px(x), 0, x2px(x), canvasSize.height)
|
drawLine(ctx, x2px(x), 0, x2px(x), canvasSize.height)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -318,7 +318,7 @@ Canvas {
|
||||||
Draws an vertical line at \c y plot coordinate using 2D \c ctx.
|
Draws an vertical line at \c y plot coordinate using 2D \c ctx.
|
||||||
*/
|
*/
|
||||||
function drawYLine(ctx, y) {
|
function drawYLine(ctx, y) {
|
||||||
if(visible(xmin, y)) {
|
if(isVisible(xmin, y)) {
|
||||||
drawLine(ctx, 0, y2px(y), canvasSize.width, y2px(y))
|
drawLine(ctx, 0, y2px(y), canvasSize.width, y2px(y))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -407,10 +407,10 @@ Canvas {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmlmethod bool LogGraphCanvas::visible(double x, double y)
|
\qmlmethod bool LogGraphCanvas::isVisible(double x, double y)
|
||||||
Checks whether a plot point (\c x, \c y) is visible or not on the canvas.
|
Checks whether a plot point (\c x, \c y) is visible or not on the canvas.
|
||||||
*/
|
*/
|
||||||
function visible(x, y) {
|
function isVisible(x, y) {
|
||||||
return (x2px(x) >= 0 && x2px(x) <= canvasSize.width) && (y2px(y) >= 0 && y2px(y) <= canvasSize.height)
|
return (x2px(x) >= 0 && x2px(x) <= canvasSize.width) && (y2px(y) >= 0 && y2px(y) <= canvasSize.height)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,11 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQml 2.12
|
import QtQml
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import eu.ad5001.MixedMenu 1.1
|
import eu.ad5001.MixedMenu 1.1
|
||||||
import QtQuick.Layouts 1.12
|
import QtQuick.Layouts 1.12
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
// Auto loading all objects.
|
// Auto loading all objects.
|
||||||
import "js/objs/autoload.js" as ALObjects
|
import "js/objs/autoload.js" as ALObjects
|
||||||
|
|
||||||
|
@ -323,10 +323,10 @@ ApplicationWindow {
|
||||||
onTriggered: Qt.quit() // Quit after paint on test build
|
onTriggered: Qt.quit() // Quit after paint on test build
|
||||||
}
|
}
|
||||||
|
|
||||||
onClosing: {
|
onClosing: function(close) {
|
||||||
if(!history.saved) {
|
if(!history.saved) {
|
||||||
close.accepted = false
|
close.accepted = false
|
||||||
appMenu.showSaveUnsavedChangesDialog()
|
appMenu.openSaveUnsavedChangesDialog()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
||||||
import "../../js/objects.js" as Objects
|
import "../../js/objects.js" as Objects
|
||||||
import "../../js/historylib.js" as HistoryLib
|
import "../../js/historylib.js" as HistoryLib
|
||||||
|
|
|
@ -16,10 +16,12 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import QtQuick.Dialogs 1.3 as D
|
import QtQuick.Dialogs as D
|
||||||
|
import Qt.labs.platform as Native
|
||||||
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
||||||
|
import eu.ad5001.LogarithmPlotter.Popup 1.0 as Popup
|
||||||
import "../../js/objects.js" as Objects
|
import "../../js/objects.js" as Objects
|
||||||
import "../../js/objs/common.js" as ObjectsCommons
|
import "../../js/objs/common.js" as ObjectsCommons
|
||||||
import "../../js/historylib.js" as HistoryLib
|
import "../../js/historylib.js" as HistoryLib
|
||||||
|
@ -36,7 +38,7 @@ import "../../js/mathlib.js" as MathLib
|
||||||
|
|
||||||
\sa Loader, ObjectLists
|
\sa Loader, ObjectLists
|
||||||
*/
|
*/
|
||||||
D.Dialog {
|
Popup.BaseDialog {
|
||||||
id: objEditor
|
id: objEditor
|
||||||
/*!
|
/*!
|
||||||
\qmlproperty string EditorDialog::objType
|
\qmlproperty string EditorDialog::objType
|
||||||
|
@ -56,10 +58,21 @@ D.Dialog {
|
||||||
|
|
||||||
title: "LogarithmPlotter"
|
title: "LogarithmPlotter"
|
||||||
width: 350
|
width: 350
|
||||||
height: 400
|
minimumHeight: 400
|
||||||
|
|
||||||
// Disable closing on return/enter, causing issues with autocomplete.
|
// Disable closing on return/enter, causing issues with autocomplete.
|
||||||
onActionChosen: if(action.key == Qt.Key_Enter || action.key == Qt.Key_Return) action.accepted = false
|
// onActionChosen: if(action.key == Qt.Key_Enter || action.key == Qt.Key_Return) action.accepted = false
|
||||||
|
Item {
|
||||||
|
anchors {
|
||||||
|
top: parent.top;
|
||||||
|
left: parent.left;
|
||||||
|
bottom: parent.bottom;
|
||||||
|
right: parent.right;
|
||||||
|
topMargin: margin;
|
||||||
|
leftMargin: margin;
|
||||||
|
bottomMargin: margin;
|
||||||
|
rightMargin: margin;
|
||||||
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
id: dlgTitle
|
id: dlgTitle
|
||||||
|
@ -77,7 +90,7 @@ D.Dialog {
|
||||||
width: objEditor.width - 20
|
width: objEditor.width - 20
|
||||||
spacing: 10
|
spacing: 10
|
||||||
|
|
||||||
D.MessageDialog {
|
Native.MessageDialog {
|
||||||
id: invalidNameDialog
|
id: invalidNameDialog
|
||||||
title: qsTr("LogarithmPlotter - Invalid object name")
|
title: qsTr("LogarithmPlotter - Invalid object name")
|
||||||
text: ""
|
text: ""
|
||||||
|
@ -140,15 +153,16 @@ D.Dialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmlmethod void EditorDialog::show()
|
\qmlmethod void EditorDialog::open()
|
||||||
Shows the editor after the object to be edited is set.
|
Shows the editor after the object to be edited is set.
|
||||||
*/
|
*/
|
||||||
function show() {
|
function open() {
|
||||||
dlgCustomProperties.model = [] // Reset
|
dlgCustomProperties.model = [] // Reset
|
||||||
let objProps = Objects.types[objEditor.objType].properties()
|
let objProps = Objects.types[objEditor.objType].properties()
|
||||||
dlgCustomProperties.model = Object.keys(objProps).map(prop => [prop, objProps[prop]]) // Converted to 2-dimentional array.
|
dlgCustomProperties.model = Object.keys(objProps).map(prop => [prop, objProps[prop]]) // Converted to 2-dimentional array.
|
||||||
objEditor.open()
|
objEditor.show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import "../js/objects.js" as Objects
|
import "../js/objects.js" as Objects
|
||||||
import "../js/historylib.js" as HistoryLib
|
import "../js/historylib.js" as HistoryLib
|
||||||
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
||||||
|
@ -95,7 +95,7 @@ Column {
|
||||||
objectEditor.obj = Objects.currentObjects[modelData][Objects.currentObjects[modelData].length - 1]
|
objectEditor.obj = Objects.currentObjects[modelData][Objects.currentObjects[modelData].length - 1]
|
||||||
objectEditor.objType = modelData
|
objectEditor.objType = modelData
|
||||||
objectEditor.objIndex = Objects.currentObjects[modelData].length - 1
|
objectEditor.objIndex = Objects.currentObjects[modelData].length - 1
|
||||||
objectEditor.show()
|
objectEditor.open()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Dialogs 1.3 as D
|
// import QtQuick.Dialogs 1.3 as D
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
||||||
import eu.ad5001.LogarithmPlotter.ObjectLists.Editor 1.0 as Editor
|
import eu.ad5001.LogarithmPlotter.ObjectLists.Editor 1.0 as Editor
|
||||||
import "../js/objects.js" as Objects
|
import "../js/objects.js" as Objects
|
||||||
|
|
|
@ -16,10 +16,10 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Dialogs 1.3 as D
|
import QtQuick.Dialogs
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import QtQuick.Window 2.12
|
import QtQuick.Window
|
||||||
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
||||||
import "../js/objects.js" as Objects
|
import "../js/objects.js" as Objects
|
||||||
import "../js/historylib.js" as HistoryLib
|
import "../js/historylib.js" as HistoryLib
|
||||||
|
@ -115,7 +115,7 @@ Item {
|
||||||
objEditor.objType = obj.type
|
objEditor.objType = obj.type
|
||||||
objEditor.objIndex = index
|
objEditor.objIndex = index
|
||||||
//objEditor.editingRow = objectRow
|
//objEditor.editingRow = objectRow
|
||||||
objEditor.show()
|
objEditor.open()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -193,9 +193,9 @@ Item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
D.ColorDialog {
|
ColorDialog {
|
||||||
id: pickColor
|
id: pickColor
|
||||||
color: obj.color
|
selectedColor: obj.color
|
||||||
title: qsTr("Pick new color for %1 %2").arg(obj.constructor.displayType()).arg(obj.name)
|
title: qsTr("Pick new color for %1 %2").arg(obj.constructor.displayType()).arg(obj.name)
|
||||||
onAccepted: {
|
onAccepted: {
|
||||||
history.addToHistory(new HistoryLib.ColorChanged(
|
history.addToHistory(new HistoryLib.ColorChanged(
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import "js/objects.js" as Objects
|
import "js/objects.js" as Objects
|
||||||
import "js/mathlib.js" as MathLib
|
import "js/mathlib.js" as MathLib
|
||||||
import "js/historylib.js" as HistoryLib
|
import "js/historylib.js" as HistoryLib
|
||||||
|
@ -90,7 +90,7 @@ Item {
|
||||||
hoverEnabled: parent.visible
|
hoverEnabled: parent.visible
|
||||||
cursorShape: Qt.CrossCursor
|
cursorShape: Qt.CrossCursor
|
||||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
||||||
onClicked: {
|
onClicked: function(mouse) {
|
||||||
if(mouse.button == Qt.LeftButton) { // Validate
|
if(mouse.button == Qt.LeftButton) { // Validate
|
||||||
let newValueX = !parent.pickX ? null : parseValue(picked.mouseX.toString(), objType, propertyX)
|
let newValueX = !parent.pickX ? null : parseValue(picked.mouseX.toString(), objType, propertyX)
|
||||||
let newValueY = !parent.pickY ? null : parseValue(picked.mouseY.toString(), objType, propertyY)
|
let newValueY = !parent.pickY ? null : parseValue(picked.mouseY.toString(), objType, propertyY)
|
||||||
|
|
|
@ -16,9 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Dialogs 1.3 as D
|
import QtQuick.Controls
|
||||||
import QtQuick.Controls 2.12
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmltype About
|
\qmltype About
|
||||||
|
@ -27,11 +26,23 @@ import QtQuick.Controls 2.12
|
||||||
|
|
||||||
\sa LogarithmPlotter
|
\sa LogarithmPlotter
|
||||||
*/
|
*/
|
||||||
D.Dialog {
|
BaseDialog {
|
||||||
id: about
|
id: about
|
||||||
title: qsTr("About LogarithmPlotter")
|
title: qsTr("About LogarithmPlotter")
|
||||||
width: 400
|
width: 400
|
||||||
height: 600
|
minimumHeight: 600
|
||||||
|
|
||||||
|
Item {
|
||||||
|
anchors {
|
||||||
|
top: parent.top;
|
||||||
|
left: parent.left;
|
||||||
|
bottom: parent.bottom;
|
||||||
|
right: parent.right;
|
||||||
|
topMargin: margin;
|
||||||
|
leftMargin: margin;
|
||||||
|
bottomMargin: margin;
|
||||||
|
rightMargin: margin;
|
||||||
|
}
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: logo
|
id: logo
|
||||||
|
@ -102,6 +113,7 @@ You should have received a copy of the GNU General Public License along with thi
|
||||||
}
|
}
|
||||||
|
|
||||||
Row {
|
Row {
|
||||||
|
id: buttonsRow
|
||||||
anchors.top: copyrightInfos.bottom
|
anchors.top: copyrightInfos.bottom
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
anchors.topMargin: 10
|
anchors.topMargin: 10
|
||||||
|
@ -121,4 +133,5 @@ You should have received a copy of the GNU General Public License along with thi
|
||||||
onClicked: Qt.openUrlExternally('https://apps.ad5001.eu/logarithmplotter/')
|
onClicked: Qt.openUrlExternally('https://apps.ad5001.eu/logarithmplotter/')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
/*!
|
/*!
|
||||||
\qmltype Alert
|
\qmltype Alert
|
||||||
\inqmlmodule eu.ad5001.LogarithmPlotter.Popup
|
\inqmlmodule eu.ad5001.LogarithmPlotter.Popup
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
/**
|
||||||
|
* LogarithmPlotter - 2D plotter software to make BODE plots, sequences and distribution functions.
|
||||||
|
* Copyright (C) 2022 Ad5001
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\qmltype BaseDialog
|
||||||
|
\inqmlmodule eu.ad5001.LogarithmPlotter.Popup
|
||||||
|
\brief Base dialog window in replacement of Dialog Popup from Qt 5.
|
||||||
|
|
||||||
|
\sa LogarithmPlotter
|
||||||
|
*/
|
||||||
|
|
||||||
|
Window {
|
||||||
|
color: sysPalette.window
|
||||||
|
visible: false;
|
||||||
|
flags: Qt.Dialog | Qt.Popup | Qt.MSWindowsFixedSizeDialogHint
|
||||||
|
modality: Qt.WindowModal
|
||||||
|
minimumWidth: width
|
||||||
|
maximumWidth: width
|
||||||
|
height: minimumHeight
|
||||||
|
// maximumHeight: contentItem.implicitHeight + 2*margin
|
||||||
|
property int margin: 10
|
||||||
|
|
||||||
|
Button {
|
||||||
|
id: closeButton
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottomMargin: margin
|
||||||
|
anchors.rightMargin: margin
|
||||||
|
text: qsTr('Close')
|
||||||
|
onClicked: close()
|
||||||
|
}
|
||||||
|
|
||||||
|
function open() {
|
||||||
|
show()
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmltype Changelog
|
\qmltype Changelog
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick.Dialogs 1.3 as D
|
import Qt.labs.platform
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmltype FileDialog
|
\qmltype FileDialog
|
||||||
|
@ -25,7 +25,7 @@ import QtQuick.Dialogs 1.3 as D
|
||||||
|
|
||||||
\sa LogarithmPlotter, Settings
|
\sa LogarithmPlotter, Settings
|
||||||
*/
|
*/
|
||||||
D.FileDialog {
|
FileDialog {
|
||||||
id: fileDialog
|
id: fileDialog
|
||||||
|
|
||||||
property bool exportMode: false
|
property bool exportMode: false
|
||||||
|
@ -33,6 +33,6 @@ D.FileDialog {
|
||||||
title: exportMode ? qsTr("Export Logarithm Plot file") : qsTr("Import Logarithm Plot file")
|
title: exportMode ? qsTr("Export Logarithm Plot file") : qsTr("Import Logarithm Plot file")
|
||||||
nameFilters: ["Logarithm Plot File (*.lpf)", "All files (*)"]
|
nameFilters: ["Logarithm Plot File (*.lpf)", "All files (*)"]
|
||||||
|
|
||||||
folder: shortcuts.documents
|
defaultSuffix: 'lpf'
|
||||||
selectExisting: !exportMode
|
fileMode: exportMode ? FileDialog.SaveFile : FileDialog.OpenFile
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import "../js/math/latex.js" as Latex
|
import "../js/math/latex.js" as Latex
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmltype InsertCharacter
|
\qmltype InsertCharacter
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Dialogs 1.3 as D
|
import QtQuick.Dialogs
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmltype ThanksTo
|
\qmltype ThanksTo
|
||||||
|
@ -27,14 +27,24 @@ import QtQuick.Controls 2.12
|
||||||
|
|
||||||
\sa LogarithmPlotter
|
\sa LogarithmPlotter
|
||||||
*/
|
*/
|
||||||
D.Dialog {
|
BaseDialog {
|
||||||
id: about
|
id: about
|
||||||
title: qsTr("Thanks and Contributions - LogarithmPlotter")
|
title: qsTr("Thanks and Contributions - LogarithmPlotter")
|
||||||
width: 400
|
width: 450
|
||||||
height: 600
|
minimumHeight: 710
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
anchors.fill: parent
|
anchors {
|
||||||
|
top: parent.top;
|
||||||
|
left: parent.left;
|
||||||
|
bottom: parent.bottom;
|
||||||
|
right: parent.right;
|
||||||
|
topMargin: margin;
|
||||||
|
leftMargin: margin;
|
||||||
|
bottomMargin: margin;
|
||||||
|
rightMargin: margin;
|
||||||
|
}
|
||||||
|
|
||||||
spacing: 10
|
spacing: 10
|
||||||
|
|
||||||
ListView {
|
ListView {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
module eu.ad5001.LogarithmPlotter.Popup
|
module eu.ad5001.LogarithmPlotter.Popup
|
||||||
|
|
||||||
|
BaseDialog 1.0 BaseDialog.qml
|
||||||
About 1.0 About.qml
|
About 1.0 About.qml
|
||||||
Alert 1.0 Alert.qml
|
Alert 1.0 Alert.qml
|
||||||
FileDialog 1.0 FileDialog.qml
|
FileDialog 1.0 FileDialog.qml
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmltype AutocompletionCategory
|
\qmltype AutocompletionCategory
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmltype ComboBoxSetting
|
\qmltype ComboBoxSetting
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Dialogs 1.3 as D
|
import Qt.labs.platform as Native
|
||||||
import eu.ad5001.LogarithmPlotter.Popup 1.0 as P
|
import eu.ad5001.LogarithmPlotter.Popup 1.0 as P
|
||||||
import "../js/mathlib.js" as MathLib
|
import "../js/mathlib.js" as MathLib
|
||||||
import "../js/utils.js" as Utils
|
import "../js/utils.js" as Utils
|
||||||
|
@ -131,7 +131,7 @@ Item {
|
||||||
visible: control.label != ""
|
visible: control.label != ""
|
||||||
}
|
}
|
||||||
|
|
||||||
D.MessageDialog {
|
Native.MessageDialog {
|
||||||
id: parsingErrorDialog
|
id: parsingErrorDialog
|
||||||
title: qsTranslate("expression", "LogarithmPlotter - Parsing error")
|
title: qsTranslate("expression", "LogarithmPlotter - Parsing error")
|
||||||
text: ""
|
text: ""
|
||||||
|
@ -339,7 +339,7 @@ Item {
|
||||||
property string objectName: isEnteringProperty ?
|
property string objectName: isEnteringProperty ?
|
||||||
(parent.currentToken.dot ? parent.previousToken.value : parent.previousToken2.value)
|
(parent.currentToken.dot ? parent.previousToken.value : parent.previousToken2.value)
|
||||||
: ""
|
: ""
|
||||||
property bool doesObjectExist: isEnteringProperty && objectName in Objects.currentObjectsByName
|
property bool doesObjectExist: isEnteringProperty && (objectName in Objects.currentObjectsByName)
|
||||||
property var objectProperties: doesObjectExist ?
|
property var objectProperties: doesObjectExist ?
|
||||||
Objects.currentObjectsByName[objectName].constructor.properties() :
|
Objects.currentObjectsByName[objectName].constructor.properties() :
|
||||||
{}
|
{}
|
||||||
|
|
|
@ -15,9 +15,9 @@
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Window 2.12
|
import QtQuick.Window
|
||||||
import QtGraphicalEffects 1.0
|
import Qt5Compat.GraphicalEffects
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmltype Icon
|
\qmltype Icon
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import QtQml.Models 2.12
|
import QtQml.Models
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\qmltype ListSetting
|
\qmltype ListSetting
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import eu.ad5001.LogarithmPlotter.Popup 1.0 as Popup
|
import eu.ad5001.LogarithmPlotter.Popup 1.0 as Popup
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import QtQuick.Controls 2.12
|
import QtQuick.Controls
|
||||||
import QtQuick 2.12
|
import QtQuick
|
||||||
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
|
||||||
import eu.ad5001.LogarithmPlotter.Popup 1.0 as Popup
|
import eu.ad5001.LogarithmPlotter.Popup 1.0 as Popup
|
||||||
import "js/utils.js" as Utils
|
import "js/utils.js" as Utils
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
from os import path, environ, makedirs
|
from os import path, environ, makedirs
|
||||||
from platform import system
|
from platform import system
|
||||||
from json import load, dumps
|
from json import load, dumps
|
||||||
from PySide2.QtCore import QLocale, QTranslator
|
from PySide6.QtCore import QLocale, QTranslator
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_SETTINGS = {
|
DEFAULT_SETTINGS = {
|
||||||
|
|
|
@ -16,11 +16,11 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from PySide2.QtWidgets import QMessageBox, QApplication
|
from PySide6.QtWidgets import QMessageBox, QApplication
|
||||||
from PySide2.QtCore import QRunnable, QThreadPool, QThread, QObject, Signal, Slot, QCoreApplication
|
from PySide6.QtCore import QRunnable, QThreadPool, QThread, QObject, Signal, Slot, QCoreApplication
|
||||||
from PySide2.QtQml import QQmlApplicationEngine
|
from PySide6.QtQml import QQmlApplicationEngine
|
||||||
from PySide2.QtGui import QImage
|
from PySide6.QtGui import QImage
|
||||||
from PySide2 import __version__ as PySide2_version
|
from PySide6 import __version__ as PySide6_version
|
||||||
|
|
||||||
from os import chdir, path
|
from os import chdir, path
|
||||||
from json import loads
|
from json import loads
|
||||||
|
@ -142,9 +142,9 @@ class Helper(QObject):
|
||||||
@Slot(result=str)
|
@Slot(result=str)
|
||||||
def getDebugInfos(self):
|
def getDebugInfos(self):
|
||||||
"""
|
"""
|
||||||
Returns the version info about Qt, PySide2 & Python
|
Returns the version info about Qt, PySide6 & Python
|
||||||
"""
|
"""
|
||||||
return QCoreApplication.translate('main',"Built with PySide2 (Qt) v{} and python v{}").format(PySide2_version, sys_version.split("\n")[0])
|
return QCoreApplication.translate('main',"Built with PySide6 (Qt) v{} and python v{}").format(PySide6_version, sys_version.split("\n")[0])
|
||||||
|
|
||||||
@Slot()
|
@Slot()
|
||||||
def fetchChangelog(self):
|
def fetchChangelog(self):
|
||||||
|
|
|
@ -16,9 +16,9 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from PySide2.QtCore import QObject, Slot, Property, QCoreApplication
|
from PySide6.QtCore import QObject, Slot, Property, QCoreApplication
|
||||||
from PySide2.QtGui import QImage, QColor
|
from PySide6.QtGui import QImage, QColor
|
||||||
from PySide2.QtWidgets import QApplication, QMessageBox
|
from PySide6.QtWidgets import QApplication, QMessageBox
|
||||||
|
|
||||||
from os import path, remove
|
from os import path, remove
|
||||||
from string import Template
|
from string import Template
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
# This file contains stuff for native interactions with each OS.
|
# This file contains stuff for native interactions with each OS.
|
||||||
|
|
||||||
from PySide2.QtCore import QObject, QEvent
|
from PySide6.QtCore import QObject, QEvent
|
||||||
|
|
||||||
# On macOS, opening a file through finder can only be fetched through the
|
# On macOS, opening a file through finder can only be fetched through the
|
||||||
# QFileOpenEvent and NOT throught command line parameters.
|
# QFileOpenEvent and NOT throught command line parameters.
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from PySide2.QtCore import QRunnable, QThreadPool, QThread, QObject, Signal, QCoreApplication
|
from PySide6.QtCore import QRunnable, QThreadPool, QThread, QObject, Signal, QCoreApplication
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
from urllib.error import HTTPError, URLError
|
from urllib.error import HTTPError, URLError
|
||||||
from sys import argv
|
from sys import argv
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -122,7 +122,7 @@ if sys.platform == 'linux':
|
||||||
os.remove(os.environ["PREFIX"] + '/icons/hicolor/scalable/apps/logplotter.svg')
|
os.remove(os.environ["PREFIX"] + '/icons/hicolor/scalable/apps/logplotter.svg')
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
install_requires=([] if "FLATPAK_INSTALL" in os.environ else ["PySide2"]),
|
install_requires=([] if "FLATPAK_INSTALL" in os.environ else ["PySide6"]),
|
||||||
python_requires='>=3.8',
|
python_requires='>=3.8',
|
||||||
|
|
||||||
name='logarithmplotter',
|
name='logarithmplotter',
|
||||||
|
|
Loading…
Reference in a new issue