diff --git a/.gitattributes b/.gitattributes index 51265eb8496..ee3c75b8843 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1201,6 +1201,7 @@ forge-gui-mobile/src/forge/screens/match/winlose/ControlWinLose.java -text forge-gui-mobile/src/forge/screens/match/winlose/GauntletWinLose.java -text forge-gui-mobile/src/forge/screens/match/winlose/LimitedWinLose.java -text forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java -text +forge-gui-mobile/src/forge/screens/quest/QuestDuelsScreen.java -text forge-gui-mobile/src/forge/screens/quest/QuestScreen.java -text forge-gui-mobile/src/forge/screens/sealed/SealedScreen.java -text forge-gui-mobile/src/forge/screens/settings/FilesPage.java -text diff --git a/forge-gui-mobile/src/forge/screens/FScreen.java b/forge-gui-mobile/src/forge/screens/FScreen.java index 5e2b638502d..a9bfd270cd0 100644 --- a/forge-gui-mobile/src/forge/screens/FScreen.java +++ b/forge-gui-mobile/src/forge/screens/FScreen.java @@ -10,6 +10,7 @@ import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.assets.FSkinColor.Colors; import forge.assets.FSkinTexture; +import forge.menu.FPopupMenu; import forge.screens.settings.SettingsScreen; import forge.toolbox.FContainer; import forge.toolbox.FEvent; @@ -26,6 +27,9 @@ public abstract class FScreen extends FContainer { protected FScreen(String headerCaption) { this(headerCaption == null ? null : new DefaultHeader(headerCaption)); } + protected FScreen(String headerCaption, FPopupMenu menu) { + this(new MenuHeader(headerCaption, menu)); + } protected FScreen(Header header0) { header = header0; if (header != null) { @@ -57,12 +61,12 @@ public abstract class FScreen extends FContainer { } public void showMenu() { - SettingsScreen.show(); //TODO: Build menu containing settings item - //buildMenu(); - } - - protected void buildMenu() { - + if (header instanceof MenuHeader) { + ((MenuHeader)header).btnMenu.trigger(); + } + else { //just so settings screen if no menu header + SettingsScreen.show(); + } } @Override @@ -95,8 +99,8 @@ public abstract class FScreen extends FContainer { public abstract float getPreferredHeight(); } private static class DefaultHeader extends Header { - private static final float HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.8f); - private static final FSkinFont FONT = FSkinFont.get(16); + protected static final float HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.8f); + protected static final FSkinFont FONT = FSkinFont.get(16); private final FLabel btnBack, lblCaption; @@ -132,6 +136,26 @@ public abstract class FScreen extends FContainer { lblCaption.setBounds(height, 0, width - 2 * height, height); } } + private static class MenuHeader extends DefaultHeader { + private final FLabel btnMenu; + + public MenuHeader(String headerCaption, final FPopupMenu menu) { + super(headerCaption); + btnMenu = add(new FLabel.Builder().icon(new MenuIcon(HEIGHT, HEIGHT)).pressedColor(BTN_PRESSED_COLOR).align(HAlignment.CENTER).command(new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + menu.show(btnMenu, 0, HEIGHT); + } + }).build()); + btnMenu.setSize(HEIGHT, HEIGHT); + } + + @Override + protected void doLayout(float width, float height) { + super.doLayout(width, height); + btnMenu.setLeft(width - height); + } + } protected static class BackIcon implements FImage { private static final float THICKNESS = Utils.scaleMax(3); @@ -165,6 +189,47 @@ public abstract class FScreen extends FContainer { } } + protected static class MenuIcon implements FImage { + private static final FSkinColor COLOR = FSkinColor.get(Colors.CLR_TEXT); + + private final float width, height; + public MenuIcon(float width0, float height0) { + width = width0; + height = height0; + } + + @Override + public float getWidth() { + return width; + } + + @Override + public float getHeight() { + return height; + } + + @Override + public void draw(Graphics g, float x, float y, float w, float h) { + float thickness = Math.round(h / 5); + float delta = Math.round(thickness * 1.75f); + y += (h - 2 * delta - thickness) / 2; + + g.fillRect(COLOR, x, y, thickness, thickness); + y += delta; + g.fillRect(COLOR, x, y, thickness, thickness); + y += delta; + g.fillRect(COLOR, x, y, thickness, thickness); + x += delta; + y -= 2 * delta; + w -= delta; + g.fillRect(COLOR, x, y, w, thickness); + y += delta; + g.fillRect(COLOR, x, y, w, thickness); + y += delta; + g.fillRect(COLOR, x, y, w, thickness); + } + } + @Override public boolean keyDown(int keyCode) { if (keyCode == Keys.ESCAPE || keyCode == Keys.BACK) { diff --git a/forge-gui-mobile/src/forge/screens/home/HomeScreen.java b/forge-gui-mobile/src/forge/screens/home/HomeScreen.java index 1073fcb5d9d..3e3a024fddc 100644 --- a/forge-gui-mobile/src/forge/screens/home/HomeScreen.java +++ b/forge-gui-mobile/src/forge/screens/home/HomeScreen.java @@ -9,7 +9,7 @@ import forge.assets.FSkinImage; import forge.screens.constructed.ConstructedScreen; import forge.screens.draft.DraftScreen; import forge.screens.gauntlet.GauntletScreen; -import forge.screens.quest.QuestScreen; +import forge.screens.quest.QuestDuelsScreen; import forge.screens.sealed.SealedScreen; import forge.screens.settings.SettingsScreen; import forge.toolbox.FButton; @@ -46,9 +46,9 @@ public class HomeScreen extends FScreen { addButton("Quest Mode", new FEventHandler() { @Override public void handleEvent(FEvent e) { - Forge.openScreen(new QuestScreen()); + Forge.openScreen(new QuestDuelsScreen()); } - }, false); + }, true); addButton("Gauntlets", new FEventHandler() { @Override public void handleEvent(FEvent e) { diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestDuelsScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestDuelsScreen.java new file mode 100644 index 00000000000..99afbdc00ee --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/quest/QuestDuelsScreen.java @@ -0,0 +1,13 @@ +package forge.screens.quest; + +public class QuestDuelsScreen extends QuestScreen { + + public QuestDuelsScreen() { + super("Quest Duels"); + } + + @Override + protected void doLayout(float startY, float width, float height) { + + } +} diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestScreen.java index ca7aa12872a..6129619b777 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestScreen.java @@ -1,22 +1,68 @@ package forge.screens.quest; -import forge.game.GameType; -import forge.screens.LaunchScreen; +import forge.assets.FSkinImage; +import forge.menu.FMenuItem; +import forge.menu.FPopupMenu; +import forge.screens.FScreen; +import forge.toolbox.FEvent; +import forge.toolbox.FEvent.FEventHandler; -public class QuestScreen extends LaunchScreen { - public QuestScreen() { - super("Quest Mode"); - } - - @Override - protected void doLayoutAboveBtnStart(float startY, float width, float height) { - // TODO Auto-generated method stub - - } - - @Override - protected boolean buildLaunchParams(LaunchParams launchParams) { - launchParams.gameType = GameType.Quest; - return false; //TODO: Support launching match +public abstract class QuestScreen extends FScreen { + protected QuestScreen(String headerCaption) { + super(headerCaption, new FPopupMenu() { + @Override + protected void buildMenu() { + addItem(new FMenuItem("Duels", FSkinImage.QUEST_GEAR, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + } + })); + addItem(new FMenuItem("Challenges", FSkinImage.QUEST_HEART, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + } + })); + addItem(new FMenuItem("Tournaments", FSkinImage.PACK, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + } + })); + addItem(new FMenuItem("Travel", FSkinImage.QUEST_MAP, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + } + })); + addItem(new FMenuItem("Spell Shop", FSkinImage.QUEST_BOOK, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + } + })); + addItem(new FMenuItem("Bazaar", FSkinImage.QUEST_BOTTLES, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + } + })); + addItem(new FMenuItem("Change Deck", FSkinImage.DECKLIST, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + } + })); + addItem(new FMenuItem("New Quest", FSkinImage.NEW, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + } + })); + addItem(new FMenuItem("Load Quest", FSkinImage.OPEN, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + } + })); + addItem(new FMenuItem("Preferences", FSkinImage.SETTINGS, new FEventHandler() { + @Override + public void handleEvent(FEvent e) { + } + })); + } + }); } } diff --git a/forge-gui-mobile/src/forge/toolbox/FLabel.java b/forge-gui-mobile/src/forge/toolbox/FLabel.java index c51b81f1ccd..76c60c099fc 100644 --- a/forge-gui-mobile/src/forge/toolbox/FLabel.java +++ b/forge-gui-mobile/src/forge/toolbox/FLabel.java @@ -198,6 +198,14 @@ public class FLabel extends FDisplayObject implements IButton { return handled; } + public boolean trigger() { + if (isEnabled() && command != null) { + command.handleEvent(new FEvent(this, FEventType.TAP)); + return true; + } + return false; + } + public TextBounds getAutoSizeBounds() { TextBounds bounds; if (text.isEmpty()) {