IDEA-151671 vcs: scroll annotated content to relevant place if called from FileHistory toolwindow

This commit is contained in:
Aleksey Pivovarov
2016-03-14 18:32:14 +03:00
parent 35fe0ef2a4
commit 471749aee8
3 changed files with 35 additions and 3 deletions
@@ -1,7 +1,9 @@
package com.intellij.openapi.vcs.actions;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.PlainTextFileType;
import com.intellij.openapi.project.DumbAware;
@@ -94,6 +96,12 @@ abstract class AnnotateRevisionAction extends AnnotateRevisionActionBase impleme
return revisions.get(currentLine);
}
@Nullable
@Override
protected Editor getEditor(@NotNull AnActionEvent e) {
return e.getData(CommonDataKeys.EDITOR);
}
@Override
public void consume(Integer integer) {
currentLine = integer;
@@ -37,6 +37,11 @@ public abstract class AnnotateRevisionActionBase extends AnAction {
@Nullable
protected abstract VcsFileRevision getFileRevision(@NotNull AnActionEvent e);
@Nullable
protected Editor getEditor(@NotNull AnActionEvent e) {
return null;
}
public void update(@NotNull AnActionEvent e) {
e.getPresentation().setEnabled(isEnabled(e));
}
@@ -70,7 +75,7 @@ public abstract class AnnotateRevisionActionBase extends AnAction {
assert file != null;
assert fileRevision != null;
final Editor editor = e.getData(CommonDataKeys.EDITOR);
final Editor editor = getEditor(e);
final CharSequence oldContent = editor == null ? null : editor.getDocument().getImmutableCharSequence();
final int oldLine = editor == null ? 0 : editor.getCaretModel().getLogicalPosition().line;
@@ -27,8 +27,8 @@ import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.*;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
@@ -1064,6 +1064,25 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton {
setShortcutSet(ActionManager.getInstance().getAction("Annotate").getShortcutSet());
}
@Nullable
@Override
protected Editor getEditor(@NotNull AnActionEvent e) {
VirtualFile virtualFile = getVirtualFile();
if (virtualFile == null) return null;
Editor editor = e.getData(CommonDataKeys.EDITOR);
if (editor != null) {
VirtualFile editorFile = FileDocumentManager.getInstance().getFile(editor.getDocument());
if (Comparing.equal(editorFile, virtualFile)) return editor;
}
FileEditor fileEditor = FileEditorManager.getInstance(myProject).getSelectedEditor(virtualFile);
if (fileEditor instanceof TextEditor) {
return ((TextEditor)fileEditor).getEditor();
}
return null;
}
@Nullable
@Override
protected AbstractVcs getVcs(@NotNull AnActionEvent e) {