예제 #1
0
 def change_mark(cb):
     # copy marks for safekeeping...
     new_text = cb.get_active_text()
     sm = gtk.TextMark(None, True)
     self.tb.add_mark(sm, self.tb.get_iter_at_mark(smark))
     em = gtk.TextMark(None, False)
     self.tb.add_mark(em, self.tb.get_iter_at_mark(emark))
     # remove old marks...
     remove_markup()
     # And relabel!
     self.label_range(self.tb.get_iter_at_mark(sm),
                      self.tb.get_iter_at_mark(em), new_text)
예제 #2
0
    def hide_range(self, st, end):
        """Hide text between start and end.

        Return midno that can be used to unhide the range."""
        midno = self.midno
        self.midno += 1
        start_mark = gtk.TextMark('start-markup-%s' % midno, False)
        end_mark = gtk.TextMark('end-markup-%s' % midno, True)
        self.tb.apply_tag(self.ignore_tag, st, end)
        self.tb.add_mark(start_mark, st)
        self.tb.add_mark(end_mark, end)
        self.markup_marks[midno] = (start_mark, end_mark)
        return midno
예제 #3
0
    def test_text_view_scroll_to_mark(self):
        import gtk

        view = gtk.TextView()
        buf = view.get_buffer()
        mark = gtk.TextMark(name="foo")
        buf.add_mark(mark, buf.get_end_iter())
        view.scroll_to_mark(mark, 0.0)
예제 #4
0
 def insert_markup_text (self, itr, text, *tags):
     """Insert markup text into the buffer. We do this in such a
     way that we can remove it easily later.
     """
     midno = self.midno; self.midno += 1
     start_mark = gtk.TextMark('start-markup-%s'%midno,False)
     end_mark = gtk.TextMark('end-markup-%s'%midno,True)
     start_offset = itr.get_offset()
     if tags:
         self.tb.insert_with_tags(itr,text,*tags)
     else:
         self.tb.insert(itr,text)
     self.tb.add_mark(start_mark,self.tb.get_iter_at_offset(start_offset))
     end_offset = start_offset + len(text)
     end_itr = self.tb.get_iter_at_offset(end_offset)
     self.tb.add_mark(end_mark,end_itr)
     self.markup_marks[midno] = (start_mark,end_mark)
     return midno
예제 #5
0
    def label_range(self, st, end, label):
        if self.tags_by_label.get(label, '') == 'ignore':
            midno = self.hide_range(st, end)
            b = gtk.Button('Ignored text: Reveal hidden text')
            anchor = self.insert_widget(end, b)

            def unhide_text(*args):
                self.unhide_area(midno)
                self.remove_widget(anchor)

            b.connect('clicked', unhide_text)
            b.show()
            return
        if self.label_counts.has_key(label):
            count = self.label_counts[label]
            self.label_counts[label] += 1
        else:
            self.label_counts[label] = 1
            count = 0
        smark = gtk.TextMark(label + '-' + str(count) + '-start', True)
        emark = gtk.TextMark(label + '-' + str(count) + '-end', False)
        self.tb.add_mark(smark, st)
        self.tb.add_mark(emark, end)
        self.labelled.append((smark, emark))
        # Now we add the labels...
        start_txt = '['
        start_id = self.insert_markup_text(st, start_txt, self.markup_tag)
        # Now move the mark back up...
        new_pos = self.tb.get_iter_at_mark(smark)
        new_pos.forward_chars(len(start_txt))
        self.tb.move_mark(smark, new_pos)
        # Create a "Remove me" button
        #b = gtk.Button('_Remove tag'); b.show)(
        b = gtk.Button()
        i = gtk.Image()
        i.set_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_MENU)
        b.add(i)
        i.show()
        itr = self.tb.get_iter_at_mark(emark)
        anchor = self.insert_widget(itr, b)
        # Set up combo button...
        labelbutton = gtk.combo_box_new_text()
        labelbutton.set_model(self.action_model)
        cb.cb_set_active_text(labelbutton, label)
        anchor2 = self.insert_widget(self.tb.get_iter_at_mark(smark),
                                     labelbutton)
        # Add final bracket for end of markup
        end_bracket_itr = self.tb.get_iter_at_mark(emark)
        end_id = self.insert_markup_text(end_bracket_itr, ']', self.markup_tag)
        self.markup_partners[start_id] = end_id
        self.markup_partners[end_id] = start_id
        # Now back up our itr one character (it got advanced by adding
        # the right bracket and the button)
        eitr = self.tb.get_iter_at_mark(emark)
        eitr.backward_chars(2)
        self.tb.move_mark(emark, eitr)

        # Define callback to remove our text when button is clicked
        def remove_markup(*args):
            self.labelled.remove((smark, emark))
            self.remove_markup_text(start_id)
            self.remove_markup_text(end_id)
            self.remove_widget(anchor)
            self.remove_widget(anchor2)

        def change_mark(cb):
            # copy marks for safekeeping...
            new_text = cb.get_active_text()
            sm = gtk.TextMark(None, True)
            self.tb.add_mark(sm, self.tb.get_iter_at_mark(smark))
            em = gtk.TextMark(None, False)
            self.tb.add_mark(em, self.tb.get_iter_at_mark(emark))
            # remove old marks...
            remove_markup()
            # And relabel!
            self.label_range(self.tb.get_iter_at_mark(sm),
                             self.tb.get_iter_at_mark(em), new_text)

        labelbutton.connect('changed', change_mark)
        b.connect('clicked', remove_markup)