From 15a102e895f9af7e8fe87b1d4afef31a5c5e25a3 Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 30 Nov 2014 19:02:41 +0000 Subject: [PATCH] Make zoom activation more flexible --- .../src/forge/card/CardRenderer.java | 10 ++-- forge-gui-mobile/src/forge/card/CardZoom.java | 31 +++++++----- .../src/forge/itemmanager/CardManager.java | 18 +------ .../src/forge/itemmanager/ItemManager.java | 19 +++++++- .../forge/itemmanager/SpellShopManager.java | 17 +------ .../forge/itemmanager/views/ImageView.java | 9 +--- .../screens/match/views/VCardDisplayArea.java | 21 +++++---- .../src/forge/toolbox/FChoiceList.java | 47 +++++++++---------- 8 files changed, 82 insertions(+), 90 deletions(-) diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index 99e364239b2..5721c458287 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -21,6 +21,7 @@ import forge.assets.FSkinImage; import forge.assets.FTextureRegionImage; import forge.assets.ImageCache; import forge.card.CardDetailUtil.DetailColors; +import forge.card.CardZoom.ActivateHandler; import forge.card.mana.ManaCost; import forge.game.card.CardView; import forge.game.card.CardView.CardStateView; @@ -29,7 +30,6 @@ import forge.match.MatchUtil; import forge.model.FModel; import forge.properties.ForgePreferences.FPref; import forge.toolbox.FList; -import forge.util.Callback; import forge.util.Utils; public class CardRenderer { @@ -239,18 +239,18 @@ public class CardRenderer { g.drawText(type, typeFont, foreColor, x, y, availableTypeWidth, lineHeight, false, HAlignment.LEFT, true); } - public static boolean cardListItemTap(List cards, int selectedIndex, Callback onActivate0, float x, float y, int count, boolean compactMode) { + public static boolean cardListItemTap(List cards, int selectedIndex, ActivateHandler activateHandler, float x, float y, int count, boolean compactMode) { if (x <= getCardListItemHeight(compactMode) * CARD_ART_RATIO) { - CardZoom.show(cards, selectedIndex, onActivate0); + CardZoom.show(cards, selectedIndex, activateHandler); return true; } return false; } - public static boolean paperCardListItemTap(List cards, int selectedIndex, Callback onActivate0, float x, float y, int count, boolean compactMode) { + public static boolean paperCardListItemTap(List cards, int selectedIndex, ActivateHandler activateHandler, float x, float y, int count, boolean compactMode) { float cardArtHeight = getCardListItemHeight(compactMode); float cardArtWidth = cardArtHeight * CARD_ART_RATIO; if (x <= cardArtWidth && y <= cardArtHeight) { - CardZoom.show(cards, selectedIndex, onActivate0); + CardZoom.show(cards, selectedIndex, activateHandler); return true; } return false; diff --git a/forge-gui-mobile/src/forge/card/CardZoom.java b/forge-gui-mobile/src/forge/card/CardZoom.java index d4064367943..d26f03f4fc5 100644 --- a/forge-gui-mobile/src/forge/card/CardZoom.java +++ b/forge-gui-mobile/src/forge/card/CardZoom.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; +import org.apache.commons.lang3.StringUtils; + import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import forge.Graphics; @@ -17,7 +19,6 @@ import forge.item.InventoryItem; import forge.screens.FScreen; import forge.toolbox.FCardPanel; import forge.toolbox.FOverlay; -import forge.util.Callback; import forge.util.FCollectionView; public class CardZoom extends FOverlay { @@ -30,19 +31,19 @@ public class CardZoom extends FOverlay { private static int currentIndex; private static CardView currentCard, prevCard, nextCard; private static boolean zoomMode = true; - private static Callback onActivate; + private static ActivateHandler activateHandler; public static void show(Object item) { List items0 = new ArrayList(); items0.add(item); show(items0, 0, null); } - public static void show(FCollectionView items0, int currentIndex0, Callback onActivate0) { - show((List)items0, currentIndex0, onActivate0); + public static void show(FCollectionView items0, int currentIndex0, ActivateHandler activateHandler0) { + show((List)items0, currentIndex0, activateHandler0); } - public static void show(final List items0, int currentIndex0, Callback onActivate0) { + public static void show(final List items0, int currentIndex0, ActivateHandler activateHandler0) { items = items0; - onActivate = onActivate0; + activateHandler = activateHandler0; currentIndex = currentIndex0; currentCard = getCardView(items.get(currentIndex)); prevCard = currentIndex > 0 ? getCardView(items.get(currentIndex - 1)) : null; @@ -114,9 +115,9 @@ public class CardZoom extends FOverlay { zoomMode = !zoomMode; return true; } - if (onActivate != null) { + if (activateHandler != null) { hide(); - onActivate.run(currentIndex); + activateHandler.activate(currentIndex); return true; } return false; @@ -146,9 +147,12 @@ public class CardZoom extends FOverlay { } float messageHeight = MSG_FONT.getCapHeight() * 2.5f; - if (onActivate != null) { - g.fillRect(MSG_BACK_COLOR, 0, 0, w, messageHeight); - g.drawText("Swipe up to activate card", MSG_FONT, MSG_FORE_COLOR, 0, 0, w, messageHeight, false, HAlignment.CENTER, true); + if (activateHandler != null) { + String action = activateHandler.getActivateAction(currentIndex); + if (StringUtils.isNotEmpty(action)) { + g.fillRect(MSG_BACK_COLOR, 0, 0, w, messageHeight); + g.drawText("Swipe up to " + action, MSG_FONT, MSG_FORE_COLOR, 0, 0, w, messageHeight, false, HAlignment.CENTER, true); + } } g.fillRect(MSG_BACK_COLOR, 0, h - messageHeight, w, messageHeight); g.drawText("Swipe down to switch to " + (zoomMode ? "detail" : "picture") + " view", MSG_FONT, MSG_FORE_COLOR, 0, h - messageHeight, w, messageHeight, false, HAlignment.CENTER, true); @@ -157,4 +161,9 @@ public class CardZoom extends FOverlay { @Override protected void doLayout(float width, float height) { } + + public static interface ActivateHandler { + String getActivateAction(int index); + void activate(int index); + } } diff --git a/forge-gui-mobile/src/forge/itemmanager/CardManager.java b/forge-gui-mobile/src/forge/itemmanager/CardManager.java index 0f1f9e839bb..abe393a7f80 100644 --- a/forge-gui-mobile/src/forge/itemmanager/CardManager.java +++ b/forge-gui-mobile/src/forge/itemmanager/CardManager.java @@ -14,11 +14,9 @@ import forge.itemmanager.filters.CardSearchFilter; import forge.itemmanager.filters.CardTypeFilter; import forge.itemmanager.filters.TextSearchFilter; import forge.toolbox.FList.CompactModeHandler; -import forge.util.Callback; /** * ItemManager for cards - * */ public class CardManager extends ItemManager { public CardManager(boolean wantUnique0) { @@ -62,24 +60,12 @@ public class CardManager extends ItemManager { @Override public boolean tap(Integer index, Entry value, float x, float y, int count) { - return CardRenderer.cardListItemTap(model.getOrderedList(), index, new Callback() { - @Override - public void run(Integer result) { - setSelectedIndex(result); - showMenu(true); - } - }, x, y, count, compactModeHandler.isCompactMode()); + return CardRenderer.cardListItemTap(model.getOrderedList(), index, CardManager.this, x, y, count, compactModeHandler.isCompactMode()); } @Override public boolean longPress(Integer index, Entry value, float x, float y) { - CardZoom.show(model.getOrderedList(), index, new Callback() { - @Override - public void run(Integer result) { - setSelectedIndex(result); - showMenu(true); - } - }); + CardZoom.show(model.getOrderedList(), index, CardManager.this); return true; } }; diff --git a/forge-gui-mobile/src/forge/itemmanager/ItemManager.java b/forge-gui-mobile/src/forge/itemmanager/ItemManager.java index 640cba8cff3..8325bfb799a 100644 --- a/forge-gui-mobile/src/forge/itemmanager/ItemManager.java +++ b/forge-gui-mobile/src/forge/itemmanager/ItemManager.java @@ -30,6 +30,7 @@ import forge.Graphics; import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.assets.FSkinImage; +import forge.card.CardZoom.ActivateHandler; import forge.item.InventoryItem; import forge.itemmanager.filters.ItemFilter; import forge.itemmanager.filters.TextSearchFilter; @@ -53,7 +54,7 @@ import java.util.*; import java.util.Map.Entry; -public abstract class ItemManager extends FContainer implements IItemManager { +public abstract class ItemManager extends FContainer implements IItemManager, ActivateHandler { private ItemPool pool; protected final ItemManagerModel model; private Predicate filterPredicate = null; @@ -1073,4 +1074,20 @@ public abstract class ItemManager extends FContainer im setBounds(Math.round(x), Math.round(y), Math.round(w), Math.round(h)); } } + + @Override + public String getActivateAction(int index) { + if (contextMenuBuilder != null) { + return "select card"; + } + return null; + } + + @Override + public void activate(int index) { + if (contextMenuBuilder != null) { + setSelectedIndex(index); + showMenu(true); + } + } } diff --git a/forge-gui-mobile/src/forge/itemmanager/SpellShopManager.java b/forge-gui-mobile/src/forge/itemmanager/SpellShopManager.java index 3da4c268c1b..0df164de6c6 100644 --- a/forge-gui-mobile/src/forge/itemmanager/SpellShopManager.java +++ b/forge-gui-mobile/src/forge/itemmanager/SpellShopManager.java @@ -19,7 +19,6 @@ import forge.itemmanager.filters.TextSearchFilter; import forge.quest.QuestSpellShop; import forge.toolbox.FList; import forge.toolbox.FList.CompactModeHandler; -import forge.util.Callback; public final class SpellShopManager extends ItemManager { @@ -89,13 +88,7 @@ public final class SpellShopManager extends ItemManager { @Override public boolean tap(Integer index, Entry value, float x, float y, int count) { if (value.getKey() instanceof PaperCard) { - return CardRenderer.cardListItemTap(model.getOrderedList(), index, new Callback() { - @Override - public void run(Integer result) { - setSelectedIndex(result); - showMenu(true); - } - }, x, y, count, compactModeHandler.isCompactMode()); + return CardRenderer.cardListItemTap(model.getOrderedList(), index, SpellShopManager.this, x, y, count, compactModeHandler.isCompactMode()); } return false; } @@ -103,13 +96,7 @@ public final class SpellShopManager extends ItemManager { @Override public boolean longPress(Integer index, Entry value, float x, float y) { if (value.getKey() instanceof PaperCard) { - CardZoom.show(model.getOrderedList(), index, new Callback() { - @Override - public void run(Integer result) { - setSelectedIndex(result); - showMenu(true); - } - }); + CardZoom.show(model.getOrderedList(), index, SpellShopManager.this); return true; } return false; diff --git a/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java b/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java index 38cc45faebf..39ddd6184f7 100644 --- a/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java +++ b/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java @@ -30,7 +30,6 @@ import forge.toolbox.FTextField; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FLabel; import forge.toolbox.FScrollPane; -import forge.util.Callback; import forge.util.Utils; import java.util.*; @@ -873,13 +872,7 @@ public class ImageView extends ItemView { public boolean longPress(float x, float y) { ItemInfo item = getItemAtPoint(x + getLeft(), y + getTop()); if (item != null) { - CardZoom.show(orderedItems, orderedItems.indexOf(item), new Callback() { - @Override - public void run(Integer result) { - setSelectedIndex(result); - itemManager.showMenu(true); - } - }); + CardZoom.show(orderedItems, orderedItems.indexOf(item), itemManager); return true; } return false; diff --git a/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java b/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java index ef6320fa720..2e387449cf8 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VCardDisplayArea.java @@ -11,13 +11,13 @@ import forge.FThreads; import forge.Graphics; import forge.card.CardZoom; import forge.card.CardRenderer.CardStackPosition; +import forge.card.CardZoom.ActivateHandler; import forge.game.card.CardView; import forge.match.MatchUtil; import forge.toolbox.FCardPanel; -import forge.util.Callback; import forge.util.ThreadUtil; -public abstract class VCardDisplayArea extends VDisplayArea { +public abstract class VCardDisplayArea extends VDisplayArea implements ActivateHandler { private static final float CARD_STACK_OFFSET = 0.2f; protected final List orderedCards = new ArrayList(); @@ -174,6 +174,16 @@ public abstract class VCardDisplayArea extends VDisplayArea { g.startClip(0, -h, getWidth(), 3 * h); } + @Override + public String getActivateAction(int index) { + return "activate card"; + } + + @Override + public void activate(int index) { + CardAreaPanel.get(orderedCards.get(index)).selectCard(false); + } + public static class CardAreaPanel extends FCardPanel { private static final Map allCardPanels = new HashMap(); @@ -317,12 +327,7 @@ public abstract class VCardDisplayArea extends VDisplayArea { private void showZoom() { final List cards = displayArea.orderedCards; - CardZoom.show(cards, cards.indexOf(getCard()), new Callback() { - @Override - public void run(Integer result) { - CardAreaPanel.get(cards.get(result)).selectCard(false); - } - }); + CardZoom.show(cards, cards.indexOf(getCard()), displayArea); } public void buildCardPanelList(List list) { diff --git a/forge-gui-mobile/src/forge/toolbox/FChoiceList.java b/forge-gui-mobile/src/forge/toolbox/FChoiceList.java index d7c76c32d4a..78d16dfd045 100644 --- a/forge-gui-mobile/src/forge/toolbox/FChoiceList.java +++ b/forge-gui-mobile/src/forge/toolbox/FChoiceList.java @@ -14,6 +14,7 @@ import forge.assets.FSkinColor.Colors; import forge.card.CardRenderer; import forge.card.CardZoom; import forge.card.CardRenderer.CardStackPosition; +import forge.card.CardZoom.ActivateHandler; import forge.game.card.CardView; import forge.game.player.PlayerView; import forge.game.spellability.SpellAbility; @@ -21,10 +22,9 @@ import forge.item.PaperCard; import forge.screens.match.MatchController; import forge.screens.match.views.VAvatar; import forge.screens.match.views.VStack; -import forge.util.Callback; import forge.util.Utils; -public class FChoiceList extends FList { +public class FChoiceList extends FList implements ActivateHandler { public static final FSkinColor ITEM_COLOR = FSkinColor.get(Colors.CLR_ZEBRA); public static final FSkinColor ALT_ITEM_COLOR = ITEM_COLOR.getContrastColor(-20); public static final FSkinColor SEL_COLOR = FSkinColor.get(Colors.CLR_ACTIVE); @@ -321,22 +321,12 @@ public class FChoiceList extends FList { @Override public boolean tap(Integer index, T value, float x, float y, int count) { - return CardRenderer.cardListItemTap(items, index, new Callback() { - @Override - public void run(Integer result) { - setSelectedIndex(result); - } - }, x, y, count, compactModeHandler.isCompactMode()); + return CardRenderer.cardListItemTap(items, index, FChoiceList.this, x, y, count, compactModeHandler.isCompactMode()); } @Override public boolean longPress(Integer index, T value, float x, float y) { - CardZoom.show(items, index, new Callback() { - @Override - public void run(Integer result) { - setSelectedIndex(result); - } - }); + CardZoom.show(items, index, FChoiceList.this); return true; } @@ -359,22 +349,12 @@ public class FChoiceList extends FList { @Override public boolean tap(Integer index, T value, float x, float y, int count) { - return CardRenderer.cardListItemTap(items, index, new Callback() { - @Override - public void run(Integer result) { - setSelectedIndex(result); - } - }, x, y, count, compactModeHandler.isCompactMode()); + return CardRenderer.cardListItemTap(items, index, FChoiceList.this, x, y, count, compactModeHandler.isCompactMode()); } @Override public boolean longPress(Integer index, T value, float x, float y) { - CardZoom.show(items, index, new Callback() { - @Override - public void run(Integer result) { - setSelectedIndex(result); - } - }); + CardZoom.show(items, index, FChoiceList.this); return true; } @@ -453,4 +433,19 @@ public class FChoiceList extends FList { g.drawText(player.getName() + " (" + player.getLife() + ")", font, foreColor, x, y, w, h, false, HAlignment.LEFT, true); } } + + @Override + public String getActivateAction(int index) { + if (maxChoices > 0) { + return "select card"; + } + return null; + } + + @Override + public void activate(int index) { + if (maxChoices > 0) { + setSelectedIndex(index); + } + } }