more ui files instead of python generated ui
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from PySide6.QtWidgets import QDialog, QMessageBox, QPushButton
|
||||
from PySide6.QtWidgets import QDialog, QMessageBox
|
||||
|
||||
from bedit.core.model import Component
|
||||
from bedit.gui.graphics.icon_editor import IconEditorDialog
|
||||
@@ -15,16 +15,7 @@ class ComponentOptionsDialog(QDialog):
|
||||
self.edited_inputs = component.inputs
|
||||
self.edited_outputs = component.outputs
|
||||
self.ui.nameEdit.setText(component.name)
|
||||
for widget in (
|
||||
self.ui.shapeLabel, self.ui.shapeCombo, self.ui.iconTextLabel,
|
||||
self.ui.iconTextEdit, self.ui.fillLabel, self.ui.fillEdit,
|
||||
self.ui.borderLabel, self.ui.borderEdit,
|
||||
):
|
||||
widget.hide()
|
||||
self.icon_editor_button = QPushButton("Edit Icon…", self)
|
||||
self.icon_editor_button.setToolTip("Open the vector icon and port-position editor")
|
||||
self.icon_editor_button.clicked.connect(self.edit_icon)
|
||||
self.ui.optionsForm.insertRow(1, "Icon:", self.icon_editor_button)
|
||||
self.ui.editIconButton.clicked.connect(self.edit_icon)
|
||||
self.ui.showSubtreeCheckBox.setChecked(component.show_subtree_in_library)
|
||||
|
||||
def edit_icon(self) -> None:
|
||||
|
||||
@@ -2,25 +2,11 @@ from copy import deepcopy
|
||||
from uuid import uuid4
|
||||
|
||||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtWidgets import (
|
||||
QComboBox,
|
||||
QDialog,
|
||||
QDialogButtonBox,
|
||||
QFormLayout,
|
||||
QHBoxLayout,
|
||||
QLabel,
|
||||
QLineEdit,
|
||||
QListWidget,
|
||||
QListWidgetItem,
|
||||
QMessageBox,
|
||||
QPushButton,
|
||||
QSplitter,
|
||||
QVBoxLayout,
|
||||
QWidget,
|
||||
)
|
||||
from PySide6.QtWidgets import QDialog, QDialogButtonBox, QListWidgetItem, QMessageBox
|
||||
|
||||
from bedit.core.model import Component, Port
|
||||
from bedit.core.port_types import PortTypeRegistry
|
||||
from bedit.gui.generated.ui_port_options_dialog import Ui_PortOptionsDialog
|
||||
|
||||
|
||||
PORT_ROLE = Qt.ItemDataRole.UserRole
|
||||
@@ -31,60 +17,34 @@ class PortOptionsDialog(QDialog):
|
||||
|
||||
def __init__(self, component: Component, parent=None, *, read_only: bool = False) -> None:
|
||||
super().__init__(parent)
|
||||
self.ui = Ui_PortOptionsDialog()
|
||||
self.ui.setupUi(self)
|
||||
self.setWindowTitle(f"Port Options — {component.name}")
|
||||
self.resize(620, 380)
|
||||
self.ports: list[tuple[Port, str]] = [
|
||||
*((deepcopy(port), "input") for port in component.inputs),
|
||||
*((deepcopy(port), "output") for port in component.outputs),
|
||||
]
|
||||
self._loading = False
|
||||
layout = QVBoxLayout(self)
|
||||
splitter = QSplitter()
|
||||
left = QWidget()
|
||||
left_layout = QVBoxLayout(left)
|
||||
self.list = QListWidget()
|
||||
self.list.currentRowChanged.connect(self._load_current)
|
||||
left_layout.addWidget(self.list)
|
||||
port_buttons = QHBoxLayout()
|
||||
self.add_button = QPushButton("Add Port")
|
||||
self.remove_button = QPushButton("Remove Port")
|
||||
self.add_button.clicked.connect(self.add_port)
|
||||
self.remove_button.clicked.connect(self.remove_port)
|
||||
port_buttons.addWidget(self.add_button)
|
||||
port_buttons.addWidget(self.remove_button)
|
||||
left_layout.addLayout(port_buttons)
|
||||
right = QWidget()
|
||||
form = QFormLayout(right)
|
||||
self.name_edit = QLineEdit()
|
||||
self.type_combo = QComboBox()
|
||||
self.ui.typeCombo.clear()
|
||||
for port_type in PortTypeRegistry.all():
|
||||
self.type_combo.addItem(port_type.display_name, port_type.id)
|
||||
self.orientation_combo = QComboBox()
|
||||
self.orientation_combo.addItem("Input", "input")
|
||||
self.orientation_combo.addItem("Output", "output")
|
||||
form.addRow("Name:", self.name_edit)
|
||||
form.addRow("Type:", self.type_combo)
|
||||
form.addRow("Orientation:", self.orientation_combo)
|
||||
form.addRow("", QLabel("New ports start at (0, 0) in the icon editor."))
|
||||
self.name_edit.textEdited.connect(self._store_current)
|
||||
self.type_combo.currentIndexChanged.connect(self._store_current)
|
||||
self.orientation_combo.currentIndexChanged.connect(self._store_current)
|
||||
splitter.addWidget(left)
|
||||
splitter.addWidget(right)
|
||||
splitter.setSizes([250, 370])
|
||||
layout.addWidget(splitter)
|
||||
buttons = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
|
||||
buttons.accepted.connect(self.accept)
|
||||
buttons.rejected.connect(self.reject)
|
||||
layout.addWidget(buttons)
|
||||
self.ui.typeCombo.addItem(port_type.display_name, port_type.id)
|
||||
self.ui.orientationCombo.setItemData(0, "input")
|
||||
self.ui.orientationCombo.setItemData(1, "output")
|
||||
self.ui.portList.currentRowChanged.connect(self._load_current)
|
||||
self.ui.addPortButton.clicked.connect(self.add_port)
|
||||
self.ui.removePortButton.clicked.connect(self.remove_port)
|
||||
self.ui.nameEdit.textEdited.connect(self._store_current)
|
||||
self.ui.typeCombo.currentIndexChanged.connect(self._store_current)
|
||||
self.ui.orientationCombo.currentIndexChanged.connect(self._store_current)
|
||||
self.ui.portSplitter.setSizes([250, 370])
|
||||
if read_only:
|
||||
self.add_button.setEnabled(False)
|
||||
self.remove_button.setEnabled(False)
|
||||
self.name_edit.setReadOnly(True)
|
||||
self.type_combo.setEnabled(False)
|
||||
self.orientation_combo.setEnabled(False)
|
||||
buttons.button(QDialogButtonBox.StandardButton.Ok).setText("Close")
|
||||
buttons.button(QDialogButtonBox.StandardButton.Cancel).hide()
|
||||
self.ui.addPortButton.setEnabled(False)
|
||||
self.ui.removePortButton.setEnabled(False)
|
||||
self.ui.nameEdit.setReadOnly(True)
|
||||
self.ui.typeCombo.setEnabled(False)
|
||||
self.ui.orientationCombo.setEnabled(False)
|
||||
self.ui.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setText("Close")
|
||||
self.ui.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).hide()
|
||||
self._rebuild_list(0 if self.ports else -1)
|
||||
|
||||
@property
|
||||
@@ -96,12 +56,12 @@ class PortOptionsDialog(QDialog):
|
||||
return [port for port, orientation in self.ports if orientation == "output"]
|
||||
|
||||
def _rebuild_list(self, row: int = -1) -> None:
|
||||
self.list.clear()
|
||||
self.ui.portList.clear()
|
||||
for port, orientation in self.ports:
|
||||
item = QListWidgetItem(f"{port.name} [{orientation}, {port.type}]")
|
||||
item.setData(PORT_ROLE, port.id)
|
||||
self.list.addItem(item)
|
||||
self.list.setCurrentRow(min(row, len(self.ports) - 1))
|
||||
self.ui.portList.addItem(item)
|
||||
self.ui.portList.setCurrentRow(min(row, len(self.ports) - 1))
|
||||
self._update_enabled()
|
||||
|
||||
def _load_current(self, row: int) -> None:
|
||||
@@ -109,30 +69,30 @@ class PortOptionsDialog(QDialog):
|
||||
enabled = 0 <= row < len(self.ports)
|
||||
if enabled:
|
||||
port, orientation = self.ports[row]
|
||||
self.name_edit.setText(port.name)
|
||||
self.type_combo.setCurrentIndex(self.type_combo.findData(port.type))
|
||||
self.orientation_combo.setCurrentIndex(self.orientation_combo.findData(orientation))
|
||||
self.ui.nameEdit.setText(port.name)
|
||||
self.ui.typeCombo.setCurrentIndex(self.ui.typeCombo.findData(port.type))
|
||||
self.ui.orientationCombo.setCurrentIndex(self.ui.orientationCombo.findData(orientation))
|
||||
else:
|
||||
self.name_edit.clear()
|
||||
self.ui.nameEdit.clear()
|
||||
self._loading = False
|
||||
self._update_enabled()
|
||||
|
||||
def _update_enabled(self) -> None:
|
||||
enabled = self.list.currentRow() >= 0
|
||||
self.remove_button.setEnabled(enabled)
|
||||
self.name_edit.setEnabled(enabled)
|
||||
self.type_combo.setEnabled(enabled)
|
||||
self.orientation_combo.setEnabled(enabled)
|
||||
enabled = self.ui.portList.currentRow() >= 0
|
||||
self.ui.removePortButton.setEnabled(enabled)
|
||||
self.ui.nameEdit.setEnabled(enabled)
|
||||
self.ui.typeCombo.setEnabled(enabled)
|
||||
self.ui.orientationCombo.setEnabled(enabled)
|
||||
|
||||
def _store_current(self) -> None:
|
||||
row = self.list.currentRow()
|
||||
row = self.ui.portList.currentRow()
|
||||
if self._loading or not (0 <= row < len(self.ports)):
|
||||
return
|
||||
port, _orientation = self.ports[row]
|
||||
port.name = self.name_edit.text()
|
||||
port.type = self.type_combo.currentData()
|
||||
self.ports[row] = (port, self.orientation_combo.currentData())
|
||||
self.list.item(row).setText(
|
||||
port.name = self.ui.nameEdit.text()
|
||||
port.type = self.ui.typeCombo.currentData()
|
||||
self.ports[row] = (port, self.ui.orientationCombo.currentData())
|
||||
self.ui.portList.item(row).setText(
|
||||
f"{port.name} [{self.ports[row][1]}, {port.type}]"
|
||||
)
|
||||
|
||||
@@ -145,11 +105,11 @@ class PortOptionsDialog(QDialog):
|
||||
)
|
||||
self.ports.append((port, "input"))
|
||||
self._rebuild_list(len(self.ports) - 1)
|
||||
self.name_edit.selectAll()
|
||||
self.name_edit.setFocus()
|
||||
self.ui.nameEdit.selectAll()
|
||||
self.ui.nameEdit.setFocus()
|
||||
|
||||
def remove_port(self) -> None:
|
||||
row = self.list.currentRow()
|
||||
row = self.ui.portList.currentRow()
|
||||
if row >= 0:
|
||||
self.ports.pop(row)
|
||||
self._rebuild_list(min(row, len(self.ports) - 1))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from pathlib import Path
|
||||
|
||||
from PySide6.QtCore import QSettings, Signal
|
||||
from PySide6.QtWidgets import QDialog, QFileDialog, QFormLayout, QGroupBox, QSpinBox
|
||||
from PySide6.QtWidgets import QDialog, QFileDialog
|
||||
|
||||
from bedit.core.libraries import default_library_paths
|
||||
from bedit.gui.preferences import application_settings
|
||||
@@ -17,22 +17,9 @@ class SettingsDialog(QDialog):
|
||||
super().__init__(parent)
|
||||
self.ui = Ui_SettingsDialog()
|
||||
self.ui.setupUi(self)
|
||||
self.grid_group = QGroupBox("Editor grids", self.ui.generalTab)
|
||||
grid_form = QFormLayout(self.grid_group)
|
||||
self.graph_grid_spin = QSpinBox()
|
||||
self.graph_grid_spin.setRange(8, 512)
|
||||
self.graph_grid_spin.setSuffix(" units")
|
||||
self.graph_snap_spin = QSpinBox()
|
||||
self.graph_snap_spin.setRange(1, 128)
|
||||
self.graph_snap_spin.setSuffix(" units")
|
||||
self.graph_grid_spin.valueChanged.connect(self.graph_snap_spin.setMaximum)
|
||||
self.icon_grid_spin = QSpinBox()
|
||||
self.icon_grid_spin.setRange(1, 64)
|
||||
self.icon_grid_spin.setSuffix(" units")
|
||||
grid_form.addRow("Workspace grid size:", self.graph_grid_spin)
|
||||
grid_form.addRow("Workspace snapping size:", self.graph_snap_spin)
|
||||
grid_form.addRow("Icon grid size:", self.icon_grid_spin)
|
||||
self.ui.generalLayout.insertWidget(1, self.grid_group)
|
||||
self.ui.graphGridSpinBox.valueChanged.connect(
|
||||
self.ui.graphSnapSpinBox.setMaximum
|
||||
)
|
||||
self.settings = application_settings()
|
||||
self.ui.addLibraryFileButton.clicked.connect(self._add_library_file)
|
||||
self.ui.addLibraryFolderButton.clicked.connect(self._add_library_folder)
|
||||
@@ -53,9 +40,9 @@ class SettingsDialog(QDialog):
|
||||
self.ui.autosaveIntervalSpinBox.setValue(int(interval))
|
||||
self.ui.libraryPathsList.clear()
|
||||
self.ui.libraryPathsList.addItems(self.library_paths(self.settings))
|
||||
self.graph_grid_spin.setValue(self.graph_grid_size(self.settings))
|
||||
self.graph_snap_spin.setValue(self.graph_snap_size(self.settings))
|
||||
self.icon_grid_spin.setValue(self.icon_grid_size(self.settings))
|
||||
self.ui.graphGridSpinBox.setValue(self.graph_grid_size(self.settings))
|
||||
self.ui.graphSnapSpinBox.setValue(self.graph_snap_size(self.settings))
|
||||
self.ui.iconGridSpinBox.setValue(self.icon_grid_size(self.settings))
|
||||
self._update_remove_button()
|
||||
|
||||
@staticmethod
|
||||
@@ -130,9 +117,9 @@ class SettingsDialog(QDialog):
|
||||
for row in range(self.ui.libraryPathsList.count())
|
||||
]
|
||||
self.settings.setValue("libraries/paths", paths)
|
||||
self.settings.setValue("grid/graphSize", self.graph_grid_spin.value())
|
||||
self.settings.setValue("grid/graphSnapSize", self.graph_snap_spin.value())
|
||||
self.settings.setValue("grid/iconSize", self.icon_grid_spin.value())
|
||||
self.settings.setValue("grid/graphSize", self.ui.graphGridSpinBox.value())
|
||||
self.settings.setValue("grid/graphSnapSize", self.ui.graphSnapSpinBox.value())
|
||||
self.settings.setValue("grid/iconSize", self.ui.iconGridSpinBox.value())
|
||||
self.settings.sync()
|
||||
self.settingsChanged.emit()
|
||||
super().accept()
|
||||
|
||||
Reference in New Issue
Block a user