Simulation settings window

This commit is contained in:
2026-07-30 21:27:15 +02:00
parent a03c6d624e
commit b3aabae5e8
9 changed files with 372 additions and 20 deletions

View File

@@ -0,0 +1,48 @@
from __future__ import annotations
from collections.abc import Callable
from typing import Protocol
from PySide6.QtCore import QObject
from PySide6.QtWidgets import QDialog
from bedit_core.models import Component, ComponentID, GraphImplementation
from bedit_gui.documents import Document
from bedit_gui.models import SimulationDatabase
from bedit_gui.views.dialogs.simulation_settings_dialog import SimulationSettingsDialog
from bedit_gui.views.main_window import MainWindow
class SimulationSettingsDialogLike(Protocol):
def exec(self) -> int: ...
def database(self) -> SimulationDatabase: ...
SimulationSettingsDialogFactory = Callable[[SimulationDatabase, list[tuple[ComponentID, str]], MainWindow], SimulationSettingsDialogLike]
class SimulationSettingsController(QObject):
def __init__(self, document: Document, window: MainWindow, dialog_factory: SimulationSettingsDialogFactory = SimulationSettingsDialog) -> None:
super().__init__(window)
self.document = document
self.window = window
self.dialog_factory = dialog_factory
window.ui.actionSimulation_Settings.triggered.connect(self.open_settings)
def open_settings(self) -> None:
dialog = self.dialog_factory(self.document.simulation_database(), self._components(), self.window)
if dialog.exec() == QDialog.DialogCode.Accepted:
self.document.change_simulation_database(dialog.database())
def _components(self) -> list[tuple[ComponentID, str]]:
components: list[tuple[ComponentID, str]] = []
def collect(items: dict[ComponentID, Component], path: tuple[str, ...] = ()) -> None:
for component_id, component in items.items():
component_path = (*path, component.name)
components.append((component_id, ".".join(component_path)))
if isinstance(component.implementation, GraphImplementation):
collect(component.implementation.graph.components, component_path)
collect(self.document.model.root)
return components