diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-03-07 09:59:54 +0100 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-03-07 09:59:54 +0100 |
commit | 5443aedab5a1e4d54888a56720c0a9fcf6c98315 (patch) | |
tree | 2e9d77be6404329e465c41501fc5f62a6083d914 /nephilim/plugin.py | |
parent | 71794c14051cb80431d81cdcc352a3198849163a (diff) |
clPlugin->plugin
Diffstat (limited to 'nephilim/plugin.py')
-rw-r--r-- | nephilim/plugin.py | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/nephilim/plugin.py b/nephilim/plugin.py new file mode 100644 index 0000000..dcbd1a0 --- /dev/null +++ b/nephilim/plugin.py @@ -0,0 +1,133 @@ +from PyQt4 import QtGui, QtCore +from PyQt4.QtCore import QVariant +import logging + +import plugins +from misc import * + +class Plugin: + _name = None + _dock_widget = None + _settings = None + _loaded = None + _listeners = None + _parent = None + _mpclient = None + DEFAULTS = {} + LISTENERS = {} + + def __init__(self, parent, mpclient, name): + self._name = name + self._parent = parent + self._mpclient = mpclient + self._loaded = False + self._listeners = [] + self._settings = QtCore.QSettings(ORGNAME, APPNAME) + + #init settings + self._settings.beginGroup(name) + for key in self.DEFAULTS: + if not self._settings.contains(key): + self._settings.setValue(key, QVariant(self.DEFAULTS[key])) + self._settings.endGroup() + + for event, listener in self.LISTENERS.iteritems(): + self._listeners.append([event, eval('self.%s'%listener)]) + + def name(self): + return self._name + def info(self): + return '' + def parent(self): + return self._parent + def set_status(self, status): + self._parent.setStatus(status) + def mpclient(self): + return self._mpclient + def settings(self): + return self._settings + + def load(self): + logging.info("loading") + 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._parent.addDock(self.get_dock_widget(opts)) + self._loaded = True + def unload(self): + if not self._loaded: + return + logging.info("unloading") + if self._listeners: + logging.debug("removing %s listeners"%(len(self._listeners))) + for listener in self._listeners: + self._mpclient.remove_listener(listener[0], listener[1]) + + self._unload() + dock_widget = self.get_dock_widget() + if dock_widget: + self._parent.removeDock(dock_widget) + self._dock_widget = None + self._settingsWidget = None + self._loaded = False + def is_loaded(self): + return self._loaded + + def get_dock_widget(self, opts = None): + self._dock_widget = self._get_dock_widget() + if self._dock_widget and opts: + self._dock_widget.setFeatures(opts) + self._dock_widget.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas) + return self._dock_widget + + 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 settings(self): + return self._settings + + def save_settings(self): + """ reimplement this""" + pass + + 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 _get_dock_widget(self): + """Override this one.""" + return None + def _create_dock(self, widget): + """Creates a QDockWidget with _parent $_parent containing widget $widget.""" + dock=QtGui.QDockWidget(self._name, self._parent) + dock.setObjectName(self._name) + dock.setWidget(widget) + + return dock + def _load(self): + """Override this one.""" + return + def _unload(self): + """Override this one.""" + return + |