diff -r 8cf1c3851b5c -r d792e054cde2 CondaInterface/CondaPackagesWidget.py --- a/CondaInterface/CondaPackagesWidget.py Wed Feb 06 19:52:33 2019 +0100 +++ b/CondaInterface/CondaPackagesWidget.py Thu Feb 07 18:54:38 2019 +0100 @@ -23,6 +23,9 @@ """ Class implementing the conda packages management widget. """ + PackageVersionRole = Qt.UserRole + 1 + PackageBuildRole = Qt.UserRole + 2 + def __init__(self, conda, parent=None): """ Constructor @@ -50,6 +53,11 @@ self.__initCondaMenu() self.__populateEnvironments() self.__updateActionButtons() + + self.__conda.condaEnvironmentCreated.connect( + self.on_refreshButton_clicked) + self.__conda.condaEnvironmentRemoved.connect( + self.on_refreshButton_clicked) def __populateEnvironments(self): """ @@ -130,7 +138,8 @@ self.__conda.getInstalledPackages(prefix=prefix) for package, version, build in installedPackages: itm = QTreeWidgetItem(self.packagesList, [package, version]) - itm.setToolTip(1, self.tr("Build: {0}").format(build)) + itm.setData(1, self.PackageVersionRole, version) + itm.setData(1, self.PackageBuildRole, build) # 2. update with update information updateablePackages = \ @@ -139,8 +148,20 @@ items = self.packagesList.findItems( package, Qt.MatchExactly | Qt.MatchCaseSensitive) if items: - items[0].setText(2, version) - items[0].setToolTip(2, self.tr("Build: {0}").format(build)) + itm = items[0] + itm.setText(2, version) + itm.setData(2, self.PackageVersionRole, version) + itm.setData(2, self.PackageBuildRole, build) + if itm.data(1, self.PackageVersionRole) == version: + # build must be different, show in version display + itm.setText(1, self.tr("{0} (Build: {1})").format( + itm.data(1, self.PackageVersionRole), + itm.data(1, self.PackageBuildRole), + )) + itm.setText(2, self.tr("{0} (Build: {1})").format( + itm.data(2, self.PackageVersionRole), + itm.data(2, self.PackageBuildRole), + )) self.packagesList.sortItems(0, Qt.AscendingOrder) self.packagesList.setUpdatesEnabled(True) @@ -180,23 +201,36 @@ @pyqtSlot() def on_upgradeButton_clicked(self): """ - Slot documentation goes here. + Private slot to upgrade selected packages of the selected environment. """ - # TODO: not implemented yet - raise NotImplementedError + packages = [itm.text(0) for itm in self.__selectedUpdateableItems()] + if packages: + prefix = self.environmentsComboBox.itemData( + self.environmentsComboBox.currentIndex()) + ok = self.__conda.updatePackages(packages, prefix=prefix) + if ok: + self.on_refreshButton_clicked() @pyqtSlot() def on_upgradeAllButton_clicked(self): """ - Slot documentation goes here. + Private slot to upgrade all packages of the selected environment. """ - # TODO: not implemented yet - raise NotImplementedError + prefix = self.environmentsComboBox.itemData( + self.environmentsComboBox.currentIndex()) + ok = self.__conda.updateAllPackages(prefix=prefix) + if ok: + self.on_refreshButton_clicked() @pyqtSlot() def on_uninstallButton_clicked(self): """ - Slot documentation goes here. + Private slot to remove selected packages of the selected environment. """ - # TODO: not implemented yet - raise NotImplementedError + packages = [itm.text(0) for itm in self.packagesList.selectedItems()] + if packages: + prefix = self.environmentsComboBox.itemData( + self.environmentsComboBox.currentIndex()) + ok = self.__conda.uninstallPackages(packages, prefix=prefix) + if ok: + self.on_refreshButton_clicked()