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

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

eric ide

mercurial