# Created By: Virgil Dupras # Created On: 2010-02-05 # Copyright 2015 Hardcoded Software (http://www.hardcoded.net) # # This software is licensed under the "GPLv3" License as described in the "LICENSE" file, # which should be included with this package. The terms are also available at # http://www.gnu.org/licenses/gpl-3.0.html from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QDockWidget, QWidget from .details_table import DetailsModel from hscommon.plat import ISLINUX class DetailsDialog(QDockWidget): def __init__(self, parent, app, **kwargs): super().__init__(parent, Qt.Tool, **kwargs) self.parent = parent self.app = app self.model = app.model.details_panel self.setAllowedAreas(Qt.AllDockWidgetAreas) self._setupUi() # To avoid saving uninitialized geometry on appWillSavePrefs, we track whether our dialog # has been shown. If it has, we know that our geometry should be saved. self._shown_once = False self.app.prefs.restoreGeometry("DetailsWindowRect", self) self.tableModel = DetailsModel(self.model) # tableView is defined in subclasses self.tableView.setModel(self.tableModel) self.model.view = self self.app.willSavePrefs.connect(self.appWillSavePrefs) def _setupUi(self): # Virtual pass def show(self): self._shown_once = True super().show() self.update_options() def update_options(self): # This disables the title bar (if we had not set one before already) # essentially making it a simple floating window, not dockable anymore if not self.app.prefs.details_dialog_titlebar_enabled \ and not self.titleBarWidget(): self.setTitleBarWidget(QWidget()) # Windows (and MacOS?) users cannot move a floating window which # has not native decoration so we force it to dock for now if not ISLINUX: self.setFloating(False) elif self.titleBarWidget() is not None: # resets to the default title bar self.setTitleBarWidget(None) features = self.features() if self.app.prefs.details_dialog_vertical_titlebar: self.setFeatures(features | QDockWidget.DockWidgetVerticalTitleBar) elif features & QDockWidget.DockWidgetVerticalTitleBar: self.setFeatures(features ^ QDockWidget.DockWidgetVerticalTitleBar) # --- Events def appWillSavePrefs(self): if self._shown_once and self.isFloating(): self.app.prefs.saveGeometry("DetailsWindowRect", self) # --- model --> view def refresh(self): self.tableModel.beginResetModel() self.tableModel.endResetModel()