--- a/PipxInterface/PipxWidget.py Mon Jul 29 11:58:31 2024 +0200 +++ b/PipxInterface/PipxWidget.py Tue Jul 30 17:45:46 2024 +0200 @@ -23,6 +23,7 @@ from .Pipx import Pipx from .PipxAppStartDialog import PipxAppStartDialog +from .PipxDependenciesDialog import PipxDependenciesDialog from .Ui_PipxWidget import Ui_PipxWidget @@ -146,7 +147,7 @@ ) ################################################################### - ## Menu with upinstall related actions + ## Menu with uninstall related actions ################################################################### self.__uninstallSubmenu = QMenu(self.tr("Uninstall")) @@ -158,6 +159,25 @@ ) ################################################################### + ## Menu with dependencies related actions + ################################################################### + + self.__dependenciseSubmenu = QMenu(self.tr("Dependencies")) + self.__showDependenciesAct = self.__dependenciseSubmenu.addAction( + self.tr("Show All Dependencies"), self.__showDependencies + ) + self.__showOutdatedDependenciesAct = self.__dependenciseSubmenu.addAction( + self.tr("Show Outdated Dependencies"), self.__showOutdatedDependencies + ) + self.__showUptodateDependenciesAct = self.__dependenciseSubmenu.addAction( + self.tr("Show Up-to-date Dependencies"), self.__showUptodateDependencies + ) + self.__dependenciseSubmenu.addSeparator() + self.__upgradeDependenciesAct = self.__dependenciseSubmenu.addAction( + self.tr("Upgrade Dependencies"), self.__upgradeDependencies + ) + + ################################################################### ## Main menu ################################################################### @@ -168,6 +188,10 @@ self.__pipxMenu.addSeparator() self.__uninstallSubmenuAct = self.__pipxMenu.addMenu(self.__uninstallSubmenu) self.__pipxMenu.addSeparator() + self.__dependenciseSubmenuAct = self.__pipxMenu.addMenu( + self.__dependenciseSubmenu + ) + self.__pipxMenu.addSeparator() self.__pipxMenu.addAction( self.tr("Standalone Interpreters"), self.__showInterpreters ) @@ -467,6 +491,62 @@ """ self.__pipx.ensurePath() + @pyqtSlot() + def __showDependencies(self): + """ + Private slot to show a dialog with the dependencies of the selected package. + """ + package = self.__selectedPackages()[0] + dependencies = self.__pipx.getAllPackageDependencies(package=package) + + dlg = PipxDependenciesDialog( + package=package, + dependencies=dependencies, + mode=PipxDependenciesDialog.AllMode, + ) + dlg.exec() + + @pyqtSlot() + def __showOutdatedDependencies(self): + """ + Private slot to show a dialog with the outdated dependencies of the selected + package. + """ + package = self.__selectedPackages()[0] + dependencies = self.__pipx.getOutdatedPackageDependencies(package=package) + + dlg = PipxDependenciesDialog( + package=package, + dependencies=dependencies, + mode=PipxDependenciesDialog.OutdatedMode, + ) + dlg.exec() + + @pyqtSlot() + def __showUptodateDependencies(self): + """ + Private slot to show a dialog with the up-to-date dependencies of the selected + package. + """ + package = self.__selectedPackages()[0] + dependencies = self.__pipx.getUptodatePackageDependencies(package=package) + + dlg = PipxDependenciesDialog( + package=package, + dependencies=dependencies, + mode=PipxDependenciesDialog.UptodateMode, + ) + dlg.exec() + + @pyqtSlot() + def __upgradeDependencies(self): + """ + Private slot to upgrade the outdated dependencies of the selected package. + """ + package = self.__selectedPackages()[0] + self.__pipx.upgradePackageDependencies(package=package) + self.on_refreshButton_clicked() + ####################################################################### ## Main widget related methods below ####################################################################### @@ -632,10 +712,25 @@ Private slot to handle a change of selected packages and apps. """ selectedPackages = self.__selectedPackages() + selectedPackageItems = self.__selectedPackageItems() self.upgradeButton.setEnabled(bool(selectedPackages)) self.uninstallButton.setEnabled(len(selectedPackages) == 1) + self.__dependenciseSubmenuAct.setEnabled(len(selectedPackages) == 1) + self.__showOutdatedDependenciesAct.setEnabled( + len(selectedPackages) == 1 + and bool( + selectedPackageItems[0].data(0, PipxWidget.OutdatedDependenciesRole) + ) + ) + self.__upgradeDependenciesAct.setEnabled( + len(selectedPackages) == 1 + and bool( + selectedPackageItems[0].data(0, PipxWidget.OutdatedDependenciesRole) + ) + ) + def __selectedPackages(self): """ Private method to determine the list of selected packages.