--- a/eric6/Debugger/DebugViewer.py Mon Jan 27 19:50:40 2020 +0100 +++ b/eric6/Debugger/DebugViewer.py Tue Jan 28 19:41:51 2020 +0100 @@ -239,6 +239,18 @@ self.__threadList.currentItemChanged.connect(self.__threadSelected) + # add the debugger viewer + self.__debuggersLayout = QHBoxLayout(self) + self.__debuggersLayout.addWidget(QLabel(self.tr("Debuggers:"))) + self.__debuggersCombo = QComboBox(self) + self.__debuggersCombo.setSizePolicy( + QSizePolicy.Expanding, QSizePolicy.Fixed) + self.__debuggersLayout.addWidget(self.__debuggersCombo) + self.__mainLayout.addLayout(self.__debuggersLayout) + + self.__debuggersCombo.currentTextChanged.connect( + self.__debuggerSelected) + self.__mainLayout.setStretchFactor(self.__tabWidget, 5) self.__mainLayout.setStretchFactor(self.__threadList, 1) @@ -281,6 +293,7 @@ self.__threadList.clear() self.__tabWidget.setCurrentWidget(self.glvWidget) self.breakpointViewer.handleResetUI() + self.__debuggersCombo.clear() def initCallStackViewer(self, projectMode): """ @@ -396,12 +409,14 @@ @param frmnr frame number (0 is the current frame) (int) """ - self.framenr = frmnr - if self.debugServer.isDebugging(): - self.debugServer.remoteClientVariables(0, self.localsFilter, frmnr) - - if self.__autoViewSource: - self.__showSource() + if frmnr >= 0: + self.framenr = frmnr + if self.debugServer.isDebugging(): + self.debugServer.remoteClientVariables( + 0, self.localsFilter, frmnr) + + if self.__autoViewSource: + self.__showSource() def setGlobalsFilter(self): """ @@ -499,3 +514,47 @@ """ if frameNo >= 0: self.stackComboBox.setCurrentIndex(frameNo) + + def __debuggerSelected(self, debuggerId): + """ + Private slot to handle the selection of a debugger backend ID. + + @param debuggerId ID of the selected debugger backend + @type str + """ + if debuggerId: + self.globalsViewer.handleResetUI() + self.localsViewer.handleResetUI() + self.currentStack = None + self.stackComboBox.clear() + self.__threadList.clear() + + self.debugUI.getDebuggerData(debuggerId) + + def showDebuggersList(self, debuggerIds): + """ + Public slot to receive the list of debugger backend IDs. + + @param debuggerIds list of debugger backend IDs + @type list of str + """ + block = self.__debuggersCombo.blockSignals(True) + + currentDebuggerId = self.__debuggersCombo.currentText() + self.__debuggersCombo.clear() + self.__debuggersCombo.addItems(debuggerIds) + if currentDebuggerId: + self.__debuggersCombo.setCurrentText(currentDebuggerId) + else: + self.__debuggersCombo.setCurrentIndex(0) + + self.__debuggersCombo.blockSignals(block) + + def getSelectedDebuggerId(self): + """ + Public method to get the currently selected debugger ID. + + @return selected debugger ID + @rtype str + """ + return self.__debuggersCombo.currentText()