/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: 2007-10-14 15:54:57 UTC
  • mto: This revision was merged to the branch mainline in revision 317.
  • Revision ID: daniel.schierbeck@gmail.com-20071014155457-m3ek29p4ima8ev7d
Added the new Window base class.

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