diff options
Diffstat (limited to 'winMain.py')
-rw-r--r-- | winMain.py | 88 |
1 files changed, 66 insertions, 22 deletions
@@ -23,10 +23,12 @@ 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" mConnect=None mDisconnect=None + mLayout=None " connection window" wConnect=None @@ -40,19 +42,8 @@ class winMain(QtGui.QMainWindow): QtGui.QWidget.__init__(self, parent) self.setWindowTitle("montypc - An MPD client") - self.plugins={} - opts=QtGui.QDockWidget.DockWidgetClosable|QtGui.QDockWidget.DockWidgetMovable - for p in plugins.listPlugins(): - pkg,name=p[0],p[1] - # WARNING - dirty hack ahead! - plugin=eval('%s.%s'%(pkg,name))(self) - self.plugins[plugin.getName().lower()]=plugin - dock=plugin.getDockWidget(opts) - if dock: - self.addDockWidget(QtCore.Qt.TopDockWidgetArea, plugin.getDockWidget(opts)) - self.wConnect=winConnect() - + self.statusBar() # create a statusbar mBar=self.menuBar() # create a menubar # menu file @@ -76,16 +67,22 @@ class winMain(QtGui.QMainWindow): m.addAction("Settings", self.showWinSettings).setIcon(QtGui.QIcon('gfx/gtk-preferences.svg')) # menu layout - m=mBar.addMenu("Layout") - m.setTearOffEnabled(True) - m.addAction('Save layout', self.saveLayout) - m.addAction('Restore layout', self.restoreLayout) - m.addSeparator() - # can not use iterators, as that gives some creepy error 'bout c++ - actions=self.createPopupMenu().actions() - for i in xrange(len(actions)): - m.addAction(actions[i]) + 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() + self.updateLayoutMenu() self.setDockOptions(QtGui.QMainWindow.AllowNestedDocks \ |QtGui.QMainWindow.AllowTabbedDocks \ |QtGui.QMainWindow.VerticalTabs) @@ -113,9 +110,55 @@ class winMain(QtGui.QMainWindow): self.wConnect.monitor() self.show() - #self.showWinSettings() + if newPlugins: + self.showWinSettings() doEvents() + def updateLayoutMenu(self): + self.mLayout.clear() + self.mLayout.addAction('Save layout', self.saveLayout) + self.mLayout.addAction('Restore layout', self.restoreLayout) + self.mLayout.addSeparator() + # create checkable menu + a=QtGui.QAction('Show titlebars', self) + a.setCheckable(True) + a.setChecked(settings.get('winMain.show.titlebars', '1')=='1') + self.toggleTitleBars(a.isChecked()) + self.connect(a, QtCore.SIGNAL('toggled(bool)'), self.toggleTitleBars) + self.mLayout.addAction(a) + self.mLayout.addSeparator() + # can not use iterators, as that gives some creepy error 'bout c++ + actions=self.createPopupMenu().actions() + for i in xrange(len(actions)): + self.mLayout.addAction(actions[i]) + + def toggleTitleBars(self, val): + if val: + settings.set('winMain.show.titlebars', '1') + else: + settings.set('winMain.show.titlebars', '0') + for dock in self.docks: + if val: + 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) + self.addDockWidget(QtCore.Qt.TopDockWidgetArea, dock) + self.updateLayoutMenu() + def removeDock(self, dock): + if dock: + self.docks.remove(dock) + self.removeDockWidget(dock) + self.updateLayoutMenu() mMenuVisible=None def createPopupMenu(self): @@ -156,6 +199,7 @@ class winMain(QtGui.QMainWindow): if not self.wSettings: self.wSettings=winSettings(self) self.wSettings.show() + self.wSettings.raise_() def onReady(self, params): self.initialiseData() |