org.shadebob.skineditor.actors.PreviewPane.java Source code

Java tutorial

Introduction

Here is the source code for org.shadebob.skineditor.actors.PreviewPane.java

Source

/*******************************************************************************
 * 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();
        }

    }
}