From 26c2343f0e9a55af0755a0fc4d2cd06aef5b83eb Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 13 May 2013 10:10:20 +0400 Subject: [PATCH] framework support panel: initial support for framework group versions --- .../intellij/framework/FrameworkGroup.java | 4 +- .../framework/FrameworkGroupVersion.java | 11 ++++ .../intellij/framework/FrameworkTypeEx.java | 2 +- .../AddSupportForFrameworksPanel.java | 29 ++++------- .../newProjectWizard/FrameworkGroupNode.java | 6 +-- .../FrameworkGroupOptionsComponent.java | 50 +++++++++++++++++++ .../impl/FrameworkSupportModelBase.java | 12 +++++ 7 files changed, 88 insertions(+), 26 deletions(-) create mode 100644 java/idea-ui/src/com/intellij/framework/FrameworkGroupVersion.java create mode 100644 java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkGroupOptionsComponent.java diff --git a/java/idea-ui/src/com/intellij/framework/FrameworkGroup.java b/java/idea-ui/src/com/intellij/framework/FrameworkGroup.java index bd626e59f209..02bf07132fa4 100644 --- a/java/idea-ui/src/com/intellij/framework/FrameworkGroup.java +++ b/java/idea-ui/src/com/intellij/framework/FrameworkGroup.java @@ -9,7 +9,7 @@ import java.util.List; /** * @author nik */ -public abstract class FrameworkGroup { +public abstract class FrameworkGroup { private final String myId; public FrameworkGroup(String id) { @@ -28,7 +28,7 @@ public abstract class FrameworkGroup { public abstract Icon getIcon(); @NotNull - public List getGroupVersions() { + public List getGroupVersions() { return Collections.emptyList(); } } diff --git a/java/idea-ui/src/com/intellij/framework/FrameworkGroupVersion.java b/java/idea-ui/src/com/intellij/framework/FrameworkGroupVersion.java new file mode 100644 index 000000000000..ea0f3102c3d2 --- /dev/null +++ b/java/idea-ui/src/com/intellij/framework/FrameworkGroupVersion.java @@ -0,0 +1,11 @@ +package com.intellij.framework; + +import org.jetbrains.annotations.NotNull; + +/** + * @author nik + */ +public interface FrameworkGroupVersion { + @NotNull String getId(); + @NotNull String getPresentableName(); +} diff --git a/java/idea-ui/src/com/intellij/framework/FrameworkTypeEx.java b/java/idea-ui/src/com/intellij/framework/FrameworkTypeEx.java index 4c8e59ea9e36..02c0298a7331 100644 --- a/java/idea-ui/src/com/intellij/framework/FrameworkTypeEx.java +++ b/java/idea-ui/src/com/intellij/framework/FrameworkTypeEx.java @@ -31,7 +31,7 @@ public abstract class FrameworkTypeEx extends FrameworkType { } @Nullable - public FrameworkGroup getParentGroup() { + public FrameworkGroup getParentGroup() { return null; } diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java index bb54043be3e8..ad77b9195911 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java @@ -34,14 +34,11 @@ import com.intellij.openapi.roots.IdeaModifiableModelsProvider; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; -import com.intellij.openapi.ui.ComboBox; import com.intellij.openapi.ui.Splitter; -import com.intellij.openapi.ui.VerticalFlowLayout; import com.intellij.openapi.util.Comparing; import com.intellij.ui.CheckedTreeNode; import com.intellij.ui.ScrollPaneFactory; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.ui.FormBuilder; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -69,7 +66,7 @@ public class AddSupportForFrameworksPanel implements Disposable { private final JPanel myOptionsPanel; private final FrameworksTree myFrameworksTree; private final Map myInitializedOptionsComponents = new HashMap(); - private final Map myInitializedGroupPanels = new HashMap(); + private final Map, JPanel> myInitializedGroupPanels = new HashMap, JPanel>(); private FrameworkSupportNodeBase myLastSelectedNode; public AddSupportForFrameworksPanel(final List providers, final FrameworkSupportModelBase model) { @@ -151,7 +148,7 @@ public class AddSupportForFrameworksPanel implements Disposable { frameworkSupportNode.getConfigurable().onFrameworkSelectionChanged(node.isChecked()); } else if (node instanceof FrameworkGroupNode) { - FrameworkGroup group = ((FrameworkGroupNode)node).getGroup(); + FrameworkGroup group = ((FrameworkGroupNode)node).getGroup(); initializeGroupPanel(group); showCard(group.getId()); } @@ -160,19 +157,11 @@ public class AddSupportForFrameworksPanel implements Disposable { } } - private void initializeGroupPanel(FrameworkGroup group) { + private void initializeGroupPanel(FrameworkGroup group) { if (!myInitializedGroupPanels.containsKey(group)) { - JPanel panel = new JPanel(new VerticalFlowLayout()); - List versions = group.getGroupVersions(); - if (!versions.isEmpty()) { - ComboBox versionsBox = new ComboBox(); - for (String version : versions) { - versionsBox.addItem(version); - } - panel.add(FormBuilder.createFormBuilder().addLabeledComponent("Version:", versionsBox).getPanel()); - } - myInitializedGroupPanels.put(group, panel); - myOptionsPanel.add(group.getId(), panel); + FrameworkGroupOptionsComponent component = new FrameworkGroupOptionsComponent(group, myModel); + myInitializedGroupPanels.put(group, component.getMainPanel()); + myOptionsPanel.add(group.getId(), component.getMainPanel()); } } @@ -227,7 +216,7 @@ public class AddSupportForFrameworksPanel implements Disposable { private void createNodes() { Map nodes = new HashMap(); - Map groups = new HashMap(); + Map, FrameworkGroupNode> groups = new HashMap, FrameworkGroupNode>(); List roots = new ArrayList(); for (FrameworkSupportInModuleProvider provider : myProviders) { createNode(provider, nodes, groups, roots); @@ -239,13 +228,13 @@ public class AddSupportForFrameworksPanel implements Disposable { @Nullable private FrameworkSupportNode createNode(final FrameworkSupportInModuleProvider provider, final Map nodes, - final Map groupNodes, + final Map, FrameworkGroupNode> groupNodes, List roots) { FrameworkSupportNode node = nodes.get(provider.getFrameworkType().getId()); if (node == null) { String underlyingTypeId = provider.getFrameworkType().getUnderlyingFrameworkTypeId(); FrameworkSupportNodeBase parentNode = null; - final FrameworkGroup group = provider.getFrameworkType().getParentGroup(); + final FrameworkGroup group = provider.getFrameworkType().getParentGroup(); if (underlyingTypeId != null) { FrameworkSupportInModuleProvider parentProvider = FrameworkSupportUtil.findProvider(underlyingTypeId, myProviders); if (parentProvider == null) { diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkGroupNode.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkGroupNode.java index 2a513d310fcd..807110f4463c 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkGroupNode.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkGroupNode.java @@ -9,14 +9,14 @@ import javax.swing.*; * @author nik */ public class FrameworkGroupNode extends FrameworkSupportNodeBase { - private final FrameworkGroup myGroup; + private final FrameworkGroup myGroup; - public FrameworkGroupNode(@NotNull FrameworkGroup group, FrameworkSupportNodeBase parent) { + public FrameworkGroupNode(@NotNull FrameworkGroup group, FrameworkSupportNodeBase parent) { super(group, parent); myGroup = group; } - public FrameworkGroup getGroup() { + public FrameworkGroup getGroup() { return myGroup; } diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkGroupOptionsComponent.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkGroupOptionsComponent.java new file mode 100644 index 000000000000..40e224e50175 --- /dev/null +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkGroupOptionsComponent.java @@ -0,0 +1,50 @@ +package com.intellij.ide.util.newProjectWizard; + +import com.intellij.framework.FrameworkGroup; +import com.intellij.framework.FrameworkGroupVersion; +import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelBase; +import com.intellij.openapi.ui.ComboBox; +import com.intellij.openapi.ui.VerticalFlowLayout; +import com.intellij.ui.ListCellRendererWrapper; +import com.intellij.util.ui.FormBuilder; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; + +/** + * @author nik + */ +public class FrameworkGroupOptionsComponent { + private final JPanel myMainPanel; + + public FrameworkGroupOptionsComponent(final FrameworkGroup group, final FrameworkSupportModelBase model) { + JPanel panel = new JPanel(new VerticalFlowLayout()); + List versions = group.getGroupVersions(); + if (!versions.isEmpty()) { + final ComboBox versionsBox = new ComboBox(); + versionsBox.setRenderer(new ListCellRendererWrapper() { + @Override + public void customize(JList list, FrameworkGroupVersion value, int index, boolean selected, boolean hasFocus) { + setText(value != null ? value.getPresentableName() : ""); + } + }); + versionsBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + model.setSelectedVersion(group, (FrameworkGroupVersion)versionsBox.getSelectedItem()); + } + }); + for (FrameworkGroupVersion version : versions) { + versionsBox.addItem(version); + } + panel.add(FormBuilder.createFormBuilder().addLabeledComponent("Version:", versionsBox).getPanel()); + } + myMainPanel = panel; + } + + public JPanel getMainPanel() { + return myMainPanel; + } +} diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportModelBase.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportModelBase.java index e82e67e5da43..974e202cc0f2 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportModelBase.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportModelBase.java @@ -15,6 +15,8 @@ */ package com.intellij.ide.util.newProjectWizard.impl; +import com.intellij.framework.FrameworkGroup; +import com.intellij.framework.FrameworkGroupVersion; import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider; import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable; import com.intellij.ide.util.frameworkSupport.FrameworkSupportModel; @@ -46,6 +48,7 @@ public abstract class FrameworkSupportModelBase extends UserDataHolderBase imple private final EventDispatcher myDispatcher = EventDispatcher.create(FrameworkSupportModelListener.class); private final Map mySettingsMap = new HashMap(); private final Map myOptionsComponentsMap = new HashMap(); + private final Map, FrameworkGroupVersion> mySelectedVersions = new HashMap, FrameworkGroupVersion>(); public FrameworkSupportModelBase(final @Nullable Project project, @Nullable ModuleBuilder builder, @NotNull LibrariesContainer librariesContainer) { myProject = project; @@ -123,6 +126,15 @@ public abstract class FrameworkSupportModelBase extends UserDataHolderBase imple return ((OldFrameworkSupportProviderWrapper.FrameworkSupportConfigurableWrapper)node.getConfigurable()).getConfigurable(); } + public void setSelectedVersion(@NotNull FrameworkGroup group, @Nullable FrameworkGroupVersion version) { + mySelectedVersions.put(group, version); + } + + @Nullable + public V getSelectedVersion(@NotNull FrameworkGroup group) { + return (V)mySelectedVersions.get(group); + } + public void onFrameworkSelectionChanged(FrameworkSupportNode node) { final FrameworkSupportModelListener multicaster = myDispatcher.getMulticaster(); final FrameworkSupportInModuleProvider provider = node.getProvider();