/* * 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); } } }