Пример #1
0
class ScintillaView(contentview.content_view):

    HAS_CONTROL_BOX = False
    HAS_TITLE = False

    def init(self):
        self.editor = Pscyntilla()
        self.marks = {}
        # TODO: need a better way to do this:
        self.editor.service = self.service
        self.widget.pack_start(self.editor._sc)
        self.optionize()
        self.editor._sc.connect('modified', self.cb_modified)
        self.editor._sc.connect('save-point-reached', self.cb_save_point_reached)
        self.editor._sc.connect('save-point-left', self.cb_save_point_left)
        self.editor.connect('mark-clicked', self.cb_mark_clicked)

    def cb_save_point_reached(self, editor, *args):
        self.service._save_act.set_sensitive(False)
        self.service._revert_act.set_sensitive(False)
    
    def cb_save_point_left(self, editor, *args):
        self.service._save_act.set_sensitive(True)
        self.service._revert_act.set_sensitive(True)
    
    def cb_mark_clicked(self, ed, line, hasmark):
        if self.editor.filename:
            if hasmark:
                cmd = 'del_breakpoint'
                self.service.boss.call_command('pythondebugger', cmd,
                    index=self.marks[line])
            else:
                cmd = 'set_breakpoint'
                # line + 1 debugger starts at line 1
                self.service.boss.call_command('pythondebugger', cmd,
                    filename=self.editor.filename, line=line + 1)
    
    def optionize(self):
        """Loads the user options"""
        opts = self.service.opts
        options = self.service.options
        editor = self.editor
        
        # font
        font = options.font
        print opts.font__size, opts.font__name, opts.font__font
        editor.set_font_size(opts.font__size)
        editor.set_font_name(opts.font__name)
        
        # indenting options
        indenting = options.indenting
        editor.set_use_tabs(indenting.use_tabs)
        editor.set_tab_width(indenting.tab_width)
        if not indenting.use_tabs:
            editor.set_spaceindent_width(indenting.space_indent_width)
            
        # folding options
        folding = options.folding
        width = folding.marker_size
        editor.use_folding(folding.use_folding, width=width)
        
        # line numbers
        line_numbers = options.line_numbers
        editor.set_linenumbers_visible(line_numbers.show_line_numbers)

        # caret and currentline
        caret = options.caret
        highlight = caret.highlight_current_line
        editor.set_currentline_visible(highlight)

        # edge column
        edge_line = options.edge_line
        editor.set_edge_column_visible(edge_line.show_edge_line,
                                       edge_line.position)
        
        # color options
        editor.set_color_schema(THEMES[options.colors.scheme])
            

    def _font_and_size(self, fontdesc):
        name, size = fontdesc.rsplit(' ', 1)
        size = int(size)
        return name, size
        
    def cb_modified(self, editor, *args):
        if self.service._current:
            self.service._sensitise_actions()