merge: limit bottom actions to the four default ones
authorAleksey Pivovarov <AMPivovarov@gmail.com>
Mon, 10 Aug 2015 17:31:20 +0000 (20:31 +0300)
committerAleksey Pivovarov <AMPivovarov@gmail.com>
Wed, 12 Aug 2015 16:55:45 +0000 (19:55 +0300)
simplify possible future changes in layout

platform/diff-api/src/com/intellij/diff/merge/MergeTool.java
platform/diff-impl/src/com/intellij/diff/merge/BinaryMergeTool.java
platform/diff-impl/src/com/intellij/diff/merge/ErrorMergeTool.java
platform/diff-impl/src/com/intellij/diff/merge/MergeRequestProcessor.java
platform/diff-impl/src/com/intellij/diff/merge/MergeUtil.java
platform/diff-impl/src/com/intellij/diff/merge/MergeWindow.java
platform/diff-impl/src/com/intellij/diff/merge/TextMergeTool.java

index e105ee70627234b1c9ecd828970c90e26d80586a..fbff78dac1e09a37682d4f669e7e4a0efbe02012 100644 (file)
@@ -47,8 +47,8 @@ public interface MergeTool {
     @Nullable
     JComponent getPreferredFocusedComponent();
 
-    @NotNull
-    BottomActions getBottomActions();
+    @Nullable
+    Action getResolveAction(@NotNull MergeResult result);
 
     @CalledInAwt
     ToolbarComponents init();
@@ -63,16 +63,4 @@ public interface MergeTool {
     @Nullable public JComponent statusPanel;
     @Nullable public BooleanGetter closeHandler; // return false if there are unsaved changes
   }
-
-  class BottomActions {
-    @Nullable public Action leftAction1; // apply left
-    @Nullable public Action leftAction2; // apply right
-    @Nullable public Action leftAction3;
-    @Nullable public Action leftAction4;
-
-    @Nullable public Action rightAction4;
-    @Nullable public Action rightAction3;
-    @Nullable public Action resolveAction;
-    @Nullable public Action cancelAction;
-  }
 }
index e254ed9c56282501b3f15957ccdc6e0f99b9f362..fa330774629401b8732fffd944f3456a3429f51d 100644 (file)
@@ -30,6 +30,7 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
+import java.awt.event.ActionEvent;
 import java.util.List;
 
 public class BinaryMergeTool implements MergeTool {
@@ -112,20 +113,18 @@ public class BinaryMergeTool implements MergeTool {
       return components;
     }
 
-    @NotNull
+    @Nullable
     @Override
-    public BottomActions getBottomActions() {
-      return MergeUtil.createBottomAction(new MergeUtil.AcceptActionProcessor() {
-        @Override
-        public boolean isVisible(@NotNull MergeResult result) {
-          return result != MergeResult.RESOLVED;
-        }
+    public Action getResolveAction(@NotNull final MergeResult result) {
+      if (result == MergeResult.RESOLVED) return null;
 
+      String caption = MergeUtil.getResolveActionTitle(result, myMergeRequest, myMergeContext);
+      return new AbstractAction(caption) {
         @Override
-        public void perform(@NotNull MergeResult result) {
+        public void actionPerformed(ActionEvent e) {
           myMergeContext.finishMerge(result);
         }
-      });
+      };
     }
 
     @Override
index 7ce439dfb27bb0db26b97fcb553df63fe0344077..a86967062f168f06014ae3f43ac66b4a76b9b1fd 100644 (file)
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 import java.awt.*;
+import java.awt.event.ActionEvent;
 
 public class ErrorMergeTool implements MergeTool {
   public static final ErrorMergeTool INSTANCE = new ErrorMergeTool();
@@ -73,20 +74,18 @@ public class ErrorMergeTool implements MergeTool {
       return new ToolbarComponents();
     }
 
-    @NotNull
+    @Nullable
     @Override
-    public BottomActions getBottomActions() {
-      return MergeUtil.createBottomAction(new MergeUtil.AcceptActionProcessor() {
-        @Override
-        public boolean isVisible(@NotNull MergeResult result) {
-          return result == MergeResult.CANCEL;
-        }
+    public Action getResolveAction(@NotNull final MergeResult result) {
+      if (result != MergeResult.CANCEL) return null;
 
+      String caption = MergeUtil.getResolveActionTitle(result, myMergeRequest, myMergeContext);
+      return new AbstractAction(caption) {
         @Override
-        public void perform(@NotNull MergeResult result) {
+        public void actionPerformed(ActionEvent e) {
           myMergeContext.finishMerge(result);
         }
-      });
+      };
     }
 
     @Override
index 528fc3b5c023d59fc5ae5eda3c3c5d058890c7b4..ee2930526e256e51c6207b488efadd1d1bcba02a 100644 (file)
@@ -130,8 +130,13 @@ public abstract class MergeRequestProcessor implements Disposable {
   }
 
   @NotNull
-  public MergeTool.BottomActions getBottomActions() {
-    return myViewer.getBottomActions();
+  public BottomActions getBottomActions() {
+    BottomActions actions = new BottomActions();
+    actions.applyLeft = myViewer.getResolveAction(MergeResult.LEFT);
+    actions.applyRight = myViewer.getResolveAction(MergeResult.RIGHT);
+    actions.resolveAction = myViewer.getResolveAction(MergeResult.RESOLVED);
+    actions.cancelAction = myViewer.getResolveAction(MergeResult.CANCEL);
+    return actions;
   }
 
   @NotNull
@@ -432,4 +437,11 @@ public abstract class MergeRequestProcessor implements Disposable {
       MergeRequestProcessor.this.closeDialog();
     }
   }
+
+  public static class BottomActions {
+    @Nullable public Action applyLeft;
+    @Nullable public Action applyRight;
+    @Nullable public Action resolveAction;
+    @Nullable public Action cancelAction;
+  }
 }
index 6a2336dbacba459b22d7b6fa031c1b65d90f268c..36b5e6d480733071cd743cb8a36035d33675b4db 100644 (file)
@@ -24,48 +24,11 @@ import com.intellij.util.containers.ContainerUtil;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-import javax.swing.*;
-import java.awt.event.ActionEvent;
 import java.util.List;
 
 public class MergeUtil {
   @NotNull
-  public static MergeTool.BottomActions createBottomAction(@NotNull AcceptActionProcessor processor) {
-    MergeTool.BottomActions actions = new MergeTool.BottomActions();
-    actions.leftAction1 = SimpleAcceptAction.create(MergeResult.LEFT, processor);
-    actions.leftAction2 = SimpleAcceptAction.create(MergeResult.RIGHT, processor);
-    actions.resolveAction = SimpleAcceptAction.create(MergeResult.RESOLVED, processor);
-    actions.cancelAction = SimpleAcceptAction.create(MergeResult.CANCEL, processor);
-    return actions;
-  }
-
-  private static class SimpleAcceptAction extends AbstractAction {
-    @NotNull private final MergeResult myResult;
-    @NotNull private final AcceptActionProcessor myProcessor;
-
-    public SimpleAcceptAction(@NotNull MergeResult result, @NotNull AcceptActionProcessor processor) {
-      super(getAcceptActionTitle(result));
-      myResult = result;
-      myProcessor = processor;
-    }
-
-    @Override
-    public boolean isEnabled() {
-      return myProcessor.isEnabled(myResult);
-    }
-
-    @Override
-    public void actionPerformed(ActionEvent e) {
-      myProcessor.perform(myResult);
-    }
-
-    public static SimpleAcceptAction create(@NotNull MergeResult result, @NotNull AcceptActionProcessor acceptActionProcessor) {
-      return acceptActionProcessor.isVisible(result) ? new SimpleAcceptAction(result, acceptActionProcessor) : null;
-    }
-  }
-
-  @NotNull
-  public static String getAcceptActionTitle(@NotNull MergeResult result) {
+  public static String getResolveActionTitle(@NotNull MergeResult result, @NotNull MergeRequest request, @NotNull MergeContext context) {
     switch (result) {
       case CANCEL:
         return "Abort";
@@ -127,14 +90,4 @@ public class MergeUtil {
       myMergeContext.putUserData(key, value);
     }
   }
-
-  public static abstract class AcceptActionProcessor {
-    public boolean isEnabled(@NotNull MergeResult result) {
-      return true;
-    }
-
-    public abstract boolean isVisible(@NotNull MergeResult result);
-
-    public abstract void perform(@NotNull MergeResult result);
-  }
 }
index c7cfb8a0788eca1edc2ff4a5131eee0cdf92cdf0..7566317fde63f7b4fedbb6b0f3604c06ae528ca6 100644 (file)
@@ -67,7 +67,7 @@ public class MergeWindow {
   // TODO: use WindowWrapper
   private static class MyDialog extends DialogWrapper {
     @NotNull private final MergeRequestProcessor myProcessor;
-    @NotNull private final MergeTool.BottomActions myBottomActions;
+    @NotNull private final MergeRequestProcessor.BottomActions myBottomActions;
 
     public MyDialog(@NotNull MergeRequestProcessor processor) {
       super(processor.getProject(), true);
@@ -108,8 +108,7 @@ public class MergeWindow {
     @NotNull
     @Override
     protected Action[] createActions() {
-      List<Action> actions = ContainerUtil.skipNulls(ContainerUtil.list(myBottomActions.rightAction4, myBottomActions.rightAction3,
-                                                                        myBottomActions.resolveAction, myBottomActions.cancelAction));
+      List<Action> actions = ContainerUtil.skipNulls(ContainerUtil.list(myBottomActions.resolveAction, myBottomActions.cancelAction));
       if (myBottomActions.resolveAction != null) {
         myBottomActions.resolveAction.putValue(DialogWrapper.DEFAULT_ACTION, true);
       }
@@ -119,8 +118,7 @@ public class MergeWindow {
     @NotNull
     @Override
     protected Action[] createLeftSideActions() {
-      List<Action> actions = ContainerUtil.skipNulls(ContainerUtil.list(myBottomActions.leftAction1, myBottomActions.leftAction2,
-                                                                        myBottomActions.leftAction3, myBottomActions.leftAction4));
+      List<Action> actions = ContainerUtil.skipNulls(ContainerUtil.list(myBottomActions.applyLeft, myBottomActions.applyRight));
       return actions.toArray(new Action[actions.size()]);
     }
 
index c165c1cb9fa32e8f2c29095f2ae5360f60ceb07e..0cf52ee6c7dbebbb924fda4cab52f0f350915959 100644 (file)
@@ -75,6 +75,7 @@ import javax.swing.*;
 import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkListener;
 import java.awt.*;
+import java.awt.event.ActionEvent;
 import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.List;
@@ -170,10 +171,10 @@ public class TextMergeTool implements MergeTool {
       return components;
     }
 
-    @NotNull
+    @Nullable
     @Override
-    public BottomActions getBottomActions() {
-      return MergeUtil.createBottomAction(myViewer.createActionProcessor());
+    public Action getResolveAction(@NotNull MergeResult result) {
+      return myViewer.getResolveAction(result);
     }
 
     @Override
@@ -282,16 +283,12 @@ public class TextMergeTool implements MergeTool {
         return group;
       }
 
-      @NotNull
-      private MergeUtil.AcceptActionProcessor createActionProcessor() {
-        return new MergeUtil.AcceptActionProcessor() {
-          @Override
-          public boolean isVisible(@NotNull MergeResult result) {
-            return true;
-          }
-
+      @Nullable
+      public Action getResolveAction(@NotNull final MergeResult result) {
+        String caption = MergeUtil.getResolveActionTitle(result, myMergeRequest, myMergeContext);
+        return new AbstractAction(caption) {
           @Override
-          public void perform(@NotNull MergeResult result) {
+          public void actionPerformed(ActionEvent e) {
             if (result == MergeResult.RESOLVED) {
               if ((getChangesCount() != 0 || getConflictsCount() != 0) &&
                   Messages.showYesNoDialog(myPanel.getRootPane(),