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)
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
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)
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
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)