mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
new project wizard: AddSupportForFrameworksPanel reused
This commit is contained in:
@@ -32,7 +32,7 @@ public class NewProjectWizard extends AbstractWizard<Step> {
|
||||
public NewProjectWizard(String title, @Nullable Project project) {
|
||||
super(title, project);
|
||||
myContext = new WizardContext(project);
|
||||
addStep(new ProjectTypeStep(project));
|
||||
addStep(new ProjectTypeStep(project, getDisposable()));
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,10 @@
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<clientProperties>
|
||||
<BorderFactoryClass class="java.lang.String" value="com.intellij.ui.IdeBorderFactory$PlainSmallWithoutIndent"/>
|
||||
</clientProperties>
|
||||
<border type="none" title="Project &Type"/>
|
||||
<children>
|
||||
<scrollpane id="19f6a" class="com.intellij.ui.components.JBScrollPane">
|
||||
<constraints>
|
||||
@@ -36,33 +39,16 @@
|
||||
</scrollpane>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="ad16" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<grid id="ad16" binding="myOptionsPanel" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="e9ba1" binding="myHeader" layout-manager="FlowLayout" hgap="5" vgap="5" flow-align="1">
|
||||
<constraints border-constraint="North"/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children/>
|
||||
</grid>
|
||||
<scrollpane id="1df8b" class="com.intellij.ui.components.JBScrollPane">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="ba7e5" binding="myFrameworksPanel" layout-manager="FlowLayout" hgap="5" vgap="5" flow-align="0">
|
||||
<constraints/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children/>
|
||||
</grid>
|
||||
</children>
|
||||
</scrollpane>
|
||||
</children>
|
||||
<clientProperties>
|
||||
<BorderFactoryClass class="java.lang.String" value="com.intellij.ui.IdeBorderFactory$PlainSmallWithoutIndent"/>
|
||||
</clientProperties>
|
||||
<border type="none" title="O&ptions"/>
|
||||
<children/>
|
||||
</grid>
|
||||
</children>
|
||||
</grid>
|
||||
|
||||
@@ -20,12 +20,14 @@ import com.intellij.framework.FrameworkTypeEx;
|
||||
import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider;
|
||||
import com.intellij.ide.util.frameworkSupport.FrameworkSupportModelImpl;
|
||||
import com.intellij.ide.util.frameworkSupport.FrameworkSupportUtil;
|
||||
import com.intellij.ide.util.newProjectWizard.AddSupportForFrameworksPanel;
|
||||
import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelBase;
|
||||
import com.intellij.ide.wizard.StepAdapter;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory;
|
||||
import com.intellij.openapi.ui.VerticalFlowLayout;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.ui.CollectionListModel;
|
||||
import com.intellij.ui.components.JBList;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
@@ -33,8 +35,10 @@ import com.intellij.util.ArrayUtil;
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -45,13 +49,12 @@ public class ProjectTypeStep extends StepAdapter {
|
||||
|
||||
private JPanel myPanel;
|
||||
private JBList myProjectTypeList;
|
||||
private JPanel myFrameworksPanel;
|
||||
private JPanel myHeader;
|
||||
private JPanel myOptionsPanel;
|
||||
|
||||
private final List<FrameworkPanel> myFrameworks = new ArrayList<FrameworkPanel>();
|
||||
private final AddSupportForFrameworksPanel myFrameworksPanel;
|
||||
private final FrameworkSupportModelBase myModel;
|
||||
|
||||
public ProjectTypeStep(Project project) {
|
||||
public ProjectTypeStep(Project project, Disposable disposable) {
|
||||
|
||||
final LibrariesContainer container = LibrariesContainerFactory.createContainer(project);
|
||||
myModel = new FrameworkSupportModelImpl(project, "", container);
|
||||
@@ -63,27 +66,24 @@ public class ProjectTypeStep extends StepAdapter {
|
||||
updateFrameworks((ProjectCategory)myProjectTypeList.getSelectedValue());
|
||||
}
|
||||
});
|
||||
myProjectTypeList.setSelectedIndex(0);
|
||||
|
||||
myFrameworksPanel.setLayout(new VerticalFlowLayout());
|
||||
myHeader.setLayout(new VerticalFlowLayout());
|
||||
myFrameworksPanel = new AddSupportForFrameworksPanel(Collections.<FrameworkSupportInModuleProvider>emptyList(), myModel, true);
|
||||
Disposer.register(disposable, myFrameworksPanel);
|
||||
|
||||
myOptionsPanel.add(myFrameworksPanel.getMainPanel(), BorderLayout.CENTER);
|
||||
myProjectTypeList.setSelectedIndex(0);
|
||||
}
|
||||
|
||||
private void updateFrameworks(ProjectCategory projectCategory) {
|
||||
myFrameworks.clear();
|
||||
myFrameworksPanel.removeAll();
|
||||
myHeader.removeAll();
|
||||
List<FrameworkSupportInModuleProvider> providers = new ArrayList<FrameworkSupportInModuleProvider>();
|
||||
if (projectCategory != null) {
|
||||
List<FrameworkSupportInModuleProvider> providers = FrameworkSupportUtil.getAllProviders();
|
||||
for (FrameworkSupportInModuleProvider framework : providers) {
|
||||
for (FrameworkSupportInModuleProvider framework : FrameworkSupportUtil.getAllProviders()) {
|
||||
if (matchFramework(projectCategory, framework)) {
|
||||
addFramework(framework, projectCategory);
|
||||
providers.add(framework);
|
||||
}
|
||||
}
|
||||
}
|
||||
myHeader.setVisible(myHeader.getComponentCount() > 0);
|
||||
myPanel.revalidate();
|
||||
myPanel.repaint();
|
||||
myFrameworksPanel.setProviders(providers);
|
||||
}
|
||||
|
||||
private static boolean matchFramework(ProjectCategory projectCategory, FrameworkSupportInModuleProvider framework) {
|
||||
@@ -114,20 +114,6 @@ public class ProjectTypeStep extends StepAdapter {
|
||||
return framework.isEnabledForModuleBuilder(projectCategory.createModuleBuilder());
|
||||
}
|
||||
|
||||
private void addFramework(final FrameworkSupportInModuleProvider framework, ProjectCategory category) {
|
||||
|
||||
FrameworkPanel frameworkPanel;
|
||||
if (ArrayUtil.contains(framework.getFrameworkType().getId(), category.getAssociatedFrameworkIds())) {
|
||||
frameworkPanel = new FrameworkPanel(framework, myModel, true);
|
||||
myHeader.add(frameworkPanel);
|
||||
}
|
||||
else {
|
||||
frameworkPanel = new FrameworkPanel(framework, myModel, false);
|
||||
myFrameworksPanel.add(frameworkPanel);
|
||||
}
|
||||
myFrameworks.add(frameworkPanel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent getComponent() {
|
||||
return myPanel;
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ public class AddFrameworkSupportDialog extends DialogWrapper {
|
||||
myModule = module;
|
||||
final LibrariesContainer container = LibrariesContainerFactory.createContainer(module.getProject());
|
||||
final FrameworkSupportModelBase model = new FrameworkSupportModelImpl(module.getProject(), contentRootPath, container);
|
||||
myAddSupportPanel = new AddSupportForFrameworksPanel(providers, model) {
|
||||
myAddSupportPanel = new AddSupportForFrameworksPanel(providers, model, false) {
|
||||
@Override
|
||||
protected void onFrameworkStateChanged() {
|
||||
setOKActionEnabled(isOKActionEnabled());
|
||||
|
||||
+15
-6
@@ -59,9 +59,11 @@ public class AddSupportForFrameworksPanel implements Disposable {
|
||||
@NonNls private static final String EMPTY_CARD = "empty";
|
||||
private JPanel myMainPanel;
|
||||
private JPanel myFrameworksPanel;
|
||||
|
||||
private List<FrameworkSupportInModuleProvider> myProviders;
|
||||
private List<FrameworkSupportNodeBase> myRoots;
|
||||
|
||||
private final LibrariesContainer myLibrariesContainer;
|
||||
private final List<FrameworkSupportInModuleProvider> myProviders;
|
||||
private final FrameworkSupportModelBase myModel;
|
||||
private final JPanel myOptionsPanel;
|
||||
private final FrameworksTree myFrameworksTree;
|
||||
@@ -69,14 +71,13 @@ public class AddSupportForFrameworksPanel implements Disposable {
|
||||
private final Map<FrameworkGroup<?>, JPanel> myInitializedGroupPanels = new HashMap<FrameworkGroup<?>, JPanel>();
|
||||
private FrameworkSupportNodeBase myLastSelectedNode;
|
||||
|
||||
public AddSupportForFrameworksPanel(final List<FrameworkSupportInModuleProvider> providers, final FrameworkSupportModelBase model) {
|
||||
public AddSupportForFrameworksPanel(final List<FrameworkSupportInModuleProvider> providers,
|
||||
final FrameworkSupportModelBase model, boolean vertical) {
|
||||
myModel = model;
|
||||
myLibrariesContainer = model.getLibrariesContainer();
|
||||
myProviders = providers;
|
||||
createNodes();
|
||||
|
||||
final Splitter splitter = new Splitter(false, 0.30f, 0.1f, 0.7f);
|
||||
myFrameworksTree = new FrameworksTree(myRoots) {
|
||||
final Splitter splitter = new Splitter(vertical, 0.30f, 0.1f, 0.7f);
|
||||
myFrameworksTree = new FrameworksTree() {
|
||||
@Override
|
||||
protected void onNodeStateChanged(CheckedTreeNode node) {
|
||||
if (!(node instanceof FrameworkSupportNode)) return;
|
||||
@@ -91,6 +92,8 @@ public class AddSupportForFrameworksPanel implements Disposable {
|
||||
onFrameworkStateChanged();
|
||||
}
|
||||
};
|
||||
setProviders(providers);
|
||||
|
||||
myFrameworksTree.addTreeSelectionListener(new TreeSelectionListener() {
|
||||
public void valueChanged(TreeSelectionEvent e) {
|
||||
onSelectionChanged();
|
||||
@@ -107,6 +110,12 @@ public class AddSupportForFrameworksPanel implements Disposable {
|
||||
myFrameworksTree.setSelectionRow(0);
|
||||
}
|
||||
|
||||
public void setProviders(List<FrameworkSupportInModuleProvider> providers) {
|
||||
myProviders = providers;
|
||||
createNodes();
|
||||
myFrameworksTree.setRoots(myRoots);
|
||||
}
|
||||
|
||||
protected void onFrameworkStateChanged() {}
|
||||
|
||||
private void onSelectionChanged() {
|
||||
|
||||
@@ -23,9 +23,11 @@ import com.intellij.util.containers.Convertor;
|
||||
import com.intellij.util.ui.tree.TreeUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
import javax.swing.tree.TreePath;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -34,10 +36,20 @@ import java.util.List;
|
||||
public class FrameworksTree extends CheckboxTree {
|
||||
private boolean myProcessingMouseEventOnCheckbox;
|
||||
|
||||
public FrameworksTree() {
|
||||
this(Collections.<FrameworkSupportNodeBase>emptyList());
|
||||
}
|
||||
|
||||
public FrameworksTree(List<FrameworkSupportNodeBase> roots) {
|
||||
super(new FrameworksTreeRenderer(), new FrameworksRootNode(roots), new CheckPolicy(false, true, true, false));
|
||||
setRootVisible(false);
|
||||
setShowsRootHandles(false);
|
||||
putClientProperty("JTree.lineStyle", "None");
|
||||
TreeUtil.expandAll(this);
|
||||
}
|
||||
|
||||
public void setRoots(List<FrameworkSupportNodeBase> roots) {
|
||||
setModel(new DefaultTreeModel(new FrameworksRootNode(roots)));
|
||||
TreeUtil.expandAll(this);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ public class SupportForFrameworksStep extends ModuleWizardStep {
|
||||
myBuilder = builder;
|
||||
List<FrameworkSupportInModuleProvider> providers = FrameworkSupportUtil.getProviders(builder);
|
||||
myFrameworkSupportModel = new FrameworkSupportModelInWizard(librariesContainer, builder);
|
||||
mySupportForFrameworksPanel = new AddSupportForFrameworksPanel(providers, myFrameworkSupportModel);
|
||||
mySupportForFrameworksPanel = new AddSupportForFrameworksPanel(providers, myFrameworkSupportModel, false);
|
||||
myConfigurationUpdater = new ModuleBuilder.ModuleConfigurationUpdater() {
|
||||
public void update(@NotNull final Module module, @NotNull final ModifiableRootModel rootModel) {
|
||||
mySupportForFrameworksPanel.addSupport(module, rootModel);
|
||||
|
||||
@@ -34,19 +34,57 @@ public class CheckboxTreeBase extends Tree {
|
||||
private final CheckPolicy myCheckPolicy;
|
||||
private static final CheckPolicy DEFAULT_POLICY = new CheckPolicy(true, true, false, true);
|
||||
|
||||
public CheckboxTreeBase() {
|
||||
this(new CheckboxTreeCellRendererBase(), null);
|
||||
}
|
||||
|
||||
public CheckboxTreeBase(final CheckboxTreeCellRendererBase cellRenderer, CheckedTreeNode root) {
|
||||
this(cellRenderer, root, DEFAULT_POLICY);
|
||||
}
|
||||
|
||||
public CheckboxTreeBase(final CheckboxTreeCellRendererBase cellRenderer, CheckedTreeNode root, CheckPolicy checkPolicy) {
|
||||
public CheckboxTreeBase(CheckboxTreeCellRendererBase cellRenderer, @Nullable CheckedTreeNode root, CheckPolicy checkPolicy) {
|
||||
myCheckPolicy = checkPolicy;
|
||||
|
||||
setCellRenderer(cellRenderer);
|
||||
setRootVisible(false);
|
||||
setShowsRootHandles(true);
|
||||
setLineStyleAngled();
|
||||
TreeUtil.installActions(this);
|
||||
|
||||
installRenderer(cellRenderer);
|
||||
|
||||
addKeyListener(new KeyAdapter() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if (isToggleEvent(e)) {
|
||||
TreePath treePath = getLeadSelectionPath();
|
||||
if (treePath == null) return;
|
||||
final Object o = treePath.getLastPathComponent();
|
||||
if (!(o instanceof CheckedTreeNode)) return;
|
||||
CheckedTreeNode firstNode = (CheckedTreeNode)o;
|
||||
boolean checked = toggleNode(firstNode);
|
||||
|
||||
TreePath[] selectionPaths = getSelectionPaths();
|
||||
for (int i = 0; selectionPaths != null && i < selectionPaths.length; i++) {
|
||||
final TreePath selectionPath = selectionPaths[i];
|
||||
final Object o1 = selectionPath.getLastPathComponent();
|
||||
if (!(o1 instanceof CheckedTreeNode)) continue;
|
||||
CheckedTreeNode node = (CheckedTreeNode)o1;
|
||||
checkNode(node, checked);
|
||||
((DefaultTreeModel)getModel()).nodeChanged(node);
|
||||
}
|
||||
|
||||
e.consume();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
setSelectionRow(0);
|
||||
if (root != null) {
|
||||
setModel(new DefaultTreeModel(root));
|
||||
}
|
||||
}
|
||||
|
||||
public void installRenderer(final CheckboxTreeCellRendererBase cellRenderer) {
|
||||
setCellRenderer(cellRenderer);
|
||||
new ClickListener() {
|
||||
@Override
|
||||
public boolean onClick(MouseEvent e, int clickCount) {
|
||||
@@ -76,34 +114,6 @@ public class CheckboxTreeBase extends Tree {
|
||||
return false;
|
||||
}
|
||||
}.installOn(this);
|
||||
|
||||
addKeyListener(new KeyAdapter() {
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if (isToggleEvent(e)) {
|
||||
TreePath treePath = getLeadSelectionPath();
|
||||
if (treePath == null) return;
|
||||
final Object o = treePath.getLastPathComponent();
|
||||
if (!(o instanceof CheckedTreeNode)) return;
|
||||
CheckedTreeNode firstNode = (CheckedTreeNode)o;
|
||||
boolean checked = toggleNode(firstNode);
|
||||
|
||||
TreePath[] selectionPaths = getSelectionPaths();
|
||||
for (int i = 0; selectionPaths != null && i < selectionPaths.length; i++) {
|
||||
final TreePath selectionPath = selectionPaths[i];
|
||||
final Object o1 = selectionPath.getLastPathComponent();
|
||||
if (!(o1 instanceof CheckedTreeNode)) continue;
|
||||
CheckedTreeNode node = (CheckedTreeNode)o1;
|
||||
checkNode(node, checked);
|
||||
((DefaultTreeModel)getModel()).nodeChanged(node);
|
||||
}
|
||||
|
||||
e.consume();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
setSelectionRow(0);
|
||||
setModel(new DefaultTreeModel(root));
|
||||
}
|
||||
|
||||
protected void onDoubleClick(final CheckedTreeNode node) {
|
||||
@@ -282,7 +292,7 @@ public class CheckboxTreeBase extends Tree {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static abstract class CheckboxTreeCellRendererBase extends JPanel implements TreeCellRenderer {
|
||||
public static class CheckboxTreeCellRendererBase extends JPanel implements TreeCellRenderer {
|
||||
private final ColoredTreeCellRenderer myTextRenderer;
|
||||
public final JCheckBox myCheckbox;
|
||||
private final boolean myUsePartialStatusForParentNodes;
|
||||
@@ -402,7 +412,7 @@ public class CheckboxTreeBase extends Tree {
|
||||
}
|
||||
|
||||
|
||||
public static enum NodeState {
|
||||
public enum NodeState {
|
||||
FULL, CLEAR, PARTIAL
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,11 @@ public class CheckboxTree extends CheckboxTreeBase {
|
||||
|
||||
installSpeedSearch();
|
||||
}
|
||||
|
||||
// for designer
|
||||
public CheckboxTree() {
|
||||
}
|
||||
|
||||
public CheckboxTree(final CheckboxTreeCellRenderer cellRenderer, CheckedTreeNode root, final CheckPolicy checkPolicy) {
|
||||
super(cellRenderer, root, checkPolicy);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user