Lyrics: fix and reenable LyricWiki
[nephilim.git] / nephilim / plugin.py
blob59f9a163a2b0703124eb57100e29edf750576222
2 # Copyright (C) 2008 jerous <jerous@gmail.com>
3 # Copyright (C) 2009 Anton Khirnov <wyskas@gmail.com>
5 # Nephilim is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # Nephilim is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with Nephilim. If not, see <http://www.gnu.org/licenses/>.
19 from PyQt4 import QtGui, QtCore
20 from PyQt4.QtCore import QVariant
21 import logging
23 import plugins
25 class Plugin(QtCore.QObject):
26 # public, const
27 name = None
28 logger = None
29 mpclient = None
31 # public, read-only
32 loaded = None
34 _dock_widget = None
35 _settings = None
36 _parent = None
38 o = None
39 DEFAULTS = {}
41 def __init__(self, parent, mpclient, name):
42 QtCore.QObject.__init__(self)
43 self.name = name
44 self.mpclient = mpclient
45 self._parent = parent
46 self._loaded = False
47 self._settings = QtCore.QSettings()
49 self.logger = logging.getLogger(self.name)
51 #init settings
52 self.logger.debug('Initializing default settings.')
53 self._settings.beginGroup(name)
54 for key in self.DEFAULTS:
55 if not self._settings.contains(key):
56 self._settings.setValue(key, QVariant(self.DEFAULTS[key]))
57 self._settings.endGroup()
59 def info(self):
60 return ''
61 def parent(self):
62 return self._parent
63 def set_status(self, status):
64 self._parent.setStatus(status)
65 def settings(self):
66 return self._settings
68 def load(self):
69 self.logger.info('loading')
70 self._load()
71 opts = QtGui.QDockWidget.DockWidgetClosable|QtGui.QDockWidget.DockWidgetMovable
72 QtGui.QApplication.instance().main_win.add_dock(self.get_dock_widget(opts))
73 QtGui.QApplication.instance().main_win.restore_layout()
74 self.connect(self.mpclient, QtCore.SIGNAL('connect_changed'), self.set_enabled)
75 self._loaded = True
76 def unload(self):
77 if not self._loaded:
78 return
79 self.logger.info("unloading")
80 self._unload()
81 dock_widget = self.get_dock_widget()
82 if dock_widget:
83 QtGui.QApplication.instance().main_win.remove_dock(dock_widget)
84 self._dock_widget = None
85 self._settingsWidget = None
86 self.disconnect(self.mpclient, QtCore.SIGNAL('connect_changed'), self.set_enabled)
87 self._loaded = False
88 def set_enabled(self, val):
89 if self.o:
90 self.o.setEnabled(val)
92 def get_dock_widget(self, opts = None):
93 self._dock_widget = self._get_dock_widget()
94 if self._dock_widget and opts:
95 self._dock_widget.setFeatures(opts)
96 self._dock_widget.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas)
97 return self._dock_widget
99 class SettingsWidget(QtGui.QWidget):
100 """ plugins should subclass this"""
101 plugin = None
102 _settings = None
104 def __init__(self, plugin):
105 QtGui.QWidget.__init__(self)
106 self.plugin = plugin
107 self._settings = QtCore.QSettings()
109 def settings(self):
110 return self._settings
112 def save_settings(self):
113 """ reimplement this"""
114 pass
116 def _add_widget(self, widget, label = '', tooltip = ''):
117 """adds a widget with label"""
118 if not self.layout():
119 self.plugin.logger.error('Attempted to call add_widget with no layout set.')
120 widget.setToolTip(tooltip)
121 layout = QtGui.QHBoxLayout()
122 layout.addWidget(QtGui.QLabel(label))
123 layout.addWidget(widget)
124 self.layout().addLayout(layout)
126 def get_settings_widget(self):
127 """Should return subclassed SettingsWidget."""
128 return
130 def _get_dock_widget(self):
131 """Override this one."""
132 return None
133 def _create_dock(self, widget):
134 """Creates a QDockWidget with _parent $_parent containing widget $widget."""
135 dock=QtGui.QDockWidget(self.name, QtGui.QApplication.instance().main_win)
136 dock.setObjectName(self.name)
137 dock.setWidget(widget)
139 return dock
140 def _load(self):
141 """Override this one."""
142 return
143 def _unload(self):
144 """Override this one."""
145 return