/******************************************************************************* * Copyright 2014 Rafael Garcia Moreno. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.bladecoder.engineeditor.ui.panels; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.bladecoder.engine.actions.Param; import com.bladecoder.engine.actions.Param.Type; import com.bladecoder.engine.assets.EngineAssetManager; import com.bladecoder.engineeditor.Ctx; import com.bladecoder.engineeditor.model.Project; public class InputPanelFactory extends Table { public static InputPanel createInputPanel(Skin skin, String title, String desc, String[] options, boolean mandatory) { return createInputPanel(skin, title, desc, Type.OPTION, mandatory, null, options); } public static InputPanel createInputPanel(Skin skin, String title, String desc, Enum<?>[] options, boolean mandatory) { return createInputPanel(skin, title, desc, Type.OPTION, mandatory, null, options); } public static InputPanel createInputPanel(Skin skin, String title, String desc) { return createInputPanel(skin, title, desc, Type.STRING, false, null); } public static InputPanel createInputPanel(Skin skin, String title, String desc, boolean mandatory) { return createInputPanel(skin, title, desc, Type.STRING, mandatory, null); } public static InputPanel createInputPanel(Skin skin, String title, String desc, boolean mandatory, String defaultValue) { return createInputPanel(skin, title, desc, Type.STRING, mandatory, defaultValue); } public static InputPanel createInputPanel(Skin skin, String title, String desc, Param.Type type, boolean mandatory) { return createInputPanel(skin, title, desc, type, mandatory, null, (String[]) null); } public static InputPanel createInputPanel(Skin skin, String title, String desc, Param.Type type, boolean mandatory, String defaultValue) { return createInputPanel(skin, title, desc, type, mandatory, defaultValue, (String[]) null); } public static InputPanel createInputPanel(Skin skin, String title, String desc, Param.Type type, boolean mandatory, String defaultValue, Enum<?>[] options) { return createInputPanel(skin, title, desc, type, mandatory, defaultValue, (Object[]) options); } public static InputPanel createInputPanel(Skin skin, String title, String desc, Param.Type type, boolean mandatory, String defaultValue, String[] options) { return createInputPanel(skin, title, desc, type, mandatory, defaultValue, (Object[]) options); } private static InputPanel createInputPanel(Skin skin, String title, String desc, Param.Type type, boolean mandatory, String defaultValue, Object[] options) { switch (type) { case ACTOR: case CHARACTER_ACTOR: case INTERACTIVE_ACTOR: case SPRITE_ACTOR: return new ActorInputPanel(skin, title, desc, mandatory, defaultValue, type); case LAYER: return new LayerInputPanel(skin, title, desc, mandatory, defaultValue); case BOOLEAN: return new BooleanInputPanel(skin, title, desc, mandatory, defaultValue); case CHAPTER: return new ChapterInputPanel(skin, title, desc, mandatory, defaultValue); case DIMENSION: return new DimensionInputPanel(skin, title, desc, mandatory, defaultValue); case FLOAT: return new FloatInputPanel(skin, title, desc, mandatory, defaultValue); case INTEGER: return new IntegerInputPanel(skin, title, desc, mandatory, defaultValue); case SCENE: return new SceneInputPanel(skin, title, desc, mandatory, defaultValue); case COLOR: return new ColorInputPanel(skin, title, desc, mandatory, defaultValue); case SOUND: case VOICE: case TEXT_STYLE: case STRING: if (options != null) return getReadOnlyOptionsInputPanel(skin, title, desc, mandatory, defaultValue, options); return new StringInputPanel(skin, title, desc, mandatory, defaultValue); case VECTOR2: return new Vector2InputPanel(skin, title, desc, mandatory, defaultValue); case OPTION: return getReadOnlyOptionsInputPanel(skin, title, desc, mandatory, defaultValue, options); case EDITABLE_OPTION: return new EditableOptionsInputPanel<>(skin, title, desc, mandatory, defaultValue, options); case SCENE_ACTOR: case SCENE_CHARACTER_ACTOR: case SCENE_INTERACTIVE_ACTOR: case SCENE_SPRITE_ACTOR: return new SceneActorInputPanel(skin, title, desc, mandatory, defaultValue, type); case ACTOR_ANIMATION: return new ActorAnimationInputPanel(skin, title, desc, mandatory, defaultValue); case VECTOR3: break; case FILE: break; case TEXT: return new TextInputPanel(skin, title, desc, mandatory, defaultValue); case BIG_TEXT: TextInputPanel i = new TextInputPanel(skin, title, desc, mandatory, defaultValue); i.setRows(20); return i; case SMALL_TEXT: TextInputPanel i2 = new TextInputPanel(skin, title, desc, mandatory, defaultValue); i2.setRows(5); return i2; case ATLAS_ASSET: case MUSIC_ASSET: case SOUND_ASSET: case PARTICLE_ASSET: case FONT_ASSET: return getReadOnlyOptionsInputPanel(skin, title, desc, mandatory, defaultValue, getAssetList(type)); case NOT_SET: break; default: break; } return new StringInputPanel(skin, title, desc, mandatory, defaultValue); } private static InputPanel getReadOnlyOptionsInputPanel(Skin skin, String title, String desc, boolean mandatory, String defaultValue, Object[] options) { if (options instanceof Enum[]) { return new EnumOptionsInputPanel(skin, title, desc, mandatory, defaultValue, (Enum[]) options); } else if (options instanceof String[]) { return new StringOptionsInputPanel(skin, title, desc, mandatory, defaultValue, (String[]) options); } else { throw new RuntimeException("Unknown type of options: " + options.getClass()); } } private static String[] getAssetList(Param.Type type) { String path = null; final String exts[]; boolean cutExt = false; if (type == Type.ATLAS_ASSET) { path = Ctx.project.getProjectPath() + Project.ATLASES_PATH + "/" + Ctx.project.getResDir(); exts = new String[1]; exts[0] = EngineAssetManager.ATLAS_EXT; cutExt = true; } else if (type == Type.MUSIC_ASSET) { path = Ctx.project.getProjectPath() + Project.MUSIC_PATH + "/"; exts = new String[2]; exts[0] = ".ogg"; exts[1] = ".mp3"; } else if (type == Type.SOUND_ASSET) { path = Ctx.project.getProjectPath() + Project.SOUND_PATH + "/"; exts = new String[2]; exts[0] = ".ogg"; exts[1] = ".mp3"; } else if (type == Type.PARTICLE_ASSET) { path = Ctx.project.getProjectPath() + Project.PARTICLE_PATH + "/"; exts = null; } else if (type == Type.FONT_ASSET) { path = Ctx.project.getProjectPath() + Project.FONT_PATH + "/"; exts = new String[1]; exts[0] = ".ttf"; cutExt = true; } else { exts = null; } File f = new File(path); String list[] = f.list(new FilenameFilter() { @Override public boolean accept(File arg0, String arg1) { if (exts == null) return true; for (String ext : exts) if (arg1.endsWith(ext)) return true; return false; } }); if(list == null) { return new String[0]; } Arrays.sort(list); if (cutExt) { for (int i = 0; i < list.length; i++) { int idx = list[i].lastIndexOf('.'); if (idx != -1) list[i] = list[i].substring(0, idx); } } return list; } }