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

xworker.javafx.control.TreeItemActions Maven / Gradle / Ivy

There is a newer version: 2.0.2
Show newest version
package xworker.javafx.control;

import javafx.scene.Node;
import javafx.scene.control.TreeItem;
import org.xmeta.ActionContext;
import org.xmeta.Thing;
import xworker.javafx.beans.property.PropertyFactory;
import xworker.javafx.util.JavaFXUtils;

public class TreeItemActions {
    static{
        PropertyFactory.regist(TreeItem.class, "valueProperty", o -> {
            TreeItem obj = (TreeItem) o;
            return obj.valueProperty();
        });
        PropertyFactory.regist(TreeItem.class, "expandedProperty", o -> {
            TreeItem obj = (TreeItem) o;
            return obj.expandedProperty();
        });
        PropertyFactory.regist(TreeItem.class, "graphicProperty", o -> {
            TreeItem obj = (TreeItem) o;
            return obj.graphicProperty();
        });
    }

    public static void init(TreeItem node, Thing thing, ActionContext actionContext){
        if(thing.valueExists("expanded")){
            node.setExpanded(thing.getBoolean("expanded"));
        }
        if(thing.valueExists("graphic")){
            Node graphic = JavaFXUtils.getGraphic(thing, "graphic", actionContext);
            if(graphic != null) {
                node.setGraphic(graphic);
            }
        }
        if(thing.valueExists("value")){
            Object value = JavaFXUtils.getObject(thing, "value", actionContext);
            node.setValue(value);
        }
    }

    public static TreeItem create(ActionContext actionContext){
        Thing self = actionContext.getObject("self");

        TreeItem node = new TreeItem();
        init(node, self, actionContext);
        actionContext.g().put(self.getMetadata().getName(), node);

        actionContext.peek().put("parent", node);
        for(Thing child : self.getChilds()){
            Object obj = child.doAction("create", actionContext);
            if(obj instanceof TreeItem){
                node.getChildren().add((TreeItem) obj);
            }
        }

        return node;
    }
}