package com.mobilesorcery.sdk.ui.internal.launch; import java.text.MessageFormat; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jface.dialogs.IMessageProvider; 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.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import com.mobilesorcery.sdk.core.ILaunchConstants; import com.mobilesorcery.sdk.ui.DefaultMessageProvider; import com.mobilesorcery.sdk.ui.UpdateListener; import com.mobilesorcery.sdk.ui.UpdateListener.IUpdatableControl; import com.mobilesorcery.sdk.ui.launch.IEmulatorLaunchConfigurationPart; public class MoreLauncherPart implements IEmulatorLaunchConfigurationPart { private Text widthText; private Text heightText; private Button useTargetProfile; private Group screenSizeGroup; @Override public void init(ILaunchConfiguration config) throws CoreException { useTargetProfile.setSelection(config.getAttribute( ILaunchConstants.SCREEN_SIZE_OF_TARGET, true)); widthText.setText(config.getAttribute( ILaunchConstants.SCREEN_SIZE_WIDTH, "480")); heightText.setText(config.getAttribute( ILaunchConstants.SCREEN_SIZE_HEIGHT, "320")); } @Override public Composite createControl(Composite parent, IUpdatableControl updatable) { createResolutionEditor(parent, updatable); return screenSizeGroup; } private void createResolutionEditor(Composite control, IUpdatableControl updatable) { screenSizeGroup = new Group(control, SWT.NONE); screenSizeGroup.setText("Screen Size"); screenSizeGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridLayout layout = new GridLayout(2, false); screenSizeGroup.setLayout(layout); useTargetProfile = new Button(screenSizeGroup, SWT.CHECK); useTargetProfile .setText("If possible, &Use Screen Size of Currently Selected Target Profile"); useTargetProfile.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false, 2, 1)); Label widthL = new Label(screenSizeGroup, SWT.NONE); widthL.setText("&Width"); Label heightL = new Label(screenSizeGroup, SWT.NONE); heightL.setText("&Height"); widthText = new Text(screenSizeGroup, SWT.BORDER | SWT.SINGLE); heightText = new Text(screenSizeGroup, SWT.BORDER | SWT.SINGLE); widthText.setLayoutData(new GridData(110, SWT.DEFAULT)); heightText.setLayoutData(new GridData(110, SWT.DEFAULT)); UpdateListener listener = new UpdateListener(updatable); widthText.addListener(SWT.Modify, listener); heightText.addListener(SWT.Modify, listener); useTargetProfile.addListener(SWT.Selection, listener); } @Override public void apply(ILaunchConfigurationWorkingCopy copy) { copy.setAttribute(ILaunchConstants.SCREEN_SIZE_OF_TARGET, useTargetProfile.getSelection()); copy.setAttribute(ILaunchConstants.SCREEN_SIZE_WIDTH, widthText .getText().trim()); copy.setAttribute(ILaunchConstants.SCREEN_SIZE_HEIGHT, heightText .getText().trim()); } @Override public IMessageProvider validate() { IMessageProvider result = null; result = validateInt(widthText.getText(), "Width"); if (result == null) { result = validateInt(heightText.getText(), "Height"); } return result; } private IMessageProvider validateInt(String text, String attrName) { try { Integer.parseInt(text); } catch (Exception e) { return new DefaultMessageProvider(MessageFormat.format("{0} must be an integer", attrName), IMessageProvider.ERROR); } return null; } }