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.