Commit a6ddba48 authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

Network: Small code refactoring.

Showing with 56 additions and 32 deletions
+56 -32
...@@ -12,18 +12,18 @@ class Edge(object): ...@@ -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): ...@@ -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): ...@@ -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()
...@@ -9,36 +9,52 @@ from PyQt5.QtWidgets import ( ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment