Mercurial > projects > dwt2
comparison org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/observable/ValidatedObservableMap.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 |
---|---|
46 // True when validation status changes from invalid to valid. | 46 // True when validation status changes from invalid to valid. |
47 private bool computeNextDiff = false; | 47 private bool computeNextDiff = false; |
48 | 48 |
49 private bool updatingTarget = false; | 49 private bool updatingTarget = false; |
50 | 50 |
51 private IMapChangeListener targetChangeListener = new class() IMapChangeListener { | 51 private IMapChangeListener targetChangeListener; |
52 class TargetChangeListener : IMapChangeListener { | |
52 public void handleMapChange(MapChangeEvent event) { | 53 public void handleMapChange(MapChangeEvent event) { |
53 if (updatingTarget) | 54 if (updatingTarget) |
54 return; | 55 return; |
55 IStatus status = cast(IStatus) validationStatus.getValue(); | 56 IStatus status = cast(IStatus) validationStatus.getValue(); |
56 if (isValid(status)) { | 57 if (isValid(status)) { |
72 makeStale(); | 73 makeStale(); |
73 } | 74 } |
74 } | 75 } |
75 }; | 76 }; |
76 | 77 |
77 private IStaleListener targetStaleListener = new class() IStaleListener { | 78 private IStaleListener targetStaleListener; |
79 class TargetStaleListener : IStaleListener { | |
78 public void handleStale(StaleEvent staleEvent) { | 80 public void handleStale(StaleEvent staleEvent) { |
79 fireStale(); | 81 fireStale(); |
80 } | 82 } |
81 }; | 83 }; |
82 | 84 |
83 private IValueChangeListener validationStatusChangeListener = new class() IValueChangeListener { | 85 private IValueChangeListener validationStatusChangeListener; |
86 class ValidationStatusChangeListener : IValueChangeListener { | |
84 public void handleValueChange(ValueChangeEvent event) { | 87 public void handleValueChange(ValueChangeEvent event) { |
85 IStatus oldStatus = cast(IStatus) event.diff.getOldValue(); | 88 IStatus oldStatus = cast(IStatus) event.diff.getOldValue(); |
86 IStatus newStatus = cast(IStatus) event.diff.getNewValue(); | 89 IStatus newStatus = cast(IStatus) event.diff.getNewValue(); |
87 if (stale && !isValid(oldStatus) && isValid(newStatus)) { | 90 if (stale && !isValid(oldStatus) && isValid(newStatus)) { |
88 // this.stale means we are out of sync with target, | 91 // this.stale means we are out of sync with target, |
101 * @param target | 104 * @param target |
102 * @param validationStatus | 105 * @param validationStatus |
103 */ | 106 */ |
104 public this(IObservableMap target, | 107 public this(IObservableMap target, |
105 IObservableValue validationStatus) { | 108 IObservableValue validationStatus) { |
109 targetStaleListener = new TargetStaleListener(); | |
110 targetChangeListener = new TargetChangeListener(); | |
111 validationStatusChangeListener = new ValidationStatusChangeListener(); | |
106 super(target.getRealm(), new HashMap(target)); | 112 super(target.getRealm(), new HashMap(target)); |
107 Assert.isNotNull(validationStatus, | 113 Assert.isNotNull(cast(Object)validationStatus, |
108 "Validation status observable cannot be null"); //$NON-NLS-1$ | 114 "Validation status observable cannot be null"); //$NON-NLS-1$ |
109 Assert | 115 Assert |
110 .isTrue(target.getRealm().equals(validationStatus.getRealm()), | 116 .isTrue(cast(bool)target.getRealm().opEquals(validationStatus.getRealm()), |
111 "Target and validation status observables must be on the same realm"); //$NON-NLS-1$ | 117 "Target and validation status observables must be on the same realm"); //$NON-NLS-1$ |
112 this.target = target; | 118 this.target = target; |
113 this.validationStatus = validationStatus; | 119 this.validationStatus = validationStatus; |
114 target.addMapChangeListener(targetChangeListener); | 120 target.addMapChangeListener(targetChangeListener); |
115 target.addStaleListener(targetStaleListener); | 121 target.addStaleListener(targetStaleListener); |