Updating to Qt6

This commit is contained in:
Ad5001 2023-05-22 00:15:09 +02:00
parent 78ffc8c645
commit aecc02c606
Signed by: Ad5001
GPG key ID: EF45F9C6AFE20160
35 changed files with 362 additions and 263 deletions

View file

@ -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",

View file

@ -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()
} }
} }

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)
} }

View file

@ -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()
} }
} }

View file

@ -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

View file

@ -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,99 +58,111 @@ 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 {
Label { anchors {
id: dlgTitle top: parent.top;
anchors.left: parent.left left: parent.left;
anchors.top: parent.top bottom: parent.bottom;
verticalAlignment: TextInput.AlignVCenter right: parent.right;
text: qsTr("Edit properties of %1 %2").arg(Objects.types[objEditor.objType].displayType()).arg(objEditor.obj.name) topMargin: margin;
font.pixelSize: 20 leftMargin: margin;
color: sysPalette.windowText bottomMargin: margin;
} rightMargin: margin;
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()
}
} }
Setting.TextSetting { Label {
id: nameProperty id: dlgTitle
height: 30 anchors.left: parent.left
label: qsTr("Name") anchors.top: parent.top
icon: "common/label.svg" verticalAlignment: TextInput.AlignVCenter
width: dlgProperties.width text: qsTr("Edit properties of %1 %2").arg(Objects.types[objEditor.objType].displayType()).arg(objEditor.obj.name)
value: objEditor.obj.name font.pixelSize: 20
onChanged: function(newValue) { color: sysPalette.windowText
let newName = Utils.parseName(newValue) }
if(newName != '' && objEditor.obj.name != newName) {
if(newName in Objects.currentObjectsByName) { Column {
invalidNameDialog.showDialog(newName) id: dlgProperties
} else { anchors.top: dlgTitle.bottom
history.addToHistory(new HistoryLib.NameChanged( width: objEditor.width - 20
objEditor.obj.name, objEditor.objType, newName spacing: 10
))
Objects.renameObject(obj.name, newName) Native.MessageDialog {
objEditor.obj = Objects.currentObjects[objEditor.objType][objEditor.objIndex] 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() objectListList.update()
} }
} }
} }
}
// Dynamic properties
Setting.ComboBoxSetting { CustomPropertyList {
id: labelContentProperty id: dlgCustomProperties
height: 30 obj: objEditor.obj
width: dlgProperties.width
label: qsTr("Label content") onChanged: {
model: [qsTr("null"), qsTr("name"), qsTr("name + value")] obj.update()
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() 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. 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()
} }
} }

View file

@ -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()
} }
} }
} }

View file

@ -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

View file

@ -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(

View file

@ -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)

View file

@ -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,98 +26,112 @@ 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
Image { Item {
id: logo anchors {
source: "../icons/logarithmplotter.svg" top: parent.top;
sourceSize.width: 64 left: parent.left;
sourceSize.height: 64 bottom: parent.bottom;
width: 64 right: parent.right;
height: 64 topMargin: margin;
anchors.horizontalCenter: parent.horizontalCenter leftMargin: margin;
anchors.rightMargin: width/2 bottomMargin: margin;
anchors.top: parent.top rightMargin: margin;
anchors.topMargin: 10 }
}
Image {
Label { id: logo
id: appName source: "../icons/logarithmplotter.svg"
anchors.top: logo.bottom sourceSize.width: 64
anchors.left: parent.left sourceSize.height: 64
anchors.topMargin: 10 width: 64
horizontalAlignment: Text.AlignHCenter height: 64
width: parent.width anchors.horizontalCenter: parent.horizontalCenter
wrapMode: Text.WordWrap anchors.rightMargin: width/2
font.pixelSize: 25 anchors.top: parent.top
text: qsTr("LogarithmPlotter v%1").arg(Helper.getVersion()) anchors.topMargin: 10
} }
Label { Label {
id: description id: appName
anchors.top: appName.bottom anchors.top: logo.bottom
anchors.left: parent.left anchors.left: parent.left
anchors.topMargin: 10 anchors.topMargin: 10
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
width: parent.width width: parent.width
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
font.pixelSize: 18 font.pixelSize: 25
text: qsTr("2D plotter software to make BODE plots, sequences and repartition functions.") text: qsTr("LogarithmPlotter v%1").arg(Helper.getVersion())
} }
Label { Label {
id: debugInfos id: description
anchors.top: description.bottom anchors.top: appName.bottom
anchors.left: parent.left anchors.left: parent.left
anchors.topMargin: 10 anchors.topMargin: 10
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
width: parent.width width: parent.width
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
font.pixelSize: 14 font.pixelSize: 18
text: Helper.getDebugInfos() text: qsTr("2D plotter software to make BODE plots, sequences and repartition functions.")
} }
Label { Label {
id: copyrightInfos id: debugInfos
anchors.top: debugInfos.bottom anchors.top: description.bottom
anchors.horizontalCenter: parent.horizontalCenter anchors.left: parent.left
anchors.topMargin: 10 anchors.topMargin: 10
width: Math.min(410, parent.width) horizontalAlignment: Text.AlignHCenter
wrapMode: Text.WordWrap width: parent.width
textFormat: Text.RichText wrapMode: Text.WordWrap
font.pixelSize: 13 font.pixelSize: 14
text: "Copyright © 2022 Ad5001 &lt;mail@ad5001.eu&gt;<br> 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 &lt;mail@ad5001.eu&gt;<br>
<br> <br>
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.<br> 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.<br>
<br> <br>
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.<br> 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.<br>
<br> <br>
You should have received a copy of the GNU General Public License along with this program. If not, see <a href='http://www.gnu.org/licenses/'>http://www.gnu.org/licenses/</a>." You should have received a copy of the GNU General Public License along with this program. If not, see <a href='http://www.gnu.org/licenses/'>http://www.gnu.org/licenses/</a>."
onLinkActivated: Qt.openUrlExternally(link) 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')
} }
Button { Row {
id: officialWebsiteButton id: buttonsRow
text: qsTr('Official website') anchors.top: copyrightInfos.bottom
icon.name: 'web-browser' anchors.horizontalCenter: parent.horizontalCenter
onClicked: Qt.openUrlExternally('https://apps.ad5001.eu/logarithmplotter/') 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/')
}
} }
} }
} }

View file

@ -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

View file

@ -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()
}
}

View file

@ -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

View file

@ -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
} }

View file

@ -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
/*! /*!

View file

@ -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

View file

@ -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 {

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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() :
{} {}

View file

@ -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

View file

@ -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

View file

@ -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
/*! /*!

View file

@ -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

View file

@ -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 = {

View file

@ -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):

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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',