diff --git a/common/rollup.config.mjs b/common/rollup.config.mjs
index 6a18a41..6156873 100644
--- a/common/rollup.config.mjs
+++ b/common/rollup.config.mjs
@@ -22,7 +22,7 @@ import { babel } from "@rollup/plugin-babel"
import cleanup from "rollup-plugin-cleanup"
const src = "./src/index.mjs"
-const dest = "../build/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/js/index.mjs"
+const dest = "../build/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Common/index.mjs"
export default {
input: src,
diff --git a/common/src/history/common.mjs b/common/src/history/common.mjs
index 33f9118..e8e5795 100644
--- a/common/src/history/common.mjs
+++ b/common/src/history/common.mjs
@@ -95,11 +95,15 @@ export class Action {
if(!Latex.enabled)
throw new Error("Cannot render an item as LaTeX when LaTeX is disabled.")
const imgDepth = History.imageDepth
- const { source, width, height } = await Latex.requestAsyncRender(
+ const renderArguments = [
latexString,
imgDepth * (History.fontSize + 2),
History.themeTextColor
- )
+ ]
+ let render = Latex.findPrerendered(...renderArguments)
+ if(render === null)
+ render = await Latex.requestAsyncRender(...renderArguments)
+ const { source, width, height } = render
return `
`
}
diff --git a/common/src/module/canvas.mjs b/common/src/module/canvas.mjs
index ba6d5ca..5736cfc 100644
--- a/common/src/module/canvas.mjs
+++ b/common/src/module/canvas.mjs
@@ -25,7 +25,10 @@ import Objects from "./objects.mjs"
import History from "./history.mjs"
import Settings from "./settings.mjs"
+
class CanvasAPI extends Module {
+
+
/** @type {CanvasInterface} */
#canvas = null
/** @type {CanvasRenderingContext2D} */
diff --git a/common/src/module/latex.mjs b/common/src/module/latex.mjs
index 216e3be..65ce689 100644
--- a/common/src/module/latex.mjs
+++ b/common/src/module/latex.mjs
@@ -17,6 +17,7 @@
*/
import { Module } from "./common.mjs"
+import { BaseEvent } from "../events.mjs"
import * as Instruction from "../lib/expr-eval/instruction.mjs"
import { escapeValue } from "../lib/expr-eval/expression.mjs"
import { HelperInterface, LatexInterface } from "./interface.mjs"
@@ -44,6 +45,28 @@ const equivalchars = ["\\pi", "\\infty",
"{}_{4}", "{}_{5}", "{}_{6}", "{}_{7}", "{}_{8}", "{}_{9}", "{}_{0}",
]
+
+
+
+class AsyncRenderStartedEvent extends BaseEvent {
+ constructor(markup, fontSize, color) {
+ super("async-render-started")
+ this.markup = markup
+ this.fontSize = fontSize
+ this.color = color
+ }
+}
+
+
+class AsyncRenderFinishedEvent extends BaseEvent {
+ constructor(markup, fontSize, color) {
+ super("async-render-finished")
+ this.markup = markup
+ this.fontSize = fontSize
+ this.color = color
+ }
+}
+
/**
* Class containing the result of a LaTeX render.
*
@@ -60,6 +83,8 @@ class LatexRenderResult {
}
class LatexAPI extends Module {
+ static emits = ["async-render-started", "async-render-finished"]
+
/** @type {LatexInterface} */
#latex = null
@@ -113,10 +138,14 @@ class LatexAPI extends Module {
async requestAsyncRender(markup, fontSize, color) {
if(!this.initialized) throw new Error("Attempting requestAsyncRender before initialize!")
let render
- if(this.#latex.supportsAsyncRender)
+ if(this.#latex.supportsAsyncRender) {
+ console.trace()
+ this.emit(new AsyncRenderStartedEvent(markup, fontSize, color))
render = await this.#latex.renderAsync(markup, fontSize, color)
- else
+ this.emit(new AsyncRenderFinishedEvent(markup, fontSize, color))
+ } else {
render = this.#latex.renderSync(markup, fontSize, color)
+ }
const args = render.split(",")
return new LatexRenderResult(...args)
}
diff --git a/common/src/objs/function.mjs b/common/src/objs/function.mjs
index 1e345cb..b056cc3 100644
--- a/common/src/objs/function.mjs
+++ b/common/src/objs/function.mjs
@@ -122,7 +122,9 @@ export default class Function extends ExecutableObject {
*/
static drawFunction(canvas, expr, definitionDomain, destinationDomain, drawPoints = true, drawDash = true) {
let pxprecision = 10
- let previousX = canvas.px2x(0)
+ const startDrawFrom = canvas.x2px(1)%pxprecision-pxprecision
+ let previousX = canvas.px2x(startDrawFrom)
+ // console.log("Starting draw from", previousX, startDrawFrom, canvas.x2px(1))
let previousY = null
if(definitionDomain instanceof SpecialDomain && definitionDomain.moveSupported) {
// Point based functions.
@@ -160,7 +162,7 @@ export default class Function extends ExecutableObject {
// Calculate the previousY at the start of the canvas
if(definitionDomain.includes(previousX))
previousY = expr.execute(previousX)
- for(let px = pxprecision; px < canvas.width; px += pxprecision) {
+ for(let px = pxprecision; px-pxprecision < canvas.width; px += pxprecision) {
let currentX = canvas.px2x(px)
if(!definitionDomain.includes(previousX) && definitionDomain.includes(currentX)) {
// Should draw up to currentX, but NOT at previousX.
@@ -169,7 +171,7 @@ export default class Function extends ExecutableObject {
do {
tmpPx++
previousX = canvas.px2x(tmpPx)
- } while(!definitionDomain.includes(previousX))
+ } while(!definitionDomain.includes(previousX) && currentX > previousX)
// Recaclulate previousY
previousY = expr.execute(previousX)
} else if(!definitionDomain.includes(currentX)) {
@@ -179,7 +181,7 @@ export default class Function extends ExecutableObject {
do {
tmpPx--
currentX = canvas.px2x(tmpPx)
- } while(!definitionDomain.includes(currentX) && currentX !== previousX)
+ } while(!definitionDomain.includes(currentX) && currentX > previousX)
}
// This max variation is needed for functions with asymptotical vertical lines (e.g. 1/x, tan x...)
let maxvariation = (canvas.px2y(0) - canvas.px2y(canvas.height))
diff --git a/common/src/preferences/general.mjs b/common/src/preferences/general.mjs
index a6957c6..a00a813 100644
--- a/common/src/preferences/general.mjs
+++ b/common/src/preferences/general.mjs
@@ -47,8 +47,8 @@ class EnableLatex extends BoolSetting {
}
const ENABLE_LATEX_ASYNC = new BoolSetting(
- qsTranslate("general", "Enable asynchronous LaTeX renderer"),
- "enable_latex_async",
+ qsTranslate("general", "Enable threaded LaTeX renderer (experimental)"),
+ "enable_latex_threaded",
"new"
)
diff --git a/common/test/mock/helper.mjs b/common/test/mock/helper.mjs
index 4cab472..b912b44 100644
--- a/common/test/mock/helper.mjs
+++ b/common/test/mock/helper.mjs
@@ -23,7 +23,7 @@ const DEFAULT_SETTINGS = {
"reset_redo_stack": true,
"last_install_greet": "0",
"enable_latex": true,
- "enable_latex_async": true,
+ "enable_latex_threaded": true,
"expression_editor": {
"autoclose": true,
"colorize": true,
@@ -113,4 +113,4 @@ export class MockHelper {
throw new Error(`File not found.`)
}
-}
\ No newline at end of file
+}
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/AppMenuBar.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/AppMenuBar.qml
index 87dd625..79fa6b0 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/AppMenuBar.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/AppMenuBar.qml
@@ -20,7 +20,7 @@ import QtQuick
import Qt.labs.platform as Native
//import QtQuick.Controls 2.15
import eu.ad5001.MixedMenu 1.1
-import "js/index.mjs" as JS
+import eu.ad5001.LogarithmPlotter.Common
/*!
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Common/qmldir b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Common/qmldir
new file mode 100644
index 0000000..af9eb16
--- /dev/null
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Common/qmldir
@@ -0,0 +1,3 @@
+module eu.ad5001.LogarithmPlotter.Common
+
+JS 1.0 index.mjs
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryBrowser.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/Browser.qml
similarity index 98%
rename from runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryBrowser.qml
rename to runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/Browser.qml
index eb84340..645916c 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryBrowser.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/Browser.qml
@@ -24,7 +24,7 @@ import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
/*!
- \qmltype HistoryBrowser
+ \qmltype Browser
\inqmlmodule eu.ad5001.LogarithmPlotter.History
\brief Tab of the drawer that allows to navigate through the undo and redo history.
@@ -95,7 +95,7 @@ Item {
Repeater {
model: historyBrowser.redoCount
- HistoryItem {
+ SingleItem {
id: redoButton
width: historyBrowser.actionWidth
//height: actionHeight
@@ -147,7 +147,7 @@ Item {
model: historyBrowser.undoCount
- HistoryItem {
+ SingleItem {
id: undoButton
width: historyBrowser.actionWidth
//height: actionHeight
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryItem.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/SingleItem.qml
similarity index 99%
rename from runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryItem.qml
rename to runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/SingleItem.qml
index 6ad6556..bffdb9b 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/HistoryItem.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/SingleItem.qml
@@ -22,7 +22,7 @@ import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
/*!
- \qmltype HistoryItem
+ \qmltype SingleItem
\inqmlmodule eu.ad5001.LogarithmPlotter.History
\brief Item representing an history action.
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/qmldir b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/qmldir
index 7f8a628..66c4408 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/qmldir
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/History/qmldir
@@ -1,4 +1,4 @@
module eu.ad5001.LogarithmPlotter.History
-HistoryBrowser 1.0 HistoryBrowser.qml
-HistoryItem 1.0 HistoryItem.qml
+Browser 1.0 Browser.qml
+SingleItem 1.0 SingleItem.qml
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogarithmPlotter.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogarithmPlotter.qml
index d541a0c..064a0be 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogarithmPlotter.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/LogarithmPlotter.qml
@@ -17,16 +17,17 @@
*/
import QtQml
-import QtQuick.Controls
-import eu.ad5001.MixedMenu 1.1
-import QtQuick.Layouts 1.12
import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts 1.12
+import eu.ad5001.MixedMenu 1.1
// Auto loading all modules.
-import "js/index.mjs" as JS
+import eu.ad5001.LogarithmPlotter.Common
-import eu.ad5001.LogarithmPlotter.History 1.0
+import eu.ad5001.LogarithmPlotter.History 1.0 as History
import eu.ad5001.LogarithmPlotter.ObjectLists 1.0
+import eu.ad5001.LogarithmPlotter.Overlay 1.0 as Overlay
import eu.ad5001.LogarithmPlotter.Popup 1.0 as Popup
/*!
@@ -120,16 +121,16 @@ ApplicationWindow {
ObjectLists {
id: objectLists
- onChanged: drawCanvas.requestPaint()
+ onChanged: Modules.Canvas.requestPaint()
}
Settings {
id: settings
canvas: drawCanvas
- onChanged: drawCanvas.requestPaint()
+ onChanged: Modules.Canvas.requestPaint()
}
- HistoryBrowser {
+ History.Browser {
id: historyBrowser
}
}
@@ -154,19 +155,21 @@ ApplicationWindow {
}
}
- ViewPositionChangeOverlay {
+ Overlay.ViewPositionChange {
id: viewPositionChanger
anchors.fill: parent
- canvas: parent
- settingsInstance: settings
}
- PickLocationOverlay {
+ Overlay.PickLocation {
id: positionPicker
anchors.fill: parent
- canvas: parent
}
}
+
+ Overlay.Loading {
+ id: loadingOverlay
+ anchors.fill: parent
+ }
Timer {
id: delayRefreshTimer
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/CustomPropertyList.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/CustomPropertyList.qml
index 49cea8e..e688202 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/CustomPropertyList.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/CustomPropertyList.qml
@@ -20,7 +20,7 @@ import QtQuick
import QtQuick.Controls
import Qt.labs.platform as Native
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
-import "../../js/index.mjs" as JS
+import eu.ad5001.LogarithmPlotter.Common
/*!
\qmltype CustomPropertyList
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/Dialog.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/Dialog.qml
index 715602a..ced0cdd 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/Dialog.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/Editor/Dialog.qml
@@ -18,11 +18,10 @@
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/index.mjs" as JS
+import eu.ad5001.LogarithmPlotter.Common
/*!
\qmltype Dialog
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectCreationGrid.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectCreationGrid.qml
index e8d4912..e3894cd 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectCreationGrid.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectCreationGrid.qml
@@ -19,7 +19,7 @@
import QtQuick
import QtQuick.Controls
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
-import "../js/index.mjs" as JS
+import eu.ad5001.LogarithmPlotter.Common
/*!
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectLists.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectLists.qml
index f755a6f..c2a5a23 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectLists.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectLists.qml
@@ -56,7 +56,7 @@ ScrollView {
property var editingRows: []
model: Modules.Objects.currentObjects[objType]
width: objectsListView.width
- implicitHeight: contentItem.childrenRect.height
+ height: contentItem.childrenRect.height + 10
visible: model != undefined && model.length > 0
interactive: false
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectRow.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectRow.qml
index 9624d23..5812252 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectRow.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ObjectLists/ObjectRow.qml
@@ -21,7 +21,7 @@ import QtQuick.Dialogs
import QtQuick.Controls
import QtQuick.Window
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
-import "../js/index.mjs" as JS
+import eu.ad5001.LogarithmPlotter.Common
/*!
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/Loading.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/Loading.qml
new file mode 100644
index 0000000..6aec616
--- /dev/null
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/Loading.qml
@@ -0,0 +1,130 @@
+/**
+ * LogarithmPlotter - 2D plotter software to make BODE plots, sequences and distribution functions.
+ * Copyright (C) 2021-2024 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 Loading
+ \inqmlmodule eu.ad5001.LogarithmPlotter.Overlay
+ \brief Overlay notifiying the user when a file is loading.
+
+ Provides an overlay over the canvas that is shown when the user loads a new file, both to lock the ViewPositionChange
+ overlay and inform the user of what is loading and how much remains.
+
+ \sa Common, ViewPositionChange
+*/
+Item {
+ id: loadingRoot
+ opacity: 0
+ visible: opacity !== 0
+ clip: true
+
+ property int currentlyLoading: 0
+ property int maxCurrentLoadingSteps: 0
+
+ Behavior on opacity { PropertyAnimation {} }
+
+ Rectangle {
+ anchors.fill: parent
+ color: sysPalette.window
+ opacity: 0.85
+ }
+
+ Column {
+ spacing: 5
+ anchors {
+ verticalCenter: parent.verticalCenter
+ left: parent.left
+ right: parent.right
+ }
+
+ Text {
+ id: loadingTitle
+ anchors.horizontalCenter: parent.horizontalCenter
+ font.pixelSize: 20
+ color: sysPalette.windowText
+ }
+
+ ProgressBar {
+ id: progress
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: 300
+ from: 0
+ value: loadingRoot.maxCurrentLoadingSteps - loadingRoot.currentlyLoading
+ to: loadingRoot.maxCurrentLoadingSteps
+ }
+
+ Text {
+ id: lastFinishedStep
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: sysPalette.windowText
+ }
+ }
+
+ MouseArea {
+ id: picker
+ anchors.fill: parent
+ hoverEnabled: parent.visible
+ cursorShape: Qt.ArrowCursor
+ acceptedButtons: Qt.LeftButton | Qt.RightButton
+ }
+
+
+
+ /*!
+ \qmlmethod void Loading::addedLoadingStep()
+ Registers one new loading step that will eventually call \c finishedLoadingStep.
+ */
+ function addedLoadingStep() {
+ if(loadingRoot.maxCurrentLoadingSteps === 1) {
+ // Only when several ones need to be loaded.
+ const fileName = Modules.Settings.saveFilename.split('/').pop().split('\\').pop()
+ loadingTitle.text = qsTr("Loading...")
+ loadingRoot.opacity = 1
+ }
+ loadingRoot.currentlyLoading++
+ loadingRoot.maxCurrentLoadingSteps++
+ }
+
+ /*!
+ \qmlmethod void Loading::finishedLoadingStep()
+ Marks a loading step as finished and displays the message to the user.
+ */
+ function finishedLoadingStep(message) {
+ loadingRoot.currentlyLoading--
+ const current = loadingRoot.maxCurrentLoadingSteps - loadingRoot.currentlyLoading
+ lastFinishedStep.text = `${message} (${current}/${loadingRoot.maxCurrentLoadingSteps})`
+ if(loadingRoot.currentlyLoading === 0) {
+ loadingRoot.maxCurrentLoadingSteps = 0
+ loadingRoot.opacity = 0
+ }
+ }
+
+
+ Component.onCompleted: function() {
+ Modules.Latex.on("async-render-started", (e) => {
+ addedLoadingStep()
+ })
+ Modules.Latex.on("async-render-finished", (e) => {
+ const markup = e.markup.length > 20 ? e.markup.substring(0, 15)+"..." : e.markup
+ finishedLoadingStep(qsTr("Finished rendering of %1").arg(markup))
+ })
+ }
+}
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/PickLocationOverlay.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/PickLocation.qml
similarity index 98%
rename from runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/PickLocationOverlay.qml
rename to runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/PickLocation.qml
index b364e73..60eb90e 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/PickLocationOverlay.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/PickLocation.qml
@@ -18,12 +18,12 @@
import QtQuick
import QtQuick.Controls
-import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
-import "js/index.mjs" as JS
+import eu.ad5001.LogarithmPlotter.Setting as Setting
+import eu.ad5001.LogarithmPlotter.Common
/*!
- \qmltype PickLocationOverlay
- \inqmlmodule eu.ad5001.LogarithmPlotter
+ \qmltype PickLocation
+ \inqmlmodule eu.ad5001.LogarithmPlotter.Overlay
\brief Overlay used to pick a new location for an object.
Provides an overlay over the canvas that can be shown when the user clicks the "Set position" button
@@ -36,7 +36,7 @@ Item {
id: pickerRoot
visible: false
clip: true
-
+
/*!
\qmlsignal PickLocationOverlay::picked(var obj)
@@ -97,9 +97,9 @@ Item {
readonly property bool userPickY: pickY && pickYCheckbox.checked
Rectangle {
+ anchors.fill: parent
color: sysPalette.window
opacity: 0.35
- anchors.fill: parent
}
MouseArea {
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ViewPositionChangeOverlay.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/ViewPositionChange.qml
similarity index 94%
rename from runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ViewPositionChangeOverlay.qml
rename to runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/ViewPositionChange.qml
index 7a7072b..41ce60a 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/ViewPositionChangeOverlay.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/ViewPositionChange.qml
@@ -19,7 +19,7 @@
import QtQuick
/*!
- \qmltype ViewPositionChangeOverlay
+ \qmltype ViewPositionChange.Overlay
\inqmlmodule eu.ad5001.LogarithmPlotter
\brief Overlay used allow the user to drag the canvas' position and change the zoom level.
@@ -57,16 +57,6 @@ Item {
*/
signal endPositionChange(int deltaX, int deltaY)
- /*!
- \qmlproperty var ViewPositionChangeOverlay::canvas
- LogGraphCanvas instance.
- */
- property var canvas
- /*!
- \qmlproperty var ViewPositionChangeOverlay::settingsInstance
- Settings instance.
- */
- property var settingsInstance
/*!
\qmlproperty int ViewPositionChangeOverlay::prevX
The x coordinate (on the mousearea) at the last change of the canvas position.
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/qmldir b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/qmldir
new file mode 100644
index 0000000..0288c9e
--- /dev/null
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Overlay/qmldir
@@ -0,0 +1,5 @@
+module eu.ad5001.LogarithmPlotter.Overlay
+
+Loading 1.0 Loading.qml
+PickLocation 1.0 PickLocation.qml
+ViewPositionChange 1.0 ViewPositionChange.qml
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Preferences.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Preferences.qml
index a76410f..70d77a9 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Preferences.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Popup/Preferences.qml
@@ -20,7 +20,7 @@ import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
-import "../js/index.mjs" as JS
+import eu.ad5001.LogarithmPlotter.Common
/*!
\qmltype Preferences
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ExpressionEditor.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ExpressionEditor.qml
index bb99f52..8251a3f 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ExpressionEditor.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Setting/ExpressionEditor.qml
@@ -20,7 +20,7 @@ import QtQuick.Controls
import QtQuick
import Qt.labs.platform as Native
import eu.ad5001.LogarithmPlotter.Popup 1.0 as P
-import "../js/index.mjs" as JS
+import eu.ad5001.LogarithmPlotter.Common
/*!
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Settings.qml b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Settings.qml
index 992e9b1..3f17ea3 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Settings.qml
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/Settings.qml
@@ -20,7 +20,7 @@ import QtQuick
import QtQuick.Controls
import eu.ad5001.LogarithmPlotter.Setting 1.0 as Setting
import eu.ad5001.LogarithmPlotter.Popup 1.0 as Popup
-import "js/index.mjs" as JS
+import eu.ad5001.LogarithmPlotter.Common
/*!
\qmltype Settings
diff --git a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/qmldir b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/qmldir
index 3aeaa15..c80cae5 100644
--- a/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/qmldir
+++ b/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/qmldir
@@ -2,6 +2,4 @@ module eu.ad5001.LogarithmPlotter
AppMenuBar 1.0 AppMenuBar.qml
LogGraphCanvas 1.0 LogGraphCanvas.qml
-PickLocationOverlay 1.0 PickLocationOverlay.qml
Settings 1.0 Settings.qml
-ViewPositionChangeOverlay 1.0 ViewPositionChangeOverlay.qml
\ No newline at end of file
diff --git a/runtime-pyside6/LogarithmPlotter/util/config.py b/runtime-pyside6/LogarithmPlotter/util/config.py
index e01deae..020569a 100644
--- a/runtime-pyside6/LogarithmPlotter/util/config.py
+++ b/runtime-pyside6/LogarithmPlotter/util/config.py
@@ -28,7 +28,7 @@ DEFAULT_SETTINGS = {
"reset_redo_stack": True,
"last_install_greet": "0",
"enable_latex": which("latex") is not None and which("dvipng") is not None,
- "enable_latex_async": True,
+ "enable_latex_threaded": True,
"expression_editor": {
"autoclose": True,
"colorize": True,
diff --git a/runtime-pyside6/LogarithmPlotter/util/debug.py b/runtime-pyside6/LogarithmPlotter/util/debug.py
index f899fd5..ef02d62 100644
--- a/runtime-pyside6/LogarithmPlotter/util/debug.py
+++ b/runtime-pyside6/LogarithmPlotter/util/debug.py
@@ -22,9 +22,9 @@ from os import path
from re import compile
CURRENT_PATH = path.dirname(path.realpath(__file__))
-SOURCEMAP_PATH = path.realpath(f"{CURRENT_PATH}/../qml/eu/ad5001/LogarithmPlotter/js/index.mjs.map")
+SOURCEMAP_PATH = path.realpath(f"{CURRENT_PATH}/../qml/eu/ad5001/LogarithmPlotter/Common/index.mjs.map")
SOURCEMAP_INDEX = None
-INDEX_REG = compile(r"build\/runtime-pyside6\/LogarithmPlotter\/qml\/eu\/ad5001\/LogarithmPlotter\/js\/index.mjs:(\d+)")
+INDEX_REG = compile(r"build\/runtime-pyside6\/LogarithmPlotter\/qml\/eu\/ad5001\/LogarithmPlotter\/Common\/index.mjs:(\d+)")
class LOG_COLORS:
diff --git a/runtime-pyside6/LogarithmPlotter/util/latex.py b/runtime-pyside6/LogarithmPlotter/util/latex.py
index 71064fa..570e083 100644
--- a/runtime-pyside6/LogarithmPlotter/util/latex.py
+++ b/runtime-pyside6/LogarithmPlotter/util/latex.py
@@ -91,7 +91,7 @@ class Latex(QObject):
@Property(bool)
def supportsAsyncRender(self) -> bool:
- return config.getSetting("enable_latex_async")
+ return config.getSetting("enable_latex_threaded")
@Slot(result=bool)
def checkLatexInstallation(self) -> bool:
@@ -181,7 +181,6 @@ class Latex(QObject):
"""
markup_hash, render_hash, export_path = self.create_export_path(latex_markup, font_size, color)
if self.latexSupported and not path.exists(export_path + ".png"):
- print("Rendering", latex_markup)
# Generating file
latex_path = path.join(self.tempdir, str(markup_hash))
# If the formula is just recolored or the font is just changed, no need to recreate the DVI.
diff --git a/runtime-pyside6/LogarithmPlotter/util/promise.py b/runtime-pyside6/LogarithmPlotter/util/promise.py
index f65efa8..c917660 100644
--- a/runtime-pyside6/LogarithmPlotter/util/promise.py
+++ b/runtime-pyside6/LogarithmPlotter/util/promise.py
@@ -100,6 +100,7 @@ class PyPromise(QObject):
Starts the thread that will run the promise.
"""
if not self._started: # Avoid getting started twice.
+ print("Starting", self._runner.args)
QThreadPool.globalInstance().start(self._runner)
self._started = True
@@ -153,6 +154,7 @@ class PyPromise(QObject):
def _fulfill(self, data):
self._state = "fulfilled"
no_return = [None, QJSValue.SpecialValue.UndefinedValue]
+ print("Finished", self._runner.args)
for i in range(len(self._fulfills)):
try:
result = self._fulfills[i](data)
diff --git a/scripts/build.sh b/scripts/build.sh
index be25274..b63d7f6 100755
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -22,6 +22,10 @@
DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$DIR/.." || exit 1
+BUILD_DIR="build/runtime-pyside6"
+BUILD_QML_DIR="$BUILD_DIR/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter"
+
+
box() {
len=${#1}
echo "┌─$(printf '─%.0s' $(seq 1 "$len"))─┐"
@@ -30,20 +34,22 @@ box() {
}
rm -rf build
-mkdir -p build/runtime-pyside6
+mkdir -p "$BUILD_DIR"
# Copy python
box "Copying pyside6 python runtime..."
-cp -r runtime-pyside6/{setup.py,LogarithmPlotter} build/runtime-pyside6
+cp -r runtime-pyside6/{setup.py,LogarithmPlotter} "$BUILD_DIR"
box "Building ecmascript modules..."
-mkdir -p build/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/js
-cd common && (npm run build || exit) && cd ..
+mkdir -p "$BUILD_QML_DIR/js"
+cd common && \
+ (npm run build || exit) && \
+ cd ..
box "Building translations..."
cd assets/i18n/ && (bash release.sh || exit) && cd ../../
-mkdir -p build/runtime-pyside6/LogarithmPlotter/i18n && cp assets/i18n/*.qm build/runtime-pyside6/LogarithmPlotter/i18n/
+mkdir -p "$BUILD_DIR/LogarithmPlotter/i18n" && cp assets/i18n/*.qm "$BUILD_DIR/LogarithmPlotter/i18n/"
box "Building icons..."
-cp -r assets/icons build/runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/
-cp assets/logarithmplotter.svg build/runtime-pyside6/LogarithmPlotter/
+cp -r assets/icons "$BUILD_QML_DIR"
+cp assets/logarithmplotter.svg "$BUILD_DIR/LogarithmPlotter/"