Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py

changeset 1608
b6390d242303
parent 1605
899cb1241de5
child 1637
b60eb2fdbaea
equal deleted inserted replaced
1607:67c7ffaed401 1608:b6390d242303
131 if self.vcs.version >= (1, 8): 131 if self.vcs.version >= (1, 8):
132 self.logTree.headerItem().setText(self.logTree.columnCount(), 132 self.logTree.headerItem().setText(self.logTree.columnCount(),
133 self.trUtf8("Bookmarks")) 133 self.trUtf8("Bookmarks"))
134 if self.vcs.version < (2, 1): 134 if self.vcs.version < (2, 1):
135 self.logTree.setColumnHidden(self.PhaseColumn, True) 135 self.logTree.setColumnHidden(self.PhaseColumn, True)
136 self.phaseLine.hide()
137 self.phaseButton.hide()
136 138
137 def __initData(self): 139 def __initData(self):
138 """ 140 """
139 Private method to (re-)initialize some data. 141 Private method to (re-)initialize some data.
140 """ 142 """
983 self.diffP1Button.setEnabled(False) 985 self.diffP1Button.setEnabled(False)
984 self.diffP2Button.setEnabled(False) 986 self.diffP2Button.setEnabled(False)
985 987
986 self.diffRevisionsButton.setEnabled(False) 988 self.diffRevisionsButton.setEnabled(False)
987 989
988 @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) 990 def __updatePhaseButton(self):
989 def on_logTree_currentItemChanged(self, current, previous): 991 """
990 """ 992 Private slot to update the status of the phase button.
991 Private slot called, when the current item of the log tree changes. 993 """
992 994 # step 1: count entries with changeable phases
993 @param current reference to the new current item (QTreeWidgetItem) 995 secret = 0
994 @param previous reference to the old current item (QTreeWidgetItem) 996 draft = 0
997 public = 0
998 for itm in self.logTree.selectedItems():
999 phase = itm.text(self.PhaseColumn)
1000 if phase == "draft":
1001 draft += 1
1002 elif phase == "secret":
1003 secret += 1
1004 else:
1005 public += 1
1006
1007 # step 2: set the status of the phase button
1008 if public == 0 and \
1009 ((secret > 0 and draft == 0) or \
1010 (secret == 0 and draft > 0)):
1011 self.phaseButton.setEnabled(True)
1012 else:
1013 self.phaseButton.setEnabled(False)
1014
1015 def __updateGui(self, itm):
1016 """
1017 Private slot to update GUI elements except the diff and phase buttons.
1018
1019 @param itm reference to the item the update should be based on (QTreeWidgetItem)
995 """ 1020 """
996 self.messageEdit.clear() 1021 self.messageEdit.clear()
997 self.filesTree.clear() 1022 self.filesTree.clear()
998 1023
999 if current is not None: 1024 if itm is not None:
1000 for line in current.data(0, self.__messageRole): 1025 for line in itm.data(0, self.__messageRole):
1001 self.messageEdit.append(line.strip()) 1026 self.messageEdit.append(line.strip())
1002 1027
1003 changes = current.data(0, self.__changesRole) 1028 changes = itm.data(0, self.__changesRole)
1004 if len(changes) > 0: 1029 if len(changes) > 0:
1005 for change in changes: 1030 for change in changes:
1006 self.__generateFileItem( 1031 self.__generateFileItem(
1007 change["action"], change["path"], change["copyfrom"]) 1032 change["action"], change["path"], change["copyfrom"])
1008 self.__resizeColumnsFiles() 1033 self.__resizeColumnsFiles()
1009 self.__resortFiles() 1034 self.__resortFiles()
1010 1035
1036 @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
1037 def on_logTree_currentItemChanged(self, current, previous):
1038 """
1039 Private slot called, when the current item of the log tree changes.
1040
1041 @param current reference to the new current item (QTreeWidgetItem)
1042 @param previous reference to the old current item (QTreeWidgetItem)
1043 """
1044 self.__updateGui(current)
1011 self.__updateDiffButtons() 1045 self.__updateDiffButtons()
1046 self.__updatePhaseButton()
1012 1047
1013 @pyqtSlot() 1048 @pyqtSlot()
1014 def on_logTree_itemSelectionChanged(self): 1049 def on_logTree_itemSelectionChanged(self):
1015 """ 1050 """
1016 Private slot called, when the selection has changed. 1051 Private slot called, when the selection has changed.
1017 """ 1052 """
1018 if len(self.logTree.selectedItems()) == 1: 1053 if len(self.logTree.selectedItems()) == 1:
1019 self.logTree.setCurrentItem(self.logTree.selectedItems()[0]) 1054 self.__updateGui(self.logTree.selectedItems()[0])
1020 1055
1021 self.__updateDiffButtons() 1056 self.__updateDiffButtons()
1057 self.__updatePhaseButton()
1022 1058
1023 @pyqtSlot() 1059 @pyqtSlot()
1024 def on_nextButton_clicked(self): 1060 def on_nextButton_clicked(self):
1025 """ 1061 """
1026 Private slot to handle the Next button. 1062 Private slot to handle the Next button.
1031 @pyqtSlot() 1067 @pyqtSlot()
1032 def on_diffP1Button_clicked(self): 1068 def on_diffP1Button_clicked(self):
1033 """ 1069 """
1034 Private slot to handle the Diff to Parent 1 button. 1070 Private slot to handle the Diff to Parent 1 button.
1035 """ 1071 """
1036 itm = self.logTree.currentItem() 1072 itm = self.logTree.selectedItems()[0]
1037 if itm is None: 1073 if itm is None:
1038 self.diffP1Button.setEnabled(False) 1074 self.diffP1Button.setEnabled(False)
1039 return 1075 return
1040 rev2 = int(itm.text(self.RevisionColumn).split(":")[0]) 1076 rev2 = int(itm.text(self.RevisionColumn).split(":")[0])
1041 1077
1049 @pyqtSlot() 1085 @pyqtSlot()
1050 def on_diffP2Button_clicked(self): 1086 def on_diffP2Button_clicked(self):
1051 """ 1087 """
1052 Private slot to handle the Diff to Parent 2 button. 1088 Private slot to handle the Diff to Parent 2 button.
1053 """ 1089 """
1054 itm = self.logTree.currentItem() 1090 itm = self.logTree.selectedItems()[0]
1055 if itm is None: 1091 if itm is None:
1056 self.diffP2Button.setEnabled(False) 1092 self.diffP2Button.setEnabled(False)
1057 return 1093 return
1058 rev2 = int(itm.text(self.RevisionColumn).split(":")[0]) 1094 rev2 = int(itm.text(self.RevisionColumn).split(":")[0])
1059 1095
1248 if self.intercept: 1284 if self.intercept:
1249 self.intercept = False 1285 self.intercept = False
1250 evt.accept() 1286 evt.accept()
1251 return 1287 return
1252 super().keyPressEvent(evt) 1288 super().keyPressEvent(evt)
1289
1290 @pyqtSlot()
1291 def on_phaseButton_clicked(self):
1292 """
1293 Private slot to handle the Change Phase button.
1294 """
1295 currentPhase = self.logTree.selectedItems()[0].text(self.PhaseColumn)
1296 revs = []
1297 for itm in self.logTree.selectedItems():
1298 if itm.text(self.PhaseColumn) == currentPhase:
1299 revs.append(itm.text(self.RevisionColumn).split(":")[0].strip())
1300
1301 if not revs:
1302 self.phaseButton.setEnabled(False)
1303 return
1304
1305 if currentPhase == "draft":
1306 newPhase = "secret"
1307 data = (revs, "s", True)
1308 else:
1309 newPhase = "draft"
1310 data = (revs, "d", False)
1311 res = self.vcs.hgPhase(self.repodir, data)
1312 if res:
1313 for itm in self.logTree.selectedItems():
1314 itm.setText(self.PhaseColumn, newPhase)

eric ide

mercurial