--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/ProjectBrowserHelper.py Sat Mar 01 11:50:10 2014 +0100 @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the largefiles extension project browser helper. +""" + +from PyQt4.QtGui import QMenu + +from ..HgExtensionProjectBrowserHelper import HgExtensionProjectBrowserHelper + +import UI.PixmapCache + + +class LargefilesProjectBrowserHelper(HgExtensionProjectBrowserHelper): + """ + Class implementing the largefiles extension project browser helper. + """ + def __init__(self, vcsObject, browserObject, projectObject): + """ + Constructor + + @param vcsObject reference to the vcs object + @param browserObject reference to the project browser object + @param projectObject reference to the project object + """ + super().__init__(vcsObject, browserObject, projectObject) + + def initMenus(self): + """ + Public method to generate the extension menus. + + Note: Derived class must implement this method. + + @return dictionary of populated menu (dict of QMenu). The dict + must have the keys 'mainMenu', 'multiMenu', 'backMenu', 'dirMenu' + and 'dirMultiMenu'. + """ + self.__menus = {} + self.__addSingleActs = [] + self.__addMultiActs = [] + + menu = QMenu(self.menuTitle()) + menu.setTearOffEnabled(True) + act = menu.addAction( + UI.PixmapCache.getIcon("vcsAdd.png"), + self.tr('Add as Large File'), + lambda: self.__hgAddLargefiles("large")) + self.__addSingleActs.append(act) + act = menu.addAction( + UI.PixmapCache.getIcon("vcsAdd.png"), + self.tr('Add as Normal File'), + lambda: self.__hgAddLargefiles("normal")) + self.__addSingleActs.append(act) + self.__menus['mainMenu'] = menu + + menu = QMenu(self.menuTitle()) + menu.setTearOffEnabled(True) + act = menu.addAction( + UI.PixmapCache.getIcon("vcsAdd.png"), + self.tr('Add as Large Files'), + lambda: self.__hgAddLargefiles("large")) + self.__addMultiActs.append(act) + act = menu.addAction( + UI.PixmapCache.getIcon("vcsAdd.png"), + self.tr('Add as Normal Files'), + lambda: self.__hgAddLargefiles("normal")) + self.__addMultiActs.append(act) + self.__menus['multiMenu'] = menu + + return self.__menus + + def menuTitle(self): + """ + Public method to get the menu title. + + Note: Derived class must implement this method. + + @return title of the menu (string) + """ + return self.tr("Large Files") + + def showExtensionMenu(self, key, controlled): + """ + Public method to prepare the extension menu for display. + + @param key menu key (string, one of 'mainMenu', 'multiMenu', + 'backMenu', 'dirMenu' or 'dirMultiMenu') + @param controlled flag indicating to prepare the menu for a + version controlled entry or a non-version controlled entry + (boolean) + """ + if key == "mainMenu": + for act in self.__addSingleActs: + act.setEnabled(not controlled) + elif key == "multiMenu": + for act in self.__addMultiActs: + act.setEnabled(not controlled) + + def __hgAddLargefiles(self, mode): + """ + Private slot to add the selected files as large files. + + @param mode add mode (string one of 'normal' or 'large') + """ + names = [] + for itm in self.browser.getSelectedItems(): + try: + name = itm.fileName() + except AttributeError: + continue + names.append(name) + + if names: + if len(names) == 1: + self.vcs.getExtensionObject("largefiles").hgAdd(names[0], mode) + else: + self.vcs.getExtensionObject("largefiles").hgAdd(names, mode) + for fn in names: + self._updateVCSStatus(fn)