diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-02-20 10:49:00 +0100 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-02-20 10:49:00 +0100 |
commit | ae872ea3018fe1dac39f867f386b081598fb0812 (patch) | |
tree | 856d2b6d32050174682305b421548e680fe5647a /nephilim/clPlugin.py | |
parent | 000f9d5ba84426da6b5211dd0bea4a401b8f4289 (diff) |
Move modules to a separate dir.
Diffstat (limited to 'nephilim/clPlugin.py')
-rw-r--r-- | nephilim/clPlugin.py | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/nephilim/clPlugin.py b/nephilim/clPlugin.py new file mode 100644 index 0000000..efbd502 --- /dev/null +++ b/nephilim/clPlugin.py @@ -0,0 +1,136 @@ +from PyQt4 import QtGui, QtCore +from PyQt4.QtCore import QVariant +import logging + +import plugins +from misc import * + +class Plugin: + name = None + dockWidget = None + settings = None + winMain = None + loaded = None + listeners = None + mpclient = None + DEFAULTS = {} + + def __init__(self, winMain, name): + self.name = name + self.winMain = winMain + self.loaded = False + self.listeners = [] + self.mpclient = winMain.mpclient + self.settings = QtCore.QSettings(ORGNAME, APPNAME) + + #init settings + self.settings.beginGroup(self.name) + for key in self.DEFAULTS: + if not self.settings.contains(key): + self.settings.setValue(key, QVariant(self.DEFAULTS[key])) + self.settings.endGroup() + + def getName(self): + return self.name + def getInfo(self): + return '' + def getExtInfo(self): + return '' + def getWinMain(self): + return self.winMain + def setStatus(self, status): + self.winMain.setStatus(status) + + def load(self): + logging.info("loading") + if len(self.listeners): + logging.debug("adding %s listeners"%(len(self.listeners))) + for listener in self.listeners: + self.mpclient.add_listener(listener[0], listener[1]) + + self._load() + opts=QtGui.QDockWidget.DockWidgetClosable|QtGui.QDockWidget.DockWidgetMovable + self.winMain.addDock(self.getDockWidget(opts)) + self.loaded=True + def unload(self): + if not self.loaded: + return + logging.info("unloading") + if len(self.listeners): + logging.debug("removing %s listeners"%(len(self.listeners))) + for listener in self.listeners: + self.mpclient.removeListener(listener[0], listener[1]) + + self._unload() + dock_widget = self.getDockWidget() + if dock_widget: + self.winMain.removeDock(dock_widget) + self.dockWidget = None + self.settingsWidget = None + self.loaded = False + def isLoaded(self): + return self.loaded + + def addListener(self, event, callback): + self.listeners.append([event, callback]) + + def getDockWidget(self, opts=None): + self.dockWidget = self._getDockWidget() + if self.dockWidget and opts: + self.dockWidget.setFeatures(opts) + self.dockWidget.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas) + return self.dockWidget + + class SettingsWidget(QtGui.QWidget): + """ plugins should subclass this""" + plugin = None + settings = None + + def __init__(self, plugin): + QtGui.QWidget.__init__(self) + self.plugin = plugin + self.settings = QtCore.QSettings(ORGNAME, APPNAME) + + def save_settings(self): + """ reimplement this""" + self.plugin.saveSettings() + + def _add_widget(self, widget, label = '', tooltip = ''): + """adds a widget with label""" + if not self.layout(): + logging.error('Attempted to call add_widget with no layout set.') + widget.setToolTip(tooltip) + layout = QtGui.QHBoxLayout() + layout.addWidget(QtGui.QLabel(label)) + layout.addWidget(widget) + self.layout().addLayout(layout) + + def get_settings_widget(self): + """Should return subclassed SettingsWidget.""" + return + + def resetSettingCache(self): + #self.settings=None + self.settingsWidget=None + + def _getPluginClassname(self, cl): + """Returns the name of a plugin (without 'plugin'-prefix)""" + return str(cl).split('.')[-1].lower()[len('plugin'):] + + def _getDockWidget(self): + """Override this one.""" + return None + def _createDock(self, widget): + """Creates a QDockWidget with parent $parent containing widget $widget.""" + dock=QtGui.QDockWidget(self.name, self.winMain) + dock.setObjectName(self.name) + dock.setWidget(widget) + + return dock + def _load(self): + """Override this one.""" + return + def _unload(self): + """Override this one.""" + return + |