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