@Override public default int length() { return getCharCount(); }
/** * Get the line index for the caret * * @param caretOffset * the caret offset * @return the line index */ public int getLineAtOffset(int caretOffset) { return getContent().getLineAtOffset(caretOffset); }
private void bindContentListener() { this.content.addListener((x, o, n)->{ if (o != null) { o.removeTextChangeListener(this.textChangeListener); } if (n != null) { n.addTextChangeListener(this.textChangeListener); this.numberOfLines.set(n.getLineCount()); } }); StyledTextContent current = this.content.get(); if (current != null) { current.addTextChangeListener(this.textChangeListener); // set inital values this.numberOfLines.set(current.getLineCount()); } }
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; }
@Override protected void invalidated() { if (this.oldContent != null) { StyledTextContent content = this.oldContent.get(); if (content != null) { content.removeTextChangeListener(StyledTextArea.this.textChangeListener); } } StyledTextContent newContent = get(); this.oldContent = new WeakReference<StyledTextContent>(newContent); newContent.addTextChangeListener(StyledTextArea.this.textChangeListener); } }
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#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()); } }
int currentRowIndex = getControl().getContent().getLineAtOffset(getControl().getCaretOffset()); int currentLine = getControl().getContent().getLineAtOffset(offset); @SuppressWarnings("unused") int newLine = getControl().getContent().getLineAtOffset(newOffset); getControl().impl_setCaretOffset(newOffset, event.isShiftDown()); event.consume(); invokeAction(ActionType.WORD_NEXT); } else if (event.isMetaDown()) { int currentLine = getControl().getContent().getLineAtOffset(offset); int lineOffset = getControl().getContent().getOffsetAtLine(currentLine); String lineContent = getControl().getContent().getLine(currentLine); if (offset + 1 > getControl().getContent().getCharCount()) { break; 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(); if (rowIndex + 1 == getControl().getContent().getLineCount()) { break; int colIdx = offset - getControl().getContent().getOffsetAtLine(rowIndex); rowIndex += 1;
/** * 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); }
/** * Cut the current selection into the clipboard */ public void cut() { TextSelection selection = getSelection(); if (selection.length > 0) { final Clipboard clipboard = Clipboard.getSystemClipboard(); String content = getContent().getTextRange(selection.offset, selection.length); setCaretOffset(selection.offset); getContent().replaceTextRange(selection.offset, content.length(), ""); //$NON-NLS-1$ clipboard.setContent(Collections.singletonMap(DataFormat.PLAIN_TEXT, content)); } }
/** * default implementation for {@link DefaultTextEditActions#DELETE} */ protected void defaultDelete() { int offset = getControl().getCaretOffset(); TextSelection selection = getControl().getSelection(); if (selection.length > 0) { getControl().getContent().replaceTextRange(selection.offset, selection.length, ""); //$NON-NLS-1$ getControl().setCaretOffset(selection.offset); } else { int del = 1; if (getControl().getCaretOffset() + 2 <= getControl().getContent().getCharCount()) { if ("\r\n".equals(getControl().getContent().getTextRange(getControl().getCaretOffset(), 2))) { //$NON-NLS-1$ del = 2; } } if (getControl().getCaretOffset() + del <= getControl().getContent().getCharCount()) { getControl().getContent().replaceTextRange(getControl().getCaretOffset(), del, ""); //$NON-NLS-1$ getControl().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()); }
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; }
@Override public default CharSequence subSequence(int start, int end) { return getTextRange(start, end - start); } }
public boolean isValidLineIndex(int index) { return getContent().getLineCount() > index; }
public void replace(@NonNull String replacement) { getControl().getContent().replaceTextRange(this.start, this.length, replacement); }
/** * navigates to specified line * * @param lineIndex */ public void navigateToLine(int lineIndex) { if (lineIndex >= 0 && lineIndex <= getContent().getLineCount()) { int offset = getContent().getOffsetAtLine(lineIndex); setCaretOffset(offset); } }
static int computeStart(StyledTextContent content, int firstLine) { return content.getOffsetAtLine(firstLine); }
public String getText(int index) { return getContent().getLine(index); }
/** * 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); }