Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py

branch
Py2 comp.
changeset 2847
1843ef6e2656
parent 2791
a9577f248f04
parent 2840
10a133f3a5e8
child 3057
10516539f238
diff -r b852fe4d153a -r 1843ef6e2656 Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py
--- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -31,11 +31,12 @@
     """
     Class implementing a dialog to show the output of the hg status command process.
     """
-    def __init__(self, vcs, parent=None):
+    def __init__(self, vcs, mq=False, parent=None):
         """
         Constructor
         
         @param vcs reference to the vcs object
+        @param mq flag indicating to show a queue repo status (boolean)
         @param parent parent widget (QWidget)
         """
         super(HgStatusDialog, self).__init__(parent)
@@ -58,37 +59,50 @@
         self.vcs = vcs
         self.vcs.committed.connect(self.__committed)
         self.__hgClient = self.vcs.getClient()
+        self.__mq = mq
         
         self.statusList.headerItem().setText(self.__lastColumn, "")
         self.statusList.header().setSortIndicator(self.__pathColumn, Qt.AscendingOrder)
         
+        if mq:
+            self.buttonsLine.setVisible(False)
+            self.addButton.setVisible(False)
+            self.diffButton.setVisible(False)
+            self.sbsDiffButton.setVisible(False)
+            self.revertButton.setVisible(False)
+            self.forgetButton.setVisible(False)
+            self.restoreButton.setVisible(False)
+        
         self.menuactions = []
         self.menu = QMenu()
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Commit changes to repository..."), self.__commit))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Select all for commit"), self.__commitSelectAll))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Deselect all from commit"), self.__commitDeselectAll))
-        self.menu.addSeparator()
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Add to repository"), self.__add))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Show differences"), self.__diff))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Remove from repository"), self.__forget))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Revert changes"), self.__revert))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Restore missing"), self.__restoreMissing))
-        self.menu.addSeparator()
-        self.menuactions.append(self.menu.addAction(self.trUtf8("Adjust column sizes"),
-            self.__resizeColumns))
-        for act in self.menuactions:
-            act.setEnabled(False)
-        
-        self.statusList.setContextMenuPolicy(Qt.CustomContextMenu)
-        self.statusList.customContextMenuRequested.connect(self.__showContextMenu)
+        if not mq:
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Commit changes to repository..."), self.__commit))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Select all for commit"), self.__commitSelectAll))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Deselect all from commit"), self.__commitDeselectAll))
+            self.menu.addSeparator()
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Add to repository"), self.__add))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Show differences"), self.__diff))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Show differences side-by-side"), self.__sbsDiff))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Remove from repository"), self.__forget))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Revert changes"), self.__revert))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Restore missing"), self.__restoreMissing))
+            self.menu.addSeparator()
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Adjust column sizes"), self.__resizeColumns))
+            for act in self.menuactions:
+                act.setEnabled(False)
+            
+            self.statusList.setContextMenuPolicy(Qt.CustomContextMenu)
+            self.statusList.customContextMenuRequested.connect(self.__showContextMenu)
         
         self.modifiedIndicators = [
             self.trUtf8('added'),
@@ -189,6 +203,7 @@
         self.addButton.setEnabled(False)
         self.commitButton.setEnabled(False)
         self.diffButton.setEnabled(False)
+        self.sbsDiffButton.setEnabled(False)
         self.revertButton.setEnabled(False)
         self.forgetButton.setEnabled(False)
         self.restoreButton.setEnabled(False)
@@ -196,22 +211,32 @@
         self.statusFilterCombo.clear()
         self.__statusFilters = []
         
-        self.setWindowTitle(self.trUtf8('Mercurial Status'))
+        if self.__mq:
+            self.setWindowTitle(self.trUtf8("Mercurial Queue Repository Status"))
+        else:
+            self.setWindowTitle(self.trUtf8('Mercurial Status'))
         
         args = []
         args.append('status')
         self.vcs.addArguments(args, self.vcs.options['global'])
-        self.vcs.addArguments(args, self.vcs.options['status'])
-        
-        if self.vcs.hasSubrepositories():
-            args.append("--subrepos")
-        
-        if isinstance(fn, list):
-            self.dname, fnames = self.vcs.splitPathList(fn)
-            self.vcs.addArguments(args, fn)
+        if self.__mq:
+            args.append('--mq')
+            if isinstance(fn, list):
+                self.dname, fnames = self.vcs.splitPathList(fn)
+            else:
+                self.dname, fname = self.vcs.splitPath(fn)
         else:
-            self.dname, fname = self.vcs.splitPath(fn)
-            args.append(fn)
+            self.vcs.addArguments(args, self.vcs.options['status'])
+            
+            if self.vcs.hasSubrepositories():
+                args.append("--subrepos")
+            
+            if isinstance(fn, list):
+                self.dname, fnames = self.vcs.splitPathList(fn)
+                self.vcs.addArguments(args, fn)
+            else:
+                self.dname, fname = self.vcs.splitPath(fn)
+                args.append(fn)
         
         # find the root of the repo
         repodir = self.dname
@@ -444,6 +469,7 @@
 
         self.addButton.setEnabled(unversioned)
         self.diffButton.setEnabled(modified)
+        self.sbsDiffButton.setEnabled(modified == 1)
         self.revertButton.setEnabled(modified)
         self.forgetButton.setEnabled(missing)
         self.restoreButton.setEnabled(missing)
@@ -511,6 +537,13 @@
         self.__diff()
     
     @pyqtSlot()
+    def on_sbsDiffButton_clicked(self):
+        """
+        Private slot to handle the press of the Side-by-Side Diff button.
+        """
+        self.__sbsDiff()
+    
+    @pyqtSlot()
     def on_revertButton_clicked(self):
         """
         Private slot to handle the press of the Revert button.
@@ -547,20 +580,23 @@
         """
         Private slot to handle the Commit context menu entry.
         """
-        names = [os.path.join(self.dname, itm.text(self.__pathColumn)) \
-                 for itm in self.__getCommitableItems()]
-        if not names:
-            E5MessageBox.information(self,
-                self.trUtf8("Commit"),
-                self.trUtf8("""There are no entries selected to be"""
-                            """ committed."""))
-            return
-        
-        if Preferences.getVCS("AutoSaveFiles"):
-            vm = e5App().getObject("ViewManager")
-            for name in names:
-                vm.saveEditor(name)
-        self.vcs.vcsCommit(names, '')
+        if self.__mq:
+            self.vcs.vcsCommit(self.dname, "", mq=True)
+        else:
+            names = [os.path.join(self.dname, itm.text(self.__pathColumn)) \
+                     for itm in self.__getCommitableItems()]
+            if not names:
+                E5MessageBox.information(self,
+                    self.trUtf8("Commit"),
+                    self.trUtf8("""There are no entries selected to be"""
+                                """ committed."""))
+                return
+            
+            if Preferences.getVCS("AutoSaveFiles"):
+                vm = e5App().getObject("ViewManager")
+                for name in names:
+                    vm.saveEditor(name)
+            self.vcs.vcsCommit(names, '')
     
     def __committed(self):
         """
@@ -677,7 +713,28 @@
             self.diff = HgDiffDialog(self.vcs)
         self.diff.show()
         self.diff.start(names)
+    
+    def __sbsDiff(self):
+        """
+        Private slot to handle the Diff context menu entry.
+        """
+        names = [os.path.join(self.dname, itm.text(self.__pathColumn))
+                 for itm in self.__getModifiedItems()]
+        if not names:
+            E5MessageBox.information(self,
+                self.trUtf8("Side-by-Side Diff"),
+                self.trUtf8("""There are no uncommitted changes"""
+                            """ available/selected."""))
+            return
+        elif len(names) > 1:
+            E5MessageBox.information(self,
+                self.trUtf8("Side-by-Side Diff"),
+                self.trUtf8("""Only one file with uncommitted changes"""
+                            """ must be selected."""))
+            return
         
+        self.vcs.hgSbsDiff(names[0])
+    
     def __getCommitableItems(self):
         """
         Private method to retrieve all entries the user wants to commit.

eric ide

mercurial