Add check box menu items and support for tapping stack item to zoom or select options

This commit is contained in:
drdev
2014-05-03 21:17:39 +00:00
parent 5abecfe77d
commit b742d07341
6 changed files with 123 additions and 5 deletions

1
.gitattributes vendored
View File

@@ -1130,6 +1130,7 @@ forge-gui-mobile/src/forge/itemmanager/filters/ValueRangeFilter.java -text
forge-gui-mobile/src/forge/itemmanager/views/ImageView.java -text forge-gui-mobile/src/forge/itemmanager/views/ImageView.java -text
forge-gui-mobile/src/forge/itemmanager/views/ItemListView.java -text forge-gui-mobile/src/forge/itemmanager/views/ItemListView.java -text
forge-gui-mobile/src/forge/itemmanager/views/ItemView.java -text forge-gui-mobile/src/forge/itemmanager/views/ItemView.java -text
forge-gui-mobile/src/forge/menu/FCheckBoxMenuItem.java -text
forge-gui-mobile/src/forge/menu/FDropDown.java -text forge-gui-mobile/src/forge/menu/FDropDown.java -text
forge-gui-mobile/src/forge/menu/FDropDownMenu.java -text forge-gui-mobile/src/forge/menu/FDropDownMenu.java -text
forge-gui-mobile/src/forge/menu/FMenuBar.java -text forge-gui-mobile/src/forge/menu/FMenuBar.java -text

View File

@@ -102,8 +102,9 @@ public abstract class PlayerController {
// Triggers preliminary choice: ask, decline or play // Triggers preliminary choice: ask, decline or play
private Map<Integer, Boolean> triggersAlwaysAccept = new HashMap<Integer, Boolean>(); private Map<Integer, Boolean> triggersAlwaysAccept = new HashMap<Integer, Boolean>();
public final boolean shouldAlwaysAcceptTrigger(Integer trigger) { return Boolean.TRUE.equals(triggersAlwaysAccept.get(trigger)); } public final boolean shouldAlwaysAcceptTrigger(Integer trigger) { return Boolean.TRUE.equals(triggersAlwaysAccept.get(trigger)); }
public final boolean shouldAlwaysDeclineTrigger(Integer trigger) { return Boolean.FALSE.equals(triggersAlwaysAccept.get(trigger)); } public final boolean shouldAlwaysDeclineTrigger(Integer trigger) { return Boolean.FALSE.equals(triggersAlwaysAccept.get(trigger)); }
public final boolean shouldAlwaysAskTrigger(Integer trigger) { return !triggersAlwaysAccept.containsKey(trigger); }
public final void setShouldAlwaysAcceptTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, true); } public final void setShouldAlwaysAcceptTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, true); }
public final void setShouldAlwaysDeclineTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, false); } public final void setShouldAlwaysDeclineTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, false); }

View File

@@ -236,8 +236,8 @@ public enum VStack implements IVDoc<CStack> {
private Integer triggerID = 0; private Integer triggerID = 0;
public OptionalTriggerMenu(){ public OptionalTriggerMenu(){
jmiAccept = new JCheckBoxMenuItem("Always Accept"); jmiAccept = new JCheckBoxMenuItem("Always Yes");
jmiDecline = new JCheckBoxMenuItem("Always Decline"); jmiDecline = new JCheckBoxMenuItem("Always No");
jmiAsk = new JCheckBoxMenuItem("Always Ask"); jmiAsk = new JCheckBoxMenuItem("Always Ask");
jmiAccept.addActionListener(new ActionListener() { jmiAccept.addActionListener(new ActionListener() {

View File

@@ -0,0 +1,55 @@
package forge.menu;
import forge.Forge.Graphics;
import forge.assets.FImage;
import forge.assets.FSkinColor;
import forge.assets.FSkinColor.Colors;
import forge.toolbox.FEvent.FEventHandler;
public class FCheckBoxMenuItem extends FMenuItem {
public static final float CHECKBOX_SIZE = HEIGHT * 0.45f;
public static final float PADDING = (HEIGHT - CHECKBOX_SIZE) / 3;
public static final FSkinColor FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT);
public static final FSkinColor CHECKBOX_COLOR = FORE_COLOR.alphaColor(0.5f);
private final boolean checked;
public FCheckBoxMenuItem(String text0, boolean checked0, FEventHandler handler0) {
this(text0, checked0, null, handler0, true);
}
public FCheckBoxMenuItem(String text0, boolean checked0, FEventHandler handler0, boolean enabled0) {
this(text0, checked0, null, handler0, enabled0);
}
public FCheckBoxMenuItem(String text0, boolean checked0, FImage icon0, FEventHandler handler0) {
this(text0, checked0, icon0, handler0, true);
}
public FCheckBoxMenuItem(String text0, boolean checked0, FImage icon0, FEventHandler handler0, boolean enabled0) {
super(text0, icon0, handler0, enabled0);
checked = checked0;
}
@Override
public float getMinWidth() {
return super.getMinWidth() + CHECKBOX_SIZE + 2 * PADDING - GAP_X;
}
@Override
public void draw(Graphics g) {
super.draw(g);
float w = CHECKBOX_SIZE;
float h = CHECKBOX_SIZE;
float x = getWidth() - PADDING - w;
float y = (getHeight() - h) / 2;
g.drawRect(1, CHECKBOX_COLOR, x, y, w, h);
if (checked) {
//draw check mark
x += 3;
y++;
w -= 6;
h -= 3;
g.drawLine(2, FORE_COLOR, x, y + h / 2, x + w / 2, y + h);
g.drawLine(2, FORE_COLOR, x + w / 2, y + h, x + w, y);
}
}
}

View File

@@ -2,6 +2,7 @@ package forge.screens.match.views;
import forge.GuiBase; import forge.GuiBase;
import forge.game.player.Player; import forge.game.player.Player;
import forge.menu.FCheckBoxMenuItem;
import forge.menu.FDropDownMenu; import forge.menu.FDropDownMenu;
import forge.menu.FMenuItem; import forge.menu.FMenuItem;
import forge.model.FModel; import forge.model.FModel;
@@ -84,7 +85,9 @@ public class VDevMenu extends FDropDownMenu {
})); }));
final ForgePreferences prefs = FModel.getPreferences(); final ForgePreferences prefs = FModel.getPreferences();
addItem(new FMenuItem("Play Unlimited Lands", new FEventHandler() { addItem(new FCheckBoxMenuItem("Play Unlimited Lands",
prefs.getPrefBoolean(FPref.DEV_UNLIMITED_LAND),
new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { public void handleEvent(FEvent e) {
boolean unlimitedLands = !prefs.getPrefBoolean(FPref.DEV_UNLIMITED_LAND); boolean unlimitedLands = !prefs.getPrefBoolean(FPref.DEV_UNLIMITED_LAND);

View File

@@ -9,13 +9,21 @@ import forge.assets.FSkinColor;
import forge.assets.FSkinFont; import forge.assets.FSkinFont;
import forge.assets.ImageCache; import forge.assets.ImageCache;
import forge.card.CardDetailUtil; import forge.card.CardDetailUtil;
import forge.card.CardZoom;
import forge.card.CardDetailUtil.DetailColors; import forge.card.CardDetailUtil.DetailColors;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.player.Player;
import forge.game.player.PlayerController;
import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.zone.MagicStack; import forge.game.zone.MagicStack;
import forge.menu.FCheckBoxMenuItem;
import forge.menu.FDropDown; import forge.menu.FDropDown;
import forge.menu.FMenuItem;
import forge.menu.FPopupMenu;
import forge.toolbox.FCardPanel; import forge.toolbox.FCardPanel;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.util.Utils; import forge.util.Utils;
@@ -110,7 +118,7 @@ public class VStack extends FDropDown {
private StackInstanceDisplay(SpellAbilityStackInstance stackInstance0, boolean isTop0) { private StackInstanceDisplay(SpellAbilityStackInstance stackInstance0, boolean isTop0) {
stackInstance = stackInstance0; stackInstance = stackInstance0;
isTop = isTop0; isTop = isTop0;
Card card = stackInstance0.getSourceCard(); Card card = stackInstance.getSourceCard();
text = stackInstance.getStackDescription(); text = stackInstance.getStackDescription();
if (stackInstance.getSpellAbility().isOptionalTrigger() && if (stackInstance.getSpellAbility().isOptionalTrigger() &&
@@ -131,6 +139,56 @@ public class VStack extends FDropDown {
return Math.round(height); return Math.round(height);
} }
@Override
public boolean tap(float x, float y, int count) {
final Player player = stackInstance.getSpellAbility().getActivatingPlayer();
final PlayerController controller = player.getController();
if (stackInstance.getSpellAbility().isOptionalTrigger() && player.getLobbyPlayer() == localPlayer && controller != null) {
FPopupMenu menu = new FPopupMenu() {
@Override
protected void buildMenu() {
final int triggerID = stackInstance.getSpellAbility().getSourceTrigger();
addItem(new FCheckBoxMenuItem("Always Yes",
controller.shouldAlwaysAcceptTrigger(triggerID),
new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
controller.setShouldAlwaysAcceptTrigger(triggerID);
}
}));
addItem(new FCheckBoxMenuItem("Always No",
controller.shouldAlwaysDeclineTrigger(triggerID),
new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
controller.setShouldAlwaysDeclineTrigger(triggerID);
}
}));
addItem(new FCheckBoxMenuItem("Always Ask",
controller.shouldAlwaysAskTrigger(triggerID),
new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
controller.setShouldAlwaysAskTrigger(triggerID);
}
}));
addItem(new FMenuItem("Zoom/Details", new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
CardZoom.show(stackInstance.getSourceCard());
}
}));
}
};
menu.show(this, x, y);
}
else {
CardZoom.show(stackInstance.getSourceCard());
}
return true;
}
@Override @Override
public void draw(Graphics g) { public void draw(Graphics g) {
float w = getWidth(); float w = getWidth();