/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: Andrew Starr-Bochicchio
  • Date: 2011-02-15 00:15:40 UTC
  • mfrom: (709 bzr-gtk)
  • mto: This revision was merged to the branch mainline in revision 711.
  • Revision ID: a.starr.b@gmail.com-20110215001540-ivb00xv8s8ma1vn1
Re-merge on trunk, resolving one conflict.

Show diffs side-by-side

added added

removed removed

Lines of Context:
49
49
        self.all = all
50
50
        self.plain = plain
51
51
        self._branch = branch
52
 
        
 
52
 
53
53
        Window.__init__(self, parent)
54
 
        
 
54
 
55
55
        self.set_icon(self.render_icon(gtk.STOCK_FIND, gtk.ICON_SIZE_BUTTON))
56
56
        self.annotate_colormap = AnnotateColorSaturation()
57
57
 
68
68
        self.revisionview.set_file_id(file_id)
69
69
        self.revision_id = getattr(tree, 'get_revision_id', 
70
70
                                   lambda: CURRENT_REVISION)()
71
 
        
 
71
 
72
72
        # [revision id, line number, author, revno, highlight color, line]
73
73
        self.annomodel = gtk.ListStore(gobject.TYPE_STRING,
74
 
                                       gobject.TYPE_STRING,
 
74
                                       gobject.TYPE_INT,
75
75
                                       gobject.TYPE_STRING,
76
76
                                       gobject.TYPE_STRING,
77
77
                                       gobject.TYPE_STRING,
78
78
                                       gobject.TYPE_STRING)
79
 
        
 
79
 
80
80
        last_seen = None
81
81
        try:
82
82
            branch.lock_read()
86
86
            for revision_id, revno in revno_map.iteritems():
87
87
                self.dotted[revision_id] = '.'.join(str(num) for num in revno)
88
88
            for line_no, (revision, revno, line)\
89
 
                    in enumerate(self._annotate(tree, file_id)):
 
89
                in enumerate(self._annotate(tree, file_id)):
90
90
                if revision.revision_id == last_seen and not self.all:
91
91
                    revno = author = ""
92
92
                else:
93
93
                    last_seen = revision.revision_id
94
 
                    author = revision.get_apparent_author()
 
94
                    author = ", ".join(revision.get_apparent_authors())
95
95
 
96
96
                if revision.revision_id not in self.revisions:
97
97
                    self.revisions[revision.revision_id] = revision
102
102
                                       revno,
103
103
                                       None,
104
104
                                       line.rstrip("\r\n")
105
 
                                      ])
 
105
                                       ])
106
106
                self.annotations.append(revision)
107
107
 
108
108
            if not self.plain:
125
125
            # bar?
126
126
            print("gannotate: Line number %d does't exist. Defaulting to "
127
127
                  "line 1." % lineno)
128
 
            return
 
128
            return
129
129
        else:
130
130
            row = lineno - 1
131
131
 
139
139
        current_revision.timestamp = time.time()
140
140
        current_revision.message = '[Not yet committed]'
141
141
        current_revision.parent_ids = tree.get_parent_ids()
142
 
        current_revision.properties['branch-nick'] = self.branch.nick
 
142
        current_revision.properties['branch-nick'] = self.branch._get_nick(local=True)
143
143
        current_revno = '%d?' % (self.branch.revno() + 1)
144
144
        repository = self.branch.repository
145
145
        if self.revision_id == CURRENT_REVISION:
212
212
        hbox.pack_start(self.back_button, expand=False, fill=True)
213
213
        self.forward_button = self._create_forward_button()
214
214
        hbox.pack_start(self.forward_button, expand=False, fill=True)
 
215
        self.find_button = self._create_find_button()
 
216
        hbox.pack_start(self.find_button, expand=False, fill=True)
 
217
        self.goto_button = self._create_goto_button()
 
218
        hbox.pack_start(self.goto_button, expand=False, fill=True)
215
219
        hbox.show()
216
220
        vbox.pack_start(hbox, expand=False, fill=True)
217
 
        
 
221
 
218
222
        self.pane = pane = gtk.VPaned()
219
223
        pane.add1(swbox)
220
224
        pane.add2(self.revisionview)
234
238
 
235
239
        self.add(vbox)
236
240
 
237
 
    def _search_by_text(self, accel_group, window, key, modifiers):
 
241
    def _search_by_text(self, *ignored): # (accel_group, window, key, modifiers):
238
242
        self._search.show_for('text')
239
243
        self._search.set_target(self.annoview, TEXT_LINE_COL)
240
244
 
241
 
    def _search_by_line(self, accel_group, window, key, modifiers):
 
245
    def _search_by_line(self, *ignored): # accel_group, window, key, modifiers):
242
246
        self._search.show_for('line')
243
247
        self._search.set_target(self.annoview, LINE_NUM_COL)
244
248
 
256
260
            else:
257
261
                tree2 = repository.revision_tree(NULL_REVISION)
258
262
        from bzrlib.plugins.gtk.diff import DiffWindow
259
 
        window = DiffWindow()
 
263
        window = DiffWindow(self)
260
264
        window.set_diff("Diff for line %d" % (row+1), tree1, tree2)
261
265
        window.set_file(tree1.id2path(self.file_id))
262
266
        window.show()
344
348
        button.set_sensitive(False)
345
349
        return button
346
350
 
 
351
    def _create_find_button(self):
 
352
        button = gtk.Button()
 
353
        button.set_use_stock(True)
 
354
        button.set_label("gtk-find")
 
355
        button.set_tooltip_text("Search for text (Ctrl+F)")
 
356
        button.connect("clicked", self._search_by_text)
 
357
        button.set_relief(gtk.RELIEF_NONE)
 
358
        button.show()
 
359
        button.set_sensitive(True)
 
360
        return button
 
361
 
 
362
    def _create_goto_button(self):
 
363
        button = gtk.Button()
 
364
        button.set_label("Goto Line")
 
365
        button.set_tooltip_text("Scroll to a line by entering its number (Ctrl+G)")
 
366
        button.connect("clicked", self._search_by_line)
 
367
        button.set_relief(gtk.RELIEF_NONE)
 
368
        button.show()
 
369
        button.set_sensitive(True)
 
370
        return button
 
371
 
347
372
    def go_back(self):
348
373
        last_tree = self.tree
349
374
        rev_id = self._selected_revision()
389
414
                return j - i
390
415
 
391
416
 
392
 
class FakeRevision:
 
417
class FakeRevision(object):
393
418
    """ A fake revision.
394
419
 
395
420
    For when a revision is referenced but not present.
404
429
        self.timezone = 0
405
430
        self.properties = {}
406
431
 
407
 
    def get_apparent_author(self):
408
 
        return self.committer
 
432
    def get_apparent_authors(self):
 
433
        return [self.committer]
409
434
 
410
435
 
411
436
class RevisionCache(object):
412
437
    """A caching revision source"""
 
438
 
413
439
    def __init__(self, real_source, seed_cache=None):
414
440
        self.__real_source = real_source
415
441
        if seed_cache is None:
506
532
 
507
533
    def _match(self, model, iterator, column):
508
534
        matching_case = self._match_case.get_active()
509
 
        string, = model.get(iterator, column)
 
535
        cell_value, = model.get(iterator, column)
510
536
        key = self._entry.get_text()
511
 
        if self._regexp.get_active():
 
537
        if column == LINE_NUM_COL:
 
538
            # FIXME: For goto-line there are faster algorithms than searching 
 
539
            # every line til we find the right one! -- mbp 2011-01-27
 
540
            return key.strip() == str(cell_value)
 
541
        elif self._regexp.get_active():
512
542
            if matching_case:
513
 
                match = re.compile(key).search(string, 1)
 
543
                match = re.compile(key).search(cell_value, 1)
514
544
            else:
515
 
                match = re.compile(key, re.I).search(string, 1)
 
545
                match = re.compile(key, re.I).search(cell_value, 1)
516
546
        else:
517
547
            if not matching_case:
518
 
                string = string.lower()
 
548
                cell_value = cell_value.lower()
519
549
                key = key.lower()
520
 
            match = string.find(key) != -1
 
550
            match = cell_value.find(key) != -1
521
551
 
522
552
        return match
523
553
 
557
587
                path = model.get_path(row)
558
588
                self._view.set_cursor(path)
559
589
                self._view.scroll_to_cell(path, use_align=True)
560
 
                break
 
590
                break
 
 
b'\\ No newline at end of file'