src/eric7/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py

branch
eric7
changeset 11068
15f0385e0471
parent 10683
779cda568acb
child 11082
58838580274e
diff -r 67b92e2cb719 -r 15f0385e0471 src/eric7/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py
--- a/src/eric7/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py	Sun Dec 01 14:55:31 2024 +0100
+++ b/src/eric7/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py	Sun Dec 01 18:17:51 2024 +0100
@@ -52,7 +52,7 @@
         from .LargefilesExtension.ProjectBrowserHelper import (
             LargefilesProjectBrowserHelper,
         )
-        from .ShelveExtension.ProjectBrowserHelper import ShelveProjectBrowserHelper
+        from .ShelveBuiltin.ProjectBrowserHelper import ShelveProjectBrowserHelper
 
         super().__init__(
             vcsObject,
@@ -63,24 +63,47 @@
             name,
         )
 
-        # instantiate the extensions
-        self.__extensions = {
+        # instantiate interfaces for additional built-in functions
+        self.__builtins = {
             "shelve": ShelveProjectBrowserHelper(
                 vcsObject, browserObject, projectObject
             ),
+        }
+        self.__builtinMenuTitles = {
+            self.__builtins[b].menuTitle(): b for b in self.__builtins
+        }
+        self.__builtinMenus = {
+            b: self.__builtins[b].initMenus() for b in self.__builtins
+        }
+
+        # instantiate the extensions
+        self.__extensions = {
             "largefiles": LargefilesProjectBrowserHelper(
                 vcsObject, browserObject, projectObject
             ),
         }
+        self.__extensionMenuTitles = {
+            self.__extensions[e].menuTitle(): e for e in self.__extensions
+        }
+        self.__extensionMenus = {
+            e: self.__extensions[e].initMenus() for e in self.__extensions
+        }
 
-        self.__extensionMenuTitles = {}
-        for extension in self.__extensions:
-            self.__extensionMenuTitles[self.__extensions[extension].menuTitle()] = (
-                extension
-            )
-        self.__extensionMenus = {}
-        for extension in self.__extensions:
-            self.__extensionMenus[extension] = self.__extensions[extension].initMenus()
+    def __showBuiltinsMenu(self, key, controlled):
+        """
+        Private slot showing the 'Other Functions' menu.
+
+        @param key menu key (one of 'mainMenu', 'multiMenu', 'backMenu', 'dirMenu'
+            or 'dirMultiMenu')
+        @type str
+        @param controlled flag indicating to show the menu for a
+            version controlled entry or a non-version controlled entry
+        @type bool
+        """
+        for builtinName in self.__builtinMenus:
+            if key in self.__builtinMenus[builtinName]:
+                # adjust individual extension menu entries
+                self.__builtins[builtinName].showMenu(key, controlled)
 
     def __showExtensionMenu(self, key, controlled):
         """
@@ -100,7 +123,7 @@
                 )
                 if self.__extensionMenus[extensionName][key].isEnabled():
                     # adjust individual extension menu entries
-                    self.__extensions[extensionName].showExtensionMenu(key, controlled)
+                    self.__extensions[extensionName].showMenu(key, controlled)
                 if (
                     not self.__extensionMenus[extensionName][key].isEnabled()
                     and self.__extensionMenus[extensionName][key].isTearOffMenuVisible()
@@ -265,6 +288,32 @@
     ## Private menu generation methods below
     ###########################################################################
 
+    def __addBuiltinsMenu(self, menu, key):
+        """
+        Private method to add a 'Other Functions' menu entry.
+
+        @param menu menu to add it to
+        @type QMenu
+        @param key menu key (one of 'mainMenu', 'multiMenu', 'backMenu', 'dirMenu'
+            or 'dirMultiMenu')
+        @type str
+        @return reference to the menu action
+        @rtype QAction
+        """
+        act = None
+        if key in ["mainMenu", "multiMenu", "backMenu", "dirMenu", "dirMultiMenu"]:
+            builtinsMenu = QMenu(self.tr("Other Functions"), menu)
+            builtinsMenu.setTearOffEnabled(True)
+            for othersMenuTitle in sorted(self.__builtinMenuTitles):
+                builtinName = self.__builtinMenuTitles[othersMenuTitle]
+                if key in self.__builtinMenus[builtinName]:
+                    builtinsMenu.addMenu(self.__builtinMenus[builtinName][key])
+            if not builtinsMenu.isEmpty():
+                if not menu.isEmpty():
+                    menu.addSeparator()
+                act = menu.addMenu(builtinsMenu)
+        return act
+
     def __addExtensionsMenu(self, menu, key):
         """
         Private method to add an extension menu entry.
@@ -325,6 +374,7 @@
             self._VCSCommit,
         )
         self.vcsMenuActions.append(act)
+        self.__addBuiltinsMenu(menu, "mainMenu")
         self.__addExtensionsMenu(menu, "mainMenu")
         menu.addSeparator()
         act = menu.addAction(
@@ -468,6 +518,7 @@
             self._VCSCommit,
         )
         self.vcsMultiMenuActions.append(act)
+        self.__addBuiltinsMenu(menu, "multiMenu")
         self.__addExtensionsMenu(menu, "multiMenu")
         menu.addSeparator()
         act = menu.addAction(
@@ -621,6 +672,7 @@
             self._VCSCommit,
         )
         self.vcsDirMenuActions.append(act)
+        self.__addBuiltinsMenu(menu, "dirMenu")
         self.__addExtensionsMenu(menu, "dirMenu")
         menu.addSeparator()
         act = menu.addAction(
@@ -735,6 +787,7 @@
             self._VCSCommit,
         )
         self.vcsDirMultiMenuActions.append(act)
+        self.__addBuiltinsMenu(menu, "dirMultiMenu")
         self.__addExtensionsMenu(menu, "dirMultiMenu")
         menu.addSeparator()
         act = menu.addAction(

eric ide

mercurial