From e78caa64f83f209ea3e30f890ae3733e136032d6 Mon Sep 17 00:00:00 2001
From: Anton Danilov <anton.danilov@nic.cz>
Date: Thu, 21 Jan 2016 18:25:00 +0100
Subject: [PATCH] #123 Refactored classes, added change language button into
 intro screen (need to fix vertical alignment, when only few players are
 shown)

---
 .../cz/nic/tablexia/menu/AbstractMenu.java    | 43 ++++++++++++++++++-
 .../cz/nic/tablexia/menu/main/MainMenu.java   | 23 ++--------
 2 files changed, 45 insertions(+), 21 deletions(-)

diff --git a/core/src/cz/nic/tablexia/menu/AbstractMenu.java b/core/src/cz/nic/tablexia/menu/AbstractMenu.java
index 8adf48307..948027637 100644
--- a/core/src/cz/nic/tablexia/menu/AbstractMenu.java
+++ b/core/src/cz/nic/tablexia/menu/AbstractMenu.java
@@ -12,6 +12,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Button;
 import com.badlogic.gdx.scenes.scene2d.ui.Container;
 import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.ui.Label;
 import com.badlogic.gdx.scenes.scene2d.ui.Stack;
 import com.badlogic.gdx.scenes.scene2d.ui.Table;
 import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
@@ -27,7 +28,9 @@ import cz.nic.tablexia.TablexiaSettings;
 import cz.nic.tablexia.bus.ApplicationBus;
 import cz.nic.tablexia.loader.application.ApplicationAtlasManager;
 import cz.nic.tablexia.loader.application.ApplicationExternalSoundManager;
+import cz.nic.tablexia.loader.application.ApplicationFontManager;
 import cz.nic.tablexia.loader.application.ApplicationInternalSoundManager;
+import cz.nic.tablexia.menu.main.locale.LocaleSelectBox;
 import cz.nic.tablexia.util.Log;
 import cz.nic.tablexia.util.ui.TablexiaNoBlendingImage;
 
@@ -121,6 +124,14 @@ public abstract class AbstractMenu extends Stack implements Disposable {
     private static final float                  REACTION_BORDER_WIDTH_RATIO         = 1f / 3;
     private static final int                    MAX_OPEN_CLOSE_BUTTON_WIDTH         = 65;
 
+    private static final float                              MAINMENU_PADDING                = 10f;
+    private static final int                                SELECTBOX_LOCALE_HEIGHT         = 40;
+    private static final float                              SELECTBOX_LOCALE_WIDTH_RATIO    = 2f/5;
+    private static final ApplicationFontManager.FontType    APP_NAME_TEXT_FONT              = ApplicationFontManager.FontType.ROBOTO_REGULAR_10;
+    private static final int                                APP_NAME_TEXT_ALIGN             = Align.center;
+    private static final float                              APP_NAME_TEXT_PADDING_LEFT      = 10f;
+    private static final float                              APP_NAME_WIDTH_RATIO            = 3f/5;
+
     private final Container<Group>  layoutContainer;
     private float                   menuHidePositionX;
     private float                   menuClosePositionX;
@@ -155,9 +166,26 @@ public abstract class AbstractMenu extends Stack implements Disposable {
         layoutContainer.setDebug(TablexiaSettings.getInstance().isShowBoundingBoxes(), false);
         layoutContainer.align(LAYOUT_CONTAINER_ALIGN);
 
+        Table localeTable = getLocaleMenu();
+        Container<Table> localMenuContainer = new Container<Table>();
+
+        Table completeMenuTable = new Table();
+        completeMenuTable.setFillParent(true);
+        Container<Table> completeMenuContainer = new Container<Table>();
+
+        localeTable.pad(MAINMENU_PADDING);
+        localeTable.setFillParent(true);
+
+        localMenuContainer.setActor(localeTable);
+
+        completeMenuTable.add(layoutContainer);
+        completeMenuTable.row();
+        completeMenuTable.add(localMenuContainer).fill().bottom();
+        completeMenuContainer.setActor(completeMenuTable);
+
         backgroundStack = new Stack();
         backgroundStack.add(background);
-        backgroundStack.add(layoutContainer);
+        backgroundStack.add(completeMenuContainer);
         if (getMenuControlType().isDraggable()) {
             backgroundStack.addListener(dragListener);
         }
@@ -253,6 +281,19 @@ public abstract class AbstractMenu extends Stack implements Disposable {
         }
     }
 
+    private Table getLocaleMenu() {
+        Table footerTable = new Table();
+        float footerContentWidth = getBackground().getDrawable().getMinWidth() - (2 * MAINMENU_PADDING) - APP_NAME_TEXT_PADDING_LEFT;
+        footerTable.add(new LocaleSelectBox(SELECTBOX_LOCALE_HEIGHT)).width(footerContentWidth * SELECTBOX_LOCALE_WIDTH_RATIO).center();
+        Label appName = new Label(TablexiaSettings.getInstance().getAppName() + System.lineSeparator() + TablexiaSettings.getInstance().getVersionName(),
+                new Label.LabelStyle(ApplicationFontManager.getInstance().getFont(APP_NAME_TEXT_FONT), Color.BLACK));
+        appName.setAlignment(APP_NAME_TEXT_ALIGN);
+        appName.setWrap(true);
+        footerTable.add(appName).width(footerContentWidth * APP_NAME_WIDTH_RATIO).padLeft(APP_NAME_TEXT_PADDING_LEFT);
+
+        return footerTable;
+    }
+
     @Override
     protected void sizeChanged() {
         if (background != null && border != null) {
diff --git a/core/src/cz/nic/tablexia/menu/main/MainMenu.java b/core/src/cz/nic/tablexia/menu/main/MainMenu.java
index 4bb3153ab..c03d833a0 100644
--- a/core/src/cz/nic/tablexia/menu/main/MainMenu.java
+++ b/core/src/cz/nic/tablexia/menu/main/MainMenu.java
@@ -1,11 +1,9 @@
 package cz.nic.tablexia.menu.main;
 
-import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.g2d.BitmapFont;
 import com.badlogic.gdx.scenes.scene2d.Group;
 import com.badlogic.gdx.scenes.scene2d.InputEvent;
 import com.badlogic.gdx.scenes.scene2d.ui.Container;
-import com.badlogic.gdx.scenes.scene2d.ui.Label;
 import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
 import com.badlogic.gdx.scenes.scene2d.ui.Table;
 import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup;
@@ -17,14 +15,12 @@ import net.engio.mbassy.listener.Handler;
 import java.util.HashMap;
 import java.util.Map;
 
-import cz.nic.tablexia.TablexiaSettings;
 import cz.nic.tablexia.bus.ApplicationBus;
 import cz.nic.tablexia.bus.event.SubMenuControlEvent;
 import cz.nic.tablexia.loader.application.ApplicationFontManager;
 import cz.nic.tablexia.loader.application.ApplicationInternalSoundManager;
 import cz.nic.tablexia.menu.AbstractMenu;
 import cz.nic.tablexia.menu.IMenuItem;
-import cz.nic.tablexia.menu.main.locale.LocaleSelectBox;
 import cz.nic.tablexia.menu.main.user.UserSelectBox;
 
 /**
@@ -41,12 +37,7 @@ public class MainMenu extends AbstractMenu {
     private static final float                              SCROLLBAR_PADDING_BOTTOM        = 10f;
     private static final float                              SCROLLBAR_PADDING_TOP           = 10f;
     private static final int                                SELECTBOX_USER_HEIGHT           = 70;
-    private static final int                                SELECTBOX_LOCALE_HEIGHT         = 40;
-    private static final float                              SELECTBOX_LOCALE_WIDTH_RATIO    = 2f/5;
-    private static final ApplicationFontManager.FontType    APP_NAME_TEXT_FONT              = ApplicationFontManager.FontType.ROBOTO_REGULAR_10;
-    private static final int                                APP_NAME_TEXT_ALIGN             = Align.left;
     private static final float                              APP_NAME_TEXT_PADDING_LEFT      = 10f;
-    private static final float                              APP_NAME_WIDTH_RATIO            = 3f/5;
 
     private Map<IMenuItem, Group>   subMenus = new HashMap<IMenuItem, Group>();
     private VerticalGroup           menuItemsLayout;
@@ -88,17 +79,6 @@ public class MainMenu extends AbstractMenu {
         layoutTable.add(scrollPane).fill().padBottom(SCROLLBAR_PADDING_BOTTOM).padTop(SCROLLBAR_PADDING_TOP).expandY();
         layoutTable.row();
 
-        // Locale SelectBox and App name
-        Table footerTable = new Table();
-        float footerContentWidth = getBackground().getDrawable().getMinWidth() - (2 * MAINMENU_PADDING) - APP_NAME_TEXT_PADDING_LEFT;
-        footerTable.add(new LocaleSelectBox(SELECTBOX_LOCALE_HEIGHT)).width(footerContentWidth * SELECTBOX_LOCALE_WIDTH_RATIO);
-        Label appName = new Label(TablexiaSettings.getInstance().getAppName() + System.lineSeparator() + TablexiaSettings.getInstance().getVersionName(),
-                                  new Label.LabelStyle(ApplicationFontManager.getInstance().getFont(APP_NAME_TEXT_FONT), Color.BLACK));
-        appName.setAlignment(APP_NAME_TEXT_ALIGN);
-        appName.setWrap(true);
-        footerTable.add(appName).width(footerContentWidth * APP_NAME_WIDTH_RATIO).padLeft(APP_NAME_TEXT_PADDING_LEFT);
-        layoutTable.add(footerTable).fillX();
-
 
         for (final IMenuItem menuItem : MainMenuDefinition.getItemsForMenu()) {
             Group menuItemContainer = getGroupForMenuItem(menuItem, getWidth());
@@ -129,7 +109,10 @@ public class MainMenu extends AbstractMenu {
             }
         }
 
+        float menuWidth = getBackground().getDrawable().getMinWidth() - (2 * MAINMENU_PADDING) - APP_NAME_TEXT_PADDING_LEFT;
+
         layoutContainer.align(Align.bottom);
+        layoutTable.getCells().get(0).width(menuWidth);
         layoutContainer.setActor(layoutTable);
     }
 
-- 
GitLab