package org.asciidoc.intellij.editor; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.event.CaretAdapter; import com.intellij.openapi.editor.event.CaretEvent; import com.intellij.openapi.fileEditor.TextEditor; import com.intellij.pom.Navigatable; import org.asciidoc.intellij.ui.SplitFileEditor; import org.jetbrains.annotations.NotNull; public class AsciiDocSplitEditor extends SplitFileEditor<TextEditor, AsciiDocPreviewEditor> implements TextEditor { public AsciiDocSplitEditor(@NotNull TextEditor mainEditor, @NotNull AsciiDocPreviewEditor secondEditor) { super(mainEditor, secondEditor); mainEditor.getEditor().getCaretModel().addCaretListener(new MyCaretListener(secondEditor)); } @Override protected void adjustEditorsVisibility() { super.adjustEditorsVisibility(); getSecondEditor().renderIfVisible(); } @NotNull @Override public String getName() { return "AsciiDoc split editor"; } @NotNull @Override public Editor getEditor() { return getMainEditor().getEditor(); } @Override public boolean canNavigateTo(@NotNull Navigatable navigatable) { return getMainEditor().canNavigateTo(navigatable); } @Override public void navigateTo(@NotNull Navigatable navigatable) { getMainEditor().navigateTo(navigatable); } private static class MyCaretListener extends CaretAdapter { @NotNull private final AsciiDocPreviewEditor myPreviewFileEditor; public MyCaretListener(@NotNull AsciiDocPreviewEditor previewFileEditor) { myPreviewFileEditor = previewFileEditor; } @Override public void caretPositionChanged(CaretEvent e) { final Editor editor = e.getEditor(); if (editor.getCaretModel().getCaretCount() != 1) { return; } myPreviewFileEditor.scrollToLine(e.getNewPosition().line); } } }