@Override public synchronized void dispose() { validationStatusProviders = null; super.dispose(); } }
public void run() { cachedValue = calculate(); }
protected final void makeDirty() { if (!dirty) { dirty = true; stopListening(); // copy the old value final Object oldValue = cachedValue; // Fire the "dirty" event. This implementation recomputes the new // value lazily. fireValueChange(new ValueDiff() { public Object getOldValue() { return oldValue; } public Object getNewValue() { return getValue(); } }); } }
public void run() { if (dependencies == null) { // We are not currently listening. if (hasListeners()) { // But someone is listening for changes. Call getValue() // to make sure we start listening to the observables we // depend on. getValue(); } } } });
public synchronized void addValueChangeListener( IValueChangeListener listener) { super.addValueChangeListener(listener); // If somebody is listening, we need to make sure we attach our own // listeners computeValueForListeners(); }
public boolean isStale() { // we need to recompute, otherwise staleness wouldn't mean anything getValue(); return stale; }
public void handleChange(ChangeEvent event) { makeDirty(); } }
public synchronized void dispose() { super.dispose(); stopListening(); }
/** * Some clients just add a listener and expect to get notified even if they * never called getValue(), so we have to call getValue() ourselves here to * be sure. Need to be careful about realms though, this method can be * called outside of our realm. See also bug 198211. If a client calls this * outside of our realm, they may receive change notifications before the * runnable below has been executed. It is their job to figure out what to * do with those notifications. */ private void computeValueForListeners() { getRealm().exec(new Runnable() { public void run() { if (dependencies == null) { // We are not currently listening. if (hasListeners()) { // But someone is listening for changes. Call getValue() // to make sure we start listening to the observables we // depend on. getValue(); } } } }); }
/** * Returns an observable value that tracks the active editor for the given * part service. * * @param partService * the part service to get the observable for, e.g. a workbench * page * @return an observable value that tracks the active editor * @since 3.110 */ public static IObservableValue<IEditorReference> observeActiveEditor(IPartService partService) { final IObservableValue<IWorkbenchPartReference> partObservable = observeActivePart(partService); return ComputedValue.create(() -> { IWorkbenchPartReference value = partObservable.getValue(); return value instanceof IEditorReference ? (IEditorReference) value : null; }); }
public synchronized void addChangeListener(IChangeListener listener) { super.addChangeListener(listener); // If somebody is listening, we need to make sure we attach our own // listeners computeValueForListeners(); }
public Object getNewValue() { return getValue(); } });
@Override public synchronized void dispose() { for (Entry<String, IObservableValue> entry : expressionMap.entrySet()) { entry.getValue().dispose(); } expressionMap.clear(); super.dispose(); }