--- /dev/null
+package com.intellij.openapi.diff.actions;
+
+import com.intellij.openapi.actionSystem.*;
+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.impl.DiffPanelImpl;
+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.Nullable;
+
+import javax.swing.*;
+import java.awt.*;
+import java.util.Map;
+
+public abstract class DiffPanelComboBoxAction<T> extends ComboBoxAction implements DumbAware {
+ @NotNull private final Map<T, AnAction> myActions = new HashMap<T, AnAction>();
+ @NotNull private final T[] myActionOrder;
+
+ protected DiffPanelComboBoxAction(@NotNull T[] actionOrder) {
+ myActionOrder = actionOrder;
+ }
+
+ @NotNull
+ protected abstract String getActionName();
+
+ @NotNull
+ protected abstract T getCurrentOption(@NotNull DiffPanelEx diffPanel);
+
+ @Nullable
+ private static DiffPanelEx getDiffPanel(@NotNull DataContext context) {
+ return DiffPanelImpl.fromDataContext(context);
+ }
+
+ protected void addAction(T key, @NotNull AnAction action) {
+ myActions.put(key, action);
+ }
+
+ @Override
+ public JComponent createCustomComponent(final Presentation presentation) {
+ JPanel panel = new JPanel(new BorderLayout());
+ final JLabel label = new JLabel(getActionName());
+ label.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4));
+ panel.add(label, BorderLayout.WEST);
+ panel.add(super.createCustomComponent(presentation), BorderLayout.CENTER);
+ return panel;
+ }
+
+ @NotNull
+ @Override
+ protected DefaultActionGroup createPopupActionGroup(JComponent button) {
+ DefaultActionGroup actionGroup = new DefaultActionGroup();
+ for (T option : myActionOrder) {
+ actionGroup.add(myActions.get(option));
+ }
+ return actionGroup;
+ }
+
+ @Override
+ public void update(AnActionEvent e) {
+ super.update(e);
+ Presentation presentation = e.getPresentation();
+ DiffPanelEx diffPanel = getDiffPanel(e.getDataContext());
+ if (diffPanel != null && diffPanel.getComponent().isDisplayable()) {
+ AnAction action = myActions.get(getCurrentOption(diffPanel));
+ Presentation templatePresentation = action.getTemplatePresentation();
+ presentation.setIcon(templatePresentation.getIcon());
+ presentation.setText(templatePresentation.getText());
+ presentation.setEnabled(true);
+ }
+ else {
+ presentation.setIcon(null);
+ presentation.setText(DiffBundle.message("diff.panel.combo.box.action.not.available.action.name"));
+ presentation.setEnabled(false);
+ }
+ }
+
+ protected static abstract class DiffPanelAction extends DumbAwareAction {
+ public DiffPanelAction(@NotNull String text) {
+ super(text);
+ }
+
+ public void actionPerformed(AnActionEvent e) {
+ final DiffPanelEx diffPanel = getDiffPanel(e.getDataContext());
+ if (diffPanel != null) {
+ perform(diffPanel);
+ }
+ }
+
+ protected abstract void perform(@NotNull DiffPanelEx diffPanel);
+ }
+}
*/
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.impl.DiffPanelImpl;
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 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() {
- 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
- 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
- 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;
- public SetHighlightModeAction(String text, HighlightMode mode) {
+ public HighlightingModeAction(String text, HighlightMode highlightMode) {
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);
}
}
}
*/
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.impl.ComparisonPolicy;
-import com.intellij.openapi.diff.impl.DiffPanelImpl;
-import com.intellij.openapi.project.DumbAware;
-import com.intellij.openapi.project.DumbAwareAction;
-import com.intellij.util.containers.HashMap;
import org.jetbrains.annotations.NotNull;
-import javax.swing.*;
-import java.awt.*;
-import java.util.Map;
-
-public class IgnoreWhiteSpacesAction extends ComboBoxAction implements DumbAware {
- private final Map<ComparisonPolicy, AnAction> myActions = new HashMap<ComparisonPolicy, AnAction>();
+public class IgnoreWhiteSpacesAction extends DiffPanelComboBoxAction<ComparisonPolicy> {
private static final ComparisonPolicy[] ourActionOrder = new ComparisonPolicy[]{
ComparisonPolicy.DEFAULT,
ComparisonPolicy.TRIM_SPACE,
- ComparisonPolicy.IGNORE_SPACE};
+ ComparisonPolicy.IGNORE_SPACE
+ };
public IgnoreWhiteSpacesAction() {
- myActions.put(ComparisonPolicy.DEFAULT, new IgnoringPolicyAction(DiffBundle.message("diff.acton.ignore.whitespace.policy.do.not.ignore"), ComparisonPolicy.DEFAULT));
- myActions.put(ComparisonPolicy.TRIM_SPACE, new IgnoringPolicyAction(DiffBundle.message("diff.acton.ignore.whitespace.policy.leading.and.trailing"), ComparisonPolicy.TRIM_SPACE));
- myActions.put(ComparisonPolicy.IGNORE_SPACE, new IgnoringPolicyAction(DiffBundle.message("diff.acton.ignore.whitespace.policy.all"), ComparisonPolicy.IGNORE_SPACE));
+ super(ourActionOrder);
+ addAction(ComparisonPolicy.DEFAULT, new IgnoringPolicyAction(DiffBundle.message("diff.acton.ignore.whitespace.policy.do.not.ignore"), ComparisonPolicy.DEFAULT));
+ addAction(ComparisonPolicy.TRIM_SPACE, new IgnoringPolicyAction(DiffBundle.message("diff.acton.ignore.whitespace.policy.leading.and.trailing"), ComparisonPolicy.TRIM_SPACE));
+ addAction(ComparisonPolicy.IGNORE_SPACE, new IgnoringPolicyAction(DiffBundle.message("diff.acton.ignore.whitespace.policy.all"), ComparisonPolicy.IGNORE_SPACE));
}
+ @NotNull
@Override
- public JComponent createCustomComponent(final Presentation presentation) {
- JPanel panel = new JPanel(new BorderLayout());
- final JLabel label = new JLabel(DiffBundle.message("ignore.whitespace.acton.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("ignore.whitespace.acton.name");
}
@NotNull
- protected DefaultActionGroup createPopupActionGroup(JComponent button) {
- DefaultActionGroup actionGroup = new DefaultActionGroup();
- for (ComparisonPolicy 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.getComparisonPolicy());
- Presentation templatePresentation = action.getTemplatePresentation();
- presentation.setIcon(templatePresentation.getIcon());
- presentation.setText(templatePresentation.getText());
- presentation.setEnabled(true);
- } else {
- presentation.setIcon(null);
- presentation.setText(DiffBundle.message("ignore.whitespace.action.not.available.action.name"));
- presentation.setEnabled(false);
- }
+ @Override
+ protected ComparisonPolicy getCurrentOption(@NotNull DiffPanelEx diffPanel) {
+ return diffPanel.getComparisonPolicy();
}
- private static class IgnoringPolicyAction extends DumbAwareAction {
+ private static class IgnoringPolicyAction extends DiffPanelAction {
private final ComparisonPolicy myPolicy;
public IgnoringPolicyAction(String text, ComparisonPolicy policy) {
myPolicy = policy;
}
- public void actionPerformed(AnActionEvent e) {
- final DiffPanelImpl diffPanel = DiffPanelImpl.fromDataContext(e.getDataContext());
- if (diffPanel != null) {
- diffPanel.setComparisonPolicy(myPolicy);
- }
+ @Override
+ protected void perform(@NotNull DiffPanelEx diffPanel) {
+ diffPanel.setComparisonPolicy(myPolicy);
}
}
}
diff.acton.ignore.whitespace.policy.leading.and.trailing=Leading and trailing
diff.acton.ignore.whitespace.policy.all=All
ignore.whitespace.acton.name=Ignore whitespace:
-ignore.whitespace.action.not.available.action.name=<Not available>
+diff.panel.combo.box.action.not.available.action.name=<Not available>
diff.dialog.select.change.action.name=Select Change
diff.dialog.select.change.action.description=Select changed text in this version and corresponding in other
merge.files.dialog.title=Merge
diff.acton.highlight.mode.action.by.word=By Word
diff.acton.highlight.mode.action.by.line=By Line
diff.acton.highlight.mode.action.no.highlighting=No Highlighting
-diff.acton.highlight.mode.not.available.action.name=<Not available>
diff.acton.highlight.mode.action.name=Highlighting Mode: