comparison org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/swt/DelayedObservableValue.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
53 */ 53 */
54 public class DelayedObservableValue : AbstractSWTObservableValue { 54 public class DelayedObservableValue : AbstractSWTObservableValue {
55 class ValueUpdater : Runnable { 55 class ValueUpdater : Runnable {
56 private final Object oldValue; 56 private final Object oldValue;
57 57
58 bool cancel = false; 58 bool cancel_ = false;
59 bool running = false; 59 bool running = false;
60 60
61 this(Object oldValue) { 61 this(Object oldValue) {
62 this.oldValue = oldValue; 62 this.oldValue = oldValue;
63 } 63 }
64 64
65 void cancel() { 65 void cancel() {
66 cancel = true; 66 cancel_ = true;
67 } 67 }
68 68
69 public void run() { 69 public void run() {
70 if (!cancel) 70 if (!cancel_)
71 try { 71 try {
72 running = true; 72 running = true;
73 internalFireValueChange(oldValue); 73 internalFireValueChange(oldValue);
74 } finally { 74 } finally {
75 running = false; 75 running = false;
76 } 76 }
77 } 77 }
78 } 78 }
79 79
80 private IStaleListener staleListener = new class() IStaleListener { 80 private IStaleListener staleListener;
81 class StaleListener : IStaleListener {
81 public void handleStale(StaleEvent staleEvent) { 82 public void handleStale(StaleEvent staleEvent) {
82 if (!updating) 83 if (!updating)
83 fireStale(); 84 fireStale();
84 } 85 }
85 }; 86 };
86 87
87 private IValueChangeListener valueChangeListener = new class() IValueChangeListener { 88 private IValueChangeListener valueChangeListener;
89 class ValueChangeListener : IValueChangeListener {
88 public void handleValueChange(ValueChangeEvent event) { 90 public void handleValueChange(ValueChangeEvent event) {
89 if (!updating) 91 if (!updating)
90 makeDirty(); 92 makeDirty();
91 } 93 }
92 }; 94 };
93 95
94 private Listener focusOutListener = new class() Listener { 96 private Listener focusOutListener;
97 class FocusOutListener : Listener {
95 public void handleEvent(Event event) { 98 public void handleEvent(Event event) {
96 // Force update on focus out 99 // Force update on focus out
97 if (dirty) 100 if (dirty)
98 internalFireValueChange(cachedValue); 101 internalFireValueChange(cachedValue);
99 } 102 }
121 * @throws IllegalArgumentException 124 * @throws IllegalArgumentException
122 * if <code>updateEventType</code> is an incorrect type. 125 * if <code>updateEventType</code> is an incorrect type.
123 */ 126 */
124 public this(int delayMillis, 127 public this(int delayMillis,
125 ISWTObservableValue observable) { 128 ISWTObservableValue observable) {
129 staleListener = new StaleListener();
130 valueChangeListener = new ValueChangeListener();
131 focusOutListener = new FocusOutListener();
126 super(observable.getRealm(), observable.getWidget()); 132 super(observable.getRealm(), observable.getWidget());
127 this.delay = delayMillis; 133 this.delay = delayMillis;
128 this.observable = observable; 134 this.observable = observable;
129 135
130 observable.addValueChangeListener(valueChangeListener); 136 observable.addValueChangeListener(valueChangeListener);
164 observable.setValue(value); 170 observable.setValue(value);
165 // Bug 215297 - target observable could veto or override value 171 // Bug 215297 - target observable could veto or override value
166 // passed to setValue(). Make sure we cache whatever is set. 172 // passed to setValue(). Make sure we cache whatever is set.
167 cachedValue = observable.getValue(); 173 cachedValue = observable.getValue();
168 174
169 if (!Util.equals(oldValue, cachedValue)) 175 if (!Util.opEquals(oldValue, cachedValue))
170 fireValueChange(Diffs.createValueDiff(oldValue, cachedValue)); 176 fireValueChange(Diffs.createValueDiff(oldValue, cachedValue));
171 } finally { 177 } finally {
172 updating = false; 178 updating = false;
173 } 179 }
174 } 180 }