From 587e5412d52b96cae314afd7506dacea90ced08e Mon Sep 17 00:00:00 2001
From: JeaDylan <101608960+JeaDylan@users.noreply.github.com>
Date: Thu, 20 Aug 2026 22:17:49 +0200
Subject: [PATCH] Profiles: new functionnality, navigate between differents
profiles (next and previous one) directly in the edit profile window
---
src/View/Geometry/Profile/Window.py | 76 +++++++++++++++++++++++++++++
src/View/ui/GeometryCrossSection.ui | 27 ++++++++++
2 files changed, 103 insertions(+)
diff --git a/src/View/Geometry/Profile/Window.py b/src/View/Geometry/Profile/Window.py
index bcafc75c..0d0a872a 100644
--- a/src/View/Geometry/Profile/Window.py
+++ b/src/View/Geometry/Profile/Window.py
@@ -128,6 +128,15 @@ class ProfileWindow(PamhyrWindow):
self._tablemodel.blockSignals(False)
def setup_connections(self):
+ navigation_actions = {
+ "action_previous_profile": self.previous_profile,
+ "action_next_profile": self.next_profile,
+ }
+
+ for action in navigation_actions:
+ self.find(QAction, action)\
+ .triggered.connect(navigation_actions[action])
+
if self._study.is_read_only():
actions = {}
else:
@@ -152,6 +161,73 @@ class ProfileWindow(PamhyrWindow):
.connect(self.update_points_selection)
self._tablemodel.dataChanged.connect(self.update)
+ self.update_navigation_actions()
+
+ def previous_profile(self):
+ self.navigate_profile(-1)
+
+ def next_profile(self):
+ self.navigate_profile(1)
+
+ def profiles(self):
+ """Return profiles from the geometry model owning this profile."""
+ return self._profile.reach.reach.profiles
+
+ def navigate_profile(self, offset):
+ profiles = self.profiles()
+
+ try:
+ index = profiles.index(self._profile)
+ except ValueError:
+ self.update_navigation_actions()
+ return
+
+ target_index = index + offset
+ if not 0 <= target_index < len(profiles):
+ self.update_navigation_actions()
+ return
+
+ target = profiles[target_index]
+ if self._parent is not None and self._parent.sub_window_exists(
+ ProfileWindow,
+ data=[self._study, self._config, target]
+ ):
+ self.close()
+ return
+
+ self.set_profile(target)
+
+ def set_profile(self, profile):
+ self._profile = profile
+ self._hash_data[-1] = profile
+ self._undo_stack.clear()
+
+ self._tablemodel.beginResetModel()
+ self._tablemodel._data = profile
+ self._tablemodel.endResetModel()
+
+ self._plot.data = profile
+ self._plot.highlight = None
+ self._plot.draw()
+
+ self._title = (
+ self._trad[self._pamhyr_name] +
+ f" - {profile.name} {profile.rk}"
+ )
+ self._set_title()
+ self.update_navigation_actions()
+
+ def update_navigation_actions(self):
+ profiles = self.profiles()
+ try:
+ index = profiles.index(self._profile)
+ except ValueError:
+ index = -1
+
+ self.find(QAction, "action_previous_profile")\
+ .setEnabled(index > 0)
+ self.find(QAction, "action_next_profile")\
+ .setEnabled(0 <= index < len(profiles) - 1)
def update_points_selection(self):
rows = self.index_selected_rows()
diff --git a/src/View/ui/GeometryCrossSection.ui b/src/View/ui/GeometryCrossSection.ui
index dfc47bb6..8ecbcd8c 100644
--- a/src/View/ui/GeometryCrossSection.ui
+++ b/src/View/ui/GeometryCrossSection.ui
@@ -52,6 +52,9 @@
false
+
+
+
@@ -61,6 +64,30 @@
+
+
+
+ ressources/left.pngressources/left.png
+
+
+ Previous profile
+
+
+ Open the previous profile
+
+
+
+
+
+ ressources/right.pngressources/right.png
+
+
+ Next profile
+
+
+ Open the next profile
+
+