21 |
21 |
22 class CondaPackagesWidget(QWidget, Ui_CondaPackagesWidget): |
22 class CondaPackagesWidget(QWidget, Ui_CondaPackagesWidget): |
23 """ |
23 """ |
24 Class implementing the conda packages management widget. |
24 Class implementing the conda packages management widget. |
25 """ |
25 """ |
|
26 PackageVersionRole = Qt.UserRole + 1 |
|
27 PackageBuildRole = Qt.UserRole + 2 |
|
28 |
26 def __init__(self, conda, parent=None): |
29 def __init__(self, conda, parent=None): |
27 """ |
30 """ |
28 Constructor |
31 Constructor |
29 |
32 |
30 @param conda reference to the conda interface |
33 @param conda reference to the conda interface |
48 self.condaMenuButton.setShowMenuInside(True) |
51 self.condaMenuButton.setShowMenuInside(True) |
49 |
52 |
50 self.__initCondaMenu() |
53 self.__initCondaMenu() |
51 self.__populateEnvironments() |
54 self.__populateEnvironments() |
52 self.__updateActionButtons() |
55 self.__updateActionButtons() |
|
56 |
|
57 self.__conda.condaEnvironmentCreated.connect( |
|
58 self.on_refreshButton_clicked) |
|
59 self.__conda.condaEnvironmentRemoved.connect( |
|
60 self.on_refreshButton_clicked) |
53 |
61 |
54 def __populateEnvironments(self): |
62 def __populateEnvironments(self): |
55 """ |
63 """ |
56 Private method to get a list of environments and populate the selector. |
64 Private method to get a list of environments and populate the selector. |
57 """ |
65 """ |
128 # 1. populate with installed packages |
136 # 1. populate with installed packages |
129 installedPackages = \ |
137 installedPackages = \ |
130 self.__conda.getInstalledPackages(prefix=prefix) |
138 self.__conda.getInstalledPackages(prefix=prefix) |
131 for package, version, build in installedPackages: |
139 for package, version, build in installedPackages: |
132 itm = QTreeWidgetItem(self.packagesList, [package, version]) |
140 itm = QTreeWidgetItem(self.packagesList, [package, version]) |
133 itm.setToolTip(1, self.tr("Build: {0}").format(build)) |
141 itm.setData(1, self.PackageVersionRole, version) |
|
142 itm.setData(1, self.PackageBuildRole, build) |
134 |
143 |
135 # 2. update with update information |
144 # 2. update with update information |
136 updateablePackages = \ |
145 updateablePackages = \ |
137 self.__conda.getUpdateablePackages(prefix=prefix) |
146 self.__conda.getUpdateablePackages(prefix=prefix) |
138 for package, version, build in updateablePackages: |
147 for package, version, build in updateablePackages: |
139 items = self.packagesList.findItems( |
148 items = self.packagesList.findItems( |
140 package, Qt.MatchExactly | Qt.MatchCaseSensitive) |
149 package, Qt.MatchExactly | Qt.MatchCaseSensitive) |
141 if items: |
150 if items: |
142 items[0].setText(2, version) |
151 itm = items[0] |
143 items[0].setToolTip(2, self.tr("Build: {0}").format(build)) |
152 itm.setText(2, version) |
|
153 itm.setData(2, self.PackageVersionRole, version) |
|
154 itm.setData(2, self.PackageBuildRole, build) |
|
155 if itm.data(1, self.PackageVersionRole) == version: |
|
156 # build must be different, show in version display |
|
157 itm.setText(1, self.tr("{0} (Build: {1})").format( |
|
158 itm.data(1, self.PackageVersionRole), |
|
159 itm.data(1, self.PackageBuildRole), |
|
160 )) |
|
161 itm.setText(2, self.tr("{0} (Build: {1})").format( |
|
162 itm.data(2, self.PackageVersionRole), |
|
163 itm.data(2, self.PackageBuildRole), |
|
164 )) |
144 |
165 |
145 self.packagesList.sortItems(0, Qt.AscendingOrder) |
166 self.packagesList.sortItems(0, Qt.AscendingOrder) |
146 self.packagesList.setUpdatesEnabled(True) |
167 self.packagesList.setUpdatesEnabled(True) |
147 QApplication.restoreOverrideCursor() |
168 QApplication.restoreOverrideCursor() |
148 |
169 |
178 self.__updateActionButtons() |
199 self.__updateActionButtons() |
179 |
200 |
180 @pyqtSlot() |
201 @pyqtSlot() |
181 def on_upgradeButton_clicked(self): |
202 def on_upgradeButton_clicked(self): |
182 """ |
203 """ |
183 Slot documentation goes here. |
204 Private slot to upgrade selected packages of the selected environment. |
184 """ |
205 """ |
185 # TODO: not implemented yet |
206 packages = [itm.text(0) for itm in self.__selectedUpdateableItems()] |
186 raise NotImplementedError |
207 if packages: |
|
208 prefix = self.environmentsComboBox.itemData( |
|
209 self.environmentsComboBox.currentIndex()) |
|
210 ok = self.__conda.updatePackages(packages, prefix=prefix) |
|
211 if ok: |
|
212 self.on_refreshButton_clicked() |
187 |
213 |
188 @pyqtSlot() |
214 @pyqtSlot() |
189 def on_upgradeAllButton_clicked(self): |
215 def on_upgradeAllButton_clicked(self): |
190 """ |
216 """ |
191 Slot documentation goes here. |
217 Private slot to upgrade all packages of the selected environment. |
192 """ |
218 """ |
193 # TODO: not implemented yet |
219 prefix = self.environmentsComboBox.itemData( |
194 raise NotImplementedError |
220 self.environmentsComboBox.currentIndex()) |
|
221 ok = self.__conda.updateAllPackages(prefix=prefix) |
|
222 if ok: |
|
223 self.on_refreshButton_clicked() |
195 |
224 |
196 @pyqtSlot() |
225 @pyqtSlot() |
197 def on_uninstallButton_clicked(self): |
226 def on_uninstallButton_clicked(self): |
198 """ |
227 """ |
199 Slot documentation goes here. |
228 Private slot to remove selected packages of the selected environment. |
200 """ |
229 """ |
201 # TODO: not implemented yet |
230 packages = [itm.text(0) for itm in self.packagesList.selectedItems()] |
202 raise NotImplementedError |
231 if packages: |
|
232 prefix = self.environmentsComboBox.itemData( |
|
233 self.environmentsComboBox.currentIndex()) |
|
234 ok = self.__conda.uninstallPackages(packages, prefix=prefix) |
|
235 if ok: |
|
236 self.on_refreshButton_clicked() |