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)
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)
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
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'))
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)
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)
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)
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)
def __init__(self): super().__init__() self.__matched_background = QColor(resources.get_color('BraceMatched')) self.__unmatched_background = QColor( resources.get_color('BraceUnmatched'))
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)
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)
def remove_error_checker(): checker = (ErrorsChecker, resources.get_color('ErrorUnderline'), 10) remove_checker(checker)
def __init__(self): super().__init__() self.__background = QColor(resources.get_color('CurrentLine')) self.__mode = settings.HIGHLIGHT_CURRENT_LINE_MODE
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,
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)
""" 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 )
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)
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)
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)
def remove_pep8_checker(): checker = (Pep8Checker, resources.get_color('Pep8Underline'), 2) remove_checker(checker)
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)
def __init__(self, neditor): super().__init__(neditor) self.__background = QColor(resources.get_color('CurrentLine')) self.__background.setAlpha(40)