p2izing the editor
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor.prototype1 / src / eu / etaxonomy / taxeditor / prototype1 / view / GenericObservableMapCellLabelProvider.java
1 package eu.etaxonomy.taxeditor.prototype1.view;
2
3 import java.text.MessageFormat;
4 import java.util.Set;
5
6 import org.eclipse.core.databinding.DataBindingContext;
7 import org.eclipse.core.databinding.beans.BeansObservables;
8 import org.eclipse.core.databinding.observable.map.IMapChangeListener;
9 import org.eclipse.core.databinding.observable.map.IObservableMap;
10 import org.eclipse.core.databinding.observable.map.MapChangeEvent;
11 import org.eclipse.core.databinding.observable.value.IObservableValue;
12 import org.eclipse.jface.databinding.swt.SWTObservables;
13 import org.eclipse.jface.viewers.ColumnLabelProvider;
14 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
15 import org.eclipse.jface.viewers.ViewerCell;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.graphics.Image;
18 import org.eclipse.swt.widgets.Item;
19 import org.eclipse.swt.widgets.Tree;
20 import org.eclipse.swt.widgets.TreeItem;
21
22 import eu.etaxonomy.taxeditor.prototype1.view.NameEditorView.Node;
23
24 /**
25 * @author tomson <tom.schindl@bestsolution.at>
26 * @version $Revision: $
27 * @since 1.0
28 *
29 */
30 public class GenericObservableMapCellLabelProvider extends ColumnLabelProvider {
31 /**
32 * Template text
33 */
34 private String templateText;
35
36 /**
37 * The attribute maps
38 */
39 private final IObservableMap[] attributeMaps;
40
41 /**
42 * Change listener to track changes
43 */
44 private IMapChangeListener mapChangeListener = new IMapChangeListener() {
45 public void handleMapChange(MapChangeEvent event) {
46 Set affectedElements = event.diff.getChangedKeys();
47 LabelProviderChangedEvent newEvent = new LabelProviderChangedEvent(
48 GenericObservableMapCellLabelProvider.this, affectedElements.toArray());
49 fireLabelProviderChanged(newEvent);
50 }
51 };
52
53 private DataBindingContext bc;
54
55 /**
56 * @param attributeMap
57 * @param templateText
58 */
59 public GenericObservableMapCellLabelProvider(IObservableMap attributeMap,
60 String templateText, DataBindingContext bc) {
61 this(new IObservableMap[] { attributeMap },templateText, bc);
62 }
63
64 /**
65 * @param attributeMaps
66 * @param templateText
67 */
68 public GenericObservableMapCellLabelProvider(IObservableMap[] attributeMaps,String templateText, DataBindingContext bc) {
69 this.attributeMaps = attributeMaps;
70 for (int i = 0; i < attributeMaps.length; i++) {
71 attributeMaps[i].addMapChangeListener(mapChangeListener);
72 }
73 this.templateText = templateText;
74 this.bc = bc;
75 }
76
77 public void dispose() {
78 for (int i = 0; i < attributeMaps.length; i++) {
79 attributeMaps[i].removeMapChangeListener(mapChangeListener);
80 }
81 super.dispose();
82 }
83
84 public Image getImage(Object element) {
85 return null;
86 }
87
88 public String getText(Object element) {
89 return ((Node) element).getValue();
90 }
91
92 public void update(ViewerCell cell) {
93
94 Object element = cell.getElement();
95
96 cell.setText(getText(element));
97 Image image = getImage(element);
98 cell.setImage(image);
99 cell.setBackground(getBackground(element));
100 cell.setForeground(getForeground(element));
101 cell.setFont(getFont(element));
102
103 // bind model element to its corresponding cell
104 IObservableValue observeNodeValue = BeansObservables.observeValue((Node) element, "value");
105 IObservableValue observeCellValue = BeansObservables.observeValue(cell, "text");
106 bc.bindValue(observeNodeValue, observeCellValue, null, null);
107
108 }
109 }