Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py

changeset 3315
bd1a25ead18d
parent 3302
e92f0dd51979
child 3326
b4868bd56338
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.

eric ide

mercurial