package rtt.annotation.editor.ui.viewer.provider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.ICellEditorValidator;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.widgets.Composite;
public class EditableViewerItem extends ViewerItem {
private String description;
private Object value;
public EditableViewerItem(ViewerItem parent, String description, Object value) {
super(parent);
this.description = description;
this.value = value;
}
@Override
public String getColumnText(int columnIndex) {
if (columnIndex == 0) {
return description;
} else if (columnIndex == 1) {
return String.valueOf(value);
}
return "";
}
public String getDescription() {
return description;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public CellEditor getCellEditor(Composite parent) {
if (value instanceof Boolean) {
return new CheckboxCellEditor(parent);
}
if (value instanceof Integer) {
TextCellEditor editor = new TextCellEditor(parent) {
@Override
protected void doSetValue(Object value) {
super.doSetValue(String.valueOf(value));
}
@Override
protected Object doGetValue() {
return Integer.parseInt(text.getText());
}
};
editor.setValidator(new ICellEditorValidator() {
@Override
public String isValid(Object value) {
if (value instanceof Integer) {
return null;
}
if (value instanceof String) {
try {
Integer.parseInt((String) value);
return null;
} catch (NumberFormatException e) {}
}
return "Not a valid number.";
}
});
return editor;
}
return new TextCellEditor(parent);
}
}