Source code for gui.bases.mainwindow.mainwindow

# -*- coding: utf-8 -*-
# gui/bases/mainwindow/mainwindow.py

from __future__ import absolute_import # PEP328
from builtins import str
import sys
import logging
from QtGui import QMainWindow
from QtCore import QSettings, QByteArray, QTimer
from gui.utils.appversion import QAppVersion
from gui.utils.translate import tr
from gui.utils.signal import Signal
from gui.bases.mainwindow.ui_mainwindow import Ui_MainWindow
from gui.bases.mixins import AppSettings

[docs]class MainWindow(QMainWindow, Ui_MainWindow, AppSettings): """ Main window base class. Provides functionality for storing and loading application settings, managing widgets. """ onStartupSignal = Signal() _appversion = None # QAppVersion def __init__(self, appversion, parent = None): QMainWindow.__init__(self, parent) assert QAppVersion.isValid(appversion), "Please provide a valid QAppVersion." self.setWindowTitle("{name} {number}" .format(name = appversion.name(), number = appversion.number())) self.appSettings = QSettings(appversion.organizationName(), appversion.settingsKey()) self._appversion = appversion self.setupUi(self) self.restoreSettings()
[docs] def getCommandlineArguments(self): """Get command line arguments, if any.""" arguments = sys.argv[1:] programName = self._appversion.name().lower() if (len(arguments) > 0 and str(arguments[0]).lower().find(programName + ".") >= 0): arguments = arguments[1:] return arguments
[docs] def show(self): QMainWindow.show(self) QTimer.singleShot(300, self.onStartupSignal.emit)
[docs] def closeEvent(self, event): self.storeSettings() QMainWindow.closeEvent(self, event)
[docs] def storeSettings(self): if self.appSettings is None: return geometry = self.saveGeometry() windowState = self.saveState() # print >>sys.__stderr__, geometry.toBase64() # print >>sys.__stderr__, windowState.toBase64() self.setRootGroup() self.appSettings.setValue("geometry", geometry) self.appSettings.setValue("windowState", windowState)
[docs] def restoreSettings(self): """ Load defaults for settings if missing and available. """ if self.appSettings is None: return defaultSettings = self._appversion.defaultSettings() logmsg = "Loaded settings." if defaultSettings is not None: # loading default settings if not set previously custom, default = [], [] for key, value in defaultSettings.items(): if self.appSettings.contains(key): custom.append(key) else: # qsettings doesn't contain the key, add it self.appSettings.setValue(key, QByteArray.fromBase64(value)) default.append(key) if len(default) > 0: logmsg += " Defaults for {0}.".format(", ".join(default)) if len(custom) > 0: logmsg += " Previous ones for {0}.".format(", ".join(custom)) logging.info(logmsg) # restore actual settings for key, func in (('geometry', self.restoreGeometry), ('windowState', self.restoreState)): try: #QVariant func(self.appSettings.value(key).toByteArray()) except AttributeError: func(self.appSettings.value(key))
# TODO: tests? # vim: set ts=4 sw=4 sts=4 tw=0: