blob: 43def6b4061ec45247dd1f57836bf110fed93e69 [file] [log] [blame]
package com.intellij.ide.util.newProjectWizard;
import com.intellij.framework.FrameworkVersion;
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.ArrayList;
import java.util.List;
/**
* @author nik
*/
public class FrameworkVersionComponent {
private final JPanel myMainPanel;
private final FrameworkSupportModelBase myModel;
private final List<? extends FrameworkVersion> myAllVersions;
private final JPanel myVersionsPanel;
private final ComboBox myVersionsBox;
private final String myFrameworkOrGroupId;
public FrameworkVersionComponent(final FrameworkSupportModelBase model, final String frameworkOrGroupId,
final List<? extends FrameworkVersion> versions_, String labelText) {
myModel = model;
myAllVersions = versions_;
myMainPanel = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 3, true, false));
myFrameworkOrGroupId = frameworkOrGroupId;
myVersionsBox = new ComboBox();
myVersionsBox.setRenderer(new ListCellRendererWrapper<FrameworkVersion>() {
@Override
public void customize(JList list, FrameworkVersion value, int index, boolean selected, boolean hasFocus) {
setText(value != null ? value.getPresentableName() : "");
}
});
myVersionsBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FrameworkVersion selectedVersion = getSelectedVersion();
if (selectedVersion != null) {
model.setSelectedVersion(frameworkOrGroupId, selectedVersion);
}
}
});
myVersionsPanel = FormBuilder.createFormBuilder().setHorizontalGap(5).addLabeledComponent(labelText, myVersionsBox).getPanel();
myMainPanel.add(myVersionsPanel);
updateVersionsList();
}
private FrameworkVersion getSelectedVersion() {
return (FrameworkVersion)myVersionsBox.getSelectedItem();
}
public JPanel getMainPanel() {
return myMainPanel;
}
public void updateVersionsList() {
FrameworkVersion oldSelection = getSelectedVersion();
List<? extends FrameworkVersion> versions = computeAvailableVersions();
myVersionsBox.removeAllItems();
for (FrameworkVersion version : versions) {
myVersionsBox.addItem(version);
}
myVersionsPanel.setVisible(!versions.isEmpty());
if (!versions.isEmpty()) {
FrameworkVersion toSelect = oldSelection != null && versions.contains(oldSelection) ? oldSelection : versions.get(versions.size() - 1);
myVersionsBox.setSelectedItem(toSelect);
myModel.setSelectedVersion(myFrameworkOrGroupId, toSelect);
}
}
private List<FrameworkVersion> computeAvailableVersions() {
List<FrameworkVersion> versions = new ArrayList<FrameworkVersion>();
for (FrameworkVersion version : myAllVersions) {
if (version.getAvailabilityCondition().isAvailableFor(myModel)) {
versions.add(version);
}
}
return versions;
}
}