static int computeStart(StyledTextContent content, int firstLine) { return content.getOffsetAtLine(firstLine); }
/** * Get the initial offset of the line * * @param lineNumber * the line number * @return the offset */ public int getOffsetAtLine(int lineNumber) { return getContent().getOffsetAtLine(lineNumber); }
static int computeEnd(StyledTextContent content, int lastLine) { int endIndex; if (content.getLineCount() > lastLine + 1) { endIndex = content.getOffsetAtLine(lastLine + 1); } else { endIndex = content.getOffsetAtLine(lastLine) + content.getLine(lastLine).length(); } return endIndex; }
/** * Get the initial offset of the line * * @param lineNumber * the line number * @return the offset */ public int getOffsetAtLine(int lineNumber) { return getContent().getOffsetAtLine(lineNumber); }
public int getOffset(int index) { return getContent().getOffsetAtLine(index); }
/** * @return the line offset */ public int getLineOffset() { int idx = StyledTextSkin.this.lineList.indexOf(this); return getSkinnable().getContent().getOffsetAtLine(idx); }
private int computeFirstUnchangedLine(TextChangingEvent event) { int endOffset = event.offset + event.replaceCharCount; int endLineIndex = getContent().getLineAtOffset(endOffset); int endLineBegin = getContent().getOffsetAtLine(endLineIndex); // int endLineLength = ContentView.this.lineHelper.getLength(endLineIndex); int firstSafeLine; if (endLineBegin == event.offset) { // offset at beginning of line firstSafeLine = endLineIndex; } else { // offset in middle or at end of line firstSafeLine = endLineIndex + 1; } return firstSafeLine; }
/** * navigates to specified line * * @param lineIndex */ public void navigateToLine(int lineIndex) { if (lineIndex >= 0 && lineIndex <= getContent().getLineCount()) { int offset = getContent().getOffsetAtLine(lineIndex); setCaretOffset(offset); } }
/** * default implementation for {@link DefaultTextEditActions#LINE_END} */ protected void defaultNavigateLineEnd() { final int caretLine = computeCurrentLineNumber(); moveCaretAbsolute(getControl().getContent().getOffsetAtLine(caretLine) + getControl().getContent().getLine(caretLine).length()); }
int start = getContent().getOffsetAtLine(index); int length = line.length();
int start = getSkinnable().getContent().getOffsetAtLine(idx); int length = line.length();
private int calculatePageUpOffset() { final int linesPerPage = ((StyledTextSkin)getControl().getSkin()).getVisibleLineCount(); final int globalOffset = getControl().getCaretOffset(); final int lineIndex = getControl().getContent().getLineAtOffset(globalOffset); final int lineLocalOffset = globalOffset - getControl().getContent().getOffsetAtLine(lineIndex); final int newLineIndex = Math.max(0, lineIndex - linesPerPage); final int newLineLocalOffset = Math.min(getControl().getContent().getLine(newLineIndex).length(), lineLocalOffset); return getControl().getOffsetAtLine(newLineIndex) + newLineLocalOffset; }
/** * default implementation for {@link DefaultTextEditActions#MOVE_UP} and * {@link DefaultTextEditActions#SELECT_UP} * * @param select * whether to change the selection */ protected void defaultUp(boolean select) { int currentRowIndex = getControl().getContent().getLineAtOffset(getControl().getCaretOffset()); final int offset = getControl().getCaretOffset(); int rowIndex = currentRowIndex; if (rowIndex == 0) { return; } int colIdx = offset - getControl().getContent().getOffsetAtLine(rowIndex); rowIndex -= 1; int lineOffset = getControl().getContent().getOffsetAtLine(rowIndex); int newCaretPosition = lineOffset + colIdx; int maxPosition = lineOffset + getControl().getContent().getLine(rowIndex).length(); moveCaretAbsolute(Math.min(newCaretPosition, maxPosition), select); }
private int calculatePageDownOffset() { final int linesPerPage = ((StyledTextSkin)getControl().getSkin()).getVisibleLineCount(); final int globalOffset = getControl().getCaretOffset(); final int lineIndex = getControl().getContent().getLineAtOffset(globalOffset); final int lineLocalOffset = globalOffset - getControl().getContent().getOffsetAtLine(lineIndex); final int newLineIndex = Math.min(getControl().getContent().getLineCount()-1, lineIndex + linesPerPage); final int newLineLocalOffset = Math.min(getControl().getContent().getLine(newLineIndex).length(), lineLocalOffset); return getControl().getOffsetAtLine(newLineIndex) + newLineLocalOffset; }
/** * default implementation for {@link DefaultTextEditActions#LINE_END} */ protected void defaultSelectLineEnd() { int caretLine = getControl().getContent().getLineAtOffset(getControl().getCaretOffset()); int end = getControl().getContent().getOffsetAtLine(caretLine) + getControl().getContent().getLine(caretLine).length(); moveCaretAbsolute(end, true); }
public void scrollOffsetIntoView(int offset, int verticalOffset, int horizontalOffset) { if( offset >= 0 ) { int lineIdx = getSkinnable().getContent().getLineAtOffset(offset); Range<Integer> visibleLines = this.content.getVisibleLines(); if( ! visibleLines.contains(Integer.valueOf(lineIdx)) ) { int linesVisible = visibleLines.upperEndpoint().intValue(); int delta = linesVisible - verticalOffset; int scrollLine = Math.min(lineIdx+delta, getSkinnable().getContent().getLineCount()-1); scrollLineIntoView(scrollLine); } int colIdx = offset - getSkinnable().getContent().getOffsetAtLine(lineIdx); String line = getSkinnable().getContent().getLine(lineIdx).substring(0, colIdx); int tabCount = (int)line.chars().filter(c -> c == '\t').count(); scrollColumnIntoView(colIdx + tabCount * (getSkinnable().tabAvanceProperty().get() - 1), horizontalOffset); } else { scrollLineIntoView(0); scrollColumnIntoView(0, 0); } }
/** * default implementation for {@link DefaultTextEditActions#MOVE_DOWN} and * {@link DefaultTextEditActions#SELECT_DOWN} * * @param select * whether to change the selection */ protected void defaultDown(boolean select) { int currentRowIndex = getControl().getContent().getLineAtOffset(getControl().getCaretOffset()); final int offset = getControl().getCaretOffset(); int rowIndex = currentRowIndex; if (rowIndex + 1 == getControl().getContent().getLineCount()) { return; } int colIdx = offset - getControl().getContent().getOffsetAtLine(rowIndex); rowIndex += 1; int lineOffset = getControl().getContent().getOffsetAtLine(rowIndex); int newCaretPosition = lineOffset + colIdx; int maxPosition = lineOffset + getControl().getContent().getLine(rowIndex).length(); moveCaretAbsolute(Math.min(newCaretPosition, maxPosition), select); }
/** * default implementation for {@link DefaultTextEditActions#NEW_LINE} */ protected void defaultNewLine() { int offset = getControl().getCaretOffset(); int line = getControl().getContent().getLineAtOffset(offset); int lineOffset = offset - getControl().getContent().getOffsetAtLine(line); String lineContent = getControl().getContent().getLine(line); // Should we make this configurable char[] chars = lineContent.toCharArray(); String prefix = ""; //$NON-NLS-1$ for (int i = 0; i < Math.min(lineOffset, chars.length); i++) { if (chars[i] == ' ' || chars[i] == '\t') { prefix += chars[i]; } else { break; } } if (getControl().getSelection().length > 0) { int caretPos = getControl().getSelection().offset + getControl().getLineSeparator().getValue().length() + prefix.length(); getControl().getContent().replaceTextRange(getControl().getSelection().offset, getControl().getSelection().length, getControl().getLineSeparator().getValue() + prefix); getControl().setCaretOffset( caretPos ); } else { getControl().getContent().replaceTextRange(getControl().getCaretOffset(), 0, getControl().getLineSeparator().getValue() + prefix); getControl().setCaretOffset(offset + getControl().getLineSeparator().getValue().length() + prefix.length()); } }
styledText.caretOffsetProperty().addListener((obs, ol, ne) -> { int lineIdx = styledText.getContent().getLineAtOffset(ne.intValue()); int colIdx = ne.intValue() - styledText.getContent().getOffsetAtLine(lineIdx);
} else if (event.isMetaDown()) { int currentLine = getControl().getContent().getLineAtOffset(offset); int lineOffset = getControl().getContent().getOffsetAtLine(currentLine); String lineContent = getControl().getContent().getLine(currentLine); int colIdx = offset - getControl().getContent().getOffsetAtLine(rowIndex); rowIndex -= 1; int lineOffset = getControl().getContent().getOffsetAtLine(rowIndex); int newCaretPosition = lineOffset + colIdx; int maxPosition = lineOffset + getControl().getContent().getLine(rowIndex).length(); int colIdx = offset - getControl().getContent().getOffsetAtLine(rowIndex); rowIndex += 1; int lineOffset = getControl().getContent().getOffsetAtLine(rowIndex); int newCaretPosition = lineOffset + colIdx; int maxPosition = lineOffset + getControl().getContent().getLine(rowIndex).length();