src/eric7/PipInterface/PipPackagesWidget.py

branch
eric7
changeset 9243
73c7abe824f3
parent 9234
97bdad5be46d
child 9264
18a7312cfdb3
child 9413
80c06d472826
--- a/src/eric7/PipInterface/PipPackagesWidget.py	Sun Jul 17 17:46:51 2022 +0200
+++ b/src/eric7/PipInterface/PipPackagesWidget.py	Sun Jul 17 18:47:23 2022 +0200
@@ -1145,36 +1145,85 @@
         Private method to create the super menu and attach it to the super
         menu button.
         """
-        self.__pipMenu = QMenu()
-        self.__installPipAct = self.__pipMenu.addAction(
+        ###################################################################
+        ## Menu with pip related actions
+        ###################################################################
+
+        self.__pipSubmenu = QMenu(self.tr("Pip"))
+        self.__installPipAct = self.__pipSubmenu.addAction(
             self.tr("Install Pip"), self.__installPip
         )
-        self.__installPipUserAct = self.__pipMenu.addAction(
+        self.__installPipUserAct = self.__pipSubmenu.addAction(
             self.tr("Install Pip to User-Site"), self.__installPipUser
         )
-        self.__repairPipAct = self.__pipMenu.addAction(
+        self.__repairPipAct = self.__pipSubmenu.addAction(
             self.tr("Repair Pip"), self.__repairPip
         )
-        self.__pipMenu.addSeparator()
-        self.__installPackagesAct = self.__pipMenu.addAction(
+
+        ###################################################################
+        ## Menu with install related actions
+        ###################################################################
+
+        self.__installSubmenu = QMenu(self.tr("Install"))
+        self.__installPackagesAct = self.__installSubmenu.addAction(
             self.tr("Install Packages"), self.__installPackages
         )
-        self.__installLocalPackageAct = self.__pipMenu.addAction(
+        self.__installLocalPackageAct = self.__installSubmenu.addAction(
             self.tr("Install Local Package"), self.__installLocalPackage
         )
-        self.__pipMenu.addSeparator()
-        self.__installRequirementsAct = self.__pipMenu.addAction(
+        self.__reinstallPackagesAct = self.__installSubmenu.addAction(
+            self.tr("Re-Install Selected Packages"), self.__reinstallPackages
+        )
+
+        ###################################################################
+        ## Menu for requirements and constraints management
+        ###################################################################
+
+        self.__requirementsSubenu = QMenu(self.tr("Requirements/Constraints"))
+        self.__installRequirementsAct = self.__requirementsSubenu.addAction(
             self.tr("Install Requirements"), self.__installRequirements
         )
-        self.__reinstallPackagesAct = self.__pipMenu.addAction(
-            self.tr("Re-Install Selected Packages"), self.__reinstallPackages
-        )
-        self.__uninstallRequirementsAct = self.__pipMenu.addAction(
+        self.__uninstallRequirementsAct = self.__requirementsSubenu.addAction(
             self.tr("Uninstall Requirements"), self.__uninstallRequirements
         )
-        self.__generateRequirementsAct = self.__pipMenu.addAction(
+        self.__generateRequirementsAct = self.__requirementsSubenu.addAction(
             self.tr("Generate Requirements..."), self.__generateRequirements
         )
+        self.__requirementsSubenu.addSeparator()
+        self.__generateConstraintsAct = self.__requirementsSubenu.addAction(
+            self.tr("Generate Constraints..."), self.__generateConstraints
+        )
+
+        ###################################################################
+        ## Menu for requirements and constraints management
+        ###################################################################
+
+        self.__cacheSubmenu = QMenu(self.tr("Cache"))
+        self.__cacheInfoAct = self.__cacheSubmenu.addAction(
+            self.tr("Show Cache Info..."), self.__showCacheInfo
+        )
+        self.__cacheShowListAct = self.__cacheSubmenu.addAction(
+            self.tr("Show Cached Files..."), self.__showCacheList
+        )
+        self.__cacheRemoveAct = self.__cacheSubmenu.addAction(
+            self.tr("Remove Cached Files..."), self.__removeCachedFiles
+        )
+        self.__cachePurgeAct = self.__cacheSubmenu.addAction(
+            self.tr("Purge Cache..."), self.__purgeCache
+        )
+
+        ###################################################################
+        ## Main menu
+        ###################################################################
+
+        self.__pipMenu = QMenu()
+        self.__pipSubmenuAct = self.__pipMenu.addMenu(self.__pipSubmenu)
+        self.__pipMenu.addSeparator()
+        self.__installSubmenuAct = self.__pipMenu.addMenu(self.__installSubmenu)
+        self.__pipMenu.addSeparator()
+        self.__requirementsSubmenuAct = self.__pipMenu.addMenu(
+            self.__requirementsSubenu
+        )
         self.__pipMenu.addSeparator()
         self.__showLicensesDialogAct = self.__pipMenu.addAction(
             self.tr("Show Licenses..."), self.__showLicensesDialog
@@ -1192,18 +1241,7 @@
             self.tr("Create SBOM file"), self.__createSBOMFile
         )
         self.__pipMenu.addSeparator()
-        self.__cacheInfoAct = self.__pipMenu.addAction(
-            self.tr("Show Cache Info..."), self.__showCacheInfo
-        )
-        self.__cacheShowListAct = self.__pipMenu.addAction(
-            self.tr("Show Cached Files..."), self.__showCacheList
-        )
-        self.__cacheRemoveAct = self.__pipMenu.addAction(
-            self.tr("Remove Cached Files..."), self.__removeCachedFiles
-        )
-        self.__cachePurgeAct = self.__pipMenu.addAction(
-            self.tr("Purge Cache..."), self.__purgeCache
-        )
+        self.__cacheSubmenuAct = self.__pipMenu.addMenu(self.__cacheSubmenu)
         self.__pipMenu.addSeparator()
         # editUserConfigAct
         self.__pipMenu.addAction(
@@ -1229,22 +1267,16 @@
         enablePip = self.__isPipAvailable()
         enablePipCache = self.__availablePipVersion() >= (20, 1, 0)
 
+        self.__pipSubmenuAct.setEnabled(enable)
         self.__installPipAct.setEnabled(not enablePip)
         self.__installPipUserAct.setEnabled(not enablePip)
         self.__repairPipAct.setEnabled(enablePip)
 
-        self.__installPackagesAct.setEnabled(enablePip)
-        self.__installLocalPackageAct.setEnabled(enablePip)
-        self.__reinstallPackagesAct.setEnabled(enablePip)
+        self.__installSubmenu.setEnabled(enablePip)
 
-        self.__installRequirementsAct.setEnabled(enablePip)
-        self.__uninstallRequirementsAct.setEnabled(enablePip)
-        self.__generateRequirementsAct.setEnabled(enablePip)
+        self.__requirementsSubmenuAct.setEnabled(enablePip)
 
-        self.__cacheInfoAct.setEnabled(enablePipCache)
-        self.__cacheShowListAct.setEnabled(enablePipCache)
-        self.__cacheRemoveAct.setEnabled(enablePipCache)
-        self.__cachePurgeAct.setEnabled(enablePipCache)
+        self.__cacheSubmenuAct.setEnabled(enablePipCache)
 
         self.__editVirtualenvConfigAct.setEnabled(enable)
 
@@ -1358,9 +1390,26 @@
         """
         venvName = self.environmentsComboBox.currentText()
         if venvName:
-            from .PipFreezeDialog import PipFreezeDialog
+            from .PipFreezeDialog import PipFreezeDialog, PipFreezeDialogModes
+
+            self.__freezeDialog = PipFreezeDialog(
+                self.__pip, mode=PipFreezeDialogModes.Requirements, parent=self
+            )
+            self.__freezeDialog.show()
+            self.__freezeDialog.start(venvName)
 
-            self.__freezeDialog = PipFreezeDialog(self.__pip, self)
+    @pyqtSlot()
+    def __generateConstraints(self):
+        """
+        Private slot to generate the contents for a constraints file.
+        """
+        venvName = self.environmentsComboBox.currentText()
+        if venvName:
+            from .PipFreezeDialog import PipFreezeDialog, PipFreezeDialogModes
+
+            self.__freezeDialog = PipFreezeDialog(
+                self.__pip, mode=PipFreezeDialogModes.Constraints, parent=self
+            )
             self.__freezeDialog.show()
             self.__freezeDialog.start(venvName)
 

eric ide

mercurial