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