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(