Source code for posydon.visualization.VH_diagram.MainWindow

"""Main Window handler for VH diagram."""


__authors__ = [
    "Maxime Rambosson <Maxime.Rambosson@etu.unige.ch>",
]


from PyQt5.QtWidgets import QMainWindow, QScrollArea, QApplication
from PyQt5.QtCore import pyqtSignal

from .GraphVisualizer import GraphVisualizer
from .OptionsWindow import OptionsWindow


# Indirection layer to combine options and widget
# Options's signals maybe replaced by Obvsevable pattern
[docs]class VisualizerInterface: """Handle for all callback triggered by user.""" def __init__(self, main_win, visualizer, options): """Initialize a VisualizerInterface instance. Parameters ---------- main_win : MainWindow The main window used. visualizer : GraphVisualizer Custom widget to display graph. options : OptionsWindow Window used to display options. """ self._main_win = main_win self._visualizer = visualizer self._options = options def __call__(self): """Return the visualizer.""" return self._visualizer
[docs] def detail_required(self): return self._options.detail_requiered
[docs] def reduce_required(self): return self._options.reduce_required
[docs] def simplify_required(self): return self._options.simplify_required
[docs] def diagram_required(self): return self._options.diagram_required
[docs] def save_required(self): return self._main_win.save_requiered
[docs] def distance_representation_required(self): return self._options.distance_representation_required
[docs] def options(self): return self._options
[docs]class MainWindow(QMainWindow): """Custom window to display the application.""" save_requiered = pyqtSignal() def __init__(self): """Initialize a MainWindow instance.""" super(MainWindow, self).__init__() self.setWindowTitle("Simulation visualisation") screen_geometry = QApplication.desktop().screenGeometry() self.resize(screen_geometry.width() * 0.66, screen_geometry.height() * 0.66) self._visualizer = GraphVisualizer() self._option_window = OptionsWindow()
[docs] def start_visualization(self): """Star the visualization. Returns ------- VisualizerInterface Return the interface with current window, binded visualizer widget and option window. Expose callbacks. """ self.scroll_area = QScrollArea() self.scroll_area.setWidget(self._visualizer) self.scroll_area.setWidgetResizable(True) self.setCentralWidget(self.scroll_area) self._setup_visualizer_option() return VisualizerInterface(self, self._visualizer, self._option_window)
def _setup_visualizer_option(self): """Prepare all displayed option on MenuBar.""" bar = self.menuBar() bar.setNativeMenuBar(False) option_action = bar.addAction(" &Options") option_action.triggered.connect(self._show_option_window) option_action = bar.addAction(" &Save") option_action.triggered.connect(lambda: self.save_requiered.emit()) self.setMenuBar(bar) def _show_option_window(self, _): self._option_window.showNormal()
[docs] def closeEvent(self, event): # Override closeEvent of QWidget """Close the option window.""" self._option_window.close()