diff -r 155b2646799a -r 39a1ebff6b4e src/eric7/Debugger/DebugViewer.py --- a/src/eric7/Debugger/DebugViewer.py Thu Nov 24 16:21:10 2022 +0100 +++ b/src/eric7/Debugger/DebugViewer.py Thu Nov 24 19:42:13 2022 +0100 @@ -137,6 +137,20 @@ self.gvvWidgetVLayout.setSpacing(3) self.gvvWidget.setLayout(self.gvvWidgetVLayout) + self.gvvWidgetHLayout1 = QHBoxLayout() + self.gvvWidgetHLayout1.setContentsMargins(3, 3, 3, 3) + + self.gvvStackComboBox = QComboBox(self.gvvWidget) + self.gvvStackComboBox.setSizePolicy( + QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed + ) + self.gvvWidgetHLayout1.addWidget(self.gvvStackComboBox) + + self.gvvSourceButton = QPushButton(self.tr("Source"), self.gvvWidget) + self.gvvWidgetHLayout1.addWidget(self.gvvSourceButton) + self.gvvSourceButton.setEnabled(False) + self.gvvWidgetVLayout.addLayout(self.gvvWidgetHLayout1) + self.globalsViewer = VariablesViewer(self, True, self.gvvWidget) self.gvvWidgetVLayout.addWidget(self.globalsViewer) @@ -184,6 +198,7 @@ index, self.tr("Shows the list of global variables and their values.") ) + self.gvvSourceButton.clicked.connect(self.__showSource) self.setGlobalsFilterButton.clicked.connect(self.setGlobalsFilter) self.globalsFilterEdit.returnPressed.connect(self.setGlobalsFilter) @@ -197,15 +212,15 @@ self.lvvWidgetHLayout1 = QHBoxLayout() self.lvvWidgetHLayout1.setContentsMargins(3, 3, 3, 3) - self.stackComboBox = QComboBox(self.lvvWidget) - self.stackComboBox.setSizePolicy( + self.lvvStackComboBox = QComboBox(self.lvvWidget) + self.lvvStackComboBox.setSizePolicy( QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed ) - self.lvvWidgetHLayout1.addWidget(self.stackComboBox) + self.lvvWidgetHLayout1.addWidget(self.lvvStackComboBox) - self.sourceButton = QPushButton(self.tr("Source"), self.lvvWidget) - self.lvvWidgetHLayout1.addWidget(self.sourceButton) - self.sourceButton.setEnabled(False) + self.lvvSourceButton = QPushButton(self.tr("Source"), self.lvvWidget) + self.lvvWidgetHLayout1.addWidget(self.lvvSourceButton) + self.lvvSourceButton.setEnabled(False) self.lvvWidgetVLayout.addLayout(self.lvvWidgetHLayout1) self.localsViewer = VariablesViewer(self, False, self.lvvWidget) @@ -254,8 +269,8 @@ index, self.tr("Shows the list of local variables and their values.") ) - self.sourceButton.clicked.connect(self.__showSource) - self.stackComboBox.currentIndexChanged[int].connect(self.__frameSelected) + self.lvvSourceButton.clicked.connect(self.__showSource) + self.lvvStackComboBox.currentIndexChanged[int].connect(self.__frameSelected) self.setLocalsFilterButton.clicked.connect(self.setLocalsFilter) self.localsFilterEdit.returnPressed.connect(self.setLocalsFilter) @@ -263,6 +278,15 @@ self.preferencesChanged.connect(self.globalsViewer.preferencesChanged) self.preferencesChanged.connect(self.localsViewer.preferencesChanged) + # interconnect the stack selectors of the variable viewers + self.gvvStackComboBox.setModel(self.lvvStackComboBox.model()) + self.lvvStackComboBox.currentIndexChanged[int].connect( + self.gvvStackComboBox.setCurrentIndex + ) + self.gvvStackComboBox.currentIndexChanged[int].connect( + self.lvvStackComboBox.setCurrentIndex + ) + # add the call stack viewer self.callStackViewer = CallStackViewer(self.debugServer) index = self.__tabWidget.addTab( @@ -333,7 +357,8 @@ self.framenr = 0 self.__autoViewSource = Preferences.getDebugger("AutoViewSourceCode") - self.sourceButton.setVisible(not self.__autoViewSource) + self.lvvSourceButton.setVisible(not self.__autoViewSource) + self.gvvSourceButton.setVisible(not self.__autoViewSource) # connect some debug server signals self.debugServer.clientStack.connect(self.handleClientStack) @@ -353,12 +378,24 @@ self.debugServer.clientLine.connect(self.breakpointViewer.highlightBreakpoint) + def __clearStackComboBox(self, comboBox): + """ + Private method to clear the given stack combo box. + + @param comboBox reference to the combo box to be cleared + @type QComboBox + """ + block = comboBox.blockSignals(True) + comboBox.clear() + comboBox.blockSignals(block) + def handlePreferencesChanged(self): """ Public slot to handle the preferencesChanged signal. """ self.__autoViewSource = Preferences.getDebugger("AutoViewSourceCode") - self.sourceButton.setVisible(not self.__autoViewSource) + self.lvvSourceButton.setVisible(not self.__autoViewSource) + self.gvvSourceButton.setVisible(not self.__autoViewSource) def setDebugger(self, debugUI): """ @@ -386,9 +423,10 @@ self.localsViewer.handleResetUI() self.setGlobalsFilter() self.setLocalsFilter() - self.sourceButton.setEnabled(False) + self.lvvSourceButton.setEnabled(False) + self.gvvSourceButton.setEnabled(False) self.currentStack = None - self.stackComboBox.clear() + self.__clearStackComboBox(self.lvvStackComboBox) self.__tabWidget.setCurrentWidget(self.gvvWidget) self.breakpointViewer.handleResetUI() if fullReset: @@ -483,16 +521,18 @@ @type str """ if debuggerId == self.getSelectedDebuggerId(): - block = self.stackComboBox.blockSignals(True) self.framenr = 0 - self.stackComboBox.clear() + self.lvvSourceButton.setEnabled(len(stack) > 0) + self.gvvSourceButton.setEnabled(len(stack) > 0) self.currentStack = stack - self.sourceButton.setEnabled(len(stack) > 0) + + block = self.lvvStackComboBox.blockSignals(True) + self.lvvStackComboBox.clear() for s in stack: # just show base filename to make it readable s = (os.path.basename(s[0]), s[1], s[2]) - self.stackComboBox.addItem("{0}:{1}:{2}".format(*s)) - self.stackComboBox.blockSignals(block) + self.lvvStackComboBox.addItem("{0}:{1}:{2}".format(*s)) + self.lvvStackComboBox.blockSignals(block) def __clientLine(self, fn, line, debuggerId, threadName): """ @@ -535,9 +575,10 @@ self.localsViewer.handleResetUI() self.setGlobalsFilter() self.setLocalsFilter() - self.sourceButton.setEnabled(False) + self.lvvSourceButton.setEnabled(False) + self.gvvSourceButton.setEnabled(False) self.currentStack = None - self.stackComboBox.clear() + self.__clearStackComboBox(self.lvvStackComboBox) self.__removeDebugger(debuggerId) @@ -600,7 +641,7 @@ Private slot to handle the source button press to show the selected file. """ - index = self.stackComboBox.currentIndex() + index = self.lvvStackComboBox.currentIndex() if index > -1 and self.currentStack: s = self.currentStack[index] self.sourceFile.emit(s[0], int(s[1])) @@ -707,7 +748,7 @@ @type int """ if frameNo >= 0: - self.stackComboBox.setCurrentIndex(frameNo) + self.lvvStackComboBox.setCurrentIndex(frameNo) def __debuggerSelected(self, current, previous): """ @@ -726,7 +767,7 @@ self.globalsViewer.handleResetUI() self.localsViewer.handleResetUI() self.currentStack = None - self.stackComboBox.clear() + self.__clearStackComboBox(self.lvvStackComboBox) self.callStackViewer.clear() self.debugServer.remoteSetThread(debuggerId, -1)