From b6dbedf7fad593ac0c470d602730c20882e0e027 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Wed, 5 Apr 2023 15:25:10 +0200 Subject: [PATCH] river, network: Minor fix and change. --- src/Model/River.py | 22 +++++++++++++++++++--- src/View/Geometry/GeometryWindow.py | 9 +++++++-- src/View/MainWindow.py | 20 +++++++++++++++----- src/View/Network/GraphWidget.py | 11 ++++++++--- 4 files changed, 49 insertions(+), 13 deletions(-) diff --git a/src/Model/River.py b/src/Model/River.py index b38470c1..5d6e9647 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -15,7 +15,14 @@ class RiverNode(Node): x, y ) - self.locker = None + self._locker = None + + def locker(self): + return self._locker + + def locker(self, locker): + self._locker = locker + class RiverReach(Edge): def __init__(self, id:str, name:str, @@ -26,7 +33,14 @@ class RiverReach(Edge): node1, node2 ) - self.reach = None + self._reach = None + + def reach(self): + return self._reach + + def reach(self, reach:Reach): + self._reach = reach + class River(Graph): def __init__(self): @@ -38,9 +52,11 @@ class River(Graph): self._current_reach = None + def has_current_reach(self): + return self._current_reach is not None def current_reach(self): return self._current_reach - def current_reach(self, reach): + def set_current_reach(self, reach): self._current_reach = reach diff --git a/src/View/Geometry/GeometryWindow.py b/src/View/Geometry/GeometryWindow.py index c39d24da..1336a0e9 100644 --- a/src/View/Geometry/GeometryWindow.py +++ b/src/View/Geometry/GeometryWindow.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + import os import pathlib import sys @@ -21,10 +23,13 @@ from View.ASubWindow import WindowToolKit _translate = QCoreApplication.translate class GeometryWindow(QMainWindow, WindowToolKit): - def __init__(self, parent=None): + def __init__(self, model=None, parent=None): self.parent = parent super(GeometryWindow, self).__init__(parent=parent) + self._model = model + self._reach = model.river.current_reach() + self.ui = Ui_MainWindow() self.ui.setupUi(self) self.tableView = self.ui.tableView @@ -57,7 +62,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): def open_file_dialog(self): options = QFileDialog.Options() - DEFAULT_DIRECTORY = '/home/' + DEFAULT_DIRECTORY = os.getenv("HOME") settings = QSettings(QSettings.IniFormat, QSettings.UserScope, 'MyOrg', ) current_dir = settings.value('current_directory', DEFAULT_DIRECTORY, type=str) options |= QFileDialog.DontUseNativeDialog diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index 3dcca5ed..bf8f80d5 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -13,6 +13,7 @@ from PyQt5.QtWidgets import ( ) from PyQt5.uic import loadUi +from View.ASubWindow import WindowToolKit from View.ListedSubWindow import ListedSubWindow from View.DummyWindow import DummyWindow @@ -50,7 +51,7 @@ action = ( no_model_action + model_action + define_model_action ) -class ApplicationWindow(QMainWindow, ListedSubWindow): +class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): def __init__(self, conf=None): super(ApplicationWindow, self).__init__() @@ -193,7 +194,9 @@ class ApplicationWindow(QMainWindow, ListedSubWindow): if self.model.filename == "": file_name, _ = QFileDialog.getSaveFileName( self, "Save File", - "", "Pamhyr(*.pkl)") + "", "Pamhyr(*.pkl)" + ) + if file_name[-4:] == ".pkl": self.model.filename = file_name else: @@ -212,7 +215,9 @@ class ApplicationWindow(QMainWindow, ListedSubWindow): """ file_name, _ = QFileDialog.getSaveFileName( self, "Save File", - "", "Pamhyr(*.pkl)") + "", "Pamhyr(*.pkl)" + ) + if file_name[-4:] == ".pkl": self.model.filename = file_name else: @@ -301,9 +306,14 @@ class ApplicationWindow(QMainWindow, ListedSubWindow): Returns: Nothing """ - if not self.model is None: - geometry = GeometryWindow(parent=self) + if (self.model is not None and + self.model.river.has_current_reach()): + geometry = GeometryWindow(model=self.model, parent=self) geometry.show() + else: + self.message_box("Please select a reach", + "Geometry edition need a reach selected " + "into river network window to work on it") # TODO: Delete me ! ############### diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py index a0d19214..91dca277 100644 --- a/src/View/Network/GraphWidget.py +++ b/src/View/Network/GraphWidget.py @@ -253,6 +253,8 @@ class GraphWidget(QGraphicsView): self.parent = parent self._state = "move" + self.graph = graph + self._selected_item = None self._selected_new_edge_src_node = None self._current_edge = None @@ -276,8 +278,6 @@ class GraphWidget(QGraphicsView): self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setResizeAnchor(QGraphicsView.AnchorViewCenter) - self.graph = graph - self.scale(1, 1) self.previousScale = 1 self.setMinimumSize(400, 400) @@ -301,6 +301,8 @@ class GraphWidget(QGraphicsView): self.scene().addItem(inode) self.node_items.append(inode) + curr_edge = self.graph.current_reach() + for edge in self.graph.edges(): n1 = list( filter( @@ -317,6 +319,9 @@ class GraphWidget(QGraphicsView): ) iedge = EdgeItem(n1[0], n2[0], edge, self) + if edge == curr_edge: + self._current_edge = iedge + self.scene().addItem(iedge) self.edge_items.append(iedge) @@ -548,7 +553,7 @@ class GraphWidget(QGraphicsView): """ previous_edge = self._current_edge self._current_edge = edge - self.graph.current_reach(edge.edge) + self.graph.set_current_reach(edge.edge) if previous_edge: previous_edge.update() -- GitLab