/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: matkor
  • Date: 2007-08-23 10:17:40 UTC
  • mto: This revision was merged to the branch mainline in revision 265.
  • Revision ID: matkor@laptop-hp-20070823101740-s17kf9qa383wiuje
Code for "branch update" menuitem and toolbox. Typo fix

Show diffs side-by-side

added added

removed removed

Lines of Context:
55
55
 
56
56
        self._create()
57
57
        self.revisions = {}
 
58
        self.history = []
 
59
        self._no_back = set()
58
60
 
59
61
    def annotate(self, tree, branch, file_id):
60
62
        self.annotations = []
64
66
        self.revision_id = getattr(tree, 'get_revision_id', 
65
67
                                   lambda: CURRENT_REVISION)()
66
68
        
67
 
        # [revision id, line number, committer, revno, highlight color, line]
 
69
        # [revision id, line number, author, revno, highlight color, line]
68
70
        self.annomodel = gtk.ListStore(gobject.TYPE_STRING,
69
71
                                       gobject.TYPE_STRING,
70
72
                                       gobject.TYPE_STRING,
82
84
                    revno = committer = ""
83
85
                else:
84
86
                    last_seen = revision.revision_id
85
 
                    committer = revision.committer
 
87
                    committer = revision.properties.get('author',
 
88
                        revision.committer)
86
89
 
87
90
                if revision.revision_id not in self.revisions:
88
91
                    self.revisions[revision.revision_id] = revision
139
142
        current_revision.timestamp = time.time()
140
143
        current_revision.message = '[Not yet committed]'
141
144
        current_revision.parent_ids = tree.get_parent_ids()
 
145
        current_revision.properties['branch-nick'] = self.branch.nick
142
146
        current_revno = '%d?' % (self.branch.revno() + 1)
143
147
        repository = self.branch.repository
144
148
        if self.revision_id == CURRENT_REVISION:
176
180
            return None
177
181
        return self.annomodel[path][REVISION_ID_COL]
178
182
 
179
 
    def _show_log(self, w):
 
183
    def _activate_selected_revision(self, w):
180
184
        rev_id = self._selected_revision()
181
185
        if rev_id is None:
182
186
            return
183
 
        self.logview.set_revision(self.revisions[rev_id])
 
187
        selected = self.revisions[rev_id]
 
188
        self.logview.set_revision(selected)
 
189
        if (len(selected.parent_ids) != 0 and selected.parent_ids[0] not in
 
190
            self._no_back):
 
191
            enable_back = True
 
192
        else:
 
193
            enable_back = False
 
194
        self.back_button.set_sensitive(enable_back)
184
195
 
185
196
    def _create(self):
186
197
        self.logview = self._create_log_view()
187
198
        self.annoview = self._create_annotate_view()
188
199
 
189
 
        vbox = gtk.VBox(False, 12)
190
 
        vbox.set_border_width(12)
 
200
        vbox = gtk.VBox(False)
191
201
        vbox.show()
192
202
 
193
203
        sw = gtk.ScrolledWindow()
196
206
        sw.add(self.annoview)
197
207
        self.annoview.gwindow = self
198
208
        sw.show()
 
209
 
 
210
        swbox = gtk.VBox()
 
211
        swbox.pack_start(sw)
 
212
        swbox.show()
 
213
 
 
214
        hbox = gtk.HBox(False, 6)
 
215
        self.back_button = self._create_back_button()
 
216
        hbox.pack_start(self.back_button, expand=False, fill=True)
 
217
        self.forward_button = self._create_forward_button()
 
218
        hbox.pack_start(self.forward_button, expand=False, fill=True)
 
219
        hbox.show()
 
220
        vbox.pack_start(hbox, expand=False, fill=True)
199
221
        
200
222
        self.pane = pane = gtk.VPaned()
201
 
        pane.add1(sw)
 
223
        pane.add1(swbox)
202
224
        pane.add2(self.logview)
203
225
        pane.show()
204
226
        vbox.pack_start(pane, expand=True, fill=True)
205
227
 
206
228
        self._search = SearchBox()
207
 
        vbox.pack_start(self._search, expand=False, fill=True)
 
229
        swbox.pack_start(self._search, expand=False, fill=True)
208
230
        accels = gtk.AccelGroup()
209
231
        accels.connect_group(gtk.keysyms.f, gtk.gdk.CONTROL_MASK,
210
232
                             gtk.ACCEL_LOCKED,
214
236
                             self._search_by_line)
215
237
        self.add_accel_group(accels)
216
238
 
217
 
        hbox = gtk.HBox(True, 6)
218
 
        hbox.pack_start(self._create_prev_button(), expand=False, fill=True)
219
 
        hbox.pack_end(self._create_button_box(), expand=False, fill=True)
220
 
        hbox.show()
221
 
        vbox.pack_start(hbox, expand=False, fill=True)
222
 
 
223
239
        self.add(vbox)
224
240
 
225
241
    def _search_by_text(self, accel_group, window, key, modifiers):
253
269
    def _create_annotate_view(self):
254
270
        tv = gtk.TreeView()
255
271
        tv.set_rules_hint(False)
256
 
        tv.connect("cursor-changed", self._show_log)
 
272
        tv.connect("cursor-changed", self._activate_selected_revision)
257
273
        tv.show()
258
274
        tv.connect("row-activated", self.row_diff)
259
275
 
313
329
        lv.show()
314
330
        return lv
315
331
 
316
 
    def _create_button_box(self):
317
 
        box = gtk.HButtonBox()
318
 
        box.set_layout(gtk.BUTTONBOX_END)
319
 
        box.show()
320
 
 
321
 
        button = gtk.Button()
322
 
        button.set_use_stock(True)
323
 
        button.set_label("gtk-close")
324
 
        button.connect("clicked", lambda w: self.destroy())
325
 
        button.show()
326
 
 
327
 
        box.pack_start(button, expand=False, fill=False)
328
 
 
329
 
        return box
330
 
 
331
 
    def _create_prev_button(self):
332
 
        box = gtk.HButtonBox()
333
 
        box.set_layout(gtk.BUTTONBOX_START)
334
 
        box.show()
335
 
        
 
332
    def _create_back_button(self):
336
333
        button = gtk.Button()
337
334
        button.set_use_stock(True)
338
335
        button.set_label("gtk-go-back")
339
336
        button.connect("clicked", lambda w: self.go_back())
340
 
        button.show()
341
 
        box.pack_start(button, expand=False, fill=False)
342
 
        return box
 
337
        button.set_relief(gtk.RELIEF_NONE)
 
338
        button.show()
 
339
        return button
 
340
 
 
341
    def _create_forward_button(self):
 
342
        button = gtk.Button()
 
343
        button.set_use_stock(True)
 
344
        button.set_label("gtk-go-forward")
 
345
        button.connect("clicked", lambda w: self.go_forward())
 
346
        button.set_relief(gtk.RELIEF_NONE)
 
347
        button.show()
 
348
        button.set_sensitive(False)
 
349
        return button
343
350
 
344
351
    def go_back(self):
 
352
        last_tree = self.tree
345
353
        rev_id = self._selected_revision()
346
354
        parent_id = self.revisions[rev_id].parent_ids[0]
347
 
        tree = self.branch.repository.revision_tree(parent_id)
348
 
        if self.file_id in tree:
349
 
            offset = self.get_scroll_offset(tree)
 
355
        target_tree = self.branch.repository.revision_tree(parent_id)
 
356
        if self._go(target_tree):
 
357
            self.history.append(last_tree)
 
358
            self.forward_button.set_sensitive(True)
 
359
        else:
 
360
            self._no_back.add(parent_id)
 
361
            self.back_button.set_sensitive(False)
 
362
 
 
363
    def go_forward(self):
 
364
        if len(self.history) == 0:
 
365
            return
 
366
        target_tree = self.history.pop()
 
367
        if len(self.history) == 0:
 
368
            self.forward_button.set_sensitive(False)
 
369
        self._go(target_tree)
 
370
 
 
371
    def _go(self, target_tree):
 
372
        rev_id = self._selected_revision()
 
373
        if self.file_id in target_tree:
 
374
            offset = self.get_scroll_offset(target_tree)
350
375
            (row,), col = self.annoview.get_cursor()
351
 
            self.annotate(tree, self.branch, self.file_id)
352
 
            self.annoview.set_cursor(row+offset)
 
376
            self.annotate(target_tree, self.branch, self.file_id)
 
377
            new_row = row+offset
 
378
            if new_row < 0:
 
379
                new_row = 0
 
380
            self.annoview.set_cursor(new_row)
 
381
            return True
 
382
        else:
 
383
            return False
353
384
 
354
385
    def get_scroll_offset(self, tree):
355
386
        old = self.tree.get_file(self.file_id)
369
400
    For when a revision is referenced but not present.
370
401
    """
371
402
 
372
 
    def __init__(self, revision_id, committer='?'):
 
403
    def __init__(self, revision_id, committer='?', nick=None):
373
404
        self.revision_id = revision_id
374
405
        self.parent_ids = []
375
406
        self.committer = committer
376
407
        self.message = "?"
377
408
        self.timestamp = 0.0
378
409
        self.timezone = 0
379
 
        self.properties = []
 
410
        self.properties = {}
380
411
 
381
412
 
382
413
class RevisionCache(object):