Source code for lib_openmolar.common.qt4.widgets.pluggable_main_window
#! /usr/bin/env python
# -*- coding: utf-8 -*-
###############################################################################
## ##
## Copyright 2010, Neil Wallace <rowinggolfer@googlemail.com> ##
## ##
## This program is free software: you can redistribute it and/or modify ##
## it under the terms of the GNU General Public License as published by ##
## the Free Software Foundation, either version 3 of the License, or ##
## (at your option) any later version. ##
## ##
## This program is distributed in the hope that it will be useful, ##
## but WITHOUT ANY WARRANTY; without even the implied warranty of ##
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ##
## GNU General Public License for more details. ##
## ##
## You should have received a copy of the GNU General Public License ##
## along with this program. If not, see <http://www.gnu.org/licenses/>. ##
## ##
###############################################################################
'''
provides the PluggableMainWindow class
'''
import logging
import pickle
import sys
from PyQt4 import QtGui, QtCore
from lib_openmolar.common.qt4.widgets import (
BaseMainWindow,
PluginOptionsWidget,
Preference,
PreferencesDialog)
logging.basicConfig(level=logging.DEBUG)
[docs]class PluggableMainWindow(BaseMainWindow):
'''
adds a preference dialog with font and plugin options
'''
_preferences_dialog = None
[docs] def __init__(self, parent=None):
BaseMainWindow.__init__(self, parent)
[docs] def loadSettings(self):
'''
load settings from QtCore.QSettings.
'''
settings = QtCore.QSettings()
#Qt settings
self.restoreGeometry(settings.value("geometry").toByteArray())
self.restoreState(settings.value("windowState").toByteArray())
statusbar_hidden = settings.value("statusbar_hidden").toBool()
self.statusbar.setVisible(not statusbar_hidden)
self.action_show_statusbar.setChecked(not self.statusbar.isHidden())
font = settings.value("Font").toPyObject()
if font:
QtGui.QApplication.instance().setFont(font)
toolbar_set = settings.value(
"Toolbar", QtCore.Qt.ToolButtonTextUnderIcon).toInt()[0]
for tb in self.toolbar_list:
tb.setToolButtonStyle(toolbar_set)
tiny_menu = settings.value("TinyMenu").toBool()
if tiny_menu:
self.menuBar().toggle_visability(True)
self.menuBar().menu_toolbar.toggleViewAction().setChecked(True)
qsettings = QtCore.QSettings()
#python dict of settings
dict_ = str(qsettings.value("settings_dict").toString())
if dict_:
try:
SETTINGS.PERSISTANT_SETTINGS = pickle.loads(dict_)
except Exception as e:
print "exception caught loading python settings...", e
SETTINGS.PLUGIN_DIRS = qsettings.value(
"plugin_dirs").toStringList()
SETTINGS.NAKED_PLUGIN_DIRS = qsettings.value(
"naked_plugin_dirs").toStringList()
[docs] def saveSettings(self):
'''
save settings from QtCore.QSettings
'''
settings = QtCore.QSettings()
#Qt settings
settings.setValue("geometry", self.saveGeometry())
settings.setValue("windowState", self.saveState())
settings.setValue("statusbar_hidden", self.statusbar.isHidden())
settings.setValue("Font", self.font())
settings.setValue("Toolbar", self.main_toolbar.toolButtonStyle())
settings.setValue("TinyMenu", not self.menuBar().isVisible())
# SETTINGS is a python dict of non qt-specific settings.
# unfortunately.. QVariant.toPyObject can't recreate a dictionary
# so best to pickle this
qsettings = QtCore.QSettings()
pickled_dict = pickle.dumps(SETTINGS.PERSISTANT_SETTINGS)
qsettings.setValue("settings_dict", pickled_dict)
qsettings.setValue("plugin_dirs", SETTINGS.PLUGIN_DIRS)
qsettings.setValue("naked_plugin_dirs", SETTINGS.NAKED_PLUGIN_DIRS)
[docs] def preferences_dialog(self):
if self._preferences_dialog is None:
dl = self._preferences_dialog = PreferencesDialog(self)
plugin_icon = QtGui.QIcon(":icons/plugins.png")
plugins_pref = Preference(_("Plugins"))
plugins_pref.setIcon(plugin_icon)
pl_widg = PluginOptionsWidget(self)
plugins_pref.setWidget(pl_widg)
dl.insert_preference_dialog(0, plugins_pref)
return self._preferences_dialog
[docs] def show_preferences_dialog(self):
'''
launch the preference dialog
'''
self.preferences_dialog().exec_()
def _test():
import __builtin__
import gettext
import os
gettext.install("")
class MockSettings(object):
PERSISTANT_SETTINGS = {}
plugins = []
PLUGIN_DIRS = ["/home/neil/openmolar/hg_openmolar/plugins/client",]
NAKED_PLUGIN_DIRS = []
__builtin__.SETTINGS = MockSettings()
app = QtGui.QApplication([])
mw = PluggableMainWindow()
mw.main_toolbar.addAction(QtGui.QAction("Placeholder", mw))
mw.show()
app.exec_()
if __name__ == "__main__":
_test()