def render_table_row(self, prev_cmd_invocation, tbl, row_index): XPADDING = 8 YPADDING = 15 # using "yoptions=gtk.SHRINK" in table.attach seems to do the trick # in not having the table cells expand vertically like nuts # Print inputs: widgets = [] for re in self.read_event_lst: lab = gtk.Label(prettify_filename(re.filename)) lab.modify_font(pango.FontDescription("monospace 9")) lab.show() menu = gtk.Menu() view_item = gtk.MenuItem('Open') view_item.connect("activate", self.view_file_version, re) view_item.show() mark_diff_item = gtk.MenuItem('Select for diff') mark_diff_item.connect("activate", self.mark_for_diff, re) mark_diff_item.show() prov_item = gtk.MenuItem('View source file provenance') prov_item.connect("activate", self.view_source_prov, re) prov_item.show() menu.append(view_item) menu.append(mark_diff_item) menu.append(prov_item) global diff_menu_items diff_menu_items.append(mark_diff_item) lab_box = create_clickable_event_box(lab, menu) lab_box.show() lab_align = create_alignment(lab_box, pbottom=5) lab_align.show() widgets.append(lab_align) if prev_cmd_invocation: diff_result_str = self.diff_input_files(prev_cmd_invocation) # TODO: adjust height based on existing height of row/column text_widget = create_simple_text_view_widget( diff_result_str, 400, 200) #text_widget = create_simple_text_view_widget(diff_result_str, 500, 300) widgets.append(text_widget) input_vbox = create_vbox(widgets) tbl.attach(input_vbox, 0, 1, row_index, row_index + 1, xpadding=XPADDING + 5, ypadding=YPADDING, yoptions=gtk.SHRINK) # Print command: # cool that we get to re-use BashFeedEvent objects n = burrito_feed.BashFeedEvent(self.cmd_event.pwd) n.add_command_chron_order(self.cmd_event) # make it not expand like crazy in either the horizontal or vertical directions tbl.attach(n.get_widget(), 1, 2, row_index, row_index + 1, xpadding=XPADDING, ypadding=YPADDING, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK) # Print output: mime_type_guess = mimetypes.guess_type(self.get_output_filename())[0] cur_output_filepath = self.fvm.checkout_file_before_next_write( self.output_event, self.sorted_write_events_lst) if 'image/' in mime_type_guess: output_image = gtk.Image() output_image.set_from_file(cur_output_filepath) tbl.attach(output_image, 2, 3, row_index, row_index + 1, xpadding=XPADDING, ypadding=YPADDING, yoptions=gtk.SHRINK) elif 'text/' in mime_type_guess: if prev_cmd_invocation: str_to_display = self.diff_output_file(cur_output_filepath, prev_cmd_invocation) else: # display entire file contents: str_to_display = open(cur_output_filepath, 'U').read() text_widget = create_simple_text_view_widget( str_to_display, 500, 350) tbl.attach(text_widget, 2, 3, row_index, row_index + 1, xpadding=XPADDING, ypadding=YPADDING, yoptions=gtk.SHRINK) # Print annotations associated with self.output_event: annotator = AnnotationComponent(300, self.output_event, '<Click to enter a new note>') tbl.attach(annotator.get_widget(), 3, 4, row_index, row_index + 1, xpadding=XPADDING, ypadding=YPADDING, yoptions=gtk.SHRINK) show_all_local_widgets(locals())
def render_table_row(self, tbl, row_index): XPADDING = 8 YPADDING = 15 # using "yoptions=gtk.SHRINK" in table.attach seems to do the trick # in not having the table cells expand vertically like nuts # Print source file diffs sd = self.start_timestamp.strftime('%Y-%m-%d') ed = self.end_timestamp.strftime('%Y-%m-%d') st = self.start_timestamp.strftime('%H:%M:%S') et = self.end_timestamp.strftime('%H:%M:%S') # If the days are the same, then don't duplicate: if sd == ed: date_str = '%s to %s (%s)' % (st, et, sd) else: date_str = '%s %s to %s %s' % (sd, st, ed, et) date_lab = gtk.Label(date_str) date_lab.modify_font(pango.FontDescription("sans 8")) date_lab_lalign = create_alignment(date_lab, pbottom=3) diff_result_str = self.diff() # TODO: adjust height based on existing height of row/column text_widget = create_simple_text_view_widget( diff_result_str, 450, 200) source_file_vbox = create_vbox([date_lab_lalign, text_widget]) tbl.attach(source_file_vbox, 0, 1, row_index, row_index + 1, xpadding=XPADDING + 5, ypadding=YPADDING, yoptions=gtk.SHRINK) # Print co-reads: # 1.) webpages visited # 2.) other vim files read # 3.) other non-vim files read co_read_widgets = [] # TODO: make these labels clickable with pop-up context menus for (fn, timestamp) in self.other_vim_files_read.items() + \ self.non_vim_files_read.items(): lab = gtk.Label(prettify_filename(fn)) lab.modify_font(pango.FontDescription("monospace 9")) lab.set_selectable(True) lab.show() lab_lalign = create_alignment(lab, pbottom=3) lab_lalign.show() co_read_widgets.append(lab_lalign) # de-dup: urls_seen = set() if self.webpages_visited: n = WebpageFeedEvent() for w in self.webpages_visited: if w.url not in urls_seen: urls_seen.add(w.url) n.add_webpage_chron_order(w) n_lalign = create_alignment(n.get_widget(), ptop=3) co_read_widgets.append(n_lalign) co_reads_vbox = create_vbox(co_read_widgets) co_reads_vbox_lalign = create_alignment(co_reads_vbox) tbl.attach(co_reads_vbox_lalign, 1, 2, row_index, row_index + 1, xpadding=XPADDING, ypadding=YPADDING, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK) # Print co-writes # 1.) other vim files edited # 2.) doodle events # 3.) happy face events # 4.) sad face events # 5.) status update events co_write_widgets = [] for (fn, timestamp) in self.other_vim_files_edited.iteritems(): lab = gtk.Label(prettify_filename(fn)) lab.modify_font(pango.FontDescription("monospace 9")) lab.set_selectable(True) lab.show() lab_lalign = create_alignment(lab) lab_lalign.show() co_write_widgets.append(lab_lalign) all_feed_evts = [] for e in self.doodle_save_events: d = DoodleFeedEvent(e, self.fvm) d.load_thumbnail() # subtle but dumb!!! all_feed_evts.append(d) for e in self.happy_face_events: all_feed_evts.append(HappyFaceFeedEvent(e)) for e in self.sad_face_events: all_feed_evts.append(SadFaceFeedEvent(e)) for e in self.status_update_events: all_feed_evts.append(StatusUpdateFeedEvent(e)) for e in all_feed_evts: co_write_widgets.append(e.get_widget()) co_writes_vbox = create_vbox(co_write_widgets, [4 for e in co_write_widgets]) co_writes_vbox_lalign = create_alignment(co_writes_vbox) tbl.attach(co_writes_vbox_lalign, 2, 3, row_index, row_index + 1, xpadding=XPADDING, ypadding=YPADDING, xoptions=gtk.SHRINK, yoptions=gtk.SHRINK) # Print notes (annotations) # stick the annotation on the FINAL FileWriteEvent in this faux version: annotator = AnnotationComponent(300, self.get_last_write_event(), '<Click to enter a new note>') tbl.attach(annotator.get_widget(), 3, 4, row_index, row_index + 1, xpadding=XPADDING, ypadding=YPADDING, yoptions=gtk.SHRINK) show_all_local_widgets(locals())