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

com.netopyr.reduxfx.vscenegraph.builders.ListViewBuilder 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.ListViewCellFactoryAccessor;
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.impl.patcher.property.ListViewSelectionModelSelectItemsAccessor;
import com.netopyr.reduxfx.vscenegraph.property.VChangeListener;
import com.netopyr.reduxfx.vscenegraph.property.VProperty;
import io.vavr.collection.Array;
import io.vavr.collection.Map;
import io.vavr.collection.Seq;
import io.vavr.control.Option;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.util.function.Function;

public class ListViewBuilder, T> extends ControlBuilder {

    private static final String ITEMS = "items";
    private static final String CELL_FACTORY = "cellFactory";

    private final Class elementClass;
    private static final String SELECTION_MODEL = "selectionModel";

    public ListViewBuilder(Class nodeClass,
                           Class elementClass,
                           Map> childrenMap,
                           Map> singleChildMap,
                           Map properties,
                           Map eventHandlers) {
        super(nodeClass, childrenMap, singleChildMap, properties, eventHandlers);
        this.elementClass = elementClass;
    }

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


    public B cellFactory(Function value) {
        Accessors.registerAccessor(getNodeClass(), "cellFactory", ListViewCellFactoryAccessor::new);
        return property(CELL_FACTORY, value);
    }

    public B items(Seq value) {
        return property(ITEMS, value);
    }

    public B selectedItem(T item) {
        Accessors.registerAccessor(getNodeClass(), SELECTION_MODEL, ListViewSelectionModelSelectItemsAccessor::new);

        return property(SELECTION_MODEL, item);
    }

    public B selectedItem(T item, VChangeListener listener) {
        Accessors.registerAccessor(getNodeClass(), SELECTION_MODEL, ListViewSelectionModelSelectItemsAccessor::new);

        return property(SELECTION_MODEL, item, listener);
    }

    public B selectedItem(VChangeListener listener) {
        Accessors.registerAccessor(getNodeClass(), SELECTION_MODEL, ListViewSelectionModelSelectItemsAccessor::new);

        return property(SELECTION_MODEL, listener);
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
                .appendSuper(super.toString())
                .append("elementClass", elementClass)
                .toString();
    }
}