package com.siberika.idea.pascal.util;
import com.intellij.codeInsight.template.Template;
import com.intellij.codeInsight.template.TemplateEditingAdapter;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.RangeMarker;
import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.siberika.idea.pascal.editor.PascalActionDeclare;
/**
* Author: George Bakhtadze
* Date: 02/01/2016
*/
public class PreserveCaretTemplateAdapter extends TemplateEditingAdapter {
private final PsiFile file;
private final Editor editor;
private final RangeMarker marker;
private final PsiElement elementToReformat;
private final PascalActionDeclare actionDeclare;
public PreserveCaretTemplateAdapter(Editor editor, PsiFile file, RangeMarker marker, PsiElement elementToReformat, PascalActionDeclare actionDeclare) {
this.editor = editor;
this.file = file;
this.marker = marker;
this.elementToReformat = elementToReformat;
this.actionDeclare = actionDeclare;
}
@Override
public void templateFinished(Template template, boolean brokenOff) {
if ((editor != null) && (editor.getProject() != null) && (file != null) && marker.isValid()) {
editor.getCaretModel().moveToOffset(marker.getStartOffset());
editor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
FileEditorManager.getInstance(editor.getProject()).openFile(file.getVirtualFile(), true, true);
DocUtil.reformat(elementToReformat, true);
if (actionDeclare != null) {
actionDeclare.afterExecution(editor, file);
}
}
}
}