diff: extract common focus tracking logic

This commit is contained in:
Aleksey Pivovarov
2015-05-18 20:26:25 +03:00
parent c7a756c108
commit edd72f64a3
4 changed files with 234 additions and 151 deletions
@@ -24,10 +24,10 @@ import com.intellij.diff.contents.FileContent;
import com.intellij.diff.requests.ContentDiffRequest;
import com.intellij.diff.requests.DiffRequest;
import com.intellij.diff.tools.util.DiffNotifications;
import com.intellij.diff.tools.util.FocusTrackerSupport;
import com.intellij.diff.tools.util.SimpleDiffPanel;
import com.intellij.diff.tools.util.StatusPanel;
import com.intellij.diff.tools.util.base.ListenerDiffViewerBase;
import com.intellij.diff.util.DiffUserDataKeys;
import com.intellij.diff.util.DiffUtil;
import com.intellij.diff.util.Side;
import com.intellij.openapi.Disposable;
@@ -61,8 +61,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
@@ -79,10 +77,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
@Nullable private final FileEditorProvider myEditorProvider1;
@Nullable private final FileEditorProvider myEditorProvider2;
@Nullable private final MyEditorFocusListener myEditorFocusListener1;
@Nullable private final MyEditorFocusListener myEditorFocusListener2;
@NotNull private Side myCurrentSide = Side.LEFT;
@NotNull private final FocusTrackerSupport.TwosideFocusTrackerSupport myFocusTrackerSupport;
public BinaryDiffViewer(@NotNull DiffContext context, @NotNull DiffRequest request) {
super(context, (ContentDiffRequest)request);
@@ -96,16 +91,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
myEditorProvider2 = editors.second.second;
assert myEditor1 != null || myEditor2 != null;
if (myEditor1 != null && myEditor2 != null) {
myEditorFocusListener1 = new MyEditorFocusListener(Side.LEFT);
myEditorFocusListener2 = new MyEditorFocusListener(Side.RIGHT);
}
else {
myEditorFocusListener1 = null;
myEditorFocusListener2 = null;
}
myFocusTrackerSupport = new FocusTrackerSupport.TwosideFocusTrackerSupport(myEditor1, myEditor2);
myContentPanel = new BinaryContentPanel(titlePanel, myEditor1, myEditor2);
myPanel = new SimpleDiffPanel(myContentPanel, this, context);
@@ -113,15 +99,10 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
myStatusPanel = new MyStatusPanel();
new MyFocusOppositePaneAction().setupAction(myPanel);
installEditorListeners();
}
@Override
@CalledInAwt
public void onDispose() {
destroyEditorListeners();
destroyEditors();
super.onDispose();
}
@@ -130,25 +111,14 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
@CalledInAwt
protected void processContextHints() {
super.processContextHints();
if (myEditor1 == null) {
myCurrentSide = Side.RIGHT;
}
else if (myEditor2 == null) {
myCurrentSide = Side.LEFT;
}
else {
Side side = myContext.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE);
if (side != null) myCurrentSide = side;
}
myFocusTrackerSupport.processContextHints(myRequest, myContext);
}
@Override
@CalledInAwt
protected void updateContextHints() {
super.updateContextHints();
if (myEditor1 != null && myEditor2 != null) {
myContext.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE, myCurrentSide);
}
myFocusTrackerSupport.updateContextHints(myRequest, myContext);
}
//
@@ -222,20 +192,6 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
}
}
private void installEditorListeners() {
if (myEditor1 != null && myEditor2 != null) {
myEditor1.getComponent().addFocusListener(myEditorFocusListener1);
myEditor2.getComponent().addFocusListener(myEditorFocusListener2);
}
}
private void destroyEditorListeners() {
if (myEditor1 != null && myEditor2 != null) {
myEditor1.getComponent().removeFocusListener(myEditorFocusListener1);
myEditor2.getComponent().removeFocusListener(myEditorFocusListener2);
}
}
//
// Diff
//
@@ -364,8 +320,12 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
}
@NotNull
Side getCurrentSide() {
return myCurrentSide;
public Side getCurrentSide() {
return myFocusTrackerSupport.getCurrentSide();
}
public void setCurrentSide(@NotNull Side side) {
myFocusTrackerSupport.setCurrentSide(side);
}
@Nullable
@@ -447,7 +407,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
assert myEditor1 != null && myEditor2 != null;
myCurrentSide = myCurrentSide.other();
setCurrentSide(getCurrentSide().other());
myPanel.requestFocus();
}
@@ -465,7 +425,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
@Override
public Object getData(@NonNls String dataId) {
if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) {
return DiffUtil.getVirtualFile(myRequest, myCurrentSide);
return DiffUtil.getVirtualFile(myRequest, getCurrentSide());
}
return super.getData(dataId);
}
@@ -476,17 +436,4 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase {
return -1;
}
}
private class MyEditorFocusListener extends FocusAdapter {
@NotNull private final Side mySide;
private MyEditorFocusListener(@NotNull Side side) {
mySide = side;
}
public void focusGained(FocusEvent e) {
if (myEditor1 == null || myEditor2 == null) return;
myCurrentSide = mySide;
}
}
}
@@ -0,0 +1,188 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.diff.tools.util;
import com.intellij.diff.DiffContext;
import com.intellij.diff.requests.DiffRequest;
import com.intellij.diff.util.DiffUserDataKeys;
import com.intellij.diff.util.Side;
import com.intellij.diff.util.ThreeSide;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileEditor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.util.List;
public class FocusTrackerSupport<T> {
public static class TwosideFocusTrackerSupport {
@NotNull private Side myCurrentSide;
private final boolean myDumbMode;
@Nullable private final MyFocusListener myListener1;
@Nullable private final MyFocusListener myListener2;
public TwosideFocusTrackerSupport(@Nullable Editor editor1, @Nullable Editor editor2) {
this(getComponent(editor1), getComponent(editor2));
}
public TwosideFocusTrackerSupport(@Nullable FileEditor editor1, @Nullable FileEditor editor2) {
this(getComponent(editor1), getComponent(editor2));
}
public TwosideFocusTrackerSupport(@Nullable JComponent component1, @Nullable JComponent component2) {
assert component1 != null || component2 != null;
myCurrentSide = component2 != null ? Side.RIGHT : Side.LEFT;
myDumbMode = component1 == null || component2 == null;
if (!myDumbMode) {
myListener1 = new MyFocusListener(Side.LEFT);
component1.addFocusListener(myListener1);
myListener2 = new MyFocusListener(Side.RIGHT);
component2.addFocusListener(myListener2);
}
else {
myListener1 = null;
myListener2 = null;
}
}
@NotNull
public Side getCurrentSide() {
return myCurrentSide;
}
public void setCurrentSide(@NotNull Side side) {
if (myDumbMode) return;
myCurrentSide = side;
}
public void processContextHints(@NotNull DiffRequest request, @NotNull DiffContext context) {
Side side = context.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE);
if (side != null) setCurrentSide(side);
}
public void updateContextHints(@NotNull DiffRequest request, @NotNull DiffContext context) {
if (myDumbMode) return;
context.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE, myCurrentSide);
}
private class MyFocusListener extends FocusAdapter {
@NotNull private final Side mySide;
private MyFocusListener(@NotNull Side side) {
mySide = side;
}
public void focusGained(FocusEvent e) {
myCurrentSide = mySide;
}
}
}
public static class ThreesideFocusTrackerSupport {
@NotNull private ThreeSide myCurrentSide;
private final boolean myDumbMode;
@Nullable private final MyFocusListener myListener1;
@Nullable private final MyFocusListener myListener2;
@Nullable private final MyFocusListener myListener3;
public ThreesideFocusTrackerSupport(@NotNull List<? extends Editor> editors) {
this(editors.get(0), editors.get(1), editors.get(2));
}
public ThreesideFocusTrackerSupport(@Nullable Editor editor1, @Nullable Editor editor2, @Nullable Editor editor3) {
this(getComponent(editor1), getComponent(editor2), getComponent(editor3));
}
public ThreesideFocusTrackerSupport(@Nullable FileEditor editor1, @Nullable FileEditor editor2, @Nullable FileEditor editor3) {
this(getComponent(editor1), getComponent(editor2), getComponent(editor3));
}
public ThreesideFocusTrackerSupport(@Nullable JComponent component1, @Nullable JComponent component2, @Nullable JComponent component3) {
assert component1 != null || component2 != null || component3 != null;
myCurrentSide = component2 != null ? ThreeSide.BASE : component1 != null ? ThreeSide.LEFT : ThreeSide.RIGHT;
boolean c1 = component1 != null;
boolean c2 = component2 != null;
boolean c3 = component3 != null;
myDumbMode = (!c1 && !c2) || (!c1 && !c3) || (!c2 && !c3); // only one not-null element
if (!myDumbMode) {
myListener1 = component1 != null ? new MyFocusListener(ThreeSide.LEFT) : null;
if (component1 != null) component1.addFocusListener(myListener1);
myListener2 = component2 != null ? new MyFocusListener(ThreeSide.BASE) : null;
if (component2 != null) component2.addFocusListener(myListener2);
myListener3 = component3 != null ? new MyFocusListener(ThreeSide.RIGHT) : null;
if (component3 != null) component3.addFocusListener(myListener3);
}
else {
myListener1 = null;
myListener2 = null;
myListener3 = null;
}
}
@NotNull
public ThreeSide getCurrentSide() {
return myCurrentSide;
}
public void setCurrentSide(@NotNull ThreeSide side) {
if (myDumbMode || side.select(myListener1, myListener2, myListener3) == null) return;
myCurrentSide = side;
}
public void processContextHints(@NotNull DiffRequest request, @NotNull DiffContext context) {
ThreeSide side = context.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_THREESIDE);
if (side != null) setCurrentSide(side);
}
public void updateContextHints(@NotNull DiffRequest request, @NotNull DiffContext context) {
if (myDumbMode) return;
context.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_THREESIDE, myCurrentSide);
}
private class MyFocusListener extends FocusAdapter {
@NotNull private final ThreeSide mySide;
private MyFocusListener(@NotNull ThreeSide side) {
mySide = side;
}
public void focusGained(FocusEvent e) {
myCurrentSide = mySide;
}
}
}
@Nullable
private static JComponent getComponent(@Nullable Editor editor) {
return editor != null ? editor.getContentComponent() : null;
}
@Nullable
private static JComponent getComponent(@Nullable FileEditor editor) {
return editor != null ? editor.getComponent() : null;
}
}
@@ -24,12 +24,12 @@ import com.intellij.diff.requests.ContentDiffRequest;
import com.intellij.diff.requests.DiffRequest;
import com.intellij.diff.requests.SimpleDiffRequest;
import com.intellij.diff.tools.util.DiffDataKeys;
import com.intellij.diff.tools.util.FocusTrackerSupport.ThreesideFocusTrackerSupport;
import com.intellij.diff.tools.util.SimpleDiffPanel;
import com.intellij.diff.tools.util.SyncScrollSupport;
import com.intellij.diff.tools.util.SyncScrollSupport.ThreesideSyncScrollSupport;
import com.intellij.diff.tools.util.base.InitialScrollPositionSupport;
import com.intellij.diff.tools.util.base.TextDiffViewerBase;
import com.intellij.diff.util.DiffUserDataKeys;
import com.intellij.diff.util.DiffUtil;
import com.intellij.diff.util.Side;
import com.intellij.diff.util.ThreeSide;
@@ -55,8 +55,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.util.ArrayList;
import java.util.List;
@@ -72,18 +70,14 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
@NotNull protected final List<DocumentContent> myActualContents;
@NotNull private final List<MyEditorFocusListener> myEditorFocusListeners =
ContainerUtil.newArrayList(new MyEditorFocusListener(ThreeSide.LEFT),
new MyEditorFocusListener(ThreeSide.BASE),
new MyEditorFocusListener(ThreeSide.RIGHT));
@NotNull private final MyVisibleAreaListener myVisibleAreaListener1 = new MyVisibleAreaListener(Side.LEFT);
@NotNull private final MyVisibleAreaListener myVisibleAreaListener2 = new MyVisibleAreaListener(Side.RIGHT);
@NotNull protected final MySetEditorSettingsAction myEditorSettingsAction;
@Nullable private ThreesideSyncScrollSupport mySyncScrollListener;
@NotNull private final ThreesideFocusTrackerSupport myFocusTrackerSupport;
@NotNull private ThreeSide myCurrentSide;
@Nullable private ThreesideSyncScrollSupport mySyncScrollListener;
public ThreesideTextDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) {
super(context, request);
@@ -97,8 +91,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
myEditors = createEditors();
List<JComponent> titlePanel = DiffUtil.createTextTitles(myRequest, myEditors);
myCurrentSide = ThreeSide.BASE;
myFocusTrackerSupport = new ThreesideFocusTrackerSupport(myEditors);
myContentPanel = new ThreesideTextContentPanel(myEditors, titlePanel);
myPanel = new SimpleDiffPanel(myContentPanel, this, context);
@@ -121,15 +114,14 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
@CalledInAwt
protected void processContextHints() {
super.processContextHints();
ThreeSide side = myContext.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_THREESIDE);
if (side != null) myCurrentSide = side;
myFocusTrackerSupport.processContextHints(myRequest, myContext);
}
@Override
@CalledInAwt
protected void updateContextHints() {
super.updateContextHints();
myContext.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_THREESIDE, myCurrentSide);
myFocusTrackerSupport.updateContextHints(myRequest, myContext);
}
@NotNull
@@ -168,9 +160,6 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
@Override
protected void installEditorListeners() {
super.installEditorListeners();
for (int i = 0; i < 3; i++) {
myEditors.get(i).getContentComponent().addFocusListener(myEditorFocusListeners.get(i));
}
myEditors.get(0).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener1);
myEditors.get(1).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener1);
@@ -190,10 +179,6 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
public void destroyEditorListeners() {
super.destroyEditorListeners();
for (int i = 0; i < 3; i++) {
myEditors.get(i).getContentComponent().removeFocusListener(myEditorFocusListeners.get(i));
}
myEditors.get(0).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener1);
myEditors.get(1).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener1);
@@ -238,12 +223,12 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
@NotNull
public EditorEx getCurrentEditor() {
return myCurrentSide.select(myEditors);
return getCurrentSide().select(myEditors);
}
@NotNull
public DocumentContent getCurrentContent() {
return myCurrentSide.select(myActualContents);
return getCurrentSide().select(myActualContents);
}
@NotNull
@@ -254,7 +239,11 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
@NotNull
public ThreeSide getCurrentSide() {
return myCurrentSide;
return myFocusTrackerSupport.getCurrentSide();
}
public void setCurrentSide(@NotNull ThreeSide side) {
myFocusTrackerSupport.setCurrentSide(side);
}
//
@@ -265,7 +254,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
protected void scrollToLine(@NotNull ThreeSide side, int line) {
Editor editor = side.select(myEditors);
DiffUtil.scrollEditor(editor, line, false);
myCurrentSide = side;
setCurrentSide(side);
}
@Nullable
@@ -365,26 +354,14 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase {
return getCurrentEditor();
}
else if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) {
return DiffUtil.getVirtualFile(myRequest, myCurrentSide);
return DiffUtil.getVirtualFile(myRequest, getCurrentSide());
}
else if (DiffDataKeys.CURRENT_CONTENT.is(dataId)) {
return getCurrentContent();
}
return super.getData(dataId);
}
private class MyEditorFocusListener extends FocusAdapter {
@NotNull private final ThreeSide mySide;
private MyEditorFocusListener(@NotNull ThreeSide side) {
mySide = side;
}
public void focusGained(FocusEvent e) {
myCurrentSide = mySide;
}
}
private class MyVisibleAreaListener implements VisibleAreaListener {
@NotNull Side mySide;
@@ -24,12 +24,12 @@ import com.intellij.diff.contents.EmptyContent;
import com.intellij.diff.requests.ContentDiffRequest;
import com.intellij.diff.requests.DiffRequest;
import com.intellij.diff.tools.util.DiffDataKeys;
import com.intellij.diff.tools.util.FocusTrackerSupport.TwosideFocusTrackerSupport;
import com.intellij.diff.tools.util.SimpleDiffPanel;
import com.intellij.diff.tools.util.SyncScrollSupport;
import com.intellij.diff.tools.util.SyncScrollSupport.TwosideSyncScrollSupport;
import com.intellij.diff.tools.util.base.InitialScrollPositionSupport;
import com.intellij.diff.tools.util.base.TextDiffViewerBase;
import com.intellij.diff.util.DiffUserDataKeys;
import com.intellij.diff.util.DiffUtil;
import com.intellij.diff.util.Side;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -52,8 +52,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.util.Collections;
import java.util.List;
@@ -73,13 +71,11 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
@NotNull protected final MySetEditorSettingsAction myEditorSettingsAction;
@NotNull private final MyEditorFocusListener myEditorFocusListener1 = new MyEditorFocusListener(Side.LEFT);
@NotNull private final MyEditorFocusListener myEditorFocusListener2 = new MyEditorFocusListener(Side.RIGHT);
@NotNull private final MyVisibleAreaListener myVisibleAreaListener = new MyVisibleAreaListener();
@Nullable protected TwosideSyncScrollSupport mySyncScrollSupport;
@NotNull private final TwosideFocusTrackerSupport myFocusTrackerSupport;
@NotNull private Side myCurrentSide;
@Nullable protected TwosideSyncScrollSupport mySyncScrollSupport;
public TwosideTextDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) {
super(context, request);
@@ -97,8 +93,7 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
myEditor2 = editors.get(1);
assert myEditor1 != null || myEditor2 != null;
myCurrentSide = myEditor1 == null ? Side.RIGHT : Side.LEFT;
myFocusTrackerSupport = new TwosideFocusTrackerSupport(myEditor1, myEditor2);
myContentPanel = new TwosideTextContentPanel(titlePanel, myEditor1, myEditor2);
myPanel = new SimpleDiffPanel(myContentPanel, this, context);
@@ -124,25 +119,14 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
@CalledInAwt
protected void processContextHints() {
super.processContextHints();
if (myEditor1 == null) {
myCurrentSide = Side.RIGHT;
}
else if (myEditor2 == null) {
myCurrentSide = Side.LEFT;
}
else {
Side side = myContext.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE);
if (side != null) myCurrentSide = side;
}
myFocusTrackerSupport.processContextHints(myRequest, myContext);
}
@Override
@CalledInAwt
protected void updateContextHints() {
super.updateContextHints();
if (myEditor1 != null && myEditor2 != null) {
myContext.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE, myCurrentSide);
}
myFocusTrackerSupport.updateContextHints(myRequest, myContext);
}
@NotNull
@@ -195,11 +179,9 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
protected void installEditorListeners() {
super.installEditorListeners();
if (myEditor1 != null) {
myEditor1.getContentComponent().addFocusListener(myEditorFocusListener1);
myEditor1.getScrollingModel().addVisibleAreaListener(myVisibleAreaListener);
}
if (myEditor2 != null) {
myEditor2.getContentComponent().addFocusListener(myEditorFocusListener2);
myEditor2.getScrollingModel().addVisibleAreaListener(myVisibleAreaListener);
}
if (myEditor1 != null && myEditor2 != null) {
@@ -215,11 +197,9 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
protected void destroyEditorListeners() {
super.destroyEditorListeners();
if (myEditor1 != null) {
myEditor1.getContentComponent().removeFocusListener(myEditorFocusListener1);
myEditor1.getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener);
}
if (myEditor2 != null) {
myEditor2.getContentComponent().removeFocusListener(myEditorFocusListener2);
myEditor2.getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener);
}
mySyncScrollSupport = null;
@@ -264,7 +244,11 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
@NotNull
public Side getCurrentSide() {
return myCurrentSide;
return myFocusTrackerSupport.getCurrentSide();
}
public void setCurrentSide(@NotNull Side side) {
myFocusTrackerSupport.setCurrentSide(side);
}
@NotNull
@@ -306,7 +290,7 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
Editor editor = side.select(myEditor1, myEditor2);
if (editor == null) return;
DiffUtil.scrollEditor(editor, line, false);
myCurrentSide = side;
setCurrentSide(side);
}
@Nullable
@@ -365,13 +349,13 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
if (myEditor1 == null || myEditor2 == null) return;
if (myScrollToPosition) {
EditorEx currentEditor = myCurrentSide.select(myEditor1, myEditor2);
EditorEx targetEditor = myCurrentSide.other().select(myEditor1, myEditor2);
LogicalPosition position = transferPosition(myCurrentSide, currentEditor.getCaretModel().getLogicalPosition());
EditorEx currentEditor = getCurrentSide().select(myEditor1, myEditor2);
EditorEx targetEditor = getCurrentSide().other().select(myEditor1, myEditor2);
LogicalPosition position = transferPosition(getCurrentSide(), currentEditor.getCaretModel().getLogicalPosition());
targetEditor.getCaretModel().moveToLogicalPosition(position);
}
myCurrentSide = myCurrentSide.other();
setCurrentSide(getCurrentSide().other());
myPanel.requestFocus();
getCurrentEditor().getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
}
@@ -406,25 +390,12 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase {
return getCurrentContent();
}
else if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) {
return DiffUtil.getVirtualFile(myRequest, myCurrentSide);
return DiffUtil.getVirtualFile(myRequest, getCurrentSide());
}
return super.getData(dataId);
}
private class MyEditorFocusListener extends FocusAdapter {
@NotNull private final Side mySide;
private MyEditorFocusListener(@NotNull Side side) {
mySide = side;
}
public void focusGained(FocusEvent e) {
if (myEditor1 == null || myEditor2 == null) return;
myCurrentSide = mySide;
}
}
private class MyVisibleAreaListener implements VisibleAreaListener {
@Override
public void visibleAreaChanged(VisibleAreaEvent e) {