com.bladecoder.engineeditor.utils.Message.java Source code

Java tutorial

Introduction

Here is the source code for com.bladecoder.engineeditor.utils.Message.java

Source

/*******************************************************************************
 * 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.utils;

import static com.badlogic.gdx.scenes.scene2d.actions.Actions.fadeOut;
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.sequence;

import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.GlyphLayout;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.utils.Align;

public class Message {
    private static final float FADE_DURATION = 0.4f;
    private static Label msg;
    private static Skin skin;
    private static boolean isModal;

    public static void init(Skin skin) {
        msg = new Label("", skin, "message") {

            @Override
            public Actor hit(float x, float y, boolean touchable) {
                if (isModal)
                    return this;

                return null;
            }
        };

        Message.skin = skin;
        msg.setWrap(true);
        msg.setAlignment(Align.center, Align.center);
    }

    public static void showMsg(Stage stage, String text) {
        showMsg(stage, text, false);
    }

    public static void showMsg(Stage stage, String text, boolean modal) {
        isModal = modal;

        if (text == null) {
            hideMsg();
            return;
        }

        add(stage, text);

        if (FADE_DURATION > 0) {
            msg.getColor().a = 0;
            msg.addAction(Actions.fadeIn(FADE_DURATION, Interpolation.fade));
        }
    }

    private static void add(Stage stage, String text) {
        msg.clearActions();

        msg.setText(text);

        GlyphLayout textLayout = new GlyphLayout();

        textLayout.setText(msg.getStyle().font, text, Color.BLACK, stage.getWidth() * .8f, Align.center, true);

        msg.setSize(textLayout.width + textLayout.height, textLayout.height + textLayout.height * 2);

        if (!stage.getActors().contains(msg, true))
            stage.addActor(msg);

        msg.setPosition(Math.round((stage.getWidth() - msg.getWidth()) / 2),
                Math.round((stage.getHeight() - msg.getHeight()) / 2));
        msg.invalidate();
    }

    public static void showMsg(Stage stage, String text, float duration) {
        isModal = false;

        if (text == null) {
            hideMsg();
            return;
        }

        add(stage, text);

        if (FADE_DURATION > 0) {
            msg.getColor().a = 0;
            msg.addAction(sequence(Actions.fadeIn(FADE_DURATION, Interpolation.fade), Actions.delay(duration,
                    sequence(fadeOut(FADE_DURATION, Interpolation.fade), Actions.removeActor()))));
        }
    }

    public static void hideMsg() {
        isModal = false;
        msg.setText("");

        if (FADE_DURATION > 0) {
            msg.addAction(sequence(fadeOut(FADE_DURATION, Interpolation.fade), Actions.removeActor()));
        }
    }

    public static void showMsgDialog(Stage stage, String title, String msg) {
        new Dialog(title, skin).text(msg).button("Close", true).key(Keys.ENTER, true).key(Keys.ESCAPE, false)
                .show(stage);
    }
}