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
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
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
83
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
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
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
128
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
147 self._dock_widgets.remove(widget)
148
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