Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/ProjectBrowserHelper.py

Sat, 31 Dec 2016 13:34:21 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 31 Dec 2016 13:34:21 +0100
changeset 5389
9b1c800daff3
parent 4631
5c1a96925da4
child 6048
82ad8ec9548c
permissions
-rw-r--r--

Updated copyright for 2017.

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

eric ide

mercurial