Search in sources :

Example 1 with JsonWriter

use of com.badlogic.gdx.utils.JsonWriter in project gdx-skineditor by cobolfoo.

the class Skin method save.

/** Store all resources in the specified skin JSON file. */
public boolean save(FileHandle skinFile) {
    StringWriter jsonText = new StringWriter();
    JsonWriter writer = new JsonWriter(jsonText);
    Json json = new Json();
    json.setWriter(writer);
    json.writeObjectStart();
    //		Iterator it = resources.keys().iterator();
    //		while(it.hasNext()) {
    //			Object item = it.next();
    //			if (item instanceof com.badlogic.gdx.scenes.scene2d.utils.Drawable) {
    //				Drawable d = (Drawable) item;
    //				
    //			}
    //		}
    // Sort items
    Array<Class> items = new Array<Class>();
    items.add(com.badlogic.gdx.graphics.Color.class);
    items.add(com.badlogic.gdx.graphics.g2d.BitmapFont.class);
    items.add(Skin.TintedDrawable.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.ProgressBar.ProgressBarStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.ImageButton.ImageButtonStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.SplitPane.SplitPaneStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.Touchpad.TouchpadStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.Button.ButtonStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.Window.WindowStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.TextField.TextFieldStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.ScrollPane.ScrollPaneStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.List.ListStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.CheckBox.CheckBoxStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.Tree.TreeStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.Slider.SliderStyle.class);
    items.add(com.badlogic.gdx.scenes.scene2d.ui.SelectBox.SelectBoxStyle.class);
    for (Class<?> item : items) {
        String name = item.getName();
        json.writeObjectStart(name);
        ObjectMap<String, Object> typeResources = resources.get(item);
        // Build a temporary array for string keys to prevent nested
        // iterators with getObjetName function.
        Array<String> styles = new Array<String>();
        Iterator itStyles = typeResources.keys().iterator();
        while (itStyles.hasNext()) {
            String style = (String) itStyles.next();
            styles.add(style);
        }
        for (String style : styles) {
            json.writeObjectStart(style);
            Field[] fields = ClassReflection.getFields(typeResources.get(style).getClass());
            // Handle functions
            if (typeResources.get(style) instanceof com.badlogic.gdx.graphics.g2d.BitmapFont) {
                BitmapFont font = (BitmapFont) typeResources.get(style);
                json.writeValue("file", font.getData().fontFile.name());
            }
            for (Field field : fields) {
                try {
                    Object object = field.get(typeResources.get(style));
                    if (object != null) {
                        if (object instanceof BitmapFont) {
                            String value = resolveObjectName(BitmapFont.class, object);
                            if (value != null) {
                                json.writeValue(field.getName(), value);
                            }
                        } else if (object instanceof Float) {
                            if ((Float) object != 0.0f) {
                                json.writeValue(field.getName(), object);
                            }
                        } else if (object instanceof Color) {
                            if (typeResources.get(style) instanceof Color) {
                            // Skip sub-color
                            } else {
                                json.writeValue(field.getName(), object);
                            }
                        } else if (object instanceof Drawable) {
                            if (typeResources.get(style) instanceof com.badlogic.gdx.scenes.scene2d.ui.Skin.TintedDrawable) {
                            // Skip drawable if it is from tinted drawable									
                            } else {
                                String value = null;
                                value = resolveObjectName(Drawable.class, object);
                                //									
                                if (value != null) {
                                    json.writeValue(field.getName(), value);
                                }
                            }
                        } else if (object instanceof ListStyle) {
                            String value = resolveObjectName(ListStyle.class, object);
                            if (value != null) {
                                json.writeValue(field.getName(), value);
                            }
                        } else if (object instanceof ScrollPaneStyle) {
                            String value = resolveObjectName(ScrollPaneStyle.class, object);
                            if (value != null) {
                                json.writeValue(field.getName(), value);
                            }
                        } else if (object instanceof String) {
                            // only used to get original drawable for tinted drawable
                            json.writeValue(field.getName(), object);
                        } else if (object instanceof char[]) {
                        // Don't store.
                        } else {
                            throw new IllegalArgumentException("resource object type is unknown: " + object.getClass().getCanonicalName());
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            json.writeObjectEnd();
        }
        json.writeObjectEnd();
    }
    json.writeObjectEnd();
    PrettyPrintSettings settings = new PrettyPrintSettings();
    settings.outputType = OutputType.minimal;
    settings.singleLineColumns = 100;
    skinFile.writeString(json.prettyPrint(jsonText.toString(), settings), false);
    return true;
}
Also used : ListStyle(com.badlogic.gdx.scenes.scene2d.ui.List.ListStyle) Field(com.badlogic.gdx.utils.reflect.Field) StringWriter(java.io.StringWriter) Iterator(java.util.Iterator) BitmapFont(com.badlogic.gdx.graphics.g2d.BitmapFont) PrettyPrintSettings(com.badlogic.gdx.utils.JsonValue.PrettyPrintSettings) Color(com.badlogic.gdx.graphics.Color) TextureRegionDrawable(com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable) Drawable(com.badlogic.gdx.scenes.scene2d.utils.Drawable) SpriteDrawable(com.badlogic.gdx.scenes.scene2d.utils.SpriteDrawable) NinePatchDrawable(com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable) TiledDrawable(com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable) Json(com.badlogic.gdx.utils.Json) JsonWriter(com.badlogic.gdx.utils.JsonWriter) GdxRuntimeException(com.badlogic.gdx.utils.GdxRuntimeException) SerializationException(com.badlogic.gdx.utils.SerializationException) ReflectionException(com.badlogic.gdx.utils.reflect.ReflectionException) Array(com.badlogic.gdx.utils.Array) ScrollPaneStyle(com.badlogic.gdx.scenes.scene2d.ui.ScrollPane.ScrollPaneStyle)

Aggregations

Color (com.badlogic.gdx.graphics.Color)1 BitmapFont (com.badlogic.gdx.graphics.g2d.BitmapFont)1 ListStyle (com.badlogic.gdx.scenes.scene2d.ui.List.ListStyle)1 ScrollPaneStyle (com.badlogic.gdx.scenes.scene2d.ui.ScrollPane.ScrollPaneStyle)1 Drawable (com.badlogic.gdx.scenes.scene2d.utils.Drawable)1 NinePatchDrawable (com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable)1 SpriteDrawable (com.badlogic.gdx.scenes.scene2d.utils.SpriteDrawable)1 TextureRegionDrawable (com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable)1 TiledDrawable (com.badlogic.gdx.scenes.scene2d.utils.TiledDrawable)1 Array (com.badlogic.gdx.utils.Array)1 GdxRuntimeException (com.badlogic.gdx.utils.GdxRuntimeException)1 Json (com.badlogic.gdx.utils.Json)1 PrettyPrintSettings (com.badlogic.gdx.utils.JsonValue.PrettyPrintSettings)1 JsonWriter (com.badlogic.gdx.utils.JsonWriter)1 SerializationException (com.badlogic.gdx.utils.SerializationException)1 Field (com.badlogic.gdx.utils.reflect.Field)1 ReflectionException (com.badlogic.gdx.utils.reflect.ReflectionException)1 StringWriter (java.io.StringWriter)1 Iterator (java.util.Iterator)1