src/eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/ProjectBrowserHelper.py

branch
eric7
changeset 9209
b99e7fd55fd3
parent 8881
54e42bc2437a
child 9221
bf71ee032bb4
equal deleted inserted replaced
9208:3fc8dfeb6ebe 9209:b99e7fd55fd3
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2014 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the largefiles extension project browser helper.
8 """
9
10 from PyQt6.QtWidgets import QMenu
11
12 from ..HgExtensionProjectBrowserHelper import HgExtensionProjectBrowserHelper
13
14 import UI.PixmapCache
15
16
17 class LargefilesProjectBrowserHelper(HgExtensionProjectBrowserHelper):
18 """
19 Class implementing the largefiles 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 Note: Derived class must implement this method.
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 self.__addSingleActs = []
44 self.__addMultiActs = []
45
46 menu = QMenu(self.menuTitle())
47 menu.setTearOffEnabled(True)
48 act = menu.addAction(
49 UI.PixmapCache.getIcon("vcsAdd"),
50 self.tr('Add as Large File'),
51 lambda: self.__hgAddLargefiles("large"))
52 self.__addSingleActs.append(act)
53 act = menu.addAction(
54 UI.PixmapCache.getIcon("vcsAdd"),
55 self.tr('Add as Normal File'),
56 lambda: self.__hgAddLargefiles("normal"))
57 self.__addSingleActs.append(act)
58 self.__menus['mainMenu'] = menu
59
60 menu = QMenu(self.menuTitle())
61 menu.setTearOffEnabled(True)
62 act = menu.addAction(
63 UI.PixmapCache.getIcon("vcsAdd"),
64 self.tr('Add as Large Files'),
65 lambda: self.__hgAddLargefiles("large"))
66 self.__addMultiActs.append(act)
67 act = menu.addAction(
68 UI.PixmapCache.getIcon("vcsAdd"),
69 self.tr('Add as Normal Files'),
70 lambda: self.__hgAddLargefiles("normal"))
71 self.__addMultiActs.append(act)
72 self.__menus['multiMenu'] = menu
73
74 return self.__menus
75
76 def menuTitle(self):
77 """
78 Public method to get the menu title.
79
80 Note: Derived class must implement this method.
81
82 @return title of the menu (string)
83 """
84 return self.tr("Large Files")
85
86 def showExtensionMenu(self, key, controlled):
87 """
88 Public method to prepare the extension menu for display.
89
90 @param key menu key (string, one of 'mainMenu', 'multiMenu',
91 'backMenu', 'dirMenu' or 'dirMultiMenu')
92 @param controlled flag indicating to prepare the menu for a
93 version controlled entry or a non-version controlled entry
94 (boolean)
95 """
96 if key == "mainMenu":
97 for act in self.__addSingleActs:
98 act.setEnabled(not controlled)
99 elif key == "multiMenu":
100 for act in self.__addMultiActs:
101 act.setEnabled(not controlled)
102
103 def __hgAddLargefiles(self, mode):
104 """
105 Private slot to add the selected files as large files.
106
107 @param mode add mode (string one of 'normal' or 'large')
108 """
109 names = []
110 for itm in self.browser.getSelectedItems():
111 try:
112 name = itm.fileName()
113 except AttributeError:
114 continue
115 names.append(name)
116
117 if names:
118 if len(names) == 1:
119 self.vcs.getExtensionObject("largefiles").hgAdd(names[0], mode)
120 else:
121 self.vcs.getExtensionObject("largefiles").hgAdd(names, mode)
122 for fn in names:
123 self._updateVCSStatus(fn)

eric ide

mercurial