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.ddms; 1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmlib.AndroidDebugBridge; 20ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbyeimport com.android.ddmlib.AndroidDebugBridge.IClientChangeListener; 2155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmlib.Client; 222143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohetimport com.android.ddmlib.ClientData; 238f7e536747d1d4a26c12c147057f49cd22654794Xavier Ducrohetimport com.android.ddmlib.ClientData.IHprofDumpHandler; 248f7e536747d1d4a26c12c147057f49cd22654794Xavier Ducrohetimport com.android.ddmlib.ClientData.MethodProfilingStatus; 25ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbyeimport com.android.ddmlib.IDevice; 26ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbyeimport com.android.ddmlib.Log; 278f7e536747d1d4a26c12c147057f49cd22654794Xavier Ducrohetimport com.android.ddmlib.Log.ILogOutput; 288f7e536747d1d4a26c12c147057f49cd22654794Xavier Ducrohetimport com.android.ddmlib.Log.LogLevel; 29ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbyeimport com.android.ddmlib.SyncException; 30ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbyeimport com.android.ddmlib.SyncService; 3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.AllocationPanel; 32625b7ea2b82c3f4948bb8bae55f631f85e9c04a9Siva Velusamyimport com.android.ddmuilib.DdmUiPreferences; 3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.DevicePanel; 34ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbyeimport com.android.ddmuilib.DevicePanel.IUiSelectionListener; 3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.EmulatorControlPanel; 3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.HeapPanel; 3755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.ITableFocusListener; 3855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.ImageLoader; 3955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.InfoPanel; 4055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.NativeHeapPanel; 4155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.ScreenShotDialog; 4255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.SysinfoPanel; 4355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.TablePanel; 4455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.ThreadPanel; 4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.actions.ToolItemAction; 4655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.explorer.DeviceExplorer; 47bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohetimport com.android.ddmuilib.handler.BaseFileHandler; 48bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohetimport com.android.ddmuilib.handler.MethodProfilingHandler; 4955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.log.event.EventLogPanel; 502ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamyimport com.android.ddmuilib.logcat.LogCatPanel; 5155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.logcat.LogColors; 5255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.logcat.LogFilter; 5355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.logcat.LogPanel; 5455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport com.android.ddmuilib.logcat.LogPanel.ILogFilterStorageManager; 55613f55001e7f39590d02227179f6f272ae8ab96fJeff Sharkeyimport com.android.ddmuilib.net.NetworkPanel; 569058318f1052d7813e1c4989fdad49735d65b523Raphael Mollimport com.android.menubar.IMenuBarCallback; 579058318f1052d7813e1c4989fdad49735d65b523Raphael Mollimport com.android.menubar.IMenuBarEnhancer; 589058318f1052d7813e1c4989fdad49735d65b523Raphael Mollimport com.android.menubar.IMenuBarEnhancer.MenuBarMode; 599058318f1052d7813e1c4989fdad49735d65b523Raphael Mollimport com.android.menubar.MenuBarEnhancer; 6055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 6155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.dialogs.MessageDialog; 6255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.preference.IPreferenceStore; 6355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.preference.PreferenceStore; 6455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.SWT; 6555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.SWTError; 6655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.SWTException; 6755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.dnd.Clipboard; 6855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.ControlEvent; 6955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.ControlListener; 7055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.MenuAdapter; 7155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.MenuEvent; 7255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.SelectionAdapter; 7355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.SelectionEvent; 7455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.ShellEvent; 7555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.events.ShellListener; 7655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.graphics.Color; 7755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.graphics.Font; 7855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.graphics.FontData; 792143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohetimport org.eclipse.swt.graphics.Image; 8055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.graphics.Rectangle; 8155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.layout.FillLayout; 8255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.layout.FormAttachment; 8355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.layout.FormData; 8455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.layout.FormLayout; 8555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.layout.GridData; 8655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.layout.GridLayout; 8755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Composite; 8855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Display; 8955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Event; 9055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Label; 9155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Listener; 9255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Menu; 9355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.MenuItem; 9455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Sash; 9555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.Shell; 9655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.TabFolder; 9755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.TabItem; 9855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.ToolBar; 9955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.swt.widgets.ToolItem; 10055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 10155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.io.File; 10255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport java.util.ArrayList; 10355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 10455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/** 10555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * This acts as the UI builder. This cannot be its own thread since this prevent using AWT in an 10655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * SWT application. So this class mainly builds the ui, and manages communication between the panels 1075542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet * when {@link IDevice} / {@link Client} selection changes. 10855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 109bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohetpublic class UIThread implements IUiSelectionListener, IClientChangeListener { 110a84dcfef93b62171ede7e3743adb04e2ade5b290Raphael public static final String APP_NAME = "DDMS"; 1119058318f1052d7813e1c4989fdad49735d65b523Raphael Moll 11255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /* 11355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * UI tab panel definitions. The constants here must match up with the array 11455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * indices in mPanels. PANEL_CLIENT_LIST is a "virtual" panel representing 11555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * the client list. 11655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 11755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public static final int PANEL_CLIENT_LIST = -1; 11855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 11955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public static final int PANEL_INFO = 0; 12055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 12155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public static final int PANEL_THREAD = 1; 12255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 12355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public static final int PANEL_HEAP = 2; 12455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 12588ee5dd5573f9700f6d5983af524b8eaf82665beSiva Velusamy private static final int PANEL_NATIVE_HEAP = 3; 12655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 12755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final int PANEL_ALLOCATIONS = 4; 12855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 12955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final int PANEL_SYSINFO = 5; 13055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 131613f55001e7f39590d02227179f6f272ae8ab96fJeff Sharkey private static final int PANEL_NETWORK = 6; 132613f55001e7f39590d02227179f6f272ae8ab96fJeff Sharkey 133613f55001e7f39590d02227179f6f272ae8ab96fJeff Sharkey private static final int PANEL_COUNT = 7; 13455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 13555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** Content is setup in the constructor */ 13655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static TablePanel[] mPanels = new TablePanel[PANEL_COUNT]; 13755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 13855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final String[] mPanelNames = new String[] { 13988ee5dd5573f9700f6d5983af524b8eaf82665beSiva Velusamy "Info", "Threads", "VM Heap", "Native Heap", 140613f55001e7f39590d02227179f6f272ae8ab96fJeff Sharkey "Allocation Tracker", "Sysinfo", "Network" 14155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }; 14255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 14355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final String[] mPanelTips = new String[] { 14455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "Client information", "Thread status", "VM heap status", 145613f55001e7f39590d02227179f6f272ae8ab96fJeff Sharkey "Native heap status", "Allocation Tracker", "Sysinfo graphs", 146613f55001e7f39590d02227179f6f272ae8ab96fJeff Sharkey "Network usage" 14755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }; 14855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 14955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final String PREFERENCE_LOGSASH = 15055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "logSashLocation"; //$NON-NLS-1$ 15155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final String PREFERENCE_SASH = 15255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "sashLocation"; //$NON-NLS-1$ 15355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 15455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final String PREFS_COL_TIME = 15555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "logcat.time"; //$NON-NLS-1$ 15655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final String PREFS_COL_LEVEL = 15755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "logcat.level"; //$NON-NLS-1$ 15855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final String PREFS_COL_PID = 15955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "logcat.pid"; //$NON-NLS-1$ 16055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final String PREFS_COL_TAG = 16155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "logcat.tag"; //$NON-NLS-1$ 16255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final String PREFS_COL_MESSAGE = 16355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "logcat.message"; //$NON-NLS-1$ 16455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 16555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static final String PREFS_FILTERS = "logcat.filter"; //$NON-NLS-1$ 16655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 16755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // singleton instance 16855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private static UIThread mInstance = new UIThread(); 16955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 17055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // our display 17155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Display mDisplay; 17255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 17355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // the table we show in the left-hand pane 17455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private DevicePanel mDevicePanel; 17555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1765542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet private IDevice mCurrentDevice = null; 17755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Client mCurrentClient = null; 17855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 17955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // status line at the bottom of the app window 18055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Label mStatusLine; 18155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 18255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // some toolbar items we need to update 18355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private ToolItem mTBShowThreadUpdates; 18455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private ToolItem mTBShowHeapUpdates; 18555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private ToolItem mTBHalt; 18655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private ToolItem mTBCauseGc; 1872143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet private ToolItem mTBDumpHprof; 188bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet private ToolItem mTBProfiling; 18955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 19055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private final class FilterStorage implements ILogFilterStorageManager { 19155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 192ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 19355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public LogFilter[] getFilterFromStore() { 19455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String filterPrefs = PrefsDialog.getStore().getString( 19555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFS_FILTERS); 19655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 19755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // split in a string per filter 19855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String[] filters = filterPrefs.split("\\|"); //$NON-NLS-1$ 19955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 20055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ArrayList<LogFilter> list = 20155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project new ArrayList<LogFilter>(filters.length); 20255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 20355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (String f : filters) { 20455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (f.length() > 0) { 20555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project LogFilter logFilter = new LogFilter(); 20655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (logFilter.loadFromString(f)) { 20755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project list.add(logFilter); 20855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 20955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 21055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 21155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 21255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return list.toArray(new LogFilter[list.size()]); 21355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 21455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 215ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 21655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void saveFilters(LogFilter[] filters) { 21755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project StringBuilder sb = new StringBuilder(); 21855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (LogFilter f : filters) { 21955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String filterString = f.toString(); 22055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sb.append(filterString); 22155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sb.append('|'); 22255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 22355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 22455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PrefsDialog.getStore().setValue(PREFS_FILTERS, sb.toString()); 22555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 22655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 227ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 22855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public boolean requiresDefaultFilter() { 22955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return true; 23055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 23155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 23255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 23355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 23481e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy /** 23581e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy * Flag to indicate whether to use the old or the new logcat view. This is a 23681e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy * temporary workaround that will be removed once the new view is complete. 23781e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy */ 2384000b0448ad1edd0aee7882a974bf02c829669caSiva Velusamy private static final String USE_OLD_LOGCAT_VIEW = 2394000b0448ad1edd0aee7882a974bf02c829669caSiva Velusamy System.getenv("ANDROID_USE_OLD_LOGCAT_VIEW"); 240ec7f13dae12a4b1ddfd3ab8c21550b617b941a40Siva Velusamy public static boolean useOldLogCatView() { 2414000b0448ad1edd0aee7882a974bf02c829669caSiva Velusamy return USE_OLD_LOGCAT_VIEW != null; 24281e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy } 24381e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy 24481e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy private LogPanel mLogPanel; /* only valid when useOldLogCatView() == true */ 2452ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy private LogCatPanel mLogCatPanel; /* only valid when useOldLogCatView() == false */ 24655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 24755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private ToolItemAction mCreateFilterAction; 24855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private ToolItemAction mDeleteFilterAction; 24955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private ToolItemAction mEditFilterAction; 25055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private ToolItemAction mExportAction; 25155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private ToolItemAction mClearAction; 25255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 25355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private ToolItemAction[] mLogLevelActions; 25455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private String[] mLogLevelIcons = { 25555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "v.png", //$NON-NLS-1S 25655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "d.png", //$NON-NLS-1S 25755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "i.png", //$NON-NLS-1S 25855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "w.png", //$NON-NLS-1S 25955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "e.png", //$NON-NLS-1S 26055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }; 26155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 26255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project protected Clipboard mClipboard; 26355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 26455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private MenuItem mCopyMenuItem; 26555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 26655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private MenuItem mSelectAllMenuItem; 26755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 26855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private TableFocusListener mTableListener; 26955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 27055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private DeviceExplorer mExplorer = null; 27155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private Shell mExplorerShell = null; 27255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 27355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private EmulatorControlPanel mEmulatorPanel; 2745542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 27555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private EventLogPanel mEventLogPanel; 27655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 277bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet private Image mTracingStartImage; 278bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 279bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet private Image mTracingStopImage; 280bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 281e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet private ImageLoader mDdmUiLibLoader; 282e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet 28355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private class TableFocusListener implements ITableFocusListener { 28455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 28555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private IFocusedTableActivator mCurrentActivator; 28655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 287ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 28855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void focusGained(IFocusedTableActivator activator) { 28955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCurrentActivator = activator; 29055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mCopyMenuItem.isDisposed() == false) { 29155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCopyMenuItem.setEnabled(true); 29255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSelectAllMenuItem.setEnabled(true); 29355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 29455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 29555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 296ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 29755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void focusLost(IFocusedTableActivator activator) { 29855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // if we move from one table to another, it's unclear 29955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // if the old table lose its focus before the new 30055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // one gets the focus, so we need to check. 30155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (activator == mCurrentActivator) { 30255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project activator = null; 30355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mCopyMenuItem.isDisposed() == false) { 30455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCopyMenuItem.setEnabled(false); 30555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSelectAllMenuItem.setEnabled(false); 30655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 30755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 30855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 30955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 31055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void copy(Clipboard clipboard) { 31155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mCurrentActivator != null) { 31255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCurrentActivator.copy(clipboard); 31355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 31455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 31555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 31655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void selectAll() { 31755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mCurrentActivator != null) { 31855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCurrentActivator.selectAll(); 31955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 32055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 32155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 32255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 323bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet /** 324bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet * Handler for HPROF dumps. 325bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet * This will always prompt the user to save the HPROF file. 326bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet */ 327bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet private class HProfHandler extends BaseFileHandler implements IHprofDumpHandler { 3282143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet 3292143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet public HProfHandler(Shell parentShell) { 330bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet super(parentShell); 3312143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 3322143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet 333ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 33444783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet public void onEndFailure(final Client client, final String message) { 3352143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet mDisplay.asyncExec(new Runnable() { 336ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 3372143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet public void run() { 3382143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet try { 33944783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet displayErrorFromUiThread( 34044783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet "Unable to create HPROF file for application '%1$s'\n\n%2$s" + 341bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet "Check logcat for more information.", 34244783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet client.getClientData().getClientDescription(), 34344783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet message != null ? message + "\n\n" : ""); 3442143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } finally { 3452143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet // this will make sure the dump hprof button is re-enabled for the 3462143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet // current selection. as the client is finished dumping an hprof file 3472143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet enableButtons(); 3482143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 3492143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 3502143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet }); 3512143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 3522143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet 353ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 354bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet public void onSuccess(final String remoteFilePath, final Client client) { 3552143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet mDisplay.asyncExec(new Runnable() { 356ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 3572143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet public void run() { 3582143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet final IDevice device = client.getDevice(); 3592143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet try { 3602143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet // get the sync service to pull the HPROF file 3612143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet final SyncService sync = client.getDevice().getSyncService(); 3622143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet if (sync != null) { 3639db3286c710abeb2c9478c2f95657d945a55d176Xavier Ducrohet promptAndPull(sync, 364bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet client.getClientData().getClientDescription() + ".hprof", 365bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet remoteFilePath, "Save HPROF file"); 3662143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } else { 3679db3286c710abeb2c9478c2f95657d945a55d176Xavier Ducrohet displayErrorFromUiThread( 3689db3286c710abeb2c9478c2f95657d945a55d176Xavier Ducrohet "Unable to download HPROF file from device '%1$s'.", 369bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet device.getSerialNumber()); 3702143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 3719db3286c710abeb2c9478c2f95657d945a55d176Xavier Ducrohet } catch (SyncException e) { 3729db3286c710abeb2c9478c2f95657d945a55d176Xavier Ducrohet if (e.wasCanceled() == false) { 3739db3286c710abeb2c9478c2f95657d945a55d176Xavier Ducrohet displayErrorFromUiThread( 3749db3286c710abeb2c9478c2f95657d945a55d176Xavier Ducrohet "Unable to download HPROF file from device '%1$s'.\n\n%2$s", 3759db3286c710abeb2c9478c2f95657d945a55d176Xavier Ducrohet device.getSerialNumber(), e.getMessage()); 3769db3286c710abeb2c9478c2f95657d945a55d176Xavier Ducrohet } 3772143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } catch (Exception e) { 37844783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet displayErrorFromUiThread("Unable to download HPROF file from device '%1$s'.", 379bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet device.getSerialNumber()); 3802143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet 3812143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } finally { 3822143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet // this will make sure the dump hprof button is re-enabled for the 3832143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet // current selection. as the client is finished dumping an hprof file 3842143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet enableButtons(); 3852143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 3862143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 3872143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet }); 3882143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 3892143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet 390ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 39144783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet public void onSuccess(final byte[] data, final Client client) { 39244783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet mDisplay.asyncExec(new Runnable() { 393ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 39444783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet public void run() { 39544783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet promptAndSave(client.getClientData().getClientDescription() + ".hprof", data, 39644783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet "Save HPROF file"); 39744783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet } 39844783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet }); 39944783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet } 40044783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet 40144783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet @Override 40244783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet protected String getDialogTitle() { 40344783788698204a0dc3b311f5b6add970fb40f40Xavier Ducrohet return "HPROF Error"; 4042143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 4052143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 40655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 407bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 40855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 40955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Generic constructor. 41055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 41155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private UIThread() { 41255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPanels[PANEL_INFO] = new InfoPanel(); 41355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPanels[PANEL_THREAD] = new ThreadPanel(); 41455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPanels[PANEL_HEAP] = new HeapPanel(); 41555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (PrefsDialog.getStore().getBoolean(PrefsDialog.SHOW_NATIVE_HEAP)) { 4167f11f7bddb3fde2ac44499094c28a923f00873e2Siva Velusamy if (System.getenv("ANDROID_DDMS_OLD_HEAP_PANEL") != null) { 4177f11f7bddb3fde2ac44499094c28a923f00873e2Siva Velusamy mPanels[PANEL_NATIVE_HEAP] = new NativeHeapPanel(); 4187f11f7bddb3fde2ac44499094c28a923f00873e2Siva Velusamy } else { 41988ee5dd5573f9700f6d5983af524b8eaf82665beSiva Velusamy mPanels[PANEL_NATIVE_HEAP] = 42088ee5dd5573f9700f6d5983af524b8eaf82665beSiva Velusamy new com.android.ddmuilib.heap.NativeHeapPanel(getStore()); 42188ee5dd5573f9700f6d5983af524b8eaf82665beSiva Velusamy } 42255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 42355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPanels[PANEL_NATIVE_HEAP] = null; 42455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 42555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPanels[PANEL_ALLOCATIONS] = new AllocationPanel(); 42655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mPanels[PANEL_SYSINFO] = new SysinfoPanel(); 427613f55001e7f39590d02227179f6f272ae8ab96fJeff Sharkey mPanels[PANEL_NETWORK] = new NetworkPanel(); 42855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 42955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 43055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 43155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Get singleton instance of the UI thread. 43255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 43355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public static UIThread getInstance() { 43455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return mInstance; 43555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 43655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 43755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 43855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Return the Display. Don't try this unless you're in the UI thread. 43955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 44055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public Display getDisplay() { 44155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return mDisplay; 44255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 44355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 44455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void asyncExec(Runnable r) { 44555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mDisplay != null && mDisplay.isDisposed() == false) { 44655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDisplay.asyncExec(r); 44755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 44855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 44955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 45055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** returns the IPreferenceStore */ 45155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public IPreferenceStore getStore() { 45255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return PrefsDialog.getStore(); 45355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 45455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 45555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 45655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Create SWT objects and drive the user interface event loop. 4579058318f1052d7813e1c4989fdad49735d65b523Raphael Moll * @param ddmsParentLocation location of the folder that contains ddms. 45855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 4590c44ff52ccfbafa1bfa5dbd49be773dd8e922678Xavier Ducrohet public void runUI(String ddmsParentLocation) { 4609058318f1052d7813e1c4989fdad49735d65b523Raphael Moll Display.setAppName(APP_NAME); 461bbd4f1dff7c6940bf4439569f19e8705cd2c3818Siva Velusamy mDisplay = Display.getDefault(); 462a84dcfef93b62171ede7e3743adb04e2ade5b290Raphael final Shell shell = new Shell(mDisplay, SWT.SHELL_TRIM); 46355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 46455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create the image loaders for DDMS and DDMUILIB 465e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mDdmUiLibLoader = ImageLoader.getDdmUiLibLoader(); 4665542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 467e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet shell.setImage(ImageLoader.getLoader(this.getClass()).loadImage(mDisplay, 4688f7e536747d1d4a26c12c147057f49cd22654794Xavier Ducrohet "ddms-128.png", //$NON-NLS-1$ 46955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 100, 50, null)); 47055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 47155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Log.setLogOutput(new ILogOutput() { 472ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 47355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void printAndPromptLog(final LogLevel logLevel, final String tag, 47455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final String message) { 47555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Log.printLog(logLevel, tag, message); 47655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // dialog box only run in UI thread.. 47755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDisplay.asyncExec(new Runnable() { 478ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 47955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void run() { 4809058318f1052d7813e1c4989fdad49735d65b523Raphael Moll Shell activeShell = mDisplay.getActiveShell(); 48155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (logLevel == LogLevel.ERROR) { 4829058318f1052d7813e1c4989fdad49735d65b523Raphael Moll MessageDialog.openError(activeShell, tag, message); 48355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 4849058318f1052d7813e1c4989fdad49735d65b523Raphael Moll MessageDialog.openWarning(activeShell, tag, message); 48555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 48655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 48755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 48855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 48955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 490ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 49155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void printLog(LogLevel logLevel, String tag, String message) { 49255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Log.printLog(logLevel, tag, message); 49355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 49455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 49555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 4962143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet // set the handler for hprof dump 4972143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet ClientData.setHprofDumpHandler(new HProfHandler(shell)); 498bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet ClientData.setMethodProfilingHandler(new MethodProfilingHandler(shell)); 4992143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet 50055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // [try to] ensure ADB is running 501020a428e1dd0231555e5ef855e3e6eca38e59c48Xavier Ducrohet // in the new SDK, adb is in the platform-tools, but when run from the command line 502020a428e1dd0231555e5ef855e3e6eca38e59c48Xavier Ducrohet // in the Android source tree, then adb is next to ddms. 5030c44ff52ccfbafa1bfa5dbd49be773dd8e922678Xavier Ducrohet String adbLocation; 5040c44ff52ccfbafa1bfa5dbd49be773dd8e922678Xavier Ducrohet if (ddmsParentLocation != null && ddmsParentLocation.length() != 0) { 505020a428e1dd0231555e5ef855e3e6eca38e59c48Xavier Ducrohet // check if there's a platform-tools folder 506020a428e1dd0231555e5ef855e3e6eca38e59c48Xavier Ducrohet File platformTools = new File(new File(ddmsParentLocation).getParent(), 507020a428e1dd0231555e5ef855e3e6eca38e59c48Xavier Ducrohet "platform-tools"); //$NON-NLS-1$ 508020a428e1dd0231555e5ef855e3e6eca38e59c48Xavier Ducrohet if (platformTools.isDirectory()) { 509020a428e1dd0231555e5ef855e3e6eca38e59c48Xavier Ducrohet adbLocation = platformTools.getAbsolutePath() + File.separator + "adb"; //$NON-NLS-1$ 510020a428e1dd0231555e5ef855e3e6eca38e59c48Xavier Ducrohet } else { 511020a428e1dd0231555e5ef855e3e6eca38e59c48Xavier Ducrohet adbLocation = ddmsParentLocation + File.separator + "adb"; //$NON-NLS-1$ 512020a428e1dd0231555e5ef855e3e6eca38e59c48Xavier Ducrohet } 51355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 51455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project adbLocation = "adb"; //$NON-NLS-1$ 51555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 51655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 51755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project AndroidDebugBridge.init(true /* debugger support */); 51855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project AndroidDebugBridge.createBridge(adbLocation, true /* forceNewBridge */); 51955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 520bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // we need to listen to client change to be notified of client status (profiling) change 521bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet AndroidDebugBridge.addClientChangeListener(this); 522bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 52355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.setText("Dalvik Debug Monitor"); 52455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project setConfirmClose(shell); 52555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createMenus(shell); 52655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createWidgets(shell); 52755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 52855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.pack(); 52955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project setSizeAndPosition(shell); 53055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.open(); 53155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 53255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Log.d("ddms", "UI is up"); 53355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 53455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project while (!shell.isDisposed()) { 53555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (!mDisplay.readAndDispatch()) 53655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDisplay.sleep(); 53755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 53881e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy if (useOldLogCatView()) { 53981e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy mLogPanel.stopLogCat(true); 54081e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy } 54155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 54255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDevicePanel.dispose(); 54355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (TablePanel panel : mPanels) { 54455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (panel != null) { 54555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project panel.dispose(); 54655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 54755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 54855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 549e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet ImageLoader.dispose(); 550e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet 55155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDisplay.dispose(); 55255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Log.d("ddms", "UI is down"); 55355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 55455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 55555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 55655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Set the size and position of the main window from the preference, and 55755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * setup listeners for control events (resize/move of the window) 55855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 55955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void setSizeAndPosition(final Shell shell) { 56055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.setMinimumSize(400, 200); 56155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 56255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the x/y and w/h from the prefs 56355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PreferenceStore prefs = PrefsDialog.getStore(); 56455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int x = prefs.getInt(PrefsDialog.SHELL_X); 56555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int y = prefs.getInt(PrefsDialog.SHELL_Y); 56655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int w = prefs.getInt(PrefsDialog.SHELL_WIDTH); 56755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int h = prefs.getInt(PrefsDialog.SHELL_HEIGHT); 56855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 56955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // check that we're not out of the display area 57055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Rectangle rect = mDisplay.getClientArea(); 57155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // first check the width/height 57255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (w > rect.width) { 57355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project w = rect.width; 57455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.SHELL_WIDTH, rect.width); 57555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 57655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (h > rect.height) { 57755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project h = rect.height; 57855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.SHELL_HEIGHT, rect.height); 57955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 58055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // then check x. Make sure the left corner is in the screen 58155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (x < rect.x) { 58255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project x = rect.x; 58355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.SHELL_X, rect.x); 58455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else if (x >= rect.x + rect.width) { 58555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project x = rect.x + rect.width - w; 58655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.SHELL_X, rect.x); 58755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 58855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // then check y. Make sure the left corner is in the screen 58955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (y < rect.y) { 59055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project y = rect.y; 59155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.SHELL_Y, rect.y); 59255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else if (y >= rect.y + rect.height) { 59355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project y = rect.y + rect.height - h; 59455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.SHELL_Y, rect.y); 59555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 59655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 59755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // now we can set the location/size 59855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.setBounds(x, y, w, h); 59955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 60055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // add listener for resize/move 60155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.addControlListener(new ControlListener() { 602ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 60355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void controlMoved(ControlEvent e) { 60455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the new x/y 6059058318f1052d7813e1c4989fdad49735d65b523Raphael Moll Rectangle controlBounds = shell.getBounds(); 60655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // store in pref file 6079058318f1052d7813e1c4989fdad49735d65b523Raphael Moll PreferenceStore currentPrefs = PrefsDialog.getStore(); 6089058318f1052d7813e1c4989fdad49735d65b523Raphael Moll currentPrefs.setValue(PrefsDialog.SHELL_X, controlBounds.x); 6099058318f1052d7813e1c4989fdad49735d65b523Raphael Moll currentPrefs.setValue(PrefsDialog.SHELL_Y, controlBounds.y); 61055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 61155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 612ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 61355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void controlResized(ControlEvent e) { 61455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the new w/h 6159058318f1052d7813e1c4989fdad49735d65b523Raphael Moll Rectangle controlBounds = shell.getBounds(); 61655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // store in pref file 6179058318f1052d7813e1c4989fdad49735d65b523Raphael Moll PreferenceStore currentPrefs = PrefsDialog.getStore(); 6189058318f1052d7813e1c4989fdad49735d65b523Raphael Moll currentPrefs.setValue(PrefsDialog.SHELL_WIDTH, controlBounds.width); 6199058318f1052d7813e1c4989fdad49735d65b523Raphael Moll currentPrefs.setValue(PrefsDialog.SHELL_HEIGHT, controlBounds.height); 62055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 62155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 62255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 62355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 62455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 62555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Set the size and position of the file explorer window from the 62655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * preference, and setup listeners for control events (resize/move of 62755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * the window) 62855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 62955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void setExplorerSizeAndPosition(final Shell shell) { 63055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.setMinimumSize(400, 200); 63155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 63255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the x/y and w/h from the prefs 63355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PreferenceStore prefs = PrefsDialog.getStore(); 63455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int x = prefs.getInt(PrefsDialog.EXPLORER_SHELL_X); 63555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int y = prefs.getInt(PrefsDialog.EXPLORER_SHELL_Y); 63655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int w = prefs.getInt(PrefsDialog.EXPLORER_SHELL_WIDTH); 63755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int h = prefs.getInt(PrefsDialog.EXPLORER_SHELL_HEIGHT); 63855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 63955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // check that we're not out of the display area 64055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Rectangle rect = mDisplay.getClientArea(); 64155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // first check the width/height 64255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (w > rect.width) { 64355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project w = rect.width; 64455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.EXPLORER_SHELL_WIDTH, rect.width); 64555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 64655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (h > rect.height) { 64755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project h = rect.height; 64855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.EXPLORER_SHELL_HEIGHT, rect.height); 64955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 65055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // then check x. Make sure the left corner is in the screen 65155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (x < rect.x) { 65255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project x = rect.x; 65355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.EXPLORER_SHELL_X, rect.x); 65455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else if (x >= rect.x + rect.width) { 65555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project x = rect.x + rect.width - w; 65655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.EXPLORER_SHELL_X, rect.x); 65755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 65855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // then check y. Make sure the left corner is in the screen 65955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (y < rect.y) { 66055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project y = rect.y; 66155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.EXPLORER_SHELL_Y, rect.y); 66255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else if (y >= rect.y + rect.height) { 66355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project y = rect.y + rect.height - h; 66455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project prefs.setValue(PrefsDialog.EXPLORER_SHELL_Y, rect.y); 66555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 66655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 66755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // now we can set the location/size 66855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.setBounds(x, y, w, h); 66955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 67055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // add listener for resize/move 67155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.addControlListener(new ControlListener() { 672ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 67355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void controlMoved(ControlEvent e) { 67455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the new x/y 6759058318f1052d7813e1c4989fdad49735d65b523Raphael Moll Rectangle controlBounds = shell.getBounds(); 67655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // store in pref file 6779058318f1052d7813e1c4989fdad49735d65b523Raphael Moll PreferenceStore currentPrefs = PrefsDialog.getStore(); 6789058318f1052d7813e1c4989fdad49735d65b523Raphael Moll currentPrefs.setValue(PrefsDialog.EXPLORER_SHELL_X, controlBounds.x); 6799058318f1052d7813e1c4989fdad49735d65b523Raphael Moll currentPrefs.setValue(PrefsDialog.EXPLORER_SHELL_Y, controlBounds.y); 68055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 68155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 682ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 68355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void controlResized(ControlEvent e) { 68455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the new w/h 6859058318f1052d7813e1c4989fdad49735d65b523Raphael Moll Rectangle controlBounds = shell.getBounds(); 68655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // store in pref file 6879058318f1052d7813e1c4989fdad49735d65b523Raphael Moll PreferenceStore currentPrefs = PrefsDialog.getStore(); 6889058318f1052d7813e1c4989fdad49735d65b523Raphael Moll currentPrefs.setValue(PrefsDialog.EXPLORER_SHELL_WIDTH, controlBounds.width); 6899058318f1052d7813e1c4989fdad49735d65b523Raphael Moll currentPrefs.setValue(PrefsDialog.EXPLORER_SHELL_HEIGHT, controlBounds.height); 69055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 69155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 69255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 69355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 69455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /* 6959058318f1052d7813e1c4989fdad49735d65b523Raphael Moll * Set the confirm-before-close dialog. 69655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 69755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void setConfirmClose(final Shell shell) { 6989058318f1052d7813e1c4989fdad49735d65b523Raphael Moll // Note: there was some commented out code to display a confirmation box 6999058318f1052d7813e1c4989fdad49735d65b523Raphael Moll // when closing. The feature seems unnecessary and the code was not being 7009058318f1052d7813e1c4989fdad49735d65b523Raphael Moll // used, so it has been removed. 70155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 70255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 70355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /* 70455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Create the menu bar and items. 70555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 70655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createMenus(final Shell shell) { 70755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create menu bar 70855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Menu menuBar = new Menu(shell, SWT.BAR); 70955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 71055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create top-level items 71155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project MenuItem fileItem = new MenuItem(menuBar, SWT.CASCADE); 71255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project fileItem.setText("&File"); 71355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project MenuItem editItem = new MenuItem(menuBar, SWT.CASCADE); 71455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project editItem.setText("&Edit"); 71555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project MenuItem actionItem = new MenuItem(menuBar, SWT.CASCADE); 71655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project actionItem.setText("&Actions"); 71755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project MenuItem deviceItem = new MenuItem(menuBar, SWT.CASCADE); 71855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project deviceItem.setText("&Device"); 71955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 72055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create top-level menus 72155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Menu fileMenu = new Menu(menuBar); 72255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project fileItem.setMenu(fileMenu); 72355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Menu editMenu = new Menu(menuBar); 72455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project editItem.setMenu(editMenu); 72555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Menu actionMenu = new Menu(menuBar); 72655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project actionItem.setMenu(actionMenu); 72755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Menu deviceMenu = new Menu(menuBar); 72855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project deviceItem.setMenu(deviceMenu); 72955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 73055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project MenuItem item; 73155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 73255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create File menu items 73355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item = new MenuItem(fileMenu, SWT.NONE); 73455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setText("&Static Port Configuration..."); 73555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.addSelectionListener(new SelectionAdapter() { 73655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 73755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 73855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project StaticPortConfigDialog dlg = new StaticPortConfigDialog(shell); 73955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg.open(); 74055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 74155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 74255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 7439058318f1052d7813e1c4989fdad49735d65b523Raphael Moll IMenuBarEnhancer enhancer = MenuBarEnhancer.setupMenu(APP_NAME, fileMenu, 7449058318f1052d7813e1c4989fdad49735d65b523Raphael Moll new IMenuBarCallback() { 745ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 7469058318f1052d7813e1c4989fdad49735d65b523Raphael Moll public void printError(String format, Object... args) { 7479058318f1052d7813e1c4989fdad49735d65b523Raphael Moll Log.e("DDMS Menu Bar", String.format(format, args)); 7489058318f1052d7813e1c4989fdad49735d65b523Raphael Moll } 74955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 750ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 7519058318f1052d7813e1c4989fdad49735d65b523Raphael Moll public void onPreferencesMenuSelected() { 7529058318f1052d7813e1c4989fdad49735d65b523Raphael Moll PrefsDialog.run(shell); 7539058318f1052d7813e1c4989fdad49735d65b523Raphael Moll } 7549058318f1052d7813e1c4989fdad49735d65b523Raphael Moll 755ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 7569058318f1052d7813e1c4989fdad49735d65b523Raphael Moll public void onAboutMenuSelected() { 7579058318f1052d7813e1c4989fdad49735d65b523Raphael Moll AboutDialog dlg = new AboutDialog(shell); 7589058318f1052d7813e1c4989fdad49735d65b523Raphael Moll dlg.open(); 75955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 76055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 76155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 7629058318f1052d7813e1c4989fdad49735d65b523Raphael Moll if (enhancer.getMenuBarMode() == MenuBarMode.GENERIC) { 7639058318f1052d7813e1c4989fdad49735d65b523Raphael Moll new MenuItem(fileMenu, SWT.SEPARATOR); 7649058318f1052d7813e1c4989fdad49735d65b523Raphael Moll 7659058318f1052d7813e1c4989fdad49735d65b523Raphael Moll item = new MenuItem(fileMenu, SWT.NONE); 7669058318f1052d7813e1c4989fdad49735d65b523Raphael Moll item.setText("E&xit\tCtrl-Q"); 7674f7dbc53dbf6879365e54ffd1f8d13de69fec3acSiva Velusamy item.setAccelerator('Q' | SWT.MOD1); 7689058318f1052d7813e1c4989fdad49735d65b523Raphael Moll item.addSelectionListener(new SelectionAdapter() { 7699058318f1052d7813e1c4989fdad49735d65b523Raphael Moll @Override 7709058318f1052d7813e1c4989fdad49735d65b523Raphael Moll public void widgetSelected(SelectionEvent e) { 7719058318f1052d7813e1c4989fdad49735d65b523Raphael Moll shell.close(); 7729058318f1052d7813e1c4989fdad49735d65b523Raphael Moll } 7739058318f1052d7813e1c4989fdad49735d65b523Raphael Moll }); 7749058318f1052d7813e1c4989fdad49735d65b523Raphael Moll } 7759058318f1052d7813e1c4989fdad49735d65b523Raphael Moll 77655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create edit menu items 77755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCopyMenuItem = new MenuItem(editMenu, SWT.NONE); 77855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCopyMenuItem.setText("&Copy\tCtrl-C"); 7794f7dbc53dbf6879365e54ffd1f8d13de69fec3acSiva Velusamy mCopyMenuItem.setAccelerator('C' | SWT.MOD1); 78055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCopyMenuItem.addSelectionListener(new SelectionAdapter() { 78155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 78255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 78355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTableListener.copy(mClipboard); 78455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 78555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 78655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 78755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project new MenuItem(editMenu, SWT.SEPARATOR); 78855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 78955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSelectAllMenuItem = new MenuItem(editMenu, SWT.NONE); 79055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSelectAllMenuItem.setText("Select &All\tCtrl-A"); 7914f7dbc53dbf6879365e54ffd1f8d13de69fec3acSiva Velusamy mSelectAllMenuItem.setAccelerator('A' | SWT.MOD1); 79255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mSelectAllMenuItem.addSelectionListener(new SelectionAdapter() { 79355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 79455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 79555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTableListener.selectAll(); 79655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 79755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 79855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 79955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create Action menu items 80055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // TODO: this should come with a confirmation dialog 80155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final MenuItem actionHaltItem = new MenuItem(actionMenu, SWT.NONE); 80255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project actionHaltItem.setText("&Halt VM"); 80355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project actionHaltItem.addSelectionListener(new SelectionAdapter() { 80455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 80555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 80655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDevicePanel.killSelectedClient(); 80755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 80855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 80955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 81055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final MenuItem actionCauseGcItem = new MenuItem(actionMenu, SWT.NONE); 81155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project actionCauseGcItem.setText("Cause &GC"); 81255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project actionCauseGcItem.addSelectionListener(new SelectionAdapter() { 81355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 81455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 81555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDevicePanel.forceGcOnSelectedClient(); 81655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 81755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 81855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 819ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek final MenuItem actionResetAdb = new MenuItem(actionMenu, SWT.NONE); 820ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek actionResetAdb.setText("&Reset adb"); 821ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek actionResetAdb.addSelectionListener(new SelectionAdapter() { 822ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek @Override 823ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek public void widgetSelected(SelectionEvent e) { 824ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek AndroidDebugBridge bridge = AndroidDebugBridge.getBridge(); 825ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek if (bridge != null) { 826ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek bridge.restart(); 827ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek } 828ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek } 829ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek }); 830ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek 83155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // configure Action items based on current state 83255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project actionMenu.addMenuListener(new MenuAdapter() { 83355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 83455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void menuShown(MenuEvent e) { 8354242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet actionHaltItem.setEnabled(mTBHalt.getEnabled() && mCurrentClient != null); 8364242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet actionCauseGcItem.setEnabled(mTBCauseGc.getEnabled() && mCurrentClient != null); 837ff0b9891ab1650c6d06509ad4ae202c77e202cc3Pierre Zurek actionResetAdb.setEnabled(true); 83855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 83955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 84055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 84155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create Device menu items 8424242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet final MenuItem screenShotItem = new MenuItem(deviceMenu, SWT.NONE); 843af47437d806484ba944338a981965b31d1bd81a6Tor Norbye 844af47437d806484ba944338a981965b31d1bd81a6Tor Norbye // The \tCtrl-S "keybinding text" here isn't right for the Mac - but 845af47437d806484ba944338a981965b31d1bd81a6Tor Norbye // it's stripped out and replaced by the proper keyboard accelerator 846af47437d806484ba944338a981965b31d1bd81a6Tor Norbye // text (e.g. the unicode symbol for the command key + S) anyway 847af47437d806484ba944338a981965b31d1bd81a6Tor Norbye // so it's fine to leave it there for the other platforms. 8481ec0b6529b371425aea3004e403c4df1dfc55aa6Xavier Ducrohet screenShotItem.setText("&Screen capture...\tCtrl-S"); 8494f7dbc53dbf6879365e54ffd1f8d13de69fec3acSiva Velusamy screenShotItem.setAccelerator('S' | SWT.MOD1); 8504242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet screenShotItem.addSelectionListener(new SelectionAdapter() { 85155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 85255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 85355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mCurrentDevice != null) { 85455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ScreenShotDialog dlg = new ScreenShotDialog(shell); 85555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg.open(mCurrentDevice); 85655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 85755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 85855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 85955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 86055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project new MenuItem(deviceMenu, SWT.SEPARATOR); 86155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 8624242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet final MenuItem explorerItem = new MenuItem(deviceMenu, SWT.NONE); 8634242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet explorerItem.setText("File Explorer..."); 8644242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet explorerItem.addSelectionListener(new SelectionAdapter() { 86555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 86655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 86755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createFileExplorer(); 86855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 86955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 87055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 87155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project new MenuItem(deviceMenu, SWT.SEPARATOR); 87255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 8734242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet final MenuItem processItem = new MenuItem(deviceMenu, SWT.NONE); 8744242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet processItem.setText("Show &process status..."); 8754242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet processItem.addSelectionListener(new SelectionAdapter() { 87655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 87755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 87855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DeviceCommandDialog dlg; 87955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg = new DeviceCommandDialog("ps -x", "ps-x.txt", shell); 88055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg.open(mCurrentDevice); 88155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 88255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 88355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 8844242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet final MenuItem deviceStateItem = new MenuItem(deviceMenu, SWT.NONE); 8854242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet deviceStateItem.setText("Dump &device state..."); 8864242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet deviceStateItem.addSelectionListener(new SelectionAdapter() { 88755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 88855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 88955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DeviceCommandDialog dlg; 89055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg = new DeviceCommandDialog("/system/bin/dumpstate /proc/self/fd/0", 89155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "device-state.txt", shell); 89255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg.open(mCurrentDevice); 89355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 89455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 89555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 8964242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet final MenuItem appStateItem = new MenuItem(deviceMenu, SWT.NONE); 8974242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet appStateItem.setText("Dump &app state..."); 8984242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet appStateItem.setEnabled(false); 8994242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet appStateItem.addSelectionListener(new SelectionAdapter() { 90055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 90155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 90255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DeviceCommandDialog dlg; 90355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg = new DeviceCommandDialog("dumpsys", "app-state.txt", shell); 90455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg.open(mCurrentDevice); 90555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 90655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 90755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 9084242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet final MenuItem radioStateItem = new MenuItem(deviceMenu, SWT.NONE); 9094242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet radioStateItem.setText("Dump &radio state..."); 9104242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet radioStateItem.addSelectionListener(new SelectionAdapter() { 91155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 91255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 91355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DeviceCommandDialog dlg; 91455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg = new DeviceCommandDialog( 91555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "cat /data/logs/radio.4 /data/logs/radio.3" 91655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project + " /data/logs/radio.2 /data/logs/radio.1" 91755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project + " /data/logs/radio", 91855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "radio-state.txt", shell); 91955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg.open(mCurrentDevice); 92055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 92155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 92255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 9234242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet final MenuItem logCatItem = new MenuItem(deviceMenu, SWT.NONE); 9244242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet logCatItem.setText("Run &logcat..."); 9254242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet logCatItem.addSelectionListener(new SelectionAdapter() { 92655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 92755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 92855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DeviceCommandDialog dlg; 92955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg = new DeviceCommandDialog("logcat '*:d jdwp:w'", "log.txt", 93055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell); 93155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project dlg.open(mCurrentDevice); 93255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 93355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 93455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 9354242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet // configure Action items based on current state 9364242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet deviceMenu.addMenuListener(new MenuAdapter() { 9374242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet @Override 9384242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet public void menuShown(MenuEvent e) { 9394242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet boolean deviceEnabled = mCurrentDevice != null; 9404242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet screenShotItem.setEnabled(deviceEnabled); 9414242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet explorerItem.setEnabled(deviceEnabled); 9424242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet processItem.setEnabled(deviceEnabled); 9434242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet deviceStateItem.setEnabled(deviceEnabled); 9444242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet appStateItem.setEnabled(deviceEnabled); 9454242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet radioStateItem.setEnabled(deviceEnabled); 9464242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet logCatItem.setEnabled(deviceEnabled); 9474242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet } 9484242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet }); 9494242a9e3569ece6a825fb253f0803178359267b2Xavier Ducrohet 95055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // tell the shell to use this menu 95155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.setMenuBar(menuBar); 95255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 95355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 95455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /* 95555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Create the widgets in the main application window. The basic layout is a 95655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * two-panel sash, with a scrolling list of VMs on the left and detailed 95755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * output for a single VM on the right. 95855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 95955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createWidgets(final Shell shell) { 96055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Color darkGray = shell.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY); 96155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 96255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /* 96355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Create three areas: tool bar, split panels, status line 96455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 96555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project shell.setLayout(new GridLayout(1, false)); 96655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 96755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // 1. panel area 96855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final Composite panelArea = new Composite(shell, SWT.BORDER); 96955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 97055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // make the panel area absorb all space 97155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project panelArea.setLayoutData(new GridData(GridData.FILL_BOTH)); 97255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 97355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // 2. status line. 97455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mStatusLine = new Label(shell, SWT.NONE); 97555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 97655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // make status line extend all the way across 97755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mStatusLine.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 97855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 97955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mStatusLine.setText("Initializing..."); 98055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 98155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /* 98255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Configure the split-panel area. 98355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 98455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final PreferenceStore prefs = PrefsDialog.getStore(); 98555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 98655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite topPanel = new Composite(panelArea, SWT.NONE); 98755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final Sash sash = new Sash(panelArea, SWT.HORIZONTAL); 98855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sash.setBackground(darkGray); 98955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite bottomPanel = new Composite(panelArea, SWT.NONE); 99055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 99155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project panelArea.setLayout(new FormLayout()); 99255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 99355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createTopPanel(topPanel, darkGray); 99481e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy 9954f7dbc53dbf6879365e54ffd1f8d13de69fec3acSiva Velusamy mClipboard = new Clipboard(panelArea.getDisplay()); 99681e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy if (useOldLogCatView()) { 99781e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy createBottomPanel(bottomPanel); 9982ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy } else { 9992ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy createLogCatView(bottomPanel); 100081e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy } 100155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 100255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // form layout data 100355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project FormData data = new FormData(); 100455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.top = new FormAttachment(0, 0); 100555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.bottom = new FormAttachment(sash, 0); 100655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.left = new FormAttachment(0, 0); 100755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.right = new FormAttachment(100, 0); 100855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project topPanel.setLayoutData(data); 100955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 101055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final FormData sashData = new FormData(); 101155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (prefs != null && prefs.contains(PREFERENCE_LOGSASH)) { 101255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sashData.top = new FormAttachment(0, prefs.getInt( 101355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFERENCE_LOGSASH)); 101455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 101555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sashData.top = new FormAttachment(50,0); // 50% across 101655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 101755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sashData.left = new FormAttachment(0, 0); 101855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sashData.right = new FormAttachment(100, 0); 101955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sash.setLayoutData(sashData); 102055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 102155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data = new FormData(); 102255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.top = new FormAttachment(sash, 0); 102355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.bottom = new FormAttachment(100, 0); 102455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.left = new FormAttachment(0, 0); 102555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.right = new FormAttachment(100, 0); 102655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project bottomPanel.setLayoutData(data); 102755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 102855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // allow resizes, but cap at minPanelWidth 102955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sash.addListener(SWT.Selection, new Listener() { 1030ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 103155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void handleEvent(Event e) { 103255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Rectangle sashRect = sash.getBounds(); 103355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Rectangle panelRect = panelArea.getClientArea(); 103455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int bottom = panelRect.height - sashRect.height - 100; 103555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project e.y = Math.max(Math.min(e.y, bottom), 100); 103655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (e.y != sashRect.y) { 103755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sashData.top = new FormAttachment(0, e.y); 10389058318f1052d7813e1c4989fdad49735d65b523Raphael Moll if (prefs != null) { 10399058318f1052d7813e1c4989fdad49735d65b523Raphael Moll prefs.setValue(PREFERENCE_LOGSASH, e.y); 10409058318f1052d7813e1c4989fdad49735d65b523Raphael Moll } 104155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project panelArea.layout(); 104255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 104355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 104455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 104555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 104655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // add a global focus listener for all the tables 104755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTableListener = new TableFocusListener(); 104855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 104955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // now set up the listener in the various panels 105081e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy if (useOldLogCatView()) { 105181e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy mLogPanel.setTableFocusListener(mTableListener); 10524f7dbc53dbf6879365e54ffd1f8d13de69fec3acSiva Velusamy } else { 10534f7dbc53dbf6879365e54ffd1f8d13de69fec3acSiva Velusamy mLogCatPanel.setTableFocusListener(mTableListener); 105481e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy } 105555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEventLogPanel.setTableFocusListener(mTableListener); 105655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (TablePanel p : mPanels) { 105755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (p != null) { 105855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project p.setTableFocusListener(mTableListener); 105955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 106055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 10615542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 106255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mStatusLine.setText(""); 106355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 106455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 106555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /* 106655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Populate the tool bar. 106755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 106855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createDevicePanelToolBar(ToolBar toolBar) { 106955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Display display = toolBar.getDisplay(); 10705542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 107155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // add "show heap updates" button 107255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowHeapUpdates = new ToolItem(toolBar, SWT.CHECK); 1073e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mTBShowHeapUpdates.setImage(mDdmUiLibLoader.loadImage(display, 107455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_HEAP, DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 107555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowHeapUpdates.setToolTipText("Show heap updates"); 107655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowHeapUpdates.setEnabled(false); 107755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowHeapUpdates.addSelectionListener(new SelectionAdapter() { 107855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 107955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 108055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mCurrentClient != null) { 108155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // boolean status = ((ToolItem)e.item).getSelection(); 108255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // invert previous state 108355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project boolean enable = !mCurrentClient.isHeapUpdateEnabled(); 108455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCurrentClient.setHeapUpdateEnabled(enable); 108555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 108655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project e.doit = false; // this has no effect? 108755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 108855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 108955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 109055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1091bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // add "dump HPROF" button 1092bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBDumpHprof = new ToolItem(toolBar, SWT.PUSH); 1093bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBDumpHprof.setToolTipText("Dump HPROF file"); 1094bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBDumpHprof.setEnabled(false); 1095e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mTBDumpHprof.setImage(mDdmUiLibLoader.loadImage(display, 1096bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet DevicePanel.ICON_HPROF, DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 1097bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBDumpHprof.addSelectionListener(new SelectionAdapter() { 109855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 109955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 1100bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mDevicePanel.dumpHprof(); 1101bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 1102bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // this will make sure the dump hprof button is disabled for the current selection 1103bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // as the client is already dumping an hprof file 1104bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet enableButtons(); 110555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 110655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 11075542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 110855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // add "cause GC" button 110955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBCauseGc = new ToolItem(toolBar, SWT.PUSH); 1110bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBCauseGc.setToolTipText("Cause an immediate GC"); 111155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBCauseGc.setEnabled(false); 1112e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mTBCauseGc.setImage(mDdmUiLibLoader.loadImage(display, 111355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_GC, DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 111455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBCauseGc.addSelectionListener(new SelectionAdapter() { 111555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 111655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 111755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDevicePanel.forceGcOnSelectedClient(); 111855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 111955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 112055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1121bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet new ToolItem(toolBar, SWT.SEPARATOR); 1122bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 1123bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // add "show thread updates" button 1124bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBShowThreadUpdates = new ToolItem(toolBar, SWT.CHECK); 1125e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mTBShowThreadUpdates.setImage(mDdmUiLibLoader.loadImage(display, 1126bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet DevicePanel.ICON_THREAD, DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 1127bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBShowThreadUpdates.setToolTipText("Show thread updates"); 1128bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBShowThreadUpdates.setEnabled(false); 1129bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBShowThreadUpdates.addSelectionListener(new SelectionAdapter() { 11302143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet @Override 11312143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet public void widgetSelected(SelectionEvent e) { 1132bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet if (mCurrentClient != null) { 1133bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // boolean status = ((ToolItem)e.item).getSelection(); 1134bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // invert previous state 1135bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet boolean enable = !mCurrentClient.isThreadUpdateEnabled(); 11362143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet 1137bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mCurrentClient.setThreadUpdateEnabled(enable); 1138bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } else { 1139bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet e.doit = false; // this has no effect? 1140bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } 1141bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } 1142bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet }); 1143bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 1144bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // add a start/stop method tracing 1145e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mTracingStartImage = mDdmUiLibLoader.loadImage(display, 1146bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet DevicePanel.ICON_TRACING_START, 1147bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null); 1148e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mTracingStopImage = mDdmUiLibLoader.loadImage(display, 1149bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet DevicePanel.ICON_TRACING_STOP, 1150bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null); 1151bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling = new ToolItem(toolBar, SWT.PUSH); 1152bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setToolTipText("Start Method Profiling"); 1153bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setEnabled(false); 1154bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setImage(mTracingStartImage); 1155bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.addSelectionListener(new SelectionAdapter() { 1156bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet @Override 1157bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet public void widgetSelected(SelectionEvent e) { 1158bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mDevicePanel.toggleMethodProfiling(); 1159bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } 1160bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet }); 1161bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 1162bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet new ToolItem(toolBar, SWT.SEPARATOR); 1163bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 1164bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // add "kill VM" button; need to make this visually distinct from 1165bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // the status update buttons 1166bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBHalt = new ToolItem(toolBar, SWT.PUSH); 1167bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBHalt.setToolTipText("Halt the target VM"); 1168bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBHalt.setEnabled(false); 1169e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mTBHalt.setImage(mDdmUiLibLoader.loadImage(display, 1170bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet DevicePanel.ICON_HALT, DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 1171bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBHalt.addSelectionListener(new SelectionAdapter() { 1172bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet @Override 1173bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet public void widgetSelected(SelectionEvent e) { 1174bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mDevicePanel.killSelectedClient(); 11752143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 11762143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet }); 11772143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet 117855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project toolBar.pack(); 117955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 118055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 118155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createTopPanel(final Composite comp, Color darkGray) { 118255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final PreferenceStore prefs = PrefsDialog.getStore(); 118355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 118455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project comp.setLayout(new FormLayout()); 118555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 118655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite leftPanel = new Composite(comp, SWT.NONE); 118755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final Sash sash = new Sash(comp, SWT.VERTICAL); 118855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sash.setBackground(darkGray); 118955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite rightPanel = new Composite(comp, SWT.NONE); 119055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 119155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createLeftPanel(leftPanel); 119255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createRightPanel(rightPanel); 119355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 119455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project FormData data = new FormData(); 119555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.top = new FormAttachment(0, 0); 119655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.bottom = new FormAttachment(100, 0); 119755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.left = new FormAttachment(0, 0); 119855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.right = new FormAttachment(sash, 0); 119955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project leftPanel.setLayoutData(data); 120055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 120155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final FormData sashData = new FormData(); 120255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sashData.top = new FormAttachment(0, 0); 120355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sashData.bottom = new FormAttachment(100, 0); 120455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (prefs != null && prefs.contains(PREFERENCE_SASH)) { 120555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sashData.left = new FormAttachment(0, prefs.getInt( 120655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project PREFERENCE_SASH)); 120755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 120855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // position the sash 380 from the right instead of x% (done by using 120955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // FormAttachment(x, 0)) in order to keep the sash at the same 121055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // position 121155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // from the left when the window is resized. 121255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // 380px is just enough to display the left table with no horizontal 121355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // scrollbar with the default font. 121455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sashData.left = new FormAttachment(0, 380); 121555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 121655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sash.setLayoutData(sashData); 121755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 121855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data = new FormData(); 121955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.top = new FormAttachment(0, 0); 122055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.bottom = new FormAttachment(100, 0); 122155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.left = new FormAttachment(sash, 0); 122255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project data.right = new FormAttachment(100, 0); 122355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project rightPanel.setLayoutData(data); 122455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 122555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final int minPanelWidth = 60; 122655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 122755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // allow resizes, but cap at minPanelWidth 122855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sash.addListener(SWT.Selection, new Listener() { 1229ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 123055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void handleEvent(Event e) { 123155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Rectangle sashRect = sash.getBounds(); 123255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Rectangle panelRect = comp.getClientArea(); 123355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project int right = panelRect.width - sashRect.width - minPanelWidth; 123455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project e.x = Math.max(Math.min(e.x, right), minPanelWidth); 123555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (e.x != sashRect.x) { 123655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project sashData.left = new FormAttachment(0, e.x); 12379058318f1052d7813e1c4989fdad49735d65b523Raphael Moll if (prefs != null) { 12389058318f1052d7813e1c4989fdad49735d65b523Raphael Moll prefs.setValue(PREFERENCE_SASH, e.x); 12399058318f1052d7813e1c4989fdad49735d65b523Raphael Moll } 124055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project comp.layout(); 124155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 124255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 124355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 124455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 124555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 124655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createBottomPanel(final Composite comp) { 124755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final PreferenceStore prefs = PrefsDialog.getStore(); 124855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 124955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create clipboard 125055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Display display = comp.getDisplay(); 125155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 125255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project LogColors colors = new LogColors(); 125355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 125455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project colors.infoColor = new Color(display, 0, 127, 0); 125555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project colors.debugColor = new Color(display, 0, 0, 127); 125655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project colors.errorColor = new Color(display, 255, 0, 0); 125755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project colors.warningColor = new Color(display, 255, 127, 0); 125855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project colors.verboseColor = new Color(display, 0, 0, 0); 125955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 126055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // set the preferences names 126155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project LogPanel.PREFS_TIME = PREFS_COL_TIME; 126255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project LogPanel.PREFS_LEVEL = PREFS_COL_LEVEL; 126355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project LogPanel.PREFS_PID = PREFS_COL_PID; 126455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project LogPanel.PREFS_TAG = PREFS_COL_TAG; 126555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project LogPanel.PREFS_MESSAGE = PREFS_COL_MESSAGE; 126655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 126755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project comp.setLayout(new GridLayout(1, false)); 126855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 126955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolBar toolBar = new ToolBar(comp, SWT.HORIZONTAL); 127055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 127155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCreateFilterAction = new ToolItemAction(toolBar, SWT.PUSH); 127255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCreateFilterAction.item.setToolTipText("Create Filter"); 1273e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mCreateFilterAction.item.setImage(mDdmUiLibLoader.loadImage(mDisplay, 127455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "add.png", //$NON-NLS-1$ 127555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 127655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCreateFilterAction.item.addSelectionListener(new SelectionAdapter() { 127755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 127855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 127955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogPanel.addFilter(); 128055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 128155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 128255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 128355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEditFilterAction = new ToolItemAction(toolBar, SWT.PUSH); 128455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEditFilterAction.item.setToolTipText("Edit Filter"); 1285e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mEditFilterAction.item.setImage(mDdmUiLibLoader.loadImage(mDisplay, 128655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "edit.png", //$NON-NLS-1$ 128755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 128855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEditFilterAction.item.addSelectionListener(new SelectionAdapter() { 128955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 129055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 129155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogPanel.editFilter(); 129255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 129355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 129455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 129555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDeleteFilterAction = new ToolItemAction(toolBar, SWT.PUSH); 129655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDeleteFilterAction.item.setToolTipText("Delete Filter"); 1297e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mDeleteFilterAction.item.setImage(mDdmUiLibLoader.loadImage(mDisplay, 129855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "delete.png", //$NON-NLS-1$ 129955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 130055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDeleteFilterAction.item.addSelectionListener(new SelectionAdapter() { 130155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 130255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 130355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogPanel.deleteFilter(); 130455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 130555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 130655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 130755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 130855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project new ToolItem(toolBar, SWT.SEPARATOR); 130955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 131055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project LogLevel[] levels = LogLevel.values(); 131155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogLevelActions = new ToolItemAction[mLogLevelIcons.length]; 131255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (int i = 0 ; i < mLogLevelActions.length; i++) { 131355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String name = levels[i].getStringValue(); 131455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project final ToolItemAction newAction = new ToolItemAction(toolBar, SWT.CHECK); 131555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogLevelActions[i] = newAction; 131655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project //newAction.item.setText(name); 131755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project newAction.item.addSelectionListener(new SelectionAdapter() { 131855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 131955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 132055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // disable the other actions and record current index 13219058318f1052d7813e1c4989fdad49735d65b523Raphael Moll for (int k = 0 ; k < mLogLevelActions.length; k++) { 13229058318f1052d7813e1c4989fdad49735d65b523Raphael Moll ToolItemAction a = mLogLevelActions[k]; 132355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (a == newAction) { 132455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project a.setChecked(true); 132555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 132655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // set the log level 13279058318f1052d7813e1c4989fdad49735d65b523Raphael Moll mLogPanel.setCurrentFilterLogLevel(k+2); 132855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 132955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project a.setChecked(false); 133055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 133155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 133255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 133355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 133455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 133555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project newAction.item.setToolTipText(name); 1336e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet newAction.item.setImage(mDdmUiLibLoader.loadImage(mDisplay, 133755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogLevelIcons[i], 133855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 133955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 134055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 134155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project new ToolItem(toolBar, SWT.SEPARATOR); 134255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 134355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mClearAction = new ToolItemAction(toolBar, SWT.PUSH); 134455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mClearAction.item.setToolTipText("Clear Log"); 13455542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 1346e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mClearAction.item.setImage(mDdmUiLibLoader.loadImage(mDisplay, 134755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "clear.png", //$NON-NLS-1$ 134855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 134955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mClearAction.item.addSelectionListener(new SelectionAdapter() { 135055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 135155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 135255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogPanel.clear(); 135355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 135455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 135555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 135655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project new ToolItem(toolBar, SWT.SEPARATOR); 135755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 135855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExportAction = new ToolItemAction(toolBar, SWT.PUSH); 135955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExportAction.item.setToolTipText("Export Selection As Text..."); 1360e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mExportAction.item.setImage(mDdmUiLibLoader.loadImage(mDisplay, 136155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "save.png", //$NON-NLS-1$ 136255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 136355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExportAction.item.addSelectionListener(new SelectionAdapter() { 136455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 136555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 136655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogPanel.save(); 136755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 136855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 136955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 137055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 137155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project toolBar.pack(); 137255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 137355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // now create the log view 1374e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mLogPanel = new LogPanel(colors, new FilterStorage(), LogPanel.FILTER_MANUAL); 137555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 137655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogPanel.setActions(mDeleteFilterAction, mEditFilterAction, mLogLevelActions); 137755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 137855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String colMode = prefs.getString(PrefsDialog.LOGCAT_COLUMN_MODE); 137955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (PrefsDialog.LOGCAT_COLUMN_MODE_AUTO.equals(colMode)) { 138055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogPanel.setColumnMode(LogPanel.COLUMN_MODE_AUTO); 138155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 138255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 138355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project String fontStr = PrefsDialog.getStore().getString(PrefsDialog.LOGCAT_FONT); 138455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (fontStr != null) { 138555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 138655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project FontData fdat = new FontData(fontStr); 138755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogPanel.setFont(new Font(display, fdat)); 138855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (IllegalArgumentException e) { 138955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Looks like fontStr isn't a valid font representation. 139055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // We do nothing in this case, the logcat view will use the default font. 139155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (SWTError e2) { 139255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Looks like the Font() constructor failed. 139355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // We do nothing in this case, the logcat view will use the default font. 139455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 139555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 139655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 139755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogPanel.createPanel(comp); 139855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 139955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // and start the logcat 140055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mLogPanel.startLogCat(mCurrentDevice); 140155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 140255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 14032ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy private void createLogCatView(Composite parent) { 1404f35c5c55a2d644a7705637b4ff99aa6417d7577bSiva Velusamy IPreferenceStore prefStore = DdmUiPreferences.getStore(); 1405bfde12592b821ef00973e0eedf663752ca789087Siva Velusamy mLogCatPanel = new LogCatPanel(prefStore); 14062ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy mLogCatPanel.createPanel(parent); 14072ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy 14082ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy if (mCurrentDevice != null) { 14092ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy mLogCatPanel.deviceSelected(mCurrentDevice); 14102ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy } 14112ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy } 14122ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy 141355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /* 141455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Create the contents of the left panel: a table of VMs. 141555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 141655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createLeftPanel(final Composite comp) { 141755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project comp.setLayout(new GridLayout(1, false)); 141855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolBar toolBar = new ToolBar(comp, SWT.HORIZONTAL | SWT.RIGHT | SWT.WRAP); 141955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project toolBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 142055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project createDevicePanelToolBar(toolBar); 142155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 142255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite c = new Composite(comp, SWT.NONE); 142355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project c.setLayoutData(new GridData(GridData.FILL_BOTH)); 142455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1425e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mDevicePanel = new DevicePanel(true /* showPorts */); 142655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDevicePanel.createPanel(c); 142755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 142855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // add ourselves to the device panel selection listener 142955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDevicePanel.addSelectionListener(this); 143055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 143155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 143255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /* 143355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Create the contents of the right panel: tabs with VM information. 143455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 143555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createRightPanel(final Composite comp) { 143655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TabItem item; 143755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TabFolder tabFolder; 143855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 143955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project comp.setLayout(new FillLayout()); 144055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 144155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project tabFolder = new TabFolder(comp, SWT.NONE); 144255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 144355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (int i = 0; i < mPanels.length; i++) { 144455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mPanels[i] != null) { 144555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item = new TabItem(tabFolder, SWT.NONE); 144655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setText(mPanelNames[i]); 144755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setToolTipText(mPanelTips[i]); 144855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setControl(mPanels[i].createPanel(tabFolder)); 144955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 145055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 145155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 145255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // add the emulator control panel to the folders. 145355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item = new TabItem(tabFolder, SWT.NONE); 145455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setText("Emulator Control"); 145555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setToolTipText("Emulator Control Panel"); 1456e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mEmulatorPanel = new EmulatorControlPanel(); 145755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setControl(mEmulatorPanel.createPanel(tabFolder)); 145855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 145955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // add the event log panel to the folders. 146055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item = new TabItem(tabFolder, SWT.NONE); 146155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setText("Event Log"); 146255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setToolTipText("Event Log"); 14635542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 146455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create the composite that will hold the toolbar and the event log panel. 146555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite eventLogTopComposite = new Composite(tabFolder, SWT.NONE); 146655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project item.setControl(eventLogTopComposite); 146755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project eventLogTopComposite.setLayout(new GridLayout(1, false)); 14685542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 146955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create the toolbar and the actions 147055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolBar toolbar = new ToolBar(eventLogTopComposite, SWT.HORIZONTAL); 147155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project toolbar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 147255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 147355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolItemAction optionsAction = new ToolItemAction(toolbar, SWT.PUSH); 147455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project optionsAction.item.setToolTipText("Opens the options panel"); 1475e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet optionsAction.item.setImage(mDdmUiLibLoader.loadImage(comp.getDisplay(), 147655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "edit.png", //$NON-NLS-1$ 147755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 147855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 147955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolItemAction clearAction = new ToolItemAction(toolbar, SWT.PUSH); 148055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project clearAction.item.setToolTipText("Clears the event log"); 1481e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet clearAction.item.setImage(mDdmUiLibLoader.loadImage(comp.getDisplay(), 148255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "clear.png", //$NON-NLS-1$ 148355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 14845542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 148555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project new ToolItem(toolbar, SWT.SEPARATOR); 148655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 148755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolItemAction saveAction = new ToolItemAction(toolbar, SWT.PUSH); 148855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project saveAction.item.setToolTipText("Saves the event log"); 1489e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet saveAction.item.setImage(mDdmUiLibLoader.loadImage(comp.getDisplay(), 149055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "save.png", //$NON-NLS-1$ 149155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 149255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 149355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolItemAction loadAction = new ToolItemAction(toolbar, SWT.PUSH); 149455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project loadAction.item.setToolTipText("Loads an event log"); 1495e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet loadAction.item.setImage(mDdmUiLibLoader.loadImage(comp.getDisplay(), 149655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "load.png", //$NON-NLS-1$ 149755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 149855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 149955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolItemAction importBugAction = new ToolItemAction(toolbar, SWT.PUSH); 150055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project importBugAction.item.setToolTipText("Imports a bug report"); 1501e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet importBugAction.item.setImage(mDdmUiLibLoader.loadImage(comp.getDisplay(), 150255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project "importBug.png", //$NON-NLS-1$ 150355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project DevicePanel.ICON_WIDTH, DevicePanel.ICON_WIDTH, null)); 150455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 150555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create the event log panel 1506e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet mEventLogPanel = new EventLogPanel(); 15075542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet 150855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // set the external actions 150955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEventLogPanel.setActions(optionsAction, clearAction, saveAction, loadAction, 151055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project importBugAction); 151155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 151255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create the panel 151355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEventLogPanel.createPanel(eventLogTopComposite); 151455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 151555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 151655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void createFileExplorer() { 151755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mExplorer == null) { 151855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorerShell = new Shell(mDisplay); 151955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 152055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // create the ui 152155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorerShell.setLayout(new GridLayout(1, false)); 152255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 152355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // toolbar + action 152455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolBar toolBar = new ToolBar(mExplorerShell, SWT.HORIZONTAL); 152555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project toolBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 152655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 152755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolItemAction pullAction = new ToolItemAction(toolBar, SWT.PUSH); 152855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project pullAction.item.setToolTipText("Pull File from Device"); 1529e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet Image image = mDdmUiLibLoader.loadImage("pull.png", mDisplay); //$NON-NLS-1$ 15302143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet if (image != null) { 15312143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet pullAction.item.setImage(image); 15322143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } else { 15332143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet // this is for debugging purpose when the icon is missing 15342143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet pullAction.item.setText("Pull"); //$NON-NLS-1$ 15352143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 153655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 153755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolItemAction pushAction = new ToolItemAction(toolBar, SWT.PUSH); 153855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project pushAction.item.setToolTipText("Push file onto Device"); 1539e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet image = mDdmUiLibLoader.loadImage("push.png", mDisplay); //$NON-NLS-1$ 15402143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet if (image != null) { 15412143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet pushAction.item.setImage(image); 15422143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } else { 15432143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet // this is for debugging purpose when the icon is missing 15442143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet pushAction.item.setText("Push"); //$NON-NLS-1$ 15452143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 154655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 154755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ToolItemAction deleteAction = new ToolItemAction(toolBar, SWT.PUSH); 154855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project deleteAction.item.setToolTipText("Delete"); 1549e312b2800018fcfe7fad0b1c883127f1364a17d0Xavier Ducrohet image = mDdmUiLibLoader.loadImage("delete.png", mDisplay); //$NON-NLS-1$ 15502143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet if (image != null) { 15512143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet deleteAction.item.setImage(image); 15522143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } else { 15532143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet // this is for debugging purpose when the icon is missing 15542143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet deleteAction.item.setText("Delete"); //$NON-NLS-1$ 15552143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet } 155655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 15579fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek ToolItemAction createNewFolderAction = new ToolItemAction(toolBar, SWT.PUSH); 15589fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek createNewFolderAction.item.setToolTipText("New Folder"); 15599fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek image = mDdmUiLibLoader.loadImage("add.png", mDisplay); //$NON-NLS-1$ 15609fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek if (image != null) { 15619fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek createNewFolderAction.item.setImage(image); 15629fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek } else { 15639fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek // this is for debugging purpose when the icon is missing 15649fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek createNewFolderAction.item.setText("New Folder"); //$NON-NLS-1$ 15659fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek } 15669fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek 156755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // device explorer 156855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorer = new DeviceExplorer(); 15699fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek mExplorer.setActions(pushAction, pullAction, deleteAction, createNewFolderAction); 157055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 157155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project pullAction.item.addSelectionListener(new SelectionAdapter() { 157255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 157355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 157455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorer.pullSelection(); 157555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 157655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 157755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project pullAction.setEnabled(false); 157855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 157955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project pushAction.item.addSelectionListener(new SelectionAdapter() { 158055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 158155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 158255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorer.pushIntoSelection(); 158355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 158455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 158555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project pushAction.setEnabled(false); 158655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 158755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project deleteAction.item.addSelectionListener(new SelectionAdapter() { 158855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project @Override 158955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void widgetSelected(SelectionEvent e) { 159055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorer.deleteSelection(); 159155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 159255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 159355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project deleteAction.setEnabled(false); 159455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 15959fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek createNewFolderAction.item.addSelectionListener(new SelectionAdapter() { 15969fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek @Override 15979fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek public void widgetSelected(SelectionEvent e) { 15989fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek mExplorer.createNewFolderInSelection(); 15999fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek } 16009fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek }); 16019fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek createNewFolderAction.setEnabled(false); 16029fd1167924dca792834cade14772e2be5a55b3d5Pierre Zurek 160355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Composite parent = new Composite(mExplorerShell, SWT.NONE); 160455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project parent.setLayoutData(new GridData(GridData.FILL_BOTH)); 160555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 160655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorer.createPanel(parent); 160755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorer.switchDevice(mCurrentDevice); 160855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 160955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorerShell.addShellListener(new ShellListener() { 1610ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 161155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void shellActivated(ShellEvent e) { 161255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // pass 161355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 161455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1615ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 161655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void shellClosed(ShellEvent e) { 161755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorer = null; 161855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorerShell = null; 161955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 162055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1621ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 162255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void shellDeactivated(ShellEvent e) { 162355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // pass 162455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 162555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1626ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 162755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void shellDeiconified(ShellEvent e) { 162855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // pass 162955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 163055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1631ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 163255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void shellIconified(ShellEvent e) { 163355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // pass 163455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 163555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 163655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 163755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorerShell.pack(); 163855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project setExplorerSizeAndPosition(mExplorerShell); 163955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorerShell.open(); 164055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 164155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mExplorerShell != null) { 164255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorerShell.forceActive(); 164355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 164455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 164555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 164655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 164755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 164855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Set the status line. TODO: make this a stack, so we can safely have 164955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * multiple things trying to set it all at once. Also specify an expiration? 165055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 165155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void setStatusLine(final String str) { 165255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 165355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDisplay.asyncExec(new Runnable() { 1654ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 165555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void run() { 165655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project doSetStatusLine(str); 165755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 165855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 165955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (SWTException swte) { 166055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (!mDisplay.isDisposed()) 166155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project throw swte; 166255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 166355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 166455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 166555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void doSetStatusLine(String str) { 166655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mStatusLine.isDisposed()) 166755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return; 166855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 166955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (!mStatusLine.getText().equals(str)) { 167055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mStatusLine.setText(str); 167155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 167255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // try { Thread.sleep(100); } 167355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // catch (InterruptedException ie) {} 167455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 167555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 167655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 167755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void displayError(final String msg) { 167855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 167955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mDisplay.syncExec(new Runnable() { 1680ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 168155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public void run() { 168255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project MessageDialog.openError(mDisplay.getActiveShell(), "Error", 168355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project msg); 168455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 168555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project }); 168655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (SWTException swte) { 168755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (!mDisplay.isDisposed()) 168855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project throw swte; 168955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 169055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 169155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 169255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project private void enableButtons() { 169355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mCurrentClient != null) { 169455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowThreadUpdates.setSelection(mCurrentClient.isThreadUpdateEnabled()); 169555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowThreadUpdates.setEnabled(true); 169655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowHeapUpdates.setSelection(mCurrentClient.isHeapUpdateEnabled()); 169755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowHeapUpdates.setEnabled(true); 169855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBHalt.setEnabled(true); 169955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBCauseGc.setEnabled(true); 1700bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 1701bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet ClientData data = mCurrentClient.getClientData(); 1702bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 1703bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet if (data.hasFeature(ClientData.FEATURE_HPROF)) { 1704bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBDumpHprof.setEnabled(data.hasPendingHprofDump() == false); 1705bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBDumpHprof.setToolTipText("Dump HPROF file"); 1706bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } else { 1707bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBDumpHprof.setEnabled(false); 1708bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBDumpHprof.setToolTipText("Dump HPROF file (not supported by this VM)"); 1709bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } 1710bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 1711bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet if (data.hasFeature(ClientData.FEATURE_PROFILING)) { 1712bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setEnabled(true); 1713bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet if (data.getMethodProfilingStatus() == MethodProfilingStatus.ON) { 1714bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setToolTipText("Stop Method Profiling"); 1715bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setImage(mTracingStopImage); 1716bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } else { 1717bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setToolTipText("Start Method Profiling"); 1718bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setImage(mTracingStartImage); 1719bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } 1720bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } else { 1721bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setEnabled(false); 1722bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setImage(mTracingStartImage); 1723bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setToolTipText("Start Method Profiling (not supported by this VM)"); 1724bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } 172555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } else { 172655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // list is empty, disable these 172755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowThreadUpdates.setSelection(false); 172855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowThreadUpdates.setEnabled(false); 172955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowHeapUpdates.setSelection(false); 173055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBShowHeapUpdates.setEnabled(false); 173155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBHalt.setEnabled(false); 173255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mTBCauseGc.setEnabled(false); 1733bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 17342143c56c55f6ef9439b26070d7139b2c907ca3daXavier Ducrohet mTBDumpHprof.setEnabled(false); 1735bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBDumpHprof.setToolTipText("Dump HPROF file"); 1736bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 1737bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setEnabled(false); 1738bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setImage(mTracingStartImage); 1739bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mTBProfiling.setToolTipText("Start Method Profiling"); 174055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 174155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 174255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 174355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project /** 17445542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet * Sent when a new {@link IDevice} and {@link Client} are selected. 174555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param selectedDevice the selected device. If null, no devices are selected. 174655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @param selectedClient The selected client. If null, no clients are selected. 174755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 174855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * @see IUiSelectionListener 174955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 1750ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 17515542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet public void selectionChanged(IDevice selectedDevice, Client selectedClient) { 175255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mCurrentDevice != selectedDevice) { 175355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCurrentDevice = selectedDevice; 175455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (TablePanel panel : mPanels) { 175555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (panel != null) { 175655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project panel.deviceSelected(mCurrentDevice); 175755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 175855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 175955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 176055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEmulatorPanel.deviceSelected(mCurrentDevice); 176181e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy if (useOldLogCatView()) { 176281e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy mLogPanel.deviceSelected(mCurrentDevice); 17632ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy } else { 17642ecd3a82201d03a35ab124f466941dce4d4be637Siva Velusamy mLogCatPanel.deviceSelected(mCurrentDevice); 176581e6255a2998b05465952004b6f4b4c2331270b4Siva Velusamy } 176655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mEventLogPanel != null) { 176755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mEventLogPanel.deviceSelected(mCurrentDevice); 176855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 176955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 177055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mExplorer != null) { 177155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mExplorer.switchDevice(mCurrentDevice); 177255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 177355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 177455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 177555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (mCurrentClient != selectedClient) { 177655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project AndroidDebugBridge.getBridge().setSelectedClient(selectedClient); 177755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project mCurrentClient = selectedClient; 177855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project for (TablePanel panel : mPanels) { 177955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (panel != null) { 178055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project panel.clientSelected(mCurrentClient); 178155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 178255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 178355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 178455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project enableButtons(); 178555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 178655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 1787bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet 1788ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 1789bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet public void clientChanged(Client client, int changeMask) { 1790bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet if ((changeMask & Client.CHANGE_METHOD_PROFILING_STATUS) == 1791bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet Client.CHANGE_METHOD_PROFILING_STATUS) { 1792bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet if (mCurrentClient == client) { 1793bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet mDisplay.asyncExec(new Runnable() { 1794ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 1795bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet public void run() { 1796bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet // force refresh of the button enabled state. 1797bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet enableButtons(); 1798bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } 1799bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet }); 1800bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } 1801bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } 1802bcf38645bef192b380f0d338b263aea075cd1aebXavier Ducrohet } 180355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project} 1804