64
66
self.revision_id = getattr(tree, 'get_revision_id',
65
67
lambda: CURRENT_REVISION)()
67
# [revision id, line number, committer, revno, highlight color, line]
69
# [revision id, line number, author, revno, highlight color, line]
68
70
self.annomodel = gtk.ListStore(gobject.TYPE_STRING,
69
71
gobject.TYPE_STRING,
70
72
gobject.TYPE_STRING,
139
142
current_revision.timestamp = time.time()
140
143
current_revision.message = '[Not yet committed]'
141
144
current_revision.parent_ids = tree.get_parent_ids()
145
current_revision.properties['branch-nick'] = self.branch.nick
142
146
current_revno = '%d?' % (self.branch.revno() + 1)
143
147
repository = self.branch.repository
144
148
if self.revision_id == CURRENT_REVISION:
177
181
return self.annomodel[path][REVISION_ID_COL]
179
def _show_log(self, w):
183
def _activate_selected_revision(self, w):
180
184
rev_id = self._selected_revision()
181
185
if rev_id is None:
183
self.logview.set_revision(self.revisions[rev_id])
187
selected = self.revisions[rev_id]
188
self.logview.set_revision(selected)
189
if (len(selected.parent_ids) != 0 and selected.parent_ids[0] not in
194
self.back_button.set_sensitive(enable_back)
185
196
def _create(self):
186
197
self.logview = self._create_log_view()
187
198
self.annoview = self._create_annotate_view()
189
vbox = gtk.VBox(False, 12)
190
vbox.set_border_width(12)
200
vbox = gtk.VBox(False)
193
203
sw = gtk.ScrolledWindow()
196
206
sw.add(self.annoview)
197
207
self.annoview.gwindow = self
214
hbox = gtk.HBox(False, 6)
215
self.back_button = self._create_back_button()
216
hbox.pack_start(self.back_button, expand=False, fill=True)
217
self.forward_button = self._create_forward_button()
218
hbox.pack_start(self.forward_button, expand=False, fill=True)
220
vbox.pack_start(hbox, expand=False, fill=True)
200
222
self.pane = pane = gtk.VPaned()
202
224
pane.add2(self.logview)
204
226
vbox.pack_start(pane, expand=True, fill=True)
206
228
self._search = SearchBox()
207
vbox.pack_start(self._search, expand=False, fill=True)
229
swbox.pack_start(self._search, expand=False, fill=True)
208
230
accels = gtk.AccelGroup()
209
231
accels.connect_group(gtk.keysyms.f, gtk.gdk.CONTROL_MASK,
210
232
gtk.ACCEL_LOCKED,
214
236
self._search_by_line)
215
237
self.add_accel_group(accels)
217
hbox = gtk.HBox(True, 6)
218
hbox.pack_start(self._create_prev_button(), expand=False, fill=True)
219
hbox.pack_end(self._create_button_box(), expand=False, fill=True)
221
vbox.pack_start(hbox, expand=False, fill=True)
225
241
def _search_by_text(self, accel_group, window, key, modifiers):
316
def _create_button_box(self):
317
box = gtk.HButtonBox()
318
box.set_layout(gtk.BUTTONBOX_END)
321
button = gtk.Button()
322
button.set_use_stock(True)
323
button.set_label("gtk-close")
324
button.connect("clicked", lambda w: self.destroy())
327
box.pack_start(button, expand=False, fill=False)
331
def _create_prev_button(self):
332
box = gtk.HButtonBox()
333
box.set_layout(gtk.BUTTONBOX_START)
332
def _create_back_button(self):
336
333
button = gtk.Button()
337
334
button.set_use_stock(True)
338
335
button.set_label("gtk-go-back")
339
336
button.connect("clicked", lambda w: self.go_back())
341
box.pack_start(button, expand=False, fill=False)
337
button.set_relief(gtk.RELIEF_NONE)
341
def _create_forward_button(self):
342
button = gtk.Button()
343
button.set_use_stock(True)
344
button.set_label("gtk-go-forward")
345
button.connect("clicked", lambda w: self.go_forward())
346
button.set_relief(gtk.RELIEF_NONE)
348
button.set_sensitive(False)
344
351
def go_back(self):
352
last_tree = self.tree
345
353
rev_id = self._selected_revision()
346
354
parent_id = self.revisions[rev_id].parent_ids[0]
347
tree = self.branch.repository.revision_tree(parent_id)
348
if self.file_id in tree:
349
offset = self.get_scroll_offset(tree)
355
target_tree = self.branch.repository.revision_tree(parent_id)
356
if self._go(target_tree):
357
self.history.append(last_tree)
358
self.forward_button.set_sensitive(True)
360
self._no_back.add(parent_id)
361
self.back_button.set_sensitive(False)
363
def go_forward(self):
364
if len(self.history) == 0:
366
target_tree = self.history.pop()
367
if len(self.history) == 0:
368
self.forward_button.set_sensitive(False)
369
self._go(target_tree)
371
def _go(self, target_tree):
372
rev_id = self._selected_revision()
373
if self.file_id in target_tree:
374
offset = self.get_scroll_offset(target_tree)
350
375
(row,), col = self.annoview.get_cursor()
351
self.annotate(tree, self.branch, self.file_id)
352
self.annoview.set_cursor(row+offset)
376
self.annotate(target_tree, self.branch, self.file_id)
380
self.annoview.set_cursor(new_row)
354
385
def get_scroll_offset(self, tree):
355
386
old = self.tree.get_file(self.file_id)
369
400
For when a revision is referenced but not present.
372
def __init__(self, revision_id, committer='?'):
403
def __init__(self, revision_id, committer='?', nick=None):
373
404
self.revision_id = revision_id
374
405
self.parent_ids = []
375
406
self.committer = committer
376
407
self.message = "?"
377
408
self.timestamp = 0.0
378
409
self.timezone = 0
382
413
class RevisionCache(object):