package com.mobilesorcery.sdk.builder.iphoneos.ui.properties;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import com.mobilesorcery.sdk.builder.iphoneos.Activator;
import com.mobilesorcery.sdk.builder.iphoneos.PropertyInitializer;
import com.mobilesorcery.sdk.builder.iphoneos.SDK;
import com.mobilesorcery.sdk.builder.iphoneos.XCodeBuild;
import com.mobilesorcery.sdk.core.PropertyUtil;
import com.mobilesorcery.sdk.ui.MoSyncPropertyPage;
import com.mobilesorcery.sdk.ui.MosyncUIPlugin;
public class IPhoneOSSSDKPropertyPage extends MoSyncPropertyPage {
private static final Object AUTOMATIC_SDK = "@auto";
private ComboViewer iOSSDKs;
private ComboViewer iOSSimulatorSDKs;
class SDKLabelProvider extends LabelProvider {
private final int sdkType;
public SDKLabelProvider(int sdkType) {
this.sdkType = sdkType;
}
@Override
public String getText(Object element) {
if (element == AUTOMATIC_SDK) {
SDK sdk = XCodeBuild.getDefault().getDefaultSDK(sdkType);
return MessageFormat.format("Automatic ({0})", sdk.getName());
} else {
return ((SDK) element).getName();
}
}
}
public IPhoneOSSSDKPropertyPage() {
super(true);
XCodeBuild.getDefault().refresh();
}
@Override
protected Control createContents(Composite parent) {
Composite main = new Composite(parent, SWT.NONE);
main.setLayout(new GridLayout(2, false));
Label iOSLabel = new Label(main, SWT.NONE);
iOSLabel.setText("iOS SDK");
iOSSDKs = createSDKCombo(main, XCodeBuild.IOS_SDKS);
Label iOSSimulatorLabel = new Label(main, SWT.NONE);
iOSSimulatorLabel.setText("iOS Simulator SDK");
iOSSimulatorSDKs = createSDKCombo(main, XCodeBuild.IOS_SIMULATOR_SDKS);
Label infoLabel = new Label(main, SWT.WRAP);
infoLabel.setFont(MosyncUIPlugin.getDefault().getFont(MosyncUIPlugin.FONT_INFO_TEXT));
infoLabel.setText("Select which iOS SDKs to use for building.\nThe iOS Simulator SDK selected will be used for building for and launching the iPhone Simulator");
infoLabel.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1));
return main;
}
private ComboViewer createSDKCombo(Composite parent, int sdkType) {
ComboViewer combo = new ComboViewer(parent);
List<SDK> listSDKs = XCodeBuild.getDefault().listSDKs(sdkType);
combo.setContentProvider(new ArrayContentProvider());
combo.setLabelProvider(new SDKLabelProvider(sdkType));
ArrayList<Object> sdksPlusAuto = new ArrayList<Object>();
sdksPlusAuto.add(AUTOMATIC_SDK);
sdksPlusAuto.addAll(listSDKs);
combo.setInput(sdksPlusAuto);
boolean useAuto = PropertyUtil.getBoolean(getProject(), sdkType == XCodeBuild.IOS_SDKS ? PropertyInitializer.IOS_SDK_AUTO : PropertyInitializer.IOS_SIM_SDK_AUTO);
SDK sdk = Activator.getDefault().getSDK(getProject(), sdkType);
Object selected = useAuto ? AUTOMATIC_SDK : sdk;
if (selected != null) {
combo.setSelection(new StructuredSelection(selected), true);
}
return combo;
}
private void setToAutomatic(ComboViewer combo) {
combo.setSelection(new StructuredSelection(AUTOMATIC_SDK), true);
}
@Override
public boolean performOk() {
updateProperties(iOSSDKs, XCodeBuild.IOS_SDKS);
updateProperties(iOSSimulatorSDKs, XCodeBuild.IOS_SIMULATOR_SDKS);
return super.performOk();
}
@Override
public void performDefaults() {
// Default is automatic...
setToAutomatic(iOSSDKs);
setToAutomatic(iOSSimulatorSDKs);
}
private void updateProperties(ComboViewer sdkCombo, int sdkType) {
IStructuredSelection selection = (IStructuredSelection) sdkCombo.getSelection();
Object element = selection.getFirstElement();
boolean auto = element == AUTOMATIC_SDK;
SDK sdk = auto ? null : (SDK) element;
Activator.getDefault().setSDK(getProject(), sdkType, sdk, auto);
}
}