/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: Daniel Schierbeck
  • Date: 2008-01-13 14:12:49 UTC
  • mto: (423.1.2 trunk)
  • mto: This revision was merged to the branch mainline in revision 429.
  • Revision ID: daniel.schierbeck@gmail.com-20080113141249-gd0i2lknr3yik55r
Moved branch view to its own package.

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 bzrlib.plugins.gtk.revisionview import RevisionView
 
32
from bzrlib.plugins.gtk.window import Window
32
33
 
33
34
 
34
35
(
41
42
) = range(6)
42
43
 
43
44
 
44
 
class GAnnotateWindow(gtk.Window):
 
45
class GAnnotateWindow(Window):
45
46
    """Annotate window."""
46
47
 
47
 
    def __init__(self, all=False, plain=False):
 
48
    def __init__(self, all=False, plain=False, parent=None):
48
49
        self.all = all
49
50
        self.plain = plain
50
51
        
51
 
        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
 
52
        Window.__init__(self, parent)
52
53
        
53
54
        self.set_icon(self.render_icon(gtk.STOCK_FIND, gtk.ICON_SIZE_BUTTON))
54
55
        self.annotate_colormap = AnnotateColorSaturation()
56
57
        self._create()
57
58
        self.revisions = {}
58
59
        self.history = []
 
60
        self._no_back = set()
59
61
 
60
62
    def annotate(self, tree, branch, file_id):
61
63
        self.annotations = []
62
64
        self.branch = branch
63
65
        self.tree = tree
64
66
        self.file_id = file_id
 
67
        self.revisionview.set_file_id(file_id)
65
68
        self.revision_id = getattr(tree, 'get_revision_id', 
66
69
                                   lambda: CURRENT_REVISION)()
67
70
        
68
 
        # [revision id, line number, committer, revno, highlight color, line]
 
71
        # [revision id, line number, author, revno, highlight color, line]
69
72
        self.annomodel = gtk.ListStore(gobject.TYPE_STRING,
70
73
                                       gobject.TYPE_STRING,
71
74
                                       gobject.TYPE_STRING,
80
83
            for line_no, (revision, revno, line)\
81
84
                    in enumerate(self._annotate(tree, file_id)):
82
85
                if revision.revision_id == last_seen and not self.all:
83
 
                    revno = committer = ""
 
86
                    revno = author = ""
84
87
                else:
85
88
                    last_seen = revision.revision_id
86
 
                    committer = revision.committer
 
89
                    author = revision.get_apparent_author()
87
90
 
88
91
                if revision.revision_id not in self.revisions:
89
92
                    self.revisions[revision.revision_id] = revision
90
93
 
91
94
                self.annomodel.append([revision.revision_id,
92
95
                                       line_no + 1,
93
 
                                       committer,
 
96
                                       author,
94
97
                                       revno,
95
98
                                       None,
96
99
                                       line.rstrip("\r\n")
183
186
        if rev_id is None:
184
187
            return
185
188
        selected = self.revisions[rev_id]
186
 
        self.logview.set_revision(selected)
187
 
        self.back_button.set_sensitive(len(selected.parent_ids) != 0)
 
189
        self.revisionview.set_revision(selected)
 
190
        if (len(selected.parent_ids) != 0 and selected.parent_ids[0] not in
 
191
            self._no_back):
 
192
            enable_back = True
 
193
        else:
 
194
            enable_back = False
 
195
        self.back_button.set_sensitive(enable_back)
188
196
 
189
197
    def _create(self):
190
 
        self.logview = self._create_log_view()
 
198
        self.revisionview = self._create_log_view()
191
199
        self.annoview = self._create_annotate_view()
192
200
 
193
201
        vbox = gtk.VBox(False)
214
222
        
215
223
        self.pane = pane = gtk.VPaned()
216
224
        pane.add1(swbox)
217
 
        pane.add2(self.logview)
 
225
        pane.add2(self.revisionview)
218
226
        pane.show()
219
227
        vbox.pack_start(pane, expand=True, fill=True)
220
228
 
318
326
        return tv
319
327
 
320
328
    def _create_log_view(self):
321
 
        lv = LogView()
 
329
        lv = RevisionView()
322
330
        lv.show()
323
331
        return lv
324
332
 
342
350
        return button
343
351
 
344
352
    def go_back(self):
345
 
        self.history.append(self.tree)
346
 
        self.forward_button.set_sensitive(True)
 
353
        last_tree = self.tree
347
354
        rev_id = self._selected_revision()
348
355
        parent_id = self.revisions[rev_id].parent_ids[0]
349
356
        target_tree = self.branch.repository.revision_tree(parent_id)
350
 
        self._go(target_tree)
 
357
        if self._go(target_tree):
 
358
            self.history.append(last_tree)
 
359
            self.forward_button.set_sensitive(True)
 
360
        else:
 
361
            self._no_back.add(parent_id)
 
362
            self.back_button.set_sensitive(False)
351
363
 
352
364
    def go_forward(self):
353
365
        if len(self.history) == 0:
367
379
            if new_row < 0:
368
380
                new_row = 0
369
381
            self.annoview.set_cursor(new_row)
 
382
            return True
 
383
        else:
 
384
            return False
370
385
 
371
386
    def get_scroll_offset(self, tree):
372
387
        old = self.tree.get_file(self.file_id)
379
394
                return j - i
380
395
 
381
396
 
382
 
 
383
397
class FakeRevision:
384
398
    """ A fake revision.
385
399
 
395
409
        self.timezone = 0
396
410
        self.properties = {}
397
411
 
 
412
    def get_apparent_author(self):
 
413
        return self.committer
 
414
 
398
415
 
399
416
class RevisionCache(object):
400
417
    """A caching revision source"""