From 66737e323b78236c16f1fc6f2a1bfd0d18621173 Mon Sep 17 00:00:00 2001 From: Joppe Blondel Date: Fri, 31 Jul 2026 11:46:06 +0200 Subject: [PATCH] Start of simulation application --- pyproject.toml | 1 + .../resources/icons/media-playback-stop.png | Bin 0 -> 1165 bytes .../resources/icons/media-skip-backward.png | Bin 0 -> 1211 bytes src/bedit_gui/resources/resources.qrc | 2 + src/bedit_gui/simulation_application.py | 31 ++ src/bedit_gui/simulation_models.py | 11 + src/bedit_gui/ui/forms/main_window.ui | 6 + src/bedit_gui/ui/forms/simulation_window.ui | 309 ++++++++++++++++++ 8 files changed, 360 insertions(+) create mode 100644 src/bedit_gui/resources/icons/media-playback-stop.png create mode 100644 src/bedit_gui/resources/icons/media-skip-backward.png create mode 100644 src/bedit_gui/simulation_application.py create mode 100644 src/bedit_gui/simulation_models.py create mode 100644 src/bedit_gui/ui/forms/simulation_window.ui diff --git a/pyproject.toml b/pyproject.toml index 36b9d56..5bbcdc0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,7 @@ dependencies = [ bedit-graphviz = "bedit_util.graphviz:main" bedit-simulate = "bedit_util.simulate:main" bedit = "bedit_gui.application:main" +bedit-sim = "bedit_gui.simulation_application:main" [project.optional-dependencies] dev = [ diff --git a/src/bedit_gui/resources/icons/media-playback-stop.png b/src/bedit_gui/resources/icons/media-playback-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..650874f67f0ccb1b39591de96691b61f3c3bf98d GIT binary patch literal 1165 zcmV;81akX{P)kdg00002b3#c}2nbc| zMg#x=010qNS#tmY19kua19ky@)q>0b000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S* zE^l&Yo9;Xs000CGNklrkmC6Jy9WesR^^K8P&yuG_6BOq91w;O z0FIbYMal#}U|XkRx6FwT6Tku#*>#;1HyPf+y_n^2g($1BtyaSfaR;8k6ZA~sI(gSC zc%vyhSu{W$FX5Pt^Vi%%4psu)qlr?gpwL-XKAv1R_HEJ~1I0WF4?Jpm~W5GYEj ztH#jhkPumvF9GJYitJ75H}MpnMT6lX9Y15XR54~N2ULy4d;0$f``E+=_o>u3cZcqz ztB)Df#=OsD0F^qVjg&%)$pL|--KDEznj~;+%&Pn%Kky?%Ctk&nW;j|!4e%6}nAfZ3nxTO315g7c|Bk-L zfaG<;pbU5l8X*cRv9L2JXw=|y1iD;xnjS1dKkxTfK@nT`F9Ew5D9F>4bh~(rnSG8{ z9IwEKi+b)Ufs3v5z@c9-(K+Snz+2!?KjqVA*sc&7?)`d7C_O6|h0Pt^l*|)UbjczO zpHqs6{c1tr{jM{Ly^B^h(GM`fHiqD-BOIzeI|&rCUIitq#~4@XO$B|~3_nj_UbE*a z_zsUE(wSO(Of&e;r{TG7?{D~uDlKGfEwz9w%aCkX=Os-r_7})Orh+paP4EeXiDW3t zT2Q`-u^N!^S6smWBcueERN)jwd!i#FYW(a`Q(s>b2 zBl1;=3cRN8@g?$5rZwm&>RT`nX;=;&DABsmLiTnzs1o-Ne$v fC9`oMo%a0)Lk#jiOZi|800000NkvXXu0mjfdhQk9 literal 0 HcmV?d00001 diff --git a/src/bedit_gui/resources/icons/media-skip-backward.png b/src/bedit_gui/resources/icons/media-skip-backward.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf2376d6033990d06433a3763e097d2fcbf5e90 GIT binary patch literal 1211 zcmV;s1VsCZP)kdg00002b3#c}2nbc| zMg#x=010qNS#tmY19kua19ky@)q>0b000?uMObuGZ)S9NVRB^vcXxL#X>MzCV_|S* zE^l&Yo9;Xs000C!Nkl1v7XOj6zCec48xRV% z6+x@wzAgky7ox;eLr_FZR^m^(60B_%v0Y@LwzNfr7&oPsAf&ozWhz12WRl7J+ z50?-f>GyCZ=gfTX``vSL`HnL>VEQa2`x^D1l-p=@8JvtAn`Tzy8WP}q2 zc+sXsQw4rtE^H;5b=%%;Km?GC`Qau@k`Hq`z2wP>?l3eDqdc#T80C$Ch;G86un@gau-*@g+~O%(O-?*}A*uP&I;NJT5k9FiJ)8?$kgQ>tq5K zc%PpsNcuDl5f_tja4+XFZ_Omf+e5&1hS%1J9tDNQ({dCpbty#a_ zms+Yi$fi)IspJ*?-55V{m_^!nx#WGY;e$b>af?(5t}FwuNiTYQ;rNALS>j%u_l#t1QP=uU zmPyEm3>PvtY3=dltRVm=&@ftDmSK}WRDDV4GoacMk>)8g5Lwl5tfV#;(n=Z+@g_s- z$q_pLP@gpKI>DkE`F{+wjPb(48TXL`+3e#0o5MGGdPQC)CcIb-2EH2EJY@KdcGy#* zl!By12rN22ar=9Wqhqg~0kXN`{35E2Hbo@8I z=dcP*YgBoIF6Ft8j=U6sO;}xS9A%jXEfI%(+6J-V8Q~C*(o)VR7#XZ?6A;1YRi-lX zyUdyJ&NqdQG~f~GysfHx_4{{RA}0f;q$CT#B%_((0^i~oO$8g8+Im-1b;-Y?faJ4G zZfL4|)l@C?)qMDTc`j4002ovPDHLkV1mmrH + icons/media-skip-backward.png + icons/media-playback-stop.png icons/edit-delete.png icons/dialog-close.png icons/list-remove.png diff --git a/src/bedit_gui/simulation_application.py b/src/bedit_gui/simulation_application.py new file mode 100644 index 0000000..3a5b218 --- /dev/null +++ b/src/bedit_gui/simulation_application.py @@ -0,0 +1,31 @@ +from __future__ import annotations + +import sys +import argparse + +def parse_arguments(): + parser = argparse.ArgumentParser(exit_on_error=False) + + parser.add_argument( + "-f", "--file", type=str, help="Path to a BEditor BEsim file to open", default=None, required=False + ) + parser.add_argument( + "-c", "--component", type=str, help="Component path in BEdit file to simulate", default=None, required=False + ) + parser.add_argument( + "-s", "--simulation", type=str, help="Simulation name in BEdit file to simulate", default=None, required=False + ) + + return parser.parse_args(), parser + +def main() -> int: + try: + args, parser = parse_arguments() + # TODO check if file is a BEditor file (.beb or .json) + if args.file and not (args.component or args.simulation): + parser.error("Component or Simulation required when opening a BEdit file") + except argparse.ArgumentError as e: + print(e.message) + return 1 + + return 0 \ No newline at end of file diff --git a/src/bedit_gui/simulation_models.py b/src/bedit_gui/simulation_models.py new file mode 100644 index 0000000..6a95d99 --- /dev/null +++ b/src/bedit_gui/simulation_models.py @@ -0,0 +1,11 @@ +from __future__ import annotations + +from collections.abc import Mapping +from dataclasses import dataclass, field +from enum import Enum +from typing import Any + +@dataclass +class SimulationRoot: + format_version: int = 1 + model_file_path: str | None # The file path of the BEdit file if there is one \ No newline at end of file diff --git a/src/bedit_gui/ui/forms/main_window.ui b/src/bedit_gui/ui/forms/main_window.ui index 533333d..57b43c4 100644 --- a/src/bedit_gui/ui/forms/main_window.ui +++ b/src/bedit_gui/ui/forms/main_window.ui @@ -72,6 +72,7 @@ Help + @@ -460,6 +461,11 @@ QAction::MenuRole::NoRole + + + About + + diff --git a/src/bedit_gui/ui/forms/simulation_window.ui b/src/bedit_gui/ui/forms/simulation_window.ui new file mode 100644 index 0000000..e857e8f --- /dev/null +++ b/src/bedit_gui/ui/forms/simulation_window.ui @@ -0,0 +1,309 @@ + + + SimulationWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + + 0 + + + + Tab 1 + + + + + + + + + + 0 + 0 + 800 + 22 + + + + + File + + + + + + + + Simulation + + + + + + + + + + Edit + + + + + + + + + Tools + + + + + Help + + + + + + + + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + + + Log + + + 8 + + + + + + + + + + + + Signals + + + 1 + + + + + + + false + + + + 1 + + + + + + + + + + + :/icons/icons/media-playback-start.png:/icons/icons/media-playback-start.png + + + Run Simulation + + + QAction::MenuRole::NoRole + + + + + + :/icons/icons/media-playback-stop.png:/icons/icons/media-playback-stop.png + + + Stop Simulation + + + QAction::MenuRole::NoRole + + + + + + :/icons/icons/media-skip-backward.png:/icons/icons/media-skip-backward.png + + + Restart Simulation + + + QAction::MenuRole::NoRole + + + + + + :/icons/icons/configure.png:/icons/icons/configure.png + + + Simulation Options + + + QAction::MenuRole::NoRole + + + + + + :/icons/icons/document-new.png:/icons/icons/document-new.png + + + New Simulation Run + + + QAction::MenuRole::NoRole + + + + + + :/icons/icons/document-open.png:/icons/icons/document-open.png + + + Open Simulation Run + + + QAction::MenuRole::NoRole + + + + + + :/icons/icons/document-save.png:/icons/icons/document-save.png + + + Save Simulation Run + + + QAction::MenuRole::NoRole + + + + + + :/icons/icons/edit-undo.png:/icons/icons/edit-undo.png + + + Undo + + + Ctrl+Z + + + QAction::MenuRole::NoRole + + + + + + :/icons/icons/edit-redo.png:/icons/icons/edit-redo.png + + + Redo + + + Ctrl+Y + + + QAction::MenuRole::NoRole + + + + + + :/icons/icons/preferences-system.png:/icons/icons/preferences-system.png + + + Settings + + + QAction::MenuRole::NoRole + + + + + About + + + + + About QT + + + + + + + +