/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: 2008-06-29 19:18:34 UTC
  • mto: This revision was merged to the branch mainline in revision 515.
  • Revision ID: jelmer@samba.org-20080629191834-ha2ecpv5szt96nge
Make sure signed testament matches repository data.

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
32
from bzrlib.plugins.gtk.window import Window
33
33
 
34
34
 
45
45
class GAnnotateWindow(Window):
46
46
    """Annotate window."""
47
47
 
48
 
    def __init__(self, all=False, plain=False, parent=None):
 
48
    def __init__(self, all=False, plain=False, parent=None, branch=None):
49
49
        self.all = all
50
50
        self.plain = plain
 
51
        self._branch = branch
51
52
        
52
53
        Window.__init__(self, parent)
53
54
        
64
65
        self.branch = branch
65
66
        self.tree = tree
66
67
        self.file_id = file_id
67
 
        self.logview.set_file_id(file_id)
 
68
        self.revisionview.set_file_id(file_id)
68
69
        self.revision_id = getattr(tree, 'get_revision_id', 
69
70
                                   lambda: CURRENT_REVISION)()
70
71
        
80
81
        try:
81
82
            branch.lock_read()
82
83
            branch.repository.lock_read()
 
84
            self.dotted = {}
 
85
            revno_map = self.branch.get_revision_id_to_revno_map()
 
86
            for revision_id, revno in revno_map.iteritems():
 
87
                self.dotted[revision_id] = '.'.join(str(num) for num in revno)
83
88
            for line_no, (revision, revno, line)\
84
89
                    in enumerate(self._annotate(tree, file_id)):
85
90
                if revision.revision_id == last_seen and not self.all:
109
114
 
110
115
        self.annoview.set_model(self.annomodel)
111
116
        self.annoview.grab_focus()
 
117
        my_revno = self.dotted.get(self.revision_id, 'current')
 
118
        title = '%s (%s) - gannotate' % (self.tree.id2path(file_id), my_revno)
 
119
        self.set_title(title)
112
120
 
113
121
    def jump_to_line(self, lineno):
114
122
        if lineno > len(self.annomodel) or lineno < 1:
124
132
        self.annoview.set_cursor(row)
125
133
        self.annoview.scroll_to_cell(row, use_align=True)
126
134
 
127
 
    def _dotted_revnos(self, repository, revision_id):
128
 
        """Return a dict of revision_id -> dotted revno
129
 
        
130
 
        :param repository: The repository to get the graph from
131
 
        :param revision_id: The last revision for which this info is needed
132
 
        """
133
 
        graph = repository.get_revision_graph(revision_id)
134
 
        dotted = {}
135
 
        for n, revision_id, d, revno, e in tsort.merge_sort(graph, 
136
 
            revision_id, generate_revno=True):
137
 
            dotted[revision_id] = '.'.join(str(num) for num in revno)
138
 
        return dotted
139
135
 
140
136
    def _annotate(self, tree, file_id):
141
137
        current_revision = FakeRevision(CURRENT_REVISION)
150
146
            revision_id = self.branch.last_revision()
151
147
        else:
152
148
            revision_id = self.revision_id
153
 
        dotted = self._dotted_revnos(repository, revision_id)
154
149
        revision_cache = RevisionCache(repository, self.revisions)
155
150
        for origin, text in tree.annotate_iter(file_id):
156
151
            rev_id = origin
160
155
            else:
161
156
                try:
162
157
                    revision = revision_cache.get_revision(rev_id)
163
 
                    revno = dotted.get(rev_id, 'merge')
 
158
                    revno = self.dotted.get(rev_id, 'merge')
164
159
                    if len(revno) > 15:
165
160
                        revno = 'merge'
166
161
                except NoSuchRevision:
183
178
 
184
179
    def _activate_selected_revision(self, w):
185
180
        rev_id = self._selected_revision()
186
 
        if rev_id is None:
 
181
        if not rev_id or rev_id == NULL_REVISION:
187
182
            return
188
183
        selected = self.revisions[rev_id]
189
 
        self.logview.set_revision(selected)
 
184
        self.revisionview.set_revision(selected)
190
185
        if (len(selected.parent_ids) != 0 and selected.parent_ids[0] not in
191
186
            self._no_back):
192
187
            enable_back = True
195
190
        self.back_button.set_sensitive(enable_back)
196
191
 
197
192
    def _create(self):
198
 
        self.logview = self._create_log_view()
 
193
        self.revisionview = self._create_log_view()
199
194
        self.annoview = self._create_annotate_view()
200
195
 
201
196
        vbox = gtk.VBox(False)
222
217
        
223
218
        self.pane = pane = gtk.VPaned()
224
219
        pane.add1(swbox)
225
 
        pane.add2(self.logview)
 
220
        pane.add2(self.revisionview)
226
221
        pane.show()
227
222
        vbox.pack_start(pane, expand=True, fill=True)
228
223
 
247
242
        self._search.show_for('line')
248
243
        self._search.set_target(self.annoview, LINE_NUM_COL)
249
244
 
250
 
    def row_diff(self, tv, path, tvc):
 
245
    def line_diff(self, tv, path, tvc):
251
246
        row = path[0]
252
247
        revision = self.annotations[row]
253
248
        repository = self.branch.repository
262
257
                tree2 = repository.revision_tree(NULL_REVISION)
263
258
        from bzrlib.plugins.gtk.diff import DiffWindow
264
259
        window = DiffWindow()
265
 
        window.set_diff("Diff for row %d" % (row+1), tree1, tree2)
 
260
        window.set_diff("Diff for line %d" % (row+1), tree1, tree2)
266
261
        window.set_file(tree1.id2path(self.file_id))
267
262
        window.show()
268
263
 
272
267
        tv.set_rules_hint(False)
273
268
        tv.connect("cursor-changed", self._activate_selected_revision)
274
269
        tv.show()
275
 
        tv.connect("row-activated", self.row_diff)
 
270
        tv.connect("row-activated", self.line_diff)
276
271
 
277
272
        cell = gtk.CellRendererText()
278
273
        cell.set_property("xalign", 1.0)
326
321
        return tv
327
322
 
328
323
    def _create_log_view(self):
329
 
        lv = LogView()
 
324
        lv = RevisionView(self._branch)
330
325
        lv.show()
331
326
        return lv
332
327