src/eric7/Debugger/DebugViewer.py

branch
eric7
changeset 9532
39a1ebff6b4e
parent 9482
a2bc06a54d9d
child 9541
69167c94995f
equal deleted inserted replaced
9531:155b2646799a 9532:39a1ebff6b4e
135 self.gvvWidgetVLayout = QVBoxLayout(self.gvvWidget) 135 self.gvvWidgetVLayout = QVBoxLayout(self.gvvWidget)
136 self.gvvWidgetVLayout.setContentsMargins(0, 0, 0, 0) 136 self.gvvWidgetVLayout.setContentsMargins(0, 0, 0, 0)
137 self.gvvWidgetVLayout.setSpacing(3) 137 self.gvvWidgetVLayout.setSpacing(3)
138 self.gvvWidget.setLayout(self.gvvWidgetVLayout) 138 self.gvvWidget.setLayout(self.gvvWidgetVLayout)
139 139
140 self.gvvWidgetHLayout1 = QHBoxLayout()
141 self.gvvWidgetHLayout1.setContentsMargins(3, 3, 3, 3)
142
143 self.gvvStackComboBox = QComboBox(self.gvvWidget)
144 self.gvvStackComboBox.setSizePolicy(
145 QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed
146 )
147 self.gvvWidgetHLayout1.addWidget(self.gvvStackComboBox)
148
149 self.gvvSourceButton = QPushButton(self.tr("Source"), self.gvvWidget)
150 self.gvvWidgetHLayout1.addWidget(self.gvvSourceButton)
151 self.gvvSourceButton.setEnabled(False)
152 self.gvvWidgetVLayout.addLayout(self.gvvWidgetHLayout1)
153
140 self.globalsViewer = VariablesViewer(self, True, self.gvvWidget) 154 self.globalsViewer = VariablesViewer(self, True, self.gvvWidget)
141 self.gvvWidgetVLayout.addWidget(self.globalsViewer) 155 self.gvvWidgetVLayout.addWidget(self.globalsViewer)
142 156
143 self.gvvWidgetHLayout = QHBoxLayout() 157 self.gvvWidgetHLayout = QHBoxLayout()
144 self.gvvWidgetHLayout.setContentsMargins(3, 3, 3, 3) 158 self.gvvWidgetHLayout.setContentsMargins(3, 3, 3, 3)
182 ) 196 )
183 self.__tabWidget.setTabToolTip( 197 self.__tabWidget.setTabToolTip(
184 index, self.tr("Shows the list of global variables and their values.") 198 index, self.tr("Shows the list of global variables and their values.")
185 ) 199 )
186 200
201 self.gvvSourceButton.clicked.connect(self.__showSource)
187 self.setGlobalsFilterButton.clicked.connect(self.setGlobalsFilter) 202 self.setGlobalsFilterButton.clicked.connect(self.setGlobalsFilter)
188 self.globalsFilterEdit.returnPressed.connect(self.setGlobalsFilter) 203 self.globalsFilterEdit.returnPressed.connect(self.setGlobalsFilter)
189 204
190 # add the local variables viewer 205 # add the local variables viewer
191 self.lvvWidget = QWidget() 206 self.lvvWidget = QWidget()
195 self.lvvWidget.setLayout(self.lvvWidgetVLayout) 210 self.lvvWidget.setLayout(self.lvvWidgetVLayout)
196 211
197 self.lvvWidgetHLayout1 = QHBoxLayout() 212 self.lvvWidgetHLayout1 = QHBoxLayout()
198 self.lvvWidgetHLayout1.setContentsMargins(3, 3, 3, 3) 213 self.lvvWidgetHLayout1.setContentsMargins(3, 3, 3, 3)
199 214
200 self.stackComboBox = QComboBox(self.lvvWidget) 215 self.lvvStackComboBox = QComboBox(self.lvvWidget)
201 self.stackComboBox.setSizePolicy( 216 self.lvvStackComboBox.setSizePolicy(
202 QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed 217 QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed
203 ) 218 )
204 self.lvvWidgetHLayout1.addWidget(self.stackComboBox) 219 self.lvvWidgetHLayout1.addWidget(self.lvvStackComboBox)
205 220
206 self.sourceButton = QPushButton(self.tr("Source"), self.lvvWidget) 221 self.lvvSourceButton = QPushButton(self.tr("Source"), self.lvvWidget)
207 self.lvvWidgetHLayout1.addWidget(self.sourceButton) 222 self.lvvWidgetHLayout1.addWidget(self.lvvSourceButton)
208 self.sourceButton.setEnabled(False) 223 self.lvvSourceButton.setEnabled(False)
209 self.lvvWidgetVLayout.addLayout(self.lvvWidgetHLayout1) 224 self.lvvWidgetVLayout.addLayout(self.lvvWidgetHLayout1)
210 225
211 self.localsViewer = VariablesViewer(self, False, self.lvvWidget) 226 self.localsViewer = VariablesViewer(self, False, self.lvvWidget)
212 self.lvvWidgetVLayout.addWidget(self.localsViewer) 227 self.lvvWidgetVLayout.addWidget(self.localsViewer)
213 228
252 ) 267 )
253 self.__tabWidget.setTabToolTip( 268 self.__tabWidget.setTabToolTip(
254 index, self.tr("Shows the list of local variables and their values.") 269 index, self.tr("Shows the list of local variables and their values.")
255 ) 270 )
256 271
257 self.sourceButton.clicked.connect(self.__showSource) 272 self.lvvSourceButton.clicked.connect(self.__showSource)
258 self.stackComboBox.currentIndexChanged[int].connect(self.__frameSelected) 273 self.lvvStackComboBox.currentIndexChanged[int].connect(self.__frameSelected)
259 self.setLocalsFilterButton.clicked.connect(self.setLocalsFilter) 274 self.setLocalsFilterButton.clicked.connect(self.setLocalsFilter)
260 self.localsFilterEdit.returnPressed.connect(self.setLocalsFilter) 275 self.localsFilterEdit.returnPressed.connect(self.setLocalsFilter)
261 276
262 self.preferencesChanged.connect(self.handlePreferencesChanged) 277 self.preferencesChanged.connect(self.handlePreferencesChanged)
263 self.preferencesChanged.connect(self.globalsViewer.preferencesChanged) 278 self.preferencesChanged.connect(self.globalsViewer.preferencesChanged)
264 self.preferencesChanged.connect(self.localsViewer.preferencesChanged) 279 self.preferencesChanged.connect(self.localsViewer.preferencesChanged)
280
281 # interconnect the stack selectors of the variable viewers
282 self.gvvStackComboBox.setModel(self.lvvStackComboBox.model())
283 self.lvvStackComboBox.currentIndexChanged[int].connect(
284 self.gvvStackComboBox.setCurrentIndex
285 )
286 self.gvvStackComboBox.currentIndexChanged[int].connect(
287 self.lvvStackComboBox.setCurrentIndex
288 )
265 289
266 # add the call stack viewer 290 # add the call stack viewer
267 self.callStackViewer = CallStackViewer(self.debugServer) 291 self.callStackViewer = CallStackViewer(self.debugServer)
268 index = self.__tabWidget.addTab( 292 index = self.__tabWidget.addTab(
269 self.callStackViewer, EricPixmapCache.getIcon("callStack"), "" 293 self.callStackViewer, EricPixmapCache.getIcon("callStack"), ""
331 355
332 self.currentStack = None 356 self.currentStack = None
333 self.framenr = 0 357 self.framenr = 0
334 358
335 self.__autoViewSource = Preferences.getDebugger("AutoViewSourceCode") 359 self.__autoViewSource = Preferences.getDebugger("AutoViewSourceCode")
336 self.sourceButton.setVisible(not self.__autoViewSource) 360 self.lvvSourceButton.setVisible(not self.__autoViewSource)
361 self.gvvSourceButton.setVisible(not self.__autoViewSource)
337 362
338 # connect some debug server signals 363 # connect some debug server signals
339 self.debugServer.clientStack.connect(self.handleClientStack) 364 self.debugServer.clientStack.connect(self.handleClientStack)
340 self.debugServer.clientThreadList.connect(self.__addThreadList) 365 self.debugServer.clientThreadList.connect(self.__addThreadList)
341 self.debugServer.clientDebuggerId.connect(self.__clientDebuggerId) 366 self.debugServer.clientDebuggerId.connect(self.__clientDebuggerId)
351 self.exceptionLogger.debuggingStarted 376 self.exceptionLogger.debuggingStarted
352 ) 377 )
353 378
354 self.debugServer.clientLine.connect(self.breakpointViewer.highlightBreakpoint) 379 self.debugServer.clientLine.connect(self.breakpointViewer.highlightBreakpoint)
355 380
381 def __clearStackComboBox(self, comboBox):
382 """
383 Private method to clear the given stack combo box.
384
385 @param comboBox reference to the combo box to be cleared
386 @type QComboBox
387 """
388 block = comboBox.blockSignals(True)
389 comboBox.clear()
390 comboBox.blockSignals(block)
391
356 def handlePreferencesChanged(self): 392 def handlePreferencesChanged(self):
357 """ 393 """
358 Public slot to handle the preferencesChanged signal. 394 Public slot to handle the preferencesChanged signal.
359 """ 395 """
360 self.__autoViewSource = Preferences.getDebugger("AutoViewSourceCode") 396 self.__autoViewSource = Preferences.getDebugger("AutoViewSourceCode")
361 self.sourceButton.setVisible(not self.__autoViewSource) 397 self.lvvSourceButton.setVisible(not self.__autoViewSource)
398 self.gvvSourceButton.setVisible(not self.__autoViewSource)
362 399
363 def setDebugger(self, debugUI): 400 def setDebugger(self, debugUI):
364 """ 401 """
365 Public method to set a reference to the Debug UI. 402 Public method to set a reference to the Debug UI.
366 403
384 """ 421 """
385 self.globalsViewer.handleResetUI() 422 self.globalsViewer.handleResetUI()
386 self.localsViewer.handleResetUI() 423 self.localsViewer.handleResetUI()
387 self.setGlobalsFilter() 424 self.setGlobalsFilter()
388 self.setLocalsFilter() 425 self.setLocalsFilter()
389 self.sourceButton.setEnabled(False) 426 self.lvvSourceButton.setEnabled(False)
427 self.gvvSourceButton.setEnabled(False)
390 self.currentStack = None 428 self.currentStack = None
391 self.stackComboBox.clear() 429 self.__clearStackComboBox(self.lvvStackComboBox)
392 self.__tabWidget.setCurrentWidget(self.gvvWidget) 430 self.__tabWidget.setCurrentWidget(self.gvvWidget)
393 self.breakpointViewer.handleResetUI() 431 self.breakpointViewer.handleResetUI()
394 if fullReset: 432 if fullReset:
395 self.__debuggersList.clear() 433 self.__debuggersList.clear()
396 self.disassemblyViewer.clear() 434 self.disassemblyViewer.clear()
481 @type list of tuples of (str, str, str, str) 519 @type list of tuples of (str, str, str, str)
482 @param debuggerId ID of the debugger backend 520 @param debuggerId ID of the debugger backend
483 @type str 521 @type str
484 """ 522 """
485 if debuggerId == self.getSelectedDebuggerId(): 523 if debuggerId == self.getSelectedDebuggerId():
486 block = self.stackComboBox.blockSignals(True)
487 self.framenr = 0 524 self.framenr = 0
488 self.stackComboBox.clear() 525 self.lvvSourceButton.setEnabled(len(stack) > 0)
526 self.gvvSourceButton.setEnabled(len(stack) > 0)
489 self.currentStack = stack 527 self.currentStack = stack
490 self.sourceButton.setEnabled(len(stack) > 0) 528
529 block = self.lvvStackComboBox.blockSignals(True)
530 self.lvvStackComboBox.clear()
491 for s in stack: 531 for s in stack:
492 # just show base filename to make it readable 532 # just show base filename to make it readable
493 s = (os.path.basename(s[0]), s[1], s[2]) 533 s = (os.path.basename(s[0]), s[1], s[2])
494 self.stackComboBox.addItem("{0}:{1}:{2}".format(*s)) 534 self.lvvStackComboBox.addItem("{0}:{1}:{2}".format(*s))
495 self.stackComboBox.blockSignals(block) 535 self.lvvStackComboBox.blockSignals(block)
496 536
497 def __clientLine(self, fn, line, debuggerId, threadName): 537 def __clientLine(self, fn, line, debuggerId, threadName):
498 """ 538 """
499 Private method to handle a change to the current line. 539 Private method to handle a change to the current line.
500 540
533 # the current client has exited 573 # the current client has exited
534 self.globalsViewer.handleResetUI() 574 self.globalsViewer.handleResetUI()
535 self.localsViewer.handleResetUI() 575 self.localsViewer.handleResetUI()
536 self.setGlobalsFilter() 576 self.setGlobalsFilter()
537 self.setLocalsFilter() 577 self.setLocalsFilter()
538 self.sourceButton.setEnabled(False) 578 self.lvvSourceButton.setEnabled(False)
579 self.gvvSourceButton.setEnabled(False)
539 self.currentStack = None 580 self.currentStack = None
540 self.stackComboBox.clear() 581 self.__clearStackComboBox(self.lvvStackComboBox)
541 582
542 self.__removeDebugger(debuggerId) 583 self.__removeDebugger(debuggerId)
543 584
544 def __clientSyntaxError( 585 def __clientSyntaxError(
545 self, message, filename, lineNo, characterNo, debuggerId, threadName 586 self, message, filename, lineNo, characterNo, debuggerId, threadName
598 def __showSource(self): 639 def __showSource(self):
599 """ 640 """
600 Private slot to handle the source button press to show the selected 641 Private slot to handle the source button press to show the selected
601 file. 642 file.
602 """ 643 """
603 index = self.stackComboBox.currentIndex() 644 index = self.lvvStackComboBox.currentIndex()
604 if index > -1 and self.currentStack: 645 if index > -1 and self.currentStack:
605 s = self.currentStack[index] 646 s = self.currentStack[index]
606 self.sourceFile.emit(s[0], int(s[1])) 647 self.sourceFile.emit(s[0], int(s[1]))
607 648
608 def __frameSelected(self, frmnr): 649 def __frameSelected(self, frmnr):
705 746
706 @param frameNo frame number (index) of the selected entry 747 @param frameNo frame number (index) of the selected entry
707 @type int 748 @type int
708 """ 749 """
709 if frameNo >= 0: 750 if frameNo >= 0:
710 self.stackComboBox.setCurrentIndex(frameNo) 751 self.lvvStackComboBox.setCurrentIndex(frameNo)
711 752
712 def __debuggerSelected(self, current, previous): 753 def __debuggerSelected(self, current, previous):
713 """ 754 """
714 Private slot to handle the selection of a debugger backend in the 755 Private slot to handle the selection of a debugger backend in the
715 debuggers list. 756 debuggers list.
724 # it is a debugger item 765 # it is a debugger item
725 debuggerId = current.text(0) 766 debuggerId = current.text(0)
726 self.globalsViewer.handleResetUI() 767 self.globalsViewer.handleResetUI()
727 self.localsViewer.handleResetUI() 768 self.localsViewer.handleResetUI()
728 self.currentStack = None 769 self.currentStack = None
729 self.stackComboBox.clear() 770 self.__clearStackComboBox(self.lvvStackComboBox)
730 self.callStackViewer.clear() 771 self.callStackViewer.clear()
731 772
732 self.debugServer.remoteSetThread(debuggerId, -1) 773 self.debugServer.remoteSetThread(debuggerId, -1)
733 self.__showSource() 774 self.__showSource()
734 else: 775 else:

eric ide

mercurial