diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index 001bf4c865d87d9b26bda65bb0fb0d454025581b..d1af514beb9aedf7eb241d50eebb4a6e050c4728 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -341,6 +341,10 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): def _do_propagate_update(self): for key in self._propagation_keys: + if key == "window_list": + self._do_update_window_list() + continue + logger.debug(f"Propagation of {key}") for _, window in self.sub_win_list: window._propagated_update(key=key) @@ -568,6 +572,36 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): # SUBWINDOW # ############# + def _activate_window(self, window_hash): + window = self.get_sub_win(window_hash) + if window is not None: + window.activateWindow() + + def _update_window_list(self): + self._propagation_keys.add("window_list") + + def _do_update_window_list(self): + menu = self.findChild(QMenu, "menu_windows") + + # Remove all actions + menu.clear() + + def lambda_generator(h): + return lambda: self._activate_window(h) + + # Add window action + for _, win in self.sub_win_list: + action = QAction(win._title, self) + # action.setStatusTip( + # _translate("MainWindow", "Activate this window") + # ) + h = win.hash() + logger.info(f"Get hash: {h}") + fn = lambda_generator(h) + action.triggered.connect(fn) + + menu.addAction(action) + def open_configure(self): """Open configure window diff --git a/src/View/Tools/ListedSubWindow.py b/src/View/Tools/ListedSubWindow.py index 4c53590f2cec130caa74d88f1018c7597c1776ef..96c4e64bf4d69954f8e222771ccf053e28b82e52 100644 --- a/src/View/Tools/ListedSubWindow.py +++ b/src/View/Tools/ListedSubWindow.py @@ -39,6 +39,9 @@ class ListedSubWindow(object): def sub_win_add(self, name, win): self._sub_win_list.append((name, win)) self._sub_win_cnt += 1 + + self._update_window_list() + try: logger.info( f"Open window: {name}: {self._sub_win_cnt}") @@ -54,6 +57,8 @@ class ListedSubWindow(object): ) ) self._sub_win_cnt = len(self._sub_win_list) + self._update_window_list() + logger.info(f"Close window: ({h}) {self._sub_win_cnt}") def _sub_win_exists(self, h): @@ -78,8 +83,7 @@ class ListedSubWindow(object): except Exception: return None - def sub_window_exists(self, cls, - data=None): + def sub_window_exists(self, cls, data=None): """Check if window already exists Check if window already exists, used to deni window open @@ -97,7 +101,11 @@ class ListedSubWindow(object): hash = cls._hash(data) if self._sub_win_exists(hash): win = self.get_sub_win(hash) + logger.debug(f"subwindow: {hash} -> {win} ({win.hash()})") win.activateWindow() return True else: return False + + def _update_window_list(self): + return diff --git a/src/View/ui/MainWindow.ui b/src/View/ui/MainWindow.ui index dfe37a80fb6206d28cbbfc5c610638ac5858ae6e..0e47519f41718073e4286e17321c404be692d46c 100644 --- a/src/View/ui/MainWindow.ui +++ b/src/View/ui/MainWindow.ui @@ -12,8 +12,8 @@ <rect> <x>0</x> <y>0</y> - <width>850</width> - <height>646</height> + <width>1280</width> + <height>720</height> </rect> </property> <property name="font"> @@ -65,7 +65,7 @@ <rect> <x>0</x> <y>0</y> - <width>850</width> + <width>1280</width> <height>23</height> </rect> </property> @@ -179,6 +179,14 @@ <addaction name="action_menu_sediment_layers"/> <addaction name="action_menu_edit_reach_sediment_layers"/> </widget> + <widget class="QMenu" name="menu_windows"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="title"> + <string>&Windows</string> + </property> + </widget> <addaction name="menu_File"/> <addaction name="menu_network"/> <addaction name="menu_geometry"/> @@ -187,6 +195,7 @@ <addaction name="menu_run"/> <addaction name="menu_results"/> <addaction name="menu_cartography"/> + <addaction name="menu_windows"/> <addaction name="menu_help"/> </widget> <widget class="QStatusBar" name="statusbar"/> @@ -263,10 +272,7 @@ <string>New study</string> </property> <property name="font"> - <font> - <weight>50</weight> - <bold>false</bold> - </font> + <font/> </property> <property name="shortcut"> <string>Ctrl+N</string>