eric7/Project/DebuggerPropertiesDialog.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8314
e3642a6a1e71
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2005 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog for entering project specific debugger settings.
8 """
9
10 import os
11
12 from PyQt5.QtCore import pyqtSlot
13 from PyQt5.QtWidgets import QDialog, QComboBox
14
15 from E5Gui.E5Completers import E5DirCompleter
16 from E5Gui.E5PathPicker import E5PathPickerModes
17 from E5Gui.E5Application import e5App
18
19 from .Ui_DebuggerPropertiesDialog import Ui_DebuggerPropertiesDialog
20
21
22 from eric6config import getConfig
23
24 import Preferences
25 import UI.PixmapCache
26
27
28 class DebuggerPropertiesDialog(QDialog, Ui_DebuggerPropertiesDialog):
29 """
30 Class implementing a dialog for entering project specific debugger
31 settings.
32 """
33 def __init__(self, project, parent=None, name=None):
34 """
35 Constructor
36
37 @param project reference to the project object
38 @param parent parent widget of this dialog (QWidget)
39 @param name name of this dialog (string)
40 """
41 super().__init__(parent)
42 if name:
43 self.setObjectName(name)
44 self.setupUi(self)
45
46 debugClientsHistory = Preferences.getProject(
47 "DebugClientsHistory")
48 self.debugClientPicker.setMode(E5PathPickerModes.OpenFileMode)
49 self.debugClientPicker.setInsertPolicy(
50 QComboBox.InsertPolicy.InsertAtTop)
51 self.debugClientPicker.setSizeAdjustPolicy(
52 QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon)
53 self.debugClientPicker.setPathsList(debugClientsHistory)
54 self.debugClientClearHistoryButton.setIcon(
55 UI.PixmapCache.getIcon("editDelete"))
56
57 venvManager = e5App().getObject("VirtualEnvManager")
58
59 self.venvComboBox.addItem("")
60 self.venvComboBox.addItems(sorted(venvManager.getVirtualenvNames()))
61
62 self.translationLocalCompleter = E5DirCompleter(
63 self.translationLocalEdit)
64
65 self.project = project
66
67 if self.project.debugProperties["VIRTUALENV"]:
68 venvIndex = max(0, self.venvComboBox.findText(
69 self.project.debugProperties["VIRTUALENV"]))
70 else:
71 if self.project.pdata["PROGLANGUAGE"] == "Python3":
72 venvName = Preferences.getDebugger("Python3VirtualEnv")
73 else:
74 venvName = ""
75 if not venvName:
76 venvName, _ = venvManager.getDefaultEnvironment()
77 if venvName:
78 venvIndex = max(0, self.venvComboBox.findText(venvName))
79 else:
80 venvIndex = 0
81 self.venvComboBox.setCurrentIndex(venvIndex)
82 if self.project.debugProperties["DEBUGCLIENT"]:
83 self.debugClientPicker.setText(
84 self.project.debugProperties["DEBUGCLIENT"],
85 toNative=False)
86 else:
87 if self.project.pdata["PROGLANGUAGE"] == "Python3":
88 debugClient = os.path.join(
89 getConfig('ericDir'),
90 "DebugClients", "Python", "DebugClient.py")
91 else:
92 debugClient = ""
93 self.debugClientPicker.setText(debugClient, toNative=False)
94 self.debugEnvironmentOverrideCheckBox.setChecked(
95 self.project.debugProperties["ENVIRONMENTOVERRIDE"])
96 self.debugEnvironmentEdit.setText(
97 self.project.debugProperties["ENVIRONMENTSTRING"])
98 self.remoteDebuggerGroup.setChecked(
99 self.project.debugProperties["REMOTEDEBUGGER"])
100 self.remoteHostEdit.setText(
101 self.project.debugProperties["REMOTEHOST"])
102 self.remoteCommandEdit.setText(
103 self.project.debugProperties["REMOTECOMMAND"])
104 self.pathTranslationGroup.setChecked(
105 self.project.debugProperties["PATHTRANSLATION"])
106 self.translationRemoteEdit.setText(
107 self.project.debugProperties["REMOTEPATH"])
108 self.translationLocalEdit.setText(
109 self.project.debugProperties["LOCALPATH"])
110 self.consoleDebuggerGroup.setChecked(
111 self.project.debugProperties["CONSOLEDEBUGGER"])
112 self.consoleCommandEdit.setText(
113 self.project.debugProperties["CONSOLECOMMAND"])
114 self.redirectCheckBox.setChecked(
115 self.project.debugProperties["REDIRECT"])
116 self.noEncodingCheckBox.setChecked(
117 self.project.debugProperties["NOENCODING"])
118
119 msh = self.minimumSizeHint()
120 self.resize(max(self.width(), msh.width()), msh.height())
121
122 @pyqtSlot()
123 def on_debugClientPicker_aboutToShowPathPickerDialog(self):
124 """
125 Private slot to perform actions before the debug client selection
126 dialog is shown.
127 """
128 filters = self.project.getDebuggerFilters(
129 self.project.pdata["PROGLANGUAGE"])
130 filters += self.tr("All Files (*)")
131 self.debugClientPicker.setFilters(filters)
132
133 def storeData(self):
134 """
135 Public method to store the entered/modified data.
136 """
137 self.project.debugProperties["VIRTUALENV"] = (
138 self.venvComboBox.currentText()
139 )
140
141 self.project.debugProperties["DEBUGCLIENT"] = (
142 self.debugClientPicker.text(toNative=False)
143 )
144 if not self.project.debugProperties["DEBUGCLIENT"]:
145 if self.project.pdata["PROGLANGUAGE"] == "Python3":
146 debugClient = os.path.join(
147 getConfig('ericDir'),
148 "DebugClients", "Python", "DebugClient.py")
149 else:
150 debugClient = ""
151 self.project.debugProperties["DEBUGCLIENT"] = debugClient
152
153 self.project.debugProperties["ENVIRONMENTOVERRIDE"] = (
154 self.debugEnvironmentOverrideCheckBox.isChecked()
155 )
156 self.project.debugProperties["ENVIRONMENTSTRING"] = (
157 self.debugEnvironmentEdit.text()
158 )
159 self.project.debugProperties["REMOTEDEBUGGER"] = (
160 self.remoteDebuggerGroup.isChecked()
161 )
162 self.project.debugProperties["REMOTEHOST"] = (
163 self.remoteHostEdit.text()
164 )
165 self.project.debugProperties["REMOTECOMMAND"] = (
166 self.remoteCommandEdit.text()
167 )
168 self.project.debugProperties["PATHTRANSLATION"] = (
169 self.pathTranslationGroup.isChecked()
170 )
171 self.project.debugProperties["REMOTEPATH"] = (
172 self.translationRemoteEdit.text()
173 )
174 self.project.debugProperties["LOCALPATH"] = (
175 self.translationLocalEdit.text()
176 )
177 self.project.debugProperties["CONSOLEDEBUGGER"] = (
178 self.consoleDebuggerGroup.isChecked()
179 )
180 self.project.debugProperties["CONSOLECOMMAND"] = (
181 self.consoleCommandEdit.text()
182 )
183 self.project.debugProperties["REDIRECT"] = (
184 self.redirectCheckBox.isChecked()
185 )
186 self.project.debugProperties["NOENCODING"] = (
187 self.noEncodingCheckBox.isChecked()
188 )
189 self.project.debugPropertiesLoaded = True
190 self.project.debugPropertiesChanged = True
191
192 self.__saveHistories()
193
194 def __saveHistories(self):
195 """
196 Private method to save the path picker histories.
197 """
198 debugClient = self.debugClientPicker.text(toNative=False)
199 debugClientsHistory = self.debugClientPicker.getPathItems()
200 if debugClient not in debugClientsHistory:
201 debugClientsHistory.insert(0, debugClient)
202 Preferences.setProject("DebugClientsHistory",
203 debugClientsHistory)
204
205 @pyqtSlot()
206 def on_debugClientClearHistoryButton_clicked(self):
207 """
208 Private slot to clear the debug clients history.
209 """
210 self.__clearHistory(self.debugClientPicker)
211
212 def __clearHistory(self, picker):
213 """
214 Private method to clear a path picker history.
215
216 @param picker reference to the path picker
217 @type E5ComboPathPicker
218 """
219 currentText = picker.text()
220 picker.clear()
221 picker.setText(currentText)
222
223 self.__saveHistories()

eric ide

mercurial