/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to annotate/gannotate.py

  • Committer: Jelmer Vernooij
  • Date: 2007-02-01 15:50:40 UTC
  • Revision ID: jelmer@samba.org-20070201155040-3hq4mfbxs99kzazy
add framework for tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
from bzrlib.revision import NULL_REVISION, CURRENT_REVISION
29
29
 
30
30
from colormap import AnnotateColorMap, AnnotateColorSaturation
31
 
from bzrlib.plugins.gtk.logview import LogView
 
31
from logview import LogView
 
32
from spanselector import SpanSelector
32
33
 
33
34
 
34
35
(
55
56
 
56
57
        self._create()
57
58
        self.revisions = {}
58
 
        self.history = []
59
 
        self._no_back = set()
60
59
 
61
60
    def annotate(self, tree, branch, file_id):
62
61
        self.annotations = []
141
140
        current_revision.timestamp = time.time()
142
141
        current_revision.message = '[Not yet committed]'
143
142
        current_revision.parent_ids = tree.get_parent_ids()
144
 
        current_revision.properties['branch-nick'] = self.branch.nick
145
143
        current_revno = '%d?' % (self.branch.revno() + 1)
146
144
        repository = self.branch.repository
147
145
        if self.revision_id == CURRENT_REVISION:
179
177
            return None
180
178
        return self.annomodel[path][REVISION_ID_COL]
181
179
 
182
 
    def _activate_selected_revision(self, w):
 
180
    def _show_log(self, w):
183
181
        rev_id = self._selected_revision()
184
182
        if rev_id is None:
185
183
            return
186
 
        selected = self.revisions[rev_id]
187
 
        self.logview.set_revision(selected)
188
 
        if (len(selected.parent_ids) != 0 and selected.parent_ids[0] not in
189
 
            self._no_back):
190
 
            enable_back = True
191
 
        else:
192
 
            enable_back = False
193
 
        self.back_button.set_sensitive(enable_back)
 
184
        self.logview.set_revision(self.revisions[rev_id])
194
185
 
195
186
    def _create(self):
196
187
        self.logview = self._create_log_view()
197
188
        self.annoview = self._create_annotate_view()
198
189
 
199
 
        vbox = gtk.VBox(False)
 
190
        vbox = gtk.VBox(False, 12)
 
191
        vbox.set_border_width(12)
200
192
        vbox.show()
201
193
 
202
194
        sw = gtk.ScrolledWindow()
205
197
        sw.add(self.annoview)
206
198
        self.annoview.gwindow = self
207
199
        sw.show()
208
 
 
209
 
        swbox = gtk.VBox()
210
 
        swbox.pack_start(sw)
211
 
        swbox.show()
212
 
 
213
 
        hbox = gtk.HBox(False, 6)
214
 
        self.back_button = self._create_back_button()
215
 
        hbox.pack_start(self.back_button, expand=False, fill=True)
216
 
        self.forward_button = self._create_forward_button()
217
 
        hbox.pack_start(self.forward_button, expand=False, fill=True)
218
 
        hbox.show()
219
 
        vbox.pack_start(hbox, expand=False, fill=True)
220
200
        
221
201
        self.pane = pane = gtk.VPaned()
222
 
        pane.add1(swbox)
 
202
        pane.add1(sw)
223
203
        pane.add2(self.logview)
224
204
        pane.show()
225
205
        vbox.pack_start(pane, expand=True, fill=True)
226
206
 
227
207
        self._search = SearchBox()
228
 
        swbox.pack_start(self._search, expand=False, fill=True)
 
208
        vbox.pack_start(self._search, expand=False, fill=True)
229
209
        accels = gtk.AccelGroup()
230
210
        accels.connect_group(gtk.keysyms.f, gtk.gdk.CONTROL_MASK,
231
211
                             gtk.ACCEL_LOCKED,
235
215
                             self._search_by_line)
236
216
        self.add_accel_group(accels)
237
217
 
 
218
        hbox = gtk.HBox(True, 6)
 
219
        hbox.pack_start(self._create_prev_button(), expand=False, fill=True)
 
220
        hbox.pack_end(self._create_button_box(), expand=False, fill=True)
 
221
        hbox.show()
 
222
        vbox.pack_start(hbox, expand=False, fill=True)
 
223
 
238
224
        self.add(vbox)
239
225
 
240
226
    def _search_by_text(self, accel_group, window, key, modifiers):
258
244
                tree2 = repository.revision_tree(revision.parent_ids[0])
259
245
            else:
260
246
                tree2 = repository.revision_tree(NULL_REVISION)
261
 
        from bzrlib.plugins.gtk.diff import DiffWindow
 
247
        from bzrlib.plugins.gtk.viz.diffwin import DiffWindow
262
248
        window = DiffWindow()
263
249
        window.set_diff("Diff for row %d" % (row+1), tree1, tree2)
264
250
        window.set_file(tree1.id2path(self.file_id))
268
254
    def _create_annotate_view(self):
269
255
        tv = gtk.TreeView()
270
256
        tv.set_rules_hint(False)
271
 
        tv.connect("cursor-changed", self._activate_selected_revision)
 
257
        tv.connect("cursor-changed", self._show_log)
272
258
        tv.show()
273
259
        tv.connect("row-activated", self.row_diff)
274
260
 
326
312
    def _create_log_view(self):
327
313
        lv = LogView()
328
314
        lv.show()
 
315
 
329
316
        return lv
330
317
 
331
 
    def _create_back_button(self):
 
318
    def _create_button_box(self):
 
319
        box = gtk.HButtonBox()
 
320
        box.set_layout(gtk.BUTTONBOX_END)
 
321
        box.show()
 
322
 
 
323
        button = gtk.Button()
 
324
        button.set_use_stock(True)
 
325
        button.set_label("gtk-close")
 
326
        button.connect("clicked", lambda w: self.destroy())
 
327
        button.show()
 
328
 
 
329
        box.pack_start(button, expand=False, fill=False)
 
330
 
 
331
        return box
 
332
 
 
333
    def _create_prev_button(self):
 
334
        box = gtk.HButtonBox()
 
335
        box.set_layout(gtk.BUTTONBOX_START)
 
336
        box.show()
 
337
        
332
338
        button = gtk.Button()
333
339
        button.set_use_stock(True)
334
340
        button.set_label("gtk-go-back")
335
341
        button.connect("clicked", lambda w: self.go_back())
336
 
        button.set_relief(gtk.RELIEF_NONE)
337
 
        button.show()
338
 
        return button
339
 
 
340
 
    def _create_forward_button(self):
341
 
        button = gtk.Button()
342
 
        button.set_use_stock(True)
343
 
        button.set_label("gtk-go-forward")
344
 
        button.connect("clicked", lambda w: self.go_forward())
345
 
        button.set_relief(gtk.RELIEF_NONE)
346
 
        button.show()
347
 
        button.set_sensitive(False)
348
 
        return button
 
342
        button.show()
 
343
        box.pack_start(button, expand=False, fill=False)
 
344
        return box
349
345
 
350
346
    def go_back(self):
351
 
        last_tree = self.tree
352
347
        rev_id = self._selected_revision()
353
348
        parent_id = self.revisions[rev_id].parent_ids[0]
354
 
        target_tree = self.branch.repository.revision_tree(parent_id)
355
 
        if self._go(target_tree):
356
 
            self.history.append(last_tree)
357
 
            self.forward_button.set_sensitive(True)
358
 
        else:
359
 
            self._no_back.add(parent_id)
360
 
            self.back_button.set_sensitive(False)
361
 
 
362
 
    def go_forward(self):
363
 
        if len(self.history) == 0:
364
 
            return
365
 
        target_tree = self.history.pop()
366
 
        if len(self.history) == 0:
367
 
            self.forward_button.set_sensitive(False)
368
 
        self._go(target_tree)
369
 
 
370
 
    def _go(self, target_tree):
371
 
        rev_id = self._selected_revision()
372
 
        if self.file_id in target_tree:
373
 
            offset = self.get_scroll_offset(target_tree)
 
349
        tree = self.branch.repository.revision_tree(parent_id)
 
350
        if self.file_id in tree:
 
351
            offset = self.get_scroll_offset(tree)
374
352
            (row,), col = self.annoview.get_cursor()
375
 
            self.annotate(target_tree, self.branch, self.file_id)
376
 
            new_row = row+offset
377
 
            if new_row < 0:
378
 
                new_row = 0
379
 
            self.annoview.set_cursor(new_row)
380
 
            return True
381
 
        else:
382
 
            return False
 
353
            self.annotate(tree, self.branch, self.file_id)
 
354
            self.annoview.set_cursor(row+offset)
383
355
 
384
356
    def get_scroll_offset(self, tree):
385
357
        old = self.tree.get_file(self.file_id)
399
371
    For when a revision is referenced but not present.
400
372
    """
401
373
 
402
 
    def __init__(self, revision_id, committer='?', nick=None):
 
374
    def __init__(self, revision_id, committer='?'):
403
375
        self.revision_id = revision_id
404
376
        self.parent_ids = []
405
377
        self.committer = committer
406
378
        self.message = "?"
407
379
        self.timestamp = 0.0
408
380
        self.timezone = 0
409
 
        self.properties = {}
410
381
 
411
382
 
412
383
class RevisionCache(object):