Mercurial > projects > dwt2
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 } |