From 5d9cdac1c27bede77abd2bc8f971d0e9ec62aa63 Mon Sep 17 00:00:00 2001 From: "kirill.safonov" Date: Wed, 1 Feb 2012 22:54:23 +0400 Subject: [PATCH] allow to filter JdkComboBox items --- .../roots/ui/configuration/JdkComboBox.java | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java index 97807b9292df..a6d238a8688e 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java @@ -30,6 +30,7 @@ import com.intellij.openapi.util.Condition; import com.intellij.ui.ScreenUtil; import com.intellij.ui.SimpleTextAttributes; import com.intellij.util.Consumer; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,10 +38,8 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; +import java.util.*; +import java.util.List; /** * @author Eugene Zhuravlev @@ -48,8 +47,16 @@ import java.util.Comparator; */ public class JdkComboBox extends ComboBoxWithWidePopup { + @Nullable + private Condition myFilter; + public JdkComboBox(@NotNull final ProjectSdksModel jdkModel) { - super(new JdkComboBoxModel(jdkModel)); + this(jdkModel, null); + } + + public JdkComboBox(@NotNull final ProjectSdksModel jdkModel, @Nullable Condition filter) { + super(new JdkComboBoxModel(jdkModel, filter)); + myFilter = filter; setRenderer(new ProjectJdkListRenderer(getRenderer()) { @Override public void doCustomize(JList list, Object value, int index, boolean selected, boolean hasFocus) { @@ -221,7 +228,10 @@ public class JdkComboBox extends ComboBoxWithWidePopup { model.removeAllElements(); model.addElement(firstItem); final ProjectSdksModel projectJdksModel = ProjectStructureConfigurable.getInstance(project).getProjectJdksModel(); - final ArrayList projectJdks = new ArrayList(projectJdksModel.getProjectSdks().values()); + List projectJdks = new ArrayList(projectJdksModel.getProjectSdks().values()); + if (myFilter != null) { + projectJdks = ContainerUtil.filter(projectJdks, myFilter); + } Collections.sort(projectJdks, new Comparator() { public int compare(final Sdk o1, final Sdk o2) { return o1.getName().compareToIgnoreCase(o2.getName()); @@ -233,9 +243,12 @@ public class JdkComboBox extends ComboBoxWithWidePopup { } private static class JdkComboBoxModel extends DefaultComboBoxModel { - public JdkComboBoxModel(final ProjectSdksModel jdksModel) { - super(); - final Sdk[] jdks = jdksModel.getSdks(); + public JdkComboBoxModel(final ProjectSdksModel jdksModel, final @Nullable Condition filter) { + Sdk[] jdks = jdksModel.getSdks(); + if (filter != null) { + final List filtered = ContainerUtil.filter(jdks, filter); + jdks = filtered.toArray(new Sdk[filtered.size()]); + } Arrays.sort(jdks, new Comparator() { public int compare(final Sdk s1, final Sdk s2) { return s1.getName().compareToIgnoreCase(s2.getName());