63 if self.__editMode: |
63 if self.__editMode: |
64 self.setWindowTitle(self.tr("Edit Virtual Environment")) |
64 self.setWindowTitle(self.tr("Edit Virtual Environment")) |
65 else: |
65 else: |
66 self.setWindowTitle(self.tr("Add Virtual Environment")) |
66 self.setWindowTitle(self.tr("Add Virtual Environment")) |
67 |
67 |
|
68 for name, visualName in self.__manager.getEnvironmentTypeNames(): |
|
69 self.environmentTypeComboBox.addItem(visualName, name) |
|
70 |
68 self.__envBaseDir = baseDir |
71 self.__envBaseDir = baseDir |
69 if not self.__envBaseDir: |
72 if not self.__envBaseDir: |
70 self.__envBaseDir = OSUtilities.getHomeDir() |
73 self.__envBaseDir = OSUtilities.getHomeDir() |
71 |
74 |
72 self.serverRadioButton.setEnabled( |
|
73 self.__serverInterface is not None |
|
74 and self.__serverInterface.isServerConnected() |
|
75 ) |
|
76 |
|
77 self.targetDirectoryPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) |
75 self.targetDirectoryPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) |
78 self.targetDirectoryPicker.setWindowTitle( |
76 self.targetDirectoryPicker.setWindowTitle( |
79 self.tr("Virtualenv Target Directory") |
77 self.tr("Virtualenv Target Directory") |
80 ) |
78 ) |
81 if ( |
79 if ( |
82 self.__serverInterface is not None |
80 self.__serverInterface is not None |
83 and self.__serverInterface.isServerConnected() |
81 and self.__serverInterface.isServerConnected() |
84 ): |
82 ): |
85 self.targetDirectoryPicker.setRemote( |
83 self.targetDirectoryPicker.setRemote( |
86 metadata.is_eric_server if metadata else False |
84 metadata.environment_type == "eric_server" if metadata else False |
87 ) |
85 ) |
88 if metadata is None or (not metadata.is_eric_server and not metadata.is_remote): |
86 if metadata is None or metadata.environment_type not in ( |
|
87 "eric_server", |
|
88 "remote", |
|
89 ): |
89 self.targetDirectoryPicker.setDefaultDirectory(self.__envBaseDir) |
90 self.targetDirectoryPicker.setDefaultDirectory(self.__envBaseDir) |
90 |
91 |
91 self.pythonExecPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) |
92 self.pythonExecPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) |
92 self.pythonExecPicker.setWindowTitle(self.tr("Python Interpreter")) |
93 self.pythonExecPicker.setWindowTitle(self.tr("Python Interpreter")) |
93 if ( |
94 if ( |
94 self.__serverInterface is not None |
95 self.__serverInterface is not None |
95 and self.__serverInterface.isServerConnected() |
96 and self.__serverInterface.isServerConnected() |
96 ): |
97 ): |
97 self.pythonExecPicker.setRemote( |
98 self.pythonExecPicker.setRemote( |
98 metadata.is_eric_server if metadata else False |
99 metadata.environment_type == "eric_server" if metadata else False |
99 ) |
100 ) |
100 if metadata is None or (not metadata.is_eric_server and not metadata.is_remote): |
101 if metadata is None or metadata.environment_type not in ( |
|
102 "eric_server", |
|
103 "remote", |
|
104 ): |
101 self.pythonExecPicker.setDefaultDirectory( |
105 self.pythonExecPicker.setDefaultDirectory( |
102 PythonUtilities.getPythonExecutable() |
106 PythonUtilities.getPythonExecutable() |
103 ) |
107 ) |
104 |
108 |
105 self.execPathEdit.setToolTip( |
109 self.execPathEdit.setToolTip( |
112 self.nameEdit.setText(self.__venvName) |
116 self.nameEdit.setText(self.__venvName) |
113 if metadata: |
117 if metadata: |
114 if metadata.path: |
118 if metadata.path: |
115 self.targetDirectoryPicker.setText( |
119 self.targetDirectoryPicker.setText( |
116 metadata.path, |
120 metadata.path, |
117 toNative=not metadata.is_remote and not metadata.is_eric_server, |
121 toNative=metadata.environment_type not in ("eric_server", "remote"), |
118 ) |
122 ) |
119 else: |
123 else: |
120 self.targetDirectoryPicker.setText( |
124 self.targetDirectoryPicker.setText( |
121 self.__envBaseDir, |
125 self.__envBaseDir, |
122 toNative=not metadata.is_remote and not metadata.is_eric_server, |
126 toNative=metadata.environment_type not in ("eric_server", "remote"), |
123 ) |
127 ) |
124 if ( |
128 if ( |
125 not metadata.interpreter |
129 not metadata.interpreter |
126 and metadata.path |
130 and metadata.path |
127 and not metadata.is_remote |
131 and metadata.environment_type not in ("eric_server", "remote") |
128 and not metadata.is_eric_server |
|
129 ): |
132 ): |
130 py = self.__detectPythonInterpreter(metadata.path) |
133 py = self.__detectPythonInterpreter(metadata.path) |
131 self.pythonExecPicker.setText(py) |
134 self.pythonExecPicker.setText(py) |
132 else: |
135 else: |
133 self.pythonExecPicker.setText( |
136 self.pythonExecPicker.setText( |
134 metadata.interpreter, |
137 metadata.interpreter, |
135 toNative=not metadata.is_remote and not metadata.is_eric_server, |
138 toNative=metadata.environment_type not in ("eric_server", "remote"), |
136 ) |
139 ) |
137 else: |
140 else: |
138 self.targetDirectoryPicker.setText(self.__envBaseDir, toNative=True) |
141 self.targetDirectoryPicker.setText(self.__envBaseDir, toNative=True) |
139 |
142 |
140 self.globalCheckBox.setChecked(metadata.is_global if metadata else False) |
143 self.globalCheckBox.setChecked(metadata.is_global if metadata else False) |
141 self.standardRadioButton.setChecked(True) |
144 itemIndex = self.environmentTypeComboBox.findData( |
142 self.anacondaRadioButton.setChecked(metadata.is_conda if metadata else False) |
145 metadata.environment_type if metadata else "standard" |
143 self.remoteRadioButton.setChecked(metadata.is_remote if metadata else False) |
146 ) |
144 self.serverRadioButton.setChecked( |
147 self.environmentTypeComboBox.setCurrentIndex(itemIndex) |
145 metadata.is_eric_server if metadata else False |
|
146 ) |
|
147 self.execPathEdit.setText(metadata.exec_path if metadata else "") |
148 self.execPathEdit.setText(metadata.exec_path if metadata else "") |
148 self.descriptionEdit.setPlainText(metadata.description if metadata else "") |
149 self.descriptionEdit.setPlainText(metadata.description if metadata else "") |
149 self.serverLineEdit.setText(metadata.eric_server if metadata else "") |
150 self.serverLineEdit.setText(metadata.eric_server if metadata else "") |
150 |
151 |
151 self.__updateOk() |
152 self.__updateOk() |
169 bool(self.nameEdit.text()) |
170 bool(self.nameEdit.text()) |
170 and self.__manager.isUnique(self.nameEdit.text()) |
171 and self.__manager.isUnique(self.nameEdit.text()) |
171 ) |
172 ) |
172 ) |
173 ) |
173 |
174 |
|
175 selectedVenvType = self.environmentTypeComboBox.currentData() |
174 if not self.globalCheckBox.isChecked(): |
176 if not self.globalCheckBox.isChecked(): |
175 enable &= self.remoteRadioButton.isChecked() or ( |
177 enable &= selectedVenvType == "remote" or ( |
176 bool(self.targetDirectoryPicker.text()) |
178 bool(self.targetDirectoryPicker.text()) |
177 and self.targetDirectoryPicker.text() != self.__envBaseDir |
179 and self.targetDirectoryPicker.text() != self.__envBaseDir |
178 and ( |
180 and ( |
179 ( |
181 ( |
180 self.serverRadioButton.isChecked() |
182 selectedVenvType == "eric_server" |
181 and self.__fsInterface is not None |
183 and self.__fsInterface is not None |
182 and self.__fsInterface.exists(self.targetDirectoryPicker.text()) |
184 and self.__fsInterface.exists(self.targetDirectoryPicker.text()) |
183 ) |
185 ) |
184 or ( |
186 or ( |
185 not self.serverRadioButton.isChecked() |
187 selectedVenvType != "eric_server" |
186 and os.path.exists(self.targetDirectoryPicker.text()) |
188 and os.path.exists(self.targetDirectoryPicker.text()) |
187 ) |
189 ) |
188 ) |
190 ) |
189 ) |
191 ) |
190 |
192 |
191 enable &= self.remoteRadioButton.isChecked() or ( |
193 enable &= selectedVenvType == "remote" or ( |
192 bool(self.pythonExecPicker.text()) |
194 bool(self.pythonExecPicker.text()) |
193 and ( |
195 and ( |
194 ( |
196 ( |
195 self.serverRadioButton.isChecked() |
197 selectedVenvType == "eric_server" |
196 and self.__fsInterface is not None |
198 and self.__fsInterface is not None |
197 and self.__fsInterface.access( |
199 and self.__fsInterface.access( |
198 self.pythonExecPicker.text(), "execute" |
200 self.pythonExecPicker.text(), "execute" |
199 ) |
201 ) |
200 ) |
202 ) |
201 or ( |
203 or ( |
202 not self.serverRadioButton.isChecked() |
204 selectedVenvType != "eric_server" |
203 and os.access(self.pythonExecPicker.text(), os.X_OK) |
205 and os.access(self.pythonExecPicker.text(), os.X_OK) |
204 ) |
206 ) |
205 ) |
207 ) |
206 ) |
208 ) |
207 |
209 |
280 @param checked state of the check box |
282 @param checked state of the check box |
281 @type bool |
283 @type bool |
282 """ |
284 """ |
283 self.__updateOk() |
285 self.__updateOk() |
284 |
286 |
285 @pyqtSlot(bool) |
287 @pyqtSlot(int) |
286 def on_remoteRadioButton_toggled(self, checked): |
288 def on_environmentTypeComboBox_currentIndexChanged(self, index): |
287 """ |
289 """ |
288 Private slot handling a change of the remote radio button state. |
290 Private slot handling the selection of a virtual environment type. |
289 |
291 |
290 @param checked state of the radio button |
292 @param index index of the selected virtual environment type |
291 @type bool |
293 @type int |
292 """ |
294 """ |
293 self.__updateOk() |
295 # step 1: reset some configurations |
294 |
296 self.pythonExecPicker.setRemote(False) |
295 @pyqtSlot(bool) |
297 self.targetDirectoryPicker.setRemote(False) |
296 def on_serverRadioButton_toggled(self, checked): |
298 self.serverLineEdit.clear() |
297 """ |
299 self.ericServerInfoLabel.clear() |
298 Private slot handling a change of the eric-ide server radio button state. |
300 |
299 |
301 # step 2: configure and set value iaw. selected environment type |
300 @param checked state of the radio button |
302 selectedVenvType = self.environmentTypeComboBox.itemData(index) |
301 @type bool |
303 if selectedVenvType == "eric_server": |
302 """ |
304 serverAvailable = ( |
303 if ( |
305 self.__serverInterface is not None |
304 self.__serverInterface is not None |
306 and self.__serverInterface.isServerConnected() |
305 and self.__serverInterface.isServerConnected() |
307 ) |
306 ): |
308 self.ericServerInfoLabel.setText( |
307 self.targetDirectoryPicker.setRemote(checked) |
309 "" if serverAvailable else self.tr("eric-ide Server is not available") |
308 self.pythonExecPicker.setRemote(checked) |
310 ) |
309 self.serverLineEdit.setText( |
311 self.pythonExecPicker.setRemote(serverAvailable) |
310 self.__serverInterface.getHost() if checked else "" |
312 self.targetDirectoryPicker.setRemote(serverAvailable) |
311 ) |
313 if serverAvailable: |
312 if checked: |
|
313 self.targetDirectoryPicker.setText(self.__fsInterface.getcwd()) |
314 self.targetDirectoryPicker.setText(self.__fsInterface.getcwd()) |
314 |
315 self.serverLineEdit.setText(self.__serverInterface.getHost()) |
315 self.__updateOk() |
316 |
316 |
317 venvTypeData = self.__manager.getEnvironmentTypesRegistry().getEnvironmentType( |
317 @pyqtSlot(bool) |
318 selectedVenvType |
318 def on_anacondaRadioButton_clicked(self, checked): |
319 ) |
319 """ |
320 if venvTypeData.defaultExecPathFunc is not None and not bool( |
320 Private slot handling a user click on this radio button. |
321 self.execPathEdit.text() |
321 |
322 ): |
322 @param checked state of the radio button |
323 self.execPathEdit.setText( |
323 @type bool |
324 venvTypeData.defaultExecPathFunc(self.targetDirectoryPicker.text()) |
324 """ |
325 ) |
325 if checked and not bool(self.execPathEdit.text()): |
326 |
326 # prepopulate the execPathEdit widget |
327 self.__updateOk() |
327 if OSUtilities.isWindowsPlatform(): |
|
328 self.execPathEdit.setText( |
|
329 os.pathsep.join( |
|
330 [ |
|
331 self.targetDirectoryPicker.text(), |
|
332 os.path.join(self.targetDirectoryPicker.text(), "Scripts"), |
|
333 os.path.join( |
|
334 self.targetDirectoryPicker.text(), "Library", "bin" |
|
335 ), |
|
336 ] |
|
337 ) |
|
338 ) |
|
339 else: |
|
340 self.execPathEdit.setText( |
|
341 os.path.join(self.targetDirectoryPicker.text(), "bin"), |
|
342 ) |
|
343 |
328 |
344 def getMetaData(self): |
329 def getMetaData(self): |
345 """ |
330 """ |
346 Public method to retrieve the entered metadata. |
331 Public method to retrieve the entered metadata. |
347 |
332 |
348 @return metadata for the virtual environment |
333 @return metadata for the virtual environment |
349 @rtype VirtualenvMetaData |
334 @rtype VirtualenvMetaData |
350 """ |
335 """ |
351 nativePaths = ( |
336 selectedEnvironmentType = self.environmentTypeComboBox.currentData() |
352 not self.remoteRadioButton.isChecked() |
337 nativePaths = selectedEnvironmentType not in ("remote", "eric_server") |
353 and not self.serverRadioButton.isChecked() |
338 isEricServer = selectedEnvironmentType == "eric_server" |
354 ) |
|
355 is_eric_server = self.serverRadioButton.isChecked() |
|
356 envPath = ( |
339 envPath = ( |
357 FileSystemUtilities.remoteFileName(self.targetDirectoryPicker.text()) |
340 FileSystemUtilities.remoteFileName(self.targetDirectoryPicker.text()) |
358 if is_eric_server |
341 if isEricServer |
359 else FileSystemUtilities.plainFileName( |
342 else FileSystemUtilities.plainFileName( |
360 self.targetDirectoryPicker.text(toNative=nativePaths) |
343 self.targetDirectoryPicker.text(toNative=nativePaths) |
361 ) |
344 ) |
362 ) |
345 ) |
363 interpreter = ( |
346 interpreter = ( |
364 FileSystemUtilities.remoteFileName(self.pythonExecPicker.text()) |
347 FileSystemUtilities.remoteFileName(self.pythonExecPicker.text()) |
365 if is_eric_server |
348 if isEricServer |
366 else FileSystemUtilities.plainFileName( |
349 else FileSystemUtilities.plainFileName( |
367 self.pythonExecPicker.text(toNative=nativePaths) |
350 self.pythonExecPicker.text(toNative=nativePaths) |
368 ) |
351 ) |
369 ) |
352 ) |
|
353 |
370 return VirtualenvMetaData( |
354 return VirtualenvMetaData( |
371 name=self.nameEdit.text(), |
355 name=self.nameEdit.text(), |
372 path=envPath, |
356 path=envPath, |
373 interpreter=interpreter, |
357 interpreter=interpreter, |
374 is_global=self.globalCheckBox.isChecked(), |
358 is_global=self.globalCheckBox.isChecked(), |
375 is_conda=self.anacondaRadioButton.isChecked(), |
359 environment_type=selectedEnvironmentType, |
376 is_remote=self.remoteRadioButton.isChecked(), |
|
377 exec_path=self.execPathEdit.text(), |
360 exec_path=self.execPathEdit.text(), |
378 description=self.descriptionEdit.toPlainText(), |
361 description=self.descriptionEdit.toPlainText(), |
379 is_eric_server=is_eric_server, |
|
380 eric_server=self.serverLineEdit.text(), |
362 eric_server=self.serverLineEdit.text(), |
381 ) |
363 ) |