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

com.netopyr.reduxfx.component.ComponentBase Maven / Gradle / Ivy

package com.netopyr.reduxfx.component;

import com.netopyr.reduxfx.component.impl.ComponentDriver;
import com.netopyr.reduxfx.middleware.Middleware;
import com.netopyr.reduxfx.store.ReduxFXStore;
import com.netopyr.reduxfx.updater.Update;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyIntegerProperty;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.layout.Pane;

import java.util.function.BiFunction;

@SuppressWarnings("unused")
public class ComponentBase extends ReduxFXStore {

    private final ComponentDriver componentDriver = new ComponentDriver();

    @SafeVarargs
    public ComponentBase(
            Group component,
            S initialState,
            BiFunction> updater,
            Middleware... middlewares
    ) {
        super(initialState, updater, middlewares);
        register(componentDriver);
    }

    @SafeVarargs
    public ComponentBase(
            Pane component,
            S initialState,
            BiFunction> updater,
            Middleware... middlewares
    ) {
        super(initialState, updater);
        register(componentDriver);
    }

    public ReadOnlyIntegerProperty createReadOnlyIntegerProperty(Object bean, String name) {
        return componentDriver.createReadOnlyIntegerProperty(bean, name);
    }

    public  ReadOnlyObjectProperty createReadOnlyObjectProperty(Object bean, String name) {
        return componentDriver.createReadOnlyObjectProperty(bean, name);
    }


    public  ObjectProperty createObjectProperty(Object bean, String name, ChangeListener listener) {
        return componentDriver.createObjectProperty(bean, name, listener);
    }


    public  ObjectProperty> createEventHandlerProperty(Object bean, String name) {
        return componentDriver.createEventHandlerProperty(bean, name);
    }

    @FunctionalInterface
    public interface ChangeListener {

        Object onChange(T oldValue, T newValue);

    }
}