/*
* Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved.
*
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License, Version 1.0,
* which accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
*/
package net.rim.ejde.internal.ui.launchers;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import net.rim.ejde.internal.core.ContextManager;
import net.rim.ejde.internal.core.IConstants;
import net.rim.ejde.internal.core.RimIDEUtil;
import net.rim.ejde.internal.launching.DeviceInfo;
import net.rim.ejde.internal.launching.FledgeLaunchConfigurationDelegate.LaunchParams;
import net.rim.ejde.internal.launching.IFledgeLaunchConstants;
import net.rim.ejde.internal.ui.CompositeFactory;
import net.rim.ejde.internal.util.Messages;
import net.rim.ejde.internal.validation.ValidationUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.WordUtils;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.plugin.AbstractUIPlugin;
/**
* Tab to configure the simulator. Overridden by both the external eJDE and the internal eJDE plug-in fragment to add extended
* behavior.
*/
public abstract class SimulatorConfigurationTabBase extends AbstractLaunchConfigurationTab implements IFledgeLaunchConstants,
PropertyChangeListener {
protected static final Logger _logger = Logger.getLogger( SimulatorConfigurationTab.class );
protected TabFolder _tabFolder;
private GeneralTab _generalTab;
private DebuggingTab _debuggingTab;
private AdvancedTab _advancedTab;
private MemoryTab _memoryTab;
private NetworkTab _networkTab;
private PortsTab _portsTab;
private ViewTab _viewTab;
protected boolean _initializingForm;
private ILaunchConfiguration _configuration;
static SimulatorConfigurationTabBase _thisInst;
/**
* Default constructor.
*/
public SimulatorConfigurationTabBase() {
_thisInst = this;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse .swt.widgets.Composite)
*/
public void createControl( Composite parent ) {
Composite mainComposite = new Composite( parent, SWT.NONE );
mainComposite.setLayout( new GridLayout() );
GridData fillData = new GridData( GridData.FILL_BOTH );
mainComposite.setLayoutData( fillData );
buildProfileUI( mainComposite );
setControl( mainComposite );
}
/**
* Build the simulator profile UI from RIA
*
* @param profileName
*/
protected void buildProfileUI( Composite parent ) {
_tabFolder = new TabFolder( parent, SWT.NONE );
_tabFolder.setLayoutData( new GridData( GridData.FILL_BOTH ) );
// general tab
_generalTab = new GeneralTab();
Control generalControl = _generalTab.createControl( _tabFolder, SWT.V_SCROLL | SWT.H_SCROLL );
GridData data = new GridData( GridData.FILL_BOTH );
generalControl.setLayoutData( data );
TabItem tab1 = new TabItem( _tabFolder, SWT.BORDER );
tab1.setText( Messages.SimulatorConfigurationTab_generalTabLabel );
tab1.setControl( generalControl );
// debugging tab
_debuggingTab = new DebuggingTab();
Control debugControl = _debuggingTab.createControl( _tabFolder, SWT.V_SCROLL | SWT.H_SCROLL );
debugControl.setLayoutData( new GridData( GridData.FILL_BOTH ) );
TabItem tab2 = new TabItem( _tabFolder, SWT.BORDER );
tab2.setText( Messages.SimulatorConfigurationTab_debuggingTabLabel );
tab2.setControl( debugControl );
// memory tab
_memoryTab = new MemoryTab();
Control memoryControl = _memoryTab.createControl( _tabFolder, SWT.V_SCROLL | SWT.H_SCROLL );
memoryControl.setLayoutData( new GridData( GridData.FILL_BOTH ) );
TabItem tab3 = new TabItem( _tabFolder, SWT.BORDER );
tab3.setText( Messages.SimulatorConfigurationTab_memoryTabLabel );
tab3.setControl( memoryControl );
// network tab
_networkTab = new NetworkTab();
Control networkControl = _networkTab.createControl( _tabFolder, SWT.V_SCROLL | SWT.H_SCROLL );
networkControl.setLayoutData( new GridData( GridData.FILL_BOTH ) );
TabItem tab4 = new TabItem( _tabFolder, SWT.BORDER );
tab4.setText( Messages.SimulatorConfigurationTab_networkTabLabel );
tab4.setControl( networkControl );
// ports tab
_portsTab = new PortsTab();
Control portsControl = _portsTab.createControl( _tabFolder, SWT.V_SCROLL | SWT.H_SCROLL );
portsControl.setLayoutData( new GridData( GridData.FILL_BOTH ) );
TabItem tab5 = new TabItem( _tabFolder, SWT.BORDER );
tab5.setText( Messages.SimulatorConfigurationTab_portsTabLabel );
tab5.setControl( portsControl );
// view tab
_viewTab = new ViewTab();
Control viewControl = _viewTab.createControl( _tabFolder, SWT.V_SCROLL | SWT.H_SCROLL );
viewControl.setLayoutData( new GridData( GridData.FILL_BOTH ) );
TabItem tab6 = new TabItem( _tabFolder, SWT.BORDER );
tab6.setText( Messages.SimulatorConfigurationTab_viewTabLabel );
tab6.setControl( viewControl );
// advanced tab
_advancedTab = new AdvancedTab();
Control advancedControl = _advancedTab.createControl( _tabFolder, SWT.V_SCROLL | SWT.H_SCROLL );
advancedControl.setLayoutData( new GridData( GridData.FILL_BOTH ) );
final TabItem advancedTabItem = new TabItem( _tabFolder, SWT.BORDER );
advancedTabItem.setText( Messages.SimulatorConfigurationTab_advancedTabLabel );
advancedTabItem.setControl( advancedControl );
_tabFolder.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
if( e.item == advancedTabItem ) {
LaunchParams param = new LaunchParams( _configuration );
_advancedTab.setDefaultCommandLine( param.getDefaultCommandLine() );
_advancedTab.setDefaultWorkingDirectory( param.getDefaultWorkingdir() );
_advancedTab.setDefaultMDSDirectory( param.getDefaultMDSPath() );
}
}
} );
}
/*
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
*/
public String getName() {
return Messages.SimulatorConfigurationTab_tabName;
}
/**
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage()
*/
public Image getImage() {
ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin( ContextManager.PLUGIN_ID, "icons"
+ File.separator + "obj16" + File.separator + "fledge.gif" );
final Image image = imageDescriptor.createImage();
return image;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse .debug.core.ILaunchConfiguration)
*/
public void initializeFrom( ILaunchConfiguration configuration ) {
_configuration = configuration;
if( _generalTab != null ) {
_generalTab.initialize( configuration );
}
if( _debuggingTab != null ) {
_debuggingTab.initialize( configuration );
}
if( _memoryTab != null ) {
_memoryTab.initialize( configuration );
}
if( _networkTab != null ) {
_networkTab.initialize( configuration );
}
if( _portsTab != null ) {
_portsTab.initialize( configuration );
}
if( _viewTab != null ) {
_viewTab.initialize( configuration );
}
if( _advancedTab != null ) {
_advancedTab.initialize( configuration );
}
}
/*
* Note: this method is called whenever a modification is made to the run-time copy of the current launch configuration. It is
* not just called when Apply is clicked. (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse .debug.core.ILaunchConfigurationWorkingCopy)
*/
public void performApply( ILaunchConfigurationWorkingCopy configuration ) {
_generalTab.performApply( configuration );
_debuggingTab.performApply( configuration );
_memoryTab.performApply( configuration );
_networkTab.performApply( configuration );
_portsTab.performApply( configuration );
_viewTab.performApply( configuration );
_advancedTab.performApply( configuration );
}
/*
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse. debug.core.ILaunchConfigurationWorkingCopy)
*/
public void setDefaults( ILaunchConfigurationWorkingCopy configuration ) {
if( _generalTab != null ) {
_generalTab.initialize( configuration );
}
if( _debuggingTab != null ) {
_debuggingTab.initialize( configuration );
}
if( _memoryTab != null ) {
_memoryTab.initialize( configuration );
}
if( _advancedTab != null ) {
_advancedTab.initialize( configuration );
}
}
public void propertyChange( PropertyChangeEvent evt ) {
if( !_initializingForm ) {
_generalTab.propertyChanged();
_memoryTab.propertyChanged();
updateLaunchConfigurationDialog();
}
}
@Override
public boolean canSave() {
return isValid( _configuration );
}
@Override
public boolean isValid( ILaunchConfiguration configuration ) {
try {
// time to wait before automatic response is selected
boolean useDefaultValue = configuration.getAttribute(
IFledgeLaunchConstants.ATTR_GENERAL_AUTOMATICALLY_USE_DEFAULT_VALUE, false );
if( useDefaultValue ) {
String timeToWait = _configuration.getAttribute(
IFledgeLaunchConstants.ATTR_GENERAL_NUMBER_OF_SECONDS_WAIT_BEFORE_RESPONSE, StringUtils.EMPTY );
if( !ValidationUtils.isPostiveInteger( timeToWait ) ) {
setErrorMessage( NLS.bind( Messages.SimulatorConfigurationTab_invalidValue,
Messages.SimulatorConfigurationTab_generalTabLabel,
Messages.SimulatorConfigurationTab_General_timeToWait ) );
return false;
}
}
// heap size
String heapSize = configuration.getAttribute( IFledgeLaunchConstants.ATTR_MEMORY_APPLICATION_HEAP_SIZE,
StringUtils.EMPTY );
if( heapSize.length() > 0 && !ValidationUtils.isPostiveInteger( heapSize ) ) {
setErrorMessage( NLS.bind( Messages.SimulatorConfigurationTab_invalidValue,
Messages.SimulatorConfigurationTab_memoryTabLabel, Messages.SimulatorConfigurationTab_Memory_HeapSize ) );
return false;
}
// file system size
String fileSystemSize = configuration.getAttribute( IFledgeLaunchConstants.ATTR_MEMORY_FILE_SYSTEM_SIZE,
StringUtils.EMPTY );
if( fileSystemSize.length() > 0 && !ValidationUtils.isPostiveInteger( fileSystemSize ) ) {
setErrorMessage( NLS.bind( Messages.SimulatorConfigurationTab_invalidValue,
Messages.SimulatorConfigurationTab_memoryTabLabel,
Messages.SimulatorConfigurationTab_Memory_fileSystemSize ) );
return false;
}
// SD card size
String sdCardSize = configuration.getAttribute( IFledgeLaunchConstants.ATTR_MEMORY_SDCARD_SIZE, StringUtils.EMPTY );
if( sdCardSize.length() > 0 && !ValidationUtils.isPostiveInteger( sdCardSize ) ) {
setErrorMessage( NLS.bind( Messages.SimulatorConfigurationTab_invalidValue,
Messages.SimulatorConfigurationTab_memoryTabLabel, Messages.SimulatorConfigurationTab_Memory_sdSize ) );
return false;
}
// SMS source port
String smsSrcPort = configuration.getAttribute( IFledgeLaunchConstants.ATTR_NETWORK_SMS_SOURCE_PORT,
StringUtils.EMPTY );
if( smsSrcPort.length() > 0 && !ValidationUtils.isPostiveInteger( smsSrcPort ) ) {
setErrorMessage( NLS.bind( Messages.SimulatorConfigurationTab_invalidValue,
Messages.SimulatorConfigurationTab_networkTabLabel, Messages.SimulatorConfigurationTab_Network_smsSource ) );
return false;
}
// SMS destination port
String smsDstPort = configuration.getAttribute( IFledgeLaunchConstants.ATTR_NETWORK_SMS_DESTINATION_PORT,
StringUtils.EMPTY );
if( smsDstPort.length() > 0 && !ValidationUtils.isPostiveInteger( smsDstPort ) ) {
setErrorMessage( NLS.bind( Messages.SimulatorConfigurationTab_invalidValue,
Messages.SimulatorConfigurationTab_networkTabLabel,
Messages.SimulatorConfigurationTab_Network_smsDestination ) );
return false;
}
// PDE port
String pdePort = configuration.getAttribute( IFledgeLaunchConstants.ATTR_NETWORK_PDE_PORT, StringUtils.EMPTY );
if( pdePort.length() > 0 && !ValidationUtils.isPostiveInteger( pdePort ) ) {
setErrorMessage( NLS.bind( Messages.SimulatorConfigurationTab_invalidValue,
Messages.SimulatorConfigurationTab_networkTabLabel, Messages.SimulatorConfigurationTab_Network_pde ) );
return false;
}
// Blue tooth test board port
String blueToothPort = configuration.getAttribute( IFledgeLaunchConstants.ATTR_PORTS_BLUETOOTH_PORT,
StringUtils.EMPTY );
if( blueToothPort.length() > 0 && !ValidationUtils.isPostiveInteger( blueToothPort ) ) {
setErrorMessage( NLS.bind( Messages.SimulatorConfigurationTab_invalidValue,
Messages.SimulatorConfigurationTab_portsTabLabel, Messages.SimulatorConfigurationTab_Port_bluetoothPort ) );
return false;
}
} catch( CoreException e ) {
_logger.error( e );
setErrorMessage( e.getMessage() );
return false;
}
setMessage( null );
setErrorMessage( null );
return true;
}
private class GeneralTab {
private Button _launchMDSCSCheckbox;
private Text _launchAppOnStartupText;
private ComboViewer _deviceCombo;
private Button _autoDefaultCheckbox;
private Text _timeToWaitText;
private Text _pinText;
private Text _esnText;
private Text _meidText;
private Button _enableSecurityCheckbox;
private Text _systemLocaleText;
private Text _keypadLocaleText;
private IVMInstall _currentVM;
public void initialize( ILaunchConfiguration config ) {
try {
_launchMDSCSCheckbox.setSelection( config.getAttribute( ATTR_GENERAL_LAUNCH_MDSCS, false ) );
_launchAppOnStartupText.setText( config.getAttribute( ATTR_GENERAL_LAUNCH_APP_ON_STARTUP, "" ) );
_autoDefaultCheckbox.setSelection( config.getAttribute( ATTR_GENERAL_AUTOMATICALLY_USE_DEFAULT_VALUE, false ) );
_timeToWaitText.setText( config.getAttribute( ATTR_GENERAL_NUMBER_OF_SECONDS_WAIT_BEFORE_RESPONSE, "0" ) );
_timeToWaitText.setEnabled( _autoDefaultCheckbox.getSelection() );
_pinText.setText( config.getAttribute( ATTR_GENERAL_PIN, IFledgeLaunchConstants.DEFAULT_PIN_NUMBER ) );
_esnText.setText( config.getAttribute( ATTR_GENERAL_ESN, StringUtils.EMPTY ) );
_meidText.setText( config.getAttribute( ATTR_GENERAL_MEID, StringUtils.EMPTY ) );
_enableSecurityCheckbox.setSelection( config.getAttribute( ATTR_GENERAL_ENABLE_DEVICE_SECURITY, false ) );
_systemLocaleText.setText( config.getAttribute( ATTR_GENERAL_SYSTEM_LOCALE, StringUtils.EMPTY ) );
_keypadLocaleText.setText( config.getAttribute( ATTR_GENERAL_KEYBOARD_LOCALE, StringUtils.EMPTY ) );
IVMInstall newVM = LaunchUtils.getVMFromConfiguration( config );
if( newVM != null ) {
List< DeviceInfo > devices = LaunchUtils.getDevicesInfo( newVM );
_deviceCombo.setInput( devices );
if( devices.size() > 0 ) {
if( _currentVM == null || newVM == _currentVM ) {
String simDir = config.getAttribute( ATTR_GENERAL_SIM_DIR, StringUtils.EMPTY );
String bundle = config.getAttribute( ATTR_GENERAL_BUNDLE, StringUtils.EMPTY );
String device = config.getAttribute( ATTR_GENERAL_DEVICE, StringUtils.EMPTY );
String configFileName = config.getAttribute( ATTR_GENERAL_CONFIG_FILE, StringUtils.EMPTY );
DeviceInfo di = new DeviceInfo( bundle, device, simDir, configFileName );
if( devices.contains( di ) ) {
_deviceCombo.setSelection( new StructuredSelection( di ) );
} else {
_deviceCombo.setSelection( new StructuredSelection( LaunchUtils.getDefaultDeviceInfo( newVM ) ) );
}
} else {
_deviceCombo.setSelection( new StructuredSelection( LaunchUtils.getDefaultDeviceInfo( newVM ) ) );
}
}
}
_currentVM = newVM;
} catch( CoreException e ) {
_logger.error( "", e );
}
}
/**
* Creates the control.
*
* @param parent
* The parent composite
* @param stule
* The style
*/
public Control createControl( Composite parent, int style ) {
ScrolledComposite mainComposite = new ScrolledComposite( parent, style );
mainComposite.setExpandVertical( true );
mainComposite.setExpandHorizontal( true );
Composite scrollable = CompositeFactory.gridComposite( mainComposite, 1, 5, 5 );
// launch MDS-CS checkbox
_launchMDSCSCheckbox = createCheckbox( scrollable, SWT.CHECK, Messages.SimulatorConfigurationTab_General_launchMDSCS,
null, SimulatorConfigurationTabBase.this );
// launch app or URL on startup
_launchAppOnStartupText = createText( scrollable, Messages.SimulatorConfigurationTab_General_launchApp, null,
SimulatorConfigurationTabBase.this );
// device
final Label label = new Label( scrollable, SWT.NONE | SWT.WRAP );
label.setText( Messages.SimulatorConfigurationTab_General_device );
_deviceCombo = new ComboViewer( scrollable );
GridData gridData = new GridData( GridData.FILL_HORIZONTAL );
_deviceCombo.getCombo().setLayoutData( gridData );
_deviceCombo.setContentProvider( new DeviceComboContentProvider() );
_deviceCombo.setLabelProvider( new DeviceComboLabelProvider() );
_deviceCombo.addSelectionChangedListener( new ISelectionChangedListener() {
public void selectionChanged( SelectionChangedEvent event ) {
if( !_initializingForm ) {
_generalTab.propertyChanged();
_memoryTab.propertyChanged();
updateLaunchConfigurationDialog();
}
}
} );
// automatically use default value for all prompts
_autoDefaultCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_General_autoUseDefaultValue, null, SimulatorConfigurationTabBase.this );
// Specify the number of seconds to wait before the automated response is selected.
_timeToWaitText = createText( scrollable, Messages.SimulatorConfigurationTab_General_timeToWait, null,
SimulatorConfigurationTabBase.this );
// PIN
_pinText = createText( scrollable, Messages.SimulatorConfigurationTab_General_pin, null,
SimulatorConfigurationTabBase.this );
// ESN
_esnText = createText( scrollable, Messages.SimulatorConfigurationTab_General_esn, null,
SimulatorConfigurationTabBase.this );
// MEID
_meidText = createText( scrollable, Messages.SimulatorConfigurationTab_General_meid,
Messages.SimulatorConfigurationTab_General_meidTooltip, SimulatorConfigurationTabBase.this );
// Enable device security
_enableSecurityCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_General_enableDeviceSecurity,
Messages.SimulatorConfigurationTab_General_enableDeviceSecurityTooltip, SimulatorConfigurationTabBase.this );
// System locale
_systemLocaleText = createText( scrollable, Messages.SimulatorConfigurationTab_General_systemLocale,
Messages.SimulatorConfigurationTab_General_systemLocaleTooltip, SimulatorConfigurationTabBase.this );
// Keypad locale
_keypadLocaleText = createText( scrollable, Messages.SimulatorConfigurationTab_General_keyboardLocale,
Messages.SimulatorConfigurationTab_General_keyboardLocaleTooltip, SimulatorConfigurationTabBase.this );
mainComposite.setContent( scrollable );
mainComposite.setMinSize( scrollable.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
return mainComposite;
}
public void performApply( ILaunchConfigurationWorkingCopy configuration ) {
IVMInstall newVM = LaunchUtils.getVMFromConfiguration( configuration );
if( newVM == _currentVM ) {
final IStructuredSelection selection = (IStructuredSelection) _deviceCombo.getSelection();
DeviceInfo di = (DeviceInfo) selection.getFirstElement();
if( di != null ) {
configuration.setAttribute( ATTR_GENERAL_SIM_DIR, di.getDirectory() );
configuration.setAttribute( ATTR_GENERAL_BUNDLE, di.getBundleName() );
configuration.setAttribute( ATTR_GENERAL_DEVICE, di.getDeviceName() );
configuration.setAttribute( ATTR_GENERAL_CONFIG_FILE, di.getConfigName() );
}
} else {
configuration.setAttribute( ATTR_GENERAL_BUNDLE, IFledgeLaunchConstants.DEFAULT_SIMULATOR_BUNDLE_NAME );
String defaultDeviceName = LaunchUtils.getDefaultDeviceInfo( newVM ).getDeviceName();
configuration.setAttribute( ATTR_GENERAL_DEVICE, defaultDeviceName );
configuration.setAttribute( ATTR_GENERAL_CONFIG_FILE, defaultDeviceName );
configuration.setAttribute( ATTR_GENERAL_SIM_DIR, StringUtils.EMPTY );
_currentVM = newVM;
}
configuration.setAttribute( ATTR_GENERAL_LAUNCH_MDSCS, _launchMDSCSCheckbox.getSelection() );
configuration.setAttribute( ATTR_GENERAL_LAUNCH_APP_ON_STARTUP, _launchAppOnStartupText.getText() );
configuration.setAttribute( ATTR_GENERAL_AUTOMATICALLY_USE_DEFAULT_VALUE, _autoDefaultCheckbox.getSelection() );
configuration.setAttribute( ATTR_GENERAL_NUMBER_OF_SECONDS_WAIT_BEFORE_RESPONSE, _timeToWaitText.getText() );
configuration.setAttribute( ATTR_GENERAL_PIN, _pinText.getText() );
configuration.setAttribute( ATTR_GENERAL_ESN, _esnText.getText() );
configuration.setAttribute( ATTR_GENERAL_MEID, _meidText.getText() );
configuration.setAttribute( ATTR_GENERAL_ENABLE_DEVICE_SECURITY, _enableSecurityCheckbox.getSelection() );
configuration.setAttribute( ATTR_GENERAL_SYSTEM_LOCALE, _systemLocaleText.getText() );
configuration.setAttribute( ATTR_GENERAL_KEYBOARD_LOCALE, _keypadLocaleText.getText() );
}
/**
* Callback metod indicating some properties are changed
*/
public void propertyChanged() {
_timeToWaitText.setEnabled( _autoDefaultCheckbox.getSelection() );
}
}
private class DebuggingTab {
private Button _interruptDebuggerCheckbox;
private Button _notStopExecutionCheckbox;
/**
* Creates the control.
*
* @param parent
* The parent composite
* @param stule
* The style
*/
public Control createControl( Composite parent, int style ) {
ScrolledComposite mainComposite = new ScrolledComposite( parent, style );
mainComposite.setExpandVertical( true );
mainComposite.setExpandHorizontal( true );
Composite scrollable = CompositeFactory.gridComposite( mainComposite, 1, 5, 5 );
_interruptDebuggerCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Debugging_interrupt, null, SimulatorConfigurationTabBase.this );
_notStopExecutionCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Debugging_nonStopExecution, null, SimulatorConfigurationTabBase.this );
mainComposite.setContent( scrollable );
mainComposite.setMinSize( scrollable.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
return mainComposite;
}
public void initialize( ILaunchConfiguration config ) {
try {
_interruptDebuggerCheckbox.setSelection( config.getAttribute( ATTR_DEBUG_INTERRUPT_DEBUGGER_ON_DEADLOCK, false ) );
_notStopExecutionCheckbox.setSelection( config.getAttribute( ATTR_DEBUG_DO_NOT_STOP_EXECUTION, false ) );
} catch( CoreException e ) {
_logger.error( "", e );
}
}
public void performApply( ILaunchConfigurationWorkingCopy configuration ) {
configuration.setAttribute( ATTR_DEBUG_INTERRUPT_DEBUGGER_ON_DEADLOCK, _interruptDebuggerCheckbox.getSelection() );
configuration.setAttribute( ATTR_DEBUG_DO_NOT_STOP_EXECUTION, _notStopExecutionCheckbox.getSelection() );
}
}
private class MemoryTab {
private Text _heapSizeText;
private Text _brandingDataText;
private Button _resetFileSystemCheckbox;
private Button _resetNVRAMCheckbox;
private Text _fileSystemSizeText;
private Button _notSaveFlashCheckbox;
private Button _notCompactFSCheckbox;
private Button _simSDInsertCheckbox;
private Button _destroyExistingSDImageCheckbox;
private Text _sdCardSizeText;
private Text _sdCardImageText;
private Button _sdCardImageButton;
private Button _usePCForSDCardCheckbox;
private Text _pcFileSystemPathText;
private Button _pcFileSystemPathButton;
/**
* Creates the control.
*
* @param parent
* The parent composite
* @param stule
* The style
*/
public Control createControl( Composite parent, int style ) {
ScrolledComposite mainComposite = new ScrolledComposite( parent, style );
mainComposite.setExpandVertical( true );
mainComposite.setExpandHorizontal( true );
Composite scrollable = CompositeFactory.gridComposite( mainComposite, 1, 5, 5 );
// application heap size
_heapSizeText = createText( scrollable, Messages.SimulatorConfigurationTab_Memory_HeapSize, null,
SimulatorConfigurationTabBase.this );
// branding data
TextButtonWrapper wrapper = createTextBrowse( scrollable, Messages.SimulatorConfigurationTab_Memory_brandingData,
null, SimulatorConfigurationTabBase.this, BROWSE_DIALOG_TYPE_OPEN_FILE );
_brandingDataText = wrapper._text;
// reset file system on startup
_resetFileSystemCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Memory_resetFileSystem,
Messages.SimulatorConfigurationTab_Memory_resetFileSystemTooltip, SimulatorConfigurationTabBase.this );
// reset NVRAM on startup
_resetNVRAMCheckbox = createCheckbox( scrollable, SWT.CHECK, Messages.SimulatorConfigurationTab_Memory_resetNVRam,
Messages.SimulatorConfigurationTab_Memory_resetNVRamTooltip, SimulatorConfigurationTabBase.this );
// filesystem size
_fileSystemSizeText = createText( scrollable, Messages.SimulatorConfigurationTab_Memory_fileSystemSize,
Messages.SimulatorConfigurationTab_Memory_fileSystemSizeTooltip, SimulatorConfigurationTabBase.this );
// Do not save flash data on simulator exit
_notSaveFlashCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Memory_notSaveFlash, null, SimulatorConfigurationTabBase.this );
// Do not compact filesystem on exit
_notCompactFSCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Memory_notCompactFS, null, SimulatorConfigurationTabBase.this );
// Destroy existing SD Card image
_destroyExistingSDImageCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Memory_destroyExistingSD,
Messages.SimulatorConfigurationTab_Memory_destroyExistingSDTooltip, SimulatorConfigurationTabBase.this );
// Simulate SD Card inserted
_simSDInsertCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Memory_simulate_SD_Inserted, null, SimulatorConfigurationTabBase.this );
_simSDInsertCheckbox.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
if( _simSDInsertCheckbox.getSelection() ) {
_usePCForSDCardCheckbox.setSelection( false );
_pcFileSystemPathText.setEnabled( false );
_pcFileSystemPathButton.setEnabled( false );
}
}
} );
// SD Card image
wrapper = createTextBrowse( scrollable, Messages.SimulatorConfigurationTab_Memory_sdImage, null,
SimulatorConfigurationTabBase.this, BROWSE_DIALOG_TYPE_OPEN_FILE );
_sdCardImageText = wrapper._text;
_sdCardImageButton = wrapper._button;
// SD Card size
_sdCardSizeText = createText( scrollable, Messages.SimulatorConfigurationTab_Memory_sdSize,
Messages.SimulatorConfigurationTab_Memory_sdSizeTooltip, SimulatorConfigurationTabBase.this );
// use PC filesystem for SD Card files
_usePCForSDCardCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Memory_usePCForSD, null, SimulatorConfigurationTabBase.this );
_usePCForSDCardCheckbox.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
if( _usePCForSDCardCheckbox.getSelection() ) {
_simSDInsertCheckbox.setSelection( false );
_sdCardSizeText.setEnabled( false );
_sdCardImageText.setEnabled( false );
_sdCardImageButton.setEnabled( false );
}
}
} );
// PC filesystem path
wrapper = createTextBrowse( scrollable, Messages.SimulatorConfigurationTab_Memory_pcFileSystem,
Messages.SimulatorConfigurationTab_Memory_pcFileSystemTooltip, SimulatorConfigurationTabBase.this,
BROWSE_DIALOG_TYPE_SELECT_DIR );
_pcFileSystemPathText = wrapper._text;
_pcFileSystemPathButton = wrapper._button;
mainComposite.setContent( scrollable );
mainComposite.setMinSize( scrollable.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
return mainComposite;
}
public void initialize( ILaunchConfiguration config ) {
try {
_heapSizeText.setText( config.getAttribute( ATTR_MEMORY_APPLICATION_HEAP_SIZE, IConstants.EMPTY_STRING ) );
_brandingDataText.setText( config.getAttribute( ATTR_MEMORY_BRANDING_DATA, IConstants.EMPTY_STRING ) );
_resetFileSystemCheckbox.setSelection( config.getAttribute( ATTR_MEMORY_RESET_FILE_SYSTEM_ON_STARTUP, false ) );
_resetNVRAMCheckbox.setSelection( config.getAttribute( ATTR_MEMORY_RESET_NVRAM_ON_STARTUP, false ) );
_fileSystemSizeText.setText( config.getAttribute( ATTR_MEMORY_FILE_SYSTEM_SIZE, IConstants.EMPTY_STRING ) );
_notSaveFlashCheckbox.setSelection( config.getAttribute( ATTR_MEMORY_NOT_SAVE_FLASH_ON_EXIT, false ) );
_notCompactFSCheckbox.setSelection( config.getAttribute( ATTR_MEMORY_NOT_COMPACT_FILE_SYSTEM_ON_EXIT, false ) );
_destroyExistingSDImageCheckbox.setSelection( config.getAttribute( ATTR_MEMORY_DESTROY_EXISTING_SDCARD_IMAGE,
false ) );
_simSDInsertCheckbox.setSelection( config.getAttribute( ATTR_MEMORY_SIMULATE_SDCARD_INSERTED, false ) );
_sdCardSizeText.setText( config.getAttribute( ATTR_MEMORY_SDCARD_SIZE, IConstants.EMPTY_STRING ) );
_sdCardSizeText.setEnabled( _simSDInsertCheckbox.getSelection() );
_sdCardImageText.setText( config.getAttribute( ATTR_MEMORY_SDCARD_IMAGE, IConstants.EMPTY_STRING ) );
_sdCardImageText.setEnabled( _simSDInsertCheckbox.getSelection() );
_sdCardImageButton.setEnabled( _simSDInsertCheckbox.getSelection() );
_usePCForSDCardCheckbox
.setSelection( config.getAttribute( ATTR_MEMORY_USE_PC_FILESYSTEM_FOR_SDCARD_FILES, false ) );
_pcFileSystemPathText.setText( config.getAttribute( ATTR_MEMORY_PC_FILESYSTEM_PATH, IConstants.EMPTY_STRING ) );
_pcFileSystemPathText.setEnabled( _usePCForSDCardCheckbox.getSelection() );
_pcFileSystemPathButton.setEnabled( _usePCForSDCardCheckbox.getSelection() );
} catch( CoreException e ) {
_logger.error( e );
}
}
public void performApply( ILaunchConfigurationWorkingCopy configuration ) {
configuration.setAttribute( ATTR_MEMORY_APPLICATION_HEAP_SIZE, _heapSizeText.getText() );
configuration.setAttribute( ATTR_MEMORY_BRANDING_DATA, _brandingDataText.getText() );
configuration.setAttribute( ATTR_MEMORY_RESET_FILE_SYSTEM_ON_STARTUP, _resetFileSystemCheckbox.getSelection() );
configuration.setAttribute( ATTR_MEMORY_RESET_NVRAM_ON_STARTUP, _resetNVRAMCheckbox.getSelection() );
configuration.setAttribute( ATTR_MEMORY_FILE_SYSTEM_SIZE, _fileSystemSizeText.getText() );
configuration.setAttribute( ATTR_MEMORY_NOT_SAVE_FLASH_ON_EXIT, _notSaveFlashCheckbox.getSelection() );
configuration.setAttribute( ATTR_MEMORY_NOT_COMPACT_FILE_SYSTEM_ON_EXIT, _notCompactFSCheckbox.getSelection() );
configuration.setAttribute( ATTR_MEMORY_SIMULATE_SDCARD_INSERTED, _simSDInsertCheckbox.getSelection() );
configuration
.setAttribute( ATTR_MEMORY_DESTROY_EXISTING_SDCARD_IMAGE, _destroyExistingSDImageCheckbox.getSelection() );
configuration.setAttribute( ATTR_MEMORY_SDCARD_SIZE, _sdCardSizeText.getText() );
configuration.setAttribute( ATTR_MEMORY_SDCARD_IMAGE, _sdCardImageText.getText() );
configuration.setAttribute( ATTR_MEMORY_USE_PC_FILESYSTEM_FOR_SDCARD_FILES, _usePCForSDCardCheckbox.getSelection() );
configuration.setAttribute( ATTR_MEMORY_PC_FILESYSTEM_PATH, _pcFileSystemPathText.getText().trim() );
}
/**
* Callback metod indicating some properties are changed
*/
public void propertyChanged() {
_pcFileSystemPathText.setEnabled( _usePCForSDCardCheckbox.getSelection() );
_pcFileSystemPathButton.setEnabled( _usePCForSDCardCheckbox.getSelection() );
_sdCardSizeText.setEnabled( _simSDInsertCheckbox.getSelection() );
_sdCardImageText.setEnabled( _simSDInsertCheckbox.getSelection() );
_sdCardImageButton.setEnabled( _simSDInsertCheckbox.getSelection() );
}
}
private class NetworkTab {
private Button _disableRegistrationCheckbox;
private org.eclipse.swt.widgets.List _networkList;
private Button _startWithRadioOffCheckbox;
private org.eclipse.swt.widgets.List _phoneNumberList;
private Button _autoAnswerOutgoingCallCheckbox;
private Text _imeiText;
private Text _iccidText;
private Text _imsiText;
private Button _simSIMNotPresentCheckbox;
private Text _ipAddressText;
private Button _ignoreUDPPortConflictCheckbox;
private Text _smsSrcPortText;
private Text _smsDestPortText;
private Text _pdePortText;
/**
* Creates the control.
*
* @param parent
* The parent composite
* @param stule
* The style
*/
public Control createControl( Composite parent, int style ) {
ScrolledComposite mainComposite = new ScrolledComposite( parent, style );
mainComposite.setExpandVertical( true );
mainComposite.setExpandHorizontal( true );
Composite scrollable = CompositeFactory.gridComposite( mainComposite, 1, 5, 5 );
// disable registration
_disableRegistrationCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Network_disableRegistration, null, SimulatorConfigurationTabBase.this );
// network
_networkList = createList( scrollable, Messages.SimulatorConfigurationTab_Network_networks,
Messages.SimulatorConfigurationTab_Network_networksTooltip );
// start with radio off
_startWithRadioOffCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Network_startWithRadioOff, null, SimulatorConfigurationTabBase.this );
// phone number
_phoneNumberList = createList( scrollable, Messages.SimulatorConfigurationTab_Network_phoneNumbers, "" );
// automatically answer outgoing calls
_autoAnswerOutgoingCallCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Network_autoAnswerOutgoingCall, null, SimulatorConfigurationTabBase.this );
// IMEI
_imeiText = createText( scrollable, Messages.SimulatorConfigurationTab_Network_imei, null,
SimulatorConfigurationTabBase.this );
// ICCID (GPRS)
_iccidText = createText( scrollable, Messages.SimulatorConfigurationTab_Network_iccid, null,
SimulatorConfigurationTabBase.this );
// IMSI (GPRS)
_imsiText = createText( scrollable, Messages.SimulatorConfigurationTab_Network_imsi, null,
SimulatorConfigurationTabBase.this );
// simulate SIM not present
_simSIMNotPresentCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Network_simulateSIMNotPresent, null, SimulatorConfigurationTabBase.this );
// IP address
_ipAddressText = createText( scrollable, Messages.SimulatorConfigurationTab_Network_ipAddress,
Messages.SimulatorConfigurationTab_Network_ipAddressTooltip, SimulatorConfigurationTabBase.this );
// ignore UDP port conflicts
_ignoreUDPPortConflictCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Network_ignoreUDPConflict,
Messages.SimulatorConfigurationTab_Network_ignoreUDPConflictTooltip, SimulatorConfigurationTabBase.this );
// SMS source port
_smsSrcPortText = createText( scrollable, Messages.SimulatorConfigurationTab_Network_smsSource,
Messages.SimulatorConfigurationTab_Network_smsSourceTooltip, SimulatorConfigurationTabBase.this );
// SMS destination port
_smsDestPortText = createText( scrollable, Messages.SimulatorConfigurationTab_Network_smsDestination,
Messages.SimulatorConfigurationTab_Network_smsDestinationTooltip, SimulatorConfigurationTabBase.this );
// PDE port
_pdePortText = createText( scrollable, Messages.SimulatorConfigurationTab_Network_pde,
Messages.SimulatorConfigurationTab_Network_pdeTooltip, SimulatorConfigurationTabBase.this );
mainComposite.setContent( scrollable );
mainComposite.setMinSize( scrollable.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
return mainComposite;
}
@SuppressWarnings("unchecked")
public void initialize( ILaunchConfiguration config ) {
try {
_disableRegistrationCheckbox.setSelection( config.getAttribute( ATTR_NETWORK_DISABLE_REGISTRATION, true ) );
List< String > networks = config.getAttribute( ATTR_NETWORK_NETWORKS, Collections.EMPTY_LIST );
_networkList.setItems( networks.toArray( new String[ 0 ] ) );
_startWithRadioOffCheckbox.setSelection( config.getAttribute( ATTR_NETWORK_START_WITH_RADIO_OFF, false ) );
List< String > phones = config.getAttribute( ATTR_NETWORK_PHONE_NUMBERS, Collections.EMPTY_LIST );
_phoneNumberList.setItems( phones.toArray( new String[ 0 ] ) );
_autoAnswerOutgoingCallCheckbox
.setSelection( config.getAttribute( ATTR_NETWORK_AUTO_ANSWER_OUTGOING_CALL, false ) );
_imeiText.setText( config.getAttribute( ATTR_NETWORK_IMEI, "" ) );
_iccidText.setText( config.getAttribute( ATTR_NETWORK_ICCID, "" ) );
_imsiText.setText( config.getAttribute( ATTR_NETWORK_IMSI, "" ) );
_simSIMNotPresentCheckbox.setSelection( config.getAttribute( ATTR_NETWORK_SIMULATE_SIM_NOT_PRESENT, false ) );
_ipAddressText.setText( config.getAttribute( ATTR_NETWORK_IP_ADDRESS, "" ) );
_ignoreUDPPortConflictCheckbox.setSelection( config.getAttribute( ATTR_NETWORK_IGNORE_UDP_PORT_CONFLICT, false ) );
_smsSrcPortText.setText( config.getAttribute( ATTR_NETWORK_SMS_SOURCE_PORT, "" ) );
_smsDestPortText.setText( config.getAttribute( ATTR_NETWORK_SMS_DESTINATION_PORT, "" ) );
_pdePortText.setText( config.getAttribute( ATTR_NETWORK_PDE_PORT, "" ) );
} catch( CoreException e ) {
_logger.error( "", e );
}
}
public void performApply( ILaunchConfigurationWorkingCopy configuration ) {
configuration.setAttribute( ATTR_NETWORK_DISABLE_REGISTRATION, _disableRegistrationCheckbox.getSelection() );
configuration.setAttribute( ATTR_NETWORK_NETWORKS, Arrays.asList( _networkList.getItems() ) );
configuration.setAttribute( ATTR_NETWORK_START_WITH_RADIO_OFF, _startWithRadioOffCheckbox.getSelection() );
configuration.setAttribute( ATTR_NETWORK_PHONE_NUMBERS, Arrays.asList( _phoneNumberList.getItems() ) );
configuration.setAttribute( ATTR_NETWORK_AUTO_ANSWER_OUTGOING_CALL, _autoAnswerOutgoingCallCheckbox.getSelection() );
configuration.setAttribute( ATTR_NETWORK_IMEI, _imeiText.getText() );
configuration.setAttribute( ATTR_NETWORK_ICCID, _iccidText.getText() );
configuration.setAttribute( ATTR_NETWORK_IMSI, _imsiText.getText() );
configuration.setAttribute( ATTR_NETWORK_SIMULATE_SIM_NOT_PRESENT, _simSIMNotPresentCheckbox.getSelection() );
configuration.setAttribute( ATTR_NETWORK_IP_ADDRESS, _ipAddressText.getText() );
configuration.setAttribute( ATTR_NETWORK_IGNORE_UDP_PORT_CONFLICT, _ignoreUDPPortConflictCheckbox.getSelection() );
configuration.setAttribute( ATTR_NETWORK_SMS_SOURCE_PORT, _smsSrcPortText.getText() );
configuration.setAttribute( ATTR_NETWORK_SMS_DESTINATION_PORT, _smsDestPortText.getText() );
configuration.setAttribute( ATTR_NETWORK_PDE_PORT, _pdePortText.getText() );
}
}
private class PortsTab {
private Button _usbCableConnectedCheckbox;
private Text _bluetoothPortText;
/**
* Creates the control.
*
* @param parent
* The parent composite
* @param stule
* The style
*/
public Control createControl( Composite parent, int style ) {
ScrolledComposite mainComposite = new ScrolledComposite( parent, style );
mainComposite.setExpandVertical( true );
mainComposite.setExpandHorizontal( true );
Composite scrollable = CompositeFactory.gridComposite( mainComposite, 1, 5, 5 );
// USB cable connected
_usbCableConnectedCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Port_usbConnected,
Messages.SimulatorConfigurationTab_Port_usbConnectedTooltip, SimulatorConfigurationTabBase.this );
// Bluetooth test board port
_bluetoothPortText = createText( scrollable, Messages.SimulatorConfigurationTab_Port_bluetoothPort,
Messages.SimulatorConfigurationTab_Port_bluetoothPortTooltip, SimulatorConfigurationTabBase.this );
mainComposite.setContent( scrollable );
mainComposite.setMinSize( scrollable.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
return mainComposite;
}
public void initialize( ILaunchConfiguration config ) {
try {
_usbCableConnectedCheckbox.setSelection( config.getAttribute( ATTR_PORTS_USB_CONNECTED, false ) );
_bluetoothPortText.setText( config.getAttribute( ATTR_PORTS_BLUETOOTH_PORT, "" ) );
} catch( CoreException e ) {
_logger.error( "", e );
}
}
public void performApply( ILaunchConfigurationWorkingCopy configuration ) {
configuration.setAttribute( ATTR_PORTS_USB_CONNECTED, _usbCableConnectedCheckbox.getSelection() );
configuration.setAttribute( ATTR_PORTS_BLUETOOTH_PORT, _bluetoothPortText.getText() );
}
}
private class ViewTab {
private Button _disableBacklightAutoOffCheckbox;
private Button _hideNetworkInfoCheckbox;
private Button _lcdOnlyCheckbox;
private Combo _lcdZoomCombo;
private Button _keyMappingCheckbox;
/**
* Creates the control.
*
* @param parent
* The parent composite
* @param stule
* The style
*/
public Control createControl( Composite parent, int style ) {
ScrolledComposite mainComposite = new ScrolledComposite( parent, style );
mainComposite.setExpandVertical( true );
mainComposite.setExpandHorizontal( true );
Composite scrollable = CompositeFactory.gridComposite( mainComposite, 1, 5, 5 );
// disable automatic backlight shutoff
_disableBacklightAutoOffCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_View_disableBacklightOff,
Messages.SimulatorConfigurationTab_View_disableBacklightOffTooltip, SimulatorConfigurationTabBase.this );
// hide network-specific information
_hideNetworkInfoCheckbox = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_View_hideNetworkInfo,
Messages.SimulatorConfigurationTab_View_hideNetworkInfoTooltip, SimulatorConfigurationTabBase.this );
// display LCD only
_lcdOnlyCheckbox = createCheckbox( scrollable, SWT.CHECK, Messages.SimulatorConfigurationTab_View_lcdOnly, null,
SimulatorConfigurationTabBase.this );
// LCD zoom
String choices[] = { "Default", "0.5", "1", "2", "3", "4", "" };
_lcdZoomCombo = createCombo( scrollable, Messages.SimulatorConfigurationTab_View_lcdZoom,
Messages.SimulatorConfigurationTab_View_lcdZoomTooltip, SimulatorConfigurationTabBase.this );
_lcdZoomCombo.setItems( choices );
// do not show help for key mapping
_keyMappingCheckbox = createCheckbox( scrollable, SWT.CHECK, Messages.SimulatorConfigurationTab_View_keyMapping,
Messages.SimulatorConfigurationTab_View_keyMappingTooltip, SimulatorConfigurationTabBase.this );
mainComposite.setContent( scrollable );
mainComposite.setMinSize( scrollable.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
return mainComposite;
}
public void initialize( ILaunchConfiguration config ) {
try {
_disableBacklightAutoOffCheckbox.setSelection( config.getAttribute( ATTR_VIEW_DISABLE_AUTO_BACKLIGHT_SHUTOFF,
false ) );
_hideNetworkInfoCheckbox.setSelection( config.getAttribute( ATTR_VIEW_HIDE_NETWORK_INFORMATION, false ) );
_lcdOnlyCheckbox.setSelection( config.getAttribute( ATTR_VIEW_DISPLAY_LCD_ONLY, false ) );
_lcdZoomCombo.setText( config.getAttribute( ATTR_VIEW_LCD_ZOOM, "" ) );
_keyMappingCheckbox.setSelection( config.getAttribute( ATTR_VIEW_NOT_SHOW_HELP_FOR_KEY_MAPPING, false ) );
} catch( CoreException e ) {
_logger.error( "", e );
}
}
public void performApply( ILaunchConfigurationWorkingCopy configuration ) {
configuration
.setAttribute( ATTR_VIEW_DISABLE_AUTO_BACKLIGHT_SHUTOFF, _disableBacklightAutoOffCheckbox.getSelection() );
configuration.setAttribute( ATTR_VIEW_HIDE_NETWORK_INFORMATION, _hideNetworkInfoCheckbox.getSelection() );
configuration.setAttribute( ATTR_VIEW_DISPLAY_LCD_ONLY, _lcdOnlyCheckbox.getSelection() );
configuration.setAttribute( ATTR_VIEW_LCD_ZOOM, _lcdZoomCombo.getText() );
configuration.setAttribute( ATTR_VIEW_NOT_SHOW_HELP_FOR_KEY_MAPPING, _keyMappingCheckbox.getSelection() );
}
}
private class AdvancedTab {
private Button _simBatteryButton;
private Button _numPadButton;
private Text _defaultCommandLineText;
private Text _defaultWorkingDirectoryText;
private Text _defaultMDSDirectoryText;
private Button _customizedCommandCheckButton;
private Text _customizedCommandLineText;
private TextButtonWrapper _customizedWorkingDirectoryText;
private TextButtonWrapper _customizedMDSDirectoryText;
public void initialize( ILaunchConfiguration config ) {
try {
_simBatteryButton.setSelection( config.getAttribute( ATTR_ADVANCED_NOT_SIMULATE_RIM_BATTERY, false ) );
_numPadButton.setSelection( config.getAttribute( ATTR_ADVANCED_NOT_USE_PC_NUMPAD_FOR_TRACKBALL, false ) );
enableCustomizedOptions( config.getAttribute( ATTR_USE_CUSTOMIZED_COMMAND_LINE, false ) );
enableDefaultOptions( !config.getAttribute( ATTR_USE_CUSTOMIZED_COMMAND_LINE, false ) );
_customizedCommandLineText.setText( config.getAttribute( ATTR_CUSTOMIZED_COMMAND_LINE, StringUtils.EMPTY ) );
_customizedWorkingDirectoryText._text.setText( config.getAttribute( ATTR_CUSTOMIZED_WORKING_DIRECTORY,
StringUtils.EMPTY ) );
_customizedMDSDirectoryText._text
.setText( config.getAttribute( ATTR_CUSTOMIZED_MDS_DIRECTORY, StringUtils.EMPTY ) );
} catch( CoreException e ) {
_logger.error( "", e );
}
}
private void enableCustomizedOptions( boolean enabled ) {
_customizedCommandCheckButton.setSelection( enabled );
_customizedCommandLineText.setEnabled( enabled );
_customizedWorkingDirectoryText._text.setEnabled( enabled );
_customizedWorkingDirectoryText._button.setEnabled( enabled );
_customizedMDSDirectoryText._text.setEnabled( enabled );
_customizedMDSDirectoryText._button.setEnabled( enabled );
}
private void enableDefaultOptions( boolean enabled ) {
_defaultCommandLineText.setEnabled( enabled );
_defaultWorkingDirectoryText.setEnabled( enabled );
_defaultMDSDirectoryText.setEnabled( enabled );
}
/**
* Creates the control.
*
* @param parent
* The parent composite
* @param stule
* The style
*/
public Control createControl( Composite parent, int style ) {
ScrolledComposite mainComposite = new ScrolledComposite( parent, style );
mainComposite.setExpandVertical( true );
mainComposite.setExpandHorizontal( true );
Composite scrollable = CompositeFactory.gridComposite( mainComposite, 1, 5, 5 );
_simBatteryButton = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Advanced_simulateBattery, null, SimulatorConfigurationTabBase.this );
_simBatteryButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
updateCommandLine();
}
} );
_numPadButton = createCheckbox( scrollable, SWT.CHECK, Messages.SimulatorConfigurationTab_Advanced_numPad,
Messages.SimulatorConfigurationTab_Advanced_numPadTooltip, SimulatorConfigurationTabBase.this );
_numPadButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
updateCommandLine();
}
} );
// default command line
_defaultCommandLineText = createText( scrollable, Messages.SimulatorConfigurationTab_Advanced_default_commandLine,
null, SimulatorConfigurationTabBase.this );
_defaultCommandLineText.setEditable( false );
_defaultWorkingDirectoryText = createText( scrollable,
Messages.SimulatorConfigurationTab_Advanced_default_workingdirectory, null,
SimulatorConfigurationTabBase.this );
_defaultWorkingDirectoryText.setEditable( false );
_defaultMDSDirectoryText = createText( scrollable, Messages.SimulatorConfigurationTab_Advanced_default_MDSdirectory,
null, SimulatorConfigurationTabBase.this );
_defaultMDSDirectoryText.setEditable( false );
// customized command line
_customizedCommandCheckButton = createCheckbox( scrollable, SWT.CHECK,
Messages.SimulatorConfigurationTab_Advanced_customized_options, null, SimulatorConfigurationTabBase.this );
_customizedCommandCheckButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
if( e.getSource() != _customizedCommandCheckButton ) {
return;
}
enableCustomizedOptions( _customizedCommandCheckButton.getSelection() );
enableDefaultOptions( !_customizedCommandCheckButton.getSelection() );
if( _customizedCommandCheckButton.getSelection() ) {
// if the customized command or working directory are empty, set the default command and working directory
// as their default value
if( StringUtils.isEmpty( _customizedCommandLineText.getText() ) ) {
_customizedCommandLineText.setText( _defaultCommandLineText.getText() );
}
if( StringUtils.isEmpty( _customizedWorkingDirectoryText._text.getText() ) ) {
_customizedWorkingDirectoryText._text.setText( _defaultWorkingDirectoryText.getText() );
}
if( StringUtils.isEmpty( _customizedMDSDirectoryText._text.getText() ) ) {
_customizedMDSDirectoryText._text.setText( _defaultMDSDirectoryText.getText() );
}
}
}
} );
_customizedCommandLineText = createText( scrollable,
Messages.SimulatorConfigurationTab_Advanced_customized_commandLine, null, SimulatorConfigurationTabBase.this );
_customizedWorkingDirectoryText = createTextBrowse( scrollable,
Messages.SimulatorConfigurationTab_Advanced_customized_workingdirectory, null,
SimulatorConfigurationTabBase.this, BROWSE_DIALOG_TYPE_SELECT_DIR );
_customizedMDSDirectoryText = createTextBrowse( scrollable,
Messages.SimulatorConfigurationTab_Advanced_customized_MDSdirectory, null,
SimulatorConfigurationTabBase.this, BROWSE_DIALOG_TYPE_SELECT_DIR );
mainComposite.setContent( scrollable );
mainComposite.setMinSize( scrollable.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
return mainComposite;
}
public void performApply( ILaunchConfigurationWorkingCopy configuration ) {
configuration.setAttribute( ATTR_ADVANCED_NOT_SIMULATE_RIM_BATTERY, _simBatteryButton.getSelection() );
configuration.setAttribute( ATTR_ADVANCED_NOT_USE_PC_NUMPAD_FOR_TRACKBALL, _numPadButton.getSelection() );
configuration.setAttribute( ATTR_USE_CUSTOMIZED_COMMAND_LINE, _customizedCommandCheckButton.getSelection() );
configuration.setAttribute( ATTR_CUSTOMIZED_COMMAND_LINE, _customizedCommandLineText.getText() );
configuration.setAttribute( ATTR_CUSTOMIZED_WORKING_DIRECTORY, _customizedWorkingDirectoryText._text.getText() );
configuration.setAttribute( ATTR_CUSTOMIZED_MDS_DIRECTORY, _customizedMDSDirectoryText._text.getText() );
}
public void setDefaultCommandLine( String commandLine ) {
_defaultCommandLineText.setText( commandLine );
}
public void setDefaultWorkingDirectory( String workingDirectory ) {
_defaultWorkingDirectoryText.setText( workingDirectory );
}
public void setDefaultMDSDirectory( String MDSDirectory ) {
_defaultMDSDirectoryText.setText( MDSDirectory );
}
private void updateCommandLine() {
LaunchParams param = new LaunchParams( _configuration );
_advancedTab.setDefaultCommandLine( param.getDefaultCommandLine() );
}
}
/**
* Creates a text control.
*
* @param parent
* The parent composite
* @param labelText
* The label
* @param tooltip
* The tooltip
* @param listener
* The property change listener
* @return The text control
*/
private static Text createText( final Composite parent, final String labelText, final String tooltip,
final PropertyChangeListener listener ) {
if( !StringUtils.isBlank( labelText ) ) {
final Label label = new Label( parent, SWT.NONE | SWT.WRAP );
label.setText( labelText );
}
Text text = new Text( parent, SWT.LEFT | SWT.SINGLE | SWT.BORDER | SWT.WRAP );
GridData gridData = new GridData( SWT.FILL, SWT.CENTER, true, false );
text.setLayoutData( gridData );
if( tooltip != null ) {
text.setToolTipText( tooltip );
}
text.addModifyListener( new ModifyListener() {
public void modifyText( ModifyEvent e ) {
listener.propertyChange( null );
}
} );
return text;
}
private static class TextButtonWrapper {
Text _text;
Button _button;
public TextButtonWrapper( Text text, Button button ) {
_text = text;
_button = button;
}
}
/**
* Create a text control with a browse button besides.
*
* @param parent
* The parent composite
* @param labelText
* The label
* @param tooltip
* The tooltip
* @param listener
* The property change listener
* @param dialogType
* Browse for file or directory
* @return The text and button wrapper
*/
private static TextButtonWrapper createTextBrowse( final Composite parent, final String labelText, final String tooltip,
final PropertyChangeListener listener, final int dialogType ) {
final Label label = new Label( parent, SWT.NONE | SWT.WRAP );
label.setText( labelText );
Composite comp1 = CompositeFactory.gridComposite( parent, 2 );
final Text text = new Text( comp1, SWT.LEFT | SWT.SINGLE | SWT.BORDER | SWT.WRAP );
GridData gridData = new GridData( SWT.FILL, SWT.CENTER, true, false );
text.setLayoutData( gridData );
if( tooltip != null ) {
text.setToolTipText( tooltip );
}
text.addModifyListener( new ModifyListener() {
public void modifyText( ModifyEvent e ) {
listener.propertyChange( null );
}
} );
final Button browseButton = new Button( comp1, SWT.NONE );
browseButton.setText( Messages.IConstants_BROWSE_BUTTON_TITLE );
gridData = new GridData();
gridData.widthHint = 75;
browseButton.setLayoutData( gridData );
browseButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
File file;
if( dialogType == BROWSE_DIALOG_TYPE_OPEN_FILE ) {
file = RimIDEUtil.openFile( browseButton.getShell(), Messages.SimulatorConfigurationTab_openFile, null,
SWT.OPEN, new String[] { Messages.SimulatorConfigurationTab_dmpFile } );
} else {
file = RimIDEUtil.openDirecotryDialog( browseButton.getShell(), Messages.SimulatorTab_DIR_DIALOG_TITLE );
}
if( file == null ) {
return;
}
text.setText( file.getPath() );
}
} );
return new TextButtonWrapper( text, browseButton );
}
/**
* Creates a checkbox control.
*
* @param parent
* The parent composite
* @param label
* The label
* @param tooltip
* The tooltip
* @param listener
* The property change listener
* @return The checkbox control
*/
protected static Button createCheckbox( final Composite parent, final int style, final String label, final String tooltip,
final PropertyChangeListener listener ) {
Button checkboxButton = new Button( parent, style );
checkboxButton.setText( label );
if( tooltip != null ) {
checkboxButton.setToolTipText( tooltip );
}
checkboxButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
listener.propertyChange( null );
}
} );
return checkboxButton;
}
/**
* Creates a combo control.
*
* @param parent
* The parent composite
* @param labelText
* The label
* @param tooltip
* The tooltip
* @param choices
* The choices
* @param listener
* The property change listener
* @return The combo control
*/
private static Combo createCombo( final Composite parent, final String labelText, final String tooltip,
final PropertyChangeListener listener ) {
final Label label = new Label( parent, SWT.NONE | SWT.WRAP );
label.setText( labelText );
Combo combo = new Combo( parent, SWT.LEFT | SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY );
GridData gridData = new GridData( SWT.FILL, SWT.FILL, true, false );
combo.setLayoutData( gridData );
if( tooltip != null ) {
combo.setToolTipText( tooltip );
}
combo.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
listener.propertyChange( null );
}
} );
return combo;
}
/**
* Creates a list with add,delete,edit button underneath.
*
* @param parent
* The parent composite
* @param labelText
* The label text
* @param tooltip
* The tooltip text
* @return The list control
*/
private static org.eclipse.swt.widgets.List createList( final Composite parent, final String labelText, final String tooltip ) {
final Label networkLabel = new Label( parent, SWT.NONE | SWT.WRAP );
networkLabel.setText( labelText );
final org.eclipse.swt.widgets.List list = new org.eclipse.swt.widgets.List( parent, SWT.NONE | SWT.V_SCROLL
| SWT.H_SCROLL | SWT.BORDER );
GridData gridData = new GridData( GridData.FILL_HORIZONTAL );
gridData.heightHint = 50;
list.setLayoutData( gridData );
list.setToolTipText( WordUtils.wrap( tooltip, 100 ) );
// create a Composite instance for button group
Composite buttonComposite = CompositeFactory.gridComposite( parent, tooltip.isEmpty() ? 3 : 4);
// add "Add" button
final Button addButton = new Button( buttonComposite, SWT.PUSH );
addButton.setText( Messages.IConstants_ADD_BUTTON_TITLE );
setDialogConfirmButtonLayoutData( addButton );
addButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
try {
// create an input dialog
InputDialog dialog = new InputDialog( addButton.getShell(), "Add new", labelText, null, null );
// display the dialog
int result = dialog.open();
String input;
if( result == Window.OK )
input = dialog.getValue();
else
input = null;
if( input == null )
return;
list.add( input );
_thisInst.updateLaunchConfigurationDialog();
} catch( Exception ex ) {
_logger.error( ex.getMessage() );
}
}
} );
// add "Delete" button
final Button deleteButton = new Button( buttonComposite, SWT.PUSH );
deleteButton.setText( Messages.IConstants_DELETE_BUTTON_TITLE );
setDialogConfirmButtonLayoutData( deleteButton );
// add listener to listen to the event when "Delete" button is pressed
deleteButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
int index = list.getSelectionIndex();
list.remove( index );
_thisInst.updateLaunchConfigurationDialog();
}
} );
// add "Edit" button
final Button editButton = new Button( buttonComposite, SWT.PUSH );
editButton.setText( Messages.IConstants_EDIT_BUTTON_TITLE );
setDialogConfirmButtonLayoutData( editButton );
editButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
// create an input dialog
SimpleVectorInputDialog dialog = new SimpleVectorInputDialog( labelText, Arrays.asList( list.getItems() ),
editButton.getShell() );
List< String > l = dialog.open();
if( l == null ) {
return;
}
list.setItems( l.toArray( new String[ 0 ] ) );
_thisInst.updateLaunchConfigurationDialog();
}
} );
if(!tooltip.isEmpty()) {
// Info button to display steady the tooltip text
final Button hlpButton = new Button(buttonComposite, SWT.PUSH);
hlpButton.setImage(ContextManager.PLUGIN.getImageFromPlugin( ContextManager.PLUGIN_ID, "icons/obj16/help_icon.png" ));
hlpButton.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
InfoDialog id = SimulatorConfigurationTabBase._thisInst.new InfoDialog(hlpButton, tooltip, labelText);
id.open();
}
} );
}
return list;
}
/**
* Sets the layout of the given <code>button</code>.
*
* @param button
*/
private static void setDialogConfirmButtonLayoutData( Button button ) {
GridData data = new GridData( GridData.HORIZONTAL_ALIGN_FILL );
Point minSize = button.computeSize( SWT.DEFAULT, SWT.DEFAULT, true );
data.widthHint = Math.max( IDialogConstants.BUTTON_WIDTH, minSize.x );
button.setLayoutData( data );
}
private static class DeviceComboContentProvider implements IStructuredContentProvider {
public Object[] getElements( Object inputElement ) {
if( inputElement instanceof List ) {
return ( (List) inputElement ).toArray();
}
return new Object[ 0 ];
}
public void dispose() {
// do nothing
}
public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) {
// do nothing
}
}
private static class DeviceComboLabelProvider extends LabelProvider {
public String getText( Object element ) {
if( element instanceof DeviceInfo ) {
return ( (DeviceInfo) element ).toString();
}
return "";
}
}
/**
* Dialog used to display more pregnant tooltip info.
*/
private class InfoDialog extends Dialog {
private Text _txt;
private String _msg, _title;
private Point _parp; // origin of parent for reference to position this dialog
/**
* Constructs an instance of InfoDialog.
* @param parent -the parent shell
* @param msg - the message to be displayed
* @param title - the title of the dialog
*
*/
InfoDialog( Button parent, String msg, String title) {
super( parent.getShell());
_msg = msg;
_title = title;
_parp = getAbsPoint(parent);
}
private Point getAbsPoint(Control ctrl) {
Composite par = ctrl.getParent();
Point parp;
if(par==null) {
Rectangle shr = ctrl.getShell().getBounds();
parp = new Point (-shr.x, -shr.y);
}else {
parp = getAbsPoint(par);
}
Rectangle ctrlr = ctrl.getBounds();
return new Point(parp.x + ctrlr.x, parp.y + ctrlr.y);
}
/**
* Opens the dialog.
*/
public void open() {
// Create the dialog window
Shell shell = new Shell( getParent(), SWT.CLOSE | SWT.APPLICATION_MODAL | SWT.SCROLL_PAGE);
shell.setText( _title );
createContents( shell );
shell.setBounds(_parp.x, _parp.y, 354, 84);
shell.pack();
shell.open();
Display display = getParent().getDisplay();
while( !shell.isDisposed() ) {
if( !display.readAndDispatch() ) {
display.sleep();
}
}
}
private void createContents( final Shell parent ) {
GridLayout layout = new GridLayout( 1, false );
layout.marginHeight = 2;
layout.marginWidth = 2;
parent.setLayout( layout );
GridData data2 = new GridData( GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
data2.widthHint = 350;
data2.heightHint = 80;
_txt = new Text(parent, SWT.READ_ONLY | SWT.WRAP);
_txt.setText(_msg);
_txt.setLayoutData(data2);
}
}
}