diff --git a/src/View/BoundaryCondition/Edit/Window.py b/src/View/BoundaryCondition/Edit/Window.py index 162459ed5769efe7bbe4d9b609193172f6d37369..b2d9e61f0dfcd545e420a94ab3f3c3951e34e752 100644 --- a/src/View/BoundaryCondition/Edit/Window.py +++ b/src/View/BoundaryCondition/Edit/Window.py @@ -124,6 +124,8 @@ class EditBoundaryConditionWindow(PamhyrWindow): parent=parent ) + self._hash_data.append(data) + self.setup_table() self.setup_plot() self.setup_data() diff --git a/src/View/BoundaryCondition/Window.py b/src/View/BoundaryCondition/Window.py index 9d30532e8edc04dd0e86e4ded3c9bb6397c3bdd4..4489a5095c16dcbb41df5968c5abb1b0f538d954 100644 --- a/src/View/BoundaryCondition/Window.py +++ b/src/View/BoundaryCondition/Window.py @@ -214,17 +214,17 @@ class BoundaryConditionWindow(PamhyrWindow): tab = self.current_tab() rows = self.index_selected_rows() for row in rows: - win = self.sub_win_filter_first( - "Edit boundary condition", - contain=[f"({self._bcs.get(tab, row).id})"] - ) + data = self._bcs.get(tab, row) - if win is None: - win = EditBoundaryConditionWindow( - data=self._bcs.get(tab, row), - study=self._study, - parent=self - ) - win.show() - else: - win.activateWindow() + if self.sub_window_exists( + EditBoundaryConditionWindow, + data=[self._study, None, data] + ): + continue + + win = EditBoundaryConditionWindow( + data=data, + study=self._study, + parent=self + ) + win.show() diff --git a/src/View/Geometry/Window.py b/src/View/Geometry/Window.py index 459bc95d173767e94b11eb05dcc79ee29667bb0d..3bc4ebd15c737fe4cccb1e091980b43340270c87 100644 --- a/src/View/Geometry/Window.py +++ b/src/View/Geometry/Window.py @@ -216,30 +216,6 @@ class GeometryWindow(PamhyrWindow): self.plot_kpc() self.plot_ac() - def _sub_window_exists(self, cls, - data=None): - """Check if window already exists - - Check if window already exists, used to deni window open - duplication - - Args: - cls: Window class, must inerit to PamhyrWindow or - PamhyrDialog - data: Data used for hash computation of cls - - Returns: - The window if hash already exists on sub window dictionary, - otherelse None - """ - hash = cls._hash(data) - if self.sub_win_exists(hash): - win = self.get_sub_win(hash) - win.activateWindow() - return True - else: - return False - def edit_profile(self): self.tableView.model().blockSignals(True) @@ -252,7 +228,7 @@ class GeometryWindow(PamhyrWindow): for row in rows: profile = self._reach.profile(row) - if self._sub_window_exists( + if self.sub_window_exists( ProfileWindow, data=[None, None, profile] ): diff --git a/src/View/LateralContribution/Edit/Window.py b/src/View/LateralContribution/Edit/Window.py index c813a3a9d76b169199ad246d3898bc4e3006f042..72c59b4c2bd3f70373b36903e61e39fa4b642a3e 100644 --- a/src/View/LateralContribution/Edit/Window.py +++ b/src/View/LateralContribution/Edit/Window.py @@ -77,6 +77,8 @@ class EditLateralContributionWindow(PamhyrWindow): parent=parent ) + self._hash_data.append(data) + self.setup_table() self.setup_plot() self.setup_connections() diff --git a/src/View/LateralContribution/Window.py b/src/View/LateralContribution/Window.py index 72ca343de73dab35035590a14c142f4bf78d94ab..8a9a2e8e740c48a37e08d9662c9a49defd77142b 100644 --- a/src/View/LateralContribution/Window.py +++ b/src/View/LateralContribution/Window.py @@ -258,17 +258,17 @@ class LateralContributionWindow(PamhyrWindow): tab = self.current_tab() rows = self.index_selected_rows() for row in rows: - win = self.sub_win_filter_first( - "Edit lateral contribution", - contain=[f"({self._lcs.get(tab, row).id})"] - ) + data = self._lcs.get(tab, row) - if win is None: - win = EditLateralContributionWindow( - data=self._lcs.get(tab, row), - study=self._study, - parent=self - ) - win.show() - else: - win.activateWindow() + if self.sub_window_exists( + EditLateralContributionWindow, + data=[self._study, None, data] + ): + continue + + win = EditLateralContributionWindow( + data=data, + study=self._study, + parent=self + ) + win.show() diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index 27e09ad1d863fc1ae58241f7591216df55ab974b..92a3e8f5be24989a6d625a4d6af3997acf95c230 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -480,30 +480,6 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): # SUBWINDOW # ############# - def _sub_window_exists(self, cls, - data=None): - """Check if window already exists - - Check if window already exists, used to deni window open - duplication - - Args: - cls: Window class, must inerit to PamhyrWindow or - PamhyrDialog - data: Data used for hash computation of cls - - Returns: - The window if hash already exists on sub window dictionary, - otherelse None - """ - hash = cls._hash(data) - if self.sub_win_exists(hash): - win = self.get_sub_win(hash) - win.activateWindow() - return True - else: - return False - def open_configure(self): """Open configure window @@ -512,7 +488,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): Returns: Nothing """ - if self._sub_window_exists( + if self.sub_window_exists( ConfigureWindow, data=[None, self.conf] ): @@ -529,7 +505,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): Returns: Nothing """ - if self._sub_window_exists( + if self.sub_window_exists( AboutWindow, data=[None, None] ): @@ -563,7 +539,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): Nothing """ if self._study is None: - if self._sub_window_exists( + if self.sub_window_exists( NewStudyWindow, data=[None, None] ): @@ -579,7 +555,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): Nothing """ if self._study is not None: - if self._sub_window_exists( + if self.sub_window_exists( NewStudyWindow, data=[self._study, None] ): @@ -595,7 +571,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): Nothing """ if self._study is not None: - if self._sub_window_exists( + if self.sub_window_exists( NetworkWindow, data=[self._study, None] ): @@ -613,7 +589,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): if (self._study is not None and self._study.river.has_current_reach()): reach = self._study.river.current_reach().reach - if self._sub_window_exists( + if self.sub_window_exists( GeometryWindow, data=[self._study, self.conf, reach] ): @@ -630,7 +606,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): self.msg_select_reach() def open_boundary_cond(self): - if self._sub_window_exists( + if self.sub_window_exists( BoundaryConditionWindow, data=[self._study, None] ): @@ -640,7 +616,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): bound.show() def open_lateral_contrib(self): - if self._sub_window_exists( + if self.sub_window_exists( LateralContributionWindow, data=[self._study, None] ): @@ -650,7 +626,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): lateral.show() def open_stricklers(self): - if self._sub_window_exists( + if self.sub_window_exists( StricklersWindow, data=[self._study, self.conf] ): @@ -668,7 +644,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): if self._study.river.has_current_reach(): reach = self._study.river.current_reach() - if self._sub_window_exists( + if self.sub_window_exists( FrictionsWindow, data=[self._study, None, reach] ): @@ -686,7 +662,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): if self._study.river.has_current_reach(): reach = self._study.river.current_reach() - if self._sub_window_exists( + if self.sub_window_exists( InitialConditionsWindow, data=[self._study, self.conf, reach] ): @@ -703,7 +679,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): self.msg_select_reach() def open_solver_parameters(self): - if self._sub_window_exists( + if self.sub_window_exists( SolverParametersWindow, data=[self._study, None] ): @@ -716,7 +692,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): params.show() def open_sediment_layers(self): - if self._sub_window_exists( + if self.sub_window_exists( SedimentLayersWindow, data=[self._study, None] ): @@ -731,7 +707,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): def open_reach_sediment_layers(self): reach = self._study.river.current_reach().reach - if self._sub_window_exists( + if self.sub_window_exists( ReachSedimentLayersWindow, data=[self._study, None, reach] ): @@ -756,7 +732,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): if run.exec(): solver = run.solver - if self._sub_window_exists( + if self.sub_window_exists( CheckListWindow, data=[ self._study, @@ -793,7 +769,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): return # Windows already opened - if self._sub_window_exists( + if self.sub_window_exists( ResultsWindow, data=[ self._study, diff --git a/src/View/Tools/ListedSubWindow.py b/src/View/Tools/ListedSubWindow.py index 5c3bf1dd5af6e9bd39d40b8e961257caa669f19d..7fe21bb7bfab7cf0b1a40d3b5fac61ca8fff8792 100644 --- a/src/View/Tools/ListedSubWindow.py +++ b/src/View/Tools/ListedSubWindow.py @@ -39,7 +39,7 @@ class ListedSubWindow(object): self.sub_win_cnt += 1 try: logger.info( - f"Open window: {name}: {self.sub_win_cnt}: {win.hash()}") + f"Open window: {name}: {self.sub_win_cnt}") except Exception: logger.info(f"Open window: {name}: {self.sub_win_cnt}: X") logger.warning(f"Sub window without hash method !") @@ -52,7 +52,7 @@ class ListedSubWindow(object): ) ) self.sub_win_cnt = len(self.sub_win_list) - logger.info(f"Close window: {h}: {self.sub_win_cnt}") + logger.info(f"Close window: ({h}) {self.sub_win_cnt}") def _sub_win_exists(self, h): return reduce( @@ -74,3 +74,27 @@ class ListedSubWindow(object): )[1] except Exception: return None + + def sub_window_exists(self, cls, + data=None): + """Check if window already exists + + Check if window already exists, used to deni window open + duplication + + Args: + cls: Window class, must inerit to PamhyrWindow or + PamhyrDialog + data: Data used for hash computation of cls + + Returns: + The window if hash already exists on sub window dictionary, + otherelse None + """ + hash = cls._hash(data) + if self.sub_win_exists(hash): + win = self.get_sub_win(hash) + win.activateWindow() + return True + else: + return False