28 class VirtualenvManagerWidget(QWidget, Ui_VirtualenvManagerWidget): |
32 class VirtualenvManagerWidget(QWidget, Ui_VirtualenvManagerWidget): |
29 """ |
33 """ |
30 Class implementing a widget to manage the list of defined virtual |
34 Class implementing a widget to manage the list of defined virtual |
31 environments. |
35 environments. |
32 """ |
36 """ |
|
37 |
33 IsGlobalRole = Qt.ItemDataRole.UserRole + 1 |
38 IsGlobalRole = Qt.ItemDataRole.UserRole + 1 |
34 IsCondaRole = Qt.ItemDataRole.UserRole + 2 |
39 IsCondaRole = Qt.ItemDataRole.UserRole + 2 |
35 IsRemoteRole = Qt.ItemDataRole.UserRole + 3 |
40 IsRemoteRole = Qt.ItemDataRole.UserRole + 3 |
36 ExecPathRole = Qt.ItemDataRole.UserRole + 4 |
41 ExecPathRole = Qt.ItemDataRole.UserRole + 4 |
37 |
42 |
38 def __init__(self, manager, parent=None): |
43 def __init__(self, manager, parent=None): |
39 """ |
44 """ |
40 Constructor |
45 Constructor |
41 |
46 |
42 @param manager reference to the virtual environment manager |
47 @param manager reference to the virtual environment manager |
43 @type VirtualenvManager |
48 @type VirtualenvManager |
44 @param parent reference to the parent widget |
49 @param parent reference to the parent widget |
45 @type QWidget |
50 @type QWidget |
46 """ |
51 """ |
47 super().__init__(parent) |
52 super().__init__(parent) |
48 self.setupUi(self) |
53 self.setupUi(self) |
49 |
54 |
50 self.__manager = manager |
55 self.__manager = manager |
51 |
56 |
52 self.refreshButton.setIcon(UI.PixmapCache.getIcon("reload")) |
57 self.refreshButton.setIcon(UI.PixmapCache.getIcon("reload")) |
53 self.addButton.setIcon(UI.PixmapCache.getIcon("plus")) |
58 self.addButton.setIcon(UI.PixmapCache.getIcon("plus")) |
54 self.newButton.setIcon(UI.PixmapCache.getIcon("new")) |
59 self.newButton.setIcon(UI.PixmapCache.getIcon("new")) |
55 self.editButton.setIcon(UI.PixmapCache.getIcon("edit")) |
60 self.editButton.setIcon(UI.PixmapCache.getIcon("edit")) |
56 self.upgradeButton.setIcon(UI.PixmapCache.getIcon("upgrade")) |
61 self.upgradeButton.setIcon(UI.PixmapCache.getIcon("upgrade")) |
57 self.removeButton.setIcon(UI.PixmapCache.getIcon("minus")) |
62 self.removeButton.setIcon(UI.PixmapCache.getIcon("minus")) |
58 self.removeAllButton.setIcon(UI.PixmapCache.getIcon("minus_3")) |
63 self.removeAllButton.setIcon(UI.PixmapCache.getIcon("minus_3")) |
59 self.deleteButton.setIcon(UI.PixmapCache.getIcon("fileDelete")) |
64 self.deleteButton.setIcon(UI.PixmapCache.getIcon("fileDelete")) |
60 self.deleteAllButton.setIcon(UI.PixmapCache.getIcon("fileDeleteList")) |
65 self.deleteAllButton.setIcon(UI.PixmapCache.getIcon("fileDeleteList")) |
61 self.saveButton.setIcon(UI.PixmapCache.getIcon("fileSave")) |
66 self.saveButton.setIcon(UI.PixmapCache.getIcon("fileSave")) |
62 |
67 |
63 baseDir = self.__manager.getVirtualEnvironmentsBaseDir() |
68 baseDir = self.__manager.getVirtualEnvironmentsBaseDir() |
64 if not baseDir: |
69 if not baseDir: |
65 baseDir = Utilities.getHomeDir() |
70 baseDir = Utilities.getHomeDir() |
66 |
71 |
67 self.envBaseDirectoryPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) |
72 self.envBaseDirectoryPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) |
68 self.envBaseDirectoryPicker.setWindowTitle( |
73 self.envBaseDirectoryPicker.setWindowTitle(self.tr("Virtualenv Base Directory")) |
69 self.tr("Virtualenv Base Directory")) |
|
70 self.envBaseDirectoryPicker.setText(baseDir) |
74 self.envBaseDirectoryPicker.setText(baseDir) |
71 |
75 |
72 self.__populateVenvList() |
76 self.__populateVenvList() |
73 self.__updateButtons() |
77 self.__updateButtons() |
74 |
78 |
75 self.venvList.header().setSortIndicator(0, Qt.SortOrder.AscendingOrder) |
79 self.venvList.header().setSortIndicator(0, Qt.SortOrder.AscendingOrder) |
76 |
80 |
77 self.__manager.virtualEnvironmentsListChanged.connect(self.__refresh) |
81 self.__manager.virtualEnvironmentsListChanged.connect(self.__refresh) |
78 |
82 |
79 def __updateButtons(self): |
83 def __updateButtons(self): |
80 """ |
84 """ |
81 Private method to update the enabled state of the various buttons. |
85 Private method to update the enabled state of the various buttons. |
82 """ |
86 """ |
83 selectedItemsCount = len(self.venvList.selectedItems()) |
87 selectedItemsCount = len(self.venvList.selectedItems()) |
84 topLevelItemCount = self.venvList.topLevelItemCount() |
88 topLevelItemCount = self.venvList.topLevelItemCount() |
85 |
89 |
86 deletableSelectedItemCount = 0 |
90 deletableSelectedItemCount = 0 |
87 for itm in self.venvList.selectedItems(): |
91 for itm in self.venvList.selectedItems(): |
88 if ( |
92 if ( |
89 itm.text(0) != "<default>" and |
93 itm.text(0) != "<default>" |
90 bool(itm.text(1)) and |
94 and bool(itm.text(1)) |
91 not itm.data(0, VirtualenvManagerWidget.IsGlobalRole) and |
95 and not itm.data(0, VirtualenvManagerWidget.IsGlobalRole) |
92 not itm.data(0, VirtualenvManagerWidget.IsRemoteRole) |
96 and not itm.data(0, VirtualenvManagerWidget.IsRemoteRole) |
93 ): |
97 ): |
94 deletableSelectedItemCount += 1 |
98 deletableSelectedItemCount += 1 |
95 |
99 |
96 deletableItemCount = 0 |
100 deletableItemCount = 0 |
97 for index in range(topLevelItemCount): |
101 for index in range(topLevelItemCount): |
98 itm = self.venvList.topLevelItem(index) |
102 itm = self.venvList.topLevelItem(index) |
99 if ( |
103 if ( |
100 itm.text(0) != "<default>" and |
104 itm.text(0) != "<default>" |
101 bool(itm.text(1)) and |
105 and bool(itm.text(1)) |
102 not itm.data(0, VirtualenvManagerWidget.IsRemoteRole) |
106 and not itm.data(0, VirtualenvManagerWidget.IsRemoteRole) |
103 ): |
107 ): |
104 deletableItemCount += 1 |
108 deletableItemCount += 1 |
105 |
109 |
106 canBeRemoved = ( |
110 canBeRemoved = ( |
107 selectedItemsCount == 1 and |
111 selectedItemsCount == 1 |
108 self.venvList.selectedItems()[0].text(0) != "<default>" |
112 and self.venvList.selectedItems()[0].text(0) != "<default>" |
109 ) |
113 ) |
110 canAllBeRemoved = ( |
114 canAllBeRemoved = ( |
111 topLevelItemCount == 1 and |
115 topLevelItemCount == 1 |
112 self.venvList.topLevelItem(0).text(0) != "<default>" |
116 and self.venvList.topLevelItem(0).text(0) != "<default>" |
113 ) |
117 ) |
114 |
118 |
115 self.editButton.setEnabled(selectedItemsCount == 1) |
119 self.editButton.setEnabled(selectedItemsCount == 1) |
116 |
120 |
117 self.removeButton.setEnabled(selectedItemsCount > 1 or canBeRemoved) |
121 self.removeButton.setEnabled(selectedItemsCount > 1 or canBeRemoved) |
118 self.removeAllButton.setEnabled( |
122 self.removeAllButton.setEnabled(topLevelItemCount > 1 or canAllBeRemoved) |
119 topLevelItemCount > 1 or canAllBeRemoved) |
123 |
120 |
|
121 self.deleteButton.setEnabled(deletableSelectedItemCount) |
124 self.deleteButton.setEnabled(deletableSelectedItemCount) |
122 self.deleteAllButton.setEnabled(deletableItemCount) |
125 self.deleteAllButton.setEnabled(deletableItemCount) |
123 |
126 |
124 if selectedItemsCount == 1: |
127 if selectedItemsCount == 1: |
125 venvName = self.venvList.selectedItems()[0].text(0) |
128 venvName = self.venvList.selectedItems()[0].text(0) |
126 venvDirectory = self.__manager.getVirtualenvDirectory(venvName) |
129 venvDirectory = self.__manager.getVirtualenvDirectory(venvName) |
127 self.upgradeButton.setEnabled(os.path.exists(os.path.join( |
130 self.upgradeButton.setEnabled( |
128 venvDirectory, "pyvenv.cfg"))) |
131 os.path.exists(os.path.join(venvDirectory, "pyvenv.cfg")) |
|
132 ) |
129 else: |
133 else: |
130 self.upgradeButton.setEnabled(False) |
134 self.upgradeButton.setEnabled(False) |
131 |
135 |
132 @pyqtSlot() |
136 @pyqtSlot() |
133 def on_refreshButton_clicked(self): |
137 def on_refreshButton_clicked(self): |
134 """ |
138 """ |
135 Private slot to refresh the list of virtual environments. |
139 Private slot to refresh the list of virtual environments. |
136 """ |
140 """ |
137 self.__manager.reloadSettings() |
141 self.__manager.reloadSettings() |
138 self.__refresh() |
142 self.__refresh() |
139 |
143 |
140 @pyqtSlot() |
144 @pyqtSlot() |
141 def on_addButton_clicked(self): |
145 def on_addButton_clicked(self): |
142 """ |
146 """ |
143 Private slot to add a new entry. |
147 Private slot to add a new entry. |
144 """ |
148 """ |
145 from .VirtualenvAddEditDialog import VirtualenvAddEditDialog |
149 from .VirtualenvAddEditDialog import VirtualenvAddEditDialog |
|
150 |
|
151 dlg = VirtualenvAddEditDialog( |
|
152 self.__manager, baseDir=self.envBaseDirectoryPicker.text() |
|
153 ) |
|
154 if dlg.exec() == QDialog.DialogCode.Accepted: |
|
155 ( |
|
156 venvName, |
|
157 venvDirectory, |
|
158 venvInterpreter, |
|
159 isGlobal, |
|
160 isConda, |
|
161 isRemote, |
|
162 execPath, |
|
163 ) = dlg.getData() |
|
164 |
|
165 self.__manager.addVirtualEnv( |
|
166 venvName, |
|
167 venvDirectory, |
|
168 venvInterpreter, |
|
169 isGlobal, |
|
170 isConda, |
|
171 isRemote, |
|
172 execPath, |
|
173 ) |
|
174 |
|
175 @pyqtSlot() |
|
176 def on_newButton_clicked(self): |
|
177 """ |
|
178 Private slot to create a new virtual environment. |
|
179 """ |
|
180 self.__manager.createVirtualEnv(baseDir=self.envBaseDirectoryPicker.text()) |
|
181 |
|
182 @pyqtSlot() |
|
183 def on_editButton_clicked(self): |
|
184 """ |
|
185 Private slot to edit the selected entry. |
|
186 """ |
|
187 selectedItem = self.venvList.selectedItems()[0] |
|
188 oldVenvName = selectedItem.text(0) |
|
189 |
|
190 from .VirtualenvAddEditDialog import VirtualenvAddEditDialog |
|
191 |
146 dlg = VirtualenvAddEditDialog( |
192 dlg = VirtualenvAddEditDialog( |
147 self.__manager, |
193 self.__manager, |
148 baseDir=self.envBaseDirectoryPicker.text() |
194 selectedItem.text(0), |
149 ) |
195 selectedItem.text(1), |
150 if dlg.exec() == QDialog.DialogCode.Accepted: |
196 selectedItem.text(2), |
151 (venvName, venvDirectory, venvInterpreter, isGlobal, isConda, |
|
152 isRemote, execPath) = dlg.getData() |
|
153 |
|
154 self.__manager.addVirtualEnv( |
|
155 venvName, venvDirectory, venvInterpreter, isGlobal, isConda, |
|
156 isRemote, execPath) |
|
157 |
|
158 @pyqtSlot() |
|
159 def on_newButton_clicked(self): |
|
160 """ |
|
161 Private slot to create a new virtual environment. |
|
162 """ |
|
163 self.__manager.createVirtualEnv( |
|
164 baseDir=self.envBaseDirectoryPicker.text()) |
|
165 |
|
166 @pyqtSlot() |
|
167 def on_editButton_clicked(self): |
|
168 """ |
|
169 Private slot to edit the selected entry. |
|
170 """ |
|
171 selectedItem = self.venvList.selectedItems()[0] |
|
172 oldVenvName = selectedItem.text(0) |
|
173 |
|
174 from .VirtualenvAddEditDialog import VirtualenvAddEditDialog |
|
175 dlg = VirtualenvAddEditDialog( |
|
176 self.__manager, selectedItem.text(0), |
|
177 selectedItem.text(1), selectedItem.text(2), |
|
178 selectedItem.data(0, VirtualenvManagerWidget.IsGlobalRole), |
197 selectedItem.data(0, VirtualenvManagerWidget.IsGlobalRole), |
179 selectedItem.data(0, VirtualenvManagerWidget.IsCondaRole), |
198 selectedItem.data(0, VirtualenvManagerWidget.IsCondaRole), |
180 selectedItem.data(0, VirtualenvManagerWidget.IsRemoteRole), |
199 selectedItem.data(0, VirtualenvManagerWidget.IsRemoteRole), |
181 selectedItem.data(0, VirtualenvManagerWidget.ExecPathRole), |
200 selectedItem.data(0, VirtualenvManagerWidget.ExecPathRole), |
182 baseDir=self.envBaseDirectoryPicker.text() |
201 baseDir=self.envBaseDirectoryPicker.text(), |
183 ) |
202 ) |
184 if dlg.exec() == QDialog.DialogCode.Accepted: |
203 if dlg.exec() == QDialog.DialogCode.Accepted: |
185 (venvName, venvDirectory, venvInterpreter, isGlobal, isConda, |
204 ( |
186 isRemote, execPath) = dlg.getData() |
205 venvName, |
|
206 venvDirectory, |
|
207 venvInterpreter, |
|
208 isGlobal, |
|
209 isConda, |
|
210 isRemote, |
|
211 execPath, |
|
212 ) = dlg.getData() |
187 if venvName != oldVenvName: |
213 if venvName != oldVenvName: |
188 self.__manager.renameVirtualEnv( |
214 self.__manager.renameVirtualEnv( |
189 oldVenvName, venvName, venvDirectory, venvInterpreter, |
215 oldVenvName, |
190 isGlobal, isConda, isRemote, execPath) |
216 venvName, |
|
217 venvDirectory, |
|
218 venvInterpreter, |
|
219 isGlobal, |
|
220 isConda, |
|
221 isRemote, |
|
222 execPath, |
|
223 ) |
191 else: |
224 else: |
192 self.__manager.setVirtualEnv( |
225 self.__manager.setVirtualEnv( |
193 venvName, venvDirectory, venvInterpreter, isGlobal, |
226 venvName, |
194 isConda, isRemote, execPath) |
227 venvDirectory, |
195 |
228 venvInterpreter, |
|
229 isGlobal, |
|
230 isConda, |
|
231 isRemote, |
|
232 execPath, |
|
233 ) |
|
234 |
196 @pyqtSlot() |
235 @pyqtSlot() |
197 def on_upgradeButton_clicked(self): |
236 def on_upgradeButton_clicked(self): |
198 """ |
237 """ |
199 Private slot to upgrade a virtual environment. |
238 Private slot to upgrade a virtual environment. |
200 """ |
239 """ |
201 self.__manager.upgradeVirtualEnv( |
240 self.__manager.upgradeVirtualEnv(self.venvList.selectedItems()[0].text(0)) |
202 self.venvList.selectedItems()[0].text(0)) |
241 |
203 |
|
204 @pyqtSlot() |
242 @pyqtSlot() |
205 def on_removeButton_clicked(self): |
243 def on_removeButton_clicked(self): |
206 """ |
244 """ |
207 Private slot to remove all selected entries from the list but keep |
245 Private slot to remove all selected entries from the list but keep |
208 their directories. |
246 their directories. |
209 """ |
247 """ |
210 selectedVenvs = [] |
248 selectedVenvs = [] |
211 for itm in self.venvList.selectedItems(): |
249 for itm in self.venvList.selectedItems(): |
212 selectedVenvs.append(itm.text(0)) |
250 selectedVenvs.append(itm.text(0)) |
213 |
251 |
214 if selectedVenvs: |
252 if selectedVenvs: |
215 self.__manager.removeVirtualEnvs(selectedVenvs) |
253 self.__manager.removeVirtualEnvs(selectedVenvs) |
216 |
254 |
217 @pyqtSlot() |
255 @pyqtSlot() |
218 def on_removeAllButton_clicked(self): |
256 def on_removeAllButton_clicked(self): |
219 """ |
257 """ |
220 Private slot to remove all entries from the list but keep their |
258 Private slot to remove all entries from the list but keep their |
221 directories. |
259 directories. |
222 """ |
260 """ |
223 venvNames = [] |
261 venvNames = [] |
224 for index in range(self.venvList.topLevelItemCount()): |
262 for index in range(self.venvList.topLevelItemCount()): |
225 itm = self.venvList.topLevelItem(index) |
263 itm = self.venvList.topLevelItem(index) |
226 venvNames.append(itm.text(0)) |
264 venvNames.append(itm.text(0)) |
227 |
265 |
228 if venvNames: |
266 if venvNames: |
229 self.__manager.removeVirtualEnvs(venvNames) |
267 self.__manager.removeVirtualEnvs(venvNames) |
230 |
268 |
231 @pyqtSlot() |
269 @pyqtSlot() |
232 def on_deleteButton_clicked(self): |
270 def on_deleteButton_clicked(self): |
233 """ |
271 """ |
234 Private slot to delete all selected entries from the list and disk. |
272 Private slot to delete all selected entries from the list and disk. |
235 """ |
273 """ |
236 selectedVenvs = [] |
274 selectedVenvs = [] |
237 for itm in self.venvList.selectedItems(): |
275 for itm in self.venvList.selectedItems(): |
238 selectedVenvs.append(itm.text(0)) |
276 selectedVenvs.append(itm.text(0)) |
239 |
277 |
240 if selectedVenvs: |
278 if selectedVenvs: |
241 self.__manager.deleteVirtualEnvs(selectedVenvs) |
279 self.__manager.deleteVirtualEnvs(selectedVenvs) |
242 |
280 |
243 @pyqtSlot() |
281 @pyqtSlot() |
244 def on_deleteAllButton_clicked(self): |
282 def on_deleteAllButton_clicked(self): |
245 """ |
283 """ |
246 Private slot to delete all entries from the list and disk. |
284 Private slot to delete all entries from the list and disk. |
247 """ |
285 """ |
248 venvNames = [] |
286 venvNames = [] |
249 for index in range(self.venvList.topLevelItemCount()): |
287 for index in range(self.venvList.topLevelItemCount()): |
250 itm = self.venvList.topLevelItem(index) |
288 itm = self.venvList.topLevelItem(index) |
251 venvNames.append(itm.text(0)) |
289 venvNames.append(itm.text(0)) |
252 |
290 |
253 if venvNames: |
291 if venvNames: |
254 self.__manager.deleteVirtualEnvs(venvNames) |
292 self.__manager.deleteVirtualEnvs(venvNames) |
255 |
293 |
256 @pyqtSlot() |
294 @pyqtSlot() |
257 def on_venvList_itemSelectionChanged(self): |
295 def on_venvList_itemSelectionChanged(self): |
258 """ |
296 """ |
259 Private slot handling a change of the selected items. |
297 Private slot handling a change of the selected items. |
260 """ |
298 """ |
261 self.__updateButtons() |
299 self.__updateButtons() |
262 |
300 |
263 @pyqtSlot() |
301 @pyqtSlot() |
264 def __refresh(self): |
302 def __refresh(self): |
265 """ |
303 """ |
266 Private slot to refresh the list of shown items. |
304 Private slot to refresh the list of shown items. |
267 """ |
305 """ |
268 # 1. remember selected entries |
306 # 1. remember selected entries |
269 selectedVenvs = [] |
307 selectedVenvs = [] |
270 for itm in self.venvList.selectedItems(): |
308 for itm in self.venvList.selectedItems(): |
271 selectedVenvs.append(itm.text(0)) |
309 selectedVenvs.append(itm.text(0)) |
272 |
310 |
273 # 2. clear the list |
311 # 2. clear the list |
274 self.venvList.clear() |
312 self.venvList.clear() |
275 |
313 |
276 # 3. re-populate the list |
314 # 3. re-populate the list |
277 self.__populateVenvList() |
315 self.__populateVenvList() |
278 |
316 |
279 # 4. re-establish selection |
317 # 4. re-establish selection |
280 for venvName in selectedVenvs: |
318 for venvName in selectedVenvs: |
281 itms = self.venvList.findItems( |
319 itms = self.venvList.findItems(venvName, Qt.MatchFlag.MatchExactly, 0) |
282 venvName, Qt.MatchFlag.MatchExactly, 0) |
|
283 if itms: |
320 if itms: |
284 itms[0].setSelected(True) |
321 itms[0].setSelected(True) |
285 |
322 |
286 def __populateVenvList(self): |
323 def __populateVenvList(self): |
287 """ |
324 """ |
288 Private method to populate the list of virtual environments. |
325 Private method to populate the list of virtual environments. |
289 """ |
326 """ |
290 environments = self.__manager.getEnvironmentEntries() |
327 environments = self.__manager.getEnvironmentEntries() |
291 for venvName in environments: |
328 for venvName in environments: |
292 itm = QTreeWidgetItem(self.venvList, [ |
329 itm = QTreeWidgetItem( |
293 venvName, |
330 self.venvList, |
294 environments[venvName]["path"], |
331 [ |
295 environments[venvName]["interpreter"], |
332 venvName, |
296 ]) |
333 environments[venvName]["path"], |
297 itm.setData(0, VirtualenvManagerWidget.IsGlobalRole, |
334 environments[venvName]["interpreter"], |
298 environments[venvName]["is_global"]) |
335 ], |
299 itm.setData(0, VirtualenvManagerWidget.IsCondaRole, |
336 ) |
300 environments[venvName]["is_conda"]) |
337 itm.setData( |
301 itm.setData(0, VirtualenvManagerWidget.IsRemoteRole, |
338 0, |
302 environments[venvName]["is_remote"]) |
339 VirtualenvManagerWidget.IsGlobalRole, |
303 itm.setData(0, VirtualenvManagerWidget.ExecPathRole, |
340 environments[venvName]["is_global"], |
304 environments[venvName]["exec_path"]) |
341 ) |
305 |
342 itm.setData( |
|
343 0, |
|
344 VirtualenvManagerWidget.IsCondaRole, |
|
345 environments[venvName]["is_conda"], |
|
346 ) |
|
347 itm.setData( |
|
348 0, |
|
349 VirtualenvManagerWidget.IsRemoteRole, |
|
350 environments[venvName]["is_remote"], |
|
351 ) |
|
352 itm.setData( |
|
353 0, |
|
354 VirtualenvManagerWidget.ExecPathRole, |
|
355 environments[venvName]["exec_path"], |
|
356 ) |
|
357 |
306 # show remote environments with underlined font |
358 # show remote environments with underlined font |
307 if environments[venvName]["is_remote"]: |
359 if environments[venvName]["is_remote"]: |
308 font = itm.font(0) |
360 font = itm.font(0) |
309 font.setUnderline(True) |
361 font.setUnderline(True) |
310 for column in range(itm.columnCount()): |
362 for column in range(itm.columnCount()): |
311 itm.setFont(column, font) |
363 itm.setFont(column, font) |
312 else: |
364 else: |
313 # local environments |
365 # local environments |
314 |
366 |
315 # show global environments with bold font |
367 # show global environments with bold font |
316 if environments[venvName]["is_global"]: |
368 if environments[venvName]["is_global"]: |
317 font = itm.font(0) |
369 font = itm.font(0) |
318 font.setBold(True) |
370 font.setBold(True) |
319 for column in range(itm.columnCount()): |
371 for column in range(itm.columnCount()): |
320 itm.setFont(column, font) |
372 itm.setFont(column, font) |
321 |
373 |
322 # show Anaconda environments with italic font |
374 # show Anaconda environments with italic font |
323 if environments[venvName]["is_conda"]: |
375 if environments[venvName]["is_conda"]: |
324 font = itm.font(0) |
376 font = itm.font(0) |
325 font.setItalic(True) |
377 font.setItalic(True) |
326 for column in range(itm.columnCount()): |
378 for column in range(itm.columnCount()): |
327 itm.setFont(column, font) |
379 itm.setFont(column, font) |
328 |
380 |
329 self.__resizeSections() |
381 self.__resizeSections() |
330 |
382 |
331 def __resizeSections(self): |
383 def __resizeSections(self): |
332 """ |
384 """ |
333 Private method to resize the sections of the environment list to their |
385 Private method to resize the sections of the environment list to their |
334 contents. |
386 contents. |
335 """ |
387 """ |
336 self.venvList.header().resizeSections( |
388 self.venvList.header().resizeSections(QHeaderView.ResizeMode.ResizeToContents) |
337 QHeaderView.ResizeMode.ResizeToContents) |
|
338 self.venvList.header().setStretchLastSection(True) |
389 self.venvList.header().setStretchLastSection(True) |
339 |
390 |
340 @pyqtSlot() |
391 @pyqtSlot() |
341 def on_saveButton_clicked(self): |
392 def on_saveButton_clicked(self): |
342 """ |
393 """ |
343 Private slot to save the base directory name. |
394 Private slot to save the base directory name. |
344 """ |
395 """ |
348 |
399 |
349 class VirtualenvManagerDialog(QDialog): |
400 class VirtualenvManagerDialog(QDialog): |
350 """ |
401 """ |
351 Class implementing the virtual environments manager dialog variant. |
402 Class implementing the virtual environments manager dialog variant. |
352 """ |
403 """ |
|
404 |
353 def __init__(self, manager, parent=None): |
405 def __init__(self, manager, parent=None): |
354 """ |
406 """ |
355 Constructor |
407 Constructor |
356 |
408 |
357 @param manager reference to the virtual environment manager |
409 @param manager reference to the virtual environment manager |
358 @type VirtualenvManager |
410 @type VirtualenvManager |
359 @param parent reference to the parent widget |
411 @param parent reference to the parent widget |
360 @type QWidget |
412 @type QWidget |
361 """ |
413 """ |
362 super().__init__(parent) |
414 super().__init__(parent) |
363 self.setSizeGripEnabled(True) |
415 self.setSizeGripEnabled(True) |
364 |
416 |
365 self.__layout = QVBoxLayout(self) |
417 self.__layout = QVBoxLayout(self) |
366 self.setLayout(self.__layout) |
418 self.setLayout(self.__layout) |
367 |
419 |
368 self.cw = VirtualenvManagerWidget(manager, self) |
420 self.cw = VirtualenvManagerWidget(manager, self) |
369 self.__layout.addWidget(self.cw) |
421 self.__layout.addWidget(self.cw) |
370 |
422 |
371 self.buttonBox = QDialogButtonBox( |
423 self.buttonBox = QDialogButtonBox( |
372 QDialogButtonBox.StandardButton.Close, |
424 QDialogButtonBox.StandardButton.Close, Qt.Orientation.Horizontal, self |
373 Qt.Orientation.Horizontal, |
425 ) |
374 self) |
|
375 self.__layout.addWidget(self.buttonBox) |
426 self.__layout.addWidget(self.buttonBox) |
376 |
427 |
377 self.resize(700, 500) |
428 self.resize(700, 500) |
378 self.setWindowTitle(self.tr("Manage Virtual Environments")) |
429 self.setWindowTitle(self.tr("Manage Virtual Environments")) |
379 |
430 |
380 self.buttonBox.accepted.connect(self.accept) |
431 self.buttonBox.accepted.connect(self.accept) |
381 self.buttonBox.rejected.connect(self.reject) |
432 self.buttonBox.rejected.connect(self.reject) |
382 |
433 |
383 |
434 |
384 class VirtualenvManagerWindow(EricMainWindow): |
435 class VirtualenvManagerWindow(EricMainWindow): |
385 """ |
436 """ |
386 Main window class for the standalone virtual environments manager. |
437 Main window class for the standalone virtual environments manager. |
387 """ |
438 """ |
|
439 |
388 def __init__(self, parent=None): |
440 def __init__(self, parent=None): |
389 """ |
441 """ |
390 Constructor |
442 Constructor |
391 |
443 |
392 @param parent reference to the parent widget (QWidget) |
444 @param parent reference to the parent widget (QWidget) |
393 """ |
445 """ |
394 super().__init__(parent) |
446 super().__init__(parent) |
395 |
447 |
396 from VirtualEnv.VirtualenvManager import VirtualenvManager |
448 from VirtualEnv.VirtualenvManager import VirtualenvManager |
|
449 |
397 self.__virtualenvManager = VirtualenvManager(self) |
450 self.__virtualenvManager = VirtualenvManager(self) |
398 |
451 |
399 self.__centralWidget = QWidget(self) |
452 self.__centralWidget = QWidget(self) |
400 self.__layout = QVBoxLayout(self.__centralWidget) |
453 self.__layout = QVBoxLayout(self.__centralWidget) |
401 self.__centralWidget.setLayout(self.__layout) |
454 self.__centralWidget.setLayout(self.__layout) |
402 |
455 |
403 self.__virtualenvManagerWidget = VirtualenvManagerWidget( |
456 self.__virtualenvManagerWidget = VirtualenvManagerWidget( |
404 self.__virtualenvManager, self.__centralWidget) |
457 self.__virtualenvManager, self.__centralWidget |
|
458 ) |
405 self.__layout.addWidget(self.__virtualenvManagerWidget) |
459 self.__layout.addWidget(self.__virtualenvManagerWidget) |
406 |
460 |
407 self.__buttonBox = QDialogButtonBox( |
461 self.__buttonBox = QDialogButtonBox( |
408 QDialogButtonBox.StandardButton.Close, |
462 QDialogButtonBox.StandardButton.Close, Qt.Orientation.Horizontal, self |
409 Qt.Orientation.Horizontal, |
463 ) |
410 self) |
|
411 self.__layout.addWidget(self.__buttonBox) |
464 self.__layout.addWidget(self.__buttonBox) |
412 |
465 |
413 self.setCentralWidget(self.__centralWidget) |
466 self.setCentralWidget(self.__centralWidget) |
414 self.resize(700, 500) |
467 self.resize(700, 500) |
415 self.setWindowTitle(self.tr("Manage Virtual Environments")) |
468 self.setWindowTitle(self.tr("Manage Virtual Environments")) |
416 |
469 |
417 self.__buttonBox.accepted.connect(self.close) |
470 self.__buttonBox.accepted.connect(self.close) |
418 self.__buttonBox.rejected.connect(self.close) |
471 self.__buttonBox.rejected.connect(self.close) |