mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
framework support panel: initial support for framework group versions
This commit is contained in:
@@ -9,7 +9,7 @@ import java.util.List;
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public abstract class FrameworkGroup {
|
||||
public abstract class FrameworkGroup<V extends FrameworkGroupVersion> {
|
||||
private final String myId;
|
||||
|
||||
public FrameworkGroup(String id) {
|
||||
@@ -28,7 +28,7 @@ public abstract class FrameworkGroup {
|
||||
public abstract Icon getIcon();
|
||||
|
||||
@NotNull
|
||||
public List<String> getGroupVersions() {
|
||||
public List<V> getGroupVersions() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.intellij.framework;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public interface FrameworkGroupVersion {
|
||||
@NotNull String getId();
|
||||
@NotNull String getPresentableName();
|
||||
}
|
||||
@@ -31,7 +31,7 @@ public abstract class FrameworkTypeEx extends FrameworkType {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public FrameworkGroup getParentGroup() {
|
||||
public FrameworkGroup<?> getParentGroup() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
+9
-20
@@ -34,14 +34,11 @@ import com.intellij.openapi.roots.IdeaModifiableModelsProvider;
|
||||
import com.intellij.openapi.roots.ModifiableRootModel;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
|
||||
import com.intellij.openapi.ui.ComboBox;
|
||||
import com.intellij.openapi.ui.Splitter;
|
||||
import com.intellij.openapi.ui.VerticalFlowLayout;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.ui.CheckedTreeNode;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.FormBuilder;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -69,7 +66,7 @@ public class AddSupportForFrameworksPanel implements Disposable {
|
||||
private final JPanel myOptionsPanel;
|
||||
private final FrameworksTree myFrameworksTree;
|
||||
private final Map<FrameworkSupportNode, FrameworkSupportOptionsComponent> myInitializedOptionsComponents = new HashMap<FrameworkSupportNode, FrameworkSupportOptionsComponent>();
|
||||
private final Map<FrameworkGroup, JPanel> myInitializedGroupPanels = new HashMap<FrameworkGroup, JPanel>();
|
||||
private final Map<FrameworkGroup<?>, JPanel> myInitializedGroupPanels = new HashMap<FrameworkGroup<?>, JPanel>();
|
||||
private FrameworkSupportNodeBase myLastSelectedNode;
|
||||
|
||||
public AddSupportForFrameworksPanel(final List<FrameworkSupportInModuleProvider> providers, final FrameworkSupportModelBase model) {
|
||||
@@ -151,7 +148,7 @@ public class AddSupportForFrameworksPanel implements Disposable {
|
||||
frameworkSupportNode.getConfigurable().onFrameworkSelectionChanged(node.isChecked());
|
||||
}
|
||||
else if (node instanceof FrameworkGroupNode) {
|
||||
FrameworkGroup group = ((FrameworkGroupNode)node).getGroup();
|
||||
FrameworkGroup<?> group = ((FrameworkGroupNode)node).getGroup();
|
||||
initializeGroupPanel(group);
|
||||
showCard(group.getId());
|
||||
}
|
||||
@@ -160,19 +157,11 @@ public class AddSupportForFrameworksPanel implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeGroupPanel(FrameworkGroup group) {
|
||||
private void initializeGroupPanel(FrameworkGroup<?> group) {
|
||||
if (!myInitializedGroupPanels.containsKey(group)) {
|
||||
JPanel panel = new JPanel(new VerticalFlowLayout());
|
||||
List<String> versions = group.getGroupVersions();
|
||||
if (!versions.isEmpty()) {
|
||||
ComboBox versionsBox = new ComboBox();
|
||||
for (String version : versions) {
|
||||
versionsBox.addItem(version);
|
||||
}
|
||||
panel.add(FormBuilder.createFormBuilder().addLabeledComponent("Version:", versionsBox).getPanel());
|
||||
}
|
||||
myInitializedGroupPanels.put(group, panel);
|
||||
myOptionsPanel.add(group.getId(), panel);
|
||||
FrameworkGroupOptionsComponent component = new FrameworkGroupOptionsComponent(group, myModel);
|
||||
myInitializedGroupPanels.put(group, component.getMainPanel());
|
||||
myOptionsPanel.add(group.getId(), component.getMainPanel());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,7 +216,7 @@ public class AddSupportForFrameworksPanel implements Disposable {
|
||||
|
||||
private void createNodes() {
|
||||
Map<String, FrameworkSupportNode> nodes = new HashMap<String, FrameworkSupportNode>();
|
||||
Map<FrameworkGroup, FrameworkGroupNode> groups = new HashMap<FrameworkGroup, FrameworkGroupNode>();
|
||||
Map<FrameworkGroup<?>, FrameworkGroupNode> groups = new HashMap<FrameworkGroup<?>, FrameworkGroupNode>();
|
||||
List<FrameworkSupportNodeBase> roots = new ArrayList<FrameworkSupportNodeBase>();
|
||||
for (FrameworkSupportInModuleProvider provider : myProviders) {
|
||||
createNode(provider, nodes, groups, roots);
|
||||
@@ -239,13 +228,13 @@ public class AddSupportForFrameworksPanel implements Disposable {
|
||||
|
||||
@Nullable
|
||||
private FrameworkSupportNode createNode(final FrameworkSupportInModuleProvider provider, final Map<String, FrameworkSupportNode> nodes,
|
||||
final Map<FrameworkGroup, FrameworkGroupNode> groupNodes,
|
||||
final Map<FrameworkGroup<?>, FrameworkGroupNode> groupNodes,
|
||||
List<FrameworkSupportNodeBase> roots) {
|
||||
FrameworkSupportNode node = nodes.get(provider.getFrameworkType().getId());
|
||||
if (node == null) {
|
||||
String underlyingTypeId = provider.getFrameworkType().getUnderlyingFrameworkTypeId();
|
||||
FrameworkSupportNodeBase parentNode = null;
|
||||
final FrameworkGroup group = provider.getFrameworkType().getParentGroup();
|
||||
final FrameworkGroup<?> group = provider.getFrameworkType().getParentGroup();
|
||||
if (underlyingTypeId != null) {
|
||||
FrameworkSupportInModuleProvider parentProvider = FrameworkSupportUtil.findProvider(underlyingTypeId, myProviders);
|
||||
if (parentProvider == null) {
|
||||
|
||||
@@ -9,14 +9,14 @@ import javax.swing.*;
|
||||
* @author nik
|
||||
*/
|
||||
public class FrameworkGroupNode extends FrameworkSupportNodeBase {
|
||||
private final FrameworkGroup myGroup;
|
||||
private final FrameworkGroup<?> myGroup;
|
||||
|
||||
public FrameworkGroupNode(@NotNull FrameworkGroup group, FrameworkSupportNodeBase parent) {
|
||||
public FrameworkGroupNode(@NotNull FrameworkGroup<?> group, FrameworkSupportNodeBase parent) {
|
||||
super(group, parent);
|
||||
myGroup = group;
|
||||
}
|
||||
|
||||
public FrameworkGroup getGroup() {
|
||||
public FrameworkGroup<?> getGroup() {
|
||||
return myGroup;
|
||||
}
|
||||
|
||||
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
package com.intellij.ide.util.newProjectWizard;
|
||||
|
||||
import com.intellij.framework.FrameworkGroup;
|
||||
import com.intellij.framework.FrameworkGroupVersion;
|
||||
import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelBase;
|
||||
import com.intellij.openapi.ui.ComboBox;
|
||||
import com.intellij.openapi.ui.VerticalFlowLayout;
|
||||
import com.intellij.ui.ListCellRendererWrapper;
|
||||
import com.intellij.util.ui.FormBuilder;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class FrameworkGroupOptionsComponent {
|
||||
private final JPanel myMainPanel;
|
||||
|
||||
public FrameworkGroupOptionsComponent(final FrameworkGroup<?> group, final FrameworkSupportModelBase model) {
|
||||
JPanel panel = new JPanel(new VerticalFlowLayout());
|
||||
List<? extends FrameworkGroupVersion> versions = group.getGroupVersions();
|
||||
if (!versions.isEmpty()) {
|
||||
final ComboBox versionsBox = new ComboBox();
|
||||
versionsBox.setRenderer(new ListCellRendererWrapper<FrameworkGroupVersion>() {
|
||||
@Override
|
||||
public void customize(JList list, FrameworkGroupVersion value, int index, boolean selected, boolean hasFocus) {
|
||||
setText(value != null ? value.getPresentableName() : "");
|
||||
}
|
||||
});
|
||||
versionsBox.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
model.setSelectedVersion(group, (FrameworkGroupVersion)versionsBox.getSelectedItem());
|
||||
}
|
||||
});
|
||||
for (FrameworkGroupVersion version : versions) {
|
||||
versionsBox.addItem(version);
|
||||
}
|
||||
panel.add(FormBuilder.createFormBuilder().addLabeledComponent("Version:", versionsBox).getPanel());
|
||||
}
|
||||
myMainPanel = panel;
|
||||
}
|
||||
|
||||
public JPanel getMainPanel() {
|
||||
return myMainPanel;
|
||||
}
|
||||
}
|
||||
+12
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.intellij.ide.util.newProjectWizard.impl;
|
||||
|
||||
import com.intellij.framework.FrameworkGroup;
|
||||
import com.intellij.framework.FrameworkGroupVersion;
|
||||
import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider;
|
||||
import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable;
|
||||
import com.intellij.ide.util.frameworkSupport.FrameworkSupportModel;
|
||||
@@ -46,6 +48,7 @@ public abstract class FrameworkSupportModelBase extends UserDataHolderBase imple
|
||||
private final EventDispatcher<FrameworkSupportModelListener> myDispatcher = EventDispatcher.create(FrameworkSupportModelListener.class);
|
||||
private final Map<String, FrameworkSupportNode> mySettingsMap = new HashMap<String, FrameworkSupportNode>();
|
||||
private final Map<String, FrameworkSupportOptionsComponent> myOptionsComponentsMap = new HashMap<String, FrameworkSupportOptionsComponent>();
|
||||
private final Map<FrameworkGroup<?>, FrameworkGroupVersion> mySelectedVersions = new HashMap<FrameworkGroup<?>, FrameworkGroupVersion>();
|
||||
|
||||
public FrameworkSupportModelBase(final @Nullable Project project, @Nullable ModuleBuilder builder, @NotNull LibrariesContainer librariesContainer) {
|
||||
myProject = project;
|
||||
@@ -123,6 +126,15 @@ public abstract class FrameworkSupportModelBase extends UserDataHolderBase imple
|
||||
return ((OldFrameworkSupportProviderWrapper.FrameworkSupportConfigurableWrapper)node.getConfigurable()).getConfigurable();
|
||||
}
|
||||
|
||||
public void setSelectedVersion(@NotNull FrameworkGroup<?> group, @Nullable FrameworkGroupVersion version) {
|
||||
mySelectedVersions.put(group, version);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public <V extends FrameworkGroupVersion> V getSelectedVersion(@NotNull FrameworkGroup<V> group) {
|
||||
return (V)mySelectedVersions.get(group);
|
||||
}
|
||||
|
||||
public void onFrameworkSelectionChanged(FrameworkSupportNode node) {
|
||||
final FrameworkSupportModelListener multicaster = myDispatcher.getMulticaster();
|
||||
final FrameworkSupportInModuleProvider provider = node.getProvider();
|
||||
|
||||
Reference in New Issue
Block a user