AlbumCover: refresh has to take two parameters.
[nephilim.git] / clPlugin.py
blobf76acc90277f4a0b9e6459a1060910de6c9cb677
1 from PyQt4 import QtGui, QtCore
2 from PyQt4.QtCore import QVariant
3 import logging
5 import plugins
6 from misc import *
8 class Plugin:
9 name = None
10 dockWidget = None
11 settings = None
12 winMain = None
13 loaded = None
14 listeners = None
15 monty = None
16 DEFAULTS = {}
18 def __init__(self, winMain, name):
19 self.name = name
20 self.winMain = winMain
21 self.loaded = False
22 self.listeners = []
23 self.monty = winMain.monty
24 self.settings = QtCore.QSettings(ORGNAME, APPNAME)
26 #init settings
27 self.settings.beginGroup(self.name)
28 for key in self.DEFAULTS:
29 if not self.settings.contains(key):
30 self.settings.setValue(key, QVariant(self.DEFAULTS[key]))
31 self.settings.endGroup()
33 def getName(self):
34 return self.name
35 def getInfo(self):
36 return ''
37 def getExtInfo(self):
38 return ''
39 def getWinMain(self):
40 return self.winMain
41 def setStatus(self, status):
42 self.winMain.setStatus(status)
44 def load(self):
45 logging.info("loading")
46 if len(self.listeners):
47 logging.debug("adding %s listeners"%(len(self.listeners)))
48 for listener in self.listeners:
49 self.monty.add_listener(listener[0], listener[1])
51 self._load()
52 opts=QtGui.QDockWidget.DockWidgetClosable|QtGui.QDockWidget.DockWidgetMovable
53 self.winMain.addDock(self.getDockWidget(opts))
54 self.loaded=True
55 def unload(self):
56 if not self.loaded:
57 return
58 logging.info("unloading")
59 if len(self.listeners):
60 logging.debug("removing %s listeners"%(len(self.listeners)))
61 for listener in self.listeners:
62 self.monty.removeListener(listener[0], listener[1])
64 self._unload()
65 dock_widget = self.getDockWidget()
66 if dock_widget:
67 self.winMain.removeDock(dock_widget)
68 self.dockWidget = None
69 self.settingsWidget = None
70 self.loaded = False
71 def isLoaded(self):
72 return self.loaded
74 def addMontyListener(self, event, callback):
75 self.listeners.append([event, callback])
77 def getDockWidget(self, opts=None):
78 self.dockWidget = self._getDockWidget()
79 if self.dockWidget and opts:
80 self.dockWidget.setFeatures(opts)
81 self.dockWidget.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas)
82 return self.dockWidget
84 class SettingsWidget(QtGui.QWidget):
85 """ plugins should subclass this"""
86 plugin = None
87 settings = None
89 def __init__(self, plugin):
90 QtGui.QWidget.__init__(self)
91 self.plugin = plugin
92 self.settings = QtCore.QSettings(ORGNAME, APPNAME)
94 def save_settings(self):
95 """ reimplement this"""
96 self.plugin.saveSettings()
98 def _add_widget(self, widget, label = '', tooltip = ''):
99 """adds a widget with label"""
100 if not self.layout():
101 logging.error('Attempted to call add_widget with no layout set.')
102 widget.setToolTip(tooltip)
103 layout = QtGui.QHBoxLayout()
104 layout.addWidget(QtGui.QLabel(label))
105 layout.addWidget(widget)
106 self.layout().addLayout(layout)
108 def get_settings_widget(self):
109 """Should return subclassed SettingsWidget."""
110 return
112 def resetSettingCache(self):
113 #self.settings=None
114 self.settingsWidget=None
116 def _getPluginClassname(self, cl):
117 """Returns the name of a plugin (without 'plugin'-prefix)"""
118 return str(cl).split('.')[-1].lower()[len('plugin'):]
120 def _getDockWidget(self):
121 """Override this one."""
122 return None
123 def _createDock(self, widget):
124 """Creates a QDockWidget with parent $parent containing widget $widget."""
125 dock=QtGui.QDockWidget(self.name, self.winMain)
126 dock.setObjectName(self.name)
127 dock.setWidget(widget)
129 return dock
130 def _load(self):
131 """Override this one."""
132 return
133 def _unload(self):
134 """Override this one."""
135 return