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 d14d36523658..cde7955f619b 100644 --- a/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java +++ b/java/idea-ui/src/com/intellij/ide/projectWizard/ProjectTypeStep.java @@ -397,7 +397,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable { private boolean showCustomOptions(@NotNull ModuleBuilder builder) { String card = builder.getBuilderId(); if (!myCustomSteps.containsKey(card)) { - ModuleWizardStep step = builder.getCustomOptionsStep(this); + ModuleWizardStep step = builder.getCustomOptionsStep(myContext, this); if (step == null) return false; step.updateStep(); myCustomSteps.put(card, step); 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 5046be673abb..b975ae43371d 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 @@ -180,17 +180,12 @@ public abstract class FrameworkSupportModelBase extends UserDataHolderBase imple } public void onFrameworkSelectionChanged(FrameworkSupportNode node) { - final FrameworkSupportModelListener multicaster = myDispatcher.getMulticaster(); final FrameworkSupportInModuleProvider provider = node.getUserObject(); //todo[nik] + boolean checked = node.isChecked(); if (provider instanceof OldFrameworkSupportProviderWrapper) { final FrameworkSupportProvider oldProvider = ((OldFrameworkSupportProviderWrapper) provider).getProvider(); - if (node.isChecked()) { - multicaster.frameworkSelected(oldProvider); - } - else { - multicaster.frameworkUnselected(oldProvider); - } + selectFramework(oldProvider, checked); } for (FrameworkSupportInModuleProvider.FrameworkDependency dependency : provider.getDependenciesFrameworkIds()) { if (!dependency.isOptional()) { @@ -200,6 +195,16 @@ public abstract class FrameworkSupportModelBase extends UserDataHolderBase imple } } + public void selectFramework(FrameworkSupportProvider provider, boolean checked) { + final FrameworkSupportModelListener multicaster = myDispatcher.getMulticaster(); + if (checked) { + multicaster.frameworkSelected(provider); + } + else { + multicaster.frameworkUnselected(provider); + } + } + public void fireWizardStepUpdated() { myDispatcher.getMulticaster().wizardStepUpdated(); } diff --git a/java/idea-ui/src/com/intellij/ide/util/projectWizard/SdkSettingsStep.java b/java/idea-ui/src/com/intellij/ide/util/projectWizard/SdkSettingsStep.java index 4db93153f581..4e42026647e2 100644 --- a/java/idea-ui/src/com/intellij/ide/util/projectWizard/SdkSettingsStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/projectWizard/SdkSettingsStep.java @@ -17,12 +17,8 @@ package com.intellij.ide.util.projectWizard; import com.intellij.CommonBundle; import com.intellij.ide.IdeBundle; -import com.intellij.ide.util.PropertiesComponent; -import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.projectRoots.ProjectJdkTable; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkTypeId; import com.intellij.openapi.roots.ProjectRootManager; @@ -35,8 +31,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; /** * @author Dmitry Avdeev @@ -47,64 +41,29 @@ public class SdkSettingsStep extends ModuleWizardStep { protected final WizardContext myWizardContext; protected final ProjectSdksModel myModel; private final ModuleBuilder myModuleBuilder; + private final JPanel myJdkPanel; - public SdkSettingsStep(@NotNull SettingsStep settingsStep, @NotNull ModuleBuilder moduleBuilder, @NotNull Condition sdkFilter) { + public SdkSettingsStep(SettingsStep settingsStep, @NotNull ModuleBuilder moduleBuilder, + @NotNull Condition sdkFilter) { + + this(settingsStep.getContext(), moduleBuilder, sdkFilter); + settingsStep.addSettingsField(getSdkFieldLabel(settingsStep.getContext().getProject()), myJdkPanel); + } + + public SdkSettingsStep(WizardContext context, + @NotNull ModuleBuilder moduleBuilder, + @NotNull Condition sdkFilter) { myModuleBuilder = moduleBuilder; - myWizardContext = settingsStep.getContext(); + myWizardContext = context; myModel = new ProjectSdksModel(); Project project = myWizardContext.getProject(); myModel.reset(project); - myJdkComboBox = new JdkComboBox(myModel, sdkFilter); - - final PropertiesComponent component = project == null ? PropertiesComponent.getInstance() : PropertiesComponent.getInstance(project); - ModuleType moduleType = moduleBuilder.getModuleType(); - final String selectedJdkProperty = "jdk.selected." + (moduleType == null ? "" : moduleType.getId()); - myJdkComboBox.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - Sdk jdk = myJdkComboBox.getSelectedJdk(); - if (jdk != null) { - component.setValue(selectedJdkProperty, jdk.getName()); - } - } - }); - - if (project != null) { - Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk(); - if (sdk != null && moduleBuilder.isSuitableSdkType(sdk.getSdkType())) { - // use project SDK - return; - } - } - else { - // set default project SDK - Project defaultProject = ProjectManager.getInstance().getDefaultProject(); - Sdk sdk = ProjectRootManager.getInstance(defaultProject).getProjectSdk(); - if (sdk != null && sdkFilter.value(sdk.getSdkType())) { - myJdkComboBox.setSelectedJdk(sdk); - } - } - - String value = component.getValue(selectedJdkProperty); - if (value != null) { - Sdk jdk = ProjectJdkTable.getInstance().findJdk(value); - if (jdk != null) { - myJdkComboBox.setSelectedJdk(jdk); - } - } - - JButton button = new JButton("Ne\u001Bw..."); - myJdkComboBox.setSetupButton(button, project, myModel, - project == null ? new JdkComboBox.NoneJdkComboBoxItem() : new JdkComboBox.ProjectJdkComboBoxItem(), - null, - false); - JPanel jdkPanel = new JPanel(new BorderLayout(4, 0)); - jdkPanel.add(myJdkComboBox); - jdkPanel.add(button, BorderLayout.EAST); - settingsStep.addSettingsField(getSdkFieldLabel(project), jdkPanel); - + myJdkComboBox = JdkComboBox.createSdkComboBox(moduleBuilder, sdkFilter, project, myModel); + myJdkPanel = new JPanel(new BorderLayout(4, 0)); + myJdkPanel.add(myJdkComboBox); + myJdkPanel.add(myJdkComboBox.getSetUpButton(), BorderLayout.EAST); } @NotNull @@ -112,9 +71,13 @@ public class SdkSettingsStep extends ModuleWizardStep { return (project == null ? "Project" : "Module") + " \u001BSDK:"; } + public JdkComboBox getJdkComboBox() { + return myJdkComboBox; + } + @Override public JComponent getComponent() { - return null; + return myJdkPanel; } @Override 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 f81f84064583..8a8a55461cb9 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 @@ -16,13 +16,19 @@ package com.intellij.openapi.roots.ui.configuration; import com.intellij.ide.DataManager; +import com.intellij.ide.util.PropertiesComponent; +import com.intellij.ide.util.projectWizard.ModuleBuilder; import com.intellij.ide.util.projectWizard.ProjectJdkListRenderer; import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; +import com.intellij.openapi.project.ProjectManager; +import com.intellij.openapi.projectRoots.ProjectJdkTable; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkType; import com.intellij.openapi.projectRoots.SdkTypeId; +import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.roots.ui.configuration.projectRoot.JdkListConfigurable; import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.ui.ComboBoxWithWidePopup; @@ -57,6 +63,7 @@ public class JdkComboBox extends ComboBoxWithWidePopup { private final Condition myFilter; @Nullable private final Condition myCreationFilter; + private JButton mySetUpButton; public JdkComboBox(@NotNull final ProjectSdksModel jdkModel) { this(jdkModel, null); @@ -103,6 +110,57 @@ public class JdkComboBox extends ComboBoxWithWidePopup { }); } + public static JdkComboBox createSdkComboBox(ModuleBuilder moduleBuilder, + Condition sdkFilter, + Project project, + ProjectSdksModel model) { + final JdkComboBox comboBox = new JdkComboBox(model, sdkFilter); + + final PropertiesComponent component = project == null ? PropertiesComponent.getInstance() : PropertiesComponent.getInstance(project); + ModuleType moduleType = moduleBuilder.getModuleType(); + final String selectedJdkProperty = "jdk.selected." + (moduleType == null ? "" : moduleType.getId()); + comboBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Sdk jdk = comboBox.getSelectedJdk(); + if (jdk != null) { + component.setValue(selectedJdkProperty, jdk.getName()); + } + } + }); + + if (project != null) { + Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk(); + if (sdk != null && moduleBuilder.isSuitableSdkType(sdk.getSdkType())) { + // use project SDK + return null; + } + } + else { + // set default project SDK + Project defaultProject = ProjectManager.getInstance().getDefaultProject(); + Sdk sdk = ProjectRootManager.getInstance(defaultProject).getProjectSdk(); + if (sdk != null && sdkFilter.value(sdk.getSdkType())) { + comboBox.setSelectedJdk(sdk); + } + } + + String value = component.getValue(selectedJdkProperty); + if (value != null) { + Sdk jdk = ProjectJdkTable.getInstance().findJdk(value); + if (jdk != null) { + comboBox.setSelectedJdk(jdk); + } + } + + JButton button = new JButton("Ne\u001Bw..."); + comboBox.setSetupButton(button, project, model, + project == null ? new NoneJdkComboBoxItem() : new ProjectJdkComboBoxItem(), + null, + false); + return comboBox; + } + @Override public Dimension getPreferredSize() { final Rectangle rec = ScreenUtil.getScreenRectangle(0, 0); @@ -140,7 +198,9 @@ public class JdkComboBox extends ComboBoxWithWidePopup { final JdkComboBoxItem firstItem, @Nullable final Condition additionalSetup, final String actionGroupTitle) { - setUpButton.addActionListener(new ActionListener() { + + mySetUpButton = setUpButton; + mySetUpButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DefaultActionGroup group = new DefaultActionGroup(); @@ -199,6 +259,10 @@ public class JdkComboBox extends ComboBoxWithWidePopup { }); } + public JButton getSetUpButton() { + return mySetUpButton; + } + @Override public JdkComboBoxItem getSelectedItem() { return (JdkComboBoxItem)super.getSelectedItem(); 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 b25326d45bf4..aa9bdaa21c14 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 @@ -43,7 +43,7 @@ public abstract class AbstractModuleBuilder extends ProjectBuilder { * Custom UI to be shown on the first wizard page */ @Nullable - public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) { + public ModuleWizardStep getCustomOptionsStep(WizardContext context, 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 6d82f7c2f5ce..4f19cb7bca34 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 @@ -121,7 +121,7 @@ public class GradleModuleBuilder extends AbstractExternalModuleBuilder(this, settingsControl); 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 0e01064df1f2..1561223eaa68 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 @@ -218,7 +218,7 @@ public class MavenModuleBuilder extends ModuleBuilder implements SourcePathsBuil @Nullable @Override - public ModuleWizardStep getCustomOptionsStep(Disposable parentDisposable) { + public ModuleWizardStep getCustomOptionsStep(WizardContext context, Disposable parentDisposable) { MavenArchetypesStep step = new MavenArchetypesStep(this, null); Disposer.register(parentDisposable, step); return step;