From 52ced51a5e83ab5aafaef0dab15d233000040fe0 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 19 Oct 2012 11:13:10 +0400 Subject: [PATCH] templates tree reordered --- .../newProjectWizard/SelectTemplateStep.java | 39 ++++---- .../templates/ArchivedTemplatesFactory.java | 2 +- .../EmptyModuleTemplatesFactory.java | 83 +++++++++++------- .../Java/Java_Command_Line_Application.zip | Bin 0 -> 1896 bytes 4 files changed, 73 insertions(+), 51 deletions(-) create mode 100644 java/java-impl/src/resources/projectTemplates/Java/Java_Command_Line_Application.zip diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.java index bd879e4c11c3..c3397e6cb345 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SelectTemplateStep.java @@ -89,19 +89,29 @@ public class SelectTemplateStep extends ModuleWizardStep { Messages.installHyperlinkSupport(myDescriptionPane); ProjectTemplatesFactory[] factories = ProjectTemplatesFactory.EP_NAME.getExtensions(); - final MultiMap groups = new MultiMap(); + final MultiMap groups = new MultiMap(); for (ProjectTemplatesFactory factory : factories) { for (String string : factory.getGroups()) { - groups.putValue(string, factory); + groups.putValues(string, Arrays.asList(factory.createTemplates(string, context))); + } + } + final MultiMap sorted = new MultiMap(); + // put single leafs under "Other" + for (Map.Entry> entry : groups.entrySet()) { + if (entry.getValue().size() > 1 || ArchivedTemplatesFactory.CUSTOM_GROUP.equals(entry.getKey())) { + sorted.put(entry.getKey(), entry.getValue()); + } + else { + sorted.putValues("Other", entry.getValue()); } } SimpleTreeStructure.Impl structure = new SimpleTreeStructure.Impl(new SimpleNode() { @Override public SimpleNode[] getChildren() { - return ContainerUtil.map2Array(groups.entrySet(), NO_CHILDREN, new Function>, SimpleNode>() { + return ContainerUtil.map2Array(sorted.entrySet(), NO_CHILDREN, new Function>, SimpleNode>() { @Override - public SimpleNode fun(Map.Entry> entry) { + public SimpleNode fun(Map.Entry> entry) { return new GroupNode(entry.getKey(), entry.getValue()); } }); @@ -182,7 +192,7 @@ public class SelectTemplateStep extends ModuleWizardStep { } mySettingsPanel.setVisible(settingsPanel != null); String description = template.getDescription(); - if (description != null) { + if (StringUtil.isNotEmpty(description)) { StringBuilder sb = new StringBuilder("'); sb.append(description).append(""); @@ -234,12 +244,10 @@ public class SelectTemplateStep extends ModuleWizardStep { case KeyEvent.VK_DOWN: myTemplatesTree.setSelectionRow(row < myTemplatesTree.getRowCount() - 1 ? row + 1 : 0); break; - case KeyEvent.VK_ENTER: - myTemplatesTree.expandRow(row); } } } - }.registerCustomShortcutSet(new CustomShortcutSet(KeyEvent.VK_UP, KeyEvent.VK_DOWN, KeyEvent.VK_ENTER), mySearchField); + }.registerCustomShortcutSet(new CustomShortcutSet(KeyEvent.VK_UP, KeyEvent.VK_DOWN), mySearchField); } @Override @@ -368,23 +376,20 @@ public class SelectTemplateStep extends ModuleWizardStep { mySearchField = new SearchTextField(false); } - private class GroupNode extends SimpleNode { + private static class GroupNode extends SimpleNode { private final String myGroup; - private final Collection myFactories; + private final Collection myTemplates; - public GroupNode(String group, Collection factories) { + public GroupNode(String group, Collection templates) { myGroup = group; - myFactories = factories; + myTemplates = templates; } @Override public SimpleNode[] getChildren() { List children = new ArrayList(); - for (ProjectTemplatesFactory factory : myFactories) { - ProjectTemplate[] templates = factory.createTemplates(myGroup, myContext); - for (ProjectTemplate template : templates) { - children.add(new TemplateNode(template)); - } + for (ProjectTemplate template : myTemplates) { + children.add(new TemplateNode(template)); } return children.toArray(new SimpleNode[children.size()]); } diff --git a/java/idea-ui/src/com/intellij/platform/templates/ArchivedTemplatesFactory.java b/java/idea-ui/src/com/intellij/platform/templates/ArchivedTemplatesFactory.java index 861717875b44..26a014774434 100644 --- a/java/idea-ui/src/com/intellij/platform/templates/ArchivedTemplatesFactory.java +++ b/java/idea-ui/src/com/intellij/platform/templates/ArchivedTemplatesFactory.java @@ -99,7 +99,7 @@ public class ArchivedTemplatesFactory implements ProjectTemplatesFactory { } static String getCustomTemplatesPath() { - return PathManager.getConfigPath() + "/projectTemplates"; + return PathManager.getConfigPath() + "/resources/projectTemplates"; } @NotNull diff --git a/java/idea-ui/src/com/intellij/platform/templates/EmptyModuleTemplatesFactory.java b/java/idea-ui/src/com/intellij/platform/templates/EmptyModuleTemplatesFactory.java index 934420591f08..eb8a1fa8477d 100644 --- a/java/idea-ui/src/com/intellij/platform/templates/EmptyModuleTemplatesFactory.java +++ b/java/idea-ui/src/com/intellij/platform/templates/EmptyModuleTemplatesFactory.java @@ -39,48 +39,65 @@ public class EmptyModuleTemplatesFactory implements ProjectTemplatesFactory { @NotNull @Override public String[] getGroups() { - return new String[] {GROUP_NAME}; + List builders = ModuleBuilder.getAllBuilders(); + return ContainerUtil.map2Array(builders, String.class, new Function() { + @Override + public String fun(ModuleBuilder builder) { + return getGroupName(builder); + } + }); } @NotNull @Override public ProjectTemplate[] createTemplates(String group, WizardContext context) { List builders = ModuleBuilder.getAllBuilders(); - return ContainerUtil.map2Array(builders, ProjectTemplate.class, new Function() { - @Override - public ProjectTemplate fun(final ModuleBuilder builder) { - return new ProjectTemplate() { - @NotNull - @Override - public String getName() { - return builder.getPresentableName(); - } + for (ModuleBuilder builder : builders) { + if (getGroupName(builder).equals(group)) return new ProjectTemplate[] {new EmptyModuleTemplate(builder)}; + } + return new ProjectTemplate[0]; + } - @Nullable - @Override - public String getDescription() { - return builder.getDescription(); - } + private static String getGroupName(ModuleBuilder builder) { + String name = builder.getPresentableName(); + return name.split(" ")[0]; + } - @Nullable - @Override - public JComponent getSettingsPanel() { - return null; - } + private static class EmptyModuleTemplate implements ProjectTemplate { + private final ModuleBuilder myBuilder; - @NotNull - @Override - public ModuleBuilder createModuleBuilder() { - return builder; - } + public EmptyModuleTemplate(ModuleBuilder builder) { + myBuilder = builder; + } - @Nullable - @Override - public ValidationInfo validateSettings() { - return null; - } - }; - } - }); + @NotNull + @Override + public String getName() { + return myBuilder.getPresentableName(); + } + + @Nullable + @Override + public String getDescription() { + return myBuilder.getDescription(); + } + + @Nullable + @Override + public JComponent getSettingsPanel() { + return null; + } + + @NotNull + @Override + public ModuleBuilder createModuleBuilder() { + return myBuilder; + } + + @Nullable + @Override + public ValidationInfo validateSettings() { + return null; + } } } diff --git a/java/java-impl/src/resources/projectTemplates/Java/Java_Command_Line_Application.zip b/java/java-impl/src/resources/projectTemplates/Java/Java_Command_Line_Application.zip new file mode 100644 index 0000000000000000000000000000000000000000..c9dbc294b4f67c72b35ce4f6b0ba0e2cf00031ce GIT binary patch literal 1896 zcmWIWW@h1H0D+uYL5^Ssl;8o<&iT2yiFqkLnR%)D0dSQY(Nqedsnp9%NlgT+7Xiv} zFa(ALJL(2LaSs9V5`kC=tNN7G;^d;tf|AVqJiUyP+#K06yLk^N@UR{Tjhh*wlVIp@ z%O}B3Xj+cLAtIeqF*=Dsq2AdsL}2ozWg^6=6%&HZJapu`XTju z4wX}+dY8(pxAI1OHREcH{SWd3#7%2}ZdxdNTlN~zE&7ZM3{qI#l$%+ctXGkn6WZ_S zeb_;u^?mEV_QV&a>jZU`BC8F!mUXFKD~_0CxWu>YP@4Iz`uBPpb@!gF*)#Kd+@@b| zqa;r9@Md>@ylTqya?)zI>q7gt>0h*6C-;2w67xNaFU?!J{e_`JP|@|xYPpW9`&9DO z63^w_pBiQ=X(NAEVT;%GbC1oXR!*I<^tF=SG>$BZ6E`ya+vUxsx@5~JzFAc(a$k1) ze}TXS2X$HE;*zRg*q*zx!tU}{k&Epq>DB26CEx$JyXA|*k)+A>Dd+ufE7hJAKg2C? zrDa}bO1_elKzb|)_gNW<*rvHf*JJxDu z2tIsrh^tFQF#7lc{n;}rmFryW?Kf{Kd;88>X2<(q2k&N-9bOeSjm77yhw$6AqWpc{p`u$h7X-Mxref)FX6BXI{TFUz-#Cn=Fx9_eN z$Pj&b>78-J`e!GFd*a)gwYuwQx z6YGw@|FbAg=;xjdN9814GWky|^_SXZa)OgJo_&7f^M7s3yKRCUvW1gh)v=lt-j$jC^Yl07M@1Gt7(ropo!R-+Z(s;* zg@z%d*g!7~1kl2;xF{J~6o3*Mx@t)*s(lkP^YpS3%Mx{aHgYi;3b_1s_?PJATl`-! zB2!%~yQ92u2j^_thXVia^4>Ez`)2k{O_uip1+hi#k<(j_Xh}z%T~iTuu=8F^#LnxJ z9M(>i@hpC7IA>4x>%)2-tyRZo8a;kI*YI-Rt|Fa2KQy{R%)T3aftfVin{bn0eR=L4K|BB(QF;mh literal 0 HcmV?d00001