1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QVariant
import logging
import plugins
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()
#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()
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
|