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

com.netopyr.reduxfx.vscenegraph.builders.WindowBuilder Maven / Gradle / Ivy

package com.netopyr.reduxfx.vscenegraph.builders;

import com.netopyr.reduxfx.vscenegraph.impl.patcher.property.Accessors;
import com.netopyr.reduxfx.vscenegraph.impl.patcher.property.SceneAccessor;
import com.netopyr.reduxfx.vscenegraph.impl.patcher.property.WindowsAccessor;
import com.netopyr.reduxfx.vscenegraph.VNode;
import com.netopyr.reduxfx.vscenegraph.event.VEventHandler;
import com.netopyr.reduxfx.vscenegraph.event.VEventType;
import com.netopyr.reduxfx.vscenegraph.property.VProperty;
import javafx.stage.WindowEvent;
import io.vavr.collection.Array;
import io.vavr.collection.Map;
import io.vavr.control.Option;

import static com.netopyr.reduxfx.vscenegraph.event.VEventType.CLOSE_REQUEST;

@SuppressWarnings("unused")
public class WindowBuilder> extends Builder {

    private static final String DIALOGS = "dialogs";
    private static final String SCENE = "scene";
    private static final String SHOWING = "showing";
    private static final String WINDOWS = "windows";

    public WindowBuilder(Class nodeClass,
                         Map> childrenMap,
                         Map> singleChildMap,
                         Map properties,
                         Map eventHandlers) {
        super(nodeClass, childrenMap, singleChildMap, properties, eventHandlers);
    }

    @SuppressWarnings("unchecked")
    @Override
    protected B create(
            Map> childrenMap,
            Map> singleChildMap,
            Map properties,
            Map eventHandlers) {
        return (B) new WindowBuilder<>(getNodeClass(), childrenMap, singleChildMap, properties, eventHandlers);
    }


    public B dialogs(VNode... nodes) {
        Accessors.registerNodeListAccessor(getNodeClass(), DIALOGS, WindowsAccessor::new);
        return children(DIALOGS, nodes == null? Array.empty() : Array.of(nodes));
    }

    public B scene(SceneBuilder value) {
        Accessors.registerNodeAccessor(getNodeClass(), SCENE, SceneAccessor::new);
        return child(SCENE, value);
    }

    public B windows(VNode... nodes) {
        Accessors.registerNodeListAccessor(getNodeClass(), WINDOWS, WindowsAccessor::new);
        return children(WINDOWS, nodes == null? Array.empty() : Array.of(nodes));
    }

    public B showing(boolean value) {
        return property(value? VProperty.Phase.SHOW_STAGE : VProperty.Phase.HIDE_STAGE, SHOWING, value);
    }


    public B onCloseRequest(VEventHandler eventHandler) {
        return onEvent(CLOSE_REQUEST, eventHandler);
    }

}