Better drawing and added more icons
This commit is contained in:
@@ -4,7 +4,14 @@ from pathlib import Path
|
||||
|
||||
from PySide6.QtCore import Qt, Slot
|
||||
from PySide6.QtGui import QCloseEvent
|
||||
from PySide6.QtWidgets import QButtonGroup, QFileDialog, QMainWindow, QMenu, QMessageBox
|
||||
from PySide6.QtWidgets import (
|
||||
QButtonGroup,
|
||||
QFileDialog,
|
||||
QMainWindow,
|
||||
QMenu,
|
||||
QMessageBox,
|
||||
QTabWidget,
|
||||
)
|
||||
|
||||
from bedit.core.model import Component, Port
|
||||
from bedit.core.serializer import JsonDocumentSerializer
|
||||
@@ -51,11 +58,11 @@ class MainWindow(QMainWindow):
|
||||
self.ui.leftDockHost.show()
|
||||
self.ui.panel_libraries.show()
|
||||
self.ui.panel_document.show()
|
||||
self.ui.leftDockHost.splitDockWidget(
|
||||
self.ui.panel_document,
|
||||
self.ui.panel_libraries,
|
||||
Qt.Orientation.Vertical,
|
||||
self.ui.leftDockHost.setTabPosition(
|
||||
Qt.DockWidgetArea.LeftDockWidgetArea, QTabWidget.TabPosition.North
|
||||
)
|
||||
self.ui.leftDockHost.tabifyDockWidget(self.ui.panel_document, self.ui.panel_libraries)
|
||||
self.ui.panel_document.raise_()
|
||||
self.ui.workspaceSplitter.setSizes([280, 720])
|
||||
self.reload_libraries()
|
||||
self._active_graph_changed()
|
||||
@@ -67,22 +74,14 @@ class MainWindow(QMainWindow):
|
||||
self.ui.treeView.setDragEnabled(True)
|
||||
self.ui.treeView.setDragDropMode(self.ui.treeView.DragDropMode.DragOnly)
|
||||
self.ui.treeView.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
||||
self.ui.treeView.customContextMenuRequested.connect(
|
||||
self.show_external_library_context_menu
|
||||
)
|
||||
self.ui.treeView.customContextMenuRequested.connect(self.show_external_library_context_menu)
|
||||
self.library_tree_model.rebuilt.connect(self.ui.treeView.expandAll)
|
||||
self.ui.documentTreeView.setModel(self.document_tree_model)
|
||||
self.ui.documentTreeView.setHeaderHidden(True)
|
||||
self.ui.documentTreeView.setDragEnabled(True)
|
||||
self.ui.documentTreeView.setDragDropMode(
|
||||
self.ui.documentTreeView.DragDropMode.DragOnly
|
||||
)
|
||||
self.ui.documentTreeView.setContextMenuPolicy(
|
||||
Qt.ContextMenuPolicy.CustomContextMenu
|
||||
)
|
||||
self.ui.documentTreeView.customContextMenuRequested.connect(
|
||||
self.show_library_context_menu
|
||||
)
|
||||
self.ui.documentTreeView.setDragDropMode(self.ui.documentTreeView.DragDropMode.DragOnly)
|
||||
self.ui.documentTreeView.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
||||
self.ui.documentTreeView.customContextMenuRequested.connect(self.show_library_context_menu)
|
||||
self.ui.documentTreeView.doubleClicked.connect(self.activate_tree_component)
|
||||
self.document_tree_model.rebuilt.connect(self.ui.documentTreeView.expandAll)
|
||||
self.ui.graphView.set_model(self.document_controller)
|
||||
@@ -97,6 +96,9 @@ class MainWindow(QMainWindow):
|
||||
self.mode_button_group.setExclusive(True)
|
||||
self.mode_button_group.addButton(self.ui.pointerToolButton)
|
||||
self.mode_button_group.addButton(self.ui.connectToolButton)
|
||||
self.mode_button_group.addButton(self.ui.boxToolButton)
|
||||
self.mode_button_group.addButton(self.ui.lineToolButton)
|
||||
self.mode_button_group.addButton(self.ui.textToolButton)
|
||||
self.routing_button_group = QButtonGroup(self)
|
||||
self.routing_button_group.setExclusive(True)
|
||||
for button in (
|
||||
@@ -109,15 +111,13 @@ class MainWindow(QMainWindow):
|
||||
self.ui.navigateDownButton.clicked.connect(self.navigate_down)
|
||||
self.ui.pointerToolButton.clicked.connect(lambda: self.set_graph_tool("pointer"))
|
||||
self.ui.connectToolButton.clicked.connect(lambda: self.set_graph_tool("connect"))
|
||||
self.ui.directRoutingButton.clicked.connect(
|
||||
lambda: self.set_connection_routing("direct")
|
||||
)
|
||||
self.ui.angledRoutingButton.clicked.connect(
|
||||
lambda: self.set_connection_routing("angled")
|
||||
)
|
||||
self.ui.splineRoutingButton.clicked.connect(
|
||||
lambda: self.set_connection_routing("spline")
|
||||
)
|
||||
self.ui.boxToolButton.clicked.connect(lambda: self.set_graph_tool("box"))
|
||||
self.ui.lineToolButton.clicked.connect(lambda: self.set_graph_tool("line"))
|
||||
self.ui.textToolButton.clicked.connect(lambda: self.set_graph_tool("text"))
|
||||
self.ui.rotateToolButton.clicked.connect(self.ui.graphView.rotate_selected)
|
||||
self.ui.directRoutingButton.clicked.connect(lambda: self.set_connection_routing("direct"))
|
||||
self.ui.angledRoutingButton.clicked.connect(lambda: self.set_connection_routing("angled"))
|
||||
self.ui.splineRoutingButton.clicked.connect(lambda: self.set_connection_routing("spline"))
|
||||
self.ui.applyJsonButton.clicked.connect(self.apply_json)
|
||||
self.document_controller.activeGraphChanged.connect(self._active_graph_changed)
|
||||
|
||||
@@ -160,7 +160,6 @@ class MainWindow(QMainWindow):
|
||||
for toolbar in (
|
||||
self.ui.fileToolbar,
|
||||
self.ui.editToolbar,
|
||||
self.ui.transformToolbar,
|
||||
self.ui.cameraToolbar,
|
||||
):
|
||||
self.ui.menuToolbars.addAction(toolbar.toggleViewAction())
|
||||
@@ -184,7 +183,11 @@ class MainWindow(QMainWindow):
|
||||
if self.document_controller.document is None:
|
||||
self.setWindowTitle("BEdit")
|
||||
return
|
||||
name = self.document_controller.file_path.name if self.document_controller.file_path else "Untitled"
|
||||
name = (
|
||||
self.document_controller.file_path.name
|
||||
if self.document_controller.file_path
|
||||
else "Untitled"
|
||||
)
|
||||
modified = "*" if not self.document_controller.undo_stack.isClean() else ""
|
||||
self.setWindowTitle(f"{modified}{name} — BEdit")
|
||||
|
||||
@@ -217,12 +220,17 @@ class MainWindow(QMainWindow):
|
||||
def _update_edit_actions(self) -> None:
|
||||
component = self.document_controller.active_component
|
||||
is_graph = component is not None and component.implementation_kind == "graph"
|
||||
has_selection = bool(self.ui.graphView.scene() and self.ui.graphView.scene().selectedItems())
|
||||
has_selection = bool(
|
||||
self.ui.graphView.scene() and self.ui.graphView.scene().selectedItems()
|
||||
)
|
||||
for action in (self.ui.actionCut, self.ui.actionCopy, self.ui.actionDelete):
|
||||
action.setEnabled(is_graph and has_selection)
|
||||
self.ui.actionRotateClockwise.setEnabled(
|
||||
is_graph and self.ui.graphView.has_selected_components()
|
||||
)
|
||||
self.ui.rotateToolButton.setEnabled(
|
||||
is_graph and self.ui.graphView.has_selected_components()
|
||||
)
|
||||
self.ui.actionSelectAll.setEnabled(is_graph)
|
||||
self.ui.actionPaste.setEnabled(is_graph)
|
||||
self.ui.navigateDownButton.setEnabled(
|
||||
@@ -243,6 +251,10 @@ class MainWindow(QMainWindow):
|
||||
for widget in (
|
||||
self.ui.pointerToolButton,
|
||||
self.ui.connectToolButton,
|
||||
self.ui.boxToolButton,
|
||||
self.ui.lineToolButton,
|
||||
self.ui.textToolButton,
|
||||
self.ui.rotateToolButton,
|
||||
self.ui.routingLabel,
|
||||
self.ui.directRoutingButton,
|
||||
self.ui.angledRoutingButton,
|
||||
@@ -252,7 +264,13 @@ class MainWindow(QMainWindow):
|
||||
|
||||
def set_graph_tool(self, mode: str) -> None:
|
||||
self.ui.graphView.set_tool_mode(mode)
|
||||
(self.ui.pointerToolButton if mode == "pointer" else self.ui.connectToolButton).setChecked(True)
|
||||
{
|
||||
"pointer": self.ui.pointerToolButton,
|
||||
"connect": self.ui.connectToolButton,
|
||||
"box": self.ui.boxToolButton,
|
||||
"line": self.ui.lineToolButton,
|
||||
"text": self.ui.textToolButton,
|
||||
}[mode].setChecked(True)
|
||||
|
||||
def set_connection_routing(self, routing: str) -> None:
|
||||
self.ui.graphView.set_connection_routing(routing)
|
||||
@@ -312,9 +330,7 @@ class MainWindow(QMainWindow):
|
||||
raise ValueError("'source' must be an object")
|
||||
inputs = [Port.from_dict(item) for item in data["inputs"]]
|
||||
outputs = [Port.from_dict(item) for item in data["outputs"]]
|
||||
self.document_controller.replace_active_text_definition(
|
||||
inputs, outputs, data["source"]
|
||||
)
|
||||
self.document_controller.replace_active_text_definition(inputs, outputs, data["source"])
|
||||
except (TypeError, ValueError, json.JSONDecodeError) as error:
|
||||
QMessageBox.critical(self, "Invalid text component JSON", str(error))
|
||||
return False
|
||||
@@ -497,9 +513,7 @@ class MainWindow(QMainWindow):
|
||||
try:
|
||||
if library is not None:
|
||||
library.document.validate()
|
||||
JsonDocumentSerializer.save(
|
||||
library.document, Path(library.source_path)
|
||||
)
|
||||
JsonDocumentSerializer.save(library.document, Path(library.source_path))
|
||||
except (OSError, ValueError) as error:
|
||||
component.inputs, component.outputs = old_inputs, old_outputs
|
||||
QMessageBox.warning(self, "Cannot change library ports", str(error))
|
||||
@@ -559,9 +573,7 @@ class MainWindow(QMainWindow):
|
||||
connection = owner.graph.connections.get(connection_id)
|
||||
if connection is None:
|
||||
return
|
||||
dialog = ItemOptionsDialog(
|
||||
"Connection Options", connection.name, self, name_required=False
|
||||
)
|
||||
dialog = ItemOptionsDialog("Connection Options", connection.name, self, name_required=False)
|
||||
if dialog.exec() == dialog.DialogCode.Accepted:
|
||||
self.document_controller.rename_connection(connection_id, dialog.name)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user