/*******************************************************************************
* Copyright (c) 2012 Pivotal Software, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.gradle.ui.wizards;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.springsource.ide.eclipse.gradle.core.samples.SampleProject;
import org.springsource.ide.eclipse.gradle.core.samples.SampleProjectRegistry;
import org.springsource.ide.eclipse.gradle.core.util.expression.LiveExpression;
import org.springsource.ide.eclipse.gradle.core.validators.ValidationResult;
import org.springsource.ide.eclipse.gradle.core.validators.Validator;
/**
* UI page section that allows user to choose a sample project. The list of
* possible choices is obtained from the {@link SampleProjectRegistry}.
*
* @author Kris De Volder
*/
public class SampleProjectSection extends WizardPageSection {
private static final int SIZING_TEXT_FIELD_WIDTH = 250;
private SampleProjectRegistry samples = SampleProjectRegistry.getInstance();
private Combo sampleProjectField;
private Validator validator;
private LiveExpression<SampleProject> sampleProjectExp = new LiveExpression<SampleProject>(null) {
@Override
protected SampleProject compute() {
if (sampleProjectField!=null) {
String sampleProjectName = sampleProjectField.getText();
return samples.get(sampleProjectName);
}
return null;
}
};
public SampleProjectSection(NewGradleProjectWizardPage owner) {
super(owner);
owner.operation.setSampleProjectField(sampleProjectExp);
this.validator = owner.operation.getSampleProjectValidator();
}
@Override
public LiveExpression<ValidationResult> getValidator() {
return validator;
}
@Override
public void createContents(Composite page) {
Composite group = new Composite(page, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
group.setLayout(layout);
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label projectLabel = new Label(group, SWT.NONE);
projectLabel.setText("Sample project:");
sampleProjectField = new Combo(group, SWT.DROP_DOWN|SWT.READ_ONLY);
sampleProjectField.setItems(getSampleProjectNames());
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.widthHint = SIZING_TEXT_FIELD_WIDTH;
sampleProjectField.setLayoutData(data);
sampleProjectField.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
sampleProjectExp.refresh();
}
});
sampleProjectExp.refresh();
}
private String[] getSampleProjectNames() {
List<SampleProject> sampleProjects = samples.getAll();
String[] names = new String[sampleProjects.size()];
for (int i = 0; i < names.length; i++) {
names[i] = sampleProjects.get(i).getName();
}
return names;
}
}