From e6405d39c26e19103853be5519de1708fc23603d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Latner?= <matyas.latner@nic.cz>
Date: Wed, 4 Feb 2015 17:52:03 +0100
Subject: [PATCH] #7 Submenus in main menu

---
 .../application/text/application.properties   |  2 ++
 core/src/cz/nic/tablexia/Tablexia.java        |  1 +
 .../cz/nic/tablexia/game/GameDefinition.java  | 36 +++++++++++++++++++
 .../clothing/bottom/MPantsAttribute.java      |  4 +--
 .../robbery/loader/RobberyTextureManager.java |  4 +--
 core/src/cz/nic/tablexia/menu/IMenuItem.java  |  8 +++++
 core/src/cz/nic/tablexia/menu/MainMenu.java   | 32 +++++++++++------
 .../nic/tablexia/menu/MainMenuDefinition.java | 30 ++++++++++------
 8 files changed, 91 insertions(+), 26 deletions(-)
 create mode 100644 core/src/cz/nic/tablexia/game/GameDefinition.java
 create mode 100644 core/src/cz/nic/tablexia/menu/IMenuItem.java

diff --git a/android/assets/application/text/application.properties b/android/assets/application/text/application.properties
index 0da43559c..c65c60307 100644
--- a/android/assets/application/text/application.properties
+++ b/android/assets/application/text/application.properties
@@ -4,3 +4,5 @@ mainmenu_statistics=Statistiky
 mainmenu_encyclopedia=Encyklopedie
 mainmenu_about=O aplikaci
 mainmenu_logout=Odhlásit
+
+game_robbery_title=LupiÄŤi
diff --git a/core/src/cz/nic/tablexia/Tablexia.java b/core/src/cz/nic/tablexia/Tablexia.java
index be311d31a..74e081161 100644
--- a/core/src/cz/nic/tablexia/Tablexia.java
+++ b/core/src/cz/nic/tablexia/Tablexia.java
@@ -93,6 +93,7 @@ public class Tablexia extends TablexiaApplication {
 	public void dispose() {
 		ApplicationTextureManager.getInstance().dispose();
 		ApplicationFontManager.getInstance().dispose();
+		ApplicationTextManager.getInstance().dispose();
 	}
 	
 	
diff --git a/core/src/cz/nic/tablexia/game/GameDefinition.java b/core/src/cz/nic/tablexia/game/GameDefinition.java
new file mode 100644
index 000000000..1dadee428
--- /dev/null
+++ b/core/src/cz/nic/tablexia/game/GameDefinition.java
@@ -0,0 +1,36 @@
+package cz.nic.tablexia.game;
+
+import cz.nic.tablexia.Tablexia.ChangeScreenEvent;
+import cz.nic.tablexia.TablexiaApplication.ScreenTransaction;
+import cz.nic.tablexia.bus.ApplicationBus;
+import cz.nic.tablexia.bus.ApplicationBus.ApplicationEvent;
+import cz.nic.tablexia.game.games.robbery.RuleScreen;
+import cz.nic.tablexia.loader.ApplicationTextManager;
+import cz.nic.tablexia.menu.IMenuItem;
+import cz.nic.tablexia.screen.AbstractTablexiaScreen;
+
+
+public enum GameDefinition implements ApplicationEvent, IMenuItem {
+	
+	ROBBERY				("game_robbery_title", RuleScreen.class);
+
+	private String menuTextKey;
+	private Class<? extends AbstractTablexiaScreen> screenClass;
+
+	private GameDefinition(String nameResource, Class<? extends AbstractTablexiaScreen> screenClass) {
+		this.menuTextKey = nameResource;
+		this.screenClass = screenClass;
+	}
+	
+	@Override
+	public String getTitle() {
+		return ApplicationTextManager.getInstance().getResult().get(menuTextKey);
+	}
+	
+	@Override
+	public void performAction() {
+		ApplicationBus.getInstance().publishAsync(this);
+		ApplicationBus.getInstance().publishAsync(new ChangeScreenEvent(screenClass, ScreenTransaction.FADE));
+	}
+
+}
diff --git a/core/src/cz/nic/tablexia/game/games/robbery/creature/attribute/clothing/bottom/MPantsAttribute.java b/core/src/cz/nic/tablexia/game/games/robbery/creature/attribute/clothing/bottom/MPantsAttribute.java
index 9741be227..cfc5daa04 100644
--- a/core/src/cz/nic/tablexia/game/games/robbery/creature/attribute/clothing/bottom/MPantsAttribute.java
+++ b/core/src/cz/nic/tablexia/game/games/robbery/creature/attribute/clothing/bottom/MPantsAttribute.java
@@ -36,8 +36,8 @@ public class MPantsAttribute extends BottomAttribute {
             add(new AttributeDescription(AttributeColor.BROWN, 	AttributeGender.MALE, RobberyTextureManager.ATTRIBUTE_M_PANTS_BROWN, 	MPantsAttribute.class));
             add(new AttributeDescription(AttributeColor.GREEN, 	AttributeGender.MALE, RobberyTextureManager.ATTRIBUTE_M_PANTS_GREEN, 	MPantsAttribute.class));
             add(new AttributeDescription(AttributeColor.GREY,  	AttributeGender.MALE, RobberyTextureManager.ATTRIBUTE_M_PANTS_GREY, 	MPantsAttribute.class));
-            add(new AttributeDescription(AttributeColor.RED, 	AttributeGender.MALE, RobberyTextureManager.ATTRIBUTE_M_PANTS_RED, 	MPantsAttribute.class));
-            add(new AttributeDescription(AttributeColor.YELLOW, AttributeGender.MALE, RobberyTextureManager.ATTRIBUTE_M_PANTS_YELLOW, MPantsAttribute.class));
+            add(new AttributeDescription(AttributeColor.RED, 	AttributeGender.MALE, RobberyTextureManager.ATTRIBUTE_M_PANTS_RED, 		MPantsAttribute.class));
+            add(new AttributeDescription(AttributeColor.YELLOW, AttributeGender.MALE, RobberyTextureManager.ATTRIBUTE_M_PANTS_YELLOW, 	MPantsAttribute.class));
         }
     };
 
diff --git a/core/src/cz/nic/tablexia/game/games/robbery/loader/RobberyTextureManager.java b/core/src/cz/nic/tablexia/game/games/robbery/loader/RobberyTextureManager.java
index c6bbff548..ea42e6512 100644
--- a/core/src/cz/nic/tablexia/game/games/robbery/loader/RobberyTextureManager.java
+++ b/core/src/cz/nic/tablexia/game/games/robbery/loader/RobberyTextureManager.java
@@ -20,8 +20,8 @@ public class RobberyTextureManager extends AssetManager implements IApplicationL
 	
 	@Override
 	public synchronized void dispose() {
-		super.dispose();
-		instance = null;
+//		super.dispose();
+//		instance = null;
 	}
 	
 	public static final String 	GAME_ROBBERY_GFX_PATH			= "game/robbery/gfx/";
diff --git a/core/src/cz/nic/tablexia/menu/IMenuItem.java b/core/src/cz/nic/tablexia/menu/IMenuItem.java
new file mode 100644
index 000000000..fc984a319
--- /dev/null
+++ b/core/src/cz/nic/tablexia/menu/IMenuItem.java
@@ -0,0 +1,8 @@
+package cz.nic.tablexia.menu;
+
+public interface IMenuItem {
+	
+	public String 	getTitle();
+	public void 	performAction();
+	
+}
diff --git a/core/src/cz/nic/tablexia/menu/MainMenu.java b/core/src/cz/nic/tablexia/menu/MainMenu.java
index 741e0fc69..ca7ed1c6e 100644
--- a/core/src/cz/nic/tablexia/menu/MainMenu.java
+++ b/core/src/cz/nic/tablexia/menu/MainMenu.java
@@ -49,19 +49,29 @@ public class MainMenu extends Container<Table> {
 	public void initMenuItems() {
 		menuTableLayout.reset();
 		menuTableLayout.setDebug(TablexiaSettings.isShowBoudingBoxes());
-		for (final MainMenuDefinition mainMenuDefinition : MainMenuDefinition.values()) {
-			TextButton menuButton = new TextButton(mainMenuDefinition.getMenuTitle(), menuButtonStyle);
-			menuButton.addListener(new ClickListener() {
-				
-				@Override
-				public void clicked(InputEvent event, float x, float y) {
-					mainMenuDefinition.performMenuAction();
+		for (final MainMenuDefinition menuItem : MainMenuDefinition.values()) {
+			addMenuItem(menuItem);
+			IMenuItem[] subMenu = menuItem.getSubmenu();
+			if (subMenu != null) {
+				for (IMenuItem submenuItem : subMenu) {
+					addMenuItem(submenuItem);
 				}
-				
-			});
-			menuTableLayout.add(menuButton).expandX();
-			menuTableLayout.row();
+			}
 		}
 	}
+	
+	private void addMenuItem(final IMenuItem menuItem) {
+		TextButton subMenuButton = new TextButton(menuItem.getTitle(), menuButtonStyle);
+		subMenuButton.addListener(new ClickListener() {
+			
+			@Override
+			public void clicked(InputEvent event, float x, float y) {
+				menuItem.performAction();
+			}
+			
+		});
+		menuTableLayout.add(subMenuButton).expandX();
+		menuTableLayout.row();
+	}
 
 }
diff --git a/core/src/cz/nic/tablexia/menu/MainMenuDefinition.java b/core/src/cz/nic/tablexia/menu/MainMenuDefinition.java
index a2ef67862..47864c807 100644
--- a/core/src/cz/nic/tablexia/menu/MainMenuDefinition.java
+++ b/core/src/cz/nic/tablexia/menu/MainMenuDefinition.java
@@ -2,30 +2,38 @@ package cz.nic.tablexia.menu;
 
 import cz.nic.tablexia.bus.ApplicationBus;
 import cz.nic.tablexia.bus.ApplicationBus.ApplicationEvent;
+import cz.nic.tablexia.game.GameDefinition;
 import cz.nic.tablexia.loader.ApplicationTextManager;
 
 
-public enum MainMenuDefinition implements ApplicationEvent {
+public enum MainMenuDefinition implements ApplicationEvent, IMenuItem {
 	
-	GAMES				("mainmenu_games"),
-	HALL_OF_FAME		("mainmenu_halloffame"),
-	STATISTICS			("mainmenu_statistics"),
-	ENCYCLOPEDIA		("mainmenu_encyclopedia"),
-	ABOUT_APPLICATION	("mainmenu_about"),
-	LOGOUT				("mainmenu_logout");
+	GAMES				("mainmenu_games", 			GameDefinition.values()),
+	HALL_OF_FAME		("mainmenu_halloffame", 	null),
+	STATISTICS			("mainmenu_statistics", 	null),
+	ENCYCLOPEDIA		("mainmenu_encyclopedia", 	null),
+	ABOUT_APPLICATION	("mainmenu_about", 			null),
+	LOGOUT				("mainmenu_logout", 		null);
 
 	private String menuTextKey;
+	private IMenuItem[] submenu;
 
-	private MainMenuDefinition(String nameResource) {
+	private MainMenuDefinition(String nameResource, IMenuItem[] submenu) {
 		this.menuTextKey = nameResource;
+		this.submenu = submenu;
 	}
 	
-	public String getMenuTitle() {
+	@Override
+	public String getTitle() {
 		return ApplicationTextManager.getInstance().getResult().get(menuTextKey);
-	}
+	}	
 	
-	public void performMenuAction() {
+	@Override
+	public void performAction() {
 		ApplicationBus.getInstance().publishAsync(this);
 	}
 
+	public IMenuItem[] getSubmenu() {
+		return submenu;
+	}
 }
-- 
GitLab