Parameter editor added
This commit is contained in:
@@ -4,27 +4,34 @@ from typing import Protocol
|
||||
from PySide6.QtCore import QObject, QPoint, Qt
|
||||
from PySide6.QtWidgets import QDialog, QMenu
|
||||
|
||||
from bedit_core.models import Component, Port, PortID
|
||||
from bedit_core.models import Component, Port, PortID, Parameter, ParameterID
|
||||
from bedit_core.models import Document as CoreDocument
|
||||
from bedit_gui.documents import Document
|
||||
from bedit_gui.views.dialogs.interface_editor_dialog import (
|
||||
InterfaceEditorDialog,
|
||||
)
|
||||
from bedit_gui.views.dialogs.interface_editor_dialog import InterfaceEditorDialog
|
||||
from bedit_gui.views.dialogs.param_editor_dialog import ParamEditorDialog
|
||||
from bedit_gui.views.main_window import MainWindow
|
||||
from bedit_gui.views.models.document_tree_model import DocumentTreeModel
|
||||
|
||||
|
||||
class InterfaceEditorLike(Protocol):
|
||||
def exec(self) -> int: ...
|
||||
|
||||
def ports(self) -> dict[PortID, Port]: ...
|
||||
|
||||
class ParamEditorLike(Protocol):
|
||||
def exec(self) -> int: ...
|
||||
def params(self) -> dict[ParameterID, Parameter]: ...
|
||||
|
||||
|
||||
InterfaceEditorFactory = Callable[
|
||||
[dict[PortID, Port], MainWindow],
|
||||
InterfaceEditorLike,
|
||||
]
|
||||
|
||||
ParamEditorFactory = Callable[
|
||||
[dict[ParameterID, Parameter], MainWindow],
|
||||
ParamEditorLike
|
||||
]
|
||||
|
||||
|
||||
class DocumentTreeController(QObject):
|
||||
def __init__(
|
||||
@@ -32,6 +39,7 @@ class DocumentTreeController(QObject):
|
||||
document: Document,
|
||||
window: MainWindow,
|
||||
interface_editor_factory: InterfaceEditorFactory = InterfaceEditorDialog,
|
||||
param_editor_factory: ParamEditorFactory = ParamEditorDialog,
|
||||
) -> None:
|
||||
super().__init__(window)
|
||||
|
||||
@@ -39,6 +47,7 @@ class DocumentTreeController(QObject):
|
||||
self.window = window
|
||||
self.model = DocumentTreeModel()
|
||||
self.interface_editor_factory = interface_editor_factory
|
||||
self.param_editor_factory = param_editor_factory
|
||||
|
||||
window.ui.documentTree.setModel(self.model)
|
||||
document.model_changed.connect(self._on_document_changed)
|
||||
@@ -71,11 +80,14 @@ class DocumentTreeController(QObject):
|
||||
|
||||
menu = QMenu(self.window.ui.documentTree)
|
||||
edit_interface = menu.addAction("Edit Interface")
|
||||
edit_params = menu.addAction("Edit Parameters")
|
||||
selected = menu.exec(
|
||||
self.window.ui.documentTree.viewport().mapToGlobal(position)
|
||||
)
|
||||
if selected is edit_interface:
|
||||
self._edit_interface(component)
|
||||
elif selected is edit_params:
|
||||
self._edit_params(component)
|
||||
|
||||
def _edit_interface(self, component: Component) -> None:
|
||||
dialog = self.interface_editor_factory(
|
||||
@@ -84,3 +96,12 @@ class DocumentTreeController(QObject):
|
||||
)
|
||||
if dialog.exec() == QDialog.DialogCode.Accepted:
|
||||
self.document.update_component_ports(component, dialog.ports())
|
||||
|
||||
def _edit_params(self, component: Component) -> None:
|
||||
dialog = self.param_editor_factory(
|
||||
component.parameters,
|
||||
self.window
|
||||
)
|
||||
if dialog.exec() == QDialog.DialogCode.Accepted:
|
||||
self.document.update_component_params(component, dialog.params())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user