Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectBrowserHelper.py

changeset 3305
cf4f22a19dc6
child 3312
7535e5a5cbce
--- /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"))

eric ide

mercurial