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. |
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) |