예제 #1
0
    def highlight_selected_word(self):
        import keyword
        self.__clear_occurrences()

        text = self._text_under_cursor()
        if not text:
            return
        # Do not highlight keywords
        if text in keyword.kwlist or text == 'self':
            return
        result = self._get_find_index_results(text, False, True)[1]
        selections = []
        for start, end in result:
            selection = extra_selection.ExtraSelection(self.textCursor(),
                                                       start_pos=start,
                                                       end_pos=end)
            selection.set_full_width()
            # FIXME: from theme
            selection.set_background(resources.get_color('SearchResult'))
            selections.append(selection)
            line = selection.cursor.blockNumber()
            Marker = scrollbar.marker
            marker = Marker(line, resources.get_color('SearchResult'), 0)
            self._scrollbar.add_marker('occurrence', marker)
        self.add_extra_selections('occurrences', selections)
예제 #2
0
 def __init__(self, neditor):
     side_area.SideArea.__init__(self, neditor)
     self.neditor = neditor
     self._color_unselected = QColor(
         resources.get_color('SidebarForeground'))
     self._color_selected = QColor(resources.get_color('CurrentLineNumber'))
     self.__width = self.__calculate_width()
     self.neditor.blockCountChanged.connect(self.__update_width)
예제 #3
0
 def __init__(self, neditor):
     QWidget.__init__(self, neditor)
     self.object_name = self.__class__.__name__
     self.__background_color = QColor(
         resources.get_color('SidebarBackground'))
     neditor.updateRequest.connect(self.update)
     self.neditor = neditor
예제 #4
0
    def __init__(self, neditor):
        super().__init__()
        self._neditor = neditor
        self._path = ''
        self.checks = {}

        self.checker_icon = ui_tools.colored_icon(
            ":img/bicho", resources.get_color('ErrorUnderline'))
예제 #5
0
    def __init__(self, parent):
        super(OutputWidget, self).__init__(parent)
        self._parent = parent

        self.setReadOnly(True)
        self.setFrameShape(0)
        self.setUndoRedoEnabled(False)
        # Traceback pattern
        self.patLink = re.compile(r'(\s)*File "(.*?)", line \d.+')
        # Formats
        font = settings.FONT
        self.setFont(font)
        self.plain_format = QTextCharFormat()
        # self.plain_format.setFont(font)
        # self.plain_format.setForeground(
        #    QBrush(QColor(resources.CUSTOM_SCHEME.get(
        #        "Default", resources.COLOR_SCHEME["Default"]))))
        self.error_format = QTextCharFormat()
        # self.error_format.setFont(font)
        self.error_format.setAnchor(True)
        # self.error_format.setForeground(QColor(resources.CUSTOM_SCHEME.get(
        #    "Pep8Underline", resources.COLOR_SCHEME["Pep8Underline"])))
        # self.error_format.setBackground(QColor(resources.CUSTOM_SCHEME.get(
        #    "ErrorUnderline", resources.COLOR_SCHEME["ErrorUnderline"])))
        self.error_format.setToolTip(self.tr("Click to show the source"))
        self.error_format2 = QTextCharFormat()
        self.error_format2.setAnchor(True)
        # self.error_format2.setFont(font)
        # self.error_format2.setForeground(
        #    QBrush(
        #        QColor(resources.get_color('ErrorUnderline'))))

        self.blockCountChanged[int].connect(
            lambda: self.moveCursor(QTextCursor.End))

        # Style
        palette = self.palette()
        palette.setColor(palette.Base,
                         QColor(resources.get_color('EditorBackground')))
        palette.setColor(palette.Text, QColor(resources.get_color('Default')))
        self.setPalette(palette)
예제 #6
0
 def __init__(self, neditor):
     SideArea.__init__(self, neditor)
     self._neditor = neditor
     self.__unsaved_markers = []
     self.__saved_markers = []
     self.__saved = False
     self.__text = neditor.toPlainText()
     self.__last_saved_text = neditor.toPlainText()
     # Default properties
     self.__unsaved_color = QColor(resources.get_color('ModifiedColor'))
     self.__saved_color = QColor(resources.get_color('SavedColor'))
     self.__delay = 300
     # Delay Timer
     self._timer = QTimer(self)
     self._timer.setInterval(self.__delay)
     self._timer.setSingleShot(True)
     self._timer.timeout.connect(self.__on_text_changed)
     # Connect textChanged signal to the timer
     # the __on_text_chaned slot is executed each '__delay' milliseconds
     self._neditor.textChanged.connect(self._timer.start)
     self._neditor.neditable.fileSaved.connect(self.__on_file_saved)
예제 #7
0
    def __init__(self, editor):
        super(Pep8Checker, self).__init__()
        self._editor = editor
        self._path = ''
        self._encoding = ''
        self.checks = {}

        self.checker_icon = ui_tools.colored_icon(
            ":img/warning", resources.get_color('Pep8Underline'))

        # ninjaide = IDE.get_service('ide')
        # self.connect(ninjaide,
        #             SIGNAL("ns_preferences_editor_checkStyle(PyQt_PyObject)"),
        #             lambda: remove_pep8_checker())
        self.checkerCompleted.connect(self.refresh_display)
예제 #8
0
    def __init__(self, parent):
        super(OutputWidget, self).__init__(parent)
        self._parent = parent

        self.setWordWrapMode(0)
        self.setReadOnly(True)
        self.setMouseTracking(True)
        self.setFrameShape(0)
        self.setUndoRedoEnabled(False)
        # Traceback pattern
        self.patLink = re.compile(r'(\s)*File "(.*?)", line \d.+')

        font = QFont(settings.FONT)
        font.setWeight(QFont.Light)
        font.setPixelSize(13)
        self.setFont(font)
        # Formats
        plain_format = QTextCharFormat()
        normal_format = QTextCharFormat()
        normal_format.setForeground(Qt.white)
        error_format = QTextCharFormat()
        error_format.setForeground(QColor('#ff6c6c'))
        error_format2 = QTextCharFormat()
        error_format2.setToolTip('Click to show the source')
        error_format2.setUnderlineStyle(QTextCharFormat.DashUnderline)
        error_format2.setForeground(QColor('#ff6c6c'))
        error_format2.setUnderlineColor(QColor('#ff6c6c'))

        self._text_formats = {
            'normal': normal_format,
            'plain': plain_format,
            'error': error_format,
            'error2': error_format2
        }

        self.blockCountChanged[int].connect(
            lambda: self.moveCursor(QTextCursor.End))

        # Style
        palette = self.palette()
        palette.setColor(palette.Base,
                         QColor(resources.get_color('EditorBackground')))
        self.setPalette(palette)
예제 #9
0
 def __init__(self):
     super().__init__()
     self.__matched_background = QColor(resources.get_color('BraceMatched'))
     self.__unmatched_background = QColor(
         resources.get_color('BraceUnmatched'))
예제 #10
0
    def __init__(self, neditable):
        QPlainTextEdit.__init__(self)
        self.setFrameStyle(0)  # Remove border
        self._neditable = neditable
        self.setMouseTracking(True)
        # Style
        self._background_color = QColor(
            resources.get_color('EditorBackground'))
        self._foreground_color = QColor(resources.get_color('Default'))
        self._selection_color = QColor(
            resources.get_color('EditorSelectionColor'))
        self._selection_background_color = QColor(
            resources.get_color('EditorSelectionBackground'))
        self.__apply_style()

        self._init_settings()
        self._highlighter = None
        self.__visible_blocks = []
        self._last_line_position = 0
        self.__encoding = None
        self.__show_whitespaces = settings.SHOW_TABS_AND_SPACES
        self.__side_widgets = []
        # Extra Selections
        self._extra_selections = OrderedDict()
        self._current_line_selection = None
        self.__checker_extra_selections = []
        self.__occurrences = []
        # Load indenter based on language
        self._indenter = indenter.load_indenter(self, neditable.language())
        # Set editor font before build lexer
        self.set_font(settings.FONT)
        self.register_syntax_for(neditable.language())
        # Register all editor extension
        self.initialize_extensions()
        # FIXME: based on lang
        self.enable_extension('indentation_guides',
                              settings.SHOW_INDENTATION_GUIDE)
        self.enable_extension('margin_line', settings.SHOW_MARGIN_LINE)
        self.enable_extension('line_highlighter', True)
        self.enable_extension('symbol_highlighter', True)
        self.enable_extension('quotes', True)
        self.enable_extension('braces', True)
        # self._symbol_completer = symbol_completer.SymbolCompleter(self)

        # Mark occurrences timer
        self._highlight_word_timer = QTimer()
        self._highlight_word_timer.setSingleShot(True)
        self._highlight_word_timer.setInterval(800)
        self._highlight_word_timer.timeout.connect(
            self.highlight_selected_word)
        # Install custom scrollbar
        self._scrollbar = scrollbar.NScrollBar(self)
        self._scrollbar.setAttribute(Qt.WA_OpaquePaintEvent, False)
        self.setVerticalScrollBar(self._scrollbar)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.additional_builtins = None
        # Set the editor after initialization
        if self._neditable is not None:
            if self._neditable.editor:
                self.setDocument(self._neditable.document)
            else:
                self._neditable.set_editor(self)
            self._neditable.checkersUpdated.connect(self._highlight_checkers)
        # Widgets on side area
        self._line_number_area = None
        if settings.SHOW_LINE_NUMBERS:
            self._line_number_area = self.add_side_widget(
                line_number_area.LineNumberArea, 2)
        self._lint_area = None
        # if settings.SHOW_LINT_AREA:
        #    self._lint_area = self.add_side_widget(lint_area.LintArea, 3)
        self._marker_area = None
        # if settings.SHOW_MARK_AREA:
        #    self._marker_area = self.add_side_widget(marker_area.MarkerArea, 1)
        self._text_change_area = None
        if settings.SHOW_TEXT_CHANGE_AREA:
            self._text_change_area = self.add_side_widget(
                text_change_area.TextChangeArea, 0)
        # FIXME: we need a method to initialize
        self.__set_whitespaces_flags(self.__show_whitespaces)

        self.cursorPositionChanged.connect(self._on_cursor_position_changed)
        self.cursorPositionChanged.connect(self.viewport().update)
예제 #11
0
    def __init__(self, neditable):
        super(Editor, self).__init__()
        self._neditable = neditable

        # QScintilla Configuration
        self._configure_qscintilla()

        # Markers
        self.foldable_lines = []
        self.breakpoints = []
        self.bookmarks = []
        self._fold_expanded_marker = 1
        self._fold_collapsed_marker = 2
        self._bookmark_marker = 3
        self._breakpoint_marker = 4
        self.setMarginSensitivity(1, True)
        self.connect(self, SIGNAL("marginClicked(int, int, Qt::KeyboardModifiers)"), self.on_margin_clicked)
        color_fore = resources.get_color("FoldArea")
        # Marker Fold Expanded
        self.markerDefine(QsciScintilla.DownTriangle, self._fold_expanded_marker)
        color = resources.get_color("FoldArrowExpanded")
        self.setMarkerBackgroundColor(QColor(color), self._fold_expanded_marker)
        self.setMarkerForegroundColor(QColor(color_fore), self._fold_expanded_marker)
        # Marker Fold Collapsed
        self.markerDefine(QsciScintilla.RightTriangle, self._fold_collapsed_marker)
        color = resources.get_color("FoldArrowCollapsed")
        self.setMarkerBackgroundColor(QColor(color), self._fold_collapsed_marker)
        self.setMarkerForegroundColor(QColor(color_fore), self._fold_collapsed_marker)
        # Marker Breakpoint
        self.markerDefine(QsciScintilla.Circle, self._breakpoint_marker)
        self.setMarkerBackgroundColor(QColor(255, 11, 11), self._breakpoint_marker)
        self.setMarkerForegroundColor(QColor(color_fore), self._breakpoint_marker)
        # Marker Bookmark
        self.markerDefine(QsciScintilla.SmallRectangle, self._bookmark_marker)
        self.setMarkerBackgroundColor(QColor(10, 158, 227), self._bookmark_marker)
        self.setMarkerForegroundColor(QColor(color_fore), self._bookmark_marker)
        # Configure key bindings
        self._configure_keybindings()

        self.lexer = highlighter.get_lexer(self._neditable.extension())

        if self.lexer is not None:
            self.setLexer(self.lexer)

        # Config Editor
        self._mini = None
        if settings.SHOW_MINIMAP:
            self._load_minimap(settings.SHOW_MINIMAP)
        self._last_block_position = 0
        self.set_flags()
        # FIXME this lang should be guessed in the same form as lexer.
        self.lang = highlighter.get_lang(self._neditable.extension())
        self._cursor_line = self._cursor_index = -1
        self.__lines_count = 0
        self.pos_margin = 0
        self._indentation_guide = 0
        self._indent = 0
        self.__font = None
        self.__encoding = None

        # FIXME these should be language bound
        self.allows_less_indentation = ["else", "elif", "finally", "except"]
        self.set_font(settings.FONT)
        self._selected_word = ""
        self._patIsWord = re.compile("\w+")
        # Completer
        # self.completer = completer_widget.CodeCompletionWidget(self)
        # Dict functions for KeyPress
        self.preKeyPress = {
            Qt.Key_Backspace: self.__backspace,
            Qt.Key_Enter: self.__ignore_extended_line,
            Qt.Key_Return: self.__ignore_extended_line,
            # Qt.Key_Colon: self.__retreat_to_keywords,
            Qt.Key_BracketRight: self.__brace_completion,
            Qt.Key_BraceRight: self.__brace_completion,
            Qt.Key_ParenRight: self.__brace_completion,
            Qt.Key_Apostrophe: self.__quot_completion,
            Qt.Key_QuoteDbl: self.__quot_completion,
        }

        self.postKeyPress = {
            Qt.Key_Enter: self.__auto_indent,
            Qt.Key_Return: self.__auto_indent,
            Qt.Key_BracketLeft: self.__complete_braces,
            Qt.Key_BraceLeft: self.__complete_braces,
            Qt.Key_ParenLeft: self.__complete_braces,
            Qt.Key_Apostrophe: self.__complete_quotes,
            Qt.Key_QuoteDbl: self.__complete_quotes,
        }

        self.connect(self, SIGNAL("linesChanged()"), self._update_sidebar)
        self.connect(self, SIGNAL("blockCountChanged(int)"), self._update_file_metadata)

        self.load_project_config()
        # Context Menu Options
        self.__actionFindOccurrences = QAction(self.tr("Find Usages"), self)
        self.connect(self.__actionFindOccurrences, SIGNAL("triggered()"), self._find_occurrences)

        ninjaide = IDE.get_service("ide")
        self.connect(ninjaide, SIGNAL("ns_preferences_editor_font(PyQt_PyObject)"), self.set_font)
        self.connect(ninjaide, SIGNAL("ns_preferences_editor_showTabsAndSpaces(PyQt_PyObject)"), self.set_flags)
        # TODO: figure it out it doesn´t work if gets shown after init
        ##self.connect(ninjaide,
        ##SIGNAL("ns_preferences_editor_minimapShow(PyQt_PyObject)"),
        ##self._load_minimap)
        self.connect(ninjaide, SIGNAL("ns_preferences_editor_indent(PyQt_PyObject)"), self.load_project_config)
        self.connect(ninjaide, SIGNAL("ns_preferences_editor_marginLine(PyQt_PyObject)"), self._set_margin_line)
        self.connect(ninjaide, SIGNAL("ns_preferences_editor_showLineNumbers(PyQt_PyObject)"), self._show_line_numbers)
        # self.connect(
        # ninjaide,
        # SIGNAL("ns_preferences_editor_scheme(PyQt_PyObject)"),
        # self.restyle)
        # self.connect(
        # ninjaide,
        # SIGNAL("ns_preferences_editor_scheme(PyQt_PyObject)"),
        # lambda: self.restyle())

        self.additional_builtins = None
        # Set the editor after initialization
        if self._neditable.editor:
            self.setDocument(self._neditable.document)
        else:
            self._neditable.set_editor(self)

        if self._neditable.file_path in settings.BREAKPOINTS:
            self.breakpoints = settings.BREAKPOINTS[self._neditable.file_path]
        if self._neditable.file_path in settings.BOOKMARKS:
            self.bookmarks = settings.BOOKMARKS[self._neditable.file_path]
        # Add breakpoints
        for line in self.breakpoints:
            self.markerAdd(line, self._breakpoint_marker)
        # Add bookmarks
        for line in self.bookmarks:
            self.markerAdd(line, self._bookmark_marker)

        self.connect(self._neditable, SIGNAL("checkersUpdated(PyQt_PyObject)"), self._highlight_checkers)
예제 #12
0
def remove_error_checker():
    checker = (ErrorsChecker, resources.get_color('ErrorUnderline'), 10)
    remove_checker(checker)
예제 #13
0
 def __init__(self):
     super().__init__()
     self.__background = QColor(resources.get_color('CurrentLine'))
     self.__mode = settings.HIGHLIGHT_CURRENT_LINE_MODE
예제 #14
0
    def dirty(self):
        return self.checks != {}

    @property
    def dirty_text(self):
        return translations.TR_LINT_DIRTY_TEXT + str(len(self.checks))


def remove_error_checker():
    checker = (ErrorsChecker, resources.get_color('ErrorUnderline'), 10)
    remove_checker(checker)


if settings.FIND_ERRORS:
    register_checker(checker=ErrorsChecker,
                     color=resources.get_color('ErrorUnderline'),
                     priority=10)
"""
import _ast
import re

from PyQt4.QtCore import QThread
from PyQt4.QtCore import SIGNAL

from ninja_ide import resources
from ninja_ide import translations
from ninja_ide.core import settings
from ninja_ide.core.file_handling import file_manager
from ninja_ide.gui.ide import IDE
from ninja_ide.gui.editor.checkers import (
    register_checker,
예제 #15
0
    def __init__(self, neditable):
        super(Editor, self).__init__()
        self._neditable = neditable

        # QScintilla Configuration
        self.patFold = re.compile(
            r"(\s)*\"\"\"|(\s)*def |(\s)*class |(\s)*if |(\s)*while |"
            "(\s)*else:|(\s)*elif |(\s)*for |"
            "(\s)*try:|(\s)*except:|(\s)*except |(.)*\($")
        self.setAutoIndent(True)
        self.setBackspaceUnindents(True)
        self.setCaretLineVisible(True)
        line_color = QColor(
            resources.CUSTOM_SCHEME.get(
                'CurrentLine',
                resources.COLOR_SCHEME['CurrentLine']))
        caretColor = QColor(
            resources.CUSTOM_SCHEME.get(
                'Caret',
                resources.COLOR_SCHEME['Caret']))
        self.setCaretLineBackgroundColor(line_color)
        self.setCaretForegroundColor(caretColor)
        self.setBraceMatching(QsciScintilla.StrictBraceMatch)
        self.SendScintilla(QsciScintilla.SCI_SETBUFFEREDDRAW, 0)
        self.SendScintilla(QsciScintilla.SCI_SETHSCROLLBAR, 0)
        self.setMatchedBraceBackgroundColor(QColor(
            resources.CUSTOM_SCHEME.get(
                'BraceBackground',
                resources.COLOR_SCHEME.get('BraceBackground'))))
        self.setMatchedBraceForegroundColor(QColor(
            resources.CUSTOM_SCHEME.get(
                'BraceForeground',
                resources.COLOR_SCHEME.get('BraceForeground'))))

        self.SendScintilla(QsciScintilla.SCI_INDICSETFORE,
                           self.__indicator_word,
                           int(resources.get_color("SelectedWord"), 16))
        self.SendScintilla(QsciScintilla.SCI_INDICSETSTYLE,
                           self.__indicator_word, 6)
        self.SendScintilla(QsciScintilla.SCI_INDICSETFORE,
                           self.__indicator_folded, int("ffffff", 16))
        self.SendScintilla(QsciScintilla.SCI_INDICSETSTYLE,
                           self.__indicator_folded, 0)
        self._navigation_highlight_active = False
        self.SendScintilla(QsciScintilla.SCI_INDICSETFORE,
                           self.__indicator_navigation,
                           int(resources.get_color("LinkNavigate"), 16))
        self.SendScintilla(QsciScintilla.SCI_INDICSETSTYLE,
                           self.__indicator_navigation, 8)
        self.SendScintilla(QsciScintilla.SCI_INDICSETALPHA,
                           self.__indicator_navigation, 40)
        # Markers
        self.foldable_lines = []
        self.breakpoints = []
        self.bookmarks = []
        self._fold_expanded_marker = 1
        self._fold_collapsed_marker = 2
        self._bookmark_marker = 3
        self._breakpoint_marker = 4
        self.setMarginSensitivity(1, True)
        self.connect(
            self,
            SIGNAL('marginClicked(int, int, Qt::KeyboardModifiers)'),
            self.on_margin_clicked)
        color_fore = resources.get_color("FoldArea")
        # Marker Fold Expanded
        self.markerDefine(QsciScintilla.DownTriangle,
                          self._fold_expanded_marker)
        color = resources.get_color("FoldArrowExpanded")
        self.setMarkerBackgroundColor(QColor(color), self._fold_expanded_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._fold_expanded_marker)
        # Marker Fold Collapsed
        self.markerDefine(QsciScintilla.RightTriangle,
                          self._fold_collapsed_marker)
        color = resources.get_color("FoldArrowCollapsed")
        self.setMarkerBackgroundColor(QColor(color),
                                      self._fold_collapsed_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._fold_collapsed_marker)
        # Marker Breakpoint
        self.markerDefine(QsciScintilla.Circle,
                          self._breakpoint_marker)
        self.setMarkerBackgroundColor(QColor(255, 11, 11),
                                      self._breakpoint_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._breakpoint_marker)
        # Marker Bookmark
        self.markerDefine(QsciScintilla.SmallRectangle,
                          self._bookmark_marker)
        self.setMarkerBackgroundColor(QColor(10, 158, 227),
                                      self._bookmark_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._bookmark_marker)
        # Configure key bindings
        self._configure_keybindings()

        self.lexer = highlighter.build_lexer("python")
        if self.lexer is not None:
            self.setLexer(self.lexer)

        #Config Editor
        self._mini = None
        if settings.SHOW_MINIMAP:
            self._load_minimap(settings.SHOW_MINIMAP)
        self._last_block_position = 0
        self.set_flags()
        self.lang = 'python'
        self._cursor_line = self._cursor_index = -1
        self.__lines_count = 0
        self.pos_margin = 0
        self._indentation_guide = 0
        self._indent = 0
        self.__font = None
        self.__encoding = None

        self.allows_less_indentation = ['else', 'elif', 'finally', 'except']
        self.set_font(settings.FONT)
        self._selected_word = ''
        self._patIsWord = re.compile('\w+')
        #Completer
        #self.completer = completer_widget.CodeCompletionWidget(self)
        #Dict functions for KeyPress
        self.preKeyPress = {
            Qt.Key_Backspace: self.__backspace,
            Qt.Key_Enter: self.__ignore_extended_line,
            Qt.Key_Return: self.__ignore_extended_line,
            #Qt.Key_Colon: self.__retreat_to_keywords,
            Qt.Key_BracketRight: self.__brace_completion,
            Qt.Key_BraceRight: self.__brace_completion,
            Qt.Key_ParenRight: self.__brace_completion,
            Qt.Key_Apostrophe: self.__quot_completion,
            Qt.Key_QuoteDbl: self.__quot_completion}

        self.postKeyPress = {
            Qt.Key_Enter: self.__auto_indent,
            Qt.Key_Return: self.__auto_indent,
            Qt.Key_BracketLeft: self.__complete_braces,
            Qt.Key_BraceLeft: self.__complete_braces,
            Qt.Key_ParenLeft: self.__complete_braces,
            Qt.Key_Apostrophe: self.__complete_quotes,
            Qt.Key_QuoteDbl: self.__complete_quotes}

        self.connect(self, SIGNAL("linesChanged()"), self._update_sidebar)
        self.connect(self, SIGNAL("blockCountChanged(int)"),
                     self._update_file_metadata)

        self.load_project_config()
        #Context Menu Options
        self.__actionFindOccurrences = QAction(self.tr("Find Usages"), self)
        self.connect(self.__actionFindOccurrences, SIGNAL("triggered()"),
                     self._find_occurrences)

        ninjaide = IDE.get_service('ide')
        self.connect(
            ninjaide,
            SIGNAL("ns_preferences_editor_font(PyQt_PyObject)"),
            self.set_font)
        self.connect(
            ninjaide,
            SIGNAL("ns_preferences_editor_showTabsAndSpaces(PyQt_PyObject)"),
            self.set_flags)
        #TODO: figure it out it doesn´t work if gets shown after init
        ##self.connect(ninjaide,
            ##SIGNAL("ns_preferences_editor_minimapShow(PyQt_PyObject)"),
            ##self._load_minimap)
        self.connect(
            ninjaide,
            SIGNAL("ns_preferences_editor_indent(PyQt_PyObject)"),
            self.load_project_config)
        self.connect(
            ninjaide,
            SIGNAL("ns_preferences_editor_marginLine(PyQt_PyObject)"),
            self._set_margin_line)
        #self.connect(
            #ninjaide,
            #SIGNAL("ns_preferences_editor_scheme(PyQt_PyObject)"),
            #self.restyle)
        #self.connect(
            #ninjaide,
            #SIGNAL("ns_preferences_editor_scheme(PyQt_PyObject)"),
            #lambda: self.restyle())

        self.additional_builtins = None
        # Set the editor after initialization
        if self._neditable.editor:
            self.setDocument(self._neditable.document)
        else:
            self._neditable.set_editor(self)

        if self._neditable.file_path in settings.BREAKPOINTS:
            self.breakpoints = settings.BREAKPOINTS[self._neditable.file_path]
        if self._neditable.file_path in settings.BOOKMARKS:
            self.bookmarks = settings.BOOKMARKS[self._neditable.file_path]
        # Add breakpoints
        for line in self.breakpoints:
            self.markerAdd(line, self._breakpoint_marker)
        # Add bookmarks
        for line in self.bookmarks:
            self.markerAdd(line, self._bookmark_marker)

        self.connect(
            self._neditable,
            SIGNAL("checkersUpdated(PyQt_PyObject)"),
            self._highlight_checkers)
예제 #16
0
        """
        if error_list:
            error_list.refresh_pep8_list(self.checks)
        """


class CustomReport(pycodestyle.StandardReport):

    def get_file_results(self):
        return sorted(self._deferred_print)


class CustomChecker(pycodestyle.Checker):

    def __init__(self, *args, **kw):
        super().__init__(*args, report=CustomReport(kw.pop("options")), **kw)


def remove_pep8_checker():
    checker = (Pep8Checker,
               resources.get_color('Pep8Underline'), 2)
    remove_checker(checker)


if settings.CHECK_STYLE:
    register_checker(
        checker=Pep8Checker,
        color=resources.get_color('Pep8Underline'),
        priority=2
    )
예제 #17
0
 def apply_editor_style(self):
     palette = self.palette()
     palette.setColor(palette.Base,
                      QColor(resources.get_color('EditorBackground')))
     palette.setColor(palette.Text, QColor(resources.get_color('Default')))
     self.setPalette(palette)
예제 #18
0
    def __init__(self, neditable):
        QPlainTextEdit.__init__(self)
        self.setFrameStyle(0)  # Remove border
        self._neditable = neditable
        self.setMouseTracking(True)

        # Style
        self._background_color = QColor(
            resources.get_color('EditorBackground'))
        self._foreground_color = QColor(resources.get_color('Default'))
        self._selection_color = QColor(
            resources.get_color('EditorSelectionColor'))
        self._selection_background_color = QColor(
            resources.get_color('EditorSelectionBackground'))
        self.__apply_style()

        self.setCursorWidth(2)
        self._highlighter = None
        self.__visible_blocks = []
        self._last_line_position = 0
        self.__encoding = None
        self.__show_whitespaces = settings.SHOW_TABS_AND_SPACES
        self.__side_widgets = []
        # Extra Selections
        self._extra_selections = OrderedDict()
        self.__occurrences = []
        # Load indenter based on language
        self._indenter = indenter.load_indenter(self, neditable.language())
        # Set editor font before build lexer
        self.default_font = settings.FONT
        self.register_syntax_for(neditable.language())
        # Register extensions
        self.__extensions = {}
        # Brace matching
        self._brace_matching = self.register_extension(
            symbol_highlighter.SymbolHighlighter)
        self.brace_matching = settings.BRACE_MATCHING
        # Current line highlighter
        self._line_highlighter = self.register_extension(
            line_highlighter.CurrentLineHighlighter)
        self.highlight_current_line = settings.HIGHLIGHT_CURRENT_LINE
        # Right margin line
        self._margin_line = self.register_extension(margin_line.RightMargin)
        self.margin_line = settings.SHOW_MARGIN_LINE
        self.margin_line_position = settings.MARGIN_LINE
        self.margin_line_background = settings.MARGIN_LINE_BACKGROUND
        # Indentation guides
        self._indentation_guides = self.register_extension(
            indentation_guides.IndentationGuide)
        self.show_indentation_guides(settings.SHOW_INDENTATION_GUIDES)
        # Autocomplete braces
        self.__autocomplete_braces = self.register_extension(
            braces.AutocompleteBraces)
        self.autocomplete_braces(settings.AUTOCOMPLETE_BRACKETS)
        # Autocomplete quotes
        self.__autocomplete_quotes = self.register_extension(
            quotes.AutocompleteQuotes)
        self.autocomplete_quotes(settings.AUTOCOMPLETE_QUOTES)
        # Mark occurrences timer
        self._highlight_word_timer = QTimer()
        self._highlight_word_timer.setSingleShot(True)
        self._highlight_word_timer.setInterval(800)
        self._highlight_word_timer.timeout.connect(
            self.highlight_selected_word)
        # Install custom scrollbar
        self._scrollbar = scrollbar.NScrollBar(self)
        self._scrollbar.setAttribute(Qt.WA_OpaquePaintEvent, False)
        self.setVerticalScrollBar(self._scrollbar)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.additional_builtins = None
        # Set the editor after initialization
        if self._neditable is not None:
            if self._neditable.editor:
                self.setDocument(self._neditable.document)
            else:
                self._neditable.set_editor(self)
            self._neditable.checkersUpdated.connect(self._highlight_checkers)
        # Widgets on side area
        self._line_number_area = self.add_side_widget(
            line_number_area.LineNumberArea, order=2)
        self.show_line_numbers(settings.SHOW_LINE_NUMBERS)

        self._text_change_area = self.add_side_widget(
            text_change_area.TextChangeArea, order=0)
        self.show_text_changes(settings.SHOW_TEXT_CHANGES)

        self._marker_area = self.add_side_widget(marker_area.MarkerArea, 1)

        # FIXME: we need a method to initialize
        self.__set_whitespaces_flags(self.__show_whitespaces)

        self.cursorPositionChanged.connect(self._on_cursor_position_changed)
        self.cursorPositionChanged.connect(self.viewport().update)
예제 #19
0
    def __init__(self, neditable):
        super(Editor, self).__init__()
        self._neditable = neditable

        # QScintilla Configuration
        self._first_visible_line = 0
        self.patFold = re.compile(
            r"(\s)*\"\"\"|(\s)*def |(\s)*class |(\s)*if |(\s)*while |"
            "(\s)*else:|(\s)*elif |(\s)*for |"
            "(\s)*try:|(\s)*except:|(\s)*except |(.)*\($")
        self.setAutoIndent(True)
        self.setBackspaceUnindents(True)
        self.setCaretLineVisible(True)
        line_color = QColor(
            resources.CUSTOM_SCHEME.get('CurrentLine',
                                        resources.COLOR_SCHEME['CurrentLine']))
        caretColor = QColor(
            resources.CUSTOM_SCHEME.get('Caret',
                                        resources.COLOR_SCHEME['Caret']))
        self.setCaretLineBackgroundColor(line_color)
        self.setCaretForegroundColor(caretColor)
        self.setBraceMatching(QsciScintilla.StrictBraceMatch)
        self.SendScintilla(QsciScintilla.SCI_SETBUFFEREDDRAW, 0)
        self.SendScintilla(QsciScintilla.SCI_SETHSCROLLBAR, 0)
        self.setMatchedBraceBackgroundColor(
            QColor(
                resources.CUSTOM_SCHEME.get(
                    'BraceBackground',
                    resources.COLOR_SCHEME.get('BraceBackground'))))
        self.setMatchedBraceForegroundColor(
            QColor(
                resources.CUSTOM_SCHEME.get(
                    'BraceForeground',
                    resources.COLOR_SCHEME.get('BraceForeground'))))

        self.SendScintilla(QsciScintilla.SCI_INDICSETFORE,
                           self.__indicator_word,
                           int(resources.get_color("SelectedWord"), 16))
        self.SendScintilla(QsciScintilla.SCI_INDICSETSTYLE,
                           self.__indicator_word, 6)
        self.SendScintilla(QsciScintilla.SCI_INDICSETFORE,
                           self.__indicator_folded, int("ffffff", 16))
        self.SendScintilla(QsciScintilla.SCI_INDICSETSTYLE,
                           self.__indicator_folded, 0)
        self._navigation_highlight_active = False
        self.SendScintilla(QsciScintilla.SCI_INDICSETFORE,
                           self.__indicator_navigation,
                           int(resources.get_color("LinkNavigate"), 16))
        self.SendScintilla(QsciScintilla.SCI_INDICSETSTYLE,
                           self.__indicator_navigation, 8)
        self.SendScintilla(QsciScintilla.SCI_INDICSETALPHA,
                           self.__indicator_navigation, 40)
        # Markers
        self.foldable_lines = []
        self.breakpoints = []
        self.bookmarks = []
        self._fold_expanded_marker = 1
        self._fold_collapsed_marker = 2
        self._bookmark_marker = 3
        self._breakpoint_marker = 4
        self.setMarginSensitivity(1, True)
        self.connect(self,
                     SIGNAL('marginClicked(int, int, Qt::KeyboardModifiers)'),
                     self.on_margin_clicked)
        color_fore = resources.get_color("FoldArea")
        # Marker Fold Expanded
        self.markerDefine(QsciScintilla.DownTriangle,
                          self._fold_expanded_marker)
        color = resources.get_color("FoldArrowExpanded")
        self.setMarkerBackgroundColor(QColor(color),
                                      self._fold_expanded_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._fold_expanded_marker)
        # Marker Fold Collapsed
        self.markerDefine(QsciScintilla.RightTriangle,
                          self._fold_collapsed_marker)
        color = resources.get_color("FoldArrowCollapsed")
        self.setMarkerBackgroundColor(QColor(color),
                                      self._fold_collapsed_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._fold_collapsed_marker)
        # Marker Breakpoint
        self.markerDefine(QsciScintilla.Circle, self._breakpoint_marker)
        self.setMarkerBackgroundColor(QColor(255, 11, 11),
                                      self._breakpoint_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._breakpoint_marker)
        # Marker Bookmark
        self.markerDefine(QsciScintilla.SmallRectangle, self._bookmark_marker)
        self.setMarkerBackgroundColor(QColor(10, 158, 227),
                                      self._bookmark_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._bookmark_marker)
        # Configure key bindings
        self._configure_keybindings()

        self.lexer = highlighter.build_lexer("python")
        if self.lexer is not None:
            self.setLexer(self.lexer)

        #Config Editor
        self._mini = None
        if settings.SHOW_MINIMAP:
            self._load_minimap(settings.SHOW_MINIMAP)
        self._last_block_position = 0
        self.set_flags()
        self.lang = 'python'
        self._cursor_line = self._cursor_index = -1
        self.__lines_count = 0
        self.pos_margin = 0
        self._indentation_guide = 0
        self._indent = 0
        self.__font = None
        self.__encoding = None

        self.allows_less_indentation = ['else', 'elif', 'finally', 'except']
        self.set_font(settings.FONT)
        self._selected_word = ''
        self._patIsWord = re.compile('\w+')
        #Completer
        #self.completer = completer_widget.CodeCompletionWidget(self)
        #Dict functions for KeyPress
        self.preKeyPress = {
            Qt.Key_Backspace: self.__backspace,
            Qt.Key_Enter: self.__ignore_extended_line,
            Qt.Key_Return: self.__ignore_extended_line,
            #Qt.Key_Colon: self.__retreat_to_keywords,
            Qt.Key_BracketRight: self.__brace_completion,
            Qt.Key_BraceRight: self.__brace_completion,
            Qt.Key_ParenRight: self.__brace_completion,
            Qt.Key_Apostrophe: self.__quot_completion,
            Qt.Key_QuoteDbl: self.__quot_completion
        }

        self.postKeyPress = {
            Qt.Key_Enter: self.__auto_indent,
            Qt.Key_Return: self.__auto_indent,
            Qt.Key_BracketLeft: self.__complete_braces,
            Qt.Key_BraceLeft: self.__complete_braces,
            Qt.Key_ParenLeft: self.__complete_braces,
            Qt.Key_Apostrophe: self.__complete_quotes,
            Qt.Key_QuoteDbl: self.__complete_quotes
        }

        self.connect(self, SIGNAL("linesChanged()"), self._update_sidebar)
        self.connect(self, SIGNAL("blockCountChanged(int)"),
                     self._update_file_metadata)

        self.load_project_config()
        #Context Menu Options
        self.__actionFindOccurrences = QAction(self.tr("Find Usages"), self)
        self.connect(self.__actionFindOccurrences, SIGNAL("triggered()"),
                     self._find_occurrences)

        ninjaide = IDE.get_service('ide')
        self.connect(ninjaide,
                     SIGNAL("ns_preferences_editor_font(PyQt_PyObject)"),
                     self.set_font)
        self.connect(
            ninjaide,
            SIGNAL("ns_preferences_editor_showTabsAndSpaces(PyQt_PyObject)"),
            self.set_flags)
        #TODO: figure it out it doesn´t work if gets shown after init
        ##self.connect(ninjaide,
        ##SIGNAL("ns_preferences_editor_minimapShow(PyQt_PyObject)"),
        ##self._load_minimap)
        self.connect(ninjaide,
                     SIGNAL("ns_preferences_editor_indent(PyQt_PyObject)"),
                     self.load_project_config)
        self.connect(ninjaide,
                     SIGNAL("ns_preferences_editor_marginLine(PyQt_PyObject)"),
                     self._set_margin_line)
        self.connect(
            ninjaide,
            SIGNAL("ns_preferences_editor_showLineNumbers(PyQt_PyObject)"),
            self._show_line_numbers)
        #self.connect(
        #ninjaide,
        #SIGNAL("ns_preferences_editor_scheme(PyQt_PyObject)"),
        #self.restyle)
        #self.connect(
        #ninjaide,
        #SIGNAL("ns_preferences_editor_scheme(PyQt_PyObject)"),
        #lambda: self.restyle())

        self.additional_builtins = None
        # Set the editor after initialization
        if self._neditable.editor:
            self.setDocument(self._neditable.document)
        else:
            self._neditable.set_editor(self)

        if self._neditable.file_path in settings.BREAKPOINTS:
            self.breakpoints = settings.BREAKPOINTS[self._neditable.file_path]
        if self._neditable.file_path in settings.BOOKMARKS:
            self.bookmarks = settings.BOOKMARKS[self._neditable.file_path]
        # Add breakpoints
        for line in self.breakpoints:
            self.markerAdd(line, self._breakpoint_marker)
        # Add bookmarks
        for line in self.bookmarks:
            self.markerAdd(line, self._bookmark_marker)

        self.connect(self._neditable, SIGNAL("checkersUpdated(PyQt_PyObject)"),
                     self._highlight_checkers)
예제 #20
0
def remove_pep8_checker():
    checker = (Pep8Checker,
               resources.get_color('Pep8Underline'), 2)
    remove_checker(checker)
예제 #21
0
    def __init__(self, neditable):
        super(Editor, self).__init__()
        self._neditable = neditable

        # QScintilla Configuration
        self._configure_qscintilla()

        # Markers
        self.foldable_lines = []
        self.breakpoints = []
        self.bookmarks = []
        self._fold_expanded_marker = 1
        self._fold_collapsed_marker = 2
        self._bookmark_marker = 3
        self._breakpoint_marker = 4
        self.setMarginSensitivity(1, True)
        self.connect(self,
                     SIGNAL('marginClicked(int, int, Qt::KeyboardModifiers)'),
                     self.on_margin_clicked)
        color_fore = resources.get_color("FoldArea")
        # Marker Fold Expanded
        self.markerDefine(QsciScintilla.DownTriangle,
                          self._fold_expanded_marker)
        color = resources.get_color("FoldArrowExpanded")
        self.setMarkerBackgroundColor(QColor(color),
                                      self._fold_expanded_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._fold_expanded_marker)
        # Marker Fold Collapsed
        self.markerDefine(QsciScintilla.RightTriangle,
                          self._fold_collapsed_marker)
        color = resources.get_color("FoldArrowCollapsed")
        self.setMarkerBackgroundColor(QColor(color),
                                      self._fold_collapsed_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._fold_collapsed_marker)
        # Marker Breakpoint
        self.markerDefine(QsciScintilla.Circle, self._breakpoint_marker)
        self.setMarkerBackgroundColor(QColor(255, 11, 11),
                                      self._breakpoint_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._breakpoint_marker)
        # Marker Bookmark
        self.markerDefine(QsciScintilla.SmallRectangle, self._bookmark_marker)
        self.setMarkerBackgroundColor(QColor(10, 158, 227),
                                      self._bookmark_marker)
        self.setMarkerForegroundColor(QColor(color_fore),
                                      self._bookmark_marker)
        # Configure key bindings
        self._configure_keybindings()

        self.lexer = highlighter.get_lexer(self._neditable.extension())

        if self.lexer is not None:
            self.setLexer(self.lexer)

        #Config Editor
        self._mini = None
        if settings.SHOW_MINIMAP:
            self._load_minimap(settings.SHOW_MINIMAP)
        self._last_block_position = 0
        self.set_flags()
        #FIXME this lang should be guessed in the same form as lexer.
        self.lang = highlighter.get_lang(self._neditable.extension())
        self._cursor_line = self._cursor_index = -1
        self.__lines_count = 0
        self.pos_margin = 0
        self._indentation_guide = 0
        self._indent = 0
        self.__font = None
        self.__encoding = None

        #FIXME these should be language bound
        self.allows_less_indentation = ['else', 'elif', 'finally', 'except']
        self.set_font(settings.FONT)
        self._selected_word = ''
        self._patIsWord = re.compile('\w+')
        #Completer
        #self.completer = completer_widget.CodeCompletionWidget(self)
        #Dict functions for KeyPress
        self.preKeyPress = {
            Qt.Key_Backspace: self.__backspace,
            Qt.Key_Enter: self.__ignore_extended_line,
            Qt.Key_Return: self.__ignore_extended_line,
            #Qt.Key_Colon: self.__retreat_to_keywords,
            Qt.Key_BracketRight: self.__brace_completion,
            Qt.Key_BraceRight: self.__brace_completion,
            Qt.Key_ParenRight: self.__brace_completion,
            Qt.Key_Apostrophe: self.__quot_completion,
            Qt.Key_QuoteDbl: self.__quot_completion
        }

        self.postKeyPress = {
            Qt.Key_Enter: self.__auto_indent,
            Qt.Key_Return: self.__auto_indent,
            Qt.Key_BracketLeft: self.__complete_braces,
            Qt.Key_BraceLeft: self.__complete_braces,
            Qt.Key_ParenLeft: self.__complete_braces,
            Qt.Key_Apostrophe: self.__complete_quotes,
            Qt.Key_QuoteDbl: self.__complete_quotes
        }

        self.connect(self, SIGNAL("linesChanged()"), self._update_sidebar)
        self.connect(self, SIGNAL("blockCountChanged(int)"),
                     self._update_file_metadata)

        self.load_project_config()
        #Context Menu Options
        self.__actionFindOccurrences = QAction(self.tr("Find Usages"), self)
        self.connect(self.__actionFindOccurrences, SIGNAL("triggered()"),
                     self._find_occurrences)

        ninjaide = IDE.get_service('ide')
        self.connect(ninjaide,
                     SIGNAL("ns_preferences_editor_font(PyQt_PyObject)"),
                     self.set_font)
        self.connect(
            ninjaide,
            SIGNAL("ns_preferences_editor_showTabsAndSpaces(PyQt_PyObject)"),
            self.set_flags)
        #TODO: figure it out it doesn´t work if gets shown after init
        ##self.connect(ninjaide,
        ##SIGNAL("ns_preferences_editor_minimapShow(PyQt_PyObject)"),
        ##self._load_minimap)
        self.connect(ninjaide,
                     SIGNAL("ns_preferences_editor_indent(PyQt_PyObject)"),
                     self.load_project_config)
        self.connect(ninjaide,
                     SIGNAL("ns_preferences_editor_marginLine(PyQt_PyObject)"),
                     self._set_margin_line)
        self.connect(
            ninjaide,
            SIGNAL("ns_preferences_editor_showLineNumbers(PyQt_PyObject)"),
            self._show_line_numbers)
        #self.connect(
        #ninjaide,
        #SIGNAL("ns_preferences_editor_scheme(PyQt_PyObject)"),
        #self.restyle)
        #self.connect(
        #ninjaide,
        #SIGNAL("ns_preferences_editor_scheme(PyQt_PyObject)"),
        #lambda: self.restyle())

        self.additional_builtins = None
        # Set the editor after initialization
        if self._neditable.editor:
            self.setDocument(self._neditable.document)
        else:
            self._neditable.set_editor(self)

        if self._neditable.file_path in settings.BREAKPOINTS:
            self.breakpoints = settings.BREAKPOINTS[self._neditable.file_path]
        if self._neditable.file_path in settings.BOOKMARKS:
            self.bookmarks = settings.BOOKMARKS[self._neditable.file_path]
        # Add breakpoints
        for line in self.breakpoints:
            self.markerAdd(line, self._breakpoint_marker)
        # Add bookmarks
        for line in self.bookmarks:
            self.markerAdd(line, self._bookmark_marker)

        self.connect(self._neditable, SIGNAL("checkersUpdated(PyQt_PyObject)"),
                     self._highlight_checkers)
예제 #22
0
 def __init__(self, neditor):
     super().__init__(neditor)
     self.__background = QColor(resources.get_color('CurrentLine'))
     self.__background.setAlpha(40)