package com.github.jarlakxen.scala.sbt;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.dialogs.PropertyPage;
import com.github.jarlakxen.scala.sbt.util.UIUtil;
/**
* The property page to configure the SBT project.
*
* @author Naoki Takezoe
*/
public class SbtPropertyPage extends PropertyPage implements IWorkbenchPropertyPage {
private List<Button> sbtRadioButtons;
@Override
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout(2, false));
composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// sbt version
UIUtil.createLabel(composite, "SBT Version:");
Composite group = new Composite(composite, SWT.NULL);
group.setLayout(new GridLayout(2, false));
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
SbtProjectConfiguration config = new SbtProjectConfiguration(getProject());
sbtRadioButtons = new ArrayList<Button>();
for (SbtVersion version : SbtVersion.values()) {
Button sbtRadioButton = new Button(group, SWT.RADIO);
sbtRadioButton.setText("sbt " + version.getPrefix());
sbtRadioButton.setData(version);
if(config.getSbtVersion() == version){
sbtRadioButton.setSelection(true);
}
sbtRadioButtons.add(sbtRadioButton);
}
return composite;
}
public IProject getProject(){
IAdaptable adaptable = getElement();
if(adaptable instanceof IProject){
return (IProject) adaptable;
} else if(adaptable instanceof IJavaProject){
return ((IJavaProject) adaptable).getProject();
}
throw new IllegalStateException("Can't convert to IProject: " + adaptable.getClass());
}
@Override
public boolean performOk() {
SbtProjectConfiguration config = new SbtProjectConfiguration(getProject());
for (Button radio : sbtRadioButtons) {
if (radio.getSelection()) {
config.setSbtVersion((SbtVersion) radio.getData());
}
}
config.saveConfiguration();
return true;
}
@Override
protected void performDefaults() {
sbtRadioButtons.get(sbtRadioButtons.size()-1).setSelection(true);
}
}