mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Add check box menu items and support for tapping stack item to zoom or select options
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -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/ItemListView.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/FDropDownMenu.java -text
|
||||
forge-gui-mobile/src/forge/menu/FMenuBar.java -text
|
||||
|
||||
@@ -102,8 +102,9 @@ public abstract class PlayerController {
|
||||
// Triggers preliminary choice: ask, decline or play
|
||||
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 shouldAlwaysAskTrigger(Integer trigger) { return !triggersAlwaysAccept.containsKey(trigger); }
|
||||
|
||||
public final void setShouldAlwaysAcceptTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, true); }
|
||||
public final void setShouldAlwaysDeclineTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, false); }
|
||||
|
||||
@@ -236,8 +236,8 @@ public enum VStack implements IVDoc<CStack> {
|
||||
private Integer triggerID = 0;
|
||||
|
||||
public OptionalTriggerMenu(){
|
||||
jmiAccept = new JCheckBoxMenuItem("Always Accept");
|
||||
jmiDecline = new JCheckBoxMenuItem("Always Decline");
|
||||
jmiAccept = new JCheckBoxMenuItem("Always Yes");
|
||||
jmiDecline = new JCheckBoxMenuItem("Always No");
|
||||
jmiAsk = new JCheckBoxMenuItem("Always Ask");
|
||||
|
||||
jmiAccept.addActionListener(new ActionListener() {
|
||||
|
||||
55
forge-gui-mobile/src/forge/menu/FCheckBoxMenuItem.java
Normal file
55
forge-gui-mobile/src/forge/menu/FCheckBoxMenuItem.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package forge.screens.match.views;
|
||||
|
||||
import forge.GuiBase;
|
||||
import forge.game.player.Player;
|
||||
import forge.menu.FCheckBoxMenuItem;
|
||||
import forge.menu.FDropDownMenu;
|
||||
import forge.menu.FMenuItem;
|
||||
import forge.model.FModel;
|
||||
@@ -84,7 +85,9 @@ public class VDevMenu extends FDropDownMenu {
|
||||
}));
|
||||
|
||||
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
|
||||
public void handleEvent(FEvent e) {
|
||||
boolean unlimitedLands = !prefs.getPrefBoolean(FPref.DEV_UNLIMITED_LAND);
|
||||
|
||||
@@ -9,13 +9,21 @@ import forge.assets.FSkinColor;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.assets.ImageCache;
|
||||
import forge.card.CardDetailUtil;
|
||||
import forge.card.CardZoom;
|
||||
import forge.card.CardDetailUtil.DetailColors;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerController;
|
||||
import forge.game.spellability.SpellAbilityStackInstance;
|
||||
import forge.game.zone.MagicStack;
|
||||
import forge.menu.FCheckBoxMenuItem;
|
||||
import forge.menu.FDropDown;
|
||||
import forge.menu.FMenuItem;
|
||||
import forge.menu.FPopupMenu;
|
||||
import forge.toolbox.FCardPanel;
|
||||
import forge.toolbox.FDisplayObject;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.util.Utils;
|
||||
|
||||
@@ -110,7 +118,7 @@ public class VStack extends FDropDown {
|
||||
private StackInstanceDisplay(SpellAbilityStackInstance stackInstance0, boolean isTop0) {
|
||||
stackInstance = stackInstance0;
|
||||
isTop = isTop0;
|
||||
Card card = stackInstance0.getSourceCard();
|
||||
Card card = stackInstance.getSourceCard();
|
||||
|
||||
text = stackInstance.getStackDescription();
|
||||
if (stackInstance.getSpellAbility().isOptionalTrigger() &&
|
||||
@@ -131,6 +139,56 @@ public class VStack extends FDropDown {
|
||||
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
|
||||
public void draw(Graphics g) {
|
||||
float w = getWidth();
|
||||
|
||||
Reference in New Issue
Block a user