Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py

changeset 4409
ff1cb0107d40
parent 4395
6a13466ac768
child 4410
a3a2b652286d
equal deleted inserted replaced
4407:146030035bdc 4409:ff1cb0107d40
33 "cyan", "olive", "magenta", "darkred", "darkmagenta", 33 "cyan", "olive", "magenta", "darkred", "darkmagenta",
34 "darkcyan", "gray", "yellow"] 34 "darkcyan", "gray", "yellow"]
35 COLORS = [str(QColor(x).name()) for x in COLORNAMES] 35 COLORS = [str(QColor(x).name()) for x in COLORNAMES]
36 36
37 37
38 # TODO: add push and pull actions
39 class HgLogBrowserDialog(QWidget, Ui_HgLogBrowserDialog): 38 class HgLogBrowserDialog(QWidget, Ui_HgLogBrowserDialog):
40 """ 39 """
41 Class implementing a dialog to browse the log history. 40 Class implementing a dialog to browse the log history.
42 """ 41 """
43 IconColumn = 0 42 IconColumn = 0
156 'A': self.tr('Added'), 155 'A': self.tr('Added'),
157 'D': self.tr('Deleted'), 156 'D': self.tr('Deleted'),
158 'M': self.tr('Modified'), 157 'M': self.tr('Modified'),
159 } 158 }
160 159
160 self.phases = {
161 'draft': self.tr("Draft"),
162 'public': self.tr("Public"),
163 'secret': self.tr("Secret"),
164 }
165
161 self.__dotRadius = 8 166 self.__dotRadius = 8
162 self.__rowHeight = 20 167 self.__rowHeight = 20
163 168
164 self.logTree.setIconSize( 169 self.logTree.setIconSize(
165 QSize(100 * self.__rowHeight, self.__rowHeight)) 170 QSize(100 * self.__rowHeight, self.__rowHeight))
167 self.logTree.headerItem().setText( 172 self.logTree.headerItem().setText(
168 self.BookmarksColumn, self.tr("Bookmarks")) 173 self.BookmarksColumn, self.tr("Bookmarks"))
169 if self.vcs.version < (2, 1): 174 if self.vcs.version < (2, 1):
170 self.logTree.setColumnHidden(self.PhaseColumn, True) 175 self.logTree.setColumnHidden(self.PhaseColumn, True)
171 176
177 self.__initActionsMenu()
178
179 def __initActionsMenu(self):
180 """
181 Private method to initialize the actions menu.
182 """
172 self.__actionsMenu = QMenu() 183 self.__actionsMenu = QMenu()
173 if self.vcs.version >= (2, 0): 184 if self.vcs.version >= (2, 0):
174 self.__graftAct = self.__actionsMenu.addAction( 185 self.__graftAct = self.__actionsMenu.addAction(
175 self.tr("Copy Changesets"), self.__graftActTriggered) 186 self.tr("Copy Changesets"), self.__graftActTriggered)
176 self.__graftAct.setToolTip(self.tr( 187 self.__graftAct.setToolTip(self.tr(
197 self.__switchAct = self.__actionsMenu.addAction( 208 self.__switchAct = self.__actionsMenu.addAction(
198 self.tr("Switch"), self.__switchActTriggered) 209 self.tr("Switch"), self.__switchActTriggered)
199 self.__switchAct.setToolTip(self.tr( 210 self.__switchAct.setToolTip(self.tr(
200 "Switch the working directory to the selected revision")) 211 "Switch the working directory to the selected revision"))
201 212
213 self.__actionsMenu.addSeparator()
214
215 self.__pullAct = self.__actionsMenu.addAction(
216 self.tr("Pull Changes"), self.__pullActTriggered)
217 self.__pullAct.setToolTip(self.tr(
218 "Pull changes from a remote repository"))
202 if self.vcs.version >= (2, 0): 219 if self.vcs.version >= (2, 0):
203 self.__lfPullAct = self.__actionsMenu.addAction( 220 self.__lfPullAct = self.__actionsMenu.addAction(
204 self.tr("Pull Large Files"), self.__lfPullActTriggered) 221 self.tr("Pull Large Files"), self.__lfPullActTriggered)
205 self.__lfPullAct.setToolTip(self.tr( 222 self.__lfPullAct.setToolTip(self.tr(
206 "Pull large files for selected revisions")) 223 "Pull large files for selected revisions"))
207 else: 224 else:
208 self.__lfPullAct = None 225 self.__lfPullAct = None
226
227 self.__actionsMenu.addSeparator()
228
229 self.__pushAct = self.__actionsMenu.addAction(
230 self.tr("Push Selected Changes"), self.__pushActTriggered)
231 self.__pushAct.setToolTip(self.tr(
232 "Push changes of the selected changeset and its ancestors"
233 " to a remote repository"))
234 self.__pushAllAct = self.__actionsMenu.addAction(
235 self.tr("Push All Changes"), self.__pushAllActTriggered)
236 self.__pushAllAct.setToolTip(self.tr(
237 "Push all changes to a remote repository"))
209 238
210 self.actionsButton.setIcon( 239 self.actionsButton.setIcon(
211 UI.PixmapCache.getIcon("actionsToolButton.png")) 240 UI.PixmapCache.getIcon("actionsToolButton.png"))
212 self.actionsButton.setMenu(self.__actionsMenu) 241 self.actionsButton.setMenu(self.__actionsMenu)
213 242
649 else: 678 else:
650 closedStr = "" 679 closedStr = ""
651 msgtxt = msg[0] 680 msgtxt = msg[0]
652 if len(msgtxt) > 30: 681 if len(msgtxt) > 30:
653 msgtxt = "{0}...".format(msgtxt[:30]) 682 msgtxt = "{0}...".format(msgtxt[:30])
683 if phase in self.phases:
684 phaseStr = self.phases[phase]
685 else:
686 phaseStr = phase
654 columnLabels = [ 687 columnLabels = [
655 "", 688 "",
656 branches[0] + closedStr, 689 branches[0] + closedStr,
657 "{0:>7}:{1}".format(rev, node), 690 "{0:>7}:{1}".format(rev, node),
658 phase, 691 phaseStr,
659 author, 692 author,
660 date, 693 date,
661 msgtxt, 694 msgtxt,
662 ", ".join(tags), 695 ", ".join(tags),
663 ] 696 ]
1190 secret = 0 1223 secret = 0
1191 draft = 0 1224 draft = 0
1192 public = 0 1225 public = 0
1193 for itm in self.logTree.selectedItems(): 1226 for itm in self.logTree.selectedItems():
1194 phase = itm.text(self.PhaseColumn) 1227 phase = itm.text(self.PhaseColumn)
1195 if phase == "draft": 1228 if phase == self.phases["draft"]:
1196 draft += 1 1229 draft += 1
1197 elif phase == "secret": 1230 elif phase == self.phases["secret"]:
1198 secret += 1 1231 secret += 1
1199 else: 1232 else:
1200 public += 1 1233 public += 1
1201 1234
1202 # step 2: set the status of the phase button 1235 # step 2: set the status of the phase button
1226 if self.vcs.isExtensionActive("largefiles"): 1259 if self.vcs.isExtensionActive("largefiles"):
1227 self.__lfPullAct.setEnabled(bool( 1260 self.__lfPullAct.setEnabled(bool(
1228 self.logTree.selectedItems())) 1261 self.logTree.selectedItems()))
1229 else: 1262 else:
1230 self.__lfPullAct.setEnabled(False) 1263 self.__lfPullAct.setEnabled(False)
1264
1265 self.__pushAct.setEnabled(
1266 len(self.logTree.selectedItems()) == 1 and
1267 self.logTree.selectedItems()[0].text(self.PhaseColumn) ==
1268 self.phases["draft"])
1231 1269
1232 self.actionsButton.setEnabled(True) 1270 self.actionsButton.setEnabled(True)
1233 else: 1271 else:
1234 self.actionsButton.setEnabled(False) 1272 self.actionsButton.setEnabled(False)
1235 1273
1606 1644
1607 if not revs: 1645 if not revs:
1608 self.__phaseAct.setEnabled(False) 1646 self.__phaseAct.setEnabled(False)
1609 return 1647 return
1610 1648
1611 if currentPhase == "draft": 1649 if currentPhase == self.phases["draft"]:
1612 newPhase = "secret" 1650 newPhase = self.phases["secret"]
1613 data = (revs, "s", True) 1651 data = (revs, "s", True)
1614 else: 1652 else:
1615 newPhase = "draft" 1653 newPhase = self.phases["draft"]
1616 data = (revs, "d", False) 1654 data = (revs, "d", False)
1617 res = self.vcs.hgPhase(self.repodir, data) 1655 res = self.vcs.hgPhase(self.repodir, data)
1618 if res: 1656 if res:
1619 for itm in self.logTree.selectedItems(): 1657 for itm in self.logTree.selectedItems():
1620 itm.setText(self.PhaseColumn, newPhase) 1658 itm.setText(self.PhaseColumn, newPhase)
1682 e5App().getObject("Project").reopenProject() 1720 e5App().getObject("Project").reopenProject()
1683 return 1721 return
1684 1722
1685 self.on_refreshButton_clicked() 1723 self.on_refreshButton_clicked()
1686 1724
1725 @pyqtSlot()
1687 def __lfPullActTriggered(self): 1726 def __lfPullActTriggered(self):
1688 """ 1727 """
1689 Private slot to pull large files of selected revisions. 1728 Private slot to pull large files of selected revisions.
1690 """ 1729 """
1691 revs = [] 1730 revs = []
1695 revs.append(rev) 1734 revs.append(rev)
1696 1735
1697 if revs: 1736 if revs:
1698 self.vcs.getExtensionObject("largefiles").hgLfPull( 1737 self.vcs.getExtensionObject("largefiles").hgLfPull(
1699 self.repodir, revisions=revs) 1738 self.repodir, revisions=revs)
1739
1740 @pyqtSlot()
1741 def __pullActTriggered(self):
1742 """
1743 Private slot to pull changes from a remote repository.
1744 """
1745 res = self.vcs.hgPull(self.repodir)
1746 if res:
1747 self.on_refreshButton_clicked()
1748
1749 @pyqtSlot()
1750 def __pushActTriggered(self):
1751 """
1752 Private slot to push changes to a remote repository up to a selected
1753 changeset.
1754 """
1755 itm = self.logTree.selectedItems()[0]
1756 rev = itm.text(self.RevisionColumn).strip().split(":", 1)[0]
1757 if rev:
1758 self.vcs.hgPush(self.repodir, rev=rev)
1759
1760 @pyqtSlot()
1761 def __pushAllActTriggered(self):
1762 """
1763 Private slot to push all changes to a remote repository.
1764 """
1765 self.vcs.hgPush(self.repodir)
1700 1766
1701 def __actionMode(self): 1767 def __actionMode(self):
1702 """ 1768 """
1703 Private method to get the selected action mode. 1769 Private method to get the selected action mode.
1704 1770

eric ide

mercurial