Mercurial > projects > dwt2
comparison org.eclipse.core.databinding/src/org/eclipse/core/internal/databinding/observable/StalenessObservableValue.d @ 78:0a55d2d5a946
Added file for databinding
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Tue, 14 Apr 2009 11:35:29 +0200 |
parents | |
children | 6be48cf9f95c |
comparison
equal
deleted
inserted
replaced
76:f05e6e8b2f2d | 78:0a55d2d5a946 |
---|---|
1 /******************************************************************************* | |
2 * Copyright (c) 2007, 2008 IBM Corporation and others. | |
3 * All rights reserved. This program and the accompanying materials | |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * Boris Bokowski, IBM Corporation - initial API and implementation | |
10 * Matthew Hall - bug 212468 | |
11 *******************************************************************************/ | |
12 module org.eclipse.core.internal.databinding.observable.StalenessObservableValue; | |
13 | |
14 import java.lang.all; | |
15 | |
16 import org.eclipse.core.databinding.observable.ChangeEvent; | |
17 import org.eclipse.core.databinding.observable.Diffs; | |
18 import org.eclipse.core.databinding.observable.IChangeListener; | |
19 import org.eclipse.core.databinding.observable.IObservable; | |
20 import org.eclipse.core.databinding.observable.IStaleListener; | |
21 import org.eclipse.core.databinding.observable.StaleEvent; | |
22 import org.eclipse.core.databinding.observable.value.AbstractObservableValue; | |
23 | |
24 /** | |
25 * An observable value that tracks the staleness of an {@link IObservable}. | |
26 * | |
27 * @since 1.1 | |
28 */ | |
29 public class StalenessObservableValue : AbstractObservableValue { | |
30 | |
31 private class MyListener : IChangeListener, IStaleListener { | |
32 public void handleChange(ChangeEvent event) { | |
33 if (stale && !event.getObservable().isStale()) { | |
34 stale = false; | |
35 fireValueChange(Diffs.createValueDiff(Boolean.TRUE, | |
36 Boolean.FALSE)); | |
37 } | |
38 } | |
39 | |
40 public void handleStale(StaleEvent staleEvent) { | |
41 if (!stale) { | |
42 stale = true; | |
43 fireValueChange(Diffs.createValueDiff(Boolean.FALSE, | |
44 Boolean.TRUE)); | |
45 } | |
46 } | |
47 } | |
48 | |
49 private IObservable tracked; | |
50 private bool stale; | |
51 private MyListener listener = new MyListener(); | |
52 | |
53 /** | |
54 * Constructs a StalenessObservableValue that tracks the staleness of the | |
55 * given {@link IObservable}. | |
56 * | |
57 * @param observable | |
58 * the observable to track | |
59 */ | |
60 public this(IObservable observable) { | |
61 super(observable.getRealm()); | |
62 this.tracked = observable; | |
63 this.stale = observable.isStale(); | |
64 tracked.addChangeListener(listener); | |
65 tracked.addStaleListener(listener); | |
66 } | |
67 | |
68 protected Object doGetValue() { | |
69 return tracked.isStale() ? Boolean.TRUE : Boolean.FALSE; | |
70 } | |
71 | |
72 public Object getValueType() { | |
73 return Boolean.TYPE; | |
74 } | |
75 | |
76 public synchronized void dispose() { | |
77 if (tracked !is null) { | |
78 tracked.removeChangeListener(listener); | |
79 tracked.removeStaleListener(listener); | |
80 tracked = null; | |
81 listener = null; | |
82 } | |
83 super.dispose(); | |
84 } | |
85 | |
86 } |