155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/* 255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * you may not use this file except in compliance with the License. 655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * You may obtain a copy of the License at 755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 1055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * See the License for the specific language governing permissions and 1455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * limitations under the License. 1555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 1655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpackage com.android.ddmuilib; 1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmlib.EmulatorConsole; 2055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmlib.EmulatorConsole.GsmMode; 2155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmlib.EmulatorConsole.GsmStatus; 2255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmlib.EmulatorConsole.NetworkStatus; 23ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbyeimport com.android.ddmlib.IDevice; 2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.location.CoordinateControls; 2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.location.GpxParser; 26ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbyeimport com.android.ddmuilib.location.GpxParser.Track; 2755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.location.KmlParser; 2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.location.TrackContentProvider; 2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.location.TrackLabelProvider; 3055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.location.TrackPoint; 3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.location.WayPoint; 3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.location.WayPointContentProvider; 3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.location.WayPointLabelProvider; 3455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.dialogs.MessageDialog; 3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.preference.IPreferenceStore; 3755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.ISelection; 3855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.ISelectionChangedListener; 3955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.IStructuredSelection; 4055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.SelectionChangedEvent; 4155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.TableViewer; 4255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.SWT; 4355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.SWTException; 4455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.custom.ScrolledComposite; 4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.custom.StackLayout; 4655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.ControlAdapter; 4755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.ControlEvent; 4855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.ModifyEvent; 4955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.ModifyListener; 5055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.SelectionAdapter; 5155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.SelectionEvent; 5255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.graphics.Image; 5355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.graphics.Rectangle; 5455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.layout.FillLayout; 5555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.layout.GridData; 5655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.layout.GridLayout; 5755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Button; 5855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Combo; 5955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Composite; 6055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Control; 6155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Display; 6255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.FileDialog; 6355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Group; 6455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Label; 6555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.TabFolder; 6655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.TabItem; 6755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Table; 6855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Text; 6955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 7055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/** 7155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Panel to control the emulator using EmulatorConsole objects. 7255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 7355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpublic class EmulatorControlPanel extends SelectionDependentPanel { 7455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 7555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // default location: Patio outside Charlie's 7655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static double DEFAULT_LONGITUDE = -122.084095; 7755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static double DEFAULT_LATITUDE = 37.422006; 785542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 7955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String SPEED_FORMAT = "Speed: %1$dX"; 8055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 8155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 8255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 8355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Map between the display gsm mode and the internal tag used by the display. 8455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 8555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String[][] GSM_MODES = new String[][] { 8655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project { "unregistered", GsmMode.UNREGISTERED.getTag() }, 8755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project { "home", GsmMode.HOME.getTag() }, 8855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project { "roaming", GsmMode.ROAMING.getTag() }, 8955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project { "searching", GsmMode.SEARCHING.getTag() }, 9055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project { "denied", GsmMode.DENIED.getTag() }, 9155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }; 9255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 9355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String[] NETWORK_SPEEDS = new String[] { 9455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "Full", 9555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "GSM", 9655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "HSCSD", 9755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "GPRS", 9855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "EDGE", 9955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "UMTS", 10055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "HSDPA", 10155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }; 10255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 10355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String[] NETWORK_LATENCIES = new String[] { 10455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "None", 10555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "GPRS", 10655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "EDGE", 10755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "UMTS", 10855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }; 1095542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 11055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static int[] PLAY_SPEEDS = new int[] { 1, 2, 5, 10, 20, 50 }; 11155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 11255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String RE_PHONE_NUMBER = "^[+#0-9]+$"; //$NON-NLS-1$ 11355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String PREFS_WAYPOINT_COL_NAME = "emulatorControl.waypoint.name"; //$NON-NLS-1$ 11455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String PREFS_WAYPOINT_COL_LONGITUDE = "emulatorControl.waypoint.longitude"; //$NON-NLS-1$ 11555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String PREFS_WAYPOINT_COL_LATITUDE = "emulatorControl.waypoint.latitude"; //$NON-NLS-1$ 11655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String PREFS_WAYPOINT_COL_ELEVATION = "emulatorControl.waypoint.elevation"; //$NON-NLS-1$ 11755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String PREFS_WAYPOINT_COL_DESCRIPTION = "emulatorControl.waypoint.desc"; //$NON-NLS-1$ 11855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String PREFS_TRACK_COL_NAME = "emulatorControl.track.name"; //$NON-NLS-1$ 11955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String PREFS_TRACK_COL_COUNT = "emulatorControl.track.count"; //$NON-NLS-1$ 12055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String PREFS_TRACK_COL_FIRST = "emulatorControl.track.first"; //$NON-NLS-1$ 12155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String PREFS_TRACK_COL_LAST = "emulatorControl.track.last"; //$NON-NLS-1$ 12255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final static String PREFS_TRACK_COL_COMMENT = "emulatorControl.track.comment"; //$NON-NLS-1$ 12355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 12455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private EmulatorConsole mEmulatorConsole; 12555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 12655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Composite mParent; 12755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 12855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Label mVoiceLabel; 12955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Combo mVoiceMode; 13055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Label mDataLabel; 13155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Combo mDataMode; 13255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Label mSpeedLabel; 13355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Combo mNetworkSpeed; 13455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Label mLatencyLabel; 13555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Combo mNetworkLatency; 13655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 13755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Label mNumberLabel; 13855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Text mPhoneNumber; 13955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 14055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mVoiceButton; 14155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mSmsButton; 14255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 14355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Label mMessageLabel; 14455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Text mSmsMessage; 14555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 14655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mCallButton; 14755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mCancelButton; 14855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 14955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private TabFolder mLocationFolders; 1505542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 15155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mDecimalButton; 15255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mSexagesimalButton; 15355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private CoordinateControls mLongitudeControls; 15455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private CoordinateControls mLatitudeControls; 15555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mGpxUploadButton; 15655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Table mGpxWayPointTable; 15755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Table mGpxTrackTable; 15855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mKmlUploadButton; 15955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Table mKmlWayPointTable; 16055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 16155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mPlayGpxButton; 16255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mGpxBackwardButton; 16355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mGpxForwardButton; 16455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mGpxSpeedButton; 16555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mPlayKmlButton; 16655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mKmlBackwardButton; 16755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mKmlForwardButton; 16855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Button mKmlSpeedButton; 16955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 17055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Image mPlayImage; 17155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Image mPauseImage; 17255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 17355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Thread mPlayingThread; 17455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private boolean mPlayingTrack; 17555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private int mPlayDirection = 1; 17655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private int mSpeed; 17755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private int mSpeedIndex; 1785542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 17955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final SelectionAdapter mDirectionButtonAdapter = new SelectionAdapter() { 18055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 18155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 18255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Button b = (Button)e.getSource(); 18355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (b.getSelection() == false) { 18455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // basically the button was unselected, which we don't allow. 18555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // so we reselect it. 18655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project b.setSelection(true); 18755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 18855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 1895542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 19055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // now handle selection change. 19155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (b == mGpxForwardButton || b == mKmlForwardButton) { 19255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxBackwardButton.setSelection(false); 19355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxForwardButton.setSelection(true); 19455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlBackwardButton.setSelection(false); 19555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlForwardButton.setSelection(true); 19655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayDirection = 1; 1975542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 19855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 19955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxBackwardButton.setSelection(true); 20055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxForwardButton.setSelection(false); 20155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlBackwardButton.setSelection(true); 20255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlForwardButton.setSelection(false); 20355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayDirection = -1; 20455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 20555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 20655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }; 2075542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 20855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final SelectionAdapter mSpeedButtonAdapter = new SelectionAdapter() { 20955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 21055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 21155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSpeedIndex = (mSpeedIndex+1) % PLAY_SPEEDS.length; 21255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSpeed = PLAY_SPEEDS[mSpeedIndex]; 2135542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 21455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxSpeedButton.setText(String.format(SPEED_FORMAT, mSpeed)); 21555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxPlayControls.pack(); 21655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlSpeedButton.setText(String.format(SPEED_FORMAT, mSpeed)); 21755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlPlayControls.pack(); 2185542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 21955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingThread != null) { 22055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingThread.interrupt(); 22155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 2225542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet } 22355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }; 22455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Composite mKmlPlayControls; 22555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Composite mGpxPlayControls; 22655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 2275542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 228e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet public EmulatorControlPanel() { 22955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 23055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 23155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 23255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Sent when a new device is selected. The new device can be accessed 23355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * with {@link #getCurrentDevice()} 23455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 23555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 23655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void deviceSelected() { 23755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project handleNewDevice(getCurrentDevice()); 23855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 23955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 24055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 24155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Sent when a new client is selected. The new client can be accessed 24255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * with {@link #getCurrentClient()} 24355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 24455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 24555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void clientSelected() { 24655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // pass 24755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 24855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 24955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 25055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Creates a control capable of displaying some information. This is 25155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * called once, when the application is initializing, from the UI thread. 25255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 25355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 25455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project protected Control createControl(Composite parent) { 25555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mParent = parent; 25655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 25755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final ScrolledComposite scollingParent = new ScrolledComposite(parent, SWT.V_SCROLL); 25855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project scollingParent.setExpandVertical(true); 25955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project scollingParent.setExpandHorizontal(true); 26055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project scollingParent.setLayoutData(new GridData(GridData.FILL_BOTH)); 26155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 26255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final Composite top = new Composite(scollingParent, SWT.NONE); 26355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project scollingParent.setContent(top); 26455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project top.setLayout(new GridLayout(1, false)); 26555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 26655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // set the resize for the scrolling to work (why isn't that done automatically?!?) 26755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project scollingParent.addControlListener(new ControlAdapter() { 26855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 26955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void controlResized(ControlEvent e) { 27055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Rectangle r = scollingParent.getClientArea(); 27155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project scollingParent.setMinSize(top.computeSize(r.width, SWT.DEFAULT)); 27255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 27355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 2745542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 27555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createRadioControls(top); 27655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 27755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createCallControls(top); 2785542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 27955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createLocationControls(top); 28055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 28155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project doEnable(false); 28255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 28355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project top.layout(); 28455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Rectangle r = scollingParent.getClientArea(); 28555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project scollingParent.setMinSize(top.computeSize(r.width, SWT.DEFAULT)); 28655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 28755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return scollingParent; 28855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 28955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 29055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 29155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Create Radio (on/off/roaming, for voice/data) controls. 29255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param top 29355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 29455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createRadioControls(final Composite top) { 29555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Group g1 = new Group(top, SWT.NONE); 29655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project g1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 29755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project g1.setLayout(new GridLayout(2, false)); 29855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project g1.setText("Telephony Status"); 29955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 30055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // the inside of the group is 2 composite so that all the column of the controls (mainly 30155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // combos) have the same width, while not taking the whole screen width 30255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite insideGroup = new Composite(g1, SWT.NONE); 30355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GridLayout gl = new GridLayout(4, false); 30455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gl.marginBottom = gl.marginHeight = gl.marginLeft = gl.marginRight = 0; 30555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project insideGroup.setLayout(gl); 30655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 30755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceLabel = new Label(insideGroup, SWT.NONE); 30855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceLabel.setText("Voice:"); 30955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceLabel.setAlignment(SWT.RIGHT); 31055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 31155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceMode = new Combo(insideGroup, SWT.READ_ONLY); 31255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceMode.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 31355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (String[] mode : GSM_MODES) { 31455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceMode.add(mode[0]); 31555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 31655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceMode.addSelectionListener(new SelectionAdapter() { 31755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // called when selection changes 31855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 31955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 32055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project setVoiceMode(mVoiceMode.getSelectionIndex()); 32155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 32255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 32355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 32455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSpeedLabel = new Label(insideGroup, SWT.NONE); 32555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSpeedLabel.setText("Speed:"); 32655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSpeedLabel.setAlignment(SWT.RIGHT); 32755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 32855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkSpeed = new Combo(insideGroup, SWT.READ_ONLY); 32955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkSpeed.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 33055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (String mode : NETWORK_SPEEDS) { 33155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkSpeed.add(mode); 33255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 33355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkSpeed.addSelectionListener(new SelectionAdapter() { 33455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // called when selection changes 33555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 33655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 33755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project setNetworkSpeed(mNetworkSpeed.getSelectionIndex()); 33855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 33955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 34055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 34155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataLabel = new Label(insideGroup, SWT.NONE); 34255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataLabel.setText("Data:"); 34355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataLabel.setAlignment(SWT.RIGHT); 34455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 34555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataMode = new Combo(insideGroup, SWT.READ_ONLY); 34655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataMode.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 34755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (String[] mode : GSM_MODES) { 34855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataMode.add(mode[0]); 34955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 35055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataMode.addSelectionListener(new SelectionAdapter() { 35155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // called when selection changes 35255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 35355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 35455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project setDataMode(mDataMode.getSelectionIndex()); 35555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 35655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 35755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 35855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatencyLabel = new Label(insideGroup, SWT.NONE); 35955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatencyLabel.setText("Latency:"); 36055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatencyLabel.setAlignment(SWT.RIGHT); 36155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 36255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkLatency = new Combo(insideGroup, SWT.READ_ONLY); 36355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkLatency.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 36455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (String mode : NETWORK_LATENCIES) { 36555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkLatency.add(mode); 36655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 36755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkLatency.addSelectionListener(new SelectionAdapter() { 36855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // called when selection changes 36955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 37055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 37155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project setNetworkLatency(mNetworkLatency.getSelectionIndex()); 37255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 37355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 37455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 37555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // now an empty label to take the rest of the width of the group 37655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Label l = new Label(g1, SWT.NONE); 37755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 37855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 3795542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 38055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 38155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Create Voice/SMS call/hang up controls 38255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param top 38355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 38455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createCallControls(final Composite top) { 38555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GridLayout gl; 38655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Group g2 = new Group(top, SWT.NONE); 38755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project g2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 38855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project g2.setLayout(new GridLayout(1, false)); 38955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project g2.setText("Telephony Actions"); 39055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 39155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // horizontal composite for label + text field 39255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite phoneComp = new Composite(g2, SWT.NONE); 39355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project phoneComp.setLayoutData(new GridData(GridData.FILL_BOTH)); 39455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gl = new GridLayout(2, false); 39555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gl.marginBottom = gl.marginHeight = gl.marginLeft = gl.marginRight = 0; 39655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project phoneComp.setLayout(gl); 39755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 39855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNumberLabel = new Label(phoneComp, SWT.NONE); 39955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNumberLabel.setText("Incoming number:"); 40055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 40155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPhoneNumber = new Text(phoneComp, SWT.BORDER | SWT.LEFT | SWT.SINGLE); 40255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPhoneNumber.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 40355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPhoneNumber.addModifyListener(new ModifyListener() { 404ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 40555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void modifyText(ModifyEvent e) { 40655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Reenable the widgets based on the content of the text. 40755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // doEnable checks the validity of the phone number to enable/disable some 40855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // widgets. 40955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Looks like we're getting a callback at creation time, so we can't 41055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // suppose that we are enabled when the text is modified... 41155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project doEnable(mEmulatorConsole != null); 41255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 41355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 41455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 41555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceButton = new Button(phoneComp, SWT.RADIO); 41655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GridData gd = new GridData(); 41755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd.horizontalSpan = 2; 41855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceButton.setText("Voice"); 41955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceButton.setLayoutData(gd); 42055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceButton.setEnabled(false); 42155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceButton.setSelection(true); 42255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceButton.addSelectionListener(new SelectionAdapter() { 42355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // called when selection changes 42455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 42555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 42655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project doEnable(true); 42755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 42855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mVoiceButton.getSelection()) { 42955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCallButton.setText("Call"); 43055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 43155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCallButton.setText("Send"); 43255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 43355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 43455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 43555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 43655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSmsButton = new Button(phoneComp, SWT.RADIO); 43755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSmsButton.setText("SMS"); 43855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd = new GridData(); 43955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd.horizontalSpan = 2; 44055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSmsButton.setLayoutData(gd); 44155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSmsButton.setEnabled(false); 44255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Since there are only 2 radio buttons, we can put a listener on only one (they 44355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // are both called on select and unselect event. 44455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 44555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mMessageLabel = new Label(phoneComp, SWT.NONE); 44655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd = new GridData(); 44755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd.verticalAlignment = SWT.TOP; 44855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mMessageLabel.setLayoutData(gd); 44955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mMessageLabel.setText("Message:"); 45055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mMessageLabel.setEnabled(false); 45155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 45255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSmsMessage = new Text(phoneComp, SWT.BORDER | SWT.LEFT | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); 45355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSmsMessage.setLayoutData(gd = new GridData(GridData.FILL_HORIZONTAL)); 45455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd.heightHint = 70; 45555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSmsMessage.setEnabled(false); 45655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 45755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // composite to put the 2 buttons horizontally 45855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite g2ButtonComp = new Composite(g2, SWT.NONE); 45955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project g2ButtonComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 46055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gl = new GridLayout(2, false); 46155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gl.marginWidth = gl.marginHeight = 0; 46255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project g2ButtonComp.setLayout(gl); 46355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 46455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // now a button below the phone number 46555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCallButton = new Button(g2ButtonComp, SWT.PUSH); 46655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCallButton.setText("Call"); 46755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCallButton.setEnabled(false); 46855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCallButton.addSelectionListener(new SelectionAdapter() { 46955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 47055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 47155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null) { 47255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mVoiceButton.getSelection()) { 47355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.call(mPhoneNumber.getText().trim())); 47455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 47555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // we need to encode the message. We need to replace the carriage return 47655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // character by the 2 character string \n. 47755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Because of this the \ character needs to be escaped as well. 47855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // ReplaceAll() expects regexp so \ char are escaped twice. 47955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String message = mSmsMessage.getText(); 48055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project message = message.replaceAll("\\\\", //$NON-NLS-1$ 48155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "\\\\\\\\"); //$NON-NLS-1$ 48255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 48355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // While the normal line delimiter is returned by Text.getLineDelimiter() 48455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // it seems copy pasting text coming from somewhere else could have another 48555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // delimited. For this reason, we'll replace is several steps 48655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 48755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // replace the dual CR-LF 488ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye message = message.replaceAll("\r\n", "\\\\n"); //$NON-NLS-1$ //$NON-NLS-2$ 48955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 49055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // replace remaining stand alone \n 491ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye message = message.replaceAll("\n", "\\\\n"); //$NON-NLS-1$ //$NON-NLS-2$ 49255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 49355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // replace remaining stand alone \r 494ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye message = message.replaceAll("\r", "\\\\n"); //$NON-NLS-1$ //$NON-NLS-2$ 49555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 49655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.sendSms(mPhoneNumber.getText().trim(), 49755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project message)); 49855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 49955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 50055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 50155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 50255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 50355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCancelButton = new Button(g2ButtonComp, SWT.PUSH); 50455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCancelButton.setText("Hang Up"); 50555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCancelButton.setEnabled(false); 50655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCancelButton.addSelectionListener(new SelectionAdapter() { 50755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 50855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 50955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null) { 51055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mVoiceButton.getSelection()) { 51155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.cancelCall( 51255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPhoneNumber.getText().trim())); 51355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 51455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 51555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 51655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 51755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 5185542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 51955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 52055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Create Location controls. 52155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param top 52255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 52355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createLocationControls(final Composite top) { 52455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Label l = new Label(top, SWT.NONE); 52555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 52655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project l.setText("Location Controls"); 5275542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 52855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLocationFolders = new TabFolder(top, SWT.NONE); 52955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLocationFolders.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 5305542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 53155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite manualLocationComp = new Composite(mLocationFolders, SWT.NONE); 53255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TabItem item = new TabItem(mLocationFolders, SWT.NONE); 53355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setText("Manual"); 53455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setControl(manualLocationComp); 5355542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 53655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createManualLocationControl(manualLocationComp); 53755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 538e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet ImageLoader loader = ImageLoader.getDdmUiLibLoader(); 53923da069e4f407df1b06e7db2324e3247496abe3dTor Norbye mPlayImage = loader.loadImage("play.png", mParent.getDisplay()); //$NON-NLS-1$ 54023da069e4f407df1b06e7db2324e3247496abe3dTor Norbye mPauseImage = loader.loadImage("pause.png", mParent.getDisplay()); //$NON-NLS-1$ 54155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 54255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite gpxLocationComp = new Composite(mLocationFolders, SWT.NONE); 54355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item = new TabItem(mLocationFolders, SWT.NONE); 54455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setText("GPX"); 54555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setControl(gpxLocationComp); 5465542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 54755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createGpxLocationControl(gpxLocationComp); 54855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 54955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite kmlLocationComp = new Composite(mLocationFolders, SWT.NONE); 55055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project kmlLocationComp.setLayout(new FillLayout()); 55155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item = new TabItem(mLocationFolders, SWT.NONE); 55255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setText("KML"); 55355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setControl(kmlLocationComp); 5545542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 55555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createKmlLocationControl(kmlLocationComp); 55655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 55755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 55855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createManualLocationControl(Composite manualLocationComp) { 55955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final StackLayout sl; 56055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GridLayout gl; 56155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Label label; 56255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 56355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project manualLocationComp.setLayout(new GridLayout(1, false)); 56455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDecimalButton = new Button(manualLocationComp, SWT.RADIO); 56555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDecimalButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 56655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDecimalButton.setText("Decimal"); 56755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSexagesimalButton = new Button(manualLocationComp, SWT.RADIO); 56855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSexagesimalButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 56955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSexagesimalButton.setText("Sexagesimal"); 57055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 57155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // composite to hold and switching between the 2 modes. 57255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final Composite content = new Composite(manualLocationComp, SWT.NONE); 57355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project content.setLayout(sl = new StackLayout()); 5745542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 57555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // decimal display 57655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final Composite decimalContent = new Composite(content, SWT.NONE); 57755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project decimalContent.setLayout(gl = new GridLayout(2, false)); 57855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gl.marginHeight = gl.marginWidth = 0; 5795542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 58055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLongitudeControls = new CoordinateControls(); 58155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatitudeControls = new CoordinateControls(); 5825542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 58355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label = new Label(decimalContent, SWT.NONE); 58455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label.setText("Longitude"); 5855542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 58655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLongitudeControls.createDecimalText(decimalContent); 5875542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 58855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label = new Label(decimalContent, SWT.NONE); 58955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label.setText("Latitude"); 5905542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 59155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatitudeControls.createDecimalText(decimalContent); 59255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 59355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // sexagesimal content 59455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final Composite sexagesimalContent = new Composite(content, SWT.NONE); 59555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sexagesimalContent.setLayout(gl = new GridLayout(7, false)); 59655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gl.marginHeight = gl.marginWidth = 0; 5975542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 59855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label = new Label(sexagesimalContent, SWT.NONE); 59955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label.setText("Longitude"); 6005542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 60155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLongitudeControls.createSexagesimalDegreeText(sexagesimalContent); 6025542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 60355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label = new Label(sexagesimalContent, SWT.NONE); 60455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label.setText("\u00B0"); // degree character 6055542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 60655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLongitudeControls.createSexagesimalMinuteText(sexagesimalContent); 6075542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 60855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label = new Label(sexagesimalContent, SWT.NONE); 60955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label.setText("'"); 61055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 61155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLongitudeControls.createSexagesimalSecondText(sexagesimalContent); 6125542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 61355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label = new Label(sexagesimalContent, SWT.NONE); 61455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label.setText("\""); 61555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 61655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label = new Label(sexagesimalContent, SWT.NONE); 61755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label.setText("Latitude"); 6185542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 61955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatitudeControls.createSexagesimalDegreeText(sexagesimalContent); 6205542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 62155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label = new Label(sexagesimalContent, SWT.NONE); 62255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label.setText("\u00B0"); 6235542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 62455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatitudeControls.createSexagesimalMinuteText(sexagesimalContent); 6255542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 62655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label = new Label(sexagesimalContent, SWT.NONE); 62755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label.setText("'"); 62855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 62955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatitudeControls.createSexagesimalSecondText(sexagesimalContent); 6305542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 63155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label = new Label(sexagesimalContent, SWT.NONE); 63255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project label.setText("\""); 63355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 63455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // set the default display to decimal 63555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sl.topControl = decimalContent; 63655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDecimalButton.setSelection(true); 63755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 63855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDecimalButton.addSelectionListener(new SelectionAdapter() { 63955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 64055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 64155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mDecimalButton.getSelection()) { 64255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sl.topControl = decimalContent; 64355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 64455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sl.topControl = sexagesimalContent; 64555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 64655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project content.layout(); 64755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 64855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 6495542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 65055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Button sendButton = new Button(manualLocationComp, SWT.PUSH); 65155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sendButton.setText("Send"); 65255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sendButton.addSelectionListener(new SelectionAdapter() { 65355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 65455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 65555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null) { 65655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.sendLocation( 65755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLongitudeControls.getValue(), mLatitudeControls.getValue(), 0)); 65855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 65955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 66055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 6615542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 66255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLongitudeControls.setValue(DEFAULT_LONGITUDE); 66355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatitudeControls.setValue(DEFAULT_LATITUDE); 66455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 66555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 66655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createGpxLocationControl(Composite gpxLocationComp) { 66755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GridData gd; 66855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 66955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project IPreferenceStore store = DdmUiPreferences.getStore(); 67055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 67155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gpxLocationComp.setLayout(new GridLayout(1, false)); 67255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 67355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxUploadButton = new Button(gpxLocationComp, SWT.PUSH); 67455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxUploadButton.setText("Load GPX..."); 67555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 67655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Table for way point 67755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxWayPointTable = new Table(gpxLocationComp, 67855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION); 67955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxWayPointTable.setLayoutData(gd = new GridData(GridData.FILL_HORIZONTAL)); 68055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd.heightHint = 100; 68155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxWayPointTable.setHeaderVisible(true); 68255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxWayPointTable.setLinesVisible(true); 6835542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 68455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mGpxWayPointTable, "Name", SWT.LEFT, 68555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "Some Name", 68655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_WAYPOINT_COL_NAME, store); 68755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mGpxWayPointTable, "Longitude", SWT.LEFT, 68855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "-199.999999", 68955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_WAYPOINT_COL_LONGITUDE, store); 69055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mGpxWayPointTable, "Latitude", SWT.LEFT, 69155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "-199.999999", 69255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_WAYPOINT_COL_LATITUDE, store); 69355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mGpxWayPointTable, "Elevation", SWT.LEFT, 69455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "99999.9", 69555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_WAYPOINT_COL_ELEVATION, store); 69655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mGpxWayPointTable, "Description", SWT.LEFT, 69755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "Some Description", 69855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_WAYPOINT_COL_DESCRIPTION, store); 69955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 70055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final TableViewer gpxWayPointViewer = new TableViewer(mGpxWayPointTable); 70155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gpxWayPointViewer.setContentProvider(new WayPointContentProvider()); 70255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gpxWayPointViewer.setLabelProvider(new WayPointLabelProvider()); 7035542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 70455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gpxWayPointViewer.addSelectionChangedListener(new ISelectionChangedListener() { 705ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 70655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void selectionChanged(SelectionChangedEvent event) { 70755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ISelection selection = event.getSelection(); 70855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (selection instanceof IStructuredSelection) { 70955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project IStructuredSelection structuredSelection = (IStructuredSelection)selection; 71055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Object selectedObject = structuredSelection.getFirstElement(); 71155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (selectedObject instanceof WayPoint) { 71255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project WayPoint wayPoint = (WayPoint)selectedObject; 7135542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 71455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null && mPlayingTrack == false) { 71555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.sendLocation( 71655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project wayPoint.getLongitude(), wayPoint.getLatitude(), 71755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project wayPoint.getElevation())); 71855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 71955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 72055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 72155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 72255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 72355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 72455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // table for tracks. 72555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxTrackTable = new Table(gpxLocationComp, 72655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION); 72755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxTrackTable.setLayoutData(gd = new GridData(GridData.FILL_HORIZONTAL)); 72855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd.heightHint = 100; 72955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxTrackTable.setHeaderVisible(true); 73055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxTrackTable.setLinesVisible(true); 73155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 73255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mGpxTrackTable, "Name", SWT.LEFT, 73355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "Some very long name", 73455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_TRACK_COL_NAME, store); 73555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mGpxTrackTable, "Point Count", SWT.RIGHT, 73655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "9999", 73755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_TRACK_COL_COUNT, store); 73855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mGpxTrackTable, "First Point Time", SWT.LEFT, 73955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "999-99-99T99:99:99Z", 74055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_TRACK_COL_FIRST, store); 74155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mGpxTrackTable, "Last Point Time", SWT.LEFT, 74255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "999-99-99T99:99:99Z", 74355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_TRACK_COL_LAST, store); 74455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mGpxTrackTable, "Comment", SWT.LEFT, 74555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "-199.999999", 74655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_TRACK_COL_COMMENT, store); 74755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 74855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final TableViewer gpxTrackViewer = new TableViewer(mGpxTrackTable); 74955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gpxTrackViewer.setContentProvider(new TrackContentProvider()); 75055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gpxTrackViewer.setLabelProvider(new TrackLabelProvider()); 7515542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 75255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gpxTrackViewer.addSelectionChangedListener(new ISelectionChangedListener() { 753ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 75455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void selectionChanged(SelectionChangedEvent event) { 75555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ISelection selection = event.getSelection(); 75655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (selection instanceof IStructuredSelection) { 75755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project IStructuredSelection structuredSelection = (IStructuredSelection)selection; 75855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Object selectedObject = structuredSelection.getFirstElement(); 75955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (selectedObject instanceof Track) { 76055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Track track = (Track)selectedObject; 7615542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 76255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null && mPlayingTrack == false) { 76355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TrackPoint[] points = track.getPoints(); 76455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.sendLocation( 76555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project points[0].getLongitude(), points[0].getLatitude(), 76655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project points[0].getElevation())); 76755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 7685542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 76955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayGpxButton.setEnabled(true); 77055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxBackwardButton.setEnabled(true); 77155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxForwardButton.setEnabled(true); 77255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxSpeedButton.setEnabled(true); 7735542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 77455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 77555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 77655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 77755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 77855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayGpxButton.setEnabled(false); 77955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxBackwardButton.setEnabled(false); 78055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxForwardButton.setEnabled(false); 78155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxSpeedButton.setEnabled(false); 78255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 78355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 7845542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 78555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxUploadButton.addSelectionListener(new SelectionAdapter() { 78655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 78755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 78855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project FileDialog fileDialog = new FileDialog(mParent.getShell(), SWT.OPEN); 78955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 79055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project fileDialog.setText("Load GPX File"); 79155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project fileDialog.setFilterExtensions(new String[] { "*.gpx" } ); 79255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 79355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String fileName = fileDialog.open(); 79455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (fileName != null) { 79555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GpxParser parser = new GpxParser(fileName); 79655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (parser.parse()) { 79755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gpxWayPointViewer.setInput(parser.getWayPoints()); 79855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gpxTrackViewer.setInput(parser.getTracks()); 79955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 80055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 80155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 80255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 8035542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 80455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxPlayControls = new Composite(gpxLocationComp, SWT.NONE); 80555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GridLayout gl; 80655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxPlayControls.setLayout(gl = new GridLayout(5, false)); 80755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gl.marginHeight = gl.marginWidth = 0; 80855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxPlayControls.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 80955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 81055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayGpxButton = new Button(mGpxPlayControls, SWT.PUSH | SWT.FLAT); 81155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayGpxButton.setImage(mPlayImage); 81255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayGpxButton.addSelectionListener(new SelectionAdapter() { 81355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 81455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 81555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingTrack == false) { 81655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ISelection selection = gpxTrackViewer.getSelection(); 81755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (selection.isEmpty() == false && selection instanceof IStructuredSelection) { 81855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project IStructuredSelection structuredSelection = (IStructuredSelection)selection; 81955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Object selectedObject = structuredSelection.getFirstElement(); 82055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (selectedObject instanceof Track) { 82155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Track track = (Track)selectedObject; 82255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project playTrack(track); 82355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 82455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 82555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 82655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // if we're playing, then we pause 82755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingTrack = false; 82855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingThread != null) { 82955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingThread.interrupt(); 83055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 83155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 8325542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet } 83355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 8345542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 83555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Label separator = new Label(mGpxPlayControls, SWT.SEPARATOR | SWT.VERTICAL); 83655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project separator.setLayoutData(gd = new GridData( 83755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL)); 83855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd.heightHint = 0; 8395542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 840e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet ImageLoader loader = ImageLoader.getDdmUiLibLoader(); 84155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxBackwardButton = new Button(mGpxPlayControls, SWT.TOGGLE | SWT.FLAT); 84223da069e4f407df1b06e7db2324e3247496abe3dTor Norbye mGpxBackwardButton.setImage(loader.loadImage("backward.png", mParent.getDisplay())); //$NON-NLS-1$ 84355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxBackwardButton.setSelection(false); 84455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxBackwardButton.addSelectionListener(mDirectionButtonAdapter); 84555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxForwardButton = new Button(mGpxPlayControls, SWT.TOGGLE | SWT.FLAT); 84623da069e4f407df1b06e7db2324e3247496abe3dTor Norbye mGpxForwardButton.setImage(loader.loadImage("forward.png", mParent.getDisplay())); //$NON-NLS-1$ 84755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxForwardButton.setSelection(true); 84855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxForwardButton.addSelectionListener(mDirectionButtonAdapter); 84955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 85055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxSpeedButton = new Button(mGpxPlayControls, SWT.PUSH | SWT.FLAT); 85155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 85255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSpeedIndex = 0; 85355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSpeed = PLAY_SPEEDS[mSpeedIndex]; 85455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 85555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxSpeedButton.setText(String.format(SPEED_FORMAT, mSpeed)); 85655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxSpeedButton.addSelectionListener(mSpeedButtonAdapter); 8575542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 85855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayGpxButton.setEnabled(false); 85955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxBackwardButton.setEnabled(false); 86055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxForwardButton.setEnabled(false); 86155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxSpeedButton.setEnabled(false); 86255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 86355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 86455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 86555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createKmlLocationControl(Composite kmlLocationComp) { 86655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GridData gd; 86755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 86855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project IPreferenceStore store = DdmUiPreferences.getStore(); 86955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 87055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project kmlLocationComp.setLayout(new GridLayout(1, false)); 87155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 87255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlUploadButton = new Button(kmlLocationComp, SWT.PUSH); 87355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlUploadButton.setText("Load KML..."); 87455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 87555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Table for way point 87655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlWayPointTable = new Table(kmlLocationComp, 87755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION); 87855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlWayPointTable.setLayoutData(gd = new GridData(GridData.FILL_HORIZONTAL)); 87955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd.heightHint = 200; 88055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlWayPointTable.setHeaderVisible(true); 88155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlWayPointTable.setLinesVisible(true); 8825542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 88355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mKmlWayPointTable, "Name", SWT.LEFT, 88455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "Some Name", 88555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_WAYPOINT_COL_NAME, store); 88655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mKmlWayPointTable, "Longitude", SWT.LEFT, 88755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "-199.999999", 88855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_WAYPOINT_COL_LONGITUDE, store); 88955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mKmlWayPointTable, "Latitude", SWT.LEFT, 89055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "-199.999999", 89155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_WAYPOINT_COL_LATITUDE, store); 89255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mKmlWayPointTable, "Elevation", SWT.LEFT, 89355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "99999.9", 89455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_WAYPOINT_COL_ELEVATION, store); 89555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TableHelper.createTableColumn(mKmlWayPointTable, "Description", SWT.LEFT, 89655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "Some Description", 89755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_WAYPOINT_COL_DESCRIPTION, store); 89855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 89955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final TableViewer kmlWayPointViewer = new TableViewer(mKmlWayPointTable); 90055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project kmlWayPointViewer.setContentProvider(new WayPointContentProvider()); 90155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project kmlWayPointViewer.setLabelProvider(new WayPointLabelProvider()); 90255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 90355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlUploadButton.addSelectionListener(new SelectionAdapter() { 90455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 90555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 90655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project FileDialog fileDialog = new FileDialog(mParent.getShell(), SWT.OPEN); 90755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 90855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project fileDialog.setText("Load KML File"); 90955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project fileDialog.setFilterExtensions(new String[] { "*.kml" } ); 91055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 91155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String fileName = fileDialog.open(); 91255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (fileName != null) { 91355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project KmlParser parser = new KmlParser(fileName); 91455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (parser.parse()) { 91555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project kmlWayPointViewer.setInput(parser.getWayPoints()); 9165542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 91755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayKmlButton.setEnabled(true); 91855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlBackwardButton.setEnabled(true); 91955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlForwardButton.setEnabled(true); 92055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlSpeedButton.setEnabled(true); 92155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 92255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 92355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 92455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 9255542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 92655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project kmlWayPointViewer.addSelectionChangedListener(new ISelectionChangedListener() { 927ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 92855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void selectionChanged(SelectionChangedEvent event) { 92955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ISelection selection = event.getSelection(); 93055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (selection instanceof IStructuredSelection) { 93155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project IStructuredSelection structuredSelection = (IStructuredSelection)selection; 93255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Object selectedObject = structuredSelection.getFirstElement(); 93355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (selectedObject instanceof WayPoint) { 93455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project WayPoint wayPoint = (WayPoint)selectedObject; 9355542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 93655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null && mPlayingTrack == false) { 93755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.sendLocation( 93855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project wayPoint.getLongitude(), wayPoint.getLatitude(), 93955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project wayPoint.getElevation())); 94055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 94155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 94255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 94355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 94455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 9455542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 9465542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 9475542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 94855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlPlayControls = new Composite(kmlLocationComp, SWT.NONE); 94955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GridLayout gl; 95055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlPlayControls.setLayout(gl = new GridLayout(5, false)); 95155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gl.marginHeight = gl.marginWidth = 0; 95255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlPlayControls.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 95355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 95455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayKmlButton = new Button(mKmlPlayControls, SWT.PUSH | SWT.FLAT); 95555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayKmlButton.setImage(mPlayImage); 95655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayKmlButton.addSelectionListener(new SelectionAdapter() { 95755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 95855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 95955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingTrack == false) { 96055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Object input = kmlWayPointViewer.getInput(); 96155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (input instanceof WayPoint[]) { 96255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project playKml((WayPoint[])input); 96355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 96455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 96555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // if we're playing, then we pause 96655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingTrack = false; 96755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingThread != null) { 96855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingThread.interrupt(); 96955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 97055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 9715542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet } 97255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 9735542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 97455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Label separator = new Label(mKmlPlayControls, SWT.SEPARATOR | SWT.VERTICAL); 97555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project separator.setLayoutData(gd = new GridData( 97655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL)); 97755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gd.heightHint = 0; 9785542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 979e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet ImageLoader loader = ImageLoader.getDdmUiLibLoader(); 98055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlBackwardButton = new Button(mKmlPlayControls, SWT.TOGGLE | SWT.FLAT); 98123da069e4f407df1b06e7db2324e3247496abe3dTor Norbye mKmlBackwardButton.setImage(loader.loadImage("backward.png", mParent.getDisplay())); //$NON-NLS-1$ 98255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlBackwardButton.setSelection(false); 98355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlBackwardButton.addSelectionListener(mDirectionButtonAdapter); 98455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlForwardButton = new Button(mKmlPlayControls, SWT.TOGGLE | SWT.FLAT); 98523da069e4f407df1b06e7db2324e3247496abe3dTor Norbye mKmlForwardButton.setImage(loader.loadImage("forward.png", mParent.getDisplay())); //$NON-NLS-1$ 98655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlForwardButton.setSelection(true); 98755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlForwardButton.addSelectionListener(mDirectionButtonAdapter); 98855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 98955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlSpeedButton = new Button(mKmlPlayControls, SWT.PUSH | SWT.FLAT); 99055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 99155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSpeedIndex = 0; 99255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSpeed = PLAY_SPEEDS[mSpeedIndex]; 99355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 99455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlSpeedButton.setText(String.format(SPEED_FORMAT, mSpeed)); 99555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlSpeedButton.addSelectionListener(mSpeedButtonAdapter); 9965542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 99755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayKmlButton.setEnabled(false); 99855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlBackwardButton.setEnabled(false); 99955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlForwardButton.setEnabled(false); 100055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlSpeedButton.setEnabled(false); 100155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 100255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 100355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 100455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Sets the focus to the proper control inside the panel. 100555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 100655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 100755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void setFocus() { 100855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 100955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 101055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 101155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project protected void postCreation() { 101255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // pass 101355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 101455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 101555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private synchronized void setDataMode(int selectionIndex) { 101655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null) { 101755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.setGsmDataMode( 101855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GsmMode.getEnum(GSM_MODES[selectionIndex][1]))); 101955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 102055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 102155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 102255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private synchronized void setVoiceMode(int selectionIndex) { 102355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null) { 102455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.setGsmVoiceMode( 102555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GsmMode.getEnum(GSM_MODES[selectionIndex][1]))); 102655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 102755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 102855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 102955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private synchronized void setNetworkLatency(int selectionIndex) { 103055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null) { 103155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.setNetworkLatency(selectionIndex)); 103255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 103355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 103455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 103555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private synchronized void setNetworkSpeed(int selectionIndex) { 103655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null) { 103755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.setNetworkSpeed(selectionIndex)); 103855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 103955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 104055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 104155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 104255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 104355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Callback on device selection change. 104455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param device the new selected device 104555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 10465542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet public void handleNewDevice(IDevice device) { 104755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mParent.isDisposed()) { 104855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 104955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 105055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // unlink to previous console. 105155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project synchronized (this) { 105255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEmulatorConsole = null; 105355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 105455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 105555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 105655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the emulator console for this device 105755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // First we need the device itself 105855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (device != null) { 105955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project GsmStatus gsm = null; 106055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project NetworkStatus netstatus = null; 106155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 106255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project synchronized (this) { 106355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEmulatorConsole = EmulatorConsole.getConsole(device); 106455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null) { 106555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the gsm status 106655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project gsm = mEmulatorConsole.getGsmStatus(); 106755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project netstatus = mEmulatorConsole.getNetworkStatus(); 10685542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 106955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (gsm == null || netstatus == null) { 107055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEmulatorConsole = null; 107155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 107255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 107355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 107455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 107555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (gsm != null && netstatus != null) { 107655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Display d = mParent.getDisplay(); 107755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (d.isDisposed() == false) { 107855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final GsmStatus f_gsm = gsm; 107955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final NetworkStatus f_netstatus = netstatus; 10805542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 108155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project d.asyncExec(new Runnable() { 1082ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 108355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void run() { 108455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (f_gsm.voice != GsmMode.UNKNOWN) { 108555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceMode.select(getGsmComboIndex(f_gsm.voice)); 108655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 108755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceMode.clearSelection(); 108855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 108955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (f_gsm.data != GsmMode.UNKNOWN) { 109055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataMode.select(getGsmComboIndex(f_gsm.data)); 109155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 109255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataMode.clearSelection(); 109355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 109455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 109555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (f_netstatus.speed != -1) { 109655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkSpeed.select(f_netstatus.speed); 109755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 109855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkSpeed.clearSelection(); 109955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 110055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 110155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (f_netstatus.latency != -1) { 110255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkLatency.select(f_netstatus.latency); 110355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 110455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkLatency.clearSelection(); 110555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 110655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 110755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 110855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 110955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 111055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 111155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } finally { 111255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // enable/disable the ui 111355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project boolean enable = false; 111455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project synchronized (this) { 111555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project enable = mEmulatorConsole != null; 111655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 11175542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 111855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project enable(enable); 111955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 112055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 112155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 112255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 112355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Enable or disable the ui. Can be called from non ui threads. 112455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param enabled 112555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 112655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void enable(final boolean enabled) { 112755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 112855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Display d = mParent.getDisplay(); 112955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project d.asyncExec(new Runnable() { 1130ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 113155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void run() { 113255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mParent.isDisposed() == false) { 113355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project doEnable(enabled); 113455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 113555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 113655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 113755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (SWTException e) { 113855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // disposed. do nothing 113955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 114055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 114155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 114255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private boolean isValidPhoneNumber() { 114355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String number = mPhoneNumber.getText().trim(); 114455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 114555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return number.matches(RE_PHONE_NUMBER); 114655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 114755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 114855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 114955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Enable or disable the ui. Cannot be called from non ui threads. 115055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param enabled 115155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 115255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project protected void doEnable(boolean enabled) { 115355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceLabel.setEnabled(enabled); 115455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceMode.setEnabled(enabled); 115555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 115655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataLabel.setEnabled(enabled); 115755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataMode.setEnabled(enabled); 115855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 115955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSpeedLabel.setEnabled(enabled); 116055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkSpeed.setEnabled(enabled); 116155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 116255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatencyLabel.setEnabled(enabled); 116355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkLatency.setEnabled(enabled); 116455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 116555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Calling setEnabled on a text field will trigger a modifyText event, so we don't do it 116655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // if we don't need to. 116755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPhoneNumber.isEnabled() != enabled) { 116855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNumberLabel.setEnabled(enabled); 116955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPhoneNumber.setEnabled(enabled); 117055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 117155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 117255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project boolean valid = isValidPhoneNumber(); 117355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 117455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceButton.setEnabled(enabled && valid); 117555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSmsButton.setEnabled(enabled && valid); 117655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 117755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project boolean smsValid = enabled && valid && mSmsButton.getSelection(); 117855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 117955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Calling setEnabled on a text field will trigger a modifyText event, so we don't do it 118055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // if we don't need to. 118155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mSmsMessage.isEnabled() != smsValid) { 118255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mMessageLabel.setEnabled(smsValid); 118355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSmsMessage.setEnabled(smsValid); 118455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 118555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (enabled == false) { 118655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSmsMessage.setText(""); //$NON-NLs-1$ 118755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 118855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 118955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCallButton.setEnabled(enabled && valid); 119055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCancelButton.setEnabled(enabled && valid && mVoiceButton.getSelection()); 119155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 119255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (enabled == false) { 119355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mVoiceMode.clearSelection(); 119455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDataMode.clearSelection(); 119555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkSpeed.clearSelection(); 119655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mNetworkLatency.clearSelection(); 119755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPhoneNumber.getText().length() > 0) { 119855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPhoneNumber.setText(""); //$NON-NLS-1$ 119955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 120055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 120155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 120255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // location controls 120355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLocationFolders.setEnabled(enabled); 120455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 120555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDecimalButton.setEnabled(enabled); 120655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSexagesimalButton.setEnabled(enabled); 120755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLongitudeControls.setEnabled(enabled); 120855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLatitudeControls.setEnabled(enabled); 120955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 121055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxUploadButton.setEnabled(enabled); 121155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxWayPointTable.setEnabled(enabled); 121255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mGpxTrackTable.setEnabled(enabled); 121355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlUploadButton.setEnabled(enabled); 121455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mKmlWayPointTable.setEnabled(enabled); 121555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 121655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 121755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 121855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Returns the index of the combo item matching a specific GsmMode. 121955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param mode 122055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 122155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private int getGsmComboIndex(GsmMode mode) { 122255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (int i = 0 ; i < GSM_MODES.length; i++) { 122355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String[] modes = GSM_MODES[i]; 122455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mode.getTag().equals(modes[1])) { 122555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return i; 122655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 122755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 122855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return -1; 122955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 123055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 123155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 123255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Processes the result of a command sent to the console. 123355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param result the result of the command. 123455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 123555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private boolean processCommandResult(final String result) { 123655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (result != EmulatorConsole.RESULT_OK) { 123755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 123855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mParent.getDisplay().asyncExec(new Runnable() { 1239ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 124055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void run() { 124155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mParent.isDisposed() == false) { 124255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project MessageDialog.openError(mParent.getShell(), "Emulator Console", 124355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project result); 124455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 124555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 124655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 124755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (SWTException e) { 124855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // we're quitting, just ignore 124955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 12505542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 125155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return false; 125255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 12535542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 125455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return true; 125555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 125655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 125755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 125855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param track 125955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 126055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void playTrack(final Track track) { 126155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // no need to synchronize this check, the worst that can happen, is we start the thread 126255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // for nothing. 126355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null) { 126455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayGpxButton.setImage(mPauseImage); 126555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayKmlButton.setImage(mPauseImage); 126655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingTrack = true; 126755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 126855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingThread = new Thread() { 126955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 127055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void run() { 127155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 127255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TrackPoint[] trackPoints = track.getPoints(); 127355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int count = trackPoints.length; 12745542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 127555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the start index. 127655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int start = 0; 127755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayDirection == -1) { 127855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project start = count - 1; 127955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 12805542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 128155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (int p = start; p >= 0 && p < count; p += mPlayDirection) { 128255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingTrack == false) { 128355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 128455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 128555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 128655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the current point and send its location to 128755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // the emulator. 128855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final TrackPoint trackPoint = trackPoints[p]; 128955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 129055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project synchronized (EmulatorControlPanel.this) { 129155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole == null || 129255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.sendLocation( 129355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project trackPoint.getLongitude(), trackPoint.getLatitude(), 129455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project trackPoint.getElevation())) == false) { 129555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 129655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 129755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 129855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 129955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // if this is not the final point, then get the next one and 130055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // compute the delta time 130155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int nextIndex = p + mPlayDirection; 130255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (nextIndex >=0 && nextIndex < count) { 130355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TrackPoint nextPoint = trackPoints[nextIndex]; 130455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 130555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project long delta = nextPoint.getTime() - trackPoint.getTime(); 130655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (delta < 0) { 130755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project delta = -delta; 130855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 13095542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 131055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project long startTime = System.currentTimeMillis(); 131155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 131255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 131355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sleep(delta / mSpeed); 131455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (InterruptedException e) { 131555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingTrack == false) { 131655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 131755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 13185542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 131955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // we got interrupted, lets make sure we can play 132055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project do { 132155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project long waited = System.currentTimeMillis() - startTime; 132255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project long needToWait = delta / mSpeed; 132355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (waited < needToWait) { 132455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 132555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sleep(needToWait - waited); 132655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (InterruptedException e1) { 132755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // we'll just loop and wait again if needed. 132855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // unless we're supposed to stop 132955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingTrack == false) { 133055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 133155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 133255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 133355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 133455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project break; 133555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 133655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } while (true); 133755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 133855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 133955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 134055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } finally { 134155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingTrack = false; 134255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 134355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mParent.getDisplay().asyncExec(new Runnable() { 1344ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 134555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void run() { 134655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayGpxButton.isDisposed() == false) { 134755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayGpxButton.setImage(mPlayImage); 134855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayKmlButton.setImage(mPlayImage); 134955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 135055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 135155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 135255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (SWTException e) { 135355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // we're quitting, just ignore 135455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 135555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 135655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 135755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }; 135855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 135955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingThread.start(); 136055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 136155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 13625542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 136355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void playKml(final WayPoint[] trackPoints) { 136455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // no need to synchronize this check, the worst that can happen, is we start the thread 136555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // for nothing. 136655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole != null) { 136755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayGpxButton.setImage(mPauseImage); 136855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayKmlButton.setImage(mPauseImage); 136955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingTrack = true; 137055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 137155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingThread = new Thread() { 137255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 137355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void run() { 137455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 137555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int count = trackPoints.length; 13765542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 137755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the start index. 137855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int start = 0; 137955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayDirection == -1) { 138055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project start = count - 1; 138155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 13825542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 138355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (int p = start; p >= 0 && p < count; p += mPlayDirection) { 138455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingTrack == false) { 138555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 138655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 138755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 138855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the current point and send its location to 138955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // the emulator. 139055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project WayPoint trackPoint = trackPoints[p]; 139155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 139255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project synchronized (EmulatorControlPanel.this) { 139355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEmulatorConsole == null || 139455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project processCommandResult(mEmulatorConsole.sendLocation( 139555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project trackPoint.getLongitude(), trackPoint.getLatitude(), 139655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project trackPoint.getElevation())) == false) { 139755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 139855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 139955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 140055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 140155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // if this is not the final point, then get the next one and 140255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // compute the delta time 140355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int nextIndex = p + mPlayDirection; 140455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (nextIndex >=0 && nextIndex < count) { 140555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 140655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project long delta = 1000; // 1 second 140755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (delta < 0) { 140855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project delta = -delta; 140955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 14105542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 141155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project long startTime = System.currentTimeMillis(); 141255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 141355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 141455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sleep(delta / mSpeed); 141555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (InterruptedException e) { 141655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingTrack == false) { 141755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 141855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 14195542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 142055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // we got interrupted, lets make sure we can play 142155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project do { 142255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project long waited = System.currentTimeMillis() - startTime; 142355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project long needToWait = delta / mSpeed; 142455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (waited < needToWait) { 142555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 142655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sleep(needToWait - waited); 142755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (InterruptedException e1) { 142855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // we'll just loop and wait again if needed. 142955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // unless we're supposed to stop 143055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayingTrack == false) { 143155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 143255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 143355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 143455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 143555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project break; 143655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 143755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } while (true); 143855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 143955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 144055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 144155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } finally { 144255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingTrack = false; 144355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 144455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mParent.getDisplay().asyncExec(new Runnable() { 1445ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 144655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void run() { 144755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPlayGpxButton.isDisposed() == false) { 144855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayGpxButton.setImage(mPlayImage); 144955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayKmlButton.setImage(mPlayImage); 145055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 145155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 145255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 145355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (SWTException e) { 145455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // we're quitting, just ignore 145555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 145655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 145755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 145855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }; 145955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 146055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPlayingThread.start(); 14615542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet } 146255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 146355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project} 1464