--- 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_()