Java tutorial
/******************************************************************************* * Copyright 2011 See AUTHORS file. * * 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 org.shadebob.skineditor.actors; import org.shadebob.skineditor.SkinEditorGame; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.List; import com.badlogic.gdx.scenes.scene2d.ui.ProgressBar; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.SelectBox; import com.badlogic.gdx.scenes.scene2d.ui.Slider; import com.badlogic.gdx.scenes.scene2d.ui.SplitPane; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextField; import com.badlogic.gdx.scenes.scene2d.ui.Touchpad; import com.badlogic.gdx.scenes.scene2d.ui.Tree; import com.badlogic.gdx.scenes.scene2d.ui.Window; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectMap; import com.badlogic.gdx.utils.ObjectMap.Keys; /** * A table representing the right part of the interface * * @author Yanick Bourbeau * */ public class PreviewPane extends Table { // private Table tab private SkinEditorGame game; // An input listener to use on items inside a scroll pane, thanks to Tomski for the hint. private InputListener stopTouchDown = new InputListener() { @Override public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { event.stop(); return false; } }; /** * */ public PreviewPane(SkinEditorGame game) { super(game.skin); this.game = game; top(); left(); } /** * */ public void refresh() { Gdx.app.log("PreviewPane", "Refresh pane!"); clear(); ImageButton button = (ImageButton) game.screenMain.barWidgets.group.getChecked(); String widget = button.getUserObject().toString(); String widgetStyle = "com.badlogic.gdx.scenes.scene2d.ui." + widget + "$" + widget + "Style"; try { Class<?> style = Class.forName(widgetStyle); ObjectMap<String, ?> styles = game.skinProject.getAll(style); if (styles == null) { Label label = new Label("No styles defined for this widget type", game.skin, "error"); add(label).row().pad(10); } else { Keys<String> keys = styles.keys(); Array<String> sortedKeys = new Array<String>(); for (String key : keys) { sortedKeys.add(key); } sortedKeys.sort(); for (String key : sortedKeys) { // We render one per key add(new Label(key, game.skin, "title")).left().pad(10).expandX().row(); try { if (widget.equals("Label")) { Label w = new Label("This is a Label widget", game.skinProject, key); add(w).pad(10).padBottom(20).row(); } else if (widget.equals("Button")) { // Button Button w = new Button(game.skinProject, key); add(w).width(120).height(32).pad(10).padBottom(20).row(); } else if (widget.equals("TextButton")) { // TextButton TextButton w = new TextButton("This is a TextButton widget", game.skinProject, key); add(w).pad(10).padBottom(20).row(); } else if (widget.equals("ImageButton")) { // ImageButton ImageButton w = new ImageButton(game.skinProject, key); add(w).pad(10).padBottom(20).row(); } else if (widget.equals("CheckBox")) { // CheckBox CheckBox w = new CheckBox("This is a CheckBox widget", game.skinProject, key); w.setChecked(true); add(w).pad(10).padBottom(20).row(); } else if (widget.equals("TextField")) { // TextField TextField w = new TextField("This is a TextField widget", game.skinProject, key); if (w.getStyle().fontColor == null) { throw new Exception("Textfield style requires a font color!"); } w.addListener(stopTouchDown); add(w).pad(10).width(220).padBottom(20).row(); } else if (widget.equals("List")) { // List List w = new List(game.skinProject, key); Array<String> items = new Array<String>(); items.add("This is"); items.add("a"); items.add("List widget!"); w.setItems(items); add(w).pad(10).width(220).height(120).padBottom(20).expandX().fillX().row(); } else if (widget.equals("SelectBox")) { // SelectBox SelectBox<String> w = new SelectBox<String>(game.skinProject, key); Array<String> items = new Array<String>(); items.add("This is"); items.add("a"); items.add("SelectBox widget!"); w.setItems(items); add(w).pad(10).width(220).padBottom(20).expandX().fillX().row(); } else if (widget.equals("ProgressBar")) { // ProgressBar ProgressBar w = new ProgressBar(0, 100, 5, false, game.skinProject, key); w.setValue(50); w.addListener(stopTouchDown); add(w).pad(10).width(220).padBottom(20).expandX().fillX().row(); } else if (widget.equals("Slider")) { // Slider Slider w = new Slider(0, 100, 5, false, game.skinProject, key); add(w).pad(10).width(220).padBottom(20).expandX().fillX().row(); w.addListener(stopTouchDown); Slider w2 = new Slider(0, 100, 5, true, game.skinProject, key); add(w2).pad(10).padBottom(20).expandX().fillX().row(); w2.addListener(stopTouchDown); } else if (widget.equals("ScrollPane")) { // ScrollPane Table t = new Table(game.skin); for (int i = 0; i < 20; i++) { t.add("This is a ScrollPane Widget").padRight(10); t.add("This is a ScrollPane Widget").padRight(10); t.add("This is a ScrollPane Widget").row(); } ScrollPane w = new ScrollPane(t, game.skinProject, key); w.addListener(stopTouchDown); w.setFlickScroll(true); w.setScrollbarsOnTop(true); w.setScrollBarPositions(true, true); w.setFadeScrollBars(false); add(w).pad(10).width(420).height(240).padBottom(20).expandX().fillX().row(); } else if (widget.equals("SplitPane")) { // SplitPane for (int j = 0; j < 2; j++) { Table t = new Table(game.skin); t.setBackground(game.skin.getDrawable("default-rect")); Table t2 = new Table(game.skin); t2.setBackground(game.skin.getDrawable("default-rect")); for (int i = 0; i < 20; i++) { t.add("This is a SplitPane Widget").pad(10).row(); t2.add("This is a SplitPane Widget").pad(10).row(); } SplitPane w = new SplitPane(t, t2, (j % 2 == 0), game.skinProject, key); w.addListener(stopTouchDown); add(w).pad(10).width(220).height(160).padBottom(20).expandX().fillX(); } row(); } else if (widget.equals("Window")) { // Window Table t = new Table(game.skin); for (int i = 0; i < 5; i++) { t.add("This is a Window Widget").row(); } Window w = new Window("This is a Window Widget", game.skinProject, key); w.addListener(stopTouchDown); w.add(t); add(w).pad(10).width(420).height(240).padBottom(20).expandX().fillX().row(); } else if (widget.equals("Touchpad")) { // Touchpad Touchpad w = new Touchpad(0, game.skinProject, key); w.addListener(stopTouchDown); add(w).pad(10).width(200).height(200).padBottom(20).expandX().fillX().row(); } else if (widget.equals("Tree")) { // Tree Tree w = new Tree(game.skinProject, key); Tree.Node node = new Tree.Node(new Label("This", game.skin)); Tree.Node node1 = new Tree.Node(new Label("is", game.skin)); Tree.Node node2 = new Tree.Node(new Label("a", game.skin)); Tree.Node node3 = new Tree.Node(new Label("Tree", game.skin)); Tree.Node node4 = new Tree.Node(new Label("Widget", game.skin)); node3.add(node4); node2.add(node3); node1.add(node2); node.add(node1); w.add(node); w.expandAll(); add(w).pad(10).width(200).height(200).padBottom(20).expandX().fillX().row(); } else { add(new Label("Unknown widget type!", game.skin, "error")).pad(10).padBottom(20).row(); } } catch (Exception e) { add(new Label("Please fill all required fields", game.skin, "error")).pad(10).padBottom(20) .row(); } } } } catch (Exception e) { e.printStackTrace(); } } }