Project

General

Profile

Download (2.67 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.prototype2.view.propertysheetsupport;
2

    
3
import java.util.TreeMap;
4

    
5
import org.eclipse.core.databinding.DataBindingContext;
6
import org.eclipse.core.databinding.UpdateValueStrategy;
7
import org.eclipse.core.databinding.observable.value.IObservableValue;
8
import org.eclipse.core.runtime.Assert;
9
import org.eclipse.jface.databinding.swt.SWTObservables;
10
import org.eclipse.jface.viewers.CellEditor;
11
import org.eclipse.jface.viewers.EditingSupport;
12
import org.eclipse.jface.viewers.TextCellEditor;
13
import org.eclipse.jface.viewers.ViewerCell;
14
import org.eclipse.swt.SWT;
15

    
16
import eu.etaxonomy.taxeditor.prototype2.model.PropertySheetNode;
17
import eu.etaxonomy.taxeditor.prototype2.view.PropertySheetViewer;
18

    
19
public class PropertySheetValueEditingSupport extends EditingSupport {
20

    
21
	private TreeMap<String,CellEditor> cellEditors;
22
	private PropertySheetViewer viewer;
23
	private DataBindingContext bindingContext;
24
			
25
	public PropertySheetValueEditingSupport(PropertySheetViewer viewer) {
26
		super(viewer);
27
		this.viewer = viewer;
28
		this.bindingContext = viewer.getBindingContext();
29
		this.cellEditors = new TreeMap<String, CellEditor>();
30
	}		
31
	
32
	protected boolean canEdit(Object element) {
33
		return ((PropertySheetNode) element).isEditable();
34
	}
35

    
36
	protected CellEditor getCellEditor(Object element) {
37
		String elementString = element.toString();
38
		if (cellEditors.get(elementString) == null)
39
			cellEditors.put(elementString, new TextCellEditor(viewer.getTree()));
40
		return cellEditors.get(elementString);
41
	}
42

    
43
	protected Object getValue(Object element) {
44
		return (PropertySheetNode) element;
45
	}
46

    
47
	protected void setValue(Object element, Object value) {
48
		((PropertySheetNode) element).setPropertyValue(value.toString());
49
		this.getViewer().update(element, null);
50
	}
51

    
52
	protected void initializeCellEditorValue(CellEditor cellEditor, ViewerCell cell) {
53
		PropertySheetNode node = (PropertySheetNode) getValue(cell.getElement());
54
		
55
		// an empty string instead of a null makes the field editable
56
		cellEditor.setValue(node.getPropertyValue() == null ? "" : node.getPropertyValue());
57
		
58
		// if node element is observing a value, bind it to its TreeItem
59
		IObservableValue observeNodeValue = node.getObserveValue();
60
		if (observeNodeValue != null) {
61
			
62
	        Assert.isNotNull(bindingContext,
63
            	"Editing support: PropertySheetViewer's binding context must be explicitly set.");
64
			
65
			IObservableValue observeCellValue = SWTObservables.observeText(cellEditor.getControl(), SWT.Modify);
66
			bindingContext.bindValue(observeNodeValue, observeCellValue,
67
					new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT), null);
68
			
69
		}
70
	}		
71
}
(2-2/3)