src/eric7/Debugger/DebugViewer.py

branch
eric7
changeset 9532
39a1ebff6b4e
parent 9482
a2bc06a54d9d
child 9541
69167c94995f
--- 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)

eric ide

mercurial