Network: Small code refactoring.

mesh
Pierre-Antoine Rouby 2023-06-08 11:23:10 +02:00
parent 83b514db61
commit a6ddba484e
2 changed files with 56 additions and 32 deletions

View File

@ -12,18 +12,18 @@ class Edge(object):
self._status = status self._status = status
self.id = id self.id = id
self._name = name if name != "" else f"{node1.name} -> {node2.name}" self._name = name
self.node1 = node1 self.node1 = node1
self.node2 = node2 self.node2 = node2
self.enable = True self._enable = True
def __getitem__(self, name): def __getitem__(self, name):
ret = None ret = None
if name == "name": if name == "name":
ret = self._name ret = self.name
elif name == "id": elif name == "id":
ret = self.id ret = self.id
elif name == "node1": elif name == "node1":
@ -31,7 +31,7 @@ class Edge(object):
elif name == "node2": elif name == "node2":
ret = self.node2.name ret = self.node2.name
elif name == "enable": elif name == "enable":
ret = self.enable ret = self._enable
return ret return ret
@ -45,16 +45,18 @@ class Edge(object):
elif name == "node2": elif name == "node2":
self.node2 = value self.node2 = value
elif name == "enable": elif name == "enable":
self.enable = value self._enable = value
self._status.modified() self._status.modified()
@property @property
def name(self): def name(self):
return self._name return self._name if self._name != "" else f"{self.node1.name} -> {self.node2.name}"
def enable(self): def enable(self, enable=True):
self.enable = True self._enable = enable
self._status.modified()
def disable(self): def disable(self):
self.enable = False self._enable = False
self._status.modified()

View File

@ -9,36 +9,52 @@ from PyQt5.QtWidgets import (
QTableView, QItemDelegate, QComboBox, QLineEdit, QHBoxLayout, QSlider, QTableView, QItemDelegate, QComboBox, QLineEdit, QHBoxLayout, QSlider,
QPushButton, QCheckBox, QStyledItemDelegate, QStyleOptionButton, QStyle, QPushButton, QCheckBox, QStyledItemDelegate, QStyleOptionButton, QStyle,
QApplication, QToolBar, QAction, QHeaderView, QAbstractItemView, QApplication, QToolBar, QAction, QHeaderView, QAbstractItemView,
QUndoStack, QShortcut,
) )
from Model.River import RiverNode, RiverReach, River from Model.River import RiverNode, RiverReach, River
from View.ASubWindow import ASubMainWindow from View.ASubWindow import ASubMainWindow
from View.Network.GraphWidget import GraphWidget from View.Network.GraphWidget import GraphWidget
from View.Network.UndoCommand import *
from View.Network.Table import ( from View.Network.Table import (
GraphTableModel, ComboBoxDelegate, TrueFalseComboBoxDelegate, GraphTableModel, ComboBoxDelegate, TrueFalseComboBoxDelegate,
) )
class NetworkWindow(ASubMainWindow): class NetworkWindow(ASubMainWindow):
def __init__(self, model=None, title="River network", parent=None): def __init__(self, model=None, title="River network", parent=None):
super(NetworkWindow, self).__init__(name=title, ui="Network", parent=parent) self._title = title
self.ui.setWindowTitle(title) self._model = model
self._graph = self._model.river
self.model = model self.setup_title()
self.graph = self.model.river
# Graph Widget super(NetworkWindow, self).__init__(name=self._title, ui="Network", parent=parent)
self.ui.setWindowTitle(self._title)
self.graph_widget = GraphWidget(self.graph, parent=self) self.setup_graph()
self.graph_layout = self.find(QHBoxLayout, "horizontalLayout_graph") self.setup_table()
self.graph_layout.addWidget(self.graph_widget) self.setup_connections()
def setup_title(self):
self._title = self._title + " - " + self._model.name
def setup_sc(self):
self._undo_stack = QUndoStack()
self.undo_sc = QShortcut(QKeySequence.Undo, self)
self.redo_sc = QShortcut(QKeySequence.Redo, self)
self.copy_sc = QShortcut(QKeySequence.Copy, self)
self.paste_sc = QShortcut(QKeySequence.Paste, self)
def setup_table(self):
# Nodes table # Nodes table
self.nodes_model = GraphTableModel( self.nodes_model = GraphTableModel(
headers = ["name", "type"], headers = ["name", "type"],
graph = self.graph, graph = self._graph,
rows_type="nodes", rows_type = "nodes",
undo = self._undo_stack,
) )
table = self.find(QTableView, "tableView_nodes") table = self.find(QTableView, "tableView_nodes")
table.setModel(self.nodes_model) table.setModel(self.nodes_model)
@ -51,11 +67,12 @@ class NetworkWindow(ASubMainWindow):
self.reachs_model = GraphTableModel( self.reachs_model = GraphTableModel(
headers = ["name", "enable", "node1", "node2"], headers = ["name", "enable", "node1", "node2"],
graph = self.graph, graph = self._graph,
rows_type="edges" rows_type = "edges",
undo = self._undo_stack,
) )
self.delegate_combobox = ComboBoxDelegate( self.delegate_combobox = ComboBoxDelegate(
graph = self.graph, graph = self._graph,
parent = self, parent = self,
) )
self.delegate_true_false_combobox = TrueFalseComboBoxDelegate( self.delegate_true_false_combobox = TrueFalseComboBoxDelegate(
@ -71,14 +88,18 @@ class NetworkWindow(ASubMainWindow):
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
#table.resizeColumnsToContents() #table.resizeColumnsToContents()
# Connection def setup_graph(self):
self._graph_widget = GraphWidget(self._graph, parent=self)
self._graph_layout = self.find(QHBoxLayout, "horizontalLayout_graph")
self._graph_layout.addWidget(self._graph_widget)
def setup_connections(self):
self.nodes_model.dataChanged.connect(self.reachs_model.update) self.nodes_model.dataChanged.connect(self.reachs_model.update)
self.nodes_model.dataChanged.connect(self.graph_widget.rename_nodes) self.nodes_model.dataChanged.connect(self._graph_widget.rename_nodes)
self.reachs_model.dataChanged.connect(self.graph_widget.display_update) self.reachs_model.dataChanged.connect(self._graph_widget.display_update)
self.reachs_model.dataChanged.connect(self.nodes_model.update) self.reachs_model.dataChanged.connect(self.nodes_model.update)
self.graph_widget.changeEdge.connect(self.reachs_model.update) self._graph_widget.changeEdge.connect(self.reachs_model.update)
self.graph_widget.changeNode.connect(self.nodes_model.update) self._graph_widget.changeNode.connect(self.nodes_model.update)
self.find(QAction, "action_toolBar_add").setCheckable(True) self.find(QAction, "action_toolBar_add").setCheckable(True)
self.find(QAction, "action_toolBar_add").triggered.connect( self.find(QAction, "action_toolBar_add").triggered.connect(
@ -94,25 +115,26 @@ class NetworkWindow(ASubMainWindow):
self.reverse_edge self.reverse_edge
) )
def clicked_add(self): def clicked_add(self):
if self.get_action_checkable("action_toolBar_add"): if self.get_action_checkable("action_toolBar_add"):
self.set_action_checkable("action_toolBar_del", False) self.set_action_checkable("action_toolBar_del", False)
self.graph_widget.state("add") self._graph_widget.state("add")
else: else:
self.graph_widget.state("move") self._graph_widget.state("move")
def clicked_del(self): def clicked_del(self):
if self.get_action_checkable("action_toolBar_del"): if self.get_action_checkable("action_toolBar_del"):
self.set_action_checkable("action_toolBar_add", False) self.set_action_checkable("action_toolBar_add", False)
self.graph_widget.state("del") self._graph_widget.state("del")
else: else:
self.graph_widget.state("move") self._graph_widget.state("move")
def keyPressEvent(self, event): def keyPressEvent(self, event):
key = event.key() key = event.key()
if key == Qt.Key_Escape: if key == Qt.Key_Escape:
self.graph_widget.reset_selection self._graph_widget.reset_selection
def reverse_edge(self): def reverse_edge(self):
"""Reverse edge direction of selected table rows """Reverse edge direction of selected table rows