示例#1
0
class CulebraView(gtksourceview.SourceView):
    def __init__(self, action_group):
        gtksourceview.SourceView.__init__(self)

        self.set_auto_indent(True)
        self.set_show_line_numbers(True)
        self.set_show_line_markers(True)
        self.set_tabs_width(4)
        self.set_margin(80)
        self.set_show_margin(True)
        self.set_smart_home_end(True)
        self.set_highlight_current_line(True)
        self.set_insert_spaces_instead_of_tabs(True)
        font_desc = pango.FontDescription('monospace 10')
        if font_desc is not None:
            self.modify_font(font_desc)

        self.search_bar = SearchBar(self, action_group)
        self.replace_bar = ReplaceBar(self, self.search_bar, action_group)
        self.set_action_group(action_group)
        make_source_view_indentable(self)

    def set_action_group(self, action_group):
        self.search_bar.set_action_group(action_group)
        self.replace_bar.set_action_group(action_group)

        if action_group is None:
            self.find_forward_source = None
            self.find_backward_source = None
            return

        find_forward = action_group.get_action(ACTION_FIND_FORWARD)
        holder = SignalHolder(find_forward, "activate", self.on_find_forward)
        self.find_forward_source = holder

        find_backward = action_group.get_action(ACTION_FIND_BACKWARD)
        holder = SignalHolder(find_backward, "activate",
                              self.on_find_backwards)
        self.find_backward_source = holder

    def set_background_color(self, color):
        self.modify_base(gtk.STATE_NORMAL, color)

    def set_font_color(self, color):
        self.modify_text(gtk.STATE_NORMAL, color)

    def set_buffer(self, buff):
        self.replace_bar.set_buffer(buff)
        self.search_bar.set_buffer(buff)
        super(CulebraView, self).set_buffer(buff)

    def find(self, find_forward):
        buff = self.get_buffer()
        found = buff.search(find_forward=find_forward)

        if not found and len(buff.get_selection_bounds()) == 0:
            found = buff.search(find_forward=not find_forward)

        if not found:
            return

        mark = buff.get_insert()
        line_iter = buff.get_iter_at_mark(mark)
        self.scroll_to_iter(line_iter, 0.25)

    def on_find_forward(self, action):
        self.find(True)

    def on_find_backwards(self, action):
        self.find(False)

    def _on_key_pressed(self, search_text, event):
        global KEY_ESCAPE

        if event.keyval == KEY_ESCAPE:
            self.toggle_action.set_active(False)

    def get_widget(self):
        if self._widget is None:
            self._widget = self.create_widget()
            self._widget.connect("key-release-event", self._on_key_pressed)

        return self._widget

    widget = property(get_widget)
示例#2
0
class CulebraView(gtksourceview.SourceView):
    def __init__(self, action_group):
        gtksourceview.SourceView.__init__(self)
            
        self.set_auto_indent(True)
        self.set_show_line_numbers(True)
        self.set_show_line_markers(True)
        self.set_tabs_width(4)
        self.set_margin(80)
        self.set_show_margin(True)
        self.set_smart_home_end(True)
        self.set_highlight_current_line(True)
        self.set_insert_spaces_instead_of_tabs(True)
        font_desc = pango.FontDescription('monospace 10')
        if font_desc is not None:
            self.modify_font(font_desc)
        
        self.search_bar = SearchBar(self, action_group)
        self.replace_bar = ReplaceBar(self, self.search_bar, action_group)
        self.set_action_group(action_group)
        make_source_view_indentable(self)
    
    def set_action_group(self, action_group):
        self.search_bar.set_action_group(action_group)
        self.replace_bar.set_action_group(action_group)

        if action_group is None:
            self.find_forward_source = None
            self.find_backward_source = None
            return
            
        find_forward = action_group.get_action(ACTION_FIND_FORWARD)
        holder = SignalHolder(find_forward, "activate", self.on_find_forward)
        self.find_forward_source = holder
        
        find_backward = action_group.get_action(ACTION_FIND_BACKWARD)
        holder = SignalHolder(find_backward, "activate", self.on_find_backwards)
        self.find_backward_source = holder
        
        
    
    def set_background_color(self, color):
        self.modify_base(gtk.STATE_NORMAL, color)
    
    def set_font_color(self, color):
        self.modify_text(gtk.STATE_NORMAL, color)
    
    def set_buffer(self, buff):
        self.replace_bar.set_buffer(buff)
        self.search_bar.set_buffer(buff)
        super(CulebraView, self).set_buffer(buff)
    
    def find(self, find_forward):
        buff = self.get_buffer()
        found = buff.search(find_forward=find_forward)

        if not found and len(buff.get_selection_bounds()) == 0:
            found = buff.search(find_forward=not find_forward)

        if not found:
            return
        
        self.focus_carret()

    def on_find_forward(self, action):
        self.find(True)
    
    def on_find_backwards(self, action):
        self.find(False)

    def _on_key_pressed(self, search_text, event):
        global KEY_ESCAPE
        
        if event.keyval == KEY_ESCAPE:
            self.toggle_action.set_active(False)

    def get_widget(self):
        if self._widget is None:
            self._widget = self.create_widget()
            self._widget.connect("key-release-event", self._on_key_pressed)

        
        return self._widget
    
    widget = property(get_widget)


    def focus_carret(self):
        buff = self.get_buffer()
        mark = buff.get_insert()
        line_iter = buff.get_iter_at_mark(mark)
        self.scroll_to_iter(line_iter, 0.25)