void CodeEditorComponent::mouseDoubleClick (const MouseEvent& e) { CodeDocument::Position tokenStart (getPositionAt (e.x, e.y)); CodeDocument::Position tokenEnd (tokenStart); if (e.getNumberOfClicks() > 2) { tokenStart.setLineAndIndex (tokenStart.getLineNumber(), 0); tokenEnd.setLineAndIndex (tokenStart.getLineNumber() + 1, 0); } else { while (CharacterFunctions::isLetterOrDigit (tokenEnd.getCharacter())) tokenEnd.moveBy (1); tokenStart = tokenEnd; while (tokenStart.getIndexInLine() > 0 && CharacterFunctions::isLetterOrDigit (tokenStart.movedBy (-1).getCharacter())) tokenStart.moveBy (-1); } moveCaretTo (tokenEnd, false); moveCaretTo (tokenStart, true); }
void GenericCodeEditorComponent::findNext (bool forwards, bool skipCurrentSelection) { const Range<int> highlight (getHighlightedRegion()); const CodeDocument::Position startPos (getDocument(), skipCurrentSelection ? highlight.getEnd() : highlight.getStart()); int lineNum = startPos.getLineNumber(); int linePos = startPos.getIndexInLine(); const int totalLines = getDocument().getNumLines(); const String searchText (getSearchString()); const bool caseSensitive = isCaseSensitiveSearch(); for (int linesToSearch = totalLines; --linesToSearch >= 0;) { String line (getDocument().getLine (lineNum)); int index; if (forwards) { index = caseSensitive ? line.indexOf (linePos, searchText) : line.indexOfIgnoreCase (linePos, searchText); } else { if (linePos >= 0) line = line.substring (0, linePos); index = caseSensitive ? line.lastIndexOf (searchText) : line.lastIndexOfIgnoreCase (searchText); } if (index >= 0) { const CodeDocument::Position p (getDocument(), lineNum, index); selectRegion (p, p.movedBy (searchText.length())); break; } if (forwards) { linePos = 0; lineNum = (lineNum + 1) % totalLines; } else { if (--lineNum < 0) lineNum = totalLines - 1; linePos = -1; } } }
void CodeEditorComponent::moveLineDelta (const int delta, const bool selecting) { CodeDocument::Position pos (caretPos); const int newLineNum = pos.getLineNumber() + delta; if (columnToTryToMaintain < 0) columnToTryToMaintain = indexToColumn (pos.getLineNumber(), pos.getIndexInLine()); pos.setLineAndIndex (newLineNum, columnToIndex (newLineNum, columnToTryToMaintain)); const int colToMaintain = columnToTryToMaintain; moveCaretTo (pos, selecting); columnToTryToMaintain = colToMaintain; }
const Rectangle CodeEditorComponent::getCharacterBounds (const CodeDocument::Position& pos) const throw() { return Rectangle (roundToInt ((gutter - xOffset * charWidth) + indexToColumn (pos.getLineNumber(), pos.getIndexInLine()) * charWidth), (pos.getLineNumber() - firstLineOnScreen) * lineHeight, roundToInt (charWidth), lineHeight); }
bool CtrlrLuaMethodCodeEditor::keyPressed (const KeyPress &key, Component *originatingComponent) { if (key.getModifiers().isCommandDown() ) { if(key.getKeyCode() == 9) { owner.keyPressed (key, originatingComponent); return (true); } if (key.getKeyCode() == 83) // CTRL + S { saveDocument(); return (true); } if (CharacterFunctions::toUpperCase ((juce_wchar) (key.getKeyCode())) == 70) // CTRL + F { // Show search Dialog editorComponent->showFindPanel(); return (true); } if (CharacterFunctions::toUpperCase ((juce_wchar) (key.getKeyCode())) == 71) // CTRL + G { // Show Go To Dialog editorComponent->showGoTOPanel(); return (true); } if (CharacterFunctions::toUpperCase ((juce_wchar) (key.getKeyCode())) == 72) // CTRL + H { // Show search Dialog editorComponent->showFindPanel(true); return (true); } if (key.getKeyCode() == KeyPress::deleteKey) // CTRL + Delete { owner.keyPressed(key, originatingComponent); return (true); } // search selected previous in current if (key.getModifiers().isShiftDown() && key.getKeyCode() == KeyPress::F3Key) // CTRL + SHIFT + F3 { editorComponent->findSelection(false); return (true); } } // search selected next in current if (key.getModifiers().isShiftDown() && key.getKeyCode() == KeyPress::F3Key) // SHIFT + F3 { editorComponent->findSelection(true); return (true); } if (key.getKeyCode() == KeyPress::F7Key) { saveAndCompileDocument(); return (true); } if (key.getKeyCode() == KeyPress::F8Key) { owner.saveAndCompilAllMethods(); return (true); } CodeDocument::Position pos = editorComponent->getCaretPos(); owner.setPositionLabelText ("Line: " + String(pos.getLineNumber()+1) + " Column: " + String(pos.getIndexInLine())); return (false); }
bool CtrlrLuaMethodCodeEditor::keyStateChanged (bool isKeyDown, Component *originatingComponent) { CodeDocument::Position pos = editorComponent->getCaretPos(); owner.setPositionLabelText ("Line: " + String(pos.getLineNumber()+1) + " Column: " + String(pos.getIndexInLine())); return (false); }
void CtrlrLuaMethodCodeEditor::mouseDown (const MouseEvent &e) { CodeDocument::Position pos = editorComponent->getCaretPos(); String url; if (isMouseOverUrl (pos, &url)) { URL(url).launchInDefaultBrowser(); } owner.setPositionLabelText ("Line: " + String(pos.getLineNumber()+1) + " Column: " + String(pos.getIndexInLine())); }