mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-274070 diff: support "Select Opposite Diff Pane" action for three-side viewers
GitOrigin-RevId: d4892afa4ad33fd257b01a9c0442a99ea5eb10b6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
34c23cd575
commit
4ec8be7462
+30
-1
@@ -16,6 +16,7 @@
|
||||
package com.intellij.diff.tools.util.side;
|
||||
|
||||
import com.intellij.diff.DiffContext;
|
||||
import com.intellij.diff.actions.impl.FocusOppositePaneAction;
|
||||
import com.intellij.diff.actions.impl.OpenInEditorWithMouseAction;
|
||||
import com.intellij.diff.actions.impl.SetEditorSettingsAction;
|
||||
import com.intellij.diff.contents.DocumentContent;
|
||||
@@ -33,8 +34,10 @@ import com.intellij.diff.tools.util.base.TextDiffViewerUtil;
|
||||
import com.intellij.diff.tools.util.breadcrumbs.SimpleDiffBreadcrumbsPanel;
|
||||
import com.intellij.diff.util.*;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.LogicalPosition;
|
||||
import com.intellij.openapi.editor.ScrollType;
|
||||
import com.intellij.openapi.editor.event.DocumentEvent;
|
||||
import com.intellij.openapi.editor.event.VisibleAreaEvent;
|
||||
import com.intellij.openapi.editor.event.VisibleAreaListener;
|
||||
@@ -62,7 +65,8 @@ public abstract class ThreesideTextDiffViewer extends ThreesideDiffViewer<TextEd
|
||||
public ThreesideTextDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) {
|
||||
super(context, request, TextEditorHolder.TextEditorHolderFactory.INSTANCE);
|
||||
|
||||
//new MyFocusOppositePaneAction().setupAction(myPanel, this); // TODO
|
||||
new MyFocusOppositePaneAction(true).install(myPanel);
|
||||
new MyFocusOppositePaneAction(false).install(myPanel);
|
||||
|
||||
myEditorSettingsAction = new SetEditorSettingsAction(getTextSettings(), getEditors());
|
||||
myEditorSettingsAction.applyDefaults();
|
||||
@@ -391,4 +395,29 @@ public abstract class ThreesideTextDiffViewer extends ThreesideDiffViewer<TextEd
|
||||
return request;
|
||||
}
|
||||
}
|
||||
|
||||
private class MyFocusOppositePaneAction extends FocusOppositePaneAction {
|
||||
MyFocusOppositePaneAction(boolean scrollToPosition) {
|
||||
super(scrollToPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(@NotNull AnActionEvent e) {
|
||||
ThreeSide currentSide = getCurrentSide();
|
||||
ThreeSide targetSide = currentSide.select(ThreeSide.BASE, ThreeSide.RIGHT, ThreeSide.LEFT); // cycle right
|
||||
|
||||
EditorEx targetEditor = getEditor(targetSide);
|
||||
|
||||
if (myScrollToPosition) {
|
||||
LogicalPosition currentPosition = DiffUtil.getCaretPosition(getCurrentEditor());
|
||||
LogicalPosition position = transferPosition(currentSide, targetSide, currentPosition);
|
||||
targetEditor.getCaretModel().moveToLogicalPosition(position);
|
||||
}
|
||||
|
||||
setCurrentSide(targetSide);
|
||||
targetEditor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
|
||||
|
||||
DiffUtil.requestFocus(getProject(), getPreferredFocusedComponent());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user