示例#1
0
    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())