PipxInterface/PipxWidget.py

changeset 49
ec976c5b88ae
parent 47
b898d1a77ab0
child 59
a5e7feb2310c
--- 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.

eric ide

mercurial