summaryrefslogtreecommitdiff
path: root/nephilim/plugin.py
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-03-07 09:59:54 +0100
committerAnton Khirnov <wyskas@gmail.com>2009-03-07 09:59:54 +0100
commit5443aedab5a1e4d54888a56720c0a9fcf6c98315 (patch)
tree2e9d77be6404329e465c41501fc5f62a6083d914 /nephilim/plugin.py
parent71794c14051cb80431d81cdcc352a3198849163a (diff)
clPlugin->plugin
Diffstat (limited to 'nephilim/plugin.py')
-rw-r--r--nephilim/plugin.py133
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
+