Added generic SingletonDialog class for managing a single dialog instance

Use this for the options dialog instead of the custom implementation in MainWindow.
This commit is contained in:
Philipp Wolfer
2019-12-12 08:35:29 +01:00
parent 8621372d91
commit 086da47d72
3 changed files with 25 additions and 11 deletions

View File

@@ -57,6 +57,28 @@ class PreserveGeometry:
config.persist[self.opt_name()] = self.saveGeometry()
class SingletonDialog:
_instance = None
@classmethod
def get_instance(cls, *args, **kwargs):
if not cls._instance:
cls._instance = cls(*args, **kwargs)
cls._instance.finished.connect(cls._on_dialog_finished)
return cls._instance
@classmethod
def show_instance(cls, *args, **kwargs):
instance = cls.get_instance(*args, **kwargs)
instance.show()
instance.raise_()
instance.activateWindow()
@classmethod
def _on_dialog_finished(cls):
cls._instance = None
class PicardDialog(QtWidgets.QDialog, PreserveGeometry):
flags = QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint | QtCore.Qt.WindowCloseButtonHint

View File

@@ -164,7 +164,6 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry):
self.log_dialog = LogView(self)
self.history_dialog = HistoryView(self)
self.optionsDialog = None
bottomLayout = QtWidgets.QHBoxLayout()
bottomLayout.setContentsMargins(0, 0, 0, 0)
@@ -907,15 +906,7 @@ class MainWindow(QtWidgets.QMainWindow, PreserveGeometry):
self.show_options("about")
def show_options(self, page=None):
if not self.optionsDialog:
self.optionsDialog = OptionsDialog(page, self)
self.optionsDialog.finished.connect(self.on_options_closed)
self.optionsDialog.show()
self.optionsDialog.raise_()
self.optionsDialog.activateWindow()
def on_options_closed(self):
self.optionsDialog = None
OptionsDialog.show_instance(page, self)
def show_help(self):
webbrowser2.goto('documentation')

View File

@@ -35,6 +35,7 @@ from picard.util import (
from picard.ui import (
HashableTreeWidgetItem,
PicardDialog,
SingletonDialog,
)
from picard.ui.options import ( # noqa: F401 # pylint: disable=unused-import
OptionsCheckError,
@@ -63,7 +64,7 @@ from picard.ui.options import ( # noqa: F401 # pylint: disable=unused-import
from picard.ui.util import StandardButton
class OptionsDialog(PicardDialog):
class OptionsDialog(PicardDialog, SingletonDialog):
autorestore = False