From cf808a8a9f135411eda68ddd79a2bd9aac30e71b Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Mon, 2 Nov 2015 14:41:32 +0300 Subject: [PATCH] vcs: Utilized "ComboBoxAction" for "LabeledComboBoxAction" implementation (instead of just using custom combo box), updated "SelectFilteringAction" and "SelectGroupingAction" accordingly --- .../CommittedChangesTreeBrowser.java | 7 ++- .../committed/LabeledComboBoxAction.java | 52 ++++----------- .../committed/SelectFilteringAction.java | 63 +++++++++++++++---- .../committed/SelectGroupingAction.java | 51 +++++++++++++-- 4 files changed, 114 insertions(+), 59 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesTreeBrowser.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesTreeBrowser.java index af24d03d66fd..2627aa6b8e9c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesTreeBrowser.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesTreeBrowser.java @@ -79,7 +79,7 @@ public class CommittedChangesTreeBrowser extends JPanel implements TypeSafeDataP private final RepositoryChangesBrowser myDetailsView; private List myChangeLists; private List mySelectedChangeLists; - private ChangeListGroupingStrategy myGroupingStrategy = new DateChangeListGroupingStrategy(); + @NotNull private ChangeListGroupingStrategy myGroupingStrategy = new DateChangeListGroupingStrategy(); private final CompositeChangeListFilteringStrategy myFilteringStrategy = new CompositeChangeListFilteringStrategy(); private final JPanel myLeftPanel; private final FilterChangeListener myFilterChangeListener = new FilterChangeListener(); @@ -254,6 +254,11 @@ public class CommittedChangesTreeBrowser extends JPanel implements TypeSafeDataP updateModel(); } + @NotNull + public ChangeListGroupingStrategy getGroupingStrategy() { + return myGroupingStrategy; + } + private void updateBySelectionChange() { List selection = new ArrayList(); final TreePath[] selectionPaths = myChangesTree.getSelectionPaths(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/LabeledComboBoxAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/LabeledComboBoxAction.java index 14ebc7f81b64..cf6bd30a5a23 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/LabeledComboBoxAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/LabeledComboBoxAction.java @@ -15,60 +15,34 @@ */ package com.intellij.openapi.vcs.changes.committed; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; -import com.intellij.openapi.actionSystem.ex.CustomComponentAction; -import com.intellij.openapi.ui.ComboBox; +import com.intellij.openapi.actionSystem.ex.ComboBoxAction; +import com.intellij.util.ui.JBUI; +import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; /** * @author yole */ -public abstract class LabeledComboBoxAction extends AnAction implements CustomComponentAction { +public abstract class LabeledComboBoxAction extends ComboBoxAction { - @NotNull private final JLabel myLabel; - @Nullable private JPanel myPanel; - @NotNull private final ComboBox myComboBox; + @NotNull private final String myLabel; protected LabeledComboBoxAction(@NotNull String label) { - myComboBox = new ComboBox(); - myLabel = new JLabel(label); + myLabel = label; } - public void actionPerformed(@NotNull AnActionEvent e) { - } + @Override + public JComponent createCustomComponent(@NotNull Presentation presentation) { + JPanel panel = new JPanel(new BorderLayout()); - @NotNull - public JComponent createCustomComponent(Presentation presentation) { - if (myPanel == null) { - myPanel = new JPanel(new BorderLayout()); - myPanel.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4)); - myPanel.add(myLabel, BorderLayout.WEST); - myComboBox.addActionListener(new ActionListener() { - public void actionPerformed(final ActionEvent e) { - selectionChanged(myComboBox.getSelectedItem()); - } - }); - myComboBox.setModel(createModel()); - myPanel.add(myComboBox, BorderLayout.CENTER); - } - return myPanel; - } + panel.add(new JLabel(myLabel), BorderLayout.WEST); + panel.add(super.createCustomComponent(presentation), BorderLayout.CENTER); + UIUtil.addInsets(panel, JBUI.insets(0, 6, 0, 0)); - protected abstract void selectionChanged(Object selection); - - @NotNull - protected abstract ComboBoxModel createModel(); - - @NotNull - protected JComboBox getComboBox() { - return myComboBox; + return panel; } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/SelectFilteringAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/SelectFilteringAction.java index a9948fb997a3..8b207a3c2c7a 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/SelectFilteringAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/SelectFilteringAction.java @@ -15,12 +15,16 @@ */ package com.intellij.openapi.vcs.changes.committed; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.vcs.*; -import com.intellij.ui.CollectionComboBoxModel; +import com.intellij.util.NotNullFunction; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.List; @@ -32,18 +36,41 @@ public class SelectFilteringAction extends LabeledComboBoxAction { @NotNull private final Project myProject; @NotNull private final CommittedChangesTreeBrowser myBrowser; - @Nullable private CommittedChangesFilterKey myPreviousSelection; + @NotNull private ChangeListFilteringStrategy myPreviousSelection; public SelectFilteringAction(@NotNull Project project, @NotNull CommittedChangesTreeBrowser browser) { super(VcsBundle.message("committed.changes.filter.title")); myProject = project; myBrowser = browser; - myPreviousSelection = null; + myPreviousSelection = ChangeListFilteringStrategy.NONE; + } + + @Override + public void update(@NotNull AnActionEvent e) { + e.getPresentation().setText(myPreviousSelection.toString()); } @NotNull - protected ComboBoxModel createModel() { - return new CollectionComboBoxModel(collectStrategies()); + @Override + protected DefaultActionGroup createPopupActionGroup(JComponent button) { + return new DefaultActionGroup(ContainerUtil.map(collectStrategies(), new NotNullFunction() { + @NotNull + @Override + public AnAction fun(@NotNull ChangeListFilteringStrategy strategy) { + return new SetFilteringAction(strategy); + } + })); + } + + @NotNull + @Override + protected Condition getPreselectCondition() { + return new Condition() { + @Override + public boolean value(@NotNull AnAction action) { + return ((SetFilteringAction)action).myStrategy.getKey().equals(myPreviousSelection.getKey()); + } + }; } @NotNull @@ -74,14 +101,24 @@ public class SelectFilteringAction extends LabeledComboBoxAction { return result; } - protected void selectionChanged(@NotNull Object selection) { - if (myPreviousSelection != null) { - myBrowser.removeFilteringStrategy(myPreviousSelection); + private class SetFilteringAction extends DumbAwareAction { + + @NotNull private final ChangeListFilteringStrategy myStrategy; + + private SetFilteringAction(@NotNull ChangeListFilteringStrategy strategy) { + super(strategy.toString()); + myStrategy = strategy; } - final ChangeListFilteringStrategy strategy = (ChangeListFilteringStrategy)selection; - if (!ChangeListFilteringStrategy.NONE.equals(selection)) { - myBrowser.setFilteringStrategy(strategy); + + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + if (!ChangeListFilteringStrategy.NONE.equals(myPreviousSelection)) { + myBrowser.removeFilteringStrategy(myPreviousSelection.getKey()); + } + if (!ChangeListFilteringStrategy.NONE.equals(myStrategy)) { + myBrowser.setFilteringStrategy(myStrategy); + } + myPreviousSelection = myStrategy; } - myPreviousSelection = strategy.getKey(); } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/SelectGroupingAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/SelectGroupingAction.java index 66e36684f51f..a81e7980ce9a 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/SelectGroupingAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/SelectGroupingAction.java @@ -15,10 +15,15 @@ */ package com.intellij.openapi.vcs.changes.committed; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.vcs.*; import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; -import com.intellij.ui.CollectionComboBoxModel; +import com.intellij.util.NotNullFunction; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -38,16 +43,35 @@ public class SelectGroupingAction extends LabeledComboBoxAction { super(VcsBundle.message("committed.changes.group.title")); myProject = project; myBrowser = browser; - getComboBox().setPrototypeDisplayValue("Date+"); } - protected void selectionChanged(@NotNull Object selection) { - myBrowser.setGroupingStrategy((ChangeListGroupingStrategy)selection); + @Override + public void update(@NotNull AnActionEvent e) { + e.getPresentation().setText(myBrowser.getGroupingStrategy().toString()); } @NotNull - protected ComboBoxModel createModel() { - return new CollectionComboBoxModel(collectStrategies()); + @Override + protected DefaultActionGroup createPopupActionGroup(JComponent button) { + return new DefaultActionGroup( + ContainerUtil.map(collectStrategies(), new NotNullFunction() { + @NotNull + @Override + public DumbAwareAction fun(@NotNull ChangeListGroupingStrategy strategy) { + return new SetGroupingAction(strategy); + } + })); + } + + @NotNull + @Override + protected Condition getPreselectCondition() { + return new Condition() { + @Override + public boolean value(AnAction action) { + return ((SetGroupingAction)action).myStrategy.equals(myBrowser.getGroupingStrategy()); + } + }; } @NotNull @@ -72,6 +96,21 @@ public class SelectGroupingAction extends LabeledComboBoxAction { return result; } + private class SetGroupingAction extends DumbAwareAction { + + @NotNull private final ChangeListGroupingStrategy myStrategy; + + private SetGroupingAction(@NotNull ChangeListGroupingStrategy strategy) { + super(strategy.toString()); + myStrategy = strategy; + } + + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + myBrowser.setGroupingStrategy(myStrategy); + } + } + private static class CustomChangeListColumnGroupingStrategy implements ChangeListGroupingStrategy { @NotNull private final ChangeListColumn myColumn;