eric7/Project/Project.py

branch
eric7
changeset 9117
c6afba2049cf
parent 9092
043848f65726
child 9125
3d2411181b3c
--- a/eric7/Project/Project.py	Fri Jun 03 12:09:02 2022 +0200
+++ b/eric7/Project/Project.py	Fri Jun 03 19:54:57 2022 +0200
@@ -2341,6 +2341,7 @@
                 self.pdata["MAKEPARAMS"]["MakeEnabled"])
             self.menuMakeAct.setEnabled(
                 self.pdata["MAKEPARAMS"]["MakeEnabled"])
+            self.menuOtherToolsAct.setEnabled(True)
             
             self.projectAboutToBeCreated.emit()
             
@@ -3033,6 +3034,7 @@
                         self.pdata["MAKEPARAMS"]["MakeEnabled"])
                     self.menuMakeAct.setEnabled(
                         self.pdata["MAKEPARAMS"]["MakeEnabled"])
+                    self.menuOtherToolsAct.setEnabled(True)
                     
                     # open a project debugger properties file being quiet
                     # about errors
@@ -3289,6 +3291,7 @@
         self.pluginGrp.setEnabled(False)
         self.makeGrp.setEnabled(False)
         self.menuMakeAct.setEnabled(False)
+        self.menuOtherToolsAct.setEnabled(False)
         
         self.__model.projectClosed()
         self.projectClosedHooks.emit()
@@ -4386,6 +4389,21 @@
         self.makeTestAct.triggered.connect(
             lambda: self.__executeMake(questionOnly=True))
         self.actions.append(self.makeTestAct)
+        
+        self.createSBOMAct = EricAction(
+            self.tr('Create SBOM File'),
+            self.tr('Create &SBOM File'), 0, 0,
+            self, 'project_create_sbom')
+        self.createSBOMAct.setStatusTip(
+            self.tr("Create a SBOM file of the project dependencies."))
+        self.createSBOMAct.setWhatsThis(self.tr(
+            """<b>Create SBOM File</b>"""
+            """<p>This allows the creation of a SBOM file of the project"""
+            """ dependencies. This may be based on various input sources"""
+            """ and will be saved as a CycloneDX SBOM file.</p>"""
+        ))
+        self.createSBOMAct.triggered.connect(self.__createSBOMFile)
+        self.actions.append(self.createSBOMAct)
 
         self.closeAct.setEnabled(False)
         self.saveAct.setEnabled(False)
@@ -4424,6 +4442,7 @@
         self.apidocMenu = QMenu(self.tr('Source &Documentation'), toolsMenu)
         self.apidocMenu.setTearOffEnabled(True)
         self.makeMenu = QMenu(self.tr('Make'), toolsMenu)
+        self.othersMenu = QMenu(self.tr('Other Tools'), toolsMenu)
         
         self.__menus = {
             "Main": menu,
@@ -4437,6 +4456,7 @@
             "Debugger": self.debuggerMenu,
             "Packagers": self.packagersMenu,
             "Make": self.makeMenu,
+            "OtherTools": self.othersMenu,
         }
         
         # connect the aboutToShow signals
@@ -4451,6 +4471,7 @@
         self.sessionMenu.aboutToShow.connect(self.__showContextMenuSession)
         self.debuggerMenu.aboutToShow.connect(self.__showContextMenuDebugger)
         self.makeMenu.aboutToShow.connect(self.__showContextMenuMake)
+        self.othersMenu.aboutToShow.connect(self.__showContextMenuOthers)
         menu.aboutToShow.connect(self.__showMenu)
         
         # build the show menu
@@ -4483,6 +4504,10 @@
         self.makeMenu.addActions(self.makeGrp.actions())
         self.makeMenu.addSeparator()
         
+        # build the 'Other Tools' menu
+        self.othersMenu.setTearOffEnabled(True)
+        self.othersMenu.addAction(self.createSBOMAct)
+        
         # build the project main menu
         menu.setTearOffEnabled(True)
         menu.addActions(self.actGrp1.actions())
@@ -4519,6 +4544,8 @@
         self.menuApidocAct = toolsMenu.addMenu(self.apidocMenu)
         toolsMenu.addSeparator()
         self.menuPackagersAct = toolsMenu.addMenu(self.packagersMenu)
+        toolsMenu.addSeparator()
+        self.menuOtherToolsAct = toolsMenu.addMenu(self.othersMenu)
         
         self.menuCheckAct.setEnabled(False)
         self.menuShowAct.setEnabled(False)
@@ -4528,6 +4555,7 @@
         self.menuApidocAct.setEnabled(False)
         self.menuPackagersAct.setEnabled(False)
         self.menuMakeAct.setEnabled(False)
+        self.menuOtherToolsAct.setEnabled(False)
         
         self.__menu = menu
         self.__toolsMenu = toolsMenu
@@ -5914,6 +5942,25 @@
         @rtype str
         """
         return self.pdata["DOCSTRING"]
+    
+    #########################################################################
+    ## Below are methods implementing the 'SBOM' support
+    #########################################################################
+     
+    def __showContextMenuOthers(self):
+        """
+        Private slot called before the 'Other Tools' menu is shown.
+        """
+        self.showMenu.emit("OtherTools", self.othersMenu)
+   
+    @pyqtSlot()
+    def __createSBOMFile(self):
+        """
+        Private slot to create a SBOM file of the project dependencies.
+        """
+        import CycloneDXInterface
+        
+        CycloneDXInterface.createCycloneDXFile("<project>")
 
 #
 # eflag: noqa = M601

eric ide

mercurial