From cd69a0f4e2c5989f9130a2eabfbe2d6516f49742 Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 7 Sep 2014 17:23:36 +0000 Subject: [PATCH] Refactor so variant checkboxes display same description in tooltip as used by mobile game --- .../home/sanctioned/VSubmenuConstructed.java | 130 ++++++++---------- .../constructed/ConstructedScreen.java | 19 +-- .../main/java/forge/util/GuiDisplayUtil.java | 19 ++- 3 files changed, 83 insertions(+), 85 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuConstructed.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuConstructed.java index a491bae5428..d4ea4a8bc94 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuConstructed.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuConstructed.java @@ -29,6 +29,7 @@ import forge.screens.home.*; import forge.toolbox.*; import forge.toolbox.FSkin.SkinColor; import forge.toolbox.FSkin.SkinImage; +import forge.util.GuiDisplayUtil; import forge.util.Lang; import forge.util.MyRandom; import forge.util.NameGenerator; @@ -78,12 +79,12 @@ public enum VSubmenuConstructed implements IVSubmenu { // Variants frame and variables private final Set appliedVariants = new TreeSet(); private final FPanel variantsPanel = new FPanel(new MigLayout("insets 10, gapx 10")); - private final FCheckBox vntVanguard = new FCheckBox("Vanguard"); - private final FCheckBox vntMomirBasic = new FCheckBox("Momir Basic"); - private final FCheckBox vntCommander = new FCheckBox("Commander"); - private final FCheckBox vntPlanechase = new FCheckBox("Planechase"); - private final FCheckBox vntArchenemy = new FCheckBox("Archenemy"); - private final FCheckBox vntArchenemyRumble = new FCheckBox("Archenemy Rumble"); + private final VariantCheckBox vntVanguard = new VariantCheckBox(GameType.Vanguard); + private final VariantCheckBox vntMomirBasic = new VariantCheckBox(GameType.MomirBasic); + private final VariantCheckBox vntCommander = new VariantCheckBox(GameType.Commander); + private final VariantCheckBox vntPlanechase = new VariantCheckBox(GameType.Planechase); + private final VariantCheckBox vntArchenemy = new VariantCheckBox(GameType.Archenemy); + private final VariantCheckBox vntArchenemyRumble = new VariantCheckBox(GameType.ArchenemyRumble); // Player frame elements private final JPanel playersFrame = new JPanel(new MigLayout("insets 0, gap 0 5, wrap, hidemode 3")); @@ -127,14 +128,6 @@ public enum VSubmenuConstructed implements IVSubmenu { //////////////////////////////////////////////////////// //////////////////// Variants Panel //////////////////// - // Populate and add variants panel - vntVanguard.addItemListener(iListenerVariants); - vntMomirBasic.addItemListener(iListenerVariants); - vntCommander.addItemListener(iListenerVariants); - vntPlanechase.addItemListener(iListenerVariants); - vntArchenemy.addItemListener(iListenerVariants); - vntArchenemyRumble.addItemListener(iListenerVariants); - variantsPanel.setOpaque(false); variantsPanel.add(newLabel("Variants:")); variantsPanel.add(vntVanguard); @@ -1142,74 +1135,61 @@ public enum VSubmenuConstructed implements IVSubmenu { ///////////////////////////////////////////// //========== Various listeners in build order - /** This listener unlocks the relevant buttons for players - * and enables/disables archenemy combobox as appropriate. */ - private ItemListener iListenerVariants = new ItemListener() { - @Override - public void itemStateChanged(ItemEvent arg0) { - FCheckBox cb = (FCheckBox) arg0.getSource(); - GameType variantType = null; + @SuppressWarnings("serial") + private class VariantCheckBox extends FCheckBox { + private final GameType variantType; - if (cb == vntVanguard) { - variantType = GameType.Vanguard; - } - else if (cb == vntMomirBasic) { - variantType = GameType.MomirBasic; - } - else if (cb == vntCommander) { - variantType = GameType.Commander; - } - else if (cb == vntPlanechase) { - variantType = GameType.Planechase; - } - else if (cb == vntArchenemy) { - variantType = GameType.Archenemy; - } - else if (cb == vntArchenemyRumble) { - variantType = GameType.ArchenemyRumble; - } + private VariantCheckBox(GameType variantType0) { + super(variantType0.toString()); - if (variantType != null) { - if (arg0.getStateChange() == ItemEvent.SELECTED) { - appliedVariants.add(variantType); - currentGameMode = variantType; + variantType = variantType0; - //ensure other necessary variants are unchecked - switch (variantType) { - case Archenemy: - vntArchenemyRumble.setSelected(false); - break; - case ArchenemyRumble: - vntArchenemy.setSelected(false); - break; - case Commander: - vntMomirBasic.setSelected(false); - break; - case Vanguard: - vntMomirBasic.setSelected(false); - break; - case MomirBasic: - vntCommander.setSelected(false); - vntVanguard.setSelected(false); - break; - default: - break; + setToolTipText(GuiDisplayUtil.getVariantDescription(variantType0)); + + addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + appliedVariants.add(variantType); + currentGameMode = variantType; + + //ensure other necessary variants are unchecked + switch (variantType) { + case Archenemy: + vntArchenemyRumble.setSelected(false); + break; + case ArchenemyRumble: + vntArchenemy.setSelected(false); + break; + case Commander: + vntMomirBasic.setSelected(false); + break; + case Vanguard: + vntMomirBasic.setSelected(false); + break; + case MomirBasic: + vntCommander.setSelected(false); + vntVanguard.setSelected(false); + break; + default: + break; + } } - } - else { - appliedVariants.remove(variantType); - if (currentGameMode == variantType) { - currentGameMode = GameType.Constructed; + else { + appliedVariants.remove(variantType); + if (currentGameMode == variantType) { + currentGameMode = GameType.Constructed; + } } - } - } - for (PlayerPanel pp : playerPanels) { - pp.toggleIsPlayerArchenemy(); - } - changePlayerFocus(playerWithFocus, currentGameMode); + for (PlayerPanel pp : playerPanels) { + pp.toggleIsPlayerArchenemy(); + } + changePlayerFocus(playerWithFocus, currentGameMode); + } + }); } - }; + } private ActionListener nameListener = new ActionListener() { @Override diff --git a/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java b/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java index a3505965ace..8e9afb87fa4 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java @@ -46,6 +46,7 @@ import forge.toolbox.FOptionPane; import forge.toolbox.FScrollPane; import forge.toolbox.FTextField; import forge.util.Callback; +import forge.util.GuiDisplayUtil; import forge.util.Lang; import forge.util.NameGenerator; import forge.util.Utils; @@ -935,12 +936,12 @@ public class ConstructedScreen extends LaunchScreen { super("Select Variants"); lstVariants.setListItemRenderer(new VariantRenderer()); - lstVariants.addItem(new Variant(GameType.Vanguard, "Each player has a special \"Avatar\" card that affects the game.")); - lstVariants.addItem(new Variant(GameType.MomirBasic, "Each player has a deck containing 60 basic lands and the Momir Vig avatar.")); - lstVariants.addItem(new Variant(GameType.Commander, "Each player has a legendary \"General\" card which can be cast at any time and determines deck colors.")); - lstVariants.addItem(new Variant(GameType.Planechase, "Plane cards apply global effects. Plane card changed when a player rolls \"Chaos\" on the planar die.")); - lstVariants.addItem(new Variant(GameType.Archenemy, "One player is the Archenemy and can play scheme cards.")); - lstVariants.addItem(new Variant(GameType.ArchenemyRumble, "All players are Archenemies and can play scheme cards.")); + lstVariants.addItem(new Variant(GameType.Vanguard)); + lstVariants.addItem(new Variant(GameType.MomirBasic)); + lstVariants.addItem(new Variant(GameType.Commander)); + lstVariants.addItem(new Variant(GameType.Planechase)); + lstVariants.addItem(new Variant(GameType.Archenemy)); + lstVariants.addItem(new Variant(GameType.ArchenemyRumble)); } @Override @@ -951,10 +952,10 @@ public class ConstructedScreen extends LaunchScreen { private class Variant { private final GameType gameType; private final String description; - - private Variant(GameType gameType0, String description0) { + + private Variant(GameType gameType0) { gameType = gameType0; - description = description0; + description = GuiDisplayUtil.getVariantDescription(gameType0); } private void draw(Graphics g, FSkinFont font, FSkinColor color, float x, float y, float w, float h) { diff --git a/forge-gui/src/main/java/forge/util/GuiDisplayUtil.java b/forge-gui/src/main/java/forge/util/GuiDisplayUtil.java index 22d0ed86b0e..b1d79987b58 100644 --- a/forge-gui/src/main/java/forge/util/GuiDisplayUtil.java +++ b/forge-gui/src/main/java/forge/util/GuiDisplayUtil.java @@ -520,5 +520,22 @@ public final class GuiDisplayUtil { return text.replaceAll("(?i)human", playerName); } - + public static String getVariantDescription(GameType variant) { + switch (variant) { + case Archenemy: + return "One player is the Archenemy and can play scheme cards."; + case ArchenemyRumble: + return "All players are Archenemies and can play scheme cards."; + case Commander: + return "Each player has a legendary \"General\" card which can be cast at any time and determines deck colors."; + case MomirBasic: + return "Each player has a deck containing 60 basic lands and the Momir Vig avatar."; + case Planechase: + return "Plane cards apply global effects. Plane card changed when a player rolls \"Chaos\" on the planar die."; + case Vanguard: + return "Each player has a special \"Avatar\" card that affects the game."; + default: + return ""; //other game types don't need descriptions + } + } } // end class GuiDisplayUtil