Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/ProjectBrowserHelper.py

Sat, 01 Mar 2014 11:50:10 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 01 Mar 2014 11:50:10 +0100
changeset 3313
037642483f35
child 3359
6b6c224d67d6
permissions
-rw-r--r--

Implemented the Mercurial largefiles add interface.

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
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de>
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
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt4.QtGui import QMenu
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from ..HgExtensionProjectBrowserHelper import HgExtensionProjectBrowserHelper
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 import UI.PixmapCache
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
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 class LargefilesProjectBrowserHelper(HgExtensionProjectBrowserHelper):
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 implementing the largefiles extension project browser helper.
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 def __init__(self, vcsObject, browserObject, projectObject):
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 Constructor
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 @param vcsObject reference to the vcs object
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 @param browserObject reference to the project browser object
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 @param projectObject reference to the project object
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 super().__init__(vcsObject, browserObject, projectObject)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 def initMenus(self):
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 Public method to generate the extension menus.
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 Note: Derived class must implement this method.
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 @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
38 must have the keys 'mainMenu', 'multiMenu', 'backMenu', 'dirMenu'
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 and 'dirMultiMenu'.
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.__menus = {}
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.__addSingleActs = []
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.__addMultiActs = []
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 menu = QMenu(self.menuTitle())
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 menu.setTearOffEnabled(True)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 act = menu.addAction(
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 UI.PixmapCache.getIcon("vcsAdd.png"),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.tr('Add as Large File'),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 lambda: self.__hgAddLargefiles("large"))
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.__addSingleActs.append(act)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 act = menu.addAction(
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 UI.PixmapCache.getIcon("vcsAdd.png"),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.tr('Add as Normal File'),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 lambda: self.__hgAddLargefiles("normal"))
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.__addSingleActs.append(act)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 self.__menus['mainMenu'] = menu
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 menu = QMenu(self.menuTitle())
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 menu.setTearOffEnabled(True)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 act = menu.addAction(
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 UI.PixmapCache.getIcon("vcsAdd.png"),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.tr('Add as Large Files'),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 lambda: self.__hgAddLargefiles("large"))
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.__addMultiActs.append(act)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 act = menu.addAction(
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 UI.PixmapCache.getIcon("vcsAdd.png"),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.tr('Add as Normal Files'),
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 lambda: self.__hgAddLargefiles("normal"))
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.__addMultiActs.append(act)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.__menus['multiMenu'] = menu
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 return self.__menus
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 def menuTitle(self):
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 Public method to get the menu title.
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 Note: Derived class must implement this method.
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 @return title of the menu (string)
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 self.tr("Large Files")
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 def showExtensionMenu(self, key, controlled):
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 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
88
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 @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
90 'backMenu', 'dirMenu' or 'dirMultiMenu')
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 @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
92 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
93 (boolean)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 if key == "mainMenu":
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 for act in self.__addSingleActs:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 act.setEnabled(not controlled)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 elif key == "multiMenu":
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 for act in self.__addMultiActs:
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
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 def __hgAddLargefiles(self, mode):
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 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
105
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @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
107 """
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 names = []
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 for itm in self.browser.getSelectedItems():
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 try:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 name = itm.fileName()
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 except AttributeError:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 continue
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 names.append(name)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 if names:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 if len(names) == 1:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 self.vcs.getExtensionObject("largefiles").hgAdd(names[0], mode)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 else:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.vcs.getExtensionObject("largefiles").hgAdd(names, mode)
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 for fn in names:
037642483f35 Implemented the Mercurial largefiles add interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self._updateVCSStatus(fn)

eric ide

mercurial