diff --git a/LogarithmPlotter/logarithmplotter.py b/LogarithmPlotter/logarithmplotter.py index 3a8051c..c5e05e5 100644 --- a/LogarithmPlotter/logarithmplotter.py +++ b/LogarithmPlotter/logarithmplotter.py @@ -18,10 +18,10 @@ from time import time -from PySide2.QtWidgets import QApplication -from PySide2.QtQml import QQmlApplicationEngine -from PySide2.QtCore import Qt, QTranslator, QLocale -from PySide2.QtGui import QIcon +from PySide6.QtWidgets import QApplication +from PySide6.QtQml import QQmlApplicationEngine +from PySide6.QtCore import Qt, QTranslator, QLocale +from PySide6.QtGui import QIcon from tempfile import TemporaryDirectory from os import getcwd, chdir, environ, path, remove, close @@ -52,7 +52,7 @@ config.init() def get_linux_theme(): des = { - "KDE": "org.kde.desktop", + "KDE": "default", "gnome": "default", "lxqt": "fusion", "mate": "fusion", diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/AppMenuBar.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/AppMenuBar.qml index a26dd0a..2366fe0 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/AppMenuBar.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/AppMenuBar.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Dialogs 1.3 +import QtQuick +import Qt.labs.platform as Native //import QtQuick.Controls 2.15 import eu.ad5001.MixedMenu 1.1 import "js/objects.js" as Objects @@ -133,6 +133,7 @@ MenuBar { checked: Helper.getSettingBool("check_for_updates") onTriggered: Helper.setSettingBool("check_for_updates", checked) icon.name: 'update' + icon.color: sysPalette.buttonText } Action { @@ -142,6 +143,7 @@ MenuBar { checked: Helper.getSettingBool("reset_redo_stack") onTriggered: Helper.setSettingBool("reset_redo_stack", checked) icon.name: 'timeline' + icon.color: sysPalette.buttonText } Action { @@ -155,6 +157,7 @@ MenuBar { drawCanvas.requestPaint() } icon.name: 'Expression' + icon.color: sysPalette.buttonText } Menu { @@ -169,6 +172,7 @@ MenuBar { Helper.setSettingBool("expression_editor.autoclose", checked) } icon.name: 'Text' + icon.color: sysPalette.buttonText } Action { @@ -180,6 +184,7 @@ MenuBar { Helper.setSettingBool("expression_editor.colorize", checked) } icon.name: 'appearance' + icon.color: sysPalette.buttonText } Action { @@ -191,6 +196,7 @@ MenuBar { Helper.setSettingBool("autocompletion.enabled", checked) } icon.name: 'label' + icon.color: sysPalette.buttonText } } } @@ -236,16 +242,17 @@ MenuBar { } } - MessageDialog { + Native.MessageDialog { id: saveUnsavedChangesDialog 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?") - standardButtons: StandardButton.Yes | StandardButton.No - onYes: Qt.quit() + buttons: Native.MessageDialog.Save | Native.MessageDialog.Discard | Native.MessageDialog.Cancel + + onSaveClicked: settings.save() + onDiscardClicked: Qt.quit() } - function showSaveUnsavedChangesDialog() { - saveUnsavedChangesDialog.visible = true + function openSaveUnsavedChangesDialog() { + saveUnsavedChangesDialog.open() } } diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/History.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/History.qml index bdbc768..d3cc112 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/History.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/History.qml @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQml 2.12 -import QtQuick.Window 2.12 +import QtQuick +import QtQml +import QtQuick.Window import "../js/objects.js" as Objects import "../js/historylib.js" as HistoryLib import "../js/history/common.js" as HistoryCommon diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryBrowser.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryBrowser.qml index c1f73a4..554f135 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryBrowser.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryBrowser.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick.Controls 2.12 -import QtQuick 2.12 +import QtQuick.Controls +import QtQuick import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting import "../js/utils.js" as Utils diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryItem.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryItem.qml index 44397af..d679907 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryItem.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryItem.qml @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -import QtQuick.Controls 2.12 -import QtQuick 2.12 -import QtGraphicalEffects 1.15 +import QtQuick.Controls +import QtQuick +import Qt5Compat.GraphicalEffects import "../js/utils.js" as Utils import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogGraphCanvas.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogGraphCanvas.qml index e35950a..52055b9 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogGraphCanvas.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogGraphCanvas.qml @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -import QtQuick 2.12 +import QtQuick import "js/objects.js" as Objects import "js/utils.js" as Utils import "js/mathlib.js" as MathLib @@ -278,7 +278,7 @@ Canvas { for(var xpow = -maxgradx; xpow <= maxgradx; xpow+=1) { var textSize = ctx.measureText("10"+Utils.textsup(xpow)).width 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 { 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. */ function drawXLine(ctx, x) { - if(visible(x, ymax)) { + if(isVisible(x, ymax)) { 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. */ function drawYLine(ctx, y) { - if(visible(xmin, y)) { + if(isVisible(xmin, 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. */ - function visible(x, y) { + function isVisible(x, y) { return (x2px(x) >= 0 && x2px(x) <= canvasSize.width) && (y2px(y) >= 0 && y2px(y) <= canvasSize.height) } diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogarithmPlotter.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogarithmPlotter.qml index 0c71421..5d6feea 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogarithmPlotter.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogarithmPlotter.qml @@ -16,11 +16,11 @@ * along with this program. If not, see . */ -import QtQml 2.12 -import QtQuick.Controls 2.12 +import QtQml +import QtQuick.Controls import eu.ad5001.MixedMenu 1.1 import QtQuick.Layouts 1.12 -import QtQuick 2.12 +import QtQuick // Auto loading all objects. import "js/objs/autoload.js" as ALObjects @@ -323,10 +323,10 @@ ApplicationWindow { onTriggered: Qt.quit() // Quit after paint on test build } - onClosing: { + onClosing: function(close) { if(!history.saved) { close.accepted = false - appMenu.showSaveUnsavedChangesDialog() + appMenu.openSaveUnsavedChangesDialog() } } diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/CustomPropertyList.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/CustomPropertyList.qml index 18da95f..cb49fe2 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/CustomPropertyList.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/CustomPropertyList.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Controls 2.12 +import QtQuick +import QtQuick.Controls import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting import "../../js/objects.js" as Objects import "../../js/historylib.js" as HistoryLib diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/Dialog.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/Dialog.qml index 3297139..d83bc10 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/Dialog.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/Dialog.qml @@ -16,10 +16,12 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Controls 2.12 -import QtQuick.Dialogs 1.3 as D +import QtQuick +import QtQuick.Controls +import QtQuick.Dialogs as D +import Qt.labs.platform as Native 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/objs/common.js" as ObjectsCommons import "../../js/historylib.js" as HistoryLib @@ -36,7 +38,7 @@ import "../../js/mathlib.js" as MathLib \sa Loader, ObjectLists */ -D.Dialog { +Popup.BaseDialog { id: objEditor /*! \qmlproperty string EditorDialog::objType @@ -56,99 +58,111 @@ D.Dialog { title: "LogarithmPlotter" width: 350 - height: 400 + minimumHeight: 400 // Disable closing on return/enter, causing issues with autocomplete. - onActionChosen: if(action.key == Qt.Key_Enter || action.key == Qt.Key_Return) action.accepted = false - - Label { - id: dlgTitle - anchors.left: parent.left - anchors.top: parent.top - verticalAlignment: TextInput.AlignVCenter - text: qsTr("Edit properties of %1 %2").arg(Objects.types[objEditor.objType].displayType()).arg(objEditor.obj.name) - font.pixelSize: 20 - color: sysPalette.windowText - } - - Column { - id: dlgProperties - anchors.top: dlgTitle.bottom - width: objEditor.width - 20 - spacing: 10 - - D.MessageDialog { - id: invalidNameDialog - title: qsTr("LogarithmPlotter - Invalid object name") - text: "" - function showDialog(objectName) { - text = qsTr("An object with the name '%1' already exists.").arg(objectName) - open() - } + // 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; } - - Setting.TextSetting { - id: nameProperty - height: 30 - label: qsTr("Name") - icon: "common/label.svg" - width: dlgProperties.width - value: objEditor.obj.name - onChanged: function(newValue) { - let newName = Utils.parseName(newValue) - if(newName != '' && objEditor.obj.name != newName) { - if(newName in Objects.currentObjectsByName) { - invalidNameDialog.showDialog(newName) - } else { - history.addToHistory(new HistoryLib.NameChanged( - objEditor.obj.name, objEditor.objType, newName - )) - Objects.renameObject(obj.name, newName) - objEditor.obj = Objects.currentObjects[objEditor.objType][objEditor.objIndex] + + Label { + id: dlgTitle + anchors.left: parent.left + anchors.top: parent.top + verticalAlignment: TextInput.AlignVCenter + text: qsTr("Edit properties of %1 %2").arg(Objects.types[objEditor.objType].displayType()).arg(objEditor.obj.name) + font.pixelSize: 20 + color: sysPalette.windowText + } + + Column { + id: dlgProperties + anchors.top: dlgTitle.bottom + width: objEditor.width - 20 + spacing: 10 + + Native.MessageDialog { + id: invalidNameDialog + title: qsTr("LogarithmPlotter - Invalid object name") + text: "" + function showDialog(objectName) { + text = qsTr("An object with the name '%1' already exists.").arg(objectName) + open() + } + } + + Setting.TextSetting { + id: nameProperty + height: 30 + label: qsTr("Name") + icon: "common/label.svg" + width: dlgProperties.width + value: objEditor.obj.name + onChanged: function(newValue) { + let newName = Utils.parseName(newValue) + if(newName != '' && objEditor.obj.name != newName) { + if(newName in Objects.currentObjectsByName) { + invalidNameDialog.showDialog(newName) + } else { + history.addToHistory(new HistoryLib.NameChanged( + objEditor.obj.name, objEditor.objType, newName + )) + Objects.renameObject(obj.name, newName) + objEditor.obj = Objects.currentObjects[objEditor.objType][objEditor.objIndex] + objectListList.update() + } + } + } + } + + Setting.ComboBoxSetting { + id: labelContentProperty + height: 30 + width: dlgProperties.width + label: qsTr("Label content") + model: [qsTr("null"), qsTr("name"), qsTr("name + value")] + property var idModel: ["null", "name", "name + value"] + icon: "common/label.svg" + currentIndex: idModel.indexOf(objEditor.obj.labelContent) + onActivated: function(newIndex) { + if(idModel[newIndex] != objEditor.obj.labelContent) { + objEditor.obj.labelContent = idModel[newIndex] + objEditor.obj.update() objectListList.update() } } } - } - - Setting.ComboBoxSetting { - id: labelContentProperty - height: 30 - width: dlgProperties.width - label: qsTr("Label content") - model: [qsTr("null"), qsTr("name"), qsTr("name + value")] - property var idModel: ["null", "name", "name + value"] - icon: "common/label.svg" - currentIndex: idModel.indexOf(objEditor.obj.labelContent) - onActivated: function(newIndex) { - if(idModel[newIndex] != objEditor.obj.labelContent) { - objEditor.obj.labelContent = idModel[newIndex] - objEditor.obj.update() + + // Dynamic properties + CustomPropertyList { + id: dlgCustomProperties + obj: objEditor.obj + + onChanged: { + obj.update() objectListList.update() } } } - - // Dynamic properties - CustomPropertyList { - id: dlgCustomProperties - obj: objEditor.obj - - onChanged: { - obj.update() - objectListList.update() - } - } } /*! - \qmlmethod void EditorDialog::show() + \qmlmethod void EditorDialog::open() Shows the editor after the object to be edited is set. */ - function show() { + function open() { dlgCustomProperties.model = [] // Reset let objProps = Objects.types[objEditor.objType].properties() dlgCustomProperties.model = Object.keys(objProps).map(prop => [prop, objProps[prop]]) // Converted to 2-dimentional array. - objEditor.open() + objEditor.show() } } diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectCreationGrid.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectCreationGrid.qml index bba2622..0c7bd98 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectCreationGrid.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectCreationGrid.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Controls 2.12 +import QtQuick +import QtQuick.Controls import "../js/objects.js" as Objects import "../js/historylib.js" as HistoryLib 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.objType = modelData objectEditor.objIndex = Objects.currentObjects[modelData].length - 1 - objectEditor.show() + objectEditor.open() } } } diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectLists.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectLists.qml index 99e08a7..6e3a397 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectLists.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectLists.qml @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Dialogs 1.3 as D -import QtQuick.Controls 2.12 +import QtQuick +// import QtQuick.Dialogs 1.3 as D +import QtQuick.Controls import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting import eu.ad5001.LogarithmPlotter.ObjectLists.Editor 1.0 as Editor import "../js/objects.js" as Objects diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectRow.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectRow.qml index ca02fe9..24e4f25 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectRow.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectRow.qml @@ -16,10 +16,10 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Dialogs 1.3 as D -import QtQuick.Controls 2.12 -import QtQuick.Window 2.12 +import QtQuick +import QtQuick.Dialogs +import QtQuick.Controls +import QtQuick.Window import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting import "../js/objects.js" as Objects import "../js/historylib.js" as HistoryLib @@ -115,7 +115,7 @@ Item { objEditor.objType = obj.type objEditor.objIndex = index //objEditor.editingRow = objectRow - objEditor.show() + objEditor.open() } } } @@ -193,9 +193,9 @@ Item { } } - D.ColorDialog { + ColorDialog { id: pickColor - color: obj.color + selectedColor: obj.color title: qsTr("Pick new color for %1 %2").arg(obj.constructor.displayType()).arg(obj.name) onAccepted: { history.addToHistory(new HistoryLib.ColorChanged( diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/PickLocationOverlay.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/PickLocationOverlay.qml index 5460160..a2898d7 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/PickLocationOverlay.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/PickLocationOverlay.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Controls 2.12 +import QtQuick +import QtQuick.Controls import "js/objects.js" as Objects import "js/mathlib.js" as MathLib import "js/historylib.js" as HistoryLib @@ -90,7 +90,7 @@ Item { hoverEnabled: parent.visible cursorShape: Qt.CrossCursor acceptedButtons: Qt.LeftButton | Qt.RightButton - onClicked: { + onClicked: function(mouse) { if(mouse.button == Qt.LeftButton) { // Validate let newValueX = !parent.pickX ? null : parseValue(picked.mouseX.toString(), objType, propertyX) let newValueY = !parent.pickY ? null : parseValue(picked.mouseY.toString(), objType, propertyY) diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/About.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/About.qml index 7e1687c..a47a2ca 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/About.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/About.qml @@ -16,9 +16,8 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Dialogs 1.3 as D -import QtQuick.Controls 2.12 +import QtQuick +import QtQuick.Controls /*! \qmltype About @@ -27,98 +26,112 @@ import QtQuick.Controls 2.12 \sa LogarithmPlotter */ -D.Dialog { +BaseDialog { id: about title: qsTr("About LogarithmPlotter") width: 400 - height: 600 + minimumHeight: 600 - Image { - id: logo - source: "../icons/logarithmplotter.svg" - sourceSize.width: 64 - sourceSize.height: 64 - width: 64 - height: 64 - anchors.horizontalCenter: parent.horizontalCenter - anchors.rightMargin: width/2 - anchors.top: parent.top - anchors.topMargin: 10 - } - - Label { - id: appName - anchors.top: logo.bottom - anchors.left: parent.left - anchors.topMargin: 10 - horizontalAlignment: Text.AlignHCenter - width: parent.width - wrapMode: Text.WordWrap - font.pixelSize: 25 - text: qsTr("LogarithmPlotter v%1").arg(Helper.getVersion()) - } - - Label { - id: description - anchors.top: appName.bottom - anchors.left: parent.left - anchors.topMargin: 10 - horizontalAlignment: Text.AlignHCenter - width: parent.width - wrapMode: Text.WordWrap - font.pixelSize: 18 - text: qsTr("2D plotter software to make BODE plots, sequences and repartition functions.") - } - - Label { - id: debugInfos - anchors.top: description.bottom - anchors.left: parent.left - anchors.topMargin: 10 - horizontalAlignment: Text.AlignHCenter - width: parent.width - wrapMode: Text.WordWrap - font.pixelSize: 14 - text: Helper.getDebugInfos() - } - - Label { - id: copyrightInfos - anchors.top: debugInfos.bottom - anchors.horizontalCenter: parent.horizontalCenter - anchors.topMargin: 10 - width: Math.min(410, parent.width) - wrapMode: Text.WordWrap - textFormat: Text.RichText - font.pixelSize: 13 - text: "Copyright © 2022 Ad5001 <mail@ad5001.eu>
+ Item { + anchors { + top: parent.top; + left: parent.left; + bottom: parent.bottom; + right: parent.right; + topMargin: margin; + leftMargin: margin; + bottomMargin: margin; + rightMargin: margin; + } + + Image { + id: logo + source: "../icons/logarithmplotter.svg" + sourceSize.width: 64 + sourceSize.height: 64 + width: 64 + height: 64 + anchors.horizontalCenter: parent.horizontalCenter + anchors.rightMargin: width/2 + anchors.top: parent.top + anchors.topMargin: 10 + } + + Label { + id: appName + anchors.top: logo.bottom + anchors.left: parent.left + anchors.topMargin: 10 + horizontalAlignment: Text.AlignHCenter + width: parent.width + wrapMode: Text.WordWrap + font.pixelSize: 25 + text: qsTr("LogarithmPlotter v%1").arg(Helper.getVersion()) + } + + Label { + id: description + anchors.top: appName.bottom + anchors.left: parent.left + anchors.topMargin: 10 + horizontalAlignment: Text.AlignHCenter + width: parent.width + wrapMode: Text.WordWrap + font.pixelSize: 18 + text: qsTr("2D plotter software to make BODE plots, sequences and repartition functions.") + } + + Label { + id: debugInfos + anchors.top: description.bottom + anchors.left: parent.left + anchors.topMargin: 10 + horizontalAlignment: Text.AlignHCenter + width: parent.width + wrapMode: Text.WordWrap + font.pixelSize: 14 + text: Helper.getDebugInfos() + } + + Label { + id: copyrightInfos + anchors.top: debugInfos.bottom + anchors.horizontalCenter: parent.horizontalCenter + anchors.topMargin: 10 + width: Math.min(410, parent.width) + wrapMode: Text.WordWrap + textFormat: Text.RichText + font.pixelSize: 13 + text: "Copyright © 2022 Ad5001 <mail@ad5001.eu>

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 http://www.gnu.org/licenses/." - onLinkActivated: Qt.openUrlExternally(link) - } - - Row { - anchors.top: copyrightInfos.bottom - anchors.horizontalCenter: parent.horizontalCenter - anchors.topMargin: 10 - spacing: 5 - - Button { - id: openIssueButton - text: qsTr('Report a bug') - icon.name: 'tools-report-bug' - onClicked: Qt.openUrlExternally('https://git.ad5001.eu/Ad5001/LogarithmPlotter') + onLinkActivated: Qt.openUrlExternally(link) } - Button { - id: officialWebsiteButton - text: qsTr('Official website') - icon.name: 'web-browser' - onClicked: Qt.openUrlExternally('https://apps.ad5001.eu/logarithmplotter/') + Row { + id: buttonsRow + anchors.top: copyrightInfos.bottom + anchors.horizontalCenter: parent.horizontalCenter + anchors.topMargin: 10 + spacing: 5 + + Button { + id: openIssueButton + text: qsTr('Report a bug') + icon.name: 'tools-report-bug' + onClicked: Qt.openUrlExternally('https://git.ad5001.eu/Ad5001/LogarithmPlotter') + } + + Button { + id: officialWebsiteButton + text: qsTr('Official website') + icon.name: 'web-browser' + onClicked: Qt.openUrlExternally('https://apps.ad5001.eu/logarithmplotter/') + } } } } diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Alert.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Alert.qml index 4b54697..e27f243 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Alert.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Alert.qml @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -import QtQuick 2.12 +import QtQuick /*! \qmltype Alert \inqmlmodule eu.ad5001.LogarithmPlotter.Popup diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/BaseDialog.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/BaseDialog.qml new file mode 100644 index 0000000..d96440e --- /dev/null +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/BaseDialog.qml @@ -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 . + */ + +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() + } +} diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Changelog.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Changelog.qml index 0bf9247..4052662 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Changelog.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Changelog.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Controls 2.12 +import QtQuick +import QtQuick.Controls /*! \qmltype Changelog diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/FileDialog.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/FileDialog.qml index dc5c8c8..ad967c0 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/FileDialog.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/FileDialog.qml @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -import QtQuick.Dialogs 1.3 as D +import Qt.labs.platform /*! \qmltype FileDialog @@ -25,7 +25,7 @@ import QtQuick.Dialogs 1.3 as D \sa LogarithmPlotter, Settings */ -D.FileDialog { +FileDialog { id: fileDialog property bool exportMode: false @@ -33,6 +33,6 @@ D.FileDialog { title: exportMode ? qsTr("Export Logarithm Plot file") : qsTr("Import Logarithm Plot file") nameFilters: ["Logarithm Plot File (*.lpf)", "All files (*)"] - folder: shortcuts.documents - selectExisting: !exportMode + defaultSuffix: 'lpf' + fileMode: exportMode ? FileDialog.SaveFile : FileDialog.OpenFile } diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/GreetScreen.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/GreetScreen.qml index 0eb70ac..72ca715 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/GreetScreen.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/GreetScreen.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Controls 2.12 +import QtQuick +import QtQuick.Controls import "../js/math/latex.js" as Latex /*! diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/InsertCharacter.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/InsertCharacter.qml index bbeb3e0..a4d2f4c 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/InsertCharacter.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/InsertCharacter.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick.Controls 2.12 -import QtQuick 2.12 +import QtQuick.Controls +import QtQuick /*! \qmltype InsertCharacter diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/ThanksTo.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/ThanksTo.qml index fce6d1c..d290b78 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/ThanksTo.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/ThanksTo.qml @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Dialogs 1.3 as D -import QtQuick.Controls 2.12 +import QtQuick +import QtQuick.Dialogs +import QtQuick.Controls /*! \qmltype ThanksTo @@ -27,14 +27,24 @@ import QtQuick.Controls 2.12 \sa LogarithmPlotter */ -D.Dialog { +BaseDialog { id: about title: qsTr("Thanks and Contributions - LogarithmPlotter") - width: 400 - height: 600 + width: 450 + minimumHeight: 710 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 ListView { diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/qmldir b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/qmldir index fb7800e..9306fae 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/qmldir +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/qmldir @@ -1,5 +1,6 @@ module eu.ad5001.LogarithmPlotter.Popup +BaseDialog 1.0 BaseDialog.qml About 1.0 About.qml Alert 1.0 Alert.qml FileDialog 1.0 FileDialog.qml diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/AutocompletionCategory.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/AutocompletionCategory.qml index 7e9f683..6ef6131 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/AutocompletionCategory.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/AutocompletionCategory.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Controls 2.12 +import QtQuick +import QtQuick.Controls /*! \qmltype AutocompletionCategory diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ComboBoxSetting.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ComboBoxSetting.qml index bd572e3..7814f01 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ComboBoxSetting.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ComboBoxSetting.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Controls 2.12 +import QtQuick +import QtQuick.Controls /*! \qmltype ComboBoxSetting diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ExpressionEditor.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ExpressionEditor.qml index 34cc4b3..b64d51c 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ExpressionEditor.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ExpressionEditor.qml @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -import QtQuick.Controls 2.12 -import QtQuick 2.12 -import QtQuick.Dialogs 1.3 as D +import QtQuick.Controls +import QtQuick +import Qt.labs.platform as Native import eu.ad5001.LogarithmPlotter.Popup 1.0 as P import "../js/mathlib.js" as MathLib import "../js/utils.js" as Utils @@ -131,7 +131,7 @@ Item { visible: control.label != "" } - D.MessageDialog { + Native.MessageDialog { id: parsingErrorDialog title: qsTranslate("expression", "LogarithmPlotter - Parsing error") text: "" @@ -339,7 +339,7 @@ Item { property string objectName: isEnteringProperty ? (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 ? Objects.currentObjectsByName[objectName].constructor.properties() : {} diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/Icon.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/Icon.qml index 7cf3b31..4966cb8 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/Icon.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/Icon.qml @@ -15,9 +15,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Window 2.12 -import QtGraphicalEffects 1.0 +import QtQuick +import QtQuick.Window +import Qt5Compat.GraphicalEffects /*! \qmltype Icon diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ListSetting.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ListSetting.qml index fea499e..1d34828 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ListSetting.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ListSetting.qml @@ -16,9 +16,9 @@ * along with this program. If not, see . */ -import QtQuick 2.12 -import QtQuick.Controls 2.12 -import QtQml.Models 2.12 +import QtQuick +import QtQuick.Controls +import QtQml.Models /*! \qmltype ListSetting diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/TextSetting.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/TextSetting.qml index dec024c..7247649 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/TextSetting.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/TextSetting.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick.Controls 2.12 -import QtQuick 2.12 +import QtQuick.Controls +import QtQuick import eu.ad5001.LogarithmPlotter.Popup 1.0 as Popup /*! diff --git a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Settings.qml b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Settings.qml index 6bde410..e4ae046 100644 --- a/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Settings.qml +++ b/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Settings.qml @@ -16,8 +16,8 @@ * along with this program. If not, see . */ -import QtQuick.Controls 2.12 -import QtQuick 2.12 +import QtQuick.Controls +import QtQuick import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting import eu.ad5001.LogarithmPlotter.Popup 1.0 as Popup import "js/utils.js" as Utils diff --git a/LogarithmPlotter/util/config.py b/LogarithmPlotter/util/config.py index 4f19fd3..b528f87 100644 --- a/LogarithmPlotter/util/config.py +++ b/LogarithmPlotter/util/config.py @@ -19,7 +19,7 @@ from os import path, environ, makedirs from platform import system from json import load, dumps -from PySide2.QtCore import QLocale, QTranslator +from PySide6.QtCore import QLocale, QTranslator DEFAULT_SETTINGS = { diff --git a/LogarithmPlotter/util/helper.py b/LogarithmPlotter/util/helper.py index 47e3992..df17924 100644 --- a/LogarithmPlotter/util/helper.py +++ b/LogarithmPlotter/util/helper.py @@ -16,11 +16,11 @@ * along with this program. If not, see . """ -from PySide2.QtWidgets import QMessageBox, QApplication -from PySide2.QtCore import QRunnable, QThreadPool, QThread, QObject, Signal, Slot, QCoreApplication -from PySide2.QtQml import QQmlApplicationEngine -from PySide2.QtGui import QImage -from PySide2 import __version__ as PySide2_version +from PySide6.QtWidgets import QMessageBox, QApplication +from PySide6.QtCore import QRunnable, QThreadPool, QThread, QObject, Signal, Slot, QCoreApplication +from PySide6.QtQml import QQmlApplicationEngine +from PySide6.QtGui import QImage +from PySide6 import __version__ as PySide6_version from os import chdir, path from json import loads @@ -142,9 +142,9 @@ class Helper(QObject): @Slot(result=str) 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() def fetchChangelog(self): diff --git a/LogarithmPlotter/util/latex.py b/LogarithmPlotter/util/latex.py index d9b4643..628e646 100644 --- a/LogarithmPlotter/util/latex.py +++ b/LogarithmPlotter/util/latex.py @@ -16,9 +16,9 @@ * along with this program. If not, see . """ -from PySide2.QtCore import QObject, Slot, Property, QCoreApplication -from PySide2.QtGui import QImage, QColor -from PySide2.QtWidgets import QApplication, QMessageBox +from PySide6.QtCore import QObject, Slot, Property, QCoreApplication +from PySide6.QtGui import QImage, QColor +from PySide6.QtWidgets import QApplication, QMessageBox from os import path, remove from string import Template diff --git a/LogarithmPlotter/util/native.py b/LogarithmPlotter/util/native.py index 2ac1b1b..eae87e8 100644 --- a/LogarithmPlotter/util/native.py +++ b/LogarithmPlotter/util/native.py @@ -18,7 +18,7 @@ # 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 # QFileOpenEvent and NOT throught command line parameters. diff --git a/LogarithmPlotter/util/update.py b/LogarithmPlotter/util/update.py index 5d8917e..6f2c07f 100644 --- a/LogarithmPlotter/util/update.py +++ b/LogarithmPlotter/util/update.py @@ -16,7 +16,7 @@ * along with this program. If not, see . """ -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.error import HTTPError, URLError from sys import argv diff --git a/setup.py b/setup.py index ea494cc..1831e0d 100644 --- a/setup.py +++ b/setup.py @@ -122,7 +122,7 @@ if sys.platform == 'linux': os.remove(os.environ["PREFIX"] + '/icons/hicolor/scalable/apps/logplotter.svg') 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', name='logarithmplotter',