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