from PyQt4 import QtGui, QtCore from PyQt4.QtCore import QVariant import logging import plugins from misc import * class Plugin(QtCore.QObject): _name = None _dock_widget = None _settings = None _loaded = None _listeners = None _parent = None _mpclient = None DEFAULTS = {} def __init__(self, parent, mpclient, name): QtCore.QObject.__init__(self) 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() 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