diff: remove code duplication
[idea/community.git] / platform / platform-impl / src / com / intellij / openapi / diff / actions / HighlightModeAction.java
index 8ae6fa277738ccc0be7246949c3f2d6994c66759..65f5eb346120b9dcb8d11ff6beb4c6ba5146f77b 100644 (file)
  */
 package com.intellij.openapi.diff.actions;
 
  */
 package com.intellij.openapi.diff.actions;
 
-import com.intellij.openapi.actionSystem.AnAction;
-import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.openapi.actionSystem.DefaultActionGroup;
-import com.intellij.openapi.actionSystem.Presentation;
-import com.intellij.openapi.actionSystem.ex.ComboBoxAction;
 import com.intellij.openapi.diff.DiffBundle;
 import com.intellij.openapi.diff.ex.DiffPanelEx;
 import com.intellij.openapi.diff.DiffBundle;
 import com.intellij.openapi.diff.ex.DiffPanelEx;
-import com.intellij.openapi.diff.impl.DiffPanelImpl;
 import com.intellij.openapi.diff.impl.processing.HighlightMode;
 import com.intellij.openapi.diff.impl.processing.HighlightMode;
-import com.intellij.openapi.project.DumbAware;
-import com.intellij.openapi.project.DumbAwareAction;
-import com.intellij.util.containers.HashMap;
 import org.jetbrains.annotations.NotNull;
 
 import org.jetbrains.annotations.NotNull;
 
-import javax.swing.*;
-import java.awt.*;
-import java.util.Map;
-
-public class HighlightModeAction extends ComboBoxAction implements DumbAware {
-  private final Map<HighlightMode, AnAction> myActions = new HashMap<HighlightMode, AnAction>();
-  private static final HighlightMode[] ourActionOrder =
-    new HighlightMode[]{HighlightMode.BY_WORD, HighlightMode.BY_LINE, HighlightMode.NO_HIGHLIGHTING};
+public class HighlightModeAction extends DiffPanelComboBoxAction<HighlightMode> {
+  private static final HighlightMode[] ourActionOrder = new HighlightMode[]{
+    HighlightMode.BY_WORD,
+    HighlightMode.BY_LINE,
+    HighlightMode.NO_HIGHLIGHTING
+  };
 
   public HighlightModeAction() {
 
   public HighlightModeAction() {
-    myActions.put(HighlightMode.BY_WORD,
-                  new SetHighlightModeAction(DiffBundle.message("diff.acton.highlight.mode.action.by.word"), HighlightMode.BY_WORD));
-    myActions.put(HighlightMode.BY_LINE,
-                  new SetHighlightModeAction(DiffBundle.message("diff.acton.highlight.mode.action.by.line"), HighlightMode.BY_LINE));
-    myActions.put(HighlightMode.NO_HIGHLIGHTING,
-                  new SetHighlightModeAction(DiffBundle.message("diff.acton.highlight.mode.action.no.highlighting"),
-                                             HighlightMode.NO_HIGHLIGHTING));
+    super(ourActionOrder);
+    addAction(HighlightMode.BY_WORD, new HighlightingModeAction(DiffBundle.message("diff.acton.highlight.mode.action.by.word"), HighlightMode.BY_WORD));
+    addAction(HighlightMode.BY_LINE, new HighlightingModeAction(DiffBundle.message("diff.acton.highlight.mode.action.by.line"), HighlightMode.BY_LINE));
+    addAction(HighlightMode.NO_HIGHLIGHTING, new HighlightingModeAction(DiffBundle.message("diff.acton.highlight.mode.action.no.highlighting"), HighlightMode.NO_HIGHLIGHTING));
   }
 
   }
 
+  @NotNull
   @Override
   @Override
-  public JComponent createCustomComponent(final Presentation presentation) {
-    JPanel panel = new JPanel(new BorderLayout());
-    final JLabel label = new JLabel(DiffBundle.message("diff.acton.highlight.mode.action.name"));
-    label.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4));
-    panel.add(label, BorderLayout.WEST);
-    panel.add(super.createCustomComponent(presentation), BorderLayout.CENTER);
-    return panel;
+  protected String getActionName() {
+    return DiffBundle.message("diff.acton.highlight.mode.action.name");
   }
 
   @NotNull
   }
 
   @NotNull
-  protected DefaultActionGroup createPopupActionGroup(JComponent button) {
-    DefaultActionGroup actionGroup = new DefaultActionGroup();
-    for (HighlightMode comparisonPolicy : ourActionOrder) {
-      actionGroup.add(myActions.get(comparisonPolicy));
-    }
-    return actionGroup;
-  }
-
-  public void update(AnActionEvent e) {
-    super.update(e);
-    Presentation presentation = e.getPresentation();
-    DiffPanelEx diffPanel = DiffPanelImpl.fromDataContext(e.getDataContext());
-    if (diffPanel != null && diffPanel.getComponent().isDisplayable()) {
-      AnAction action = myActions.get(diffPanel.getHighlightMode());
-      Presentation templatePresentation = action.getTemplatePresentation();
-      presentation.setIcon(templatePresentation.getIcon());
-      presentation.setText(templatePresentation.getText());
-      presentation.setEnabled(true);
-    }
-    else {
-      presentation.setIcon(null);
-      presentation.setText(DiffBundle.message("diff.acton.highlight.mode.not.available.action.name"));
-      presentation.setEnabled(false);
-    }
+  @Override
+  protected HighlightMode getCurrentOption(@NotNull DiffPanelEx diffPanel) {
+    return diffPanel.getHighlightMode();
   }
 
   }
 
-  private static class SetHighlightModeAction extends DumbAwareAction {
+  private static class HighlightingModeAction extends DiffPanelAction {
     private final HighlightMode myHighlightMode;
 
     private final HighlightMode myHighlightMode;
 
-    public SetHighlightModeAction(String text, HighlightMode mode) {
+    public HighlightingModeAction(String text, HighlightMode highlightMode) {
       super(text);
       super(text);
-      myHighlightMode = mode;
+      myHighlightMode = highlightMode;
     }
 
     }
 
-    public void actionPerformed(AnActionEvent e) {
-      final DiffPanelImpl diffPanel = DiffPanelImpl.fromDataContext(e.getDataContext());
-      if (diffPanel != null) {
-        diffPanel.setHighlightMode(myHighlightMode);
-      }
+    @Override
+    protected void perform(@NotNull DiffPanelEx diffPanel) {
+      diffPanel.setHighlightMode(myHighlightMode);
     }
   }
 }
     }
   }
 }