CondaInterface/CondaPackagesWidget.py

branch
conda
changeset 6706
d792e054cde2
parent 6705
8cf1c3851b5c
child 6712
91fa67e8ebbc
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()

eric ide

mercurial