57
self.span_selector.hide()
56
59
def annotate(self, branch, file_id):
57
60
self.revisions = {}
59
62
# [revision id, line number, committer, revno, highlight color, line]
60
self.model = gtk.ListStore(gobject.TYPE_STRING,
63
self.annomodel = gtk.ListStore(gobject.TYPE_STRING,
68
71
for line_no, (revision, revno, line)\
76
79
if revision.revision_id not in self.revisions:
77
80
self.revisions[revision.revision_id] = revision
79
self.model.append([revision.revision_id,
82
self.annomodel.append([revision.revision_id,
88
91
self._set_oldest_newest()
90
93
# so self._span_changed_cb will take care of initial highlighting
91
94
self.span_selector.activate_default()
93
self.treeview.set_model(self.model)
94
self.treeview.grab_focus()
96
self.annoview.set_model(self.annomodel)
97
self.annoview.grab_focus()
96
99
def jump_to_line(self, lineno):
97
if lineno > len(self.model) or lineno < 1:
100
if lineno > len(self.annomodel) or lineno < 1:
99
102
# FIXME:should really deal with this in the gui. Perhaps a status
106
self.treeview.set_cursor(row)
109
self.annoview.set_cursor(row)
108
111
def _annotate(self, branch, file_id):
109
112
rev_hist = branch.revision_history()
143
146
def _span_changed_cb(self, w, span):
144
147
self.annotate_colormap.set_span(span)
145
148
now = time.time()
146
self.model.foreach(self._highlight_annotation, now)
149
self.annomodel.foreach(self._highlight_annotation, now)
148
151
def _highlight_annotation(self, model, path, iter, now):
149
152
revision_id, = model.get(iter, REVISION_ID_COL)
153
156
self.annotate_colormap.get_color(days))
155
158
def _show_log(self, w):
156
(path, col) = self.treeview.get_cursor()
157
rev_id = self.model[path][REVISION_ID_COL]
159
(path, col) = self.annoview.get_cursor()
160
rev_id = self.annomodel[path][REVISION_ID_COL]
158
161
self.logview.set_revision(self.revisions[rev_id])
160
163
def _create(self):
164
self.logview = self._create_log_view()
165
self.annoview = self._create_annotate_view()
166
self.span_selector = self._create_span_selector()
161
168
vbox = gtk.VBox(False, 12)
162
169
vbox.set_border_width(12)
172
sw = gtk.ScrolledWindow()
173
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
174
sw.set_shadow_type(gtk.SHADOW_IN)
175
sw.add(self.annoview)
165
178
self.pane = pane = gtk.VPaned()
166
pane.add1(self._create_annotate_view())
167
pane.add2(self._create_log_view())
180
pane.add2(self.logview)
169
182
vbox.pack_start(pane, expand=True, fill=True)
171
184
hbox = gtk.HBox(True, 6)
174
hbox.pack_start(self._create_span_selector(),
175
expand=False, fill=True)
185
hbox.pack_start(self.span_selector, expand=False, fill=True)
177
186
hbox.pack_start(self._create_button_box(), expand=False, fill=True)
179
188
vbox.pack_start(hbox, expand=False, fill=True)
183
192
def _create_annotate_view(self):
184
sw = gtk.ScrolledWindow()
185
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
186
sw.set_shadow_type(gtk.SHADOW_IN)
189
self.treeview = gtk.TreeView()
190
self.treeview.set_rules_hint(False)
191
self.treeview.connect("cursor-changed", self._show_log)
192
sw.add(self.treeview)
194
tv.set_rules_hint(False)
195
tv.connect("cursor-changed", self._show_log)
195
198
cell = gtk.CellRendererText()
196
199
cell.set_property("xalign", 1.0)
197
200
cell.set_property("ypad", 0)
198
201
cell.set_property("family", "Monospace")
199
202
cell.set_property("cell-background-gdk",
200
self.treeview.get_style().bg[gtk.STATE_NORMAL])
203
tv.get_style().bg[gtk.STATE_NORMAL])
201
204
col = gtk.TreeViewColumn()
202
205
col.set_resizable(False)
203
206
col.pack_start(cell, expand=True)
204
207
col.add_attribute(cell, "text", LINE_NUM_COL)
205
self.treeview.append_column(col)
208
tv.append_column(col)
207
210
cell = gtk.CellRendererText()
208
211
cell.set_property("ypad", 0)
213
216
col.set_resizable(True)
214
217
col.pack_start(cell, expand=True)
215
218
col.add_attribute(cell, "text", COMMITTER_COL)
216
self.treeview.append_column(col)
219
tv.append_column(col)
218
221
cell = gtk.CellRendererText()
219
222
cell.set_property("xalign", 1.0)
224
227
col.set_resizable(False)
225
228
col.pack_start(cell, expand=True)
226
229
col.add_attribute(cell, "markup", REVNO_COL)
227
self.treeview.append_column(col)
230
tv.append_column(col)
229
232
cell = gtk.CellRendererText()
230
233
cell.set_property("ypad", 0)
234
237
col.pack_start(cell, expand=True)
235
238
col.add_attribute(cell, "foreground", HIGHLIGHT_COLOR_COL)
236
239
col.add_attribute(cell, "text", TEXT_LINE_COL)
237
self.treeview.append_column(col)
240
tv.append_column(col)
239
self.treeview.set_search_column(LINE_NUM_COL)
242
tv.set_search_column(LINE_NUM_COL)
243
246
def _create_span_selector(self):
244
self.span_selector = SpanSelector()
245
self.span_selector.connect("span-changed", self._span_changed_cb)
246
self.span_selector.show()
248
ss.connect("span-changed", self._span_changed_cb)
248
return self.span_selector
250
253
def _create_log_view(self):
251
self.logview = LogView()
255
259
def _create_button_box(self):
256
260
box = gtk.HButtonBox()