VirtualEnv/VirtualenvManagerDialog.py

changeset 6338
104ee21d765d
child 6349
17b3c75913de
equal deleted inserted replaced
6337:c6af560e0039 6338:104ee21d765d
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2018 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog to manage the list of defined virtual
8 environments.
9 """
10
11 from __future__ import unicode_literals
12
13 from PyQt5.QtCore import pyqtSlot, Qt
14 from PyQt5.QtWidgets import QDialog, QTreeWidgetItem, QHeaderView
15
16 from .Ui_VirtualenvManagerDialog import Ui_VirtualenvManagerDialog
17
18
19 class VirtualenvManagerDialog(QDialog, Ui_VirtualenvManagerDialog):
20 """
21 Class implementing a dialog to manage the list of defined virtual
22 environments.
23 """
24 def __init__(self, manager, parent=None):
25 """
26 Constructor
27
28 @param manager reference to the virtual environment manager
29 @type VirtualenvManager
30 @param parent reference to the parent widget
31 @type QWidget
32 """
33 super(VirtualenvManagerDialog, self).__init__(parent)
34 self.setupUi(self)
35
36 self.__manager = manager
37
38 self.__populateVenvList()
39 self.__updateButtons()
40
41 self.venvList.header().setSortIndicator(0, Qt.AscendingOrder)
42
43 def __updateButtons(self):
44 """
45 Private method to update the enabled state of the various buttons.
46 """
47 selectedItemsCount = len(self.venvList.selectedItems())
48 topLevelItemCount = self.venvList.topLevelItemCount()
49
50 canBeDeleted = (
51 selectedItemsCount == 1 and
52 self.venvList.selectedItems()[0].text(0) != "<default>"
53 )
54 canAllBeDeleted = (
55 topLevelItemCount == 1 and
56 self.venvList.topLevelItem(0).text(0) != "<default>"
57 )
58
59 self.editButton.setEnabled(selectedItemsCount == 1)
60 self.removeButton.setEnabled(selectedItemsCount > 1 or canBeDeleted)
61 self.removeAllButton.setEnabled(
62 topLevelItemCount > 1 or canAllBeDeleted)
63 self.deleteButton.setEnabled(selectedItemsCount > 1 or canBeDeleted)
64 self.deleteAllButton.setEnabled(
65 topLevelItemCount > 1 or canAllBeDeleted)
66
67 @pyqtSlot()
68 def on_addButton_clicked(self):
69 """
70 Private slot to add a new entry.
71 """
72 from .VirtualenvAddEditDialog import VirtualenvAddEditDialog
73 dlg = VirtualenvAddEditDialog(self.__manager)
74 if dlg.exec_() == QDialog.Accepted:
75 venvName, venvDirectory, venvInterpreter = dlg.getData()
76
77 self.__manager.addVirtualEnv(venvName, venvDirectory,
78 venvInterpreter)
79
80 @pyqtSlot()
81 def on_newButton_clicked(self):
82 """
83 Private slot to create a new virtual environment.
84 """
85 self.__manager.createVirtualEnv()
86
87 @pyqtSlot()
88 def on_editButton_clicked(self):
89 """
90 Private slot to edit the selected entry.
91 """
92 selectedItem = self.venvList.selectedItems()[0]
93 oldVenvName = selectedItem.text(0)
94
95 from .VirtualenvAddEditDialog import VirtualenvAddEditDialog
96 dlg = VirtualenvAddEditDialog(self.__manager, selectedItem.text(0),
97 selectedItem.text(1),
98 selectedItem.text(2))
99 if dlg.exec_() == QDialog.Accepted:
100 venvName, venvDirectory, venvInterpreter = dlg.getData()
101 if venvName != oldVenvName:
102 self.__manager.renameVirtualEnv(
103 oldVenvName, venvName, venvDirectory, venvInterpreter)
104 else:
105 self.__manager.setVirtualEnv(
106 venvName, venvDirectory, venvInterpreter)
107
108 @pyqtSlot()
109 def on_removeButton_clicked(self):
110 """
111 Private slot to remove all selected entries from the list but keep
112 their directories.
113 """
114 selectedVenvs = []
115 for itm in self.venvList.selectedItems():
116 selectedVenvs.append(itm.text(0))
117
118 if selectedVenvs:
119 self.__manager.removeVirtualEnvs(selectedVenvs)
120
121 @pyqtSlot()
122 def on_removeAllButton_clicked(self):
123 """
124 Private slot to remove all entries from the list but keep their
125 directories.
126 """
127 venvNames = []
128 for index in range(self.venvList.topLevelItemCount()):
129 itm = self.venvList.topLevelItem(index)
130 venvNames.append(itm.text(0))
131
132 if venvNames:
133 self.__manager.removeVirtualEnvs(venvNames)
134
135 @pyqtSlot()
136 def on_deleteButton_clicked(self):
137 """
138 Private slot to delete all selected entries from the list and disk.
139 """
140 selectedVenvs = []
141 for itm in self.venvList.selectedItems():
142 selectedVenvs.append(itm.text(0))
143
144 if selectedVenvs:
145 self.__manager.deleteVirtualEnvs(selectedVenvs)
146
147 @pyqtSlot()
148 def on_deleteAllButton_clicked(self):
149 """
150 Private slot to delete all entries from the list and disk.
151 """
152 venvNames = []
153 for index in range(self.venvList.topLevelItemCount()):
154 itm = self.venvList.topLevelItem(index)
155 venvNames.append(itm.text(0))
156
157 if venvNames:
158 self.__manager.deleteVirtualEnvs(venvNames)
159
160 @pyqtSlot()
161 def on_venvList_itemSelectionChanged(self):
162 """
163 Private slot handling a change of the selected items.
164 """
165 self.__updateButtons()
166
167 @pyqtSlot()
168 def refresh(self):
169 """
170 Public slot to refresh the list of shown items.
171 """
172 # 1. remember selected entries
173 selectedVenvs = []
174 for itm in self.venvList.selectedItems():
175 selectedVenvs.append(itm.text(0))
176
177 # 2. clear the list
178 self.venvList.clear()
179
180 # 3. re-populate the list
181 self.__populateVenvList()
182
183 # 4. re-establish selection
184 for venvName in selectedVenvs:
185 itms = self.venvList.findItems(venvName, Qt.MatchExactly, 0)
186 if itms:
187 itms[0].setSelected(True)
188
189 def __populateVenvList(self):
190 """
191 Private method to populate the list of virtual environments.
192 """
193 environments = self.__manager.getEnvironmentEntries()
194 for venvName in environments:
195 QTreeWidgetItem(self.venvList, [
196 venvName,
197 environments[venvName][0],
198 environments[venvName][1],
199 ])
200
201 self.__resizeSections()
202
203 def __resizeSections(self):
204 """
205 Private method to resize the sections of the environment list to their
206 contents.
207 """
208 self.venvList.header().resizeSections(
209 QHeaderView.ResizeToContents)
210 self.venvList.header().setStretchLastSection(True)

eric ide

mercurial