/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: John Arbash Meinel
  • Date: 2007-11-02 22:08:54 UTC
  • mto: (330.3.3 trunk)
  • mto: This revision was merged to the branch mainline in revision 368.
  • Revision ID: john@arbash-meinel.com-20071102220854-thegr866sz1tbwob
Finish connecting the 'Commit all changes' radio buttons.

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