diff options
author | jerous <jerous@gmail.com> | 2008-11-15 17:23:14 +0100 |
---|---|---|
committer | jerous <jerous@gmail.com> | 2008-11-15 17:23:14 +0100 |
commit | b22148c1bf833464dfc87ce696b4184ae0184e16 (patch) | |
tree | bab8bee4a96817772a62a9f1b3b57249edc5d163 /winMain.py | |
parent | 536e8e3be5a5dcb0e9c6e0f8664e84b5eb65d796 (diff) |
redesign of plugin-handling
plugin-handling is performed in plugins/__init__.py (instead of winMain)
robustness against plugins containing errors (like syntax etc)
Diffstat (limited to 'winMain.py')
-rw-r--r-- | winMain.py | 52 |
1 files changed, 19 insertions, 33 deletions
@@ -1,7 +1,6 @@ from PyQt4 import QtGui, QtCore, QtSvg from traceback import print_exc import time -import sys import copy from misc import * @@ -18,8 +17,6 @@ import log class winMain(QtGui.QMainWindow): """The winMain class is mpc's main window, showing the playlists and control-interface""" - " list of plugins that are loaded. name=>Plugin" - plugins={} docks=[] " menus" @@ -31,10 +28,6 @@ class winMain(QtGui.QMainWindow): wConnect=None wSettings=None - "Other vars" - " all objects which should be disabled when there is no connection" - plugins=None - def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setWindowTitle("montypc - An MPD client") @@ -67,18 +60,18 @@ class winMain(QtGui.QMainWindow): self.mLayout=mBar.addMenu("Layout") self.mLayout.setTearOffEnabled(True) - self.plugins={} newPlugins=False # are there new plugins? - for p in plugins.listPlugins(): - pkg,name=p[0],p[1] - # WARNING - dirty hack ahead! - plugin=eval('%s.%s'%(pkg,name))(self) - newPlugins=newPlugins|(settings.get('%s.load'%(plugin.getName(True)), None)==None) - self.plugins[plugin.getName().lower()]=plugin - if settings.get('%s.load'%(plugin.getName(True)), '1')=='1': - # load new plugins by default - plugin.load() - + for k, entry in plugins.listPlugins().iteritems(): + # load the plugin + plugin=plugins.loadPlugin(entry[plugins.PLUGIN_CLASS], self) + if plugin: + newPlugins=newPlugins|(settings.get('%s.load'%(plugin.getName(True)), None)==None) + if settings.get('%s.load'%(plugin.getName(True)), '1')=='1': + # load new plugins by default + plugin.load() + else: + newPlugins=True + self.updateLayoutMenu() self.setDockOptions(QtGui.QMainWindow.AllowNestedDocks \ |QtGui.QMainWindow.AllowTabbedDocks \ @@ -113,12 +106,11 @@ class winMain(QtGui.QMainWindow): def quit(self): # unload all plugins - for k in self.plugins: - p=self.plugins[k] - if p.isLoaded(): + for entry in plugins.listPlugins().values(): + p=entry[plugins.PLUGIN_INSTANCE] + if p and p.isLoaded(): p.unload() - self.plugins=[] QtCore.QCoreApplication.exit() @@ -150,13 +142,6 @@ class winMain(QtGui.QMainWindow): dock.setTitleBarWidget(None) else: dock.setTitleBarWidget(QtGui.QWidget()) - - def getPlugin(self, name): - try: - return self.plugins[name.lower()] - except: - return None - def addDock(self, dock): if dock: self.docks.append(dock) @@ -222,9 +207,10 @@ class winMain(QtGui.QMainWindow): doEvents() def enableAll(self, value): - for o in self.plugins: + for k,entry in plugins.listPlugins().iteritems(): try: - self.plugins[o].o.setEnabled(value) + plugin=entry[plugins.PLUGIN_INSTANCE] + plugin.o.setEnabled(value) except: pass @@ -280,14 +266,14 @@ class winMain(QtGui.QMainWindow): def getPlaylistList(self): try: - return self.plugins['playlist'].getList() + return plugins.getPlugin('Playlist').getList() except: print "Missing playlist plugin!" return None def getLibraryList(self): try: - return self.plugins['library'].getList() + return plugins.getPlugin('Library').getList() except: print "Missing library plugin!" return None |