--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectBrowserHelper.py Mon Feb 24 19:27:39 2014 +0100 @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the shelve extension project browser helper. +""" + +from PyQt4.QtGui import QMenu + +from E5Gui import E5MessageBox + +from ..HgExtensionProjectBrowserHelper import HgExtensionProjectBrowserHelper + + +class ShelveProjectBrowserHelper(HgExtensionProjectBrowserHelper): + """ + Class implementing the shelve extension project browser helper. + """ + def __init__(self, vcsObject, browserObject, projectObject): + """ + Constructor + + @param vcsObject reference to the vcs object + @param browserObject reference to the project browser object + @param projectObject reference to the project object + """ + super().__init__(vcsObject, browserObject, projectObject) + + def initMenus(self): + """ + Public method to generate the extension menus. + + Note: Derived class must implement this method. + + @return dictionary of populated menu (dict of QMenu). The dict + must have the keys 'mainMenu', 'multiMenu', 'backMenu', 'dirMenu' + and 'dirMultiMenu'. + """ + self.__menus = {} + + menu = QMenu(self.menuTitle()) + menu.setTearOffEnabled(True) + menu.addAction(self.tr("Shelve changes"), self.__hgShelve) + self.__menus['mainMenu'] = menu + + menu = QMenu(self.menuTitle()) + menu.setTearOffEnabled(True) + menu.addAction(self.tr("Shelve changes"), self.__hgShelve) + self.__menus['multiMenu'] = menu + + menu = QMenu(self.menuTitle()) + menu.setTearOffEnabled(True) + menu.addAction(self.tr("Shelve changes"), self.__hgShelve) + self.__menus['dirMenu'] = menu + + menu = QMenu(self.menuTitle()) + menu.setTearOffEnabled(True) + menu.addAction(self.tr("Shelve changes"), self.__hgShelve) + self.__menus['dirMultiMenu'] = menu + + return self.__menus + + def menuTitle(self): + """ + Public method to get the menu title. + + Note: Derived class must implement this method. + + @return title of the menu (string) + """ + return self.tr("Shelve") + + def __reopenProject(self, shouldReopen, title): + """ + Private method to reopen the project if needed and wanted. + + @param shouldReopen flag indicating that the project should + be reopened (boolean) + @param title title of the message box (string) + """ + if shouldReopen: + res = E5MessageBox.yesNo( + None, + title, + self.tr("""The project should be reread. Do this now?"""), + yesDefault=True) + if res: + self.project.reopenProject() + + def __hgShelve(self): + """ + Private slot used to shelve all current changes. + """ + names = [] + for itm in self.browser.getSelectedItems(): + try: + name = itm.fileName() + except AttributeError: + name = itm.dirName() + names.append(name) + shouldReopen = self.vcs.getExtensionObject("shelve")\ + .hgShelve(names) + self.__reopenProject(shouldReopen, self.tr("Shelve"))