Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/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 largefiles extension project browser helper.
8 """
9
10 from __future__ import unicode_literals
11
12 from PyQt4.QtGui import QMenu
13
14 from ..HgExtensionProjectBrowserHelper import HgExtensionProjectBrowserHelper
15
16 import UI.PixmapCache
17
18
19 class LargefilesProjectBrowserHelper(HgExtensionProjectBrowserHelper):
20 """
21 Class implementing the largefiles 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(LargefilesProjectBrowserHelper, self).__init__(
32 vcsObject, browserObject, projectObject)
33
34 def initMenus(self):
35 """
36 Public method to generate the extension menus.
37
38 Note: Derived class must implement this method.
39
40 @return dictionary of populated menu (dict of QMenu). The dict
41 must have the keys 'mainMenu', 'multiMenu', 'backMenu', 'dirMenu'
42 and 'dirMultiMenu'.
43 """
44 self.__menus = {}
45 self.__addSingleActs = []
46 self.__addMultiActs = []
47
48 menu = QMenu(self.menuTitle())
49 menu.setTearOffEnabled(True)
50 act = menu.addAction(
51 UI.PixmapCache.getIcon("vcsAdd.png"),
52 self.tr('Add as Large File'),
53 lambda: self.__hgAddLargefiles("large"))
54 self.__addSingleActs.append(act)
55 act = menu.addAction(
56 UI.PixmapCache.getIcon("vcsAdd.png"),
57 self.tr('Add as Normal File'),
58 lambda: self.__hgAddLargefiles("normal"))
59 self.__addSingleActs.append(act)
60 self.__menus['mainMenu'] = menu
61
62 menu = QMenu(self.menuTitle())
63 menu.setTearOffEnabled(True)
64 act = menu.addAction(
65 UI.PixmapCache.getIcon("vcsAdd.png"),
66 self.tr('Add as Large Files'),
67 lambda: self.__hgAddLargefiles("large"))
68 self.__addMultiActs.append(act)
69 act = menu.addAction(
70 UI.PixmapCache.getIcon("vcsAdd.png"),
71 self.tr('Add as Normal Files'),
72 lambda: self.__hgAddLargefiles("normal"))
73 self.__addMultiActs.append(act)
74 self.__menus['multiMenu'] = menu
75
76 return self.__menus
77
78 def menuTitle(self):
79 """
80 Public method to get the menu title.
81
82 Note: Derived class must implement this method.
83
84 @return title of the menu (string)
85 """
86 return self.tr("Large Files")
87
88 def showExtensionMenu(self, key, controlled):
89 """
90 Public method to prepare the extension menu for display.
91
92 @param key menu key (string, one of 'mainMenu', 'multiMenu',
93 'backMenu', 'dirMenu' or 'dirMultiMenu')
94 @param controlled flag indicating to prepare the menu for a
95 version controlled entry or a non-version controlled entry
96 (boolean)
97 """
98 if key == "mainMenu":
99 for act in self.__addSingleActs:
100 act.setEnabled(not controlled)
101 elif key == "multiMenu":
102 for act in self.__addMultiActs:
103 act.setEnabled(not controlled)
104
105 def __hgAddLargefiles(self, mode):
106 """
107 Private slot to add the selected files as large files.
108
109 @param mode add mode (string one of 'normal' or 'large')
110 """
111 names = []
112 for itm in self.browser.getSelectedItems():
113 try:
114 name = itm.fileName()
115 except AttributeError:
116 continue
117 names.append(name)
118
119 if names:
120 if len(names) == 1:
121 self.vcs.getExtensionObject("largefiles").hgAdd(names[0], mode)
122 else:
123 self.vcs.getExtensionObject("largefiles").hgAdd(names, mode)
124 for fn in names:
125 self._updateVCSStatus(fn)

eric ide

mercurial