mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
ChooseTemplateStep
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.ide.projectWizard.ChooseTemplateStep">
|
||||
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="3" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="500" height="400"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="13f52" class="com.intellij.ui.components.JBRadioButton" binding="myEmptyProjectButton">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<selected value="true"/>
|
||||
<text value="Create &empty project"/>
|
||||
</properties>
|
||||
</component>
|
||||
<hspacer id="35cc7">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</hspacer>
|
||||
<component id="2c81b" class="com.intellij.ui.components.JBRadioButton" binding="myFromTemplateButton">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Create project from &template"/>
|
||||
</properties>
|
||||
</component>
|
||||
<nested-form id="2fbda" form-file="com/intellij/ide/projectWizard/ProjectTemplateList.form" binding="myTemplateList">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="2" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</nested-form>
|
||||
</children>
|
||||
</grid>
|
||||
<buttonGroups>
|
||||
<group name="myGroup">
|
||||
<member id="2c81b"/>
|
||||
<member id="13f52"/>
|
||||
</group>
|
||||
</buttonGroups>
|
||||
</form>
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright 2000-2014 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.projectWizard;
|
||||
|
||||
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
|
||||
import com.intellij.ide.util.projectWizard.WizardContext;
|
||||
import com.intellij.platform.ProjectTemplate;
|
||||
import com.intellij.ui.components.JBRadioButton;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
*/
|
||||
public class ChooseTemplateStep extends ModuleWizardStep {
|
||||
|
||||
private final WizardContext myWizardContext;
|
||||
private final ProjectTypeStep myProjectTypeStep;
|
||||
|
||||
private JPanel myPanel;
|
||||
private JBRadioButton myEmptyProjectButton;
|
||||
private JBRadioButton myFromTemplateButton;
|
||||
private ProjectTemplateList myTemplateList;
|
||||
|
||||
public ChooseTemplateStep(WizardContext wizardContext, ProjectTypeStep projectTypeStep) {
|
||||
myWizardContext = wizardContext;
|
||||
myProjectTypeStep = projectTypeStep;
|
||||
ActionListener listener = new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
updateSelection();
|
||||
}
|
||||
};
|
||||
myEmptyProjectButton.addActionListener(listener);
|
||||
myFromTemplateButton.addActionListener(listener);
|
||||
updateSelection();
|
||||
}
|
||||
|
||||
private void updateSelection() {
|
||||
myTemplateList.setEnabled(myFromTemplateButton.isSelected());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isStepVisible() {
|
||||
return !myProjectTypeStep.getAvailableTemplates().isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent getComponent() {
|
||||
return myPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateStep() {
|
||||
myTemplateList.setTemplates(new ArrayList<ProjectTemplate>(myProjectTypeStep.getAvailableTemplates()), false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDataModel() {
|
||||
if (myFromTemplateButton.isSelected()) {
|
||||
myWizardContext.setProjectTemplate(myTemplateList.getSelectedTemplate());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
* Date: 04.09.13
|
||||
*/
|
||||
public class NewProjectWizard extends AbstractProjectWizard {
|
||||
|
||||
@@ -36,7 +35,9 @@ public class NewProjectWizard extends AbstractProjectWizard {
|
||||
super(project == null ? IdeBundle.message("title.new.project") : IdeBundle.message("title.add.module"), project, defaultPath);
|
||||
myWizardContext.setNewWizard(true);
|
||||
mySequence = new StepSequence();
|
||||
mySequence.addCommonStep(new ProjectTypeStep(myWizardContext, this, modulesProvider));
|
||||
ProjectTypeStep projectTypeStep = new ProjectTypeStep(myWizardContext, this, modulesProvider);
|
||||
mySequence.addCommonStep(projectTypeStep);
|
||||
mySequence.addCommonStep(new ChooseTemplateStep(myWizardContext, projectTypeStep));
|
||||
mySequence.addCommonFinishingStep(new ProjectSettingsStep(myWizardContext), null);
|
||||
for (ModuleWizardStep step : mySequence.getAllSteps()) {
|
||||
addStep(step);
|
||||
|
||||
@@ -17,16 +17,18 @@ package com.intellij.ide.projectWizard;
|
||||
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.ui.popup.ListItemDescriptor;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.platform.ProjectTemplate;
|
||||
import com.intellij.platform.templates.ArchivedProjectTemplate;
|
||||
import com.intellij.ui.CollectionListModel;
|
||||
import com.intellij.ui.ColoredListCellRenderer;
|
||||
import com.intellij.ui.IdeBorderFactory;
|
||||
import com.intellij.ui.components.JBList;
|
||||
import com.intellij.ui.popup.list.GroupedItemsListRenderer;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -54,14 +56,48 @@ public class ProjectTemplateList extends JPanel {
|
||||
super(new BorderLayout());
|
||||
add(myPanel, BorderLayout.CENTER);
|
||||
|
||||
ColoredListCellRenderer<ProjectTemplate> renderer = new ColoredListCellRenderer<ProjectTemplate>() {
|
||||
GroupedItemsListRenderer renderer = new GroupedItemsListRenderer(new ListItemDescriptor<ProjectTemplate>() {
|
||||
@Nullable
|
||||
@Override
|
||||
protected void customizeCellRenderer(JList list, ProjectTemplate template, int index, boolean selected, boolean hasFocus) {
|
||||
append(template.getName());
|
||||
setIcon(template.getIcon());
|
||||
public String getTextFor(ProjectTemplate value) {
|
||||
return value.getName();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getTooltipFor(ProjectTemplate value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Icon getIconFor(ProjectTemplate value) {
|
||||
return value.getIcon();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSeparatorAboveOf(ProjectTemplate value) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getCaptionAboveOf(ProjectTemplate value) {
|
||||
return null;
|
||||
}
|
||||
}) {
|
||||
|
||||
@Override
|
||||
protected void customizeComponent(JList list, Object value, boolean isSelected) {
|
||||
super.customizeComponent(list, value, isSelected);
|
||||
Icon icon = myTextLabel.getIcon();
|
||||
if (icon != null && myTextLabel.getDisabledIcon() == icon) {
|
||||
myTextLabel.setDisabledIcon(IconLoader.getDisabledIcon(icon));
|
||||
}
|
||||
myTextLabel.setEnabled(myList.isEnabled());
|
||||
myTextLabel.setBorder(IdeBorderFactory.createEmptyBorder(3, 3, 3, 3));
|
||||
}
|
||||
};
|
||||
renderer.setBorder(IdeBorderFactory.createEmptyBorder(2, 2, 2, 2));
|
||||
myList.setCellRenderer(renderer);
|
||||
|
||||
myList.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
||||
@@ -103,6 +139,13 @@ public class ProjectTemplateList extends JPanel {
|
||||
return (ProjectTemplate)myList.getSelectedValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEnabled(boolean enabled) {
|
||||
super.setEnabled(enabled);
|
||||
myList.setEnabled(enabled);
|
||||
myDescriptionPane.setEnabled(enabled);
|
||||
}
|
||||
|
||||
void restoreSelection() {
|
||||
final String templateName = PropertiesComponent.getInstance().getValue(PROJECT_WIZARD_TEMPLATE);
|
||||
if (templateName != null && myList.getModel() instanceof CollectionListModel) {
|
||||
|
||||
@@ -218,7 +218,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
|
||||
else {
|
||||
TemplatesGroup group = new TemplatesGroup(builder);
|
||||
groupMap.put(group.getName(), group);
|
||||
myTemplatesMap.put(group, new ArrayList<ProjectTemplate>(Arrays.asList(template)));
|
||||
myTemplatesMap.put(group, new ArrayList<ProjectTemplate>());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,7 +226,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
|
||||
myTemplatesMap.putAllValues(map);
|
||||
|
||||
for (ProjectCategory category : ProjectCategory.EXTENSION_POINT_NAME.getExtensions()) {
|
||||
myTemplatesMap.put(new TemplatesGroup(category), new ArrayList<ProjectTemplate>(Arrays.asList(new ProjectCategoryTemplate(category))));
|
||||
myTemplatesMap.put(new TemplatesGroup(category), new ArrayList<ProjectTemplate>());
|
||||
}
|
||||
|
||||
if (context.isCreatingNewProject()) {
|
||||
@@ -391,28 +391,21 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
|
||||
return (TemplatesGroup)myProjectTypeList.getSelectedValue();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ProjectTemplate getSelectedTemplate() {
|
||||
TemplatesGroup group = getSelectedGroup();
|
||||
if (group == null) return null;
|
||||
if (myCurrentCard == Cards.TEMPLATES) {
|
||||
return myTemplatesList.getSelectedTemplate();
|
||||
}
|
||||
Collection<ProjectTemplate> templates = myTemplatesMap.get(group);
|
||||
if (!templates.isEmpty()) return templates.iterator().next();
|
||||
final ModuleBuilder builder = group.getModuleBuilder();
|
||||
Map.Entry<ProjectTemplate, ModuleBuilder> entry =
|
||||
ContainerUtil.find(myBuilders.entrySet(), new Condition<Map.Entry<ProjectTemplate, ModuleBuilder>>() {
|
||||
@Override
|
||||
public boolean value(Map.Entry<ProjectTemplate, ModuleBuilder> entry) {
|
||||
return entry.getValue() == builder;
|
||||
}
|
||||
});
|
||||
return entry == null ? null : entry.getKey();
|
||||
return myCurrentCard == Cards.TEMPLATES ? myTemplatesList.getSelectedTemplate() : null;
|
||||
}
|
||||
|
||||
private ModuleBuilder getSelectedBuilder() {
|
||||
ProjectTemplate template = getSelectedTemplate();
|
||||
return myBuilders.get(template);
|
||||
if (template != null) {
|
||||
return myBuilders.get(template);
|
||||
}
|
||||
return getSelectedGroup().getModuleBuilder();
|
||||
}
|
||||
|
||||
public Collection<ProjectTemplate> getAvailableTemplates() {
|
||||
return myCurrentCard != Cards.FRAMEWORKS ? Collections.<ProjectTemplate>emptyList() : myTemplatesMap.get(getSelectedGroup());
|
||||
}
|
||||
|
||||
public void onWizardFinished() throws CommitStepException {
|
||||
@@ -462,7 +455,7 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
|
||||
for (int i = 0; i < model.getSize(); i++) {
|
||||
if (group.equals(((TemplatesGroup)model.getElementAt(i)).getName())) {
|
||||
myProjectTypeList.setSelectedIndex(i);
|
||||
if (name == null) return getSelectedTemplate().getName().equals(group);
|
||||
if (name == null) return getSelectedGroup().getName().equals(group);
|
||||
return myTemplatesList.setSelectedTemplate(name);
|
||||
}
|
||||
}
|
||||
@@ -532,8 +525,11 @@ public class ProjectTypeStep extends ModuleWizardStep implements Disposable {
|
||||
ProjectTemplate template = getSelectedTemplate();
|
||||
if (template != null) {
|
||||
myContext.setProjectTemplate(template);
|
||||
ModuleBuilder builder = myBuilders.get(template);
|
||||
myContext.setProjectBuilder(builder);
|
||||
}
|
||||
|
||||
ModuleBuilder builder = getSelectedBuilder();
|
||||
myContext.setProjectBuilder(builder);
|
||||
if (builder != null) {
|
||||
myWizard.getSequence().setType(builder.getBuilderId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.platform.ProjectTemplate;
|
||||
import com.intellij.projectImport.ProjectImportProvider;
|
||||
import com.intellij.testFramework.PlatformTestCase;
|
||||
import com.intellij.util.Consumer;
|
||||
@@ -91,8 +90,6 @@ public abstract class ProjectWizardTestCase<T extends AbstractProjectWizard> ext
|
||||
if (!condition) {
|
||||
throw new IllegalArgumentException(group + "/" + name + " template not found");
|
||||
}
|
||||
ProjectTemplate template = step.getSelectedTemplate();
|
||||
assertNotNull(template);
|
||||
|
||||
if (adjuster != null) {
|
||||
adjuster.consume(step);
|
||||
|
||||
@@ -172,6 +172,7 @@ public class WizardContext extends UserDataHolderBase {
|
||||
|
||||
public void setProjectTemplate(ProjectTemplate projectTemplate) {
|
||||
myProjectTemplate = projectTemplate;
|
||||
setProjectBuilder(projectTemplate.createModuleBuilder());
|
||||
}
|
||||
|
||||
public String getPresentationName() {
|
||||
|
||||
@@ -17,7 +17,6 @@ package org.jetbrains.idea.devkit;
|
||||
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.projectWizard.NewProjectWizardTestCase;
|
||||
import com.intellij.openapi.module.JavaModuleType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -26,7 +25,6 @@ import org.jetbrains.idea.devkit.projectRoots.IdeaJdk;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
* Date: 11/8/12
|
||||
*/
|
||||
public class PluginProjectWizardTest extends NewProjectWizardTestCase {
|
||||
|
||||
@@ -40,7 +38,7 @@ public class PluginProjectWizardTest extends NewProjectWizardTestCase {
|
||||
|
||||
public void testProjectWithoutSdk() throws Exception {
|
||||
try {
|
||||
createProjectFromTemplate(JavaModuleType.JAVA_GROUP, PluginModuleType.getInstance().getName(), null);
|
||||
createProjectFromTemplate(PluginModuleType.getInstance().getName(), null, null);
|
||||
fail("Exception should be thrown");
|
||||
}
|
||||
catch (Exception e) {
|
||||
|
||||
+1
-2
@@ -23,7 +23,6 @@ import com.intellij.util.Consumer;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
* Date: 18.10.13
|
||||
*/
|
||||
public class GradleProjectWizardTest extends NewProjectWizardTestCase {
|
||||
|
||||
@@ -32,7 +31,7 @@ public class GradleProjectWizardTest extends NewProjectWizardTestCase {
|
||||
@Override
|
||||
public void consume(Step step) {
|
||||
if (step instanceof ProjectTypeStep) {
|
||||
assertTrue(((ProjectTypeStep)step).setSelectedTemplate("Java", "Gradle"));
|
||||
assertTrue(((ProjectTypeStep)step).setSelectedTemplate("Gradle", null));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user