From c066ac361446759d5e1ff7d8e4ef9641aae88a54 Mon Sep 17 00:00:00 2001 From: Andreas Eknes Lie Date: Fri, 1 Nov 2024 12:14:41 +0100 Subject: [PATCH] Add capability to open external plot windows --- src/ert/gui/main_window.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/ert/gui/main_window.py b/src/ert/gui/main_window.py index 273157e8779..ebfd73d5391 100644 --- a/src/ert/gui/main_window.py +++ b/src/ert/gui/main_window.py @@ -3,7 +3,7 @@ import datetime import functools import webbrowser -from typing import Dict, Optional +from typing import Dict, List, Optional from qtpy.QtCore import QSize, Qt, Signal, Slot from qtpy.QtGui import QCloseEvent, QCursor, QIcon @@ -61,6 +61,16 @@ ) +class SidebarToolButton(QToolButton): + right_clicked = Signal() + + def mousePressEvent(self, event) -> None: + if event.button() == Qt.MouseButton.RightButton: + self.right_clicked.emit() + else: + super().mousePressEvent(event) + + class ErtMainWindow(QMainWindow): close_signal = Signal() @@ -87,6 +97,7 @@ def __init__( self.central_widget.setLayout(self.central_layout) self.facade = LibresFacade(self.ert_config) self.side_frame = QFrame(self) + self._external_plot_windows: List[PlotWindow] = [] if self.is_dark_mode(): self.side_frame.setStyleSheet("background-color: rgb(64, 64, 64);") @@ -122,6 +133,13 @@ def __init__( def is_dark_mode(self) -> bool: return self.palette().base().color().value() < 70 + def right_clicked(self) -> None: + actor = self.sender() + if actor and actor.property("index") == "Create plot": + pw = PlotWindow(self.config_file, None) + pw.show() + self._external_plot_windows.append(pw) + def select_central_widget(self) -> None: actor = self.sender() if actor: @@ -231,8 +249,8 @@ def post_init(self) -> None: self.help_menu.menuAction(), self.plugins_tool.get_menu() ) - def _add_sidebar_button(self, name: str, icon: QIcon) -> QToolButton: - button = QToolButton(self.side_frame) + def _add_sidebar_button(self, name: str, icon: QIcon) -> SidebarToolButton: + button = SidebarToolButton(self.side_frame) button.setFixedSize(85, 95) button.setCursor(QCursor(Qt.CursorShape.PointingHandCursor)) @@ -253,6 +271,7 @@ def _add_sidebar_button(self, name: str, icon: QIcon) -> QToolButton: self.vbox_layout.addWidget(button) button.clicked.connect(self.select_central_widget) + button.right_clicked.connect(self.right_clicked) button.setProperty("index", name) return button @@ -305,6 +324,10 @@ def __add_tools_menu(self) -> None: tools_menu.addAction(self.load_results_tool.getAction()) def closeEvent(self, closeEvent: Optional[QCloseEvent]) -> None: + for plot_window in self._external_plot_windows: + if plot_window: + plot_window.close() + if closeEvent is not None: if self.notifier.is_simulation_running: closeEvent.ignore()