|
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() |