package org.objectstyle.wolips.baseforuiplugins.plist; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.TreeViewer; import org.objectstyle.wolips.baseforplugins.util.ComparisonUtils; import org.objectstyle.wolips.baseforuiplugins.utils.WOTextCellEditor; public class PropertyListValueEditingSupport extends EditingSupport { private IPropertyListChangeListener _listener; private TreeViewer _treeViewer; private TextCellEditor _textCellEditor; public PropertyListValueEditingSupport(TreeViewer viewer, IPropertyListChangeListener listener) { super(viewer); _listener = listener; _treeViewer = viewer; _textCellEditor = new WOTextCellEditor(_treeViewer.getTree()); } protected boolean canEdit(Object element) { return !((PropertyListPath) element).isCollectionValue(); } protected CellEditor getCellEditor(Object element) { return _textCellEditor; } protected Object getValue(Object element) { PropertyListPath path = (PropertyListPath) element; return path.convertValueToType(PropertyListPath.Type.String); } protected void setValue(Object element, Object value) { PropertyListPath path = (PropertyListPath) element; String strValue = (String) value; Object convertedValue = PropertyListPath.convertValueFromTypeToType(path.getKeyPath(), strValue, PropertyListPath.Type.String, path.getType(), path.getFactory()); Object oldValue = path.getValue(); if (!ComparisonUtils.equals(oldValue, convertedValue)) { boolean parentChanged = path.setValue(convertedValue); if (parentChanged) { _listener.pathChanged(path.getParent().getKeyPath(), oldValue, convertedValue); _treeViewer.refresh(path.getParent()); } else { _listener.pathChanged(path.getKeyPath(), oldValue, convertedValue); _treeViewer.refresh(path); } } } }