port and param editor in and outside of text editor the same

This commit is contained in:
2026-07-22 11:45:43 +02:00
parent edefb23edc
commit 0c578af85d
6 changed files with 72 additions and 316 deletions

View File

@@ -113,6 +113,9 @@ Keep the root of `src/bedit` minimal. New UI modules should go into the relevant
`source.initialEquations` and `source.equations`, with the same highlighting `source.initialEquations` and `source.equations`, with the same highlighting
and completion in all three fields. The composer emits each in its matching and completion in all three fields. The composer emits each in its matching
Modelica section. Modelica section.
- The text-definition view embeds the same `PortEditor` and `ParameterEditor`
implementations used by the standalone options dialogs. Do not reintroduce
separate port/parameter tables in the text editor.
- Application-wide messages use `core.application_log.get_logger()`. The main - Application-wide messages use `core.application_log.get_logger()`. The main
window installs the Qt log-panel handler; core code must only use standard window installs the Qt log-panel handler; core code must only use standard
Python logging and must not import the GUI handler. Python logging and must not import the GUI handler.

View File

@@ -1,7 +1,7 @@
from copy import deepcopy from copy import deepcopy
from uuid import uuid4 from uuid import uuid4
from PySide6.QtCore import Qt from PySide6.QtCore import Qt, Signal
from PySide6.QtWidgets import QDialog, QListWidgetItem, QMessageBox from PySide6.QtWidgets import QDialog, QListWidgetItem, QMessageBox
from bedit.core.model import Component, Parameter from bedit.core.model import Component, Parameter
@@ -15,6 +15,8 @@ PARAMETER_ROLE = Qt.ItemDataRole.UserRole
class ParameterOptionsDialog(QDialog): class ParameterOptionsDialog(QDialog):
"""Editor for parameters shared by graph and text components.""" """Editor for parameters shared by graph and text components."""
edited = Signal()
def __init__(self, component: Component, parent=None, *, read_only: bool = False) -> None: def __init__(self, component: Component, parent=None, *, read_only: bool = False) -> None:
super().__init__(parent) super().__init__(parent)
self.ui = Ui_ParameterOptionsDialog() self.ui = Ui_ParameterOptionsDialog()
@@ -109,6 +111,13 @@ class ParameterOptionsDialog(QDialog):
self.ui.parameterList.item(row).setText( self.ui.parameterList.item(row).setText(
f"{parameter.name} [{parameter.type}] = {parameter.value}" f"{parameter.name} [{parameter.type}] = {parameter.value}"
) )
self.edited.emit()
def set_parameters(self, parameters: list[Parameter]) -> None:
self._loading = True
self.parameters = deepcopy(parameters)
self._loading = False
self._rebuild_list(0 if self.parameters else -1)
def add_parameter(self) -> None: def add_parameter(self) -> None:
self.parameters.append( self.parameters.append(
@@ -120,12 +129,14 @@ class ParameterOptionsDialog(QDialog):
self._rebuild_list(len(self.parameters) - 1) self._rebuild_list(len(self.parameters) - 1)
self.ui.nameEdit.selectAll() self.ui.nameEdit.selectAll()
self.ui.nameEdit.setFocus() self.ui.nameEdit.setFocus()
self.edited.emit()
def remove_parameter(self) -> None: def remove_parameter(self) -> None:
row = self.ui.parameterList.currentRow() row = self.ui.parameterList.currentRow()
if row >= 0: if row >= 0:
self.parameters.pop(row) self.parameters.pop(row)
self._rebuild_list(min(row, len(self.parameters) - 1)) self._rebuild_list(min(row, len(self.parameters) - 1))
self.edited.emit()
def accept(self) -> None: def accept(self) -> None:
self._store_current() self._store_current()
@@ -137,3 +148,12 @@ class ParameterOptionsDialog(QDialog):
QMessageBox.warning(self, "Invalid parameter", "Parameter names must be unique.") QMessageBox.warning(self, "Invalid parameter", "Parameter names must be unique.")
return return
super().accept() super().accept()
class ParameterEditor(ParameterOptionsDialog):
"""The parameter options editor embedded without dialog buttons."""
def __init__(self, parent=None) -> None:
super().__init__(Component(id="embedded-parameter-editor", name="Parameters"), parent)
self.setWindowFlags(Qt.WindowType.Widget)
self.ui.buttonBox.hide()

View File

@@ -1,7 +1,7 @@
from copy import deepcopy from copy import deepcopy
from uuid import uuid4 from uuid import uuid4
from PySide6.QtCore import Qt from PySide6.QtCore import Qt, Signal
from PySide6.QtWidgets import QDialog, QDialogButtonBox, QListWidgetItem, QMessageBox from PySide6.QtWidgets import QDialog, QDialogButtonBox, QListWidgetItem, QMessageBox
from bedit.core.model import Component, Port from bedit.core.model import Component, Port
@@ -16,6 +16,8 @@ PORT_ROLE = Qt.ItemDataRole.UserRole
class PortOptionsDialog(QDialog): class PortOptionsDialog(QDialog):
"""Unified editor for a component's typed, oriented ports.""" """Unified editor for a component's typed, oriented ports."""
edited = Signal()
def __init__(self, component: Component, parent=None, *, read_only: bool = False) -> None: def __init__(self, component: Component, parent=None, *, read_only: bool = False) -> None:
super().__init__(parent) super().__init__(parent)
self.ui = Ui_PortOptionsDialog() self.ui = Ui_PortOptionsDialog()
@@ -139,6 +141,16 @@ class PortOptionsDialog(QDialog):
self.ui.portList.item(row).setText( self.ui.portList.item(row).setText(
f"{port.name} [{self.ports[row][1]}, {port.type}]" f"{port.name} [{self.ports[row][1]}, {port.type}]"
) )
self.edited.emit()
def set_ports(self, inputs: list[Port], outputs: list[Port]) -> None:
self._loading = True
self.ports = [
*((deepcopy(port), "input") for port in inputs),
*((deepcopy(port), "output") for port in outputs),
]
self._loading = False
self._rebuild_list(0 if self.ports else -1)
def add_port(self) -> None: def add_port(self) -> None:
port = Port( port = Port(
@@ -151,12 +163,14 @@ class PortOptionsDialog(QDialog):
self._rebuild_list(len(self.ports) - 1) self._rebuild_list(len(self.ports) - 1)
self.ui.nameEdit.selectAll() self.ui.nameEdit.selectAll()
self.ui.nameEdit.setFocus() self.ui.nameEdit.setFocus()
self.edited.emit()
def remove_port(self) -> None: def remove_port(self) -> None:
row = self.ui.portList.currentRow() row = self.ui.portList.currentRow()
if row >= 0: if row >= 0:
self.ports.pop(row) self.ports.pop(row)
self._rebuild_list(min(row, len(self.ports) - 1)) self._rebuild_list(min(row, len(self.ports) - 1))
self.edited.emit()
def accept(self) -> None: def accept(self) -> None:
self._store_current() self._store_current()
@@ -164,3 +178,12 @@ class PortOptionsDialog(QDialog):
QMessageBox.warning(self, "Invalid port", "Every port must have a name.") QMessageBox.warning(self, "Invalid port", "Every port must have a name.")
return return
super().accept() super().accept()
class PortEditor(PortOptionsDialog):
"""The port options editor embedded without dialog confirmation buttons."""
def __init__(self, parent=None) -> None:
super().__init__(Component(id="embedded-port-editor", name="Ports"), parent)
self.setWindowFlags(Qt.WindowType.Widget)
self.ui.buttonBox.hide()

View File

@@ -1,18 +1,10 @@
from copy import deepcopy from PySide6.QtCore import Signal
from uuid import uuid4 from PySide6.QtWidgets import QWidget
from PySide6.QtCore import Qt, Signal
from PySide6.QtWidgets import QCheckBox, QComboBox, QHeaderView, QTableWidgetItem, QWidget
from bedit.core.model import Parameter, Port from bedit.core.model import Parameter, Port
from bedit.core.port_types import PortTypeRegistry
from bedit.gui.generated.ui_text_definition_editor import Ui_TextDefinitionEditor from bedit.gui.generated.ui_text_definition_editor import Ui_TextDefinitionEditor
ID_ROLE = Qt.ItemDataRole.UserRole
PROPERTIES_ROLE = Qt.ItemDataRole.UserRole + 1
class TextDefinitionEditor(QWidget): class TextDefinitionEditor(QWidget):
"""Editor for a text component's Modelica source, ports, and parameters.""" """Editor for a text component's Modelica source, ports, and parameters."""
@@ -25,27 +17,14 @@ class TextDefinitionEditor(QWidget):
self.ui.setupUi(self) self.ui.setupUi(self)
self._modified = False self._modified = False
self._loading = False self._loading = False
self.ui.portsTable.horizontalHeader().setSectionResizeMode(
QHeaderView.ResizeMode.Interactive
)
self.ui.parametersTable.horizontalHeader().setSectionResizeMode(
QHeaderView.ResizeMode.Interactive
)
self.ui.columnSplitter.setSizes([560, 340]) self.ui.columnSplitter.setSizes([560, 340])
self.ui.sourceSplitter.setSizes([180, 180, 240]) self.ui.sourceSplitter.setSizes([180, 180, 240])
self.ui.definitionSplitter.setSizes([300, 300]) self.ui.definitionSplitter.setSizes([300, 300])
self.ui.declarationsEdit.textChanged.connect(self._mark_modified) self.ui.declarationsEdit.textChanged.connect(self._mark_modified)
self.ui.initialEquationsEdit.textChanged.connect(self._mark_modified) self.ui.initialEquationsEdit.textChanged.connect(self._mark_modified)
self.ui.equationsEdit.textChanged.connect(self._mark_modified) self.ui.equationsEdit.textChanged.connect(self._mark_modified)
self.ui.portsTable.cellChanged.connect(self._symbols_modified) self.ui.portEditor.edited.connect(self._symbols_modified)
self.ui.parametersTable.cellChanged.connect(self._symbols_modified) self.ui.parameterEditor.edited.connect(self._symbols_modified)
self.ui.addPortButton.clicked.connect(self.add_port)
self.ui.removePortButton.clicked.connect(self.remove_port)
self.ui.addParameterButton.clicked.connect(self.add_parameter)
self.ui.removeParameterButton.clicked.connect(self.remove_parameter)
self.ui.portsTable.itemSelectionChanged.connect(self._update_buttons)
self.ui.parametersTable.itemSelectionChanged.connect(self._update_buttons)
self._update_buttons()
@property @property
def is_modified(self) -> bool: def is_modified(self) -> bool:
@@ -65,47 +44,11 @@ class TextDefinitionEditor(QWidget):
@property @property
def ports(self) -> tuple[list[Port], list[Port]]: def ports(self) -> tuple[list[Port], list[Port]]:
inputs: list[Port] = [] return self.ui.portEditor.inputs, self.ui.portEditor.outputs
outputs: list[Port] = []
for row in range(self.ui.portsTable.rowCount()):
name_item = self.ui.portsTable.item(row, 0)
type_combo = self.ui.portsTable.cellWidget(row, 1)
orientation_combo = self.ui.portsTable.cellWidget(row, 2)
multiple_check = self.ui.portsTable.cellWidget(row, 3)
port = Port(
id=name_item.data(ID_ROLE),
name=name_item.text().strip(),
type=type_combo.currentData(),
properties=deepcopy(name_item.data(PROPERTIES_ROLE) or {}),
allows_multiple_connections=multiple_check.isChecked(),
value_type=self.ui.portsTable.item(row, 4).text().strip() or "real",
quantity=self.ui.portsTable.item(row, 5).text().strip(),
unit=self.ui.portsTable.item(row, 6).text().strip(),
rows=int(self.ui.portsTable.item(row, 7).text()),
columns=int(self.ui.portsTable.item(row, 8).text()),
description=self.ui.portsTable.item(row, 9).text(),
)
target = inputs if orientation_combo.currentData() == "input" else outputs
target.append(port)
return inputs, outputs
@property @property
def parameters(self) -> list[Parameter]: def parameters(self) -> list[Parameter]:
table = self.ui.parametersTable return self.ui.parameterEditor.parameters
return [
Parameter(
id=table.item(row, 0).data(ID_ROLE),
name=table.item(row, 0).text().strip(),
type=table.item(row, 1).text().strip(),
value=table.item(row, 2).text(),
quantity=table.item(row, 3).text().strip(),
unit=table.item(row, 4).text().strip(),
rows=int(table.item(row, 5).text()),
columns=int(table.item(row, 6).text()),
description=table.item(row, 7).text(),
)
for row in range(table.rowCount())
]
def set_definition( def set_definition(
self, self,
@@ -120,18 +63,11 @@ class TextDefinitionEditor(QWidget):
self.ui.declarationsEdit.setPlainText(declarations) self.ui.declarationsEdit.setPlainText(declarations)
self.ui.initialEquationsEdit.setPlainText(initial_equations) self.ui.initialEquationsEdit.setPlainText(initial_equations)
self.ui.equationsEdit.setPlainText(equations) self.ui.equationsEdit.setPlainText(equations)
self.ui.portsTable.setRowCount(0) self.ui.portEditor.set_ports(inputs, outputs)
for port in inputs: self.ui.parameterEditor.set_parameters(parameters)
self._append_port(port, "input")
for port in outputs:
self._append_port(port, "output")
self.ui.parametersTable.setRowCount(0)
for parameter in parameters:
self._append_parameter(parameter)
self._set_editor_symbols(inputs, outputs, parameters) self._set_editor_symbols(inputs, outputs, parameters)
self._loading = False self._loading = False
self.set_modified(False) self.set_modified(False)
self._update_buttons()
def set_modified(self, modified: bool) -> None: def set_modified(self, modified: bool) -> None:
if self._modified != modified: if self._modified != modified:
@@ -149,17 +85,8 @@ class TextDefinitionEditor(QWidget):
self._mark_modified() self._mark_modified()
def _refresh_editor_symbols(self) -> None: def _refresh_editor_symbols(self) -> None:
inputs: list[str] = [] inputs, outputs = self.ports
outputs: list[str] = [] self._set_editor_symbols(inputs, outputs, self.parameters)
for row in range(self.ui.portsTable.rowCount()):
name_item = self.ui.portsTable.item(row, 0)
orientation = self.ui.portsTable.cellWidget(row, 2).currentData()
(inputs if orientation == "input" else outputs).append(name_item.text())
parameters = [
self.ui.parametersTable.item(row, 0).text()
for row in range(self.ui.parametersTable.rowCount())
]
self._apply_editor_symbols(inputs, outputs, parameters)
def _set_editor_symbols( def _set_editor_symbols(
self, self,
@@ -180,96 +107,3 @@ class TextDefinitionEditor(QWidget):
self.ui.declarationsEdit.set_symbols(*symbols) self.ui.declarationsEdit.set_symbols(*symbols)
self.ui.initialEquationsEdit.set_symbols(*symbols) self.ui.initialEquationsEdit.set_symbols(*symbols)
self.ui.equationsEdit.set_symbols(*symbols) self.ui.equationsEdit.set_symbols(*symbols)
def _new_combo(self, values: list[tuple[str, str]], current: str) -> QComboBox:
combo = QComboBox(self)
for label, value in values:
combo.addItem(label, value)
combo.setCurrentIndex(max(0, combo.findData(current)))
combo.currentIndexChanged.connect(self._symbols_modified)
return combo
def _append_port(self, port: Port, orientation: str) -> None:
table = self.ui.portsTable
row = table.rowCount()
table.insertRow(row)
name = QTableWidgetItem(port.name)
name.setData(ID_ROLE, port.id)
name.setData(PROPERTIES_ROLE, deepcopy(port.properties))
table.setItem(row, 0, name)
types = [(item.display_name, item.id) for item in PortTypeRegistry.all()]
table.setCellWidget(row, 1, self._new_combo(types, port.type))
table.setCellWidget(
row,
2,
self._new_combo([("Input", "input"), ("Output", "output")], orientation),
)
multiple = QCheckBox("Any", self)
multiple.setChecked(port.allows_multiple_connections)
multiple.toggled.connect(self._symbols_modified)
table.setCellWidget(row, 3, multiple)
table.setItem(row, 4, QTableWidgetItem(port.value_type))
table.setItem(row, 5, QTableWidgetItem(port.quantity))
table.setItem(row, 6, QTableWidgetItem(port.unit))
table.setItem(row, 7, QTableWidgetItem(str(port.rows)))
table.setItem(row, 8, QTableWidgetItem(str(port.columns)))
table.setItem(row, 9, QTableWidgetItem(port.description))
def _append_parameter(self, parameter: Parameter) -> None:
table = self.ui.parametersTable
row = table.rowCount()
table.insertRow(row)
name = QTableWidgetItem(parameter.name)
name.setData(ID_ROLE, parameter.id)
table.setItem(row, 0, name)
table.setItem(row, 1, QTableWidgetItem(parameter.type))
table.setItem(row, 2, QTableWidgetItem(parameter.value))
table.setItem(row, 3, QTableWidgetItem(parameter.quantity))
table.setItem(row, 4, QTableWidgetItem(parameter.unit))
table.setItem(row, 5, QTableWidgetItem(str(parameter.rows)))
table.setItem(row, 6, QTableWidgetItem(str(parameter.columns)))
table.setItem(row, 7, QTableWidgetItem(parameter.description))
def add_port(self) -> None:
port = Port(
id=f"port-{uuid4().hex[:8]}",
name=f"Port {self.ui.portsTable.rowCount() + 1}",
type="signal",
properties={"iconPosition": {"x": 0.0, "y": 0.0}},
)
self._loading = True
self._append_port(port, "input")
self._loading = False
self.ui.portsTable.selectRow(self.ui.portsTable.rowCount() - 1)
self._symbols_modified()
def remove_port(self) -> None:
row = self.ui.portsTable.currentRow()
if row >= 0:
self.ui.portsTable.removeRow(row)
self._symbols_modified()
self._update_buttons()
def add_parameter(self) -> None:
parameter = Parameter(
id=f"parameter-{uuid4().hex[:8]}",
name=f"Parameter {self.ui.parametersTable.rowCount() + 1}",
)
self._loading = True
self._append_parameter(parameter)
self._loading = False
self.ui.parametersTable.selectRow(self.ui.parametersTable.rowCount() - 1)
self._symbols_modified()
def remove_parameter(self) -> None:
row = self.ui.parametersTable.currentRow()
if row >= 0:
self.ui.parametersTable.removeRow(row)
self._symbols_modified()
self._update_buttons()
def _update_buttons(self) -> None:
self.ui.removePortButton.setEnabled(self.ui.portsTable.currentRow() >= 0)
self.ui.removeParameterButton.setEnabled(
self.ui.parametersTable.currentRow() >= 0
)

View File

@@ -15,11 +15,11 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon, QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter, QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform) QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QAbstractItemView, QApplication, QGroupBox, QHBoxLayout, from PySide6.QtWidgets import (QApplication, QGroupBox, QHBoxLayout, QSizePolicy,
QHeaderView, QPushButton, QSizePolicy, QSpacerItem, QSplitter, QVBoxLayout, QWidget)
QSplitter, QTableWidget, QTableWidgetItem, QVBoxLayout,
QWidget)
from bedit.gui.dialogs.parameter_options import ParameterEditor
from bedit.gui.dialogs.port_options import PortEditor
from bedit.gui.editors.openmodelica import OpenModelicaEditor from bedit.gui.editors.openmodelica import OpenModelicaEditor
class Ui_TextDefinitionEditor(object): class Ui_TextDefinitionEditor(object):
@@ -77,104 +77,20 @@ class Ui_TextDefinitionEditor(object):
self.portsGroup.setObjectName(u"portsGroup") self.portsGroup.setObjectName(u"portsGroup")
self.portsLayout = QVBoxLayout(self.portsGroup) self.portsLayout = QVBoxLayout(self.portsGroup)
self.portsLayout.setObjectName(u"portsLayout") self.portsLayout.setObjectName(u"portsLayout")
self.portsTable = QTableWidget(self.portsGroup) self.portEditor = PortEditor(self.portsGroup)
if (self.portsTable.columnCount() < 10): self.portEditor.setObjectName(u"portEditor")
self.portsTable.setColumnCount(10)
__qtablewidgetitem = QTableWidgetItem()
self.portsTable.setHorizontalHeaderItem(0, __qtablewidgetitem)
__qtablewidgetitem1 = QTableWidgetItem()
self.portsTable.setHorizontalHeaderItem(1, __qtablewidgetitem1)
__qtablewidgetitem2 = QTableWidgetItem()
self.portsTable.setHorizontalHeaderItem(2, __qtablewidgetitem2)
__qtablewidgetitem3 = QTableWidgetItem()
self.portsTable.setHorizontalHeaderItem(3, __qtablewidgetitem3)
__qtablewidgetitem4 = QTableWidgetItem()
self.portsTable.setHorizontalHeaderItem(4, __qtablewidgetitem4)
__qtablewidgetitem5 = QTableWidgetItem()
self.portsTable.setHorizontalHeaderItem(5, __qtablewidgetitem5)
__qtablewidgetitem6 = QTableWidgetItem()
self.portsTable.setHorizontalHeaderItem(6, __qtablewidgetitem6)
__qtablewidgetitem7 = QTableWidgetItem()
self.portsTable.setHorizontalHeaderItem(7, __qtablewidgetitem7)
__qtablewidgetitem8 = QTableWidgetItem()
self.portsTable.setHorizontalHeaderItem(8, __qtablewidgetitem8)
__qtablewidgetitem9 = QTableWidgetItem()
self.portsTable.setHorizontalHeaderItem(9, __qtablewidgetitem9)
self.portsTable.setObjectName(u"portsTable")
self.portsTable.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
self.portsTable.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
self.portsTable.setColumnCount(10)
self.portsLayout.addWidget(self.portsTable) self.portsLayout.addWidget(self.portEditor)
self.portButtonsLayout = QHBoxLayout()
self.portButtonsLayout.setObjectName(u"portButtonsLayout")
self.addPortButton = QPushButton(self.portsGroup)
self.addPortButton.setObjectName(u"addPortButton")
self.portButtonsLayout.addWidget(self.addPortButton)
self.removePortButton = QPushButton(self.portsGroup)
self.removePortButton.setObjectName(u"removePortButton")
self.portButtonsLayout.addWidget(self.removePortButton)
self.portButtonSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.portButtonsLayout.addItem(self.portButtonSpacer)
self.portsLayout.addLayout(self.portButtonsLayout)
self.definitionSplitter.addWidget(self.portsGroup) self.definitionSplitter.addWidget(self.portsGroup)
self.parametersGroup = QGroupBox(self.definitionSplitter) self.parametersGroup = QGroupBox(self.definitionSplitter)
self.parametersGroup.setObjectName(u"parametersGroup") self.parametersGroup.setObjectName(u"parametersGroup")
self.parametersLayout = QVBoxLayout(self.parametersGroup) self.parametersLayout = QVBoxLayout(self.parametersGroup)
self.parametersLayout.setObjectName(u"parametersLayout") self.parametersLayout.setObjectName(u"parametersLayout")
self.parametersTable = QTableWidget(self.parametersGroup) self.parameterEditor = ParameterEditor(self.parametersGroup)
if (self.parametersTable.columnCount() < 8): self.parameterEditor.setObjectName(u"parameterEditor")
self.parametersTable.setColumnCount(8)
__qtablewidgetitem10 = QTableWidgetItem()
self.parametersTable.setHorizontalHeaderItem(0, __qtablewidgetitem10)
__qtablewidgetitem11 = QTableWidgetItem()
self.parametersTable.setHorizontalHeaderItem(1, __qtablewidgetitem11)
__qtablewidgetitem12 = QTableWidgetItem()
self.parametersTable.setHorizontalHeaderItem(2, __qtablewidgetitem12)
__qtablewidgetitem13 = QTableWidgetItem()
self.parametersTable.setHorizontalHeaderItem(3, __qtablewidgetitem13)
__qtablewidgetitem14 = QTableWidgetItem()
self.parametersTable.setHorizontalHeaderItem(4, __qtablewidgetitem14)
__qtablewidgetitem15 = QTableWidgetItem()
self.parametersTable.setHorizontalHeaderItem(5, __qtablewidgetitem15)
__qtablewidgetitem16 = QTableWidgetItem()
self.parametersTable.setHorizontalHeaderItem(6, __qtablewidgetitem16)
__qtablewidgetitem17 = QTableWidgetItem()
self.parametersTable.setHorizontalHeaderItem(7, __qtablewidgetitem17)
self.parametersTable.setObjectName(u"parametersTable")
self.parametersTable.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
self.parametersTable.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
self.parametersTable.setColumnCount(8)
self.parametersLayout.addWidget(self.parametersTable) self.parametersLayout.addWidget(self.parameterEditor)
self.parameterButtonsLayout = QHBoxLayout()
self.parameterButtonsLayout.setObjectName(u"parameterButtonsLayout")
self.addParameterButton = QPushButton(self.parametersGroup)
self.addParameterButton.setObjectName(u"addParameterButton")
self.parameterButtonsLayout.addWidget(self.addParameterButton)
self.removeParameterButton = QPushButton(self.parametersGroup)
self.removeParameterButton.setObjectName(u"removeParameterButton")
self.parameterButtonsLayout.addWidget(self.removeParameterButton)
self.parameterButtonSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.parameterButtonsLayout.addItem(self.parameterButtonSpacer)
self.parametersLayout.addLayout(self.parameterButtonsLayout)
self.definitionSplitter.addWidget(self.parametersGroup) self.definitionSplitter.addWidget(self.parametersGroup)
self.columnSplitter.addWidget(self.definitionSplitter) self.columnSplitter.addWidget(self.definitionSplitter)
@@ -192,47 +108,7 @@ class Ui_TextDefinitionEditor(object):
self.initialEquationsGroup.setTitle(QCoreApplication.translate("TextDefinitionEditor", u"Initial Equations", None)) self.initialEquationsGroup.setTitle(QCoreApplication.translate("TextDefinitionEditor", u"Initial Equations", None))
self.equationsGroup.setTitle(QCoreApplication.translate("TextDefinitionEditor", u"Equations", None)) self.equationsGroup.setTitle(QCoreApplication.translate("TextDefinitionEditor", u"Equations", None))
self.portsGroup.setTitle(QCoreApplication.translate("TextDefinitionEditor", u"Ports", None)) self.portsGroup.setTitle(QCoreApplication.translate("TextDefinitionEditor", u"Ports", None))
___qtablewidgetitem = self.portsTable.horizontalHeaderItem(0)
___qtablewidgetitem.setText(QCoreApplication.translate("TextDefinitionEditor", u"Name", None))
___qtablewidgetitem1 = self.portsTable.horizontalHeaderItem(1)
___qtablewidgetitem1.setText(QCoreApplication.translate("TextDefinitionEditor", u"Port Type", None))
___qtablewidgetitem2 = self.portsTable.horizontalHeaderItem(2)
___qtablewidgetitem2.setText(QCoreApplication.translate("TextDefinitionEditor", u"Orientation", None))
___qtablewidgetitem3 = self.portsTable.horizontalHeaderItem(3)
___qtablewidgetitem3.setText(QCoreApplication.translate("TextDefinitionEditor", u"Multiple", None))
___qtablewidgetitem4 = self.portsTable.horizontalHeaderItem(4)
___qtablewidgetitem4.setText(QCoreApplication.translate("TextDefinitionEditor", u"Value Type", None))
___qtablewidgetitem5 = self.portsTable.horizontalHeaderItem(5)
___qtablewidgetitem5.setText(QCoreApplication.translate("TextDefinitionEditor", u"Quantity", None))
___qtablewidgetitem6 = self.portsTable.horizontalHeaderItem(6)
___qtablewidgetitem6.setText(QCoreApplication.translate("TextDefinitionEditor", u"Unit", None))
___qtablewidgetitem7 = self.portsTable.horizontalHeaderItem(7)
___qtablewidgetitem7.setText(QCoreApplication.translate("TextDefinitionEditor", u"Rows", None))
___qtablewidgetitem8 = self.portsTable.horizontalHeaderItem(8)
___qtablewidgetitem8.setText(QCoreApplication.translate("TextDefinitionEditor", u"Columns", None))
___qtablewidgetitem9 = self.portsTable.horizontalHeaderItem(9)
___qtablewidgetitem9.setText(QCoreApplication.translate("TextDefinitionEditor", u"Description", None))
self.addPortButton.setText(QCoreApplication.translate("TextDefinitionEditor", u"Add Port", None))
self.removePortButton.setText(QCoreApplication.translate("TextDefinitionEditor", u"Remove Port", None))
self.parametersGroup.setTitle(QCoreApplication.translate("TextDefinitionEditor", u"Parameters", None)) self.parametersGroup.setTitle(QCoreApplication.translate("TextDefinitionEditor", u"Parameters", None))
___qtablewidgetitem10 = self.parametersTable.horizontalHeaderItem(0)
___qtablewidgetitem10.setText(QCoreApplication.translate("TextDefinitionEditor", u"Name", None))
___qtablewidgetitem11 = self.parametersTable.horizontalHeaderItem(1)
___qtablewidgetitem11.setText(QCoreApplication.translate("TextDefinitionEditor", u"Type", None))
___qtablewidgetitem12 = self.parametersTable.horizontalHeaderItem(2)
___qtablewidgetitem12.setText(QCoreApplication.translate("TextDefinitionEditor", u"Value", None))
___qtablewidgetitem13 = self.parametersTable.horizontalHeaderItem(3)
___qtablewidgetitem13.setText(QCoreApplication.translate("TextDefinitionEditor", u"Quantity", None))
___qtablewidgetitem14 = self.parametersTable.horizontalHeaderItem(4)
___qtablewidgetitem14.setText(QCoreApplication.translate("TextDefinitionEditor", u"Unit", None))
___qtablewidgetitem15 = self.parametersTable.horizontalHeaderItem(5)
___qtablewidgetitem15.setText(QCoreApplication.translate("TextDefinitionEditor", u"Rows", None))
___qtablewidgetitem16 = self.parametersTable.horizontalHeaderItem(6)
___qtablewidgetitem16.setText(QCoreApplication.translate("TextDefinitionEditor", u"Columns", None))
___qtablewidgetitem17 = self.parametersTable.horizontalHeaderItem(7)
___qtablewidgetitem17.setText(QCoreApplication.translate("TextDefinitionEditor", u"Description", None))
self.addParameterButton.setText(QCoreApplication.translate("TextDefinitionEditor", u"Add Parameter", None))
self.removeParameterButton.setText(QCoreApplication.translate("TextDefinitionEditor", u"Remove Parameter", None))
pass pass
# retranslateUi # retranslateUi

View File

@@ -40,15 +40,13 @@
<widget class="QGroupBox" name="portsGroup"> <widget class="QGroupBox" name="portsGroup">
<property name="title"><string>Ports</string></property> <property name="title"><string>Ports</string></property>
<layout class="QVBoxLayout" name="portsLayout"> <layout class="QVBoxLayout" name="portsLayout">
<item><widget class="QTableWidget" name="portsTable"><property name="selectionBehavior"><enum>QAbstractItemView::SelectionBehavior::SelectRows</enum></property><property name="selectionMode"><enum>QAbstractItemView::SelectionMode::SingleSelection</enum></property><property name="columnCount"><number>10</number></property><column><property name="text"><string>Name</string></property></column><column><property name="text"><string>Port Type</string></property></column><column><property name="text"><string>Orientation</string></property></column><column><property name="text"><string>Multiple</string></property></column><column><property name="text"><string>Value Type</string></property></column><column><property name="text"><string>Quantity</string></property></column><column><property name="text"><string>Unit</string></property></column><column><property name="text"><string>Rows</string></property></column><column><property name="text"><string>Columns</string></property></column><column><property name="text"><string>Description</string></property></column></widget></item> <item><widget class="PortEditor" name="portEditor"/></item>
<item><layout class="QHBoxLayout" name="portButtonsLayout"><item><widget class="QPushButton" name="addPortButton"><property name="text"><string>Add Port</string></property></widget></item><item><widget class="QPushButton" name="removePortButton"><property name="text"><string>Remove Port</string></property></widget></item><item><spacer name="portButtonSpacer"><property name="orientation"><enum>Qt::Orientation::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>40</width><height>20</height></size></property></spacer></item></layout></item>
</layout> </layout>
</widget> </widget>
<widget class="QGroupBox" name="parametersGroup"> <widget class="QGroupBox" name="parametersGroup">
<property name="title"><string>Parameters</string></property> <property name="title"><string>Parameters</string></property>
<layout class="QVBoxLayout" name="parametersLayout"> <layout class="QVBoxLayout" name="parametersLayout">
<item><widget class="QTableWidget" name="parametersTable"><property name="selectionBehavior"><enum>QAbstractItemView::SelectionBehavior::SelectRows</enum></property><property name="selectionMode"><enum>QAbstractItemView::SelectionMode::SingleSelection</enum></property><property name="columnCount"><number>8</number></property><column><property name="text"><string>Name</string></property></column><column><property name="text"><string>Type</string></property></column><column><property name="text"><string>Value</string></property></column><column><property name="text"><string>Quantity</string></property></column><column><property name="text"><string>Unit</string></property></column><column><property name="text"><string>Rows</string></property></column><column><property name="text"><string>Columns</string></property></column><column><property name="text"><string>Description</string></property></column></widget></item> <item><widget class="ParameterEditor" name="parameterEditor"/></item>
<item><layout class="QHBoxLayout" name="parameterButtonsLayout"><item><widget class="QPushButton" name="addParameterButton"><property name="text"><string>Add Parameter</string></property></widget></item><item><widget class="QPushButton" name="removeParameterButton"><property name="text"><string>Remove Parameter</string></property></widget></item><item><spacer name="parameterButtonSpacer"><property name="orientation"><enum>Qt::Orientation::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>40</width><height>20</height></size></property></spacer></item></layout></item>
</layout> </layout>
</widget> </widget>
</widget> </widget>
@@ -62,6 +60,8 @@
<extends>QPlainTextEdit</extends> <extends>QPlainTextEdit</extends>
<header>bedit.gui.editors.openmodelica</header> <header>bedit.gui.editors.openmodelica</header>
</customwidget> </customwidget>
<customwidget><class>PortEditor</class><extends>QWidget</extends><header>bedit.gui.dialogs.port_options</header></customwidget>
<customwidget><class>ParameterEditor</class><extends>QWidget</extends><header>bedit.gui.dialogs.parameter_options</header></customwidget>
</customwidgets> </customwidgets>
<resources/> <resources/>
<connections/> <connections/>