eric6/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/ProjectBrowserHelper.py

Wed, 01 Jan 2020 11:57:23 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 01 Jan 2020 11:57:23 +0100
changeset 7360
9190402e4505
parent 7229
53054eb5b15a
child 7533
88261c96484b
permissions
-rw-r--r--

Updated copyright for 2020.

3313
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
7360
9190402e4505 Updated copyright for 2020.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7229
diff changeset
3 # Copyright (c) 2014 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
3313
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the largefiles extension project browser helper.
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
3484
645c12de6b0c Merge with default branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3359
diff changeset
10
3656
441956d8fce5 Started porting eric5 to PyQt5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3484
diff changeset
11 from PyQt5.QtWidgets import QMenu
3313
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from ..HgExtensionProjectBrowserHelper import HgExtensionProjectBrowserHelper
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 import UI.PixmapCache
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 class LargefilesProjectBrowserHelper(HgExtensionProjectBrowserHelper):
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 Class implementing the largefiles extension project browser helper.
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 def __init__(self, vcsObject, browserObject, projectObject):
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 Constructor
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 @param vcsObject reference to the vcs object
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 @param browserObject reference to the project browser object
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @param projectObject reference to the project object
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
3484
645c12de6b0c Merge with default branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3359
diff changeset
30 super(LargefilesProjectBrowserHelper, self).__init__(
645c12de6b0c Merge with default branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3359
diff changeset
31 vcsObject, browserObject, projectObject)
3313
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 def initMenus(self):
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 Public method to generate the extension menus.
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Note: Derived class must implement this method.
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @return dictionary of populated menu (dict of QMenu). The dict
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 must have the keys 'mainMenu', 'multiMenu', 'backMenu', 'dirMenu'
3359
6b6c224d67d6 Corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3313
diff changeset
41 and 'dirMultiMenu'.
3313
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.__menus = {}
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.__addSingleActs = []
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.__addMultiActs = []
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 menu = QMenu(self.menuTitle())
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 menu.setTearOffEnabled(True)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 act = menu.addAction(
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 UI.PixmapCache.getIcon("vcsAdd.png"),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.tr('Add as Large File'),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 lambda: self.__hgAddLargefiles("large"))
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.__addSingleActs.append(act)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 act = menu.addAction(
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 UI.PixmapCache.getIcon("vcsAdd.png"),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.tr('Add as Normal File'),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 lambda: self.__hgAddLargefiles("normal"))
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.__addSingleActs.append(act)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.__menus['mainMenu'] = menu
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 menu = QMenu(self.menuTitle())
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 menu.setTearOffEnabled(True)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 act = menu.addAction(
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 UI.PixmapCache.getIcon("vcsAdd.png"),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.tr('Add as Large Files'),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 lambda: self.__hgAddLargefiles("large"))
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 self.__addMultiActs.append(act)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 act = menu.addAction(
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 UI.PixmapCache.getIcon("vcsAdd.png"),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.tr('Add as Normal Files'),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 lambda: self.__hgAddLargefiles("normal"))
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 self.__addMultiActs.append(act)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__menus['multiMenu'] = menu
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 return self.__menus
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 def menuTitle(self):
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 Public method to get the menu title.
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 Note: Derived class must implement this method.
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 @return title of the menu (string)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 return self.tr("Large Files")
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 def showExtensionMenu(self, key, controlled):
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 Public method to prepare the extension menu for display.
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 @param key menu key (string, one of 'mainMenu', 'multiMenu',
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 'backMenu', 'dirMenu' or 'dirMultiMenu')
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 @param controlled flag indicating to prepare the menu for a
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 version controlled entry or a non-version controlled entry
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 (boolean)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 if key == "mainMenu":
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 for act in self.__addSingleActs:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 act.setEnabled(not controlled)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 elif key == "multiMenu":
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 for act in self.__addMultiActs:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 act.setEnabled(not controlled)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 def __hgAddLargefiles(self, mode):
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 Private slot to add the selected files as large files.
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 @param mode add mode (string one of 'normal' or 'large')
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 names = []
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 for itm in self.browser.getSelectedItems():
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 try:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 name = itm.fileName()
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 except AttributeError:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 continue
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 names.append(name)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 if names:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 if len(names) == 1:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.vcs.getExtensionObject("largefiles").hgAdd(names[0], mode)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 else:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self.vcs.getExtensionObject("largefiles").hgAdd(names, mode)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 for fn in names:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 self._updateVCSStatus(fn)

eric ide

mercurial