Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectBrowserHelper.py

branch
Py2 comp.
changeset 3484
645c12de6b0c
parent 3359
6b6c224d67d6
child 3656
441956d8fce5
equal deleted inserted replaced
3456:96232974dcdb 3484:645c12de6b0c
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the shelve extension project browser helper.
8 """
9
10 from __future__ import unicode_literals
11
12 from PyQt4.QtGui import QMenu
13
14 from E5Gui import E5MessageBox
15
16 from ..HgExtensionProjectBrowserHelper import HgExtensionProjectBrowserHelper
17
18
19 class ShelveProjectBrowserHelper(HgExtensionProjectBrowserHelper):
20 """
21 Class implementing the shelve extension project browser helper.
22 """
23 def __init__(self, vcsObject, browserObject, projectObject):
24 """
25 Constructor
26
27 @param vcsObject reference to the vcs object
28 @param browserObject reference to the project browser object
29 @param projectObject reference to the project object
30 """
31 super(ShelveProjectBrowserHelper, self).__init__(
32 vcsObject, browserObject, projectObject)
33
34 def initMenus(self):
35 """
36 Public method to generate the extension menus.
37
38 @return dictionary of populated menu (dict of QMenu). The dict
39 must have the keys 'mainMenu', 'multiMenu', 'backMenu', 'dirMenu'
40 and 'dirMultiMenu'.
41 """
42 self.__menus = {}
43
44 menu = QMenu(self.menuTitle())
45 menu.setTearOffEnabled(True)
46 menu.addAction(self.tr("Shelve changes"), self.__hgShelve)
47 self.__menus['mainMenu'] = menu
48
49 menu = QMenu(self.menuTitle())
50 menu.setTearOffEnabled(True)
51 menu.addAction(self.tr("Shelve changes"), self.__hgShelve)
52 self.__menus['multiMenu'] = menu
53
54 menu = QMenu(self.menuTitle())
55 menu.setTearOffEnabled(True)
56 menu.addAction(self.tr("Shelve changes"), self.__hgShelve)
57 self.__menus['dirMenu'] = menu
58
59 menu = QMenu(self.menuTitle())
60 menu.setTearOffEnabled(True)
61 menu.addAction(self.tr("Shelve changes"), self.__hgShelve)
62 self.__menus['dirMultiMenu'] = menu
63
64 return self.__menus
65
66 def menuTitle(self):
67 """
68 Public method to get the menu title.
69
70 @return title of the menu (string)
71 """
72 return self.tr("Shelve")
73
74 def showExtensionMenu(self, key, controlled):
75 """
76 Public method to prepare the extension menu for display.
77
78 @param key menu key (string, one of 'mainMenu', 'multiMenu',
79 'backMenu', 'dirMenu' or 'dirMultiMenu')
80 @param controlled flag indicating to prepare the menu for a
81 version controlled entry or a non-version controlled entry
82 (boolean)
83 """
84 if key in self.__menus:
85 self.__menus[key].setEnabled(controlled)
86
87 def __reopenProject(self, shouldReopen, title):
88 """
89 Private method to reopen the project if needed and wanted.
90
91 @param shouldReopen flag indicating that the project should
92 be reopened (boolean)
93 @param title title of the message box (string)
94 """
95 if shouldReopen:
96 res = E5MessageBox.yesNo(
97 None,
98 title,
99 self.tr("""The project should be reread. Do this now?"""),
100 yesDefault=True)
101 if res:
102 self.project.reopenProject()
103
104 def __hgShelve(self):
105 """
106 Private slot used to shelve all current changes.
107 """
108 names = []
109 for itm in self.browser.getSelectedItems():
110 try:
111 name = itm.fileName()
112 except AttributeError:
113 name = itm.dirName()
114 names.append(name)
115 shouldReopen = self.vcs.getExtensionObject("shelve")\
116 .hgShelve(names)
117 self.__reopenProject(shouldReopen, self.tr("Shelve"))

eric ide

mercurial