Search in sources :

Example 6 with JsonTree

use of org.terasology.rendering.nui.widgets.treeView.JsonTree in project Terasology by MovingBlocks.

the class WidgetSelectionScreen method initialise.

@Override
public void initialise() {
    availableWidgets = find("availableWidgets", UIDropdownScrollable.class);
    // Populate the widget list.
    ClassLibrary<UIWidget> metadataLibrary = getManager().getWidgetMetadataLibrary();
    for (ClassMetadata metadata : metadataLibrary) {
        if (!CoreScreenLayer.class.isAssignableFrom(metadata.getType())) {
            widgets.put(metadata.toString(), metadata);
        }
    }
    List<String> options = Lists.newArrayList(widgets.keySet());
    Collections.sort(options);
    availableWidgets.setOptions(options);
    // Add the widget as a child of the node.
    WidgetUtil.trySubscribe(this, "ok", button -> {
        String selection = availableWidgets.getSelection();
        JsonTree childNode;
        if (node.getValue().getType() == JsonTreeValue.Type.ARRAY) {
            ClassMetadata metadata = widgets.get(selection);
            // Get the widget tree from a utility method.
            childNode = NUIEditorNodeUtils.createNewWidget(selection, "newWidget", false);
            // If the widget is an UILayout override, also add a "contents" array node to the tree.
            if (UILayout.class.isAssignableFrom(metadata.getType())) {
                childNode.addChild(new JsonTreeValue("contents", null, JsonTreeValue.Type.ARRAY));
            }
        } else {
            childNode = new JsonTree(new JsonTreeValue(selection, null, JsonTreeValue.Type.OBJECT));
            childNode.setExpanded(true);
        }
        node.addChild(childNode);
        closeListeners.forEach(UpdateListener::onAction);
        getManager().closeScreen(ASSET_URI);
    });
    find("ok", UIButton.class).bindEnabled(new ReadOnlyBinding<Boolean>() {

        @Override
        public Boolean get() {
            return availableWidgets.getSelection() != null;
        }
    });
    WidgetUtil.trySubscribe(this, "cancel", button -> getManager().closeScreen(ASSET_URI));
}
Also used : ClassMetadata(org.terasology.reflection.metadata.ClassMetadata) JsonTree(org.terasology.rendering.nui.widgets.treeView.JsonTree) UIDropdownScrollable(org.terasology.rendering.nui.widgets.UIDropdownScrollable) CoreScreenLayer(org.terasology.rendering.nui.CoreScreenLayer) UIWidget(org.terasology.rendering.nui.UIWidget) JsonTreeValue(org.terasology.rendering.nui.widgets.treeView.JsonTreeValue) UIButton(org.terasology.rendering.nui.widgets.UIButton) UpdateListener(org.terasology.rendering.nui.widgets.UpdateListener)

Example 7 with JsonTree

use of org.terasology.rendering.nui.widgets.treeView.JsonTree in project Terasology by MovingBlocks.

the class NUIEditorMenuTreeBuilder method createChild.

private JsonTree createChild(String name, JsonTree node, Field field, Class clazz) throws IllegalAccessException, InstantiationException {
    JsonTreeValue childValue = new JsonTreeValue();
    childValue.setKey(name);
    if (UISkin.class.isAssignableFrom(field.getType())) {
        // Skin fields should always be KEY_VALUE_PAIR nodes with string values.
        childValue.setValue("engine:default");
        childValue.setType(JsonTreeValue.Type.KEY_VALUE_PAIR);
    } else {
        if (isWidget(field)) {
            createWidgetChild(name, node);
            return null;
        } else {
            childValue.setValue(getFieldValue(field, clazz));
            childValue.setType(getNodeType(field, getFieldValue(field, clazz)));
        }
    }
    JsonTree child = new JsonTree(childValue);
    child.setExpanded(true);
    node.addChild(child);
    return child;
}
Also used : JsonTreeValue(org.terasology.rendering.nui.widgets.treeView.JsonTreeValue) JsonTree(org.terasology.rendering.nui.widgets.treeView.JsonTree)

Example 8 with JsonTree

use of org.terasology.rendering.nui.widgets.treeView.JsonTree in project Terasology by MovingBlocks.

the class NUIEditorMenuTreeBuilder method createAddSkinContextMenu.

public MenuTree createAddSkinContextMenu(JsonTree node) {
    MenuTree addTree = new MenuTree(OPTION_ADD_EXTENDED);
    JsonTreeValue.Type type = node.getValue().getType();
    if (type == JsonTreeValue.Type.OBJECT) {
        if ("families".equals(node.getValue().getKey())) {
            // Add an option to add a family for a "families" node.
            addTree.addOption("New family", n -> {
                JsonTree child = new JsonTree(new JsonTreeValue("", null, JsonTreeValue.Type.OBJECT));
                child.setExpanded(true);
                n.addChild(child);
                for (Consumer<JsonTree> listener : addContextMenuListeners) {
                    listener.accept(child);
                }
            }, node);
        } else {
            addTree.addOption("Key/value pair", n -> {
                JsonTree child = new JsonTree((new JsonTreeValue("", "", JsonTreeValue.Type.KEY_VALUE_PAIR)));
                n.addChild(child);
                for (Consumer<JsonTree> listener : addContextMenuListeners) {
                    listener.accept(child);
                }
            }, node);
            populateContextMenu(node, addTree, true);
        }
    }
    return addTree;
}
Also used : MenuTree(org.terasology.rendering.nui.contextMenu.MenuTree) JsonTreeValue(org.terasology.rendering.nui.widgets.treeView.JsonTreeValue) JsonTree(org.terasology.rendering.nui.widgets.treeView.JsonTree)

Example 9 with JsonTree

use of org.terasology.rendering.nui.widgets.treeView.JsonTree in project Terasology by MovingBlocks.

the class NUIEditorMenuTreeBuilder method createAddContextMenu.

public MenuTree createAddContextMenu(JsonTree node) {
    MenuTree addTree = new MenuTree(OPTION_ADD_EXTENDED);
    JsonTreeValue.Type type = node.getValue().getType();
    if (type == JsonTreeValue.Type.ARRAY) {
        // Add generic item addition options.
        addTree.addOption("Boolean value", n -> {
            JsonTree child = new JsonTree(new JsonTreeValue(null, false, JsonTreeValue.Type.VALUE));
            n.addChild(child);
            for (Consumer<JsonTree> listener : addContextMenuListeners) {
                listener.accept(child);
            }
        }, node);
        addTree.addOption("Number value", n -> {
            JsonTree child = new JsonTree((new JsonTreeValue(null, 0.0f, JsonTreeValue.Type.VALUE)));
            n.addChild(child);
            for (Consumer<JsonTree> listener : addContextMenuListeners) {
                listener.accept(n);
            }
        }, node);
        addTree.addOption("String value", n -> {
            JsonTree child = new JsonTree((new JsonTreeValue(null, "", JsonTreeValue.Type.VALUE)));
            n.addChild(child);
            for (Consumer<JsonTree> listener : addContextMenuListeners) {
                listener.accept(child);
            }
        }, node);
    } else if (type == JsonTreeValue.Type.OBJECT) {
        // Add a generic key/value pair addition option.
        addTree.addOption("Key/value pair", n -> {
            JsonTree child = new JsonTree((new JsonTreeValue("", "", JsonTreeValue.Type.KEY_VALUE_PAIR)));
            n.addChild(child);
            for (Consumer<JsonTree> listener : addContextMenuListeners) {
                listener.accept(child);
            }
        }, node);
        populateContextMenu(node, addTree, false);
    }
    return addTree;
}
Also used : MenuTree(org.terasology.rendering.nui.contextMenu.MenuTree) JsonTreeValue(org.terasology.rendering.nui.widgets.treeView.JsonTreeValue) UISkin(org.terasology.rendering.nui.skin.UISkin) LoggerFactory(org.slf4j.LoggerFactory) JsonTree(org.terasology.rendering.nui.widgets.treeView.JsonTree) Lists(com.google.common.collect.Lists) Map(java.util.Map) NUIManager(org.terasology.rendering.nui.NUIManager) Logger(org.slf4j.Logger) LayoutConfig(org.terasology.rendering.nui.LayoutConfig) UIWidget(org.terasology.rendering.nui.UIWidget) SerializedName(com.google.gson.annotations.SerializedName) Field(java.lang.reflect.Field) Maps(com.google.common.collect.Maps) Objects(java.util.Objects) Consumer(java.util.function.Consumer) List(java.util.List) Border(org.terasology.math.Border) Binding(org.terasology.rendering.nui.databinding.Binding) ParameterizedType(java.lang.reflect.ParameterizedType) AbstractWidget(org.terasology.rendering.nui.AbstractWidget) Font(org.terasology.rendering.assets.font.Font) Color(org.terasology.rendering.nui.Color) Modifier(java.lang.reflect.Modifier) Optional(java.util.Optional) ReflectionUtils(org.reflections.ReflectionUtils) UILayout(org.terasology.rendering.nui.UILayout) TextureRegion(org.terasology.rendering.assets.texture.TextureRegion) MenuTree(org.terasology.rendering.nui.contextMenu.MenuTree) JsonTreeValue(org.terasology.rendering.nui.widgets.treeView.JsonTreeValue) Consumer(java.util.function.Consumer) JsonTree(org.terasology.rendering.nui.widgets.treeView.JsonTree)

Example 10 with JsonTree

use of org.terasology.rendering.nui.widgets.treeView.JsonTree in project Terasology by MovingBlocks.

the class NUIEditorNodeUtils method createNewSkin.

/**
 * @return The {@link JsonTree} to be used as an initial skin template within {@link NUISkinEditorScreen}.
 */
public static JsonTree createNewSkin() {
    JsonTree tree = new JsonTree(new JsonTreeValue(null, null, JsonTreeValue.Type.OBJECT));
    tree.addChild(new JsonTreeValue("inherit", "default", JsonTreeValue.Type.KEY_VALUE_PAIR));
    tree.addChild(new JsonTreeValue("elements", null, JsonTreeValue.Type.OBJECT));
    tree.addChild(new JsonTreeValue("families", null, JsonTreeValue.Type.OBJECT));
    return tree;
}
Also used : JsonTreeValue(org.terasology.rendering.nui.widgets.treeView.JsonTreeValue) JsonTree(org.terasology.rendering.nui.widgets.treeView.JsonTree)

Aggregations

JsonTree (org.terasology.rendering.nui.widgets.treeView.JsonTree)27 JsonTreeValue (org.terasology.rendering.nui.widgets.treeView.JsonTreeValue)14 JsonParser (com.google.gson.JsonParser)9 JsonElement (com.google.gson.JsonElement)6 JsonObject (com.google.gson.JsonObject)5 JsonSyntaxException (com.google.gson.JsonSyntaxException)5 Map (java.util.Map)5 UIWidget (org.terasology.rendering.nui.UIWidget)5 Gson (com.google.gson.Gson)4 JsonPrimitive (com.google.gson.JsonPrimitive)4 JsonReader (com.google.gson.stream.JsonReader)4 IOException (java.io.IOException)4 InputStreamReader (java.io.InputStreamReader)4 UITextEntry (org.terasology.rendering.nui.widgets.UITextEntry)4 Optional (java.util.Optional)3 AssetDataFile (org.terasology.assets.format.AssetDataFile)3 UISkin (org.terasology.rendering.nui.skin.UISkin)3 Field (java.lang.reflect.Field)2 Set (java.util.Set)2 UILayout (org.terasology.rendering.nui.UILayout)2