From 5dbe3518bf981c23cd3d5cb8e1885b6ec4f78f19 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 20 Aug 2015 20:01:53 +0300 Subject: [PATCH] diff: allow to pass additional actions via action group --- .../actions/impl/FocusOppositePaneAction.java | 10 ++++++++-- .../com/intellij/diff/merge/TextMergeTool.java | 5 +++-- .../diff/tools/fragmented/UnifiedDiffViewer.java | 8 +++++++- .../diff/tools/simple/SimpleDiffViewer.java | 10 ++++++++-- .../tools/simple/SimpleOnesideDiffViewer.java | 8 +++++++- .../tools/simple/SimpleThreesideDiffViewer.java | 8 +++++++- .../diff/tools/util/base/DiffViewerBase.java | 16 +++++++++------- .../openapi/actionSystem/IdeActions.java | 2 ++ .../src/idea/PlatformActions.xml | 2 ++ 9 files changed, 53 insertions(+), 16 deletions(-) diff --git a/platform/diff-impl/src/com/intellij/diff/actions/impl/FocusOppositePaneAction.java b/platform/diff-impl/src/com/intellij/diff/actions/impl/FocusOppositePaneAction.java index 3415e681255f..982623b5fe0a 100644 --- a/platform/diff-impl/src/com/intellij/diff/actions/impl/FocusOppositePaneAction.java +++ b/platform/diff-impl/src/com/intellij/diff/actions/impl/FocusOppositePaneAction.java @@ -33,6 +33,8 @@ public class FocusOppositePaneAction extends AnAction implements DumbAware { public FocusOppositePaneAction(boolean scrollToPosition) { myScrollToPosition = scrollToPosition; setEnabledInModalContext(true); + + EmptyAction.setupAction(this, getActionId(), null); } @Override @@ -41,7 +43,11 @@ public class FocusOppositePaneAction extends AnAction implements DumbAware { } public void setupAction(@NotNull JComponent component) { - String action = myScrollToPosition ? "Diff.FocusOppositePaneAndScroll" : "Diff.FocusOppositePane"; - EmptyAction.setupAction(this, action, component); + registerCustomShortcutSet(getShortcutSet(), component); + } + + @NotNull + private String getActionId() { + return myScrollToPosition ? "Diff.FocusOppositePaneAndScroll" : "Diff.FocusOppositePane"; } } \ No newline at end of file diff --git a/platform/diff-impl/src/com/intellij/diff/merge/TextMergeTool.java b/platform/diff-impl/src/com/intellij/diff/merge/TextMergeTool.java index a82a03b741c4..0b24f14f1633 100644 --- a/platform/diff-impl/src/com/intellij/diff/merge/TextMergeTool.java +++ b/platform/diff-impl/src/com/intellij/diff/merge/TextMergeTool.java @@ -30,6 +30,7 @@ import com.intellij.diff.requests.SimpleDiffRequest; import com.intellij.diff.tools.simple.ThreesideTextDiffViewerEx; import com.intellij.diff.tools.util.DiffNotifications; import com.intellij.diff.tools.util.KeyboardModifierListener; +import com.intellij.diff.tools.util.base.TextDiffViewerUtil; import com.intellij.diff.util.*; import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.*; @@ -273,9 +274,9 @@ public class TextMergeTool implements MergeTool { group.add(new ApplySelectedChangesAction(Side.RIGHT, false)); group.add(new IgnoreSelectedChangesAction(Side.LEFT, false)); group.add(new IgnoreSelectedChangesAction(Side.RIGHT, false)); - group.add(Separator.getInstance()); - group.addAll(super.createEditorPopupActions()); + group.add(Separator.getInstance()); + group.addAll(TextDiffViewerUtil.createEditorPopupActions()); return group; } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffViewer.java index dae717310766..d54b5158f70f 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/UnifiedDiffViewer.java @@ -191,6 +191,9 @@ public class UnifiedDiffViewer extends ListenerDiffViewerBase { group.add(new MyReadOnlyLockAction()); group.add(myEditorSettingsAction); + group.add(Separator.getInstance()); + group.addAll(super.createToolbarActions()); + return group; } @@ -206,6 +209,9 @@ public class UnifiedDiffViewer extends ListenerDiffViewerBase { group.add(Separator.getInstance()); group.add(new MyToggleExpandByDefaultAction()); + group.add(Separator.getInstance()); + group.addAll(super.createPopupActions()); + return group; } @@ -219,8 +225,8 @@ public class UnifiedDiffViewer extends ListenerDiffViewerBase { group.add(new AppendSelectedChangesAction(Side.RIGHT, false)); group.add(new RevertSelectedChangesAction(Side.LEFT)); group.add(new RevertSelectedChangesAction(Side.RIGHT)); - group.add(Separator.getInstance()); + group.add(Separator.getInstance()); group.addAll(TextDiffViewerUtil.createEditorPopupActions()); return group; diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java index a2d0a598e953..d33009779ff7 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java @@ -115,10 +115,13 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { group.add(new MyReadOnlyLockAction()); group.add(myEditorSettingsAction); + group.add(Separator.getInstance()); + group.addAll(super.createToolbarActions()); + return group; } - @Nullable + @NotNull @Override protected List createPopupActions() { List group = new ArrayList(); @@ -131,6 +134,9 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { group.add(new MyToggleAutoScrollAction()); group.add(new MyToggleExpandByDefaultAction()); + group.add(Separator.getInstance()); + group.addAll(super.createPopupActions()); + return group; } @@ -145,8 +151,8 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { group.add(new AppendSelectedChangesAction(Side.RIGHT, false)); group.add(new RevertSelectedChangesAction(Side.LEFT)); group.add(new RevertSelectedChangesAction(Side.RIGHT)); - group.add(Separator.getInstance()); + group.add(Separator.getInstance()); group.addAll(super.createEditorPopupActions()); return group; diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleOnesideDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleOnesideDiffViewer.java index ad630c48639b..9f76fe97368a 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleOnesideDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleOnesideDiffViewer.java @@ -80,10 +80,13 @@ public class SimpleOnesideDiffViewer extends OnesideTextDiffViewer { group.add(new MyReadOnlyLockAction()); group.add(myEditorSettingsAction); + group.add(Separator.getInstance()); + group.addAll(super.createToolbarActions()); + return group; } - @Nullable + @NotNull @Override protected List createPopupActions() { List group = new ArrayList(); @@ -93,6 +96,9 @@ public class SimpleOnesideDiffViewer extends OnesideTextDiffViewer { group.add(Separator.getInstance()); group.add(new MyHighlightPolicySettingAction().getPopupGroup()); + group.add(Separator.getInstance()); + group.addAll(super.createPopupActions()); + return group; } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java index adc2a32c1489..bf76d6ca144d 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java @@ -78,10 +78,13 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewerEx { group.add(new ShowBaseRightPartialDiffAction()); group.add(new ShowLeftRightPartialDiffAction()); + group.add(Separator.getInstance()); + group.addAll(super.createToolbarActions()); + return group; } - @Nullable + @NotNull @Override protected List createPopupActions() { List group = new ArrayList(); @@ -94,6 +97,9 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewerEx { group.add(new MyToggleAutoScrollAction()); group.add(new MyToggleExpandByDefaultAction()); + group.add(Separator.getInstance()); + group.addAll(super.createPopupActions()); + return group; } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/base/DiffViewerBase.java b/platform/diff-impl/src/com/intellij/diff/tools/util/base/DiffViewerBase.java index 657e0d3a5561..a17deb7f07df 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/base/DiffViewerBase.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/base/DiffViewerBase.java @@ -21,9 +21,7 @@ import com.intellij.diff.FrameDiffTool.DiffViewer; import com.intellij.diff.requests.ContentDiffRequest; import com.intellij.diff.tools.util.DiffDataKeys; import com.intellij.diff.util.DiffTaskQueue; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.DataProvider; +import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileEditor.OpenFileDescriptor; @@ -33,10 +31,12 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.util.Alarm; import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.*; import javax.swing.*; +import java.util.ArrayList; import java.util.List; public abstract class DiffViewerBase implements DiffViewer, DataProvider { @@ -186,14 +186,16 @@ public abstract class DiffViewerBase implements DiffViewer, DataProvider { return myContext.isWindowFocused(); } - @Nullable protected List createToolbarActions() { - return null; + List group = new ArrayList(); + ContainerUtil.addAll(group, ((ActionGroup)ActionManager.getInstance().getAction(IdeActions.DIFF_VIEWER_TOOLBAR)).getChildren(null)); + return group; } - @Nullable protected List createPopupActions() { - return null; + List group = new ArrayList(); + ContainerUtil.addAll(group, ((ActionGroup)ActionManager.getInstance().getAction(IdeActions.DIFF_VIEWER_POPUP)).getChildren(null)); + return group; } @Nullable diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java index 07ba96c59abc..7f2c50e9e5ce 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/IdeActions.java @@ -167,6 +167,8 @@ public interface IdeActions { @NonNls String ACTION_PREVIOUS_DIFF = "PreviousDiff"; @NonNls String ACTION_NEXT_DIFF = "NextDiff"; @NonNls String GROUP_DIFF_EDITOR_POPUP = "Diff.EditorPopupMenu"; + @NonNls String DIFF_VIEWER_POPUP = "Diff.ViewerPopupMenu"; + @NonNls String DIFF_VIEWER_TOOLBAR = "Diff.ViewerToolbar"; @NonNls String ACTION_EXPAND_ALL = "ExpandAll"; @NonNls String ACTION_COLLAPSE_ALL = "CollapseAll"; diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml index a37ba12507c0..0ba0116e1aa7 100644 --- a/platform/platform-resources/src/idea/PlatformActions.xml +++ b/platform/platform-resources/src/idea/PlatformActions.xml @@ -191,6 +191,8 @@ + +