diff -r be841c05a7f3 -r bd1a25ead18d Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py --- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py Sat Mar 01 16:23:51 2014 +0100 +++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py Sat Mar 01 18:35:24 2014 +0100 @@ -72,6 +72,7 @@ self.restoreButton.setVisible(False) self.menuactions = [] + self.lfActions = [] self.menu = QMenu() if not mq: self.menuactions.append(self.menu.addAction( @@ -84,6 +85,13 @@ self.menu.addSeparator() self.menuactions.append(self.menu.addAction( self.tr("Add to repository"), self.__add)) + if self.vcs.version >= (2, 0): + self.lfActions.append(self.menu.addAction( + self.tr("Add as Large File"), + lambda: self.__lfAdd("large"))) + self.lfActions.append(self.menu.addAction( + self.tr("Add as Normal File"), + lambda: self.__lfAdd("normal"))) self.menuactions.append(self.menu.addAction( self.tr("Show differences"), self.__diff)) self.menuactions.append(self.menu.addAction( @@ -99,11 +107,22 @@ self.tr("Adjust column sizes"), self.__resizeColumns)) for act in self.menuactions: act.setEnabled(False) + for act in self.lfActions: + act.setEnabled(False) self.statusList.setContextMenuPolicy(Qt.CustomContextMenu) self.statusList.customContextMenuRequested.connect( self.__showContextMenu) + if not mq and self.vcs.version >= (2, 0): + self.__addButtonMenu = QMenu() + self.__addButtonMenu.addAction(self.tr("Add"), self.__add) + self.__addButtonMenu.addAction(self.tr("Add as Large File"), + lambda: self.__lfAdd("large")) + self.__addButtonMenu.addAction(self.tr("Add as Normal File"), + lambda: self.__lfAdd("normal")) + self.addButton.setMenu(self.__addButtonMenu) + self.modifiedIndicators = [ self.tr('added'), self.tr('modified'), @@ -200,6 +219,8 @@ for act in self.menuactions: act.setEnabled(False) + for act in self.lfActions: + act.setEnabled(False) self.addButton.setEnabled(False) self.commitButton.setEnabled(False) @@ -573,6 +594,11 @@ @param coord the position of the mouse pointer (QPoint) """ + # TODO: set status of menu entries according to their conditions + if self.vcs.isExtensionActive("largefiles"): + enable = len(self.__getUnversionedItems()) > 0 + for act in self.lfActions: + act.setEnabled(enable) self.menu.popup(self.mapToGlobal(coord)) def __commit(self): @@ -640,6 +666,31 @@ project.getModel().updateVCSStatus(name) self.vcs.checkVCSStatus() + def __lfAdd(self, mode): + """ + Private slot to add a file to the repository. + + @param mode add mode (string one of 'normal' or 'large') + """ + names = [os.path.join(self.dname, itm.text(self.__pathColumn)) + for itm in self.__getUnversionedItems()] + if not names: + E5MessageBox.information( + self, + self.tr("Add"), + self.tr("""There are no unversioned entries""" + """ available/selected.""")) + return + + self.vcs.getExtensionObject("largefiles").hgAdd( + names, mode) + self.on_refreshButton_clicked() + + project = e5App().getObject("Project") + for name in names: + project.getModel().updateVCSStatus(name) + self.vcs.checkVCSStatus() + def __forget(self): """ Private slot to handle the Remove context menu entry.