All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.reactfx.inhibeans.binding.BooleanBinding Maven / Gradle / Ivy

There is a newer version: 2.0-M5
Show newest version
package org.reactfx.inhibeans.binding;

import javafx.beans.InvalidationListener;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableBooleanValue;

import org.reactfx.Guard;
import org.reactfx.value.Val;

import com.sun.javafx.binding.ExpressionHelper;

/**
 * Inhibitory version of {@link javafx.beans.binding.BooleanBinding}.
 */
@Deprecated
public abstract class BooleanBinding
extends javafx.beans.binding.BooleanBinding
implements Binding {

    /**
     * @deprecated Use {@link Val#suspendable(javafx.beans.value.ObservableValue)}.
     */
    @Deprecated
    public static BooleanBinding wrap(ObservableBooleanValue source) {
        return new BooleanBinding() {
            { bind(source); }

            @Override
            protected boolean computeValue() { return source.get(); }
        };
    }

    private ExpressionHelper helper = null;
    private boolean blocked = false;
    private boolean fireOnRelease = false;

    @Override
    public Guard block() {
        if(blocked) {
            return Guard.EMPTY_GUARD;
        } else {
            blocked = true;
            return this::release;
        }
    }

    private void release() {
        blocked = false;
        if(fireOnRelease) {
            fireOnRelease = false;
            ExpressionHelper.fireValueChangedEvent(helper);
        }
    }

    @Override
    protected final void onInvalidating() {
        if(blocked)
            fireOnRelease = true;
        else
            ExpressionHelper.fireValueChangedEvent(helper);
    }


    /*******************************************
     *** Override adding/removing listeners. ***
     *******************************************/

    @Override
    public void addListener(InvalidationListener listener) {
        helper = ExpressionHelper.addListener(helper, this, listener);
    }

    @Override
    public void removeListener(InvalidationListener listener) {
        helper = ExpressionHelper.removeListener(helper, listener);
    }

    @Override
    public void addListener(ChangeListener listener) {
        helper = ExpressionHelper.addListener(helper, this, listener);
    }

    @Override
    public void removeListener(ChangeListener listener) {
        helper = ExpressionHelper.removeListener(helper, listener);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy