import os
from PyQt4 import QtCore, QtGui
import vqt.cli as vq_cli
import vqt.main as vq_main
import vqt.menubuilder as vq_menu
[docs]class VQMainCmdWindow(QtGui.QMainWindow):
'''
A base class for application window's to inherit from.
'''
def __init__(self, appname, cmd):
QtGui.QMainWindow.__init__(self)
self._vq_appname = appname
self._vq_settings = QtCore.QSettings('invisigoth', application=appname, parent=self)
self._vq_histfile = os.path.join( os.path.expanduser('~'), '.%s_history' % appname)
self._dock_widgets = []
self._dock_classes = {}
self.vqInitDockWidgetClasses()
self._vq_mbar = vq_menu.VQMenuBar()
self.setMenuBar(self._vq_mbar)
# AnimatedDocks, AllowNestedDocks, AllowTabbedDocks, ForceTabbedDocks, VerticalTabs
self.setDockOptions(self.AnimatedDocks | self.AllowTabbedDocks)
self._vq_cli = vq_cli.VQCli(cmd)
self._vq_cli.loadHistory(self._vq_histfile)
self._vq_cli.sigCliQuit.connect( self.close )
self.setCentralWidget(self._vq_cli)
self.vqRestoreGuiSettings(self._vq_settings)
[docs] def vqAddMenuField(self, fname, callback, args=()):
self._vq_mbar.addField(fname, callback, args=args)
[docs] def vqAddDynMenu(self, fname, callback):
self._vq_mbar.addDynMenu(fname, callback)
[docs] def vqInitDockWidgetClasses(self):
# apps can over-ride
pass
[docs] def vqAddDockWidgetClass(self, cls, args=()):
self._dock_classes[cls.__name__] = (cls,args)
[docs] def vqBuildDockWidget(self, clsname, floating=False, area=QtCore.Qt.TopDockWidgetArea):
res = self._dock_classes.get(clsname)
if res == None:
print 'vqBuildDockWidget Failed For: %s' % clsname
return
cls, args = res
obj = cls(*args)
return self.vqDockWidget(obj, area, floating=floating)
[docs] def vqRestoreGuiSettings(self, settings):
dwcls = settings.value('DockClasses')
if not dwcls.isNull():
for i,clsname in enumerate(dwcls.toStringList()):
d = self.vqBuildDockWidget(str(clsname), floating=True)
if d != None:
d.setObjectName('VQDockWidget%d' % i)
# Once dock widgets are loaded, we can restoreState
state = settings.value('DockState')
if not state.isNull():
self.restoreState(state.toByteArray())
geom = settings.value('DockGeometry')
if not geom.isNull():
self.restoreGeometry(geom.toByteArray())
# Just get all the resize activities done...
vq_main.eatevents()
for w in self._dock_widgets:
w.show()
return True
[docs] def vqSaveGuiSettings(self, settings):
dock_classes = []
# Enumerate the current dock windows and set
# their names by their list order...
for i,w in enumerate(self._dock_widgets):
dock_classes.append(w.widget().__class__.__name__)
name = 'VQDockWidget%d' % i
w.setObjectName(name)
settings.setValue('DockClasses', dock_classes)
settings.setValue('DockGeometry', self.saveGeometry())
settings.setValue('DockState', self.saveState())
[docs] def closeEvent(self, event):
self.vqSaveGuiSettings(self._vq_settings)
self._vq_cli.saveHistory(self._vq_histfile)
QtGui.QMainWindow.closeEvent(self, event)
[docs] def vqRemoveDockWidget(self, widget):
self._dock_widgets.remove(widget)
[docs] def vqClearDockWidgets(self):
for wid in self._dock_widgets:
wid.close()
[docs] def vqDockWidget(self, widget, area=QtCore.Qt.TopDockWidgetArea, floating=False):
d = VQDockWidget(self)
d.setWidget(widget)
d.setFloating(floating)
self.addDockWidget(area, d)
self._dock_widgets.append(d)
self.restoreDockWidget(d)
d.show()
return d