eric6/PipInterface/PipPackageDetailsDialog.py

changeset 8090
c53117374255
parent 8086
eff504bb6dec
child 8143
2c730d5fd177
--- a/eric6/PipInterface/PipPackageDetailsDialog.py	Tue Feb 09 11:39:58 2021 +0100
+++ b/eric6/PipInterface/PipPackageDetailsDialog.py	Tue Feb 09 17:51:16 2021 +0100
@@ -7,32 +7,48 @@
 Module implementing a dialog to show details about a package.
 """
 
-from PyQt5.QtCore import Qt, QLocale
+from PyQt5.QtCore import pyqtSlot, Qt, QLocale
 from PyQt5.QtWidgets import (
-    QDialog, QDialogButtonBox, QTreeWidgetItem, QLabel, QHeaderView
+    QDialog, QDialogButtonBox, QTreeWidgetItem, QLabel, QHeaderView,
+    QAbstractButton
 )
 
 from .Ui_PipPackageDetailsDialog import Ui_PipPackageDetailsDialog
 
 
-# TODO: add some 'convenience' buttons (see issue369)
 class PipPackageDetailsDialog(QDialog, Ui_PipPackageDetailsDialog):
     """
     Class implementing a dialog to show details about a package.
     """
-    def __init__(self, detailsData, parent=None):
+    ButtonInstall = 1
+    ButtonRemove = 2
+    ButtonUpgrade = 4
+    
+    def __init__(self, detailsData, buttonsMode=0, parent=None):
         """
         Constructor
         
         @param detailsData package details
         @type dict
-        @param parent reference to the parent widget
-        @type QWidget
+        @param buttonsMode flags telling which convenience buttons to enable
+            (defaults to 0)
+        @type int (optional)
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
         """
         super(PipPackageDetailsDialog, self).__init__(parent)
         self.setupUi(self)
         self.setWindowFlags(Qt.Window)
         
+        self.__pipWidget = parent
+        
+        self.__installButton = self.buttonBox.addButton(
+            self.tr("Install"), QDialogButtonBox.ActionRole)
+        self.__removeButton = self.buttonBox.addButton(
+            self.tr("Uninstall"), QDialogButtonBox.ActionRole)
+        self.__upgradeButton = self.buttonBox.addButton(
+            self.tr("Upgrade"), QDialogButtonBox.ActionRole)
+        
         self.__locale = QLocale()
         self.__packageTypeMap = {
             "sdist": self.tr("Source"),
@@ -44,10 +60,15 @@
             "bdist_deb": self.tr("Unix Installer"),
             "bdist_dumb": self.tr("Archive"),
         }
+        self.__packageName = detailsData["info"]["name"]
         
         self.__populateDetails(detailsData["info"])
         self.__populateDownloadUrls(detailsData["urls"])
         self.__populateRequiresProvides(detailsData["info"])
+        
+        self.__installButton.setEnabled(buttonsMode & self.ButtonInstall)
+        self.__removeButton.setEnabled(buttonsMode & self.ButtonRemove)
+        self.__upgradeButton.setEnabled(buttonsMode & self.ButtonUpgrade)
     
     def __populateDetails(self, detailsData):
         """
@@ -216,3 +237,30 @@
             size /= 1024 * 1024 * 1024
             unit = self.tr("GB")
         return self.tr("{0:.1f} {1}", "value, unit").format(size, unit)
+    
+    @pyqtSlot(QAbstractButton)
+    def on_buttonBox_clicked(self, button):
+        """
+        Private slot handling the user pressing an action button.
+        
+        @param button button activated by the user
+        @type QAbstractButton
+        """
+        if button is self.__installButton:
+            self.__pipWidget.executeInstallPackages([self.__packageName])
+            self.__installButton.setEnabled(False)
+            self.__removeButton.setEnabled(True)
+            self.__upgradeButton.setEnabled(False)
+            self.raise_()
+        elif button is self.__removeButton:
+            self.__pipWidget.executeUninstallPackages([self.__packageName])
+            self.__installButton.setEnabled(True)
+            self.__removeButton.setEnabled(False)
+            self.__upgradeButton.setEnabled(False)
+            self.raise_()
+        elif button is self.__upgradeButton:
+            self.__pipWidget.executeUpgradePackages([self.__packageName])
+            self.__installButton.setEnabled(False)
+            self.__removeButton.setEnabled(True)
+            self.__upgradeButton.setEnabled(False)
+            self.raise_()

eric ide

mercurial