~phanatic/bzr-gtk/integration

« back to all changes in this revision

Viewing changes to annotate/gannotate.py

  • Committer: Szilveszter Farkas (Phanatic)
  • Date: 2007-03-23 16:57:41 UTC
  • mfrom: (126.4.12 trunk)
  • Revision ID: szilveszter.farkas@gmail.com-20070323165741-eu5ppphqogyzzpui
MergeĀ fromĀ trunk.

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 = []
177
179
            return None
178
180
        return self.annomodel[path][REVISION_ID_COL]
179
181
 
180
 
    def _show_log(self, w):
 
182
    def _activate_selected_revision(self, w):
181
183
        rev_id = self._selected_revision()
182
184
        if rev_id is None:
183
185
            return
184
 
        self.logview.set_revision(self.revisions[rev_id])
 
186
        selected = self.revisions[rev_id]
 
187
        self.logview.set_revision(selected)
 
188
        if (len(selected.parent_ids) != 0 and selected.parent_ids[0] not in
 
189
            self._no_back):
 
190
            enable_back = True
 
191
        else:
 
192
            enable_back = False
 
193
        self.back_button.set_sensitive(enable_back)
185
194
 
186
195
    def _create(self):
187
196
        self.logview = self._create_log_view()
188
197
        self.annoview = self._create_annotate_view()
189
198
 
190
 
        vbox = gtk.VBox(False, 12)
191
 
        vbox.set_border_width(12)
 
199
        vbox = gtk.VBox(False)
192
200
        vbox.show()
193
201
 
194
202
        sw = gtk.ScrolledWindow()
197
205
        sw.add(self.annoview)
198
206
        self.annoview.gwindow = self
199
207
        sw.show()
 
208
 
 
209
        swbox = gtk.VBox()
 
210
        swbox.pack_start(sw)
 
211
        swbox.show()
 
212
 
 
213
        hbox = gtk.HBox(False, 6)
 
214
        self.back_button = self._create_back_button()
 
215
        hbox.pack_start(self.back_button, expand=False, fill=True)
 
216
        self.forward_button = self._create_forward_button()
 
217
        hbox.pack_start(self.forward_button, expand=False, fill=True)
 
218
        hbox.show()
 
219
        vbox.pack_start(hbox, expand=False, fill=True)
200
220
        
201
221
        self.pane = pane = gtk.VPaned()
202
 
        pane.add1(sw)
 
222
        pane.add1(swbox)
203
223
        pane.add2(self.logview)
204
224
        pane.show()
205
225
        vbox.pack_start(pane, expand=True, fill=True)
206
226
 
207
227
        self._search = SearchBox()
208
 
        vbox.pack_start(self._search, expand=False, fill=True)
 
228
        swbox.pack_start(self._search, expand=False, fill=True)
209
229
        accels = gtk.AccelGroup()
210
230
        accels.connect_group(gtk.keysyms.f, gtk.gdk.CONTROL_MASK,
211
231
                             gtk.ACCEL_LOCKED,
215
235
                             self._search_by_line)
216
236
        self.add_accel_group(accels)
217
237
 
218
 
        hbox = gtk.HBox(True, 6)
219
 
        hbox.pack_start(self._create_prev_button(), expand=False, fill=True)
220
 
        hbox.pack_end(self._create_button_box(), expand=False, fill=True)
221
 
        hbox.show()
222
 
        vbox.pack_start(hbox, expand=False, fill=True)
223
 
 
224
238
        self.add(vbox)
225
239
 
226
240
    def _search_by_text(self, accel_group, window, key, modifiers):
254
268
    def _create_annotate_view(self):
255
269
        tv = gtk.TreeView()
256
270
        tv.set_rules_hint(False)
257
 
        tv.connect("cursor-changed", self._show_log)
 
271
        tv.connect("cursor-changed", self._activate_selected_revision)
258
272
        tv.show()
259
273
        tv.connect("row-activated", self.row_diff)
260
274
 
314
328
        lv.show()
315
329
        return lv
316
330
 
317
 
    def _create_button_box(self):
318
 
        box = gtk.HButtonBox()
319
 
        box.set_layout(gtk.BUTTONBOX_END)
320
 
        box.show()
321
 
 
322
 
        button = gtk.Button()
323
 
        button.set_use_stock(True)
324
 
        button.set_label("gtk-close")
325
 
        button.connect("clicked", lambda w: self.destroy())
326
 
        button.show()
327
 
 
328
 
        box.pack_start(button, expand=False, fill=False)
329
 
 
330
 
        return box
331
 
 
332
 
    def _create_prev_button(self):
333
 
        box = gtk.HButtonBox()
334
 
        box.set_layout(gtk.BUTTONBOX_START)
335
 
        box.show()
336
 
        
 
331
    def _create_back_button(self):
337
332
        button = gtk.Button()
338
333
        button.set_use_stock(True)
339
334
        button.set_label("gtk-go-back")
340
335
        button.connect("clicked", lambda w: self.go_back())
341
 
        button.show()
342
 
        box.pack_start(button, expand=False, fill=False)
343
 
        return box
 
336
        button.set_relief(gtk.RELIEF_NONE)
 
337
        button.show()
 
338
        return button
 
339
 
 
340
    def _create_forward_button(self):
 
341
        button = gtk.Button()
 
342
        button.set_use_stock(True)
 
343
        button.set_label("gtk-go-forward")
 
344
        button.connect("clicked", lambda w: self.go_forward())
 
345
        button.set_relief(gtk.RELIEF_NONE)
 
346
        button.show()
 
347
        button.set_sensitive(False)
 
348
        return button
344
349
 
345
350
    def go_back(self):
 
351
        last_tree = self.tree
346
352
        rev_id = self._selected_revision()
347
353
        parent_id = self.revisions[rev_id].parent_ids[0]
348
 
        tree = self.branch.repository.revision_tree(parent_id)
349
 
        if self.file_id in tree:
350
 
            offset = self.get_scroll_offset(tree)
 
354
        target_tree = self.branch.repository.revision_tree(parent_id)
 
355
        if self._go(target_tree):
 
356
            self.history.append(last_tree)
 
357
            self.forward_button.set_sensitive(True)
 
358
        else:
 
359
            self._no_back.add(parent_id)
 
360
            self.back_button.set_sensitive(False)
 
361
 
 
362
    def go_forward(self):
 
363
        if len(self.history) == 0:
 
364
            return
 
365
        target_tree = self.history.pop()
 
366
        if len(self.history) == 0:
 
367
            self.forward_button.set_sensitive(False)
 
368
        self._go(target_tree)
 
369
 
 
370
    def _go(self, target_tree):
 
371
        rev_id = self._selected_revision()
 
372
        if self.file_id in target_tree:
 
373
            offset = self.get_scroll_offset(target_tree)
351
374
            (row,), col = self.annoview.get_cursor()
352
 
            self.annotate(tree, self.branch, self.file_id)
353
 
            self.annoview.set_cursor(row+offset)
 
375
            self.annotate(target_tree, self.branch, self.file_id)
 
376
            new_row = row+offset
 
377
            if new_row < 0:
 
378
                new_row = 0
 
379
            self.annoview.set_cursor(new_row)
 
380
            return True
 
381
        else:
 
382
            return False
354
383
 
355
384
    def get_scroll_offset(self, tree):
356
385
        old = self.tree.get_file(self.file_id)