src/eric7/Preferences/ConfigurationPages/DebuggerGeneralPage.py

branch
eric7
changeset 9521
a663a8be64da
parent 9519
d7ab0653bc63
child 9522
f46abb15aab2
diff -r e12589f1d408 -r a663a8be64da src/eric7/Preferences/ConfigurationPages/DebuggerGeneralPage.py
--- a/src/eric7/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Tue Nov 22 16:33:30 2022 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Wed Nov 23 10:48:46 2022 +0100
@@ -7,8 +7,6 @@
 Module implementing the Debugger General configuration page.
 """
 
-import re
-
 from PyQt6.QtCore import QAbstractItemModel, QModelIndex, Qt, pyqtSlot
 from PyQt6.QtGui import QBrush, QColor
 from PyQt6.QtNetwork import QAbstractSocket, QHostAddress, QNetworkInterface
@@ -58,43 +56,66 @@
             self.dbgTranslationLocalEdit
         )
 
-        # set initial values
-        interfaces = []
+        self.interfaceSelectorComboBox.addItem(
+            self.tr("All Network Interfaces (IPv4 & IPv6)"),
+            "all",
+        )
+        self.interfaceSelectorComboBox.addItem(
+            self.tr("All Network Interfaces (IPv4"),
+            "allv4",
+        )
+        self.interfaceSelectorComboBox.addItem(
+            self.tr("All Network Interfaces (IPv6)"),
+            "allv6",
+        )
+        self.interfaceSelectorComboBox.addItem(
+            self.tr("Localhost (IPv4)"),
+            "localv4",
+        )
+        self.interfaceSelectorComboBox.addItem(
+            self.tr("Localhost (IPv6)"),
+            "localv6",
+        )
+        self.interfaceSelectorComboBox.addItem(
+            self.tr("Selected Interface"),
+            "selected",
+        )
+
         networkInterfaces = QNetworkInterface.allInterfaces()
         for networkInterface in networkInterfaces:
             addressEntries = networkInterface.addressEntries()
             if len(addressEntries) > 0:
                 for addressEntry in addressEntries:
-                    interfaces.append(
-                        "{0} ({1})".format(
-                            networkInterface.humanReadableName(),
-                            addressEntry.ip().toString(),
-                        )
+                    ip = addressEntry.ip().toString()
+                    self.interfacesCombo.addItem(
+                        "{0} ({1})".format(networkInterface.humanReadableName(), ip), ip
                     )
-        self.interfacesCombo.addItems(interfaces)
+
+        # set initial values
         interface = Preferences.getDebugger("NetworkInterface")
-        # TODO: change config 'all' to 'allv4'
-        # TODO: change radiobutton selection to combo box and include
-        #       - Localhost (IPv4)    (localv4)
-        #       - LocalHost (IPv6)    (localv6)
-        #       - Any (IPv4)          (allv4)
-        #       - Any (IPv6)          (allv6)
-        #       - Any (IPv4 and IPv6) (all)
-        #       - Selected Interface
+        selectorIndex = self.interfaceSelectorComboBox.findData(interface)
+        if selectorIndex != -1:
+            self.interfaceSelectorComboBox.setCurrentIndex(selectorIndex)
+        else:
+            # Interface given by IP address
+            self.interfaceSelectorComboBox.setCurrentIndex(
+                self.interfaceSelectorComboBox.count() - 1
+            )
+            self.interfacesCombo.setCurrentIndex(
+                self.interfacesCombo.findData(interface)
+            )
+        self.on_interfaceSelectorComboBox_currentIndexChanged(
+            self.interfacesCombo.currentIndex()
+        )
+        self.serverPortStaticGroup.setChecked(
+            Preferences.getDebugger("NetworkPortFixed")
+        )
+        self.serverPortIncrementCheckBox.setChecked(
+            Preferences.getDebugger("NetworkPortIncrement")
+        )
+        self.serverPortSpinBox.setValue(Preferences.getDebugger("NetworkPort"))
         # TODO: allow to listen on a specific port with auto-increment if port is in
         #       use already
-        if interface == "all":
-            self.allInterfacesButton.setChecked(True)
-        elif interface == "allv6":
-            self.all6InterfacesButton.setChecked(True)
-        else:
-            self.selectedInterfaceButton.setChecked(True)
-            index = -1
-            for i in range(len(interfaces)):
-                if re.fullmatch(".*{0}.*".format(interface), interfaces[i]):
-                    index = i
-                    break
-            self.interfacesCombo.setCurrentIndex(index)
 
         self.allowedHostsList.addItems(Preferences.getDebugger("AllowedHosts"))
 
@@ -193,17 +214,17 @@
             "PassiveDbgType", self.passiveDbgBackendCombo.currentText()
         )
 
-        if self.allInterfacesButton.isChecked():
-            Preferences.setDebugger("NetworkInterface", "all")
-        elif self.all6InterfacesButton.isChecked():
-            Preferences.setDebugger("NetworkInterface", "allv6")
-        else:
-            interface = self.interfacesCombo.currentText()
-            interface = interface.split("(")[1].split(")")[0]
-            if not interface:
-                Preferences.setDebugger("NetworkInterface", "all")
-            else:
-                Preferences.setDebugger("NetworkInterface", interface)
+        interface = self.interfaceSelectorComboBox.currentData()
+        if interface == "selected":
+            interface = self.interfacesCombo.currentData()
+        Preferences.setDebugger("NetworkInterface", interface)
+        Preferences.setDebugger(
+            "NetworkPortFixed", self.serverPortStaticGroup.isChecked()
+        )
+        Preferences.setDebugger(
+            "NetworkPortIncrement", self.serverPortIncrementCheckBox.isChecked()
+        )
+        Preferences.setDebugger("NetworkPort", self.serverPortSpinBox.value())
 
         allowedHosts = []
         for row in range(self.allowedHostsList.count()):
@@ -255,6 +276,18 @@
             "AutoViewSourceCode", self.autoViewSourcecodeCheckBox.isChecked()
         )
 
+    @pyqtSlot(int)
+    def on_interfaceSelectorComboBox_currentIndexChanged(self, index):
+        """
+        Private slot to handle the selection of a network interface type.
+
+        @param index index of the selected entry
+        @type int
+        """
+        self.interfacesCombo.setEnabled(
+            index == self.interfaceSelectorComboBox.count() - 1
+        )
+
     def on_allowedHostsList_currentItemChanged(self, current, previous):
         """
         Private method set the state of the edit and delete button.

eric ide

mercurial