Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py

changeset 1608
b6390d242303
parent 1605
899cb1241de5
child 1637
b60eb2fdbaea
diff -r 67c7ffaed401 -r b6390d242303 Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Fri Feb 10 19:33:45 2012 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sat Feb 11 14:54:14 2012 +0100
@@ -133,6 +133,8 @@
                 self.trUtf8("Bookmarks"))
         if self.vcs.version < (2, 1):
             self.logTree.setColumnHidden(self.PhaseColumn, True)
+            self.phaseLine.hide()
+            self.phaseButton.hide()
     
     def __initData(self):
         """
@@ -985,6 +987,52 @@
             
             self.diffRevisionsButton.setEnabled(False)
     
+    def __updatePhaseButton(self):
+        """
+        Private slot to update the status of the phase button.
+        """
+        # step 1: count entries with changeable phases
+        secret = 0
+        draft = 0
+        public = 0
+        for itm in self.logTree.selectedItems():
+            phase = itm.text(self.PhaseColumn)
+            if phase == "draft":
+                draft += 1
+            elif phase == "secret":
+                secret += 1
+            else:
+                public += 1
+        
+        # step 2: set the status of the phase button
+        if public == 0 and \
+           ((secret > 0 and draft == 0) or \
+            (secret == 0 and draft > 0)):
+            self.phaseButton.setEnabled(True)
+        else:
+            self.phaseButton.setEnabled(False)
+    
+    def __updateGui(self, itm):
+        """
+        Private slot to update GUI elements except the diff and phase buttons.
+        
+        @param itm reference to the item the update should be based on (QTreeWidgetItem)
+        """
+        self.messageEdit.clear()
+        self.filesTree.clear()
+        
+        if itm is not None:
+            for line in itm.data(0, self.__messageRole):
+                self.messageEdit.append(line.strip())
+            
+            changes = itm.data(0, self.__changesRole)
+            if len(changes) > 0:
+                for change in changes:
+                    self.__generateFileItem(
+                        change["action"], change["path"], change["copyfrom"])
+                self.__resizeColumnsFiles()
+                self.__resortFiles()
+    
     @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
     def on_logTree_currentItemChanged(self, current, previous):
         """
@@ -993,22 +1041,9 @@
         @param current reference to the new current item (QTreeWidgetItem)
         @param previous reference to the old current item (QTreeWidgetItem)
         """
-        self.messageEdit.clear()
-        self.filesTree.clear()
-        
-        if current is not None:
-            for line in current.data(0, self.__messageRole):
-                self.messageEdit.append(line.strip())
-            
-            changes = current.data(0, self.__changesRole)
-            if len(changes) > 0:
-                for change in changes:
-                    self.__generateFileItem(
-                        change["action"], change["path"], change["copyfrom"])
-                self.__resizeColumnsFiles()
-                self.__resortFiles()
-        
+        self.__updateGui(current)
         self.__updateDiffButtons()
+        self.__updatePhaseButton()
     
     @pyqtSlot()
     def on_logTree_itemSelectionChanged(self):
@@ -1016,9 +1051,10 @@
         Private slot called, when the selection has changed.
         """
         if len(self.logTree.selectedItems()) == 1:
-            self.logTree.setCurrentItem(self.logTree.selectedItems()[0])
+            self.__updateGui(self.logTree.selectedItems()[0])
         
         self.__updateDiffButtons()
+        self.__updatePhaseButton()
     
     @pyqtSlot()
     def on_nextButton_clicked(self):
@@ -1033,7 +1069,7 @@
         """
         Private slot to handle the Diff to Parent 1 button.
         """
-        itm = self.logTree.currentItem()
+        itm = self.logTree.selectedItems()[0]
         if itm is None:
             self.diffP1Button.setEnabled(False)
             return
@@ -1051,7 +1087,7 @@
         """
         Private slot to handle the Diff to Parent 2 button.
         """
-        itm = self.logTree.currentItem()
+        itm = self.logTree.selectedItems()[0]
         if itm is None:
             self.diffP2Button.setEnabled(False)
             return
@@ -1250,3 +1286,29 @@
             evt.accept()
             return
         super().keyPressEvent(evt)
+    
+    @pyqtSlot()
+    def on_phaseButton_clicked(self):
+        """
+        Private slot to handle the Change Phase button.
+        """
+        currentPhase = self.logTree.selectedItems()[0].text(self.PhaseColumn)
+        revs = []
+        for itm in self.logTree.selectedItems():
+            if itm.text(self.PhaseColumn) == currentPhase:
+                revs.append(itm.text(self.RevisionColumn).split(":")[0].strip())
+        
+        if not revs:
+            self.phaseButton.setEnabled(False)
+            return
+        
+        if currentPhase == "draft":
+            newPhase = "secret"
+            data = (revs, "s", True)
+        else:
+            newPhase = "draft"
+            data = (revs, "d", False)
+        res = self.vcs.hgPhase(self.repodir, data)
+        if res:
+            for itm in self.logTree.selectedItems():
+                itm.setText(self.PhaseColumn, newPhase)

eric ide

mercurial