diff --git a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java b/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java index c84a6aa54edf..08e89781e0bf 100644 --- a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java +++ b/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java @@ -81,8 +81,6 @@ import java.util.List; @SuppressWarnings("unchecked") public class ProjectTypeStep extends ModuleWizardStep implements Disposable { - private enum Cards { FRAMEWORKS, TEMPLATES, CUSTOM } - private static final String TEMPLATES_CARD = "templates card"; private static final String FRAMEWORKS_CARD = "frameworks card"; @@ -108,10 +106,10 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable { return (ModuleBuilder)key.createModuleBuilder(); } }; - private final Set myCards = new HashSet(); + private final Map myCustomSteps = new HashMap(); private final MultiMap myTemplatesMap; private boolean myRemoteTemplatesLoaded; - private Cards myCurrentCard; + private String myCurrentCard; public ProjectTypeStep(WizardContext context, NewProjectWizard wizard, ModulesProvider modulesProvider) { myContext = context; @@ -210,7 +208,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable { } private boolean isFrameworksMode() { - return myCurrentCard == Cards.FRAMEWORKS && getSelectedBuilder().equals(myContext.getProjectBuilder()); + return FRAMEWORKS_CARD.equals(myCurrentCard) && getSelectedBuilder().equals(myContext.getProjectBuilder()); } private List fillTemplatesMap(WizardContext context) { @@ -342,13 +340,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable { private void showCard(String card) { ((CardLayout)myOptionsPanel.getLayout()).show(myOptionsPanel, card); - if (FRAMEWORKS_CARD.equals(card)) { - myCurrentCard = Cards.FRAMEWORKS; - } - else if (TEMPLATES_CARD.equals(card)) { - myCurrentCard = Cards.TEMPLATES; - } - else myCurrentCard = Cards.CUSTOM; + myCurrentCard = card; } private void showTemplates(TemplatesGroup group) { @@ -381,23 +373,29 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable { private boolean showCustomOptions(@NotNull ModuleBuilder builder) { String card = builder.getBuilderId(); - if (!myCards.contains(card)) { - JComponent panel = builder.getCustomOptionsPanel(this); - if (panel == null) return false; - myCards.add(card); - myOptionsPanel.add(panel, card); + if (!myCustomSteps.containsKey(card)) { + ModuleWizardStep step = builder.getCustomOptionsStep(this); + if (step == null) return false; + step.updateStep(); + myCustomSteps.put(card, step); + myOptionsPanel.add(step.getComponent(), card); } showCard(card); return true; } + @Nullable + private ModuleWizardStep getCustomStep() { + return myCustomSteps.get(myCurrentCard); + } + private TemplatesGroup getSelectedGroup() { return (TemplatesGroup)myProjectTypeList.getSelectedValue(); } @Nullable public ProjectTemplate getSelectedTemplate() { - return myCurrentCard == Cards.TEMPLATES ? myTemplatesList.getSelectedTemplate() : null; + return myCurrentCard == TEMPLATES_CARD ? myTemplatesList.getSelectedTemplate() : null; } private ModuleBuilder getSelectedBuilder() { @@ -409,7 +407,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable { } public Collection getAvailableTemplates() { - return myCurrentCard != Cards.FRAMEWORKS ? Collections.emptyList() : myTemplatesMap.get(getSelectedGroup()); + return myCurrentCard != FRAMEWORKS_CARD ? Collections.emptyList() : myTemplatesMap.get(getSelectedGroup()); } public void onWizardFinished() throws CommitStepException { @@ -435,6 +433,10 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable { public void updateDataModel() { ModuleBuilder builder = getSelectedBuilder(); myWizard.getSequence().addStepsForBuilder(builder, myContext, myModulesProvider); + ModuleWizardStep step = getCustomStep(); + if (step != null) { + step.updateDataModel(); + } } @Override @@ -444,10 +446,6 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable { } } - @Override - public void onStepLeaving() { - } - @Override public JComponent getPreferredFocusedComponent() { return myProjectTypeList; diff --git a/platform/lang-api/src/com/intellij/ide/util/projectWizard/AbstractModuleBuilder.java b/platform/lang-api/src/com/intellij/ide/util/projectWizard/AbstractModuleBuilder.java index 485514fd9e58..b25326d45bf4 100644 --- a/platform/lang-api/src/com/intellij/ide/util/projectWizard/AbstractModuleBuilder.java +++ b/platform/lang-api/src/com/intellij/ide/util/projectWizard/AbstractModuleBuilder.java @@ -39,12 +39,11 @@ public abstract class AbstractModuleBuilder extends ProjectBuilder { return null; } - public boolean hasCustomOptionsPanel() { - return false; - } - + /** + * Custom UI to be shown on the first wizard page + */ @Nullable - public JComponent getCustomOptionsPanel(Disposable parentDisposable) { + public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) { return null; } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleBuilder.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleBuilder.java index 814231d02c52..6d82f7c2f5ce 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleBuilder.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleBuilder.java @@ -19,6 +19,7 @@ import com.intellij.ide.fileTemplates.FileTemplate; import com.intellij.ide.fileTemplates.FileTemplateManager; import com.intellij.ide.util.projectWizard.ModuleWizardStep; import com.intellij.ide.util.projectWizard.WizardContext; +import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.externalSystem.service.project.wizard.AbstractExternalModuleBuilder; import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep; @@ -115,13 +116,15 @@ public class GradleModuleBuilder extends AbstractExternalModuleBuilder(this, settingsControl)}; - } - else { - return ModuleWizardStep.EMPTY_ARRAY; - } + return super.createWizardSteps(wizardContext, modulesProvider); + } + + @Nullable + @Override + public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) { + if (!myWizardContext.isCreatingNewProject()) return null; + final GradleProjectSettingsControl settingsControl = new GradleProjectSettingsControl(getExternalProjectSettings()); + return new ExternalModuleSettingsStep(this, settingsControl); } @Override diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesPanel.form b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesStep.form similarity index 99% rename from plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesPanel.form rename to plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesStep.form index d7bddc1fb21a..b6dbd8d15161 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesPanel.form +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesStep.form @@ -1,5 +1,5 @@ -
+ diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesPanel.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesStep.java similarity index 96% rename from plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesPanel.java rename to plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesStep.java index cd00ccbb3414..2342519326f5 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesPanel.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenArchetypesStep.java @@ -15,6 +15,7 @@ */ package org.jetbrains.idea.maven.wizards; +import com.intellij.ide.util.projectWizard.ModuleWizardStep; import com.intellij.ide.wizard.StepAdapter; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; @@ -46,7 +47,7 @@ import java.util.List; * @author Dmitry Avdeev * Date: 24.09.13 */ -public class MavenArchetypesPanel implements Disposable { +public class MavenArchetypesStep extends ModuleWizardStep implements Disposable { private JCheckBox myUseArchetypeCheckBox; private JButton myAddArchetypeButton; @@ -63,7 +64,7 @@ public class MavenArchetypesPanel implements Disposable { private final MavenModuleBuilder myBuilder; @Nullable private final StepAdapter myStep; - public MavenArchetypesPanel(MavenModuleBuilder builder, @Nullable StepAdapter step) { + public MavenArchetypesStep(MavenModuleBuilder builder, @Nullable StepAdapter step) { myBuilder = builder; myStep = step; Disposer.register(this, myLoadingIcon); @@ -298,6 +299,16 @@ public class MavenArchetypesPanel implements Disposable { public void dispose() { } + @Override + public JComponent getComponent() { + return getMainPanel(); + } + + @Override + public void updateDataModel() { + + } + private static class MyRenderer extends ColoredTreeCellRenderer { public void customizeCellRenderer(JTree tree, Object value, diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilder.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilder.java index 5c60a61427d4..0e01064df1f2 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilder.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleBuilder.java @@ -216,15 +216,11 @@ public class MavenModuleBuilder extends ModuleBuilder implements SourcePathsBuil return "Maven"; } - private MavenArchetypesPanel myPanel; - @Nullable @Override - public JComponent getCustomOptionsPanel(Disposable parentDisposable) { - if (myPanel == null) { - myPanel = new MavenArchetypesPanel(this, null); - Disposer.register(parentDisposable, myPanel); - } - return myPanel.getMainPanel(); + public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) { + MavenArchetypesStep step = new MavenArchetypesStep(this, null); + Disposer.register(parentDisposable, step); + return step; } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleWizardStep.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleWizardStep.java index eabc34c6b0d7..d3da701a69cf 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleWizardStep.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenModuleWizardStep.java @@ -74,14 +74,14 @@ public class MavenModuleWizardStep extends ModuleWizardStep { private JPanel myAddToPanel; @Nullable - private final MavenArchetypesPanel myArchetypes; + private final MavenArchetypesStep myArchetypes; public MavenModuleWizardStep(MavenModuleBuilder builder, WizardContext context, boolean includeArtifacts) { myProjectOrNull = context.getProject(); myBuilder = builder; myContext = context; if (includeArtifacts) { - myArchetypes = new MavenArchetypesPanel(builder, this); + myArchetypes = new MavenArchetypesStep(builder, this); myArchetypesPanel.add(myArchetypes.getMainPanel(), BorderLayout.CENTER); } else {