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);