--- a/PipxInterface/PipxWidget.py Tue Dec 10 17:43:42 2024 +0100 +++ b/PipxInterface/PipxWidget.py Tue Dec 10 17:50:48 2024 +0100 @@ -65,17 +65,29 @@ else: self.layout().setContentsMargins(0, 0, 0, 0) + iconSuffix = "-dark" if ericApp().usesDarkPalette() else "-light" + self.pipxMenuButton.setIcon(EricPixmapCache.getIcon("superMenu")) self.refreshButton.setIcon(EricPixmapCache.getIcon("reload")) self.installButton.setIcon(EricPixmapCache.getIcon("plus")) self.outdatedButton.setIcon(EricPixmapCache.getIcon("question")) self.upgradeButton.setIcon(EricPixmapCache.getIcon("upgrade")) self.uninstallButton.setIcon(EricPixmapCache.getIcon("minus")) + self.showOutdatedDependenciesButton.setIcon( + EricPixmapCache.getIcon( + os.path.join( + "PipxInterface", "icons", "dependency{0}".format(iconSuffix) + ) + ) + ) self.installButton.clicked.connect(self.__installPackages) self.outdatedButton.clicked.connect(self.__checkOutdatedPackages) self.upgradeButton.clicked.connect(self.__upgradePackage) self.uninstallButton.clicked.connect(self.__uninstallPackage) + self.showOutdatedDependenciesButton.clicked.connect( + self.__showOutdatedDependencies + ) self.pipxMenuButton.setShowMenuInside(True) @@ -189,7 +201,7 @@ ) self.__dependenciseSubmenu.addSeparator() self.__upgradeDependenciesAct = self.__dependenciseSubmenu.addAction( - self.tr("Upgrade Dependencies"), self.__upgradeDependencies + self.tr("Upgrade All Dependencies"), self.__upgradeDependencies ) ################################################################### @@ -593,9 +605,14 @@ parent=self, ) result = dlg.exec() - if result == PipxDependenciesDialog.UpgradeDependenciesAction: - # 'Upgrade Dependencies' clicked - self.__upgradeDependencies() + if result == PipxDependenciesDialog.UpgradeAllDependenciesAction: + # 'Upgrade All Dependencies' clicked + dependencies = dlg.getDependencies(selectedOnly=False) + self.__upgradeDependencies(dependencies=dependencies) + elif result == PipxDependenciesDialog.UpgradeSelectedDependenciesAction: + # 'Upgrade Selected Dependencies' clicked + dependencies = dlg.getDependencies(selectedOnly=True) + self.__upgradeDependencies(dependencies=dependencies) @pyqtSlot() def __showUptodateDependencies(self): @@ -616,12 +633,18 @@ dlg.exec() @pyqtSlot() - def __upgradeDependencies(self): + def __upgradeDependencies(self, dependencies=None): """ Private slot to upgrade the outdated dependencies of the selected package. + + @param dependencies list of dependencies to be upgraded or None to + upgrade all outdated dependencies (defaults to None) + @type list of str or None (optional) """ package = self.__selectedPackages()[0] - self.__pipx.upgradePackageDependencies(package=package) + self.__pipx.upgradePackageDependencies( + package=package, dependencies=dependencies + ) packageItem = self.__getItemForPackage(package) if packageItem: self.__checkPackageOutdated(packageItem) @@ -828,6 +851,13 @@ ) self.uninstallButton.setEnabled(len(selectedPackageItems) == 1) + self.showOutdatedDependenciesButton.setEnabled( + len(selectedPackageItems) == 1 + and bool( + selectedPackageItems[0].data(0, PipxWidget.OutdatedDependenciesRole) + ) + ) + def __selectedPackages(self): """ Private method to determine the list of selected packages.