23
23
# - better annotate algorithm on packs
26
from itertools import groupby
26
27
from PyQt4 import QtCore, QtGui
28
29
from bzrlib.revision import CURRENT_REVISION
41
42
runs_in_loading_queue,
43
44
from bzrlib.plugins.qbzr.lib.widgets.toolbars import FindToolbar
45
from bzrlib.plugins.qbzr.lib.widgets.texteditaccessory import (
46
GuideBarPanel, setup_guidebar_for_find
44
48
from bzrlib.plugins.qbzr.lib.uifactory import ui_current_widget
45
49
from bzrlib.plugins.qbzr.lib.trace import reports_exception
46
50
from bzrlib.plugins.qbzr.lib.logwidget import LogList
80
85
self.edit_cursorPositionChanged)
81
86
self.show_current_line = False
88
def get_highlight_revids(self):
89
return self._highlight_revids
91
def set_highlight_revids(self, value):
92
if self._highlight_revids == value:
95
self._highlight_revids = value
96
self.update_highlight_lines()
98
def update_highlight_lines(self):
99
self.highlight_lines = []
100
if not self.annotate:
102
lines = [i for i, (revno, istop) in enumerate(self.annotate)
103
if revno in self._highlight_revids]
105
# Convert [0,1,2,5,6,9,14,15,16,17] to [(0,3),(5,2),(9,1),(14,4)]
106
def summarize(lines):
107
for k, g in groupby(enumerate(lines), key=lambda x:x[1]-x[0]):
108
yield [line for i, line in g]
109
self.highlight_lines = [(x[0], len(x)) for x in summarize(lines)]
111
highlight_revids = property(get_highlight_revids, set_highlight_revids)
83
113
def edit_cursorPositionChanged(self):
84
114
self.show_current_line = True
138
168
if self.annotate and line_number-1 < len(self.annotate):
139
169
revid, is_top = self.annotate[line_number - 1]
141
if revid in self.highlight_revids:
171
if revid in self._highlight_revids:
142
172
font = painter.font()
143
173
font.setBold(True)
144
174
painter.setFont(font)
271
301
self.text_edit.setLineWrapMode(QtGui.QPlainTextEdit.NoWrap)
273
303
self.text_edit.document().setDefaultFont(get_monospace_font())
305
self.guidebar_panel = GuideBarPanel(self.text_edit, parent=self)
306
self.guidebar_panel.add_entry('annotate', QtGui.QColor(255, 160, 180))
275
307
self.annotate_bar = AnnotateBar(self.text_edit, self, self.get_revno)
276
308
annotate_spliter = QtGui.QSplitter(QtCore.Qt.Horizontal, self)
277
309
annotate_spliter.addWidget(self.annotate_bar)
278
annotate_spliter.addWidget(self.text_edit)
310
annotate_spliter.addWidget(self.guidebar_panel)
279
311
self.annotate_bar.splitter = annotate_spliter
280
312
self.text_edit_frame.hbox.addWidget(annotate_spliter)
284
316
self.edit_cursorPositionChanged)
285
317
self.connect(self.annotate_bar,
286
318
QtCore.SIGNAL("cursorPositionChanged()"),
287
self.edit_cursorPositionChanged)
319
self.edit_cursorPositionChanged)
320
self.connect(self.text_edit,
321
QtCore.SIGNAL("documentChangeFinished()"),
322
self.edit_documentChangeFinished)
289
324
self.log_list = AnnotateLogList(self.processEvents, self.throbber, self)
290
325
self.log_list.header().hideSection(logmodel.COL_DATE)
372
407
self.connect(self.show_find,
373
408
QtCore.SIGNAL("toggled (bool)"),
374
409
self.show_find_toggle)
410
setup_guidebar_for_find(self.guidebar_panel, self.find_toolbar, index=1)
376
412
self.goto_line_toolbar = GotoLineToolbar(self, self.show_goto_line)
377
413
self.goto_line_toolbar.hide()
584
620
if self.text_edit.annotate:
585
621
rev_id, is_top = self.text_edit.annotate[current_line]
586
622
self.log_list.select_revid(rev_id)
624
def edit_documentChangeFinished(self):
625
self.annotate_bar.update_highlight_lines()
626
self.guidebar_panel.update_data(annotate=self.annotate_bar.highlight_lines)
588
628
@runs_in_loading_queue
589
629
def set_annotate_revision(self):
623
663
def log_list_selectionChanged(self, selected, deselected):
624
664
revids = self.log_list.get_selection_and_merged_revids()
625
665
self.annotate_bar.highlight_revids = revids
666
self.guidebar_panel.update_data(annotate=self.annotate_bar.highlight_lines)
626
667
self.annotate_bar.update()
628
669
def show_find_toggle(self, state):