diff --git a/sailsim/gui/SailsimGUI.py b/sailsim/gui/SailsimGUI.py
index 17ad939..2991c42 100644
--- a/sailsim/gui/SailsimGUI.py
+++ b/sailsim/gui/SailsimGUI.py
@@ -1,17 +1,21 @@
"""This class is the main GUI for the sailsim project."""
+from typing import Any, Union
from PySide6.QtCore import QTimer
from PySide6.QtWidgets import QMainWindow
from sailsim.gui.boatInspector import BoatInspectorScene
from sailsim.gui.mapView import MapViewScene
+from sailsim.simulation.Simulation import Simulation
from sailsim.gui.qtmain import Ui_MainWindow
class SailsimGUI(QMainWindow):
"""Main GUI for sailsim."""
- def __init__(self, simulation):
+ frame = 0
+
+ def __init__(self, simulation: Simulation, varspace: Union[dict[str, Any], None] = None) -> None:
"""
Create SailsimGUI object.
@@ -21,7 +25,10 @@ def __init__(self, simulation):
super().__init__()
self.simulation = simulation
- self.frame = 0
+
+ self.varspace = {"sailsim": self}
+ if varspace is not None:
+ self.varspace.update(varspace)
# Load UI from QT generated file
self.ui = Ui_MainWindow()
@@ -43,22 +50,22 @@ def __init__(self, simulation):
self.boatInspectorScene = BoatInspectorScene(simulation.boat)
self.ui.boatInspector.setScene(self.boatInspectorScene)
+ self.ui.valueInspector.setSimulation(simulation)
+
self.updateFrame(0)
self.updateViewStates()
def updateFrame(self, framenumber):
"""Update display when the frame changed."""
- frames = self.simulation.boat.frameList.frames
- if framenumber < len(frames):
+ if framenumber < len(self.simulation.boat.frameList.frames):
self.frame = framenumber
- frame = frames[framenumber]
# Update widgets
maxFrame = str(len(self.simulation))
self.ui.frameNr.setText(str(framenumber).zfill(len(maxFrame)) + "/" + maxFrame)
self.mapViewScene.viewFrame(framenumber)
self.boatInspectorScene.viewFrame(framenumber)
- self.ui.valueInspector.viewFrame(frame)
+ self.ui.valueInspector.viewFrame(framenumber)
def incFrame(self):
"""Move to the next frame if it is in the range of the slider."""
@@ -113,6 +120,15 @@ def updateViewStates(self):
# Slots
+ def runCode(self) -> None:
+ """Run custom code in the window."""
+ try:
+ exec(self.ui.console.text(), self.varspace)
+ self.ui.console.setStyleSheet("")
+ except Exception:
+ self.ui.console.setStyleSheet("border: 1px solid red")
+ self.ui.console.setText("")
+
# Display for mapView
def actionViewShowBoatMap(self, state):
"""Show/hide the boat on the map view."""
diff --git a/sailsim/gui/main.ui b/sailsim/gui/main.ui
index 297cc38..277194e 100644
--- a/sailsim/gui/main.ui
+++ b/sailsim/gui/main.ui
@@ -20,7 +20,22 @@
-
+
+
+ 1
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -532,6 +547,28 @@
+ -
+
+
-
+
+
+
+ Cascadia Mono
+
+
+
+ avaiable vars: sailsim, simulation, boat, wind
+
+
+
+
+
+ false
+
+
+
+
+