Example usage for com.badlogic.gdx.scenes.scene2d.ui VerticalGroup align

List of usage examples for com.badlogic.gdx.scenes.scene2d.ui VerticalGroup align

Introduction

In this page you can find the example usage for com.badlogic.gdx.scenes.scene2d.ui VerticalGroup align.

Prototype

int align

To view the source code for com.badlogic.gdx.scenes.scene2d.ui VerticalGroup align.

Click Source Link

Usage

From source file:com.agateau.ui.UiBuilder.java

License:Apache License

protected VerticalGroup createVerticalGroup(XmlReader.Element element) {
    VerticalGroup group = new VerticalGroup();
    group.space(element.getFloatAttribute("spacing", 0));
    int align = parseAlign(element);
    if (align != -1) {
        group.align(align);
    }// w w  w  .  j av a  2 s .c o m
    return group;
}

From source file:com.forerunnergames.peril.client.ui.screens.menus.modes.classic.creategame.ClassicGameModeCreateGameMenuScreen.java

License:Open Source License

public ClassicGameModeCreateGameMenuScreen(final MenuScreenWidgetFactory widgetFactory,
        final ScreenChanger screenChanger, final ScreenSize screenSize, final MouseInput mouseInput,
        final Batch batch, final CountryCounter countryCounter, final MBassador<Event> eventBus)

{
    super(widgetFactory, screenChanger, screenSize, mouseInput, batch, eventBus);

    Arguments.checkIsNotNull(widgetFactory, "widgetFactory");
    Arguments.checkIsNotNull(countryCounter, "countryCounter");

    this.widgetFactory = widgetFactory;
    this.countryCounter = countryCounter;

    errorDialog = createErrorDialog();//from w  w w.  j  a va 2s  .  c o  m

    addTitle(TITLE_TEXT, Align.bottomLeft, 40);
    addSubTitle(SUBTITLE_TEXT);

    playerNameTextField = widgetFactory.createPlayerNameTextField();
    clanAcronymTextField = widgetFactory.createClanAcronymTextField();
    serverNameTextField = widgetFactory.createServerNameTextField();

    clanAcronymCheckBox = widgetFactory.createClanAcronymCheckBox(new ChangeListener() {
        @Override
        public void changed(final ChangeEvent event, final Actor actor) {
            clanAcronymTextField.setText(clanAcronymCheckBox.isChecked() ? clanAcronymTextField.getText() : "");
            clanAcronymTextField.setDisabled(!clanAcronymCheckBox.isChecked());
        }
    });

    clanAcronymCheckBox.setChecked(!clanAcronymTextField.getText().isEmpty());
    clanAcronymTextField.setDisabled(!clanAcronymCheckBox.isChecked());

    // @formatter:off
    humanPlayerLimitLabel = widgetFactory
            .createPlayerLimitLabel(String.valueOf(InputSettings.INITIAL_CLASSIC_MODE_HUMAN_PLAYER_LIMIT));
    aiPlayerLimitLabel = widgetFactory
            .createPlayerLimitLabel(String.valueOf(InputSettings.INITIAL_CLASSIC_MODE_AI_PLAYER_LIMIT));
    playMapNameLabel = widgetFactory.createPlayMapNameLabel();
    totalCountryCount = calculateCurrentPlayMapTotalCountryCount();
    // @formatter:on

    customizeHumanPlayersButton = widgetFactory
            .createCustomizePlayersButton(new ClickListener(Input.Buttons.LEFT) {
                @Override
                public void clicked(final InputEvent event, final float x, final float y) {
                    // TODO Show Players Dialog.

                    updateHumanPlayerLimit();
                    updateWinPercentSelectBoxItems();
                }
            });

    customizeAiPlayersButton = widgetFactory
            .createCustomizePlayersButton(new ClickListener(Input.Buttons.LEFT) {
                @Override
                public void clicked(final InputEvent event, final float x, final float y) {
                    // TODO Show Players Dialog.

                    updateAiPlayerLimit();
                    updateWinPercentSelectBoxItems();
                }
            });

    customizePlayMapButton = widgetFactory.createCustomizePlayMapButton(new ClickListener(Input.Buttons.LEFT) {
        @Override
        public void clicked(final InputEvent event, final float x, final float y) {
            // TODO Show Play Map Dialog.

            // TODO Add refresh button to Play Map Dialog to re-load play maps.
            playMaps = loadPlayMaps();

            currentPlayMap = nextPlayMap();
            playMapNameLabel.setText(currentPlayMap.getName());
            totalCountryCount = calculateCurrentPlayMapTotalCountryCount();
            updateWinPercentSelectBoxItems();
        }
    });

    // @formatter:off
    spectatorLimitSelectBox = widgetFactory.createSpectatorsSelectBox();
    final Array<Integer> spectatorLimits = new Array<>(
            ClassicGameRules.MAX_SPECTATORS - ClassicGameRules.MIN_SPECTATORS + 1);
    for (int i = ClassicGameRules.MIN_SPECTATORS; i <= ClassicGameRules.MAX_SPECTATORS; ++i) {
        spectatorLimits.add(i);
    }
    spectatorLimitSelectBox.setItems(spectatorLimits);
    spectatorLimitSelectBox.setSelected(InputSettings.INITIAL_SPECTATOR_LIMIT);
    // @formatter:off

    // @formatter:on
    initialCountryAssignmentSelectBox = widgetFactory.createInitialCountryAssignmentSelectBox();
    final Array<String> initialCountryAssignments = new Array<>(InitialCountryAssignment.count());
    for (final InitialCountryAssignment initialCountryAssignment : InitialCountryAssignment.values()) {
        initialCountryAssignments.add(Strings.toProperCase(initialCountryAssignment.name()));
    }
    initialCountryAssignmentSelectBox.setItems(initialCountryAssignments);
    initialCountryAssignmentSelectBox
            .setSelected(Strings.toProperCase(InputSettings.INITIAL_CLASSIC_MODE_COUNTRY_ASSIGNMENT.name()));
    // @formatter:on

    winPercentSelectBox = widgetFactory.createWinPercentSelectBox();
    updateWinPercentSelectBoxItems();
    selectInitialWinPercentItem();

    // @formatter:off
    playerSettingsSectionTitleLabel = widgetFactory.createPlayerSettingsSectionTitleLabel();
    playerNameSettingLabel = widgetFactory.createPlayerNameSettingLabel();
    clanTagSettingLabel = widgetFactory.createClanTagSettingLabel();
    gameSettingsSectionTitleLabel = widgetFactory.createGameSettingsSectionTitleLabel();
    serverNameSettingLabel = widgetFactory.createMenuSettingLabel(SERVER_NAME_SETTING_LABEL_TEXT);
    humanPlayerLimitSettingLabel = widgetFactory.createMenuSettingLabel(HUMAN_PLAYERS_SETTING_LABEL_TEXT);
    aiPlayerLimitSettingLabel = widgetFactory.createMenuSettingLabel(AI_PLAYERS_SETTING_LABEL_TEXT);
    spectatorLimitSettingLabel = widgetFactory.createMenuSettingLabel(SPECTATORS_SETTING_SETTING_LABEL_TEXT);
    playMapSettingLabel = widgetFactory.createMenuSettingLabel(PLAY_MAP_SETTING_LABEL_TEXT);
    winPercentSettingLabel = widgetFactory.createMenuSettingLabel(WIN_PERCENT_SETTING_LABEL_TEXT);
    initialCountryAssignmentSettingLabel = widgetFactory
            .createMenuSettingLabel(INITIAL_COUNTRY_ASSIGNMENT_SETTING_LABEL_TEXT);
    // @formatter:on

    final VerticalGroup verticalGroup = new VerticalGroup();
    verticalGroup.align(Align.topLeft);

    final Table playerSettingsTable = new Table().top().left();
    playerSettingsTable.add().height(23);
    playerSettingsTable.row();
    playerSettingsTable.add(playerSettingsSectionTitleLabel).size(540, 40).fill().padLeft(60).left();

    playerSettingsTable.row();

    final Table playerNameTable = new Table();
    playerNameTable.add(playerNameSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    playerNameTable.add(playerNameTextField).size(270, 28).fill().left().spaceLeft(10);
    playerSettingsTable.add(playerNameTable).left();

    playerSettingsTable.row();

    final Table clanTable = new Table();
    clanTable.add(clanTagSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    clanTable.add(clanAcronymCheckBox).size(20, 20).fill().left().spaceLeft(10).spaceRight(8);
    clanTable.add(clanAcronymTextField).size(80, 28).fill().left().spaceLeft(8);
    playerSettingsTable.add(clanTable).left();

    verticalGroup.addActor(playerSettingsTable);

    final Table gameSettingsTable = new Table().top().left();
    gameSettingsTable.row();
    gameSettingsTable.add().height(20);
    gameSettingsTable.row();
    gameSettingsTable.add(gameSettingsSectionTitleLabel).size(540, 40).fill().padLeft(60).left();

    gameSettingsTable.row();

    final Table serverNameTable = new Table();
    serverNameTable.add(serverNameSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    serverNameTable.add(serverNameTextField).size(270, 28).fill().left().spaceLeft(10);
    gameSettingsTable.add(serverNameTable).left();

    gameSettingsTable.row();

    final Table playMapTable = new Table();
    playMapTable.add(playMapSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    playMapTable.add(playMapNameLabel).size(238, 28).fill().left().spaceLeft(10).spaceRight(4);
    playMapTable.add(customizePlayMapButton).size(28, 28).fill().left().spaceLeft(4);
    gameSettingsTable.add(playMapTable).left();

    gameSettingsTable.row();

    final Table humanPlayersTable = new Table();
    humanPlayersTable.add(humanPlayerLimitSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    humanPlayersTable.add(humanPlayerLimitLabel).size(76, 28).fill().left().spaceLeft(10).spaceRight(4);
    humanPlayersTable.add(customizeHumanPlayersButton).size(28, 28).fill().left().spaceLeft(4);
    gameSettingsTable.add(humanPlayersTable).left();

    gameSettingsTable.row();

    final Table aiPlayersTable = new Table();
    aiPlayersTable.add(aiPlayerLimitSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    aiPlayersTable.add(aiPlayerLimitLabel).size(76, 28).fill().left().spaceLeft(10).spaceRight(4);
    aiPlayersTable.add(customizeAiPlayersButton).size(28, 28).fill().left().spaceLeft(4);
    gameSettingsTable.add(aiPlayersTable).left();

    gameSettingsTable.row();

    final Table spectatorsTable = new Table();
    spectatorsTable.add(spectatorLimitSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    spectatorsTable.add(spectatorLimitSelectBox).size(108, 28).fill().left().spaceLeft(10);
    gameSettingsTable.add(spectatorsTable).left();

    gameSettingsTable.row();

    final Table winPercentTable = new Table();
    winPercentTable.add(winPercentSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    winPercentTable.add(winPercentSelectBox).size(108, 28).fill().left().spaceLeft(10);
    gameSettingsTable.add(winPercentTable).left();

    gameSettingsTable.row();

    // @formatter:off
    final Table initialCountryAssignmentTable = new Table();
    initialCountryAssignmentTable.add(initialCountryAssignmentSettingLabel).size(150, 40).fill().padLeft(90)
            .left().spaceRight(10);
    initialCountryAssignmentTable.add(initialCountryAssignmentSelectBox).size(108, 28).fill().left()
            .spaceLeft(10);
    gameSettingsTable.add(initialCountryAssignmentTable).left();
    // @formatter:on

    verticalGroup.addActor(gameSettingsTable);

    addContent(verticalGroup);

    addBackButton(new ClickListener(Input.Buttons.LEFT) {
        @Override
        public void clicked(final InputEvent event, final float x, final float y) {
            contractMenuBar(new Runnable() {
                @Override
                public void run() {
                    toScreen(ScreenId.CLASSIC_GAME_MODE_MENU);
                }
            });
        }
    });

    forwardButton = addForwardButton(FORWARD_BUTTON_TEXT, new ChangeListener() {
        @Override
        public void changed(final ChangeEvent event, final Actor actor) {
            if (currentPlayMap.equals(PlayMapMetadata.NULL)) {
                errorDialog.setMessage(new DefaultMessage("Please select a valid map before continuing."));
                errorDialog.show();
                return;
            }

            final String playerName = playerNameTextField.getText();

            if (!GameSettings.isValidPlayerNameWithoutClanTag(playerName)) {
                errorDialog.setMessage(new DefaultMessage(
                        Strings.format("Invalid player name: \'{}\'\n\nValid player name rules:\n\n{}",
                                playerName, GameSettings.VALID_PLAYER_NAME_DESCRIPTION)));
                errorDialog.show();
                return;
            }

            final String clanAcronym = clanAcronymTextField.getText();

            if (!clanAcronymTextField.isDisabled() && !GameSettings.isValidHumanClanAcronym(clanAcronym)) {
                errorDialog.setMessage(new DefaultMessage(
                        Strings.format("Invalid clan tag: \'{}\'\n\nValid clan tag rules:\n\n{}", clanAcronym,
                                GameSettings.VALID_CLAN_ACRONYM_DESCRIPTION)));
                errorDialog.show();
                return;
            }

            final String playerNameWithOptionalClanTag = GameSettings
                    .getHumanPlayerNameWithOptionalClanTag(playerName, clanAcronym);
            final int humanPlayerLimit = getHumanPlayerLimit();
            final int aiPlayerLimit = getAiPlayerLimit();
            final int spectatorLimit = getSpectatorLimit();
            final int winPercent = winPercentSelectBox.getSelected();
            final InitialCountryAssignment initialCountryAssignment = InitialCountryAssignment
                    .valueOf(Strings.toCase(initialCountryAssignmentSelectBox.getSelected(), LetterCase.UPPER));
            final PersonLimits personLimits = PersonLimits.builder().humanPlayers(humanPlayerLimit)
                    .aiPlayers(aiPlayerLimit).spectators(spectatorLimit).build();
            final GameRules gameRules = GameRulesFactory.create(GameMode.CLASSIC, personLimits, winPercent,
                    totalCountryCount, initialCountryAssignment);
            final GameConfiguration gameConfig = new DefaultGameConfiguration(GameMode.CLASSIC, currentPlayMap,
                    gameRules);
            final String serverName = serverNameTextField.getText();

            if (!NetworkSettings.isValidServerName(serverName)) {
                errorDialog.setMessage(new DefaultMessage(
                        Strings.format("Invalid server name: \'{}\'\n\nValid server name rules:\n\n{}",
                                serverName, NetworkSettings.VALID_SERVER_NAME_DESCRIPTION)));
                errorDialog.show();
                return;
            }

            toScreen(ScreenId.MENU_TO_PLAY_LOADING);

            // The menu-to-play loading screen is now active & can therefore receive events.

            publishAsync(new CreateGameEvent(serverName, gameConfig, playerNameWithOptionalClanTag));
        }
    });
}

From source file:com.forerunnergames.peril.client.ui.screens.menus.modes.classic.joingame.ClassicGameModeJoinGameMenuScreen.java

License:Open Source License

public ClassicGameModeJoinGameMenuScreen(final MenuScreenWidgetFactory widgetFactory,
        final ScreenChanger screenChanger, final ScreenSize screenSize, final MouseInput mouseInput,
        final Batch batch, final MBassador<Event> eventBus) {
    super(widgetFactory, screenChanger, screenSize, mouseInput, batch, eventBus);

    Arguments.checkIsNotNull(widgetFactory, "widgetFactory");

    this.widgetFactory = widgetFactory;

    errorDialog = createErrorDialog();/*  w w  w .ja  va  2s .  c o m*/

    addTitle("JOIN GAME", Align.bottomLeft, 40);
    addSubTitle("CLASSIC MODE");

    playerNameTextField = widgetFactory.createPlayerNameTextField();
    clanAcronymTextField = widgetFactory.createClanAcronymTextField();
    serverAddressTextField = widgetFactory.createServerAddressTextField();

    clanAcronymCheckBox = widgetFactory.createClanAcronymCheckBox(new ChangeListener() {
        @Override
        public void changed(final ChangeEvent event, final Actor actor) {
            clanAcronymTextField.setText(clanAcronymCheckBox.isChecked() ? clanAcronymTextField.getText() : "");
            clanAcronymTextField.setDisabled(!clanAcronymCheckBox.isChecked());
        }
    });

    clanAcronymCheckBox.setChecked(!clanAcronymTextField.getText().isEmpty());
    clanAcronymTextField.setDisabled(!clanAcronymCheckBox.isChecked());

    playerSettingsSectionTitleLabel = widgetFactory.createPlayerSettingsSectionTitleLabel();
    playerNameSettingLabel = widgetFactory.createPlayerNameSettingLabel();
    clanTagSettingLabel = widgetFactory.createClanTagSettingLabel();
    gameSettingsSectionTitleLabel = widgetFactory.createGameSettingsSectionTitleLabel();
    serverAddressSettingLabel = widgetFactory.createMenuSettingLabel("Server Address");

    final VerticalGroup verticalGroup = new VerticalGroup();
    verticalGroup.align(Align.topLeft);

    // @formatter:off
    final Table playerSettingsTable = new Table().top().left();
    playerSettingsTable.add().height(23).colspan(5);
    playerSettingsTable.row();
    playerSettingsTable.add(playerSettingsSectionTitleLabel).size(538, 42).fill().padLeft(60).padRight(60)
            .left().colspan(5);
    playerSettingsTable.row();
    playerSettingsTable.add(playerNameSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    playerSettingsTable.add(playerNameTextField).size(204, 28).fill().left().colspan(3).spaceLeft(10);
    playerSettingsTable.add().expandX().fill();
    playerSettingsTable.row();
    playerSettingsTable.add(clanTagSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    playerSettingsTable.add(clanAcronymCheckBox).size(18, 18).fill().left().spaceLeft(10).spaceRight(10);
    playerSettingsTable.add(clanAcronymTextField).size(74, 28).fill().left().spaceLeft(10);
    playerSettingsTable.add().width(102).fill();
    playerSettingsTable.add().expandX().fill();
    verticalGroup.addActor(playerSettingsTable);
    // @formatter:on

    // @formatter:off
    final Table gameSettingsTable = new Table().top().left();
    gameSettingsTable.row();
    gameSettingsTable.add().height(18).colspan(3);
    gameSettingsTable.row();
    gameSettingsTable.add(gameSettingsSectionTitleLabel).size(538, 42).fill().padLeft(60).padRight(60).left()
            .colspan(3);
    gameSettingsTable.row();
    gameSettingsTable.add(serverAddressSettingLabel).size(150, 40).fill().padLeft(90).left().spaceRight(10);
    gameSettingsTable.add(serverAddressTextField).size(204, 28).fill().left().spaceLeft(10);
    gameSettingsTable.add().expandX().fill();
    verticalGroup.addActor(gameSettingsTable);
    // @formatter:on

    addContent(verticalGroup);

    addBackButton(new ClickListener(Input.Buttons.LEFT) {
        @Override
        public void clicked(final InputEvent event, final float x, final float y) {
            contractMenuBar(new Runnable() {
                @Override
                public void run() {
                    toScreen(ScreenId.CLASSIC_GAME_MODE_MENU);
                }
            });
        }
    });

    forwardButton = addForwardButton("JOIN GAME", new ChangeListener() {
        @Override
        public void changed(final ChangeEvent event, final Actor actor) {
            final String playerName = playerNameTextField.getText();

            if (!GameSettings.isValidPlayerNameWithoutClanTag(playerName)) {
                errorDialog.setMessage(new DefaultMessage(
                        Strings.format("Invalid player name: \'{}\'\n\nValid player name rules:\n\n{}",
                                playerName, GameSettings.VALID_PLAYER_NAME_DESCRIPTION)));
                errorDialog.show();
                return;
            }

            final String clanAcronym = clanAcronymTextField.getText();

            if (!clanAcronymTextField.isDisabled() && !GameSettings.isValidHumanClanAcronym(clanAcronym)) {
                errorDialog.setMessage(new DefaultMessage(
                        Strings.format("Invalid clan tag: \'{}\'\n\nValid clan tag rules:\n\n{}", clanAcronym,
                                GameSettings.VALID_CLAN_ACRONYM_DESCRIPTION)));
                errorDialog.show();
                return;
            }

            final String playerNameWithOptionalClanTag = GameSettings
                    .getHumanPlayerNameWithOptionalClanTag(playerName, clanAcronym);
            final String serverAddress = serverAddressTextField.getText();

            if (!NetworkSettings.isValidServerAddress(serverAddress)) {
                errorDialog.setMessage(new DefaultMessage(
                        Strings.format("Invalid server address: \'{}\'\n\nValid server address rules:\n\n{}",
                                serverAddress, NetworkSettings.VALID_SERVER_ADDRESS_DESCRIPTION)));
                errorDialog.show();
                return;
            }

            toScreen(ScreenId.MENU_TO_PLAY_LOADING);

            // The menu-to-play loading screen is now active & can therefore receive events.

            publishAsync(new JoinGameEvent(playerNameWithOptionalClanTag, serverAddress));
        }
    });
}

From source file:de.bitbrain.craft.screens.IngameScreen.java

License:Open Source License

private Actor generateItemView() {
    VerticalGroup itemView = new VerticalGroup();
    itemView.align(Align.left).fill().pad(Sizes.borderPadding());
    itemList = new ItemList(itemView);
    return generateScrollPane(itemView);
}

From source file:de.bitbrain.craft.ui.widgets.ElementWidget.java

License:Open Source License

private Actor generateRight(ElementData data) {
    VerticalGroup layout = new VerticalGroup();
    layout.align(Align.left);
    layout.padLeft(15f);//from  ww  w .ja  v  a  2s. com
    layout.padTop(15f);
    name.setColor(data.getRarity().getColor());
    name.setFontScale(0.85f);

    String textDescription = "Click to craft";
    Color colorDescription = Assets.CLR_INACTIVE;
    if (!craftable) {
        textDescription = "Can not craft";
        colorDescription = Color.RED;
    }
    Label description = new Label(textDescription, Styles.LBL_TEXT);
    description.setFontScale(0.7f);
    description.setColor(colorDescription);
    description.getColor().a = 0.5f;
    layout.addActor(name);
    VerticalGroup descContainer = new VerticalGroup();
    descContainer.addActor(description);
    descContainer.padTop(15f);
    layout.addActor(descContainer);
    return layout;
}

From source file:de.bitbrain.craft.ui.widgets.ItemWidget.java

License:Open Source License

private Actor generateRight(Item item) {
    VerticalGroup layout = new VerticalGroup();
    layout.align(Align.left);
    layout.padLeft(15f);//from  w  w w  .  j  a  va 2 s.  co m
    name.setColor(item.getRarity().getColor());
    name.setFontScale(0.90f);
    layout.addActor(name);
    Table descContainer = new Table();
    level = new StarLevelWidget(item.getLevel(), 7);
    availability = new AvailabilityIcon(item);
    descContainer.add(level);
    descContainer.right().add(availability).padLeft(70f).padTop(27f);
    layout.addActor(descContainer);
    layout.setTouchable(Touchable.disabled);
    return layout;
}

From source file:gaia.cu9.ari.gaiaorbit.interfce.AboutWindow.java

License:Open Source License

public AboutWindow(Stage stg, Skin sk) {
    super(txt("gui.help.help") + " - " + GlobalConf.APPLICATION_NAME + " v" + GlobalConf.version.version, sk);

    this.stage = stg;
    this.skin = sk;
    this.me = this;
    this.linkStyle = skin.get("link", LabelStyle.class);

    float tawidth = 440 * GlobalConf.SCALE_FACTOR;
    float taheight = 250 * GlobalConf.SCALE_FACTOR;
    float taheight_s = 60 * GlobalConf.SCALE_FACTOR;
    float tabwidth = 60 * GlobalConf.SCALE_FACTOR;
    float pad = 5 * GlobalConf.SCALE_FACTOR;

    scrolls = new ArrayList<OwnScrollPane>(5);
    textareas = new ArrayList<Actor>();

    /** TABLE and SCROLL **/
    table = new Table(skin);

    // Create the tab buttons
    HorizontalGroup group = new HorizontalGroup();
    group.align(Align.left);//from ww w. ja v  a  2  s  .  c o  m

    final Button tab1 = new OwnTextButton(txt("gui.help.help"), skin, "toggle-big");
    tab1.pad(pad);
    tab1.setWidth(tabwidth);
    final Button tab2 = new OwnTextButton(txt("gui.help.about"), skin, "toggle-big");
    tab2.pad(pad);
    tab2.setWidth(tabwidth);
    final Button tab3 = new OwnTextButton(txt("gui.help.system"), skin, "toggle-big");
    tab3.pad(pad);
    tab3.setWidth(tabwidth);

    group.addActor(tab1);
    group.addActor(tab2);
    group.addActor(tab3);
    table.add(group).align(Align.left).padLeft(pad);
    table.row();

    // Create the tab content. Just using images here for simplicity.
    Stack content = new Stack();

    /** CONTENT 1 - HELP **/
    final Table content1 = new Table(skin);
    content1.align(Align.top);
    Image gaiasky = new Image(getSpriteDrawable(Gdx.files.internal("img/gaiaskylogo.png")));

    // User manual
    Label usermantitle = new OwnLabel(txt("gui.help.usermanual"), skin, "ui-12");
    Label usermantxt = new OwnLabel(txt("gui.help.help1"), skin, "ui-11");
    Link usermanlink = new Link(GlobalConf.WEBPAGE, linkStyle, GlobalConf.WEBPAGE);

    // Wiki
    Label wikititle = new OwnLabel("Docs", skin, "ui-12");
    Label wikitxt = new OwnLabel(txt("gui.help.help2"), skin, "ui-11");
    Link wikilink = new Link(GlobalConf.DOCUMENTATION, linkStyle, GlobalConf.DOCUMENTATION);

    // Readme
    Label readmetitle = new OwnLabel(txt("gui.help.readme"), skin, "ui-12");
    FileHandle readmefile = Gdx.files.internal("README.md");
    if (!readmefile.exists()) {
        readmefile = Gdx.files.internal("../README.md");
    }
    String readmestr = readmefile.readString();
    int lines = GlobalResources.countOccurrences(readmestr, '\n');
    TextArea readme = new TextArea(readmestr, skin);
    readme.setDisabled(true);
    readme.setPrefRows(lines);
    textareas.add(readme);

    OwnScrollPane readmescroll = new OwnScrollPane(readme, skin, "default-nobg");
    readmescroll.setWidth(tawidth);
    readmescroll.setHeight(taheight);
    readmescroll.setForceScroll(false, true);
    readmescroll.setSmoothScrolling(true);
    readmescroll.setFadeScrollBars(false);

    scrolls.add(readmescroll);

    // Add all to content
    content1.add(gaiasky).colspan(2);
    content1.row();
    content1.add(usermantitle).align(Align.left).padRight(pad * 2);
    content1.add(usermantxt).align(Align.left);
    content1.row();
    content1.add(new OwnLabel("", skin, "ui-11"));
    content1.add(usermanlink).align(Align.left);
    content1.row();
    content1.add(wikititle).align(Align.left).padRight(pad * 2);
    content1.add(wikitxt).align(Align.left);
    content1.row();
    content1.add(new OwnLabel("", skin, "ui-11"));
    content1.add(wikilink).align(Align.left);
    content1.row();
    content1.add(readmetitle).colspan(2).align(Align.left);
    content1.row();
    content1.add(readmescroll).colspan(2).expand().pad(pad * 2, 0, pad * 2, 0).align(Align.center);

    /** CONTENT 2 - ABOUT **/
    final Table content2 = new Table(skin);
    content2.align(Align.top);

    // Intro
    TextArea intro = new OwnTextArea(txt("gui.help.gscredits", GlobalConf.version.version),
            skin.get("msg-11", TextFieldStyle.class));
    intro.setDisabled(true);
    intro.setPrefRows(3);
    intro.setWidth(tawidth);
    textareas.add(intro);

    // Home page
    Label homepagetitle = new OwnLabel(txt("gui.help.homepage"), skin, "ui-12");
    Link homepage = new Link(GlobalConf.WEBPAGE, linkStyle, GlobalConf.WEBPAGE);

    // Author
    Label authortitle = new OwnLabel(txt("gui.help.author"), skin, "ui-12");

    VerticalGroup author = new VerticalGroup();
    author.align(Align.left);
    Label authorname = new OwnLabel("Toni Sagrist Sells", skin, "ui-11");
    Link authormail = new Link("tsagrista@ari.uni-heidelberg.de", linkStyle,
            "mailto:tsagrista@ari.uni-heidelberg.de");
    Link authorpage = new Link("www.tonisagrista.com", linkStyle, "http://tonisagrista.com");
    author.addActor(authorname);
    author.addActor(authormail);
    author.addActor(authorpage);

    // Contributor
    Label contribtitle = new OwnLabel(txt("gui.help.contributors"), skin, "ui-12");

    VerticalGroup contrib = new VerticalGroup();
    contrib.align(Align.left);
    Label contribname = new OwnLabel("Apl. Prof. Dr. Stefan Jordan", skin, "ui-11");
    Link contribmail = new Link("jordan@ari.uni-heidelberg.de", linkStyle,
            "mailto:jordan@ari.uni-heidelberg.de");
    contrib.addActor(contribname);
    contrib.addActor(contribmail);

    // License
    HorizontalGroup licenseh = new HorizontalGroup();
    licenseh.space(pad * 2);
    Image license = new Image(getSpriteDrawable(Gdx.files.internal("img/license.png")));

    VerticalGroup licensev = new VerticalGroup();
    TextArea licensetext = new OwnTextArea(txt("gui.help.license"), skin.get("msg-11", TextFieldStyle.class));
    licensetext.setDisabled(true);
    licensetext.setPrefRows(3);
    licensetext.setWidth(tawidth / 2f);
    Link licenselink = new Link("https://www.gnu.org/licenses/gpl.html", linkStyle,
            "https://www.gnu.org/licenses/gpl.html");

    licensev.addActor(licensetext);
    licensev.addActor(licenselink);

    licenseh.addActor(license);
    licenseh.addActor(licensev);

    // Thanks

    HorizontalGroup thanks = new HorizontalGroup();
    thanks.space(pad * 2);
    Container thanksc = new Container(thanks);
    thanksc.setBackground(skin.getDrawable("bg-clear"));

    Image zah = new Image(getSpriteDrawable(Gdx.files.internal("img/zah.png")));
    Image dlr = new Image(getSpriteDrawable(Gdx.files.internal("img/dlr.png")));
    Image bwt = new Image(getSpriteDrawable(Gdx.files.internal("img/bwt.png")));
    Image dpac = new Image(getSpriteDrawable(Gdx.files.internal("img/dpac.png")));

    thanks.addActor(zah);
    thanks.addActor(dlr);
    thanks.addActor(bwt);
    thanks.addActor(dpac);

    content2.add(intro).colspan(2).align(Align.left).padTop(pad * 2);
    content2.row();
    content2.add(homepagetitle).align(Align.topLeft).padRight(pad * 2);
    content2.add(homepage).align(Align.left);
    content2.row();
    content2.add(authortitle).align(Align.topLeft).padRight(pad * 2).padTop(pad);
    content2.add(author).align(Align.left).padTop(pad);
    content2.row();
    content2.add(contribtitle).align(Align.topLeft).padRight(pad * 2).padTop(pad);
    content2.add(contrib).align(Align.left).padTop(pad);
    content2.row();
    content2.add(licenseh).colspan(2).align(Align.center).padTop(pad * 4);
    content2.row();
    content2.add(thanksc).colspan(2).align(Align.center).padTop(pad * 8);

    /** CONTENT 3 - SYSTEM **/
    final Table content3 = new Table(skin);
    content3.align(Align.top);

    // Build info
    Label buildinfo = new OwnLabel(txt("gui.help.buildinfo"), skin, "help-title");

    Label versiontitle = new OwnLabel(txt("gui.help.version", GlobalConf.APPLICATION_NAME), skin, "ui-12");
    Label version = new OwnLabel(GlobalConf.version.version, skin, "ui-11");

    Label revisiontitle = new OwnLabel(txt("gui.help.buildnumber"), skin, "ui-12");
    Label revision = new OwnLabel(GlobalConf.version.build, skin, "ui-11");

    Label timetitle = new OwnLabel(txt("gui.help.buildtime"), skin, "ui-12");
    Label time = new OwnLabel(GlobalConf.version.buildtime, skin, "ui-11");

    Label systemtitle = new OwnLabel(txt("gui.help.buildsys"), skin, "ui-12");
    TextArea system = new OwnTextArea(GlobalConf.version.system, skin.get("msg-11", TextFieldStyle.class));
    system.setDisabled(true);
    system.setPrefRows(3);
    system.setWidth(tawidth * 2f / 3f);
    textareas.add(system);

    Label buildertitle = new OwnLabel(txt("gui.help.builder"), skin, "ui-12");
    Label builder = new OwnLabel(GlobalConf.version.builder, skin, "ui-11");

    // Java info
    Label javainfo = new OwnLabel(txt("gui.help.javainfo"), skin, "help-title");

    Label javaversiontitle = new OwnLabel(txt("gui.help.javaversion"), skin, "ui-12");
    Label javaversion = new OwnLabel(System.getProperty("java.version"), skin, "ui-11");

    Label javaruntimetitle = new OwnLabel(txt("gui.help.javaname"), skin, "ui-12");
    Label javaruntime = new OwnLabel(System.getProperty("java.runtime.name"), skin, "ui-11");

    Label javavmnametitle = new OwnLabel(txt("gui.help.javavmname"), skin, "ui-12");
    Label javavmname = new OwnLabel(System.getProperty("java.vm.name"), skin, "ui-11");

    Label javavmversiontitle = new OwnLabel(txt("gui.help.javavmversion"), skin, "ui-12");
    Label javavmversion = new OwnLabel(System.getProperty("java.vm.version"), skin, "ui-11");

    Label javavmvendortitle = new OwnLabel(txt("gui.help.javavmvendor"), skin, "ui-12");
    Label javavmvendor = new OwnLabel(System.getProperty("java.vm.vendor"), skin, "ui-11");

    TextButton memoryinfobutton = new OwnTextButton(txt("gui.help.meminfo"), skin, "default");
    memoryinfobutton.setName("memoryinfo");
    memoryinfobutton.setSize(150 * GlobalConf.SCALE_FACTOR, 20 * GlobalConf.SCALE_FACTOR);
    memoryinfobutton.addListener(new EventListener() {
        @Override
        public boolean handle(Event event) {
            if (event instanceof ChangeEvent) {
                EventManager.instance.post(Events.DISPLAY_MEM_INFO_WINDOW, stage, skin);
                return true;
            }

            return false;
        }

    });

    // OpenGL info
    Label glinfo = new OwnLabel(txt("gui.help.openglinfo"), skin, "help-title");

    Label glversiontitle = new OwnLabel(txt("gui.help.openglversion"), skin, "ui-12");
    Label glversion = new OwnLabel(Gdx.gl.glGetString(GL20.GL_VERSION), skin, "ui-11");

    Label glslversiontitle = new OwnLabel(txt("gui.help.glslversion"), skin, "ui-12");
    Label glslversion = new OwnLabel(Gdx.gl.glGetString(GL20.GL_SHADING_LANGUAGE_VERSION), skin, "ui-11");

    Label glextensionstitle = new OwnLabel(txt("gui.help.glextensions"), skin, "ui-12");
    String glextensionsstr = Gdx.gl.glGetString(GL20.GL_EXTENSIONS).replace(' ', '\r');
    lines = GlobalResources.countOccurrences(glextensionsstr, '\r') + 1;
    IntBuffer buf = BufferUtils.newIntBuffer(16);
    Gdx.gl.glGetIntegerv(Gdx.graphics.getGL20().GL_MAX_TEXTURE_SIZE, buf);
    int maxSize = buf.get(0);
    TextArea glextensions = new TextArea("Max texture size: " + maxSize + "\r" + glextensionsstr, skin);
    glextensions.setDisabled(true);
    glextensions.setPrefRows(lines);

    textareas.add(glextensions);

    OwnScrollPane glextensionsscroll = new OwnScrollPane(glextensions, skin, "default-nobg");
    glextensionsscroll.setWidth(tawidth / 1.7f);
    glextensionsscroll.setHeight(taheight_s);
    glextensionsscroll.setForceScroll(false, true);
    glextensionsscroll.setSmoothScrolling(true);
    glextensionsscroll.setFadeScrollBars(false);
    scrolls.add(glextensionsscroll);

    content3.add(buildinfo).colspan(2).align(Align.left).padTop(pad * 3);
    content3.row();
    content3.add(versiontitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(version).align(Align.left);
    content3.row();
    content3.add(revisiontitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(revision).align(Align.left);
    content3.row();
    content3.add(timetitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(time).align(Align.left);
    content3.row();
    content3.add(buildertitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(builder).align(Align.left).padBottom(pad * 3);
    content3.row();
    content3.add(systemtitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(system).align(Align.left);
    content3.row();

    content3.add(javainfo).colspan(2).align(Align.left).padTop(pad * 2);
    content3.row();
    content3.add(javaversiontitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(javaversion).align(Align.left);
    content3.row();
    content3.add(javaruntimetitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(javaruntime).align(Align.left);
    content3.row();
    content3.add(javavmnametitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(javavmname).align(Align.left);
    content3.row();
    content3.add(javavmversiontitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(javavmversion).align(Align.left);
    content3.row();
    content3.add(javavmvendortitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(javavmvendor).align(Align.left).padBottom(pad * 2);
    content3.row();
    content3.add(memoryinfobutton).colspan(2).align(Align.left).padBottom(pad * 3);
    content3.row();
    content3.add(glinfo).colspan(2).align(Align.left).padTop(pad * 2);
    content3.row();
    content3.add(glversiontitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(glversion).align(Align.left);
    content3.row();
    content3.add(glslversiontitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(glslversion).align(Align.left);
    content3.row();
    content3.add(glextensionstitle).align(Align.topLeft).padRight(pad * 2);
    content3.add(glextensionsscroll).align(Align.left);

    /** ADD ALL CONTENT **/
    content.addActor(content1);
    content.addActor(content2);
    content.addActor(content3);

    table.add(content).expand().fill();

    // Listen to changes in the tab button checked states
    // Set visibility of the tab content to match the checked state
    ChangeListener tab_listener = new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            content1.setVisible(tab1.isChecked());
            content2.setVisible(tab2.isChecked());
            content3.setVisible(tab3.isChecked());
        }
    };
    tab1.addListener(tab_listener);
    tab2.addListener(tab_listener);
    tab3.addListener(tab_listener);

    // Let only one tab button be checked at a time
    ButtonGroup tabs = new ButtonGroup();
    tabs.setMinCheckCount(1);
    tabs.setMaxCheckCount(1);
    tabs.add(tab1);
    tabs.add(tab2);
    tabs.add(tab3);

    /** BUTTONS **/
    HorizontalGroup buttonGroup = new HorizontalGroup();
    TextButton close = new OwnTextButton(txt("gui.close"), skin, "default");
    close.setName("close");
    close.setSize(70 * GlobalConf.SCALE_FACTOR, 20 * GlobalConf.SCALE_FACTOR);
    close.addListener(new EventListener() {
        @Override
        public boolean handle(Event event) {
            if (event instanceof ChangeEvent) {
                me.hide();
                return true;
            }

            return false;
        }

    });
    buttonGroup.addActor(close);

    add(table).pad(pad);
    row();
    add(buttonGroup).pad(pad).bottom().right();
    getTitleTable().align(Align.left);

    pack();

    this.setPosition(Math.round(stage.getWidth() / 2f - this.getWidth() / 2f),
            Math.round(stage.getHeight() / 2f - this.getHeight() / 2f));

    /** CAPTURE SCROLL FOCUS **/
    stage.addListener(new EventListener() {

        @Override
        public boolean handle(Event event) {
            if (event instanceof InputEvent) {
                InputEvent ie = (InputEvent) event;

                if (ie.getType() == Type.mouseMoved) {
                    for (OwnScrollPane scroll : scrolls) {
                        if (ie.getTarget().isDescendantOf(scroll)) {
                            stage.setScrollFocus(scroll);
                        }
                    }
                    return true;
                }
            }
            return false;
        }
    });

}