From d13130c9a7ab260daf9970ce8fd7c328b4d9edd2 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Thu, 4 May 2023 17:05:15 +0200 Subject: [PATCH] BC: Add graph display. --- .../BoundaryConditionWindow.py | 14 ++++++++++++- src/View/Network/GraphWidget.py | 21 ++++++++++++++++--- src/View/ui/BoundaryConditions.ui | 2 +- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/View/BoundaryCondition/BoundaryConditionWindow.py b/src/View/BoundaryCondition/BoundaryConditionWindow.py index d1597c13..d8ad1362 100644 --- a/src/View/BoundaryCondition/BoundaryConditionWindow.py +++ b/src/View/BoundaryCondition/BoundaryConditionWindow.py @@ -19,7 +19,7 @@ from PyQt5.QtWidgets import ( QDialogButtonBox, QPushButton, QLineEdit, QFileDialog, QTableView, QAbstractItemView, QUndoStack, QShortcut, QAction, QItemDelegate, - QComboBox, + QComboBox, QVBoxLayout, QHeaderView ) from View.BoundaryCondition.BCUndoCommand import ( @@ -37,6 +37,7 @@ from View.BoundaryCondition.Table import ( TableModel, ComboBoxDelegate ) +from View.Network.GraphWidget import GraphWidget from View.BoundaryCondition.translate import * from View.BoundaryCondition.Edit.Window import EditBoundaryConditionWindow @@ -54,6 +55,7 @@ class BoundaryConditionWindow(ASubMainWindow, ListedSubWindow): self.setup_sc() self.setup_table() + self.setup_graph() self.setup_connections() self.ui.setWindowTitle(title) @@ -91,8 +93,18 @@ class BoundaryConditionWindow(ASubMainWindow, ListedSubWindow): ) table.setSelectionBehavior(QAbstractItemView.SelectRows) + table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.setAlternatingRowColors(True) + def setup_graph(self): + self.graph_widget = GraphWidget( + self._study.river, + min_size=None, size=(200,200), + only_display=True, + parent=self + ) + self.graph_layout = self.find(QVBoxLayout, "verticalLayout") + self.graph_layout.addWidget(self.graph_widget) def setup_connections(self): self.find(QAction, "action_add").triggered.connect(self.add) diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py index e6281c0f..522f3210 100644 --- a/src/View/Network/GraphWidget.py +++ b/src/View/Network/GraphWidget.py @@ -79,12 +79,18 @@ class NodeItem(QGraphicsItem): def mousePressEvent(self, event): self.update() - super(NodeItem, self).mousePressEvent(event) + if not self.graph._only_display: + super(NodeItem, self).mousePressEvent(event) def mouseReleaseEvent(self, event): self.update() super(NodeItem, self).mouseReleaseEvent(event) + def mouseMoveEvent(self, event): + self.update() + if not self.graph._only_display: + super(NodeItem, self).mouseMoveEvent(event) + class EdgeItem(QGraphicsItem): Type = QGraphicsItem.UserType + 2 @@ -252,12 +258,15 @@ class GraphWidget(QGraphicsView): changeEdge = pyqtSignal(object) changeNode = pyqtSignal(object) - def __init__(self, graph, parent=None): + def __init__(self, graph, parent=None, + min_size=(400, 400), max_size=None, + size=None, only_display=False): super(GraphWidget, self).__init__(parent=parent) self.timerId = 0 self.parent = parent self._state = "move" + self._only_display = only_display self.graph = graph @@ -286,7 +295,13 @@ class GraphWidget(QGraphicsView): self.scale(1, 1) self.previousScale = 1 - self.setMinimumSize(400, 400) + + if min_size: + self.setMinimumSize(*min_size) + if max_size: + self.setMaximumSize(*max_size) + if size: + self.resize(*size) self.create_items() diff --git a/src/View/ui/BoundaryConditions.ui b/src/View/ui/BoundaryConditions.ui index 5d68ac0a..7f4ea44c 100644 --- a/src/View/ui/BoundaryConditions.ui +++ b/src/View/ui/BoundaryConditions.ui @@ -37,7 +37,7 @@ <item row="0" column="0"> <widget class="QSplitter" name="splitter"> <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> -- GitLab