/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

Fix regressions in plugins tab.

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
48
    def __init__(self, all=False, plain=False, parent=None):
48
49
        self.all = all
49
50
        self.plain = plain
50
 
        self._parent = parent
51
51
        
52
 
        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
53
 
 
54
 
        self.connect("key-press-event", self._on_key_pressed)
 
52
        Window.__init__(self, parent)
55
53
        
56
54
        self.set_icon(self.render_icon(gtk.STOCK_FIND, gtk.ICON_SIZE_BUTTON))
57
55
        self.annotate_colormap = AnnotateColorSaturation()
66
64
        self.branch = branch
67
65
        self.tree = tree
68
66
        self.file_id = file_id
 
67
        self.revisionview.set_file_id(file_id)
69
68
        self.revision_id = getattr(tree, 'get_revision_id', 
70
69
                                   lambda: CURRENT_REVISION)()
71
70
        
81
80
        try:
82
81
            branch.lock_read()
83
82
            branch.repository.lock_read()
 
83
            self.dotted = {}
 
84
            revno_map = self.branch.get_revision_id_to_revno_map()
 
85
            for revision_id, revno in revno_map.iteritems():
 
86
                self.dotted[revision_id] = '.'.join(str(num) for num in revno)
84
87
            for line_no, (revision, revno, line)\
85
88
                    in enumerate(self._annotate(tree, file_id)):
86
89
                if revision.revision_id == last_seen and not self.all:
110
113
 
111
114
        self.annoview.set_model(self.annomodel)
112
115
        self.annoview.grab_focus()
 
116
        my_revno = self.dotted.get(self.revision_id, 'current')
 
117
        title = '%s (%s) - gannotate' % (self.tree.id2path(file_id), my_revno)
 
118
        self.set_title(title)
113
119
 
114
120
    def jump_to_line(self, lineno):
115
121
        if lineno > len(self.annomodel) or lineno < 1:
125
131
        self.annoview.set_cursor(row)
126
132
        self.annoview.scroll_to_cell(row, use_align=True)
127
133
 
128
 
    def _dotted_revnos(self, repository, revision_id):
129
 
        """Return a dict of revision_id -> dotted revno
130
 
        
131
 
        :param repository: The repository to get the graph from
132
 
        :param revision_id: The last revision for which this info is needed
133
 
        """
134
 
        graph = repository.get_revision_graph(revision_id)
135
 
        dotted = {}
136
 
        for n, revision_id, d, revno, e in tsort.merge_sort(graph, 
137
 
            revision_id, generate_revno=True):
138
 
            dotted[revision_id] = '.'.join(str(num) for num in revno)
139
 
        return dotted
140
134
 
141
135
    def _annotate(self, tree, file_id):
142
136
        current_revision = FakeRevision(CURRENT_REVISION)
151
145
            revision_id = self.branch.last_revision()
152
146
        else:
153
147
            revision_id = self.revision_id
154
 
        dotted = self._dotted_revnos(repository, revision_id)
155
148
        revision_cache = RevisionCache(repository, self.revisions)
156
149
        for origin, text in tree.annotate_iter(file_id):
157
150
            rev_id = origin
161
154
            else:
162
155
                try:
163
156
                    revision = revision_cache.get_revision(rev_id)
164
 
                    revno = dotted.get(rev_id, 'merge')
 
157
                    revno = self.dotted.get(rev_id, 'merge')
165
158
                    if len(revno) > 15:
166
159
                        revno = 'merge'
167
160
                except NoSuchRevision:
187
180
        if rev_id is None:
188
181
            return
189
182
        selected = self.revisions[rev_id]
190
 
        self.logview.set_revision(selected)
 
183
        self.revisionview.set_revision(selected)
191
184
        if (len(selected.parent_ids) != 0 and selected.parent_ids[0] not in
192
185
            self._no_back):
193
186
            enable_back = True
196
189
        self.back_button.set_sensitive(enable_back)
197
190
 
198
191
    def _create(self):
199
 
        self.logview = self._create_log_view()
 
192
        self.revisionview = self._create_log_view()
200
193
        self.annoview = self._create_annotate_view()
201
194
 
202
195
        vbox = gtk.VBox(False)
223
216
        
224
217
        self.pane = pane = gtk.VPaned()
225
218
        pane.add1(swbox)
226
 
        pane.add2(self.logview)
 
219
        pane.add2(self.revisionview)
227
220
        pane.show()
228
221
        vbox.pack_start(pane, expand=True, fill=True)
229
222
 
248
241
        self._search.show_for('line')
249
242
        self._search.set_target(self.annoview, LINE_NUM_COL)
250
243
 
251
 
    def row_diff(self, tv, path, tvc):
 
244
    def line_diff(self, tv, path, tvc):
252
245
        row = path[0]
253
246
        revision = self.annotations[row]
254
247
        repository = self.branch.repository
263
256
                tree2 = repository.revision_tree(NULL_REVISION)
264
257
        from bzrlib.plugins.gtk.diff import DiffWindow
265
258
        window = DiffWindow()
266
 
        window.set_diff("Diff for row %d" % (row+1), tree1, tree2)
 
259
        window.set_diff("Diff for line %d" % (row+1), tree1, tree2)
267
260
        window.set_file(tree1.id2path(self.file_id))
268
261
        window.show()
269
262
 
273
266
        tv.set_rules_hint(False)
274
267
        tv.connect("cursor-changed", self._activate_selected_revision)
275
268
        tv.show()
276
 
        tv.connect("row-activated", self.row_diff)
 
269
        tv.connect("row-activated", self.line_diff)
277
270
 
278
271
        cell = gtk.CellRendererText()
279
272
        cell.set_property("xalign", 1.0)
327
320
        return tv
328
321
 
329
322
    def _create_log_view(self):
330
 
        lv = LogView()
 
323
        lv = RevisionView()
331
324
        lv.show()
332
325
        return lv
333
326
 
394
387
            if i + n >= row:
395
388
                return j - i
396
389
 
397
 
    def _on_key_pressed(self, widget, event):
398
 
        """ Key press event handler. """
399
 
        keyname = gtk.gdk.keyval_name(event.keyval)
400
 
        func = getattr(self, '_on_key_press_' + keyname, None)
401
 
        if func:
402
 
            return func(event)
403
 
 
404
 
    def _on_key_press_w(self, event):
405
 
        if event.state & gtk.gdk.CONTROL_MASK:
406
 
            self.destroy()
407
 
            if self._parent is None:
408
 
                gtk.main_quit()
409
 
 
410
 
    def _on_key_press_q(self, event):
411
 
        if event.state & gtk.gdk.CONTROL_MASK:
412
 
            gtk.main_quit()
413
 
    
414
 
 
415
 
 
416
390
 
417
391
class FakeRevision:
418
392
    """ A fake revision.