Package vdb :: Package qt :: Module windows
[hide private]
[frames] | no frames]

Source Code for Module vdb.qt.windows

  1  '''
 
  2  The heart of the new VDB QT gui!
 
  3  ''' 
  4  from PyQt4 import QtCore, QtGui 
  5  
 
  6  import vdb 
  7  import vtrace 
  8  
 
  9  #import vqt.cli as vq_cli
 
 10  import vqt.main as vq_main 
 11  import vqt.qpython as vq_python 
 12  import vqt.application as vq_app 
 13  
 
 14  import vtrace.qt as vtrace_qt 
 15  
 
 16  import envi.qt as envi_qt 
 17  import envi.qt.memory as e_mem_qt 
18 19 20 -class VdbMemoryWindow(e_mem_qt.VQMemoryWindow, vtrace.Notifier):
21
22 - def __init__(self, db, parent=None):
23 t = vdb.VdbTrace(db) 24 e_mem_qt.VQMemoryWindow.__init__(self, t, syms=t, parent=parent) 25 vtrace.Notifier.__init__(self) 26 self._db = db 27 self._db.registerNotifier(vtrace.NOTIFY_ALL, self) 28 for rname in db.canvas.getRendererNames(): 29 self.mem_canvas.addRenderer(rname, db.canvas.getRenderer(rname)) 30 31 self.loadRendSelect() 32 33 if not t.isAttached(): 34 self.setEnabled(False) 35 elif t.isRunning(): 36 self.setEnabled(False) 37 else: 38 self._renderMemory()
39 40 @vq_main.idlethreadsync
41 - def notify(self, event, trace):
42 if event in [vtrace.NOTIFY_CONTINUE, vtrace.NOTIFY_DETACH, vtrace.NOTIFY_EXIT]: 43 self.setEnabled(False) 44 45 else: 46 # If the trace is just going to run again, skip the update. 47 if not trace.shouldRunAgain(): 48 self.setEnabled(True) 49 self._renderMemory()
50
51 -class VdbWindow(vq_app.VQMainCmdWindow, vtrace.Notifier):
52 53 @QtCore.pyqtSlot(int)
54 - def vqThreadSelected(self, tid):
55 print 'THREAD SELECTED!', tid
56
57 - def __init__(self, db):
58 vtrace.Notifier.__init__(self) 59 # Gui constructor needs these set... 60 self._db = db 61 self._db_t = vdb.VdbTrace(db) 62 self._db.registerNotifier(vtrace.NOTIFY_ALL, self) 63 64 vq_app.VQMainCmdWindow.__init__(self, 'Vdb', db) 65 66 tbar = vtrace_qt.VQTraceToolBar(self._db_t, parent=self) 67 self.addToolBar(QtCore.Qt.TopToolBarArea, tbar) 68 69 self.vqAddMenuField('&File.&Quit', self.menuFileQuit) 70 self.vqAddMenuField('&View.&Memory', self.menuViewMemory) 71 self.vqAddMenuField('&View.&Memory Maps', self.menuViewMemMaps) 72 self.vqAddMenuField('&View.&Threads', self.menuViewThreads) 73 self.vqAddMenuField('&View.&Registers', self.menuViewRegisters) 74 self.vqAddMenuField('&View.&File Descriptors', self.menuViewFileDesc) 75 self.vqAddMenuField('&View.&Layouts.&Load', self.menuViewLayoutsLoad) 76 self.vqAddMenuField('&View.&Layouts.&Save', self.menuViewLayoutsSave) 77 self.vqAddMenuField('&View.&Layouts.&Clear', self.menuViewLayoutsClear) 78 self.vqAddMenuField('&Tools.&Python', self.menuToolsPython)
79
80 - def vqInitDockWidgetClasses(self):
81 self.vqAddDockWidgetClass(VdbMemoryWindow, args=(self._db, self)) 82 self.vqAddDockWidgetClass(vtrace_qt.VQMemoryMapView, args=(self._db_t, self)) 83 self.vqAddDockWidgetClass(vtrace_qt.VQFileDescView, args=(self._db_t, self)) 84 self.vqAddDockWidgetClass(vtrace_qt.VQThreadsView, args=(self._db_t, self, self.vqThreadSelected)) 85 self.vqAddDockWidgetClass(vtrace_qt.VQRegistersView, args=(self._db_t, self)) 86 self.vqAddDockWidgetClass(vq_python.VQPythonView, args=(self._db.getExpressionLocals(),))
87
88 - def menuToolsPython(self):
89 self.vqBuildDockWidget('VQPythonView')
90
91 - def menuViewFileDesc(self):
92 self.vqBuildDockWidget('VQFileDescView')
93
94 - def menuViewMemMaps(self):
95 self.vqBuildDockWidget('VQMemoryMapView')
96
97 - def menuViewMemory(self):
98 self.vqBuildDockWidget('VdbMemoryWindow', floating=True)
99
100 - def menuViewThreads(self):
101 self.vqBuildDockWidget('VQThreadsView', area=QtCore.Qt.RightDockWidgetArea)
102
103 - def menuViewRegisters(self):
104 self.vqBuildDockWidget('VQRegistersView', area=QtCore.Qt.RightDockWidgetArea)
105
106 - def menuViewLayoutsLoad(self):
107 fname = QtGui.QFileDialog.getOpenFileName(self, 'Load Layout') 108 if fname == None: 109 return 110 111 self.vqClearDockWidgets() 112 113 settings = QtCore.QSettings(fname, QtCore.QSettings.IniFormat) 114 self.vqRestoreGuiSettings(settings)
115
116 - def menuViewLayoutsSave(self):
117 fname = QtGui.QFileDialog.getSaveFileName(self, 'Save Layout') 118 if fname == None: 119 return 120 121 settings = QtCore.QSettings(fname, QtCore.QSettings.IniFormat) 122 self.vqSaveGuiSettings(settings)
123
124 - def menuViewLayoutsClear(self):
125 self.vqClearDockWidgets()
126
127 - def menuFileQuit(self, *args, **kwargs):
128 self.close()
129
130 - def notify(self, event, trace):
131 pass
132
133 - def closeEvent(self, event):
134 try: 135 if self._db.trace.isAttached(): 136 self._db.trace.detach() 137 except Exception, e: 138 print('Error Detaching: %s' % e) 139 140 return vq_app.VQMainCmdWindow.closeEvent(self, event)
141