Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py

changeset 5445
b24720037f1f
parent 5444
4799e2cf8401
child 5448
1a86766ed19a
equal deleted inserted replaced
5444:4799e2cf8401 5445:b24720037f1f
13 except NameError: 13 except NameError:
14 pass 14 pass
15 15
16 import os 16 import os
17 import re 17 import re
18 import collections
18 19
19 from PyQt5.QtCore import pyqtSlot, Qt, QDate, QProcess, QTimer, QRegExp, \ 20 from PyQt5.QtCore import pyqtSlot, Qt, QDate, QProcess, QTimer, QRegExp, \
20 QSize, QPoint 21 QSize, QPoint, QUrl
21 from PyQt5.QtGui import QCursor, QColor, QPixmap, QPainter, QPen, QBrush, QIcon 22 from PyQt5.QtGui import QCursor, QColor, QPixmap, QPainter, QPen, QBrush, QIcon
22 from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QHeaderView, \ 23 from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QHeaderView, \
23 QTreeWidgetItem, QApplication, QLineEdit, QMenu, QInputDialog 24 QTreeWidgetItem, QApplication, QLineEdit, QMenu, QInputDialog
24 25
25 from E5Gui.E5Application import e5App 26 from E5Gui.E5Application import e5App
113 "<tr><td><b>Revision</b></td><td>{0}</td></tr>" 114 "<tr><td><b>Revision</b></td><td>{0}</td></tr>"
114 "<tr><td><b>Date</b></td><td>{1}</td></tr>" 115 "<tr><td><b>Date</b></td><td>{1}</td></tr>"
115 "<tr><td><b>Author</b></td><td>{2}</td></tr>" 116 "<tr><td><b>Author</b></td><td>{2}</td></tr>"
116 "<tr><td><b>Branch</b></td><td>{3}</td></tr>" 117 "<tr><td><b>Branch</b></td><td>{3}</td></tr>"
117 "<tr><td><b>Parents</b></td><td>{4}</td></tr>" 118 "<tr><td><b>Parents</b></td><td>{4}</td></tr>"
118 "{5}" 119 "<tr><td><b>Children</b></td><td>{5}</td></tr>"
120 "{6}"
119 "</table>" 121 "</table>"
120 ) 122 )
121 self.__tagsTemplate = self.tr( 123 self.__tagsTemplate = self.tr(
122 "<tr><td><b>Tags</b></td><td>{0}</td></tr>" 124 "<tr><td><b>Tags</b></td><td>{0}</td></tr>"
123 ) 125 )
170 self.logTree.setIconSize( 172 self.logTree.setIconSize(
171 QSize(100 * self.__rowHeight, self.__rowHeight)) 173 QSize(100 * self.__rowHeight, self.__rowHeight))
172 self.BookmarksColumn = self.logTree.columnCount() 174 self.BookmarksColumn = self.logTree.columnCount()
173 self.logTree.headerItem().setText( 175 self.logTree.headerItem().setText(
174 self.BookmarksColumn, self.tr("Bookmarks")) 176 self.BookmarksColumn, self.tr("Bookmarks"))
177
178 self.detailsEdit.anchorClicked.connect(self.__revisionClicked)
175 179
176 self.__initActionsMenu() 180 self.__initActionsMenu()
177 181
178 def __initActionsMenu(self): 182 def __initActionsMenu(self):
179 """ 183 """
282 286
283 self.__branchColors = {} 287 self.__branchColors = {}
284 288
285 self.__projectRevision = -1 289 self.__projectRevision = -1
286 self.__projectBranch = "" 290 self.__projectBranch = ""
291
292 self.__childrenInfo = collections.defaultdict(list)
287 293
288 def closeEvent(self, e): 294 def closeEvent(self, e):
289 """ 295 """
290 Protected slot implementing a close event handler. 296 Protected slot implementing a close event handler.
291 297
733 itm.setData(0, self.__edgesRole, edges) 739 itm.setData(0, self.__edgesRole, edges)
734 if parents == [-1]: 740 if parents == [-1]:
735 itm.setData(0, self.__parentsRole, []) 741 itm.setData(0, self.__parentsRole, [])
736 else: 742 else:
737 itm.setData(0, self.__parentsRole, parents) 743 itm.setData(0, self.__parentsRole, parents)
744 for parent in parents:
745 self.__childrenInfo[parent].append(int(rev))
738 746
739 if self.logTree.topLevelItemCount() > 1: 747 if self.logTree.topLevelItemCount() > 1:
740 topedges = \ 748 topedges = \
741 self.logTree.topLevelItem( 749 self.logTree.topLevelItem(
742 self.logTree.indexOfTopLevelItem(itm) - 1)\ 750 self.logTree.indexOfTopLevelItem(itm) - 1)\
1323 if itm.text(self.BookmarksColumn): 1331 if itm.text(self.BookmarksColumn):
1324 bookmarksStr = self.__bookmarksTemplate.format( 1332 bookmarksStr = self.__bookmarksTemplate.format(
1325 itm.text(self.BookmarksColumn)) 1333 itm.text(self.BookmarksColumn))
1326 else: 1334 else:
1327 bookmarksStr = "" 1335 bookmarksStr = ""
1336 rev = int(itm.text(self.RevisionColumn).split(":", 1)[0])
1337
1338 parentLinks = []
1339 for parent in [str(x) for x in itm.data(0, self.__parentsRole)]:
1340 url = QUrl()
1341 url.setScheme("rev")
1342 url.setPath(parent)
1343 parentLinks.append('<a href="{0}">{1}</a>'.format(
1344 url.toString(), parent))
1345
1346 childLinks = []
1347 for child in [str(x) for x in self.__childrenInfo[rev]]:
1348 url = QUrl()
1349 url.setScheme("rev")
1350 url.setPath(child)
1351 childLinks.append('<a href="{0}">{1}</a>'.format(
1352 url.toString(), child))
1353
1328 self.detailsEdit.setHtml(self.__detailsTemplate.format( 1354 self.detailsEdit.setHtml(self.__detailsTemplate.format(
1329 itm.text(self.RevisionColumn), 1355 itm.text(self.RevisionColumn),
1330 itm.text(self.DateColumn), 1356 itm.text(self.DateColumn),
1331 itm.text(self.AuthorColumn), 1357 itm.text(self.AuthorColumn),
1332 itm.text(self.BranchColumn).replace( 1358 itm.text(self.BranchColumn).replace(
1333 self.ClosedIndicator, ""), 1359 self.ClosedIndicator, ""),
1334 ", ".join( 1360 ", ".join(parentLinks),
1335 [str(x) for x in itm.data(0, self.__parentsRole)] 1361 ", ".join(childLinks),
1336 ),
1337 tagsStr + bookmarksStr, 1362 tagsStr + bookmarksStr,
1338 )) 1363 ))
1339 1364
1340 for line in itm.data(0, self.__messageRole): 1365 for line in itm.data(0, self.__messageRole):
1341 self.messageEdit.append(line.strip()) 1366 self.messageEdit.append(line.strip())
2002 else: 2027 else:
2003 E5MessageBox.information( 2028 E5MessageBox.information(
2004 self, 2029 self,
2005 self.tr("Find Commit"), 2030 self.tr("Find Commit"),
2006 self.tr("""'{0}' was not found.""").format(self.rxEdit.text())) 2031 self.tr("""'{0}' was not found.""").format(self.rxEdit.text()))
2032
2033 def __revisionClicked(self, url):
2034 """
2035 Private slot to handle the anchorClicked signal of the changeset
2036 details pane.
2037
2038 @param url URL that was clicked
2039 @type QUrl
2040 """
2041 if url.scheme() == "rev":
2042 # a parent or child revision was clicked, show the respective item
2043 rev = url.path()
2044 searchStr = "{0:>7}:".format(rev)
2045 # format must be in sync with item generation format
2046 items = self.logTree.findItems(searchStr, Qt.MatchStartsWith,
2047 self.RevisionColumn)
2048 if items:
2049 itm = items[0]
2050 if itm.isHidden():
2051 itm.setHidden(False)
2052 self.logTree.setCurrentItem(itm)
2053 else:
2054 # load the next batch and try again
2055 self.on_nextButton_clicked()
2056 self.__revisionClicked(url)

eric ide

mercurial