blob: 72cbb4a671d13bacd3dd51a857fce4b235f4d4d8 [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.ddmuilib;
import com.android.ddmlib.Client;
import com.android.ddmlib.ClientData;
import com.android.ddmlib.AndroidDebugBridge.IClientChangeListener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
/**
* Display client info in a two-column format.
*/
public class InfoPanel extends TablePanel {
private Table mTable;
private TableColumn mCol2;
private static final String mLabels[] = {
"DDM-aware?",
"App description:",
"VM version:",
"Process ID:",
};
private static final int ENT_DDM_AWARE = 0;
private static final int ENT_APP_DESCR = 1;
private static final int ENT_VM_VERSION = 2;
private static final int ENT_PROCESS_ID = 3;
/**
* Create our control(s).
*/
@Override
protected Control createControl(Composite parent) {
mTable = new Table(parent, SWT.MULTI | SWT.FULL_SELECTION);
mTable.setHeaderVisible(false);
mTable.setLinesVisible(false);
TableColumn col1 = new TableColumn(mTable, SWT.RIGHT);
col1.setText("name");
mCol2 = new TableColumn(mTable, SWT.LEFT);
mCol2.setText("PlaceHolderContentForWidth");
TableItem item;
for (int i = 0; i < mLabels.length; i++) {
item = new TableItem(mTable, SWT.NONE);
item.setText(0, mLabels[i]);
item.setText(1, "-");
}
col1.pack();
mCol2.pack();
return mTable;
}
/**
* Sets the focus to the proper control inside the panel.
*/
@Override
public void setFocus() {
mTable.setFocus();
}
/**
* Sent when an existing client information changed.
* <p/>
* This is sent from a non UI thread.
* @param client the updated client.
* @param changeMask the bit mask describing the changed properties. It can contain
* any of the following values: {@link Client#CHANGE_PORT}, {@link Client#CHANGE_NAME}
* {@link Client#CHANGE_DEBUGGER_INTEREST}, {@link Client#CHANGE_THREAD_MODE},
* {@link Client#CHANGE_THREAD_DATA}, {@link Client#CHANGE_HEAP_MODE},
* {@link Client#CHANGE_HEAP_DATA}, {@link Client#CHANGE_NATIVE_HEAP_DATA}
*
* @see IClientChangeListener#clientChanged(Client, int)
*/
public void clientChanged(final Client client, int changeMask) {
if (client == getCurrentClient()) {
if ((changeMask & Client.CHANGE_INFO) == Client.CHANGE_INFO) {
if (mTable.isDisposed())
return;
mTable.getDisplay().asyncExec(new Runnable() {
public void run() {
clientSelected();
}
});
}
}
}
/**
* Sent when a new device is selected. The new device can be accessed
* with {@link #getCurrentDevice()}
*/
@Override
public void deviceSelected() {
// pass
}
/**
* Sent when a new client is selected. The new client can be accessed
* with {@link #getCurrentClient()}
*/
@Override
public void clientSelected() {
if (mTable.isDisposed())
return;
Client client = getCurrentClient();
if (client == null) {
for (int i = 0; i < mLabels.length; i++) {
TableItem item = mTable.getItem(i);
item.setText(1, "-");
}
} else {
TableItem item;
String clientDescription, vmIdentifier, isDdmAware,
pid;
ClientData cd = client.getClientData();
synchronized (cd) {
clientDescription = (cd.getClientDescription() != null) ?
cd.getClientDescription() : "?";
vmIdentifier = (cd.getVmIdentifier() != null) ?
cd.getVmIdentifier() : "?";
isDdmAware = cd.isDdmAware() ?
"yes" : "no";
pid = (cd.getPid() != 0) ?
String.valueOf(cd.getPid()) : "?";
}
item = mTable.getItem(ENT_APP_DESCR);
item.setText(1, clientDescription);
item = mTable.getItem(ENT_VM_VERSION);
item.setText(1, vmIdentifier);
item = mTable.getItem(ENT_DDM_AWARE);
item.setText(1, isDdmAware);
item = mTable.getItem(ENT_PROCESS_ID);
item.setText(1, pid);
}
mCol2.pack();
//Log.i("ddms", "InfoPanel: changed " + client);
}
@Override
protected void setTableFocusListener() {
addTableToFocusListener(mTable);
}
}