Java 类com.intellij.openapi.editor.CaretState 实例源码

项目:MissingInActions    文件:AcceptNotFoundCaretsAction.java   
@Override
protected void doExecute(final Editor editor, @Nullable final Caret caret, final DataContext dataContext) {
    LineSelectionManager manager = LineSelectionManager.getInstance(editor);
    List<CaretState> caretStates = manager.getStartCaretStates();

    if (caretStates != null) {
        Set<CaretEx> startMatchedCarets = manager.getStartMatchedCarets();
        if (startMatchedCarets != null) {
            Set<Long> excludeList = CaretEx.getExcludedCoordinates(null, startMatchedCarets);
            Set<CaretEx> foundCarets = manager.getFoundCarets();
            excludeList = CaretEx.getExcludedCoordinates(excludeList, foundCarets);
            List<CaretState> keepCarets = new ArrayList<>(caretStates.size() - startMatchedCarets.size());

            for (CaretState caretState : caretStates) {
                if (excludeList != null && excludeList.contains(CaretEx.getCoordinates(caretState.getCaretPosition()))) continue;
                keepCarets.add(caretState);
            }

            manager.clearSearchFoundCarets();
            editor.getCaretModel().setCaretsAndSelections(keepCarets);
        } else {
            manager.clearSearchFoundCarets();
            editor.getCaretModel().setCaretsAndSelections(caretStates);
        }
    }
}
项目:StringManipulation    文件:SortLinesBySubSelectionAction.java   
public void filterCarets(Editor editor, List<CaretState> caretsAndSelections) {
    int previousLineNumber = -1;
    Iterator<CaretState> iterator = caretsAndSelections.iterator();
    while (iterator.hasNext()) {
        CaretState caretsAndSelection = iterator.next();
        LogicalPosition caretPosition = caretsAndSelection.getCaretPosition();
        int lineNumber = editor.getDocument().getLineNumber(
                editor.logicalPositionToOffset(caretPosition));
        if (lineNumber == previousLineNumber) {
               Caret caret = getCaretAt(editor, caretsAndSelection.getCaretPosition());
            editor.getCaretModel().removeCaret(caret);
            iterator.remove();
        }
        previousLineNumber = lineNumber;
    }
}
项目:MissingInActions    文件:CancelSearchCaretsAction.java   
@Override
protected void doExecute(final Editor editor, @Nullable final Caret caret, final DataContext dataContext) {
    LineSelectionManager manager = LineSelectionManager.getInstance(editor);
    List<CaretState> caretStates = manager.getStartCaretStates();
    if (caretStates != null) {
        manager.clearSearchFoundCarets();
        editor.getCaretModel().setCaretsAndSelections(caretStates);
    }
}
项目:MissingInActions    文件:PatternSearchCaretHandler.java   
protected boolean perform(@NotNull LineSelectionManager manager, @NotNull Caret caret, @NotNull Range range, @NotNull ArrayList<CaretState> createCarets) {
    Editor editor = caret.getEditor();
    final BasedSequence chars = BasedSequenceImpl.of(editor.getDocument().getCharsSequence());
    boolean keepCaret = !isMoveFirstMatch();

    T matcher = prepareMatcher(manager, caret, range, chars);
    if (matcher != null) {
        // forward search withing range in document
        CaretMatch lastMatch = null;
        while (true) {
            CaretMatch match = nextMatch(matcher, chars, range, lastMatch);
            if (match == null) break;

            // found it, create or move caret here
            if (!keepCaret) {
                keepCaret = true;
                if (isMoveFirstMatch()) {
                    caret.moveToOffset(match.caretOffset);
                    caret.setSelection(match.selectionStart, match.selectionEnd);
                }
            } else {
                // create a new position if caret moved
                LogicalPosition offset = editor.offsetToLogicalPosition(match.caretOffset);
                LogicalPosition startOffset = editor.offsetToLogicalPosition(match.selectionStart);
                LogicalPosition endOffset = editor.offsetToLogicalPosition(match.selectionEnd);
                CaretState caretState = new CaretState(offset, startOffset, endOffset);
                createCarets.add(caretState);
            }

            if (isSingleMatch() || match.caretOffset + match.matchLength >= chars.length()) break;
            lastMatch = match;
        }
    }

    return keepCaret || isSingleMatch();
}
项目:StringManipulation    文件:MultiCaretHandlerHandler.java   
@Override
protected void executeWriteAction(Editor editor, @Nullable Caret caret, DataContext dataContext, @Nullable T additionalParameter) {
    List<CaretState> caretsAndSelections = editor.getCaretModel().getCaretsAndSelections();
    if (caretsAndSelections.size() > 1) {
        multiSelection(editor, caretsAndSelections, additionalParameter);
    } else if (caretsAndSelections.size() == 1) {
        singleSelection(editor, caretsAndSelections, additionalParameter);
    }
}
项目:StringManipulation    文件:MultiCaretHandlerHandler.java   
protected final void singleSelection(Editor editor, List<CaretState> caretsAndSelections, T additionalParameter) {
    CaretState caretsAndSelection = caretsAndSelections.get(0);
    LogicalPosition selectionStart = caretsAndSelection.getSelectionStart();
    LogicalPosition selectionEnd = caretsAndSelection.getSelectionEnd();
    String text = editor.getDocument().getText(
            new TextRange(editor.logicalPositionToOffset(selectionStart),
                    editor.logicalPositionToOffset(selectionEnd)));

    String charSequence = processSingleSelection(text, additionalParameter);

    editor.getDocument().replaceString(editor.logicalPositionToOffset(selectionStart),
            editor.logicalPositionToOffset(selectionEnd), charSequence);
}
项目:StringManipulation    文件:IdeUtils.java   
public static void sort(List<CaretState> caretsAndSelections) {
    Collections.sort(caretsAndSelections, new Comparator<CaretState>() {
        @Override
        public int compare(CaretState o1, CaretState o2) {
            return o1.getCaretPosition().compareTo(o2.getCaretPosition());
        }
    });
}
项目:StringManipulation    文件:SortLinesBySubSelectionAction.java   
private void processMultiCaret(Editor editor, @NotNull SortSettings sortSettings, List<CaretState> caretsAndSelections) {
    List<SubSelectionSortLine> lines = new ArrayList<SubSelectionSortLine>();
    for (CaretState caretsAndSelection : caretsAndSelections) {
        LogicalPosition selectionStart = caretsAndSelection.getSelectionStart();
        int selectionStartOffset = editor.logicalPositionToOffset(selectionStart);
        LogicalPosition selectionEnd = caretsAndSelection.getSelectionEnd();
        int selectionEndOffset = editor.logicalPositionToOffset(selectionEnd);
        LogicalPosition caretPosition = caretsAndSelection.getCaretPosition();
        // no selection -> expand to end of line
        if (selectionStartOffset == selectionEndOffset) {
            String text = editor.getDocument().getText();
            selectionEndOffset = text.indexOf("\n", selectionStartOffset);
            if (selectionEndOffset == -1) {
                selectionEndOffset = text.length();
            }
               Caret caret = getCaretAt(editor, caretsAndSelection.getCaretPosition());
            caret.setSelection(selectionStartOffset, selectionEndOffset);
        }

        String selection = editor.getDocument().getText(
                new TextRange(selectionStartOffset, selectionEndOffset));

        int lineNumber = editor.getDocument().getLineNumber(selectionStartOffset);
        int lineStartOffset = editor.getDocument().getLineStartOffset(lineNumber);
        int lineEndOffset = editor.getDocument().getLineEndOffset(lineNumber);
        String line = editor.getDocument().getText(new TextRange(lineStartOffset, lineEndOffset));

        lines.add(new SubSelectionSortLine(sortSettings, line, selection, lineStartOffset, lineEndOffset,
               selectionStartOffset - lineStartOffset, selectionEndOffset - lineStartOffset
           ));
    }

    List<SubSelectionSortLine> sortedLines = new ArrayList<SubSelectionSortLine>(lines);
    sortSettings.getSortType().sortLines(sortedLines);

    write(editor, lines, sortedLines);
}
项目:asciidoctor-intellij-plugin    文件:JavaFxHtmlPanel.java   
public void scollEditorToLine(int sourceLine) {
  ApplicationManager.getApplication().invokeLater(
    () -> {
      getEditor().getCaretModel().setCaretsAndSelections(
        Arrays.asList(new CaretState(new LogicalPosition(sourceLine - 1, 0), null, null))
      );
      getEditor().getScrollingModel().scrollToCaret(ScrollType.CENTER_UP);
    }
  );
}
项目:SlackStorm    文件:SlackPost.java   
protected String buildFileDetails() {
    CaretState selectionInfo = editor.getCaretModel().getCaretsAndSelections().get(0);
    int selectionStart = selectionInfo.getSelectionStart().line + 1;
    int selectionEnd = selectionInfo.getSelectionEnd().line + 1;
    return "File: " + currentFileName + ", Line(s): " + selectionStart + "-" + selectionEnd;
}