comparison org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/observable/masterdetail/DetailObservableValue.d @ 85:6be48cf9f95c

Work on databinding
author Frank Benoit <benoit@tionex.de>
date Sat, 18 Apr 2009 13:54:50 +0200
parents 0a55d2d5a946
children
comparison
equal deleted inserted replaced
84:fcf926c91ca4 85:6be48cf9f95c
29 */ 29 */
30 public class DetailObservableValue : AbstractObservableValue , IObserving { 30 public class DetailObservableValue : AbstractObservableValue , IObserving {
31 31
32 private bool updating = false; 32 private bool updating = false;
33 33
34 private IValueChangeListener innerChangeListener = new class() IValueChangeListener { 34 private IValueChangeListener innerChangeListener;
35 class InnerChangeListener : IValueChangeListener {
35 public void handleValueChange(ValueChangeEvent event) { 36 public void handleValueChange(ValueChangeEvent event) {
36 if (!updating) { 37 if (!updating) {
37 fireValueChange(event.diff); 38 fireValueChange(event.diff);
38 } 39 }
39 } 40 }
54 * @param factory 55 * @param factory
55 * @param detailType 56 * @param detailType
56 */ 57 */
57 public this(IObservableValue outerObservableValue, 58 public this(IObservableValue outerObservableValue,
58 IObservableFactory factory, Object detailType) { 59 IObservableFactory factory, Object detailType) {
60 innerChangeListener = new InnerChangeListener();
61 outerChangeListener = new OuterChangeListener();
59 super(outerObservableValue.getRealm()); 62 super(outerObservableValue.getRealm());
60 this.factory = factory; 63 this.factory = factory;
61 this.detailType = detailType; 64 this.detailType = detailType;
62 this.outerObservableValue = outerObservableValue; 65 this.outerObservableValue = outerObservableValue;
63 updateInnerObservableValue(outerObservableValue); 66 updateInnerObservableValue(outerObservableValue);
64 67
65 outerObservableValue.addValueChangeListener(outerChangeListener); 68 outerObservableValue.addValueChangeListener(outerChangeListener);
66 } 69 }
67 70
68 IValueChangeListener outerChangeListener = new class() IValueChangeListener { 71 IValueChangeListener outerChangeListener;
72 class OuterChangeListener : IValueChangeListener {
69 public void handleValueChange(ValueChangeEvent event) { 73 public void handleValueChange(ValueChangeEvent event) {
70 Object oldValue = doGetValue(); 74 Object oldValue = doGetValue();
71 updateInnerObservableValue(outerObservableValue); 75 updateInnerObservableValue(outerObservableValue);
72 fireValueChange(Diffs.createValueDiff(oldValue, doGetValue())); 76 fireValueChange(Diffs.createValueDiff(oldValue, doGetValue()));
73 } 77 }
88 Object innerValueType = innerObservableValue.getValueType(); 92 Object innerValueType = innerObservableValue.getValueType();
89 93
90 if (detailType !is null) { 94 if (detailType !is null) {
91 Assert 95 Assert
92 .isTrue( 96 .isTrue(
93 detailType.equals(innerValueType), 97 cast(bool)detailType.opEquals(innerValueType),
94 "Cannot change value type in a nested observable value, from " + innerValueType + " to " + detailType); //$NON-NLS-1$ //$NON-NLS-2$ 98 Format("Cannot change value type in a nested observable value, from {} to {}", innerValueType, detailType)); //$NON-NLS-1$ //$NON-NLS-2$
95 } 99 }
96 innerObservableValue.addValueChangeListener(innerChangeListener); 100 innerObservableValue.addValueChangeListener(innerChangeListener);
97 } 101 }
98 } 102 }
99 103