/*
* Copyright (C) 2009 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.sdkuilib.internal.widgets;
import com.android.sdklib.internal.avd.HardwareProperties.HardwareProperty;
import com.android.sdkuilib.ui.GridDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
/**
* Dialog to choose a hardware property
*/
class HardwarePropertyChooser extends GridDialog {
private final Map<String, HardwareProperty> mProperties;
private final Collection<String> mExceptProperties;
private HardwareProperty mChosenProperty;
private Label mTypeLabel;
private Label mDescriptionLabel;
HardwarePropertyChooser(Shell parentShell, Map<String, HardwareProperty> properties,
Collection<String> exceptProperties) {
super(parentShell, 2, false);
mProperties = properties;
mExceptProperties = exceptProperties;
}
public HardwareProperty getProperty() {
return mChosenProperty;
}
@Override
public void createDialogContent(Composite parent) {
Label l = new Label(parent, SWT.NONE);
l.setText("Property:");
final Combo c = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
// simple list for index->name resolution.
final ArrayList<String> indexToName = new ArrayList<String>();
for (Entry<String, HardwareProperty> entry : mProperties.entrySet()) {
if (mExceptProperties.contains(entry.getKey()) == false) {
c.add(entry.getValue().getAbstract());
indexToName.add(entry.getKey());
}
}
boolean hasValues = true;
if (indexToName.size() == 0) {
hasValues = false;
c.add("No properties");
c.select(0);
c.setEnabled(false);
}
c.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
int index = c.getSelectionIndex();
String name = indexToName.get(index);
processSelection(name, true /* pack */);
}
});
l = new Label(parent, SWT.NONE);
l.setText("Type:");
mTypeLabel = new Label(parent, SWT.NONE);
l = new Label(parent, SWT.NONE);
l.setText("Description:");
mDescriptionLabel = new Label(parent, SWT.NONE);
if (hasValues) {
c.select(0);
processSelection(indexToName.get(0), false /* pack */);
}
}
private void processSelection(String name, boolean pack) {
mChosenProperty = mProperties.get(name);
mTypeLabel.setText(mChosenProperty.getType().getValue());
String desc = mChosenProperty.getDescription();
if (desc != null) {
mDescriptionLabel.setText(mChosenProperty.getDescription());
} else {
mDescriptionLabel.setText("N/A");
}
if (pack) {
getShell().pack();
}
}
}