presentation for project groups

This commit is contained in:
Dmitry Avdeev
2012-11-20 11:53:44 +04:00
parent 6ba94bd260
commit 1b7288da00
5 changed files with 94 additions and 19 deletions
@@ -126,7 +126,7 @@ public class SelectTemplateStep extends ModuleWizardStep implements SettingsStep
@Nullable
private ModuleBuilder myModuleBuilder;
public SelectTemplateStep(WizardContext context, StepSequence sequence, final MultiMap<String, ProjectTemplate> map) {
public SelectTemplateStep(WizardContext context, StepSequence sequence, final MultiMap<TemplatesGroup, ProjectTemplate> map) {
myWizardContext = context;
mySequence = sequence;
@@ -148,14 +148,15 @@ public class SelectTemplateStep extends ModuleWizardStep implements SettingsStep
myExpertDecorator.setContentComponent(myExpertPanel);
final RemoteTemplatesFactory factory = new RemoteTemplatesFactory();
final DynamicGroupNode dynamicGroupNode = new DynamicGroupNode(factory.getGroups()[0], factory);
String group = factory.getGroups()[0];
final DynamicGroupNode dynamicGroupNode = new DynamicGroupNode(new TemplatesGroup(group, null, null), factory);
SimpleTreeStructure.Impl structure = new SimpleTreeStructure.Impl(new SimpleNode() {
@Override
public SimpleNode[] getChildren() {
SimpleNode[] nodes =
ContainerUtil.map2Array(map.entrySet(), NO_CHILDREN, new Function<Map.Entry<String, Collection<ProjectTemplate>>, SimpleNode>() {
ContainerUtil.map2Array(map.entrySet(), NO_CHILDREN, new Function<Map.Entry<TemplatesGroup, Collection<ProjectTemplate>>, SimpleNode>() {
@Override
public SimpleNode fun(Map.Entry<String, Collection<ProjectTemplate>> entry) {
public SimpleNode fun(Map.Entry<TemplatesGroup, Collection<ProjectTemplate>> entry) {
return new GroupNode(entry.getKey(), entry.getValue());
}
});
@@ -224,9 +225,7 @@ public class SelectTemplateStep extends ModuleWizardStep implements SettingsStep
if (name != null) {
append(name);
}
}
if (node instanceof GroupNode) {
// setIcon(UIUtil.getTreeIcon(expanded));
setIcon(node.getIcon());
}
}
});
@@ -569,7 +568,7 @@ public class SelectTemplateStep extends ModuleWizardStep implements SettingsStep
private final ProjectTemplatesFactory myFactory;
private DynamicGroupNode(String group, ProjectTemplatesFactory factory) {
private DynamicGroupNode(TemplatesGroup group, ProjectTemplatesFactory factory) {
super(group, Collections.<ProjectTemplate>emptyList());
myFactory = factory;
}
@@ -591,12 +590,13 @@ public class SelectTemplateStep extends ModuleWizardStep implements SettingsStep
}
private static class GroupNode extends SimpleNode {
private final String myGroup;
private final TemplatesGroup myGroup;
private final Collection<ProjectTemplate> myTemplates;
public GroupNode(String group, Collection<ProjectTemplate> templates) {
public GroupNode(TemplatesGroup group, Collection<ProjectTemplate> templates) {
myGroup = group;
myTemplates = templates;
setIcon(group.getIcon());
}
@Override
@@ -614,7 +614,7 @@ public class SelectTemplateStep extends ModuleWizardStep implements SettingsStep
@Override
public String getName() {
return myGroup;
return myGroup.getName();
}
}
@@ -626,6 +626,7 @@ public class SelectTemplateStep extends ModuleWizardStep implements SettingsStep
public TemplateNode(GroupNode groupNode, ProjectTemplate template) {
myGroupNode = groupNode;
myTemplate = template;
setIcon(template.createModuleBuilder().getNodeIcon());
}
@Override
@@ -0,0 +1,64 @@
/*
* Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.ide.util.newProjectWizard;
import javax.swing.*;
/**
* @author Dmitry Avdeev
* Date: 11/20/12
*/
public class TemplatesGroup {
private final String myName;
private final String myDescription;
private final Icon myIcon;
public TemplatesGroup(String name, String description, Icon icon) {
myName = name;
myDescription = description;
myIcon = icon;
}
public String getName() {
return myName;
}
public String getDescription() {
return myDescription;
}
public Icon getIcon() {
return myIcon;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TemplatesGroup group = (TemplatesGroup)o;
if (!myName.equals(group.myName)) return false;
return true;
}
@Override
public int hashCode() {
return myName.hashCode();
}
}
@@ -17,6 +17,7 @@ package com.intellij.ide.util.newProjectWizard.modes;
import com.intellij.ide.util.newProjectWizard.SelectTemplateStep;
import com.intellij.ide.util.newProjectWizard.StepSequence;
import com.intellij.ide.util.newProjectWizard.TemplatesGroup;
import com.intellij.ide.util.projectWizard.ModuleBuilder;
import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.project.ProjectBundle;
@@ -50,28 +51,28 @@ public class CreateFromTemplateMode extends WizardMode {
};
private SelectTemplateStep mySelectTemplateStep;
public static MultiMap<String, ProjectTemplate> getTemplatesMap(WizardContext context) {
public static MultiMap<TemplatesGroup, ProjectTemplate> getTemplatesMap(WizardContext context) {
ProjectTemplatesFactory[] factories = ProjectTemplatesFactory.EP_NAME.getExtensions();
final MultiMap<String, ProjectTemplate> groups = new MultiMap<String, ProjectTemplate>();
final MultiMap<TemplatesGroup, ProjectTemplate> groups = new MultiMap<TemplatesGroup, ProjectTemplate>();
for (ProjectTemplatesFactory factory : factories) {
for (String group : factory.getGroups()) {
ProjectTemplate[] templates = factory.createTemplates(group, context);
List<ProjectTemplate> values = context.isCreatingNewProject() ? Arrays.asList(templates) : ContainerUtil.filter(templates,
TEMPLATE_CONDITION);
if (!values.isEmpty()) {
groups.putValues(group, values);
groups.putValues(new TemplatesGroup(group, null, null), values);
}
}
}
final MultiMap<String, ProjectTemplate> sorted = new MultiMap<String, ProjectTemplate>();
final MultiMap<TemplatesGroup, ProjectTemplate> sorted = new MultiMap<TemplatesGroup, ProjectTemplate>();
// put single leafs under "Other"
for (Map.Entry<String, Collection<ProjectTemplate>> entry : groups.entrySet()) {
for (Map.Entry<TemplatesGroup, Collection<ProjectTemplate>> entry : groups.entrySet()) {
Collection<ProjectTemplate> templates = entry.getValue();
if (templates.size() == 1 &&
!ProjectTemplatesFactory.CUSTOM_GROUP.equals(entry.getKey())) {
!ProjectTemplatesFactory.CUSTOM_GROUP.equals(entry.getKey().getName())) {
if (!(templates.iterator().next() instanceof LocalArchivedTemplate)) {
sorted.putValues(ProjectTemplatesFactory.OTHER_GROUP, templates);
sorted.putValues(new TemplatesGroup(ProjectTemplatesFactory.OTHER_GROUP, null, null), templates);
continue;
}
}
@@ -100,7 +101,7 @@ public class CreateFromTemplateMode extends WizardMode {
@Nullable
@Override
protected StepSequence createSteps(WizardContext context, @NotNull ModulesProvider modulesProvider) {
MultiMap<String, ProjectTemplate> map = getTemplatesMap(context);
MultiMap<TemplatesGroup, ProjectTemplate> map = getTemplatesMap(context);
StepSequence sequence = new StepSequence();
for (ProjectTemplate template : map.values()) {
sequence.addStepsForBuilder(template.createModuleBuilder(), context, modulesProvider);
@@ -280,6 +280,10 @@ public abstract class ModuleBuilder extends ProjectBuilder{
return getModuleType().getBigIcon();
}
public Icon getNodeIcon() {
return getModuleType().getNodeIcon(false);
}
public String getDescription() {
return getModuleType().getDescription();
}
@@ -727,6 +727,11 @@ public class AndroidModuleBuilder extends JavaModuleBuilder {
return AndroidIcons.Android24;
}
@Override
public Icon getNodeIcon() {
return AndroidIcons.Android;
}
public String getDescription() {
return AndroidBundle.message("android.module.type.description");
}