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 + +