summaryrefslogtreecommitdiff
path: root/nephilim/clPlugin.py
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-02-20 10:49:00 +0100
committerAnton Khirnov <wyskas@gmail.com>2009-02-20 10:49:00 +0100
commitae872ea3018fe1dac39f867f386b081598fb0812 (patch)
tree856d2b6d32050174682305b421548e680fe5647a /nephilim/clPlugin.py
parent000f9d5ba84426da6b5211dd0bea4a401b8f4289 (diff)
Move modules to a separate dir.
Diffstat (limited to 'nephilim/clPlugin.py')
-rw-r--r--nephilim/clPlugin.py136
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
+