Preferences/ConfigurationPages/DebuggerGeneralPage.py

changeset 0
de9c2efb9d02
child 6
52e8c820d0dd
diff -r 000000000000 -r de9c2efb9d02 Preferences/ConfigurationPages/DebuggerGeneralPage.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,264 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2006 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Debugger General configuration page.
+"""
+
+import socket
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+from PyQt4.QtNetwork import *
+
+from E4Gui.E4Application import e4App
+
+from E4Gui.E4Completers import E4FileCompleter, E4DirCompleter
+
+from ConfigurationPageBase import ConfigurationPageBase
+from Ui_DebuggerGeneralPage import Ui_DebuggerGeneralPage
+
+import Preferences
+import Utilities
+
+class DebuggerGeneralPage(ConfigurationPageBase, Ui_DebuggerGeneralPage):
+    """
+    Class implementing the Debugger General configuration page.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        ConfigurationPageBase.__init__(self)
+        self.setupUi(self)
+        self.setObjectName("DebuggerGeneralPage")
+        
+        t = self.execLineEdit.whatsThis()
+        if t:
+            t += Utilities.getPercentReplacementHelp()
+            self.execLineEdit.setWhatsThis(t)
+        
+        try:
+            backends = e4App().getObject("DebugServer").getSupportedLanguages()
+            for backend in sorted(backends):
+                self.passiveDbgBackendCombo.addItem(backend)
+        except KeyError:
+            self.passiveDbgGroup.setEnabled(False)
+        
+        t = self.consoleDbgEdit.whatsThis()
+        if t:
+            t += Utilities.getPercentReplacementHelp()
+            self.consoleDbgEdit.setWhatsThis(t)
+        
+        self.consoleDbgCompleter = E4FileCompleter(self.consoleDbgEdit)
+        self.dbgTranslationLocalCompleter = E4DirCompleter(self.dbgTranslationLocalEdit)
+        
+        # set initial values
+        interfaces = []
+        networkInterfaces = QNetworkInterface.allInterfaces()
+        for networkInterface in networkInterfaces:
+            addressEntries = networkInterface.addressEntries()
+            if len(addressEntries) > 0:
+                for addressEntry in addressEntries:
+                    if ":" in addressEntry.ip().toString() and not socket.has_ipv6:
+                        continue    # IPv6 not supported by Python
+                    interfaces.append("{0} ({1})"\
+                                      .format(networkInterface.name(), 
+                                              addressEntry.ip().toString()))
+        self.interfacesCombo.addItems(interfaces)
+        interface = Preferences.getDebugger("NetworkInterface")
+        if not socket.has_ipv6:
+            # IPv6 not supported by Python
+            self.all6InterfacesButton.setEnabled(False)
+            if interface == "allv6":
+                interface = "all"
+        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 QRegExp(".*{0}.*".format(interface)).exactMatch(interfaces[i]):
+                    index = i
+                    break
+            self.interfacesCombo.setCurrentIndex(index)
+        
+        self.allowedHostsList.addItems(\
+            Preferences.getDebugger("AllowedHosts"))
+        
+        self.remoteCheckBox.setChecked(\
+            Preferences.getDebugger("RemoteDbgEnabled"))
+        self.hostLineEdit.setText(\
+            Preferences.getDebugger("RemoteHost"))
+        self.execLineEdit.setText(\
+            Preferences.getDebugger("RemoteExecution"))
+        
+        if self.passiveDbgGroup.isEnabled():
+            self.passiveDbgCheckBox.setChecked(\
+                Preferences.getDebugger("PassiveDbgEnabled"))
+            self.passiveDbgPortSpinBox.setValue(\
+                Preferences.getDebugger("PassiveDbgPort"))
+            index = self.passiveDbgBackendCombo.findText(
+                Preferences.getDebugger("PassiveDbgType"))
+            if index == -1:
+                index = 0
+            self.passiveDbgBackendCombo.setCurrentIndex(index)
+        
+        self.debugEnvironReplaceCheckBox.setChecked(\
+            Preferences.getDebugger("DebugEnvironmentReplace"))
+        self.debugEnvironEdit.setText(\
+            Preferences.getDebugger("DebugEnvironment"))
+        self.automaticResetCheckBox.setChecked(\
+            Preferences.getDebugger("AutomaticReset"))
+        self.debugAutoSaveScriptsCheckBox.setChecked(\
+            Preferences.getDebugger("Autosave"))
+        self.consoleDbgCheckBox.setChecked(\
+            Preferences.getDebugger("ConsoleDbgEnabled"))
+        self.consoleDbgEdit.setText(\
+            Preferences.getDebugger("ConsoleDbgCommand"))
+        self.dbgPathTranslationCheckBox.setChecked(\
+            Preferences.getDebugger("PathTranslation"))
+        self.dbgTranslationRemoteEdit.setText(\
+            Preferences.getDebugger("PathTranslationRemote"))
+        self.dbgTranslationLocalEdit.setText(\
+            Preferences.getDebugger("PathTranslationLocal"))
+        self.debugThreeStateBreakPoint.setChecked(\
+            Preferences.getDebugger("ThreeStateBreakPoints"))
+        self.dontShowClientExitCheckBox.setChecked(\
+            Preferences.getDebugger("SuppressClientExit"))
+        self.exceptionBreakCheckBox.setChecked(\
+            Preferences.getDebugger("BreakAlways"))
+        
+    def save(self):
+        """
+        Public slot to save the Debugger General (1) configuration.
+        """
+        Preferences.setDebugger("RemoteDbgEnabled", 
+            int(self.remoteCheckBox.isChecked()))
+        Preferences.setDebugger("RemoteHost", 
+            self.hostLineEdit.text())
+        Preferences.setDebugger("RemoteExecution", 
+            self.execLineEdit.text())
+        
+        Preferences.setDebugger("PassiveDbgEnabled", 
+            int(self.passiveDbgCheckBox.isChecked()))
+        Preferences.setDebugger("PassiveDbgPort", 
+            self.passiveDbgPortSpinBox.value())
+        Preferences.setDebugger("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)
+        
+        allowedHosts = []
+        for row in range(self.allowedHostsList.count()):
+            allowedHosts.append(self.allowedHostsList.item(row).text())
+        Preferences.setDebugger("AllowedHosts", allowedHosts)
+        
+        Preferences.setDebugger("DebugEnvironmentReplace", 
+            int(self.debugEnvironReplaceCheckBox.isChecked()))
+        Preferences.setDebugger("DebugEnvironment", 
+            self.debugEnvironEdit.text())
+        Preferences.setDebugger("AutomaticReset", 
+            int(self.automaticResetCheckBox.isChecked()))
+        Preferences.setDebugger("Autosave", 
+            int(self.debugAutoSaveScriptsCheckBox.isChecked()))
+        Preferences.setDebugger("ConsoleDbgEnabled", 
+            int(self.consoleDbgCheckBox.isChecked()))
+        Preferences.setDebugger("ConsoleDbgCommand", 
+            self.consoleDbgEdit.text())
+        Preferences.setDebugger("PathTranslation", 
+            int(self.dbgPathTranslationCheckBox.isChecked()))
+        Preferences.setDebugger("PathTranslationRemote",
+            unicode(self.dbgTranslationRemoteEdit.text()))
+        Preferences.setDebugger("PathTranslationLocal",
+            unicode(self.dbgTranslationLocalEdit.text()))
+        Preferences.setDebugger("ThreeStateBreakPoints",
+            int(self.debugThreeStateBreakPoint.isChecked()))
+        Preferences.setDebugger("SuppressClientExit",
+            int(self.dontShowClientExitCheckBox.isChecked()))
+        Preferences.setDebugger("BreakAlways",
+            int(self.exceptionBreakCheckBox.isChecked()))
+        
+    def on_allowedHostsList_currentItemChanged(self, current, previous):
+        """
+        Private method set the state of the edit and delete button.
+        
+        @param current new current item (QListWidgetItem)
+        @param previous previous current item (QListWidgetItem)
+        """
+        self.editAllowedHostButton.setEnabled(current is not None)
+        self.deleteAllowedHostButton.setEnabled(current is not None)
+        
+    @pyqtSlot()
+    def on_addAllowedHostButton_clicked(self):
+        """
+        Private slot called to add a new allowed host.
+        """
+        allowedHost, ok = QInputDialog.getText(\
+            None,
+            self.trUtf8("Add allowed host"),
+            self.trUtf8("Enter the IP address of an allowed host"),
+            QLineEdit.Normal)
+        if ok and allowedHost:
+            if QHostAddress(allowedHost).protocol() in \
+               [QAbstractSocket.IPv4Protocol, QAbstractSocket.IPv6Protocol]:
+                self.allowedHostsList.addItem(allowedHost)
+            else:
+                QMessageBox.critical(None,
+                    self.trUtf8("Add allowed host"),
+                    self.trUtf8("""<p>The entered address <b>{0}</b> is not"""
+                        """ a valid IP v4 or IP v6 address. Aborting...</p>""")\
+                        .format(allowedHost))
+        
+    @pyqtSlot()
+    def on_deleteAllowedHostButton_clicked(self):
+        """
+        Private slot called to delete an allowed host.
+        """
+        self.allowedHostsList.takeItem(self.allowedHostsList.currentRow())
+        
+    @pyqtSlot()
+    def on_editAllowedHostButton_clicked(self):
+        """
+        Private slot called to edit an allowed host.
+        """
+        allowedHost = self.allowedHostsList.currentItem().text()
+        allowedHost, ok = QInputDialog.getText(\
+            None,
+            self.trUtf8("Edit allowed host"),
+            self.trUtf8("Enter the IP address of an allowed host"),
+            QLineEdit.Normal,
+            allowedHost)
+        if ok and allowedHost:
+            if QHostAddress(allowedHost).protocol() in \
+               [QAbstractSocket.IPv4Protocol, QAbstractSocket.IPv6Protocol]:
+                self.allowedHostsList.currentItem().setText(allowedHost)
+            else:
+                QMessageBox.critical(None,
+                    self.trUtf8("Edit allowed host"),
+                    self.trUtf8("""<p>The entered address <b>{0}</b> is not"""
+                        """ a valid IP v4 or IP v6 address. Aborting...</p>""")\
+                        .format(allowedHost))
+    
+def create(dlg):
+    """
+    Module function to create the configuration page.
+    
+    @param dlg reference to the configuration dialog
+    """
+    page = DebuggerGeneralPage()
+    return page

eric ide

mercurial