comparison org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/observable/masterdetail/DetailObservableSet.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
36 */ 36 */
37 public class DetailObservableSet : ObservableSet , IObserving { 37 public class DetailObservableSet : ObservableSet , IObserving {
38 38
39 private bool updating = false; 39 private bool updating = false;
40 40
41 private ISetChangeListener innerChangeListener = new class() ISetChangeListener { 41 private ISetChangeListener innerChangeListener;
42 class InnerChangeListener : ISetChangeListener {
42 public void handleSetChange(SetChangeEvent event) { 43 public void handleSetChange(SetChangeEvent event) {
43 if (!updating) { 44 if (!updating) {
44 fireSetChange(event.diff); 45 fireSetChange(event.diff);
45 } 46 }
46 } 47 }
59 * @param outerObservableValue 60 * @param outerObservableValue
60 * @param detailType 61 * @param detailType
61 */ 62 */
62 public this(IObservableFactory factory, 63 public this(IObservableFactory factory,
63 IObservableValue outerObservableValue, Object detailType) { 64 IObservableValue outerObservableValue, Object detailType) {
65 innerChangeListener = new InnerChangeListener();
66 outerChangeListener = new OuterChangeListener();
64 super(outerObservableValue.getRealm(), Collections.EMPTY_SET, 67 super(outerObservableValue.getRealm(), Collections.EMPTY_SET,
65 detailType); 68 detailType);
66 this.factory = factory; 69 this.factory = factory;
67 this.outerObservableValue = outerObservableValue; 70 this.outerObservableValue = outerObservableValue;
68 updateInnerObservableSet(outerObservableValue); 71 updateInnerObservableSet(outerObservableValue);
69 72
70 outerObservableValue.addValueChangeListener(outerChangeListener); 73 outerObservableValue.addValueChangeListener(outerChangeListener);
71 } 74 }
72 75
73 IValueChangeListener outerChangeListener = new class() IValueChangeListener { 76 IValueChangeListener outerChangeListener;
77 class OuterChangeListener : IValueChangeListener {
74 public void handleValueChange(ValueChangeEvent event) { 78 public void handleValueChange(ValueChangeEvent event) {
75 Set oldSet = new HashSet(wrappedSet); 79 Set oldSet = new HashSet(wrappedSet);
76 updateInnerObservableSet(outerObservableValue); 80 updateInnerObservableSet(outerObservableValue);
77 fireSetChange(Diffs.computeSetDiff(oldSet, wrappedSet)); 81 fireSetChange(Diffs.computeSetDiff(oldSet, wrappedSet));
78 } 82 }
93 wrappedSet = innerObservableSet; 97 wrappedSet = innerObservableSet;
94 98
95 if (elementType !is null) { 99 if (elementType !is null) {
96 Object innerValueType = innerObservableSet.getElementType(); 100 Object innerValueType = innerObservableSet.getElementType();
97 101
98 Assert.isTrue(elementType.equals(innerValueType), 102 Assert.isTrue(cast(bool)elementType.opEquals(innerValueType),
99 "Cannot change value type in a nested observable set"); //$NON-NLS-1$ 103 "Cannot change value type in a nested observable set"); //$NON-NLS-1$
100 } 104 }
101 105
102 innerObservableSet.addSetChangeListener(innerChangeListener); 106 innerObservableSet.addSetChangeListener(innerChangeListener);
103 } 107 }