pEditor::pEditor( QWidget* p ) : QsciScintilla( p ) { const QSize mPixSize = QSize( 16, 16 ); // register image for bookmarks markerDefine( QPixmap( ":/editor/bookmark.png" ).scaled( mPixSize ), mdBookmark ); // deal with utf8 setUtf8( true ); // connection connect( this, SIGNAL( linesChanged() ), this, SLOT( linesChanged() ) ); connect( this, SIGNAL( copyAvailable( bool ) ), this, SLOT( setCopyAvailable( bool ) ) ); connect( this, SIGNAL( cursorPositionChanged( int, int ) ), this, SLOT( cursorPositionChanged( int, int ) ) ); connect( this, SIGNAL( textChanged() ), this, SLOT( textChanged() ) ); connect( QApplication::clipboard(), SIGNAL( dataChanged() ), this, SLOT( clipboardDataChanged() ) ); // init pasteAvailable if ( !mPasteAvailableInit ) { mPasteAvailableInit = true; mPasteAvailable = !QApplication::clipboard()->text().isEmpty(); } // init qscishortcutsmanager if needed standardCommands()->clearKeys(); standardCommands()->clearAlternateKeys(); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_TAB, SCI_TAB); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_ESCAPE, SCI_CANCEL); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_RETURN, SCI_NEWLINE); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_DOWN, SCI_LINEDOWN); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_UP, SCI_LINEUP); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_RIGHT, SCI_CHARRIGHT); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_LEFT, SCI_CHARLEFT); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_BACK, SCI_DELETEBACK); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_PRIOR, SCI_PAGEUP); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_NEXT, SCI_PAGEDOWN); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_HOME, SCI_VCHOME); SendScintilla( QsciScintillaBase::SCI_ASSIGNCMDKEY, SCK_END, SCI_LINEEND); // Create shortcuts manager, if not created qSciShortcutsManager::instance(); }
SonicPiScintilla::SonicPiScintilla(SonicPiLexer *lexer, SonicPiTheme *theme) : QsciScintilla() { this->theme = theme; standardCommands()->clearKeys(); standardCommands()->clearAlternateKeys(); QString skey; QSettings settings("sonic-pi.net", "Key bindings"); #if defined(Q_OS_MAC) int SPi_CTRL = Qt::META; int SPi_META = Qt::CTRL; #else int SPi_CTRL = Qt::CTRL; int SPi_META = Qt::ALT; #endif // basic navigation addKeyBinding(settings, QsciCommand::PageDown, Qt::Key_PageDown); addKeyBinding(settings, QsciCommand::PageUp, Qt::Key_PageUp); addKeyBinding(settings, QsciCommand::LineDown, Qt::Key_N | SPi_CTRL); addOtherKeyBinding(settings, QsciCommand::LineDown, Qt::Key_Down); addKeyBinding(settings, QsciCommand::LineDownExtend, Qt::Key_Down | Qt::SHIFT); addKeyBinding(settings, QsciCommand::LineUp, Qt::Key_P | SPi_CTRL); addOtherKeyBinding(settings, QsciCommand::LineUp, Qt::Key_Up); addKeyBinding(settings, QsciCommand::LineUpExtend, Qt::Key_Up | Qt::SHIFT); addKeyBinding(settings, QsciCommand::CharRight, Qt::Key_F | SPi_CTRL); addOtherKeyBinding(settings, QsciCommand::CharRight, Qt::Key_Right); addKeyBinding(settings, QsciCommand::CharRightExtend, Qt::Key_Right | Qt::SHIFT); addKeyBinding(settings, QsciCommand::WordRight, Qt::Key_F | SPi_META); addOtherKeyBinding(settings, QsciCommand::WordRight, Qt::Key_Right | SPi_CTRL); addKeyBinding(settings, QsciCommand::WordRightExtend, Qt::Key_Right | SPi_CTRL | Qt::SHIFT); addKeyBinding(settings, QsciCommand::CharLeft, Qt::Key_B | SPi_CTRL); addOtherKeyBinding(settings, QsciCommand::CharLeft, Qt::Key_Left); addKeyBinding(settings, QsciCommand::CharLeftExtend, Qt::Key_Left | Qt::SHIFT); addKeyBinding(settings, QsciCommand::WordLeft, Qt::Key_B | SPi_META); addOtherKeyBinding(settings, QsciCommand::WordLeft, Qt::Key_Left | SPi_CTRL); addKeyBinding(settings, QsciCommand::WordLeftExtend, Qt::Key_Left | SPi_CTRL | Qt::SHIFT); addKeyBinding(settings, QsciCommand::Delete, Qt::Key_D | SPi_CTRL); addOtherKeyBinding(settings, QsciCommand::Delete, Qt::Key_Delete); addKeyBinding(settings, QsciCommand::DeleteBack, Qt::Key_H | SPi_CTRL); addOtherKeyBinding(settings, QsciCommand::DeleteBack, Qt::Key_Backspace); addKeyBinding(settings, QsciCommand::Home, Qt::Key_A | SPi_CTRL); addKeyBinding(settings, QsciCommand::VCHome, Qt::Key_Home); addKeyBinding(settings, QsciCommand::VCHomeExtend, Qt::Key_Home | Qt::SHIFT); addKeyBinding(settings, QsciCommand::DocumentStart, Qt::Key_Home | SPi_CTRL); addKeyBinding(settings, QsciCommand::DocumentStartExtend, Qt::Key_Home | SPi_CTRL | Qt::SHIFT); addKeyBinding(settings, QsciCommand::LineEnd, Qt::Key_E | SPi_CTRL); addOtherKeyBinding(settings, QsciCommand::LineEnd, Qt::Key_End); addKeyBinding(settings, QsciCommand::LineEndExtend, Qt::Key_End | Qt::SHIFT); addKeyBinding(settings, QsciCommand::DocumentEnd, Qt::Key_End | SPi_CTRL); addKeyBinding(settings, QsciCommand::DocumentEndExtend, Qt::Key_End | SPi_CTRL | Qt::SHIFT); addKeyBinding(settings, QsciCommand::Delete, Qt::Key_D | SPi_CTRL); addKeyBinding(settings, QsciCommand::VerticalCentreCaret, Qt::Key_L | SPi_CTRL); // tab return addKeyBinding(settings, QsciCommand::Newline, Qt::Key_Return); addKeyBinding(settings, QsciCommand::Backtab, Qt::Key_Tab | Qt::SHIFT); // copy paste addKeyBinding(settings, QsciCommand::SelectionCopy, Qt::Key_C | SPi_META); addOtherKeyBinding(settings, QsciCommand::SelectionCopy, Qt::Key_C | SPi_CTRL); addKeyBinding(settings, QsciCommand::SelectionCut, Qt::Key_X | SPi_META); addOtherKeyBinding(settings, QsciCommand::SelectionCut, Qt::Key_X | SPi_CTRL); addKeyBinding(settings, QsciCommand::Paste, Qt::Key_V | SPi_META); addOtherKeyBinding(settings, QsciCommand::Paste, Qt::Key_Y | SPi_CTRL); addKeyBinding(settings, QsciCommand::Undo, Qt::Key_Z | SPi_META); addOtherKeyBinding(settings, QsciCommand::Undo, Qt::Key_Z | SPi_CTRL); addKeyBinding(settings, QsciCommand::Redo, Qt::Key_Z | Qt::SHIFT | SPi_META); addOtherKeyBinding(settings, QsciCommand::Redo, Qt::Key_Z | Qt::SHIFT | SPi_CTRL); addKeyBinding(settings, QsciCommand::SelectAll, Qt::Key_A | SPi_META); // delete word left and right addKeyBinding(settings, QsciCommand::DeleteWordLeft, Qt::Key_Backslash | SPi_META); addKeyBinding(settings, QsciCommand::DeleteWordLeft, Qt::Key_Backspace | SPi_META); addKeyBinding(settings, QsciCommand::DeleteWordRight, Qt::Key_D | SPi_META); standardCommands()->readSettings(settings); this->setMatchedBraceBackgroundColor(theme->color("MatchedBraceBackground")); this->setMatchedBraceForegroundColor(theme->color("MatchedBraceForeground")); setIndentationWidth(2); setIndentationGuides(true); setIndentationGuidesForegroundColor(theme->color("IndentationGuidesForeground")); setBraceMatching( SonicPiScintilla::SloppyBraceMatch); //TODO: add preference toggle for this: //this->setFolding(SonicPiScintilla::CircledTreeFoldStyle, 2); setCaretLineVisible(true); setCaretLineBackgroundColor(theme->color("CaretLineBackground")); setFoldMarginColors(theme->color("FoldMarginForeground"),theme->color("FoldMarginForeground")); setMarginLineNumbers(0, true); setMarginsBackgroundColor(theme->color("MarginBackground")); setMarginsForegroundColor(theme->color("MarginForeground")); setMarginsFont(QFont("Menlo", 15, -1, true)); setUtf8(true); setText("#loading..."); setLexer((QsciLexer *)lexer); markerDefine(RightArrow, 8); setMarkerBackgroundColor("deeppink", 8); setAutoCompletionThreshold(1); setAutoCompletionSource(SonicPiScintilla::AcsAPIs); setAutoCompletionCaseSensitivity(false); setSelectionBackgroundColor(theme->color("SelectionBackground")); setSelectionForegroundColor(theme->color("SelectionForeground")); setCaretWidth(5); setCaretForegroundColor(theme->color("CaretForeground")); setEolMode(EolUnix); SendScintilla(SCI_SETWORDCHARS, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:_?!"); }