eric7/Project/DebuggerPropertiesDialog.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8314
e3642a6a1e71
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Project/DebuggerPropertiesDialog.py	Sat May 15 18:45:04 2021 +0200
@@ -0,0 +1,223 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2005 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog for entering project specific debugger settings.
+"""
+
+import os
+
+from PyQt5.QtCore import pyqtSlot
+from PyQt5.QtWidgets import QDialog, QComboBox
+
+from E5Gui.E5Completers import E5DirCompleter
+from E5Gui.E5PathPicker import E5PathPickerModes
+from E5Gui.E5Application import e5App
+
+from .Ui_DebuggerPropertiesDialog import Ui_DebuggerPropertiesDialog
+
+
+from eric6config import getConfig
+
+import Preferences
+import UI.PixmapCache
+
+
+class DebuggerPropertiesDialog(QDialog, Ui_DebuggerPropertiesDialog):
+    """
+    Class implementing a dialog for entering project specific debugger
+    settings.
+    """
+    def __init__(self, project, parent=None, name=None):
+        """
+        Constructor
+        
+        @param project reference to the project object
+        @param parent parent widget of this dialog (QWidget)
+        @param name name of this dialog (string)
+        """
+        super().__init__(parent)
+        if name:
+            self.setObjectName(name)
+        self.setupUi(self)
+        
+        debugClientsHistory = Preferences.getProject(
+            "DebugClientsHistory")
+        self.debugClientPicker.setMode(E5PathPickerModes.OpenFileMode)
+        self.debugClientPicker.setInsertPolicy(
+            QComboBox.InsertPolicy.InsertAtTop)
+        self.debugClientPicker.setSizeAdjustPolicy(
+            QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon)
+        self.debugClientPicker.setPathsList(debugClientsHistory)
+        self.debugClientClearHistoryButton.setIcon(
+            UI.PixmapCache.getIcon("editDelete"))
+        
+        venvManager = e5App().getObject("VirtualEnvManager")
+        
+        self.venvComboBox.addItem("")
+        self.venvComboBox.addItems(sorted(venvManager.getVirtualenvNames()))
+        
+        self.translationLocalCompleter = E5DirCompleter(
+            self.translationLocalEdit)
+        
+        self.project = project
+        
+        if self.project.debugProperties["VIRTUALENV"]:
+            venvIndex = max(0, self.venvComboBox.findText(
+                self.project.debugProperties["VIRTUALENV"]))
+        else:
+            if self.project.pdata["PROGLANGUAGE"] == "Python3":
+                venvName = Preferences.getDebugger("Python3VirtualEnv")
+            else:
+                venvName = ""
+            if not venvName:
+                venvName, _ = venvManager.getDefaultEnvironment()
+            if venvName:
+                venvIndex = max(0, self.venvComboBox.findText(venvName))
+            else:
+                venvIndex = 0
+        self.venvComboBox.setCurrentIndex(venvIndex)
+        if self.project.debugProperties["DEBUGCLIENT"]:
+            self.debugClientPicker.setText(
+                self.project.debugProperties["DEBUGCLIENT"],
+                toNative=False)
+        else:
+            if self.project.pdata["PROGLANGUAGE"] == "Python3":
+                debugClient = os.path.join(
+                    getConfig('ericDir'),
+                    "DebugClients", "Python", "DebugClient.py")
+            else:
+                debugClient = ""
+            self.debugClientPicker.setText(debugClient, toNative=False)
+        self.debugEnvironmentOverrideCheckBox.setChecked(
+            self.project.debugProperties["ENVIRONMENTOVERRIDE"])
+        self.debugEnvironmentEdit.setText(
+            self.project.debugProperties["ENVIRONMENTSTRING"])
+        self.remoteDebuggerGroup.setChecked(
+            self.project.debugProperties["REMOTEDEBUGGER"])
+        self.remoteHostEdit.setText(
+            self.project.debugProperties["REMOTEHOST"])
+        self.remoteCommandEdit.setText(
+            self.project.debugProperties["REMOTECOMMAND"])
+        self.pathTranslationGroup.setChecked(
+            self.project.debugProperties["PATHTRANSLATION"])
+        self.translationRemoteEdit.setText(
+            self.project.debugProperties["REMOTEPATH"])
+        self.translationLocalEdit.setText(
+            self.project.debugProperties["LOCALPATH"])
+        self.consoleDebuggerGroup.setChecked(
+            self.project.debugProperties["CONSOLEDEBUGGER"])
+        self.consoleCommandEdit.setText(
+            self.project.debugProperties["CONSOLECOMMAND"])
+        self.redirectCheckBox.setChecked(
+            self.project.debugProperties["REDIRECT"])
+        self.noEncodingCheckBox.setChecked(
+            self.project.debugProperties["NOENCODING"])
+        
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+
+    @pyqtSlot()
+    def on_debugClientPicker_aboutToShowPathPickerDialog(self):
+        """
+        Private slot to perform actions before the debug client selection
+        dialog is shown.
+        """
+        filters = self.project.getDebuggerFilters(
+            self.project.pdata["PROGLANGUAGE"])
+        filters += self.tr("All Files (*)")
+        self.debugClientPicker.setFilters(filters)
+
+    def storeData(self):
+        """
+        Public method to store the entered/modified data.
+        """
+        self.project.debugProperties["VIRTUALENV"] = (
+            self.venvComboBox.currentText()
+        )
+        
+        self.project.debugProperties["DEBUGCLIENT"] = (
+            self.debugClientPicker.text(toNative=False)
+        )
+        if not self.project.debugProperties["DEBUGCLIENT"]:
+            if self.project.pdata["PROGLANGUAGE"] == "Python3":
+                debugClient = os.path.join(
+                    getConfig('ericDir'),
+                    "DebugClients", "Python", "DebugClient.py")
+            else:
+                debugClient = ""
+            self.project.debugProperties["DEBUGCLIENT"] = debugClient
+        
+        self.project.debugProperties["ENVIRONMENTOVERRIDE"] = (
+            self.debugEnvironmentOverrideCheckBox.isChecked()
+        )
+        self.project.debugProperties["ENVIRONMENTSTRING"] = (
+            self.debugEnvironmentEdit.text()
+        )
+        self.project.debugProperties["REMOTEDEBUGGER"] = (
+            self.remoteDebuggerGroup.isChecked()
+        )
+        self.project.debugProperties["REMOTEHOST"] = (
+            self.remoteHostEdit.text()
+        )
+        self.project.debugProperties["REMOTECOMMAND"] = (
+            self.remoteCommandEdit.text()
+        )
+        self.project.debugProperties["PATHTRANSLATION"] = (
+            self.pathTranslationGroup.isChecked()
+        )
+        self.project.debugProperties["REMOTEPATH"] = (
+            self.translationRemoteEdit.text()
+        )
+        self.project.debugProperties["LOCALPATH"] = (
+            self.translationLocalEdit.text()
+        )
+        self.project.debugProperties["CONSOLEDEBUGGER"] = (
+            self.consoleDebuggerGroup.isChecked()
+        )
+        self.project.debugProperties["CONSOLECOMMAND"] = (
+            self.consoleCommandEdit.text()
+        )
+        self.project.debugProperties["REDIRECT"] = (
+            self.redirectCheckBox.isChecked()
+        )
+        self.project.debugProperties["NOENCODING"] = (
+            self.noEncodingCheckBox.isChecked()
+        )
+        self.project.debugPropertiesLoaded = True
+        self.project.debugPropertiesChanged = True
+        
+        self.__saveHistories()
+    
+    def __saveHistories(self):
+        """
+        Private method to save the path picker histories.
+        """
+        debugClient = self.debugClientPicker.text(toNative=False)
+        debugClientsHistory = self.debugClientPicker.getPathItems()
+        if debugClient not in debugClientsHistory:
+            debugClientsHistory.insert(0, debugClient)
+        Preferences.setProject("DebugClientsHistory",
+                               debugClientsHistory)
+    
+    @pyqtSlot()
+    def on_debugClientClearHistoryButton_clicked(self):
+        """
+        Private slot to clear the debug clients history.
+        """
+        self.__clearHistory(self.debugClientPicker)
+    
+    def __clearHistory(self, picker):
+        """
+        Private method to clear a path picker history.
+        
+        @param picker reference to the path picker
+        @type E5ComboPathPicker
+        """
+        currentText = picker.text()
+        picker.clear()
+        picker.setText(currentText)
+        
+        self.__saveHistories()

eric ide

mercurial