src/eric7/VirtualEnv/VirtualenvManagerWidgets.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
10 10
11 import os 11 import os
12 12
13 from PyQt6.QtCore import pyqtSlot, Qt 13 from PyQt6.QtCore import pyqtSlot, Qt
14 from PyQt6.QtWidgets import ( 14 from PyQt6.QtWidgets import (
15 QWidget, QDialog, QDialogButtonBox, QTreeWidgetItem, QHeaderView, 15 QWidget,
16 QVBoxLayout 16 QDialog,
17 QDialogButtonBox,
18 QTreeWidgetItem,
19 QHeaderView,
20 QVBoxLayout,
17 ) 21 )
18 22
19 from EricWidgets.EricPathPicker import EricPathPickerModes 23 from EricWidgets.EricPathPicker import EricPathPickerModes
20 from EricWidgets.EricMainWindow import EricMainWindow 24 from EricWidgets.EricMainWindow import EricMainWindow
21 25
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)

eric ide

mercurial