Package vqt :: Module application
[hide private]
[frames] | no frames]

Source Code for Module vqt.application

  1  import os 
  2  from PyQt4 import QtCore, QtGui 
  3  
 
  4  import vqt.cli as vq_cli 
  5  import vqt.main as vq_main 
  6  import vqt.menubuilder as vq_menu 
  7  
 
8 -class VQDockWidget(QtGui.QDockWidget):
9
10 - def __init__(self, parent):
11 QtGui.QDockWidget.__init__(self, parent) 12 self._vq_visible = False 13 self.visibilityChanged.connect( self.vqSetVisible ) 14 #self.connect(self, QtCore.SIGNAL('visibilityChanged(bool)'), self.vqSetVisible) 15 self.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas)
16
17 - def vqIsVisible(self):
18 return self._vq_visible
19
20 - def vqSetVisible(self, visible):
21 self._vq_visible = visible
22
23 - def vqSaveState(self):
24 wid = self.widget() 25 if isinstance(wid, VQSavableWidget): 26 return wid.vqSaveState()
27
28 - def setWidget(self, widget):
29 # If he sets his window title, we want to... 30 self.setWindowTitle(widget.windowTitle()) 31 widget.setWindowTitle = self.setWindowTitle 32 QtGui.QDockWidget.setWidget(self, widget)
33
34 - def vqRestoreState(self):
35 pass
36
37 - def closeEvent(self, event):
38 self.parentWidget().vqRemoveDockWidget(self) 39 return QtGui.QDockWidget.closeEvent(self, event)
40 41
42 -class VQMainCmdWindow(QtGui.QMainWindow):
43 ''' 44 A base class for application window's to inherit from. 45 ''' 46
47 - def __init__(self, appname, cmd):
48 49 QtGui.QMainWindow.__init__(self) 50 self._vq_appname = appname 51 52 self._vq_settings = QtCore.QSettings('invisigoth', application=appname, parent=self) 53 54 self._vq_histfile = os.path.join( os.path.expanduser('~'), '.%s_history' % appname) 55 56 self._dock_widgets = [] 57 self._dock_classes = {} 58 59 self.vqInitDockWidgetClasses() 60 61 self._vq_mbar = vq_menu.VQMenuBar() 62 self.setMenuBar(self._vq_mbar) 63 64 # AnimatedDocks, AllowNestedDocks, AllowTabbedDocks, ForceTabbedDocks, VerticalTabs 65 self.setDockOptions(self.AnimatedDocks | self.AllowTabbedDocks) 66 67 self._vq_cli = vq_cli.VQCli(cmd) 68 self._vq_cli.loadHistory(self._vq_histfile) 69 self._vq_cli.sigCliQuit.connect( self.close ) 70 71 self.setCentralWidget(self._vq_cli) 72 self.vqRestoreGuiSettings(self._vq_settings)
73
74 - def vqAddMenuField(self, fname, callback, args=()):
75 self._vq_mbar.addField(fname, callback, args=args)
76
77 - def vqAddDynMenu(self, fname, callback):
78 self._vq_mbar.addDynMenu(fname, callback)
79
80 - def vqInitDockWidgetClasses(self):
81 # apps can over-ride 82 pass
83
84 - def vqAddDockWidgetClass(self, cls, args=()):
85 self._dock_classes[cls.__name__] = (cls,args)
86
87 - def vqBuildDockWidget(self, clsname, floating=False, area=QtCore.Qt.TopDockWidgetArea):
88 res = self._dock_classes.get(clsname) 89 if res == None: 90 print 'vqBuildDockWidget Failed For: %s' % clsname 91 return 92 cls, args = res 93 obj = cls(*args) 94 return self.vqDockWidget(obj, area, floating=floating)
95
96 - def vqRestoreGuiSettings(self, settings):
97 98 dwcls = settings.value('DockClasses') 99 if not dwcls.isNull(): 100 101 for i,clsname in enumerate(dwcls.toStringList()): 102 d = self.vqBuildDockWidget(str(clsname), floating=True) 103 if d != None: 104 d.setObjectName('VQDockWidget%d' % i) 105 106 # Once dock widgets are loaded, we can restoreState 107 state = settings.value('DockState') 108 if not state.isNull(): 109 self.restoreState(state.toByteArray()) 110 111 geom = settings.value('DockGeometry') 112 if not geom.isNull(): 113 self.restoreGeometry(geom.toByteArray()) 114 115 # Just get all the resize activities done... 116 vq_main.eatevents() 117 118 for w in self._dock_widgets: 119 w.show() 120 121 return True
122
123 - def vqSaveGuiSettings(self, settings):
124 125 dock_classes = [] 126 127 # Enumerate the current dock windows and set 128 # their names by their list order... 129 for i,w in enumerate(self._dock_widgets): 130 131 dock_classes.append(w.widget().__class__.__name__) 132 name = 'VQDockWidget%d' % i 133 w.setObjectName(name) 134 135 settings.setValue('DockClasses', dock_classes) 136 settings.setValue('DockGeometry', self.saveGeometry()) 137 settings.setValue('DockState', self.saveState())
138 139
140 - def closeEvent(self, event):
141 142 self.vqSaveGuiSettings(self._vq_settings) 143 self._vq_cli.saveHistory(self._vq_histfile) 144 QtGui.QMainWindow.closeEvent(self, event)
145
146 - def vqRemoveDockWidget(self, widget):
147 self._dock_widgets.remove(widget)
148
149 - def vqClearDockWidgets(self):
150 for wid in self._dock_widgets: 151 wid.close()
152
153 - def vqDockWidget(self, widget, area=QtCore.Qt.TopDockWidgetArea, floating=False):
154 d = VQDockWidget(self) 155 d.setWidget(widget) 156 d.setFloating(floating) 157 self.addDockWidget(area, d) 158 self._dock_widgets.append(d) 159 self.restoreDockWidget(d) 160 d.show() 161 return d
162