blob: 05f4788a6fdb282fae0ab84d6d4952cc3713bf49 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Jens Lukowski/Innoopract - initial renaming/restructuring
*
*******************************************************************************/
package org.eclipse.wst.xml.ui.internal.properties;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.wst.sse.ui.internal.Logger;
/**
* An extended ComboBoxCellEditor that selects and returns Strings
*/
public class StringComboBoxCellEditor extends ComboBoxCellEditor {
private boolean fSettingValue = false;
/**
*
*/
public StringComboBoxCellEditor() {
super();
}
/**
* @param parent
* @param items
*/
public StringComboBoxCellEditor(Composite parent, String[] items) {
super(parent, items);
}
/**
* @param parent
* @param items
* @param style
*/
public StringComboBoxCellEditor(Composite parent, String[] items, int style) {
super(parent, items, style);
}
protected Object doGetValue() {
// otherwise limits to set of valid values
Object index = super.doGetValue();
int selection = -1;
if (index instanceof Integer)
selection = ((Integer) index).intValue();
if (selection >= 0)
return getItems()[selection];
else if (getControl() instanceof CCombo) {
// retrieve the actual text as the list of valid items doesn't
// contain the value
return ((CCombo) getControl()).getText();
}
return null;
}
protected void doSetValue(Object value) {
if (fSettingValue)
return;
fSettingValue = true;
if (value instanceof Integer) {
super.doSetValue(value);
} else {
String stringValue = value.toString();
int selection = -1;
for (int i = 0; i < getItems().length; i++)
if (getItems()[i].equals(stringValue))
selection = i;
if (selection >= 0)
super.doSetValue(new Integer(selection));
else {
super.doSetValue(new Integer(-1));
if (getControl() instanceof CCombo && !stringValue.equals(((CCombo) getControl()).getText())) {
// update the Text widget
((CCombo) getControl()).setText(stringValue);
}
}
}
fSettingValue = false;
}
public void setItems(String[] newItems) {
if (getControl() == null || getControl().isDisposed()) {
Logger.log(Logger.ERROR, "Attempted to update item list for disposed cell editor"); //$NON-NLS-1$
return;
}
// keep selection if possible
Object previousSelectedValue = getValue();
super.setItems(newItems);
if (previousSelectedValue != null && getControl() instanceof CCombo) {
for (int i = 0; i < newItems.length; i++) {
if (newItems[i].equals(previousSelectedValue))
setValue(previousSelectedValue);
}
}
}
}