def add_annotate_page(self, path, revid): ''' Add new annotation page to notebook. Start scan of file 'path' revision history, start annotate of supplied revision 'revid'. ''' if revid == '.': ctx = self.repo.workingctx().parents()[0] try: fctx = ctx.filectx(path) except revlog.LookupError: Prompt('File is unrevisioned', 'Unable to annotate ' + path, self).run() return rev = fctx.filelog().linkrev(fctx.filenode()) revid = str(rev) else: rev = long(revid) frame = gtk.Frame() frame.set_border_width(10) vbox = gtk.VBox() # File log revision graph graphview = TreeView(self.repo, 5000, self.stbar) graphview.connect('revisions-loaded', self.revisions_loaded, rev) graphview.refresh(True, None, {'filehist':path, 'filerev':rev}) graphview.set_property('rev-column-visible', True) graphview.set_property('date-column-visible', True) hbox = gtk.HBox() followlabel = gtk.Label('') follow = gtk.Button('Follow') follow.connect('clicked', self.follow_rename) follow.hide() follow.set_sensitive(False) hbox.pack_start(gtk.Label(''), True, True) hbox.pack_start(followlabel, False, False) hbox.pack_start(follow, False, False) # Annotation text tree view treeview = gtk.TreeView() treeview.get_selection().set_mode(gtk.SELECTION_SINGLE) treeview.set_property('fixed-height-mode', True) treeview.set_border_width(0) treeview.connect("cursor-changed", self._ann_selection_changed) treeview.connect('button-release-event', self._ann_button_release) treeview.connect('popup-menu', self._ann_popup_menu) treeview.connect('row-activated', self._ann_row_act) results = gtk.ListStore(str, str, str, str, str, str) treeview.set_model(results) context_menu = self.ann_header_context_menu(treeview) for title, width, col, emode, visible in ( ('Rev', 10, self.COL_REVID, pango.ELLIPSIZE_NONE, True), ('File', 15, self.COL_PATH, pango.ELLIPSIZE_START, False), ('User', 15, self.COL_USER, pango.ELLIPSIZE_END, False), ('Matches', 80, self.COL_TEXT, pango.ELLIPSIZE_END, True)): cell = gtk.CellRendererText() cell.set_property("width-chars", width) cell.set_property("ellipsize", emode) cell.set_property("family", "Monospace") column = gtk.TreeViewColumn(title) column.set_resizable(True) column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) column.set_fixed_width(cell.get_size(treeview)[2]) column.pack_start(cell, expand=True) column.add_attribute(cell, "text", col) column.add_attribute(cell, "background", self.COL_COLOR) column.set_visible(visible) treeview.append_column(column) self._add_header_context_menu(column, context_menu) treeview.set_headers_clickable(True) if hasattr(treeview, 'set_tooltip_column'): treeview.set_tooltip_column(self.COL_TOOLTIP) results.path = path results.rev = revid scroller = gtk.ScrolledWindow() scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scroller.add(treeview) vpaned = gtk.VPaned() vpaned.pack1(graphview, True, True) vpaned.pack2(scroller, True, True) vbox.pack_start(vpaned, True, True) vbox.pack_start(hbox, False, False) frame.add(vbox) frame.show_all() hbox = gtk.HBox() lbl = gtk.Label(toutf(os.path.basename(path) + '@' + revid)) close = self.create_tab_close_button() close.connect('clicked', self.close_page, frame) hbox.pack_start(lbl, True, True, 2) hbox.pack_start(close, False, False) hbox.show_all() num = self.notebook.append_page_menu(frame, hbox, gtk.Label(toutf(path + '@' + revid))) if hasattr(self.notebook, 'set_tab_reorderable'): self.notebook.set_tab_reorderable(frame, True) self.notebook.set_current_page(num) graphview.connect('revision-selected', self.log_selection_changed, path, followlabel, follow) objs = (frame, treeview.get_model(), path) graphview.treeview.connect('row-activated', self.log_activate, objs) graphview.treeview.connect('button-release-event', self._ann_button_release) graphview.treeview.connect('popup-menu', self._ann_popup_menu)