From 0d6fb1e7fdacbda135f69bb929457be98c39e002 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 29 Jul 2023 19:45:31 +0800 Subject: [PATCH] AdventureDeckEditor minor formatting, prevent NPE --- .../adventure/scene/AdventureDeckEditor.java | 1746 +++++++++-------- 1 file changed, 891 insertions(+), 855 deletions(-) diff --git a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java index dd9d946f0ec..eef5db91102 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java +++ b/forge-gui-mobile/src/forge/adventure/scene/AdventureDeckEditor.java @@ -62,7 +62,7 @@ public class AdventureDeckEditor extends TabPageScreen { @Override public void refresh() { - if (contents != null) cardManager.setPool(contents.getAllCardsInASinglePool()); + if (contents != null) cardManager.setPool(contents.getAllCardsInASinglePool()); } } @@ -234,8 +234,7 @@ public class AdventureDeckEditor extends TabPageScreen { if (showNoSellCards) { collectionPool.addAllFlat(AdventurePlayer.current().getNoSellCards().toFlatList()); collectionPool.removeAllFlat(cardsInUse.toFlatList()); - } - else{ + } else { cardsInUse.removeAllFlat(AdventurePlayer.current().getNoSellCards().toFlatList()); collectionPool.removeAllFlat(cardsInUse.toFlatList()); } @@ -446,13 +445,11 @@ public class AdventureDeckEditor extends TabPageScreen { new DeckSectionPage(DeckSection.Sideboard, ItemManagerConfig.SIDEBOARD)}; } - } - else if (event.format == AdventureEventController.EventFormat.Jumpstart){ + } else if (event.format == AdventureEventController.EventFormat.Jumpstart) { return new DeckEditorPage[]{ new DeckSectionPage(DeckSection.Main, ItemManagerConfig.DRAFT_POOL), new DeckSectionPage(DeckSection.Sideboard, ItemManagerConfig.SIDEBOARD)}; - } - else return new DeckEditorPage[]{}; + } else return new DeckEditorPage[]{}; } private static DeckEditorPage[] getPages(Deck deckToPreview) { @@ -528,15 +525,10 @@ public class AdventureDeckEditor extends TabPageScreen { protected void buildMenu() { addItem(new FMenuItem(Forge.getLocalizer().getMessage("btnCopyToClipboard"), Forge.hdbuttons ? FSkinImage.HDEXPORT : FSkinImage.BLANK, e1 -> FDeckViewer.copyDeckToClipboard(getDeck()))); if (allowsAddBasic()) { - FMenuItem addBasic = new FMenuItem(Forge.getLocalizer().getMessage("lblAddBasicLands"), FSkinImage.LANDLOGO, new FEvent.FEventHandler() { - @Override - public void handleEvent(FEvent e) { - launchBasicLandDialog(); - } - }); + FMenuItem addBasic = new FMenuItem(Forge.getLocalizer().getMessage("lblAddBasicLands"), FSkinImage.LANDLOGO, e1 -> launchBasicLandDialog()); addItem(addBasic); } - if (!isShop && catalogPage != null && !(catalogPage instanceof ContentPreviewPage) ) { + if (!isShop && catalogPage != null && !(catalogPage instanceof ContentPreviewPage)) { if (catalogPage.showNoSellCards) { FMenuItem hideNoSell = new FMenuItem("Hide No-Sell cards", Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS, e1 -> catalogPage.toggleNoSellCards(false)); addItem(hideNoSell); @@ -571,927 +563,971 @@ public class AdventureDeckEditor extends TabPageScreen { } - protected void launchBasicLandDialog(){ - CardEdition defaultLandSet; - //suggest a random set from the ones used in the limited card pool that have all basic lands - Set availableEditionCodes = new HashSet<>(); - for (PaperCard p : currentEvent.registeredDeck.getAllCardsInASinglePool().toFlatList()) { - availableEditionCodes.add(FModel.getMagicDb().getEditions().get(p.getEdition())); - } - defaultLandSet = CardEdition.Predicates.getRandomSetWithAllBasicLands(availableEditionCodes); + protected void launchBasicLandDialog() { + CardEdition defaultLandSet; + //suggest a random set from the ones used in the limited card pool that have all basic lands + Set availableEditionCodes = new HashSet<>(); + for (PaperCard p : currentEvent.registeredDeck.getAllCardsInASinglePool().toFlatList()) { + availableEditionCodes.add(FModel.getMagicDb().getEditions().get(p.getEdition())); + } + defaultLandSet = CardEdition.Predicates.getRandomSetWithAllBasicLands(availableEditionCodes); - if (defaultLandSet == null) { - defaultLandSet = FModel.getMagicDb().getEditions().get("JMP"); - } + if (defaultLandSet == null) { + defaultLandSet = FModel.getMagicDb().getEditions().get("JMP"); + } - AddBasicLandsDialog dialog = new AddBasicLandsDialog(currentEvent.registeredDeck, defaultLandSet, new Callback() { + AddBasicLandsDialog dialog = new AddBasicLandsDialog(currentEvent.registeredDeck, defaultLandSet, new Callback() { + @Override + public void run(CardPool landsToAdd) { + getMainDeckPage().addCards(landsToAdd); + } + }); + dialog.show(); + setSelectedPage(getMainDeckPage()); //select main deck page if needed so main deck is visible below dialog + } + + protected boolean allowsAddBasic() { + if (currentEvent == null || !currentEvent.eventRules.allowsAddBasicLands) + return false; + if (currentEvent.eventStatus == AdventureEventController.EventStatus.Entered && currentEvent.isDraftComplete) + return true; + else return currentEvent.eventStatus == AdventureEventController.EventStatus.Ready; + } + + @Override + protected void doLayout(float startY, float width, float height) { + if (deckHeader.isVisible()) { + deckHeader.setBounds(0, startY, width, HEADER_HEIGHT); + startY += HEADER_HEIGHT; + } + super.doLayout(startY, width, height); + } + + public Deck getDeck() { + if (currentEvent == null) + return AdventurePlayer.current().getSelectedDeck(); + else + return currentEvent.registeredDeck; + } + + protected CatalogPage getCatalogPage() { + return catalogPage; + } + + protected static DeckSectionPage getMainDeckPage() { + return mainDeckPage; + } + + protected static DeckSectionPage getSideboardPage() { + return sideboardPage; + } + + protected DeckSectionPage getCommanderPage() { + return commanderPage; + } + + @Override + public void onClose(final Callback canCloseCallback) { + String errorMessage = GameType.Adventure.getDeckFormat().getDeckConformanceProblem(getDeck()); + if (errorMessage != null) { + FOptionPane.showErrorDialog(errorMessage); + } + + if (currentEvent.getDraft() != null && !isShop) { + if (currentEvent.isDraftComplete || canCloseCallback == null) { + super.onClose(canCloseCallback); //can skip prompt if draft saved + return; + } + FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessageorUseDefault("lblEndAdventureEventConfirm", "This will end the current event, and your entry fee will not be refunded.\n\nLeave anyway?"), Forge.getLocalizer().getMessage("lblLeaveDraft"), Forge.getLocalizer().getMessage("lblLeave"), Forge.getLocalizer().getMessage("lblCancel"), false, canCloseCallback); + } + } + + @Override + public FScreen getLandscapeBackdropScreen() { + return null; //never use backdrop for editor + } + + protected class DeckHeader extends FContainer { + private DeckHeader() { + setHeight(HEADER_HEIGHT); + } + + boolean init; + + @Override + public void drawBackground(Graphics g) { + g.fillRect(Header.getBackColor(), 0, 0, getWidth(), HEADER_HEIGHT); + } + + @Override + public void drawOverlay(Graphics g) { + float y = HEADER_HEIGHT - Header.LINE_THICKNESS / 2; + g.drawLine(Header.LINE_THICKNESS, Header.getLineColor(), 0, y, getWidth(), y); + } + + @Override + protected void doLayout(float width, float height) { + float x = 0; + lblName.setBounds(0, 0, width - 2 * height, height); + x += lblName.getWidth(); + //noinspection SuspiciousNameCombination + x += height; + //noinspection SuspiciousNameCombination + btnMoreOptions.setBounds(x, 0, height, height); + if (!init) { + add(lblGold); + init = true; + } + lblGold.setBounds(0, 0, width, height); + } + } + + protected static abstract class DeckEditorPage extends TabPage { + protected DeckEditorPage(String caption0, FImage icon0) { + super(caption0, icon0); + } + + protected void buildDeckMenu(FPopupMenu menu) { + } + + protected abstract void initialize(); + + @Override + public boolean fling(float velocityX, float velocityY) { + return false; //prevent left/right swipe to change tabs since it doesn't play nice with item managers + } + } + + protected static abstract class CardManagerPage extends DeckEditorPage { + private final ItemManagerConfig config; + protected final CardManager cardManager = add(new CardManager(false)); + + protected CardManagerPage(ItemManagerConfig config0, String caption0, FImage icon0) { + super(caption0, icon0); + config = config0; + cardManager.setItemActivateHandler(e -> CardManagerPage.this.onCardActivated(cardManager.getSelectedItem())); + cardManager.setContextMenuBuilder(new ItemManager.ContextMenuBuilder() { @Override - public void run(CardPool landsToAdd) { - getMainDeckPage().addCards(landsToAdd); + public void buildMenu(final FDropDownMenu menu, final PaperCard card) { + CardManagerPage.this.buildMenu(menu, card); } }); - dialog.show(); - setSelectedPage(getMainDeckPage()); //select main deck page if needed so main deck is visible below dialog } - protected boolean allowsAddBasic() { - if (currentEvent == null || !currentEvent.eventRules.allowsAddBasicLands) - return false; - if (currentEvent.eventStatus == AdventureEventController.EventStatus.Entered && currentEvent.isDraftComplete) - return true; - else return currentEvent.eventStatus == AdventureEventController.EventStatus.Ready; + private final Function, Comparable> fnNewCompare = from -> AdventurePlayer.current().getNewCards().contains((PaperCard) from.getKey()) ? Integer.valueOf(1) : Integer.valueOf(0); + private final Function, Object> fnNewGet = from -> AdventurePlayer.current().getNewCards().contains((PaperCard) from.getKey()) ? "NEW" : ""; + public static final Function, Comparable> fnDeckCompare = from -> decksUsingMyCards.count(from.getKey()); + public static final Function, Object> fnDeckGet = from -> Integer.valueOf(decksUsingMyCards.count(from.getKey())).toString(); + + protected void initialize() { + + Map colOverrides = new HashMap<>(); + ItemColumn.addColOverride(config, colOverrides, ColumnDef.NEW, fnNewCompare, fnNewGet); + ItemColumn.addColOverride(config, colOverrides, ColumnDef.DECKS, fnDeckCompare, fnDeckGet); + + cardManager.setup(config, colOverrides); } - @Override - protected void doLayout(float startY, float width, float height) { - if (deckHeader.isVisible()) { - deckHeader.setBounds(0, startY, width, HEADER_HEIGHT); - startY += HEADER_HEIGHT; + protected boolean canAddCards() { + return true; + } + + public void addCard(PaperCard card) { + addCard(card, 1); + } + + public void addCard(PaperCard card, int qty) { + if (canAddCards()) { + cardManager.addItem(card, qty); + updateCaption(); } - super.doLayout(startY, width, height); - } - public Deck getDeck() { - if (currentEvent == null) - return AdventurePlayer.current().getSelectedDeck(); - else - return currentEvent.registeredDeck; - } - protected CatalogPage getCatalogPage() { - return catalogPage; } - protected static DeckSectionPage getMainDeckPage() { - return mainDeckPage; + + public void removeCard(PaperCard card) { + removeCard(card, 1); } - protected static DeckSectionPage getSideboardPage() { - return sideboardPage; + public void removeCard(PaperCard card, int qty) { + cardManager.removeItem(card, qty); + updateCaption(); } - protected DeckSectionPage getCommanderPage() { - return commanderPage; + public void setCards(CardPool cards) { + cardManager.setItems(cards); + updateCaption(); } - @Override - public void onClose(final Callback canCloseCallback) { - String errorMessage = GameType.Adventure.getDeckFormat().getDeckConformanceProblem(getDeck()); - if(errorMessage != null) { - FOptionPane.showErrorDialog(errorMessage); - } + protected void updateCaption() { + } - if (currentEvent.getDraft() != null && !isShop) { - if (currentEvent.isDraftComplete || canCloseCallback == null) { - super.onClose(canCloseCallback); //can skip prompt if draft saved - return; + protected abstract void onCardActivated(PaperCard card); + + protected abstract void buildMenu(final FDropDownMenu menu, final PaperCard card); + + private ItemPool getAllowedAdditions(Iterable> itemsToAdd, boolean isAddSource) { + ItemPool additions = new ItemPool<>(cardManager.getGenericType()); + Deck deck = parentScreen.getDeck(); + + for (Map.Entry itemEntry : itemsToAdd) { + PaperCard card = itemEntry.getKey(); + + int max; + if (deck == null || card == null) { + max = Integer.MAX_VALUE; + } else if (DeckFormat.canHaveAnyNumberOf(card)) { + max = Integer.MAX_VALUE; + } else { + max = FModel.getPreferences().getPrefInt(ForgePreferences.FPref.DECK_DEFAULT_CARD_LIMIT); + + Integer cardCopies = DeckFormat.canHaveSpecificNumberInDeck(card); + if (cardCopies != null) { + max = cardCopies; + } + + max -= deck.getAllCardsInASinglePool().countAll(paperCard -> paperCard.getCardName().equals(card.getCardName())); } - FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessageorUseDefault("lblEndAdventureEventConfirm", "This will end the current event, and your entry fee will not be refunded.\n\nLeave anyway?"), Forge.getLocalizer().getMessage("lblLeaveDraft"), Forge.getLocalizer().getMessage("lblLeave"), Forge.getLocalizer().getMessage("lblCancel"), false, canCloseCallback); - } - } - @Override - public FScreen getLandscapeBackdropScreen() { - return null; //never use backdrop for editor - } - - protected class DeckHeader extends FContainer { - private DeckHeader() { - setHeight(HEADER_HEIGHT); - } - boolean init; - - @Override - public void drawBackground(Graphics g) { - g.fillRect(Header.getBackColor(), 0, 0, getWidth(), HEADER_HEIGHT); - } - - @Override - public void drawOverlay(Graphics g) { - float y = HEADER_HEIGHT - Header.LINE_THICKNESS / 2; - g.drawLine(Header.LINE_THICKNESS, Header.getLineColor(), 0, y, getWidth(), y); - } - - @Override - protected void doLayout(float width, float height) { - float x = 0; - lblName.setBounds(0, 0, width - 2 * height, height); - x += lblName.getWidth(); - //noinspection SuspiciousNameCombination - x += height; - //noinspection SuspiciousNameCombination - btnMoreOptions.setBounds(x, 0, height, height); - if (!init) { - add(lblGold); - init = true; + int qty; + if (isAddSource) { + qty = itemEntry.getValue(); + } else { + try { + qty = parentScreen.getCatalogPage().cardManager.getItemCount(card); + } catch (Exception e) { + //prevent NPE + qty = 0; + } + } + if (qty > max) { + qty = max; + } + if (qty > 0) { + additions.add(card, qty); } - lblGold.setBounds(0, 0, width, height); } + + return additions; } - protected static abstract class DeckEditorPage extends TabPage { - protected DeckEditorPage(String caption0, FImage icon0) { - super(caption0, icon0); + protected int getMaxMoveQuantity(boolean isAddMenu, boolean isAddSource) { + ItemPool selectedItemPool = cardManager.getSelectedItemPool(); + if (isAddMenu) { + selectedItemPool = getAllowedAdditions(selectedItemPool, isAddSource); } - - protected void buildDeckMenu(FPopupMenu menu) { + if (selectedItemPool.isEmpty()) { + return 0; } - - protected abstract void initialize(); - - @Override - public boolean fling(float velocityX, float velocityY) { - return false; //prevent left/right swipe to change tabs since it doesn't play nice with item managers + int max = Integer.MAX_VALUE; + for (Map.Entry itemEntry : selectedItemPool) { + if (itemEntry.getValue() < max) { + max = itemEntry.getValue(); + } } + return max; } - protected static abstract class CardManagerPage extends DeckEditorPage { - private final ItemManagerConfig config; - protected final CardManager cardManager = add(new CardManager(false)); + protected void addItem(FDropDownMenu menu, final String verb, String dest, FImage icon, boolean isAddMenu, boolean isAddSource, final Callback callback) { + final int max = getMaxMoveQuantity(isAddMenu, isAddSource); + if (max == 0) { + return; + } - protected CardManagerPage(ItemManagerConfig config0, String caption0, FImage icon0) { - super(caption0, icon0); - config = config0; - cardManager.setItemActivateHandler(e -> CardManagerPage.this.onCardActivated(cardManager.getSelectedItem())); - cardManager.setContextMenuBuilder(new ItemManager.ContextMenuBuilder() { + String label = verb; + if (!StringUtils.isEmpty(dest)) { + label += " " + dest; + } + menu.addItem(new FMenuItem(label, icon, e -> { + if (max == 1) { + callback.run(max); + } else { + GuiChoose.getInteger(cardManager.getSelectedItem() + " - " + verb + " " + Forge.getLocalizer().getMessage("lblHowMany"), 1, max, 20, callback); + } + })); + } + + protected void addCommanderItems(final FDropDownMenu menu, final PaperCard card, boolean isAddMenu, boolean isAddSource) { + if (parentScreen.getCommanderPage() == null || card == null) { + return; + } + boolean isLegalCommander; + String captionSuffix = Forge.getLocalizer().getMessage("lblCommander"); + isLegalCommander = DeckFormat.Commander.isLegalCommander(card.getRules()); + if (isLegalCommander && !parentScreen.getCommanderPage().cardManager.getPool().contains(card)) { + addItem(menu, "Set", "as " + captionSuffix, parentScreen.getCommanderPage().getIcon(), isAddMenu, isAddSource, new Callback() { @Override - public void buildMenu(final FDropDownMenu menu, final PaperCard card) { - CardManagerPage.this.buildMenu(menu, card); + public void run(Integer result) { + if (result == null || result <= 0) { + return; + } + setCommander(card); } }); } - private final Function, Comparable> fnNewCompare = from -> AdventurePlayer.current().getNewCards().contains((PaperCard) from.getKey()) ? Integer.valueOf(1) : Integer.valueOf(0); - private final Function, Object> fnNewGet = from -> AdventurePlayer.current().getNewCards().contains((PaperCard) from.getKey()) ? "NEW" : ""; - public static final Function, Comparable> fnDeckCompare = from -> decksUsingMyCards.count(from.getKey()); - public static final Function, Object> fnDeckGet = from -> Integer.valueOf(decksUsingMyCards.count(from.getKey())).toString(); - - protected void initialize() { - - Map colOverrides = new HashMap<>(); - ItemColumn.addColOverride(config, colOverrides, ColumnDef.NEW, fnNewCompare, fnNewGet); - ItemColumn.addColOverride(config, colOverrides, ColumnDef.DECKS, fnDeckCompare, fnDeckGet); - - cardManager.setup(config, colOverrides); - } - - protected boolean canAddCards() { - return true; - } - - public void addCard(PaperCard card) { - addCard(card, 1); - } - public void addCard(PaperCard card, int qty) { - if (canAddCards()) { - cardManager.addItem(card, qty); - updateCaption(); - } - } - - - public void removeCard(PaperCard card) { - removeCard(card, 1); - } - public void removeCard(PaperCard card, int qty) { - cardManager.removeItem(card, qty); - updateCaption(); - } - - public void setCards(CardPool cards) { - cardManager.setItems(cards); - updateCaption(); - } - - protected void updateCaption() { - } - - protected abstract void onCardActivated(PaperCard card); - protected abstract void buildMenu(final FDropDownMenu menu, final PaperCard card); - - private ItemPool getAllowedAdditions(Iterable> itemsToAdd, boolean isAddSource) { - ItemPool additions = new ItemPool<>(cardManager.getGenericType()); - Deck deck = parentScreen.getDeck(); - - for (Map.Entry itemEntry : itemsToAdd) { - PaperCard card = itemEntry.getKey(); - - int max; - if (deck == null || card == null) { - max = Integer.MAX_VALUE; - } - else if (DeckFormat.canHaveAnyNumberOf(card)) { - max = Integer.MAX_VALUE; - } - else { - max = FModel.getPreferences().getPrefInt(ForgePreferences.FPref.DECK_DEFAULT_CARD_LIMIT); - - Integer cardCopies = DeckFormat.canHaveSpecificNumberInDeck(card); - if (cardCopies != null) { - max = cardCopies; + if (canHavePartnerCommander() && card.getRules().canBePartnerCommander()) { + addItem(menu, "Set", "as Partner " + captionSuffix, parentScreen.getCommanderPage().getIcon(), isAddMenu, isAddSource, new Callback() { + @Override + public void run(Integer result) { + if (result == null || result <= 0) { + return; } - - max -= deck.getAllCardsInASinglePool().countAll(paperCard -> paperCard.getCardName().equals(card.getCardName())); + setPartnerCommander(card); } - - int qty; - if (isAddSource) { - qty = itemEntry.getValue(); - } - else { - try { - qty = parentScreen.getCatalogPage().cardManager.getItemCount(card); - } catch (Exception e) { - //prevent NPE - qty = 0; + }); + } + if (canHaveSignatureSpell() && card.getRules().canBeSignatureSpell()) { + addItem(menu, "Set", "as Signature Spell", FSkinImage.SORCERY, isAddMenu, isAddSource, new Callback() { + @Override + public void run(Integer result) { + if (result == null || result <= 0) { + return; } + setSignatureSpell(card); } - if (qty > max) { - qty = max; - } - if (qty > 0) { - additions.add(card, qty); - } - } - - return additions; - } - - protected int getMaxMoveQuantity(boolean isAddMenu, boolean isAddSource) { - ItemPool selectedItemPool = cardManager.getSelectedItemPool(); - if (isAddMenu) { - selectedItemPool = getAllowedAdditions(selectedItemPool, isAddSource); - } - if (selectedItemPool.isEmpty()) { - return 0; - } - int max = Integer.MAX_VALUE; - for (Map.Entry itemEntry : selectedItemPool) { - if (itemEntry.getValue() < max) { - max = itemEntry.getValue(); - } - } - return max; - } - - protected void addItem(FDropDownMenu menu, final String verb, String dest, FImage icon, boolean isAddMenu, boolean isAddSource, final Callback callback) { - final int max = getMaxMoveQuantity(isAddMenu, isAddSource); - if (max == 0) { return; } - - String label = verb; - if (!StringUtils.isEmpty(dest)) { - label += " " + dest; - } - menu.addItem(new FMenuItem(label, icon, e -> { - if (max == 1) { - callback.run(max); - } else { - GuiChoose.getInteger(cardManager.getSelectedItem() + " - " + verb + " " + Forge.getLocalizer().getMessage("lblHowMany"), 1, max, 20, callback); - } - })); - } - - protected void addCommanderItems(final FDropDownMenu menu, final PaperCard card, boolean isAddMenu, boolean isAddSource) { - if (parentScreen.getCommanderPage() == null || card == null) { - return; - } - boolean isLegalCommander; - String captionSuffix = Forge.getLocalizer().getMessage("lblCommander"); - isLegalCommander = DeckFormat.Commander.isLegalCommander(card.getRules()); - if (isLegalCommander && !parentScreen.getCommanderPage().cardManager.getPool().contains(card)) { - addItem(menu, "Set", "as " + captionSuffix, parentScreen.getCommanderPage().getIcon(), isAddMenu, isAddSource, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { return; } - setCommander(card); - } - }); - } - if (canHavePartnerCommander() && card.getRules().canBePartnerCommander()) { - addItem(menu, "Set", "as Partner " + captionSuffix, parentScreen.getCommanderPage().getIcon(), isAddMenu, isAddSource, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { return; } - setPartnerCommander(card); - } - }); - } - if (canHaveSignatureSpell() && card.getRules().canBeSignatureSpell()) { - addItem(menu, "Set", "as Signature Spell", FSkinImage.SORCERY, isAddMenu, isAddSource, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { return; } - setSignatureSpell(card); - } - }); - } - } - - protected boolean needsCommander() { - return parentScreen.getCommanderPage() != null && parentScreen.getDeck().getCommanders().isEmpty(); - } - - protected boolean canHavePartnerCommander() { - return parentScreen.getCommanderPage() != null && parentScreen.getDeck().getCommanders().size() == 1 - && parentScreen.getDeck().getCommanders().get(0).getRules().canBePartnerCommander(); - } - - protected boolean canOnlyBePartnerCommander(final PaperCard card) { - if (parentScreen.getCommanderPage() == null) { - return false; - } - - byte cmdCI = 0; - for (final PaperCard p : parentScreen.getDeck().getCommanders()) { - cmdCI |= p.getRules().getColorIdentity().getColor(); - } - - return !card.getRules().getColorIdentity().hasNoColorsExcept(cmdCI); - } - - protected boolean canHaveSignatureSpell() { - return parentScreen.getDeck().getOathbreaker() != null; - } - - protected void setCommander(PaperCard card) { - if (!cardManager.isInfinite()) { - removeCard(card); - } - CardPool newPool = new CardPool(); - newPool.add(card); - parentScreen.getCommanderPage().setCards(newPool); - refresh(); //refresh so cards shown that match commander's color identity - } - - protected void setPartnerCommander(PaperCard card) { - if (!cardManager.isInfinite()) { - removeCard(card); - } - parentScreen.getCommanderPage().addCard(card); - refresh(); //refresh so cards shown that match commander's color identity - } - - protected void setSignatureSpell(PaperCard card) { - if (!cardManager.isInfinite()) { - removeCard(card); - } - PaperCard signatureSpell = parentScreen.getDeck().getSignatureSpell(); - if (signatureSpell != null) { - parentScreen.getCommanderPage().removeCard(signatureSpell); //remove existing signature spell if any - } - parentScreen.getCommanderPage().addCard(card); - //refreshing isn't needed since color identity won't change from signature spell - } - - public void refresh() { - //not needed by default - } - - @Override - protected void doLayout(float width, float height) { - float x = 0; - if (Forge.isLandscapeMode()) { //add some horizontal padding in landscape mode - x = ItemFilter.PADDING; - width -= 2 * x; - } - cardManager.setBounds(x, 0, width, height); + }); } } - protected static class CatalogPage extends CardManagerPage { - private boolean initialized, needRefreshWhenShown; + protected boolean needsCommander() { + return parentScreen.getCommanderPage() != null && parentScreen.getDeck().getCommanders().isEmpty(); + } - boolean showCollectionCards = true, showAutoSellCards = false, showNoSellCards = true; - public void showAllCards() { - showCollectionCards = true; - showAutoSellCards = true; - showNoSellCards = true; + protected boolean canHavePartnerCommander() { + return parentScreen.getCommanderPage() != null && parentScreen.getDeck().getCommanders().size() == 1 + && parentScreen.getDeck().getCommanders().get(0).getRules().canBePartnerCommander(); + } + + protected boolean canOnlyBePartnerCommander(final PaperCard card) { + if (parentScreen.getCommanderPage() == null) { + return false; + } + + byte cmdCI = 0; + for (final PaperCard p : parentScreen.getDeck().getCommanders()) { + cmdCI |= p.getRules().getColorIdentity().getColor(); + } + + return !card.getRules().getColorIdentity().hasNoColorsExcept(cmdCI); + } + + protected boolean canHaveSignatureSpell() { + return parentScreen.getDeck().getOathbreaker() != null; + } + + protected void setCommander(PaperCard card) { + if (!cardManager.isInfinite()) { + removeCard(card); + } + CardPool newPool = new CardPool(); + newPool.add(card); + parentScreen.getCommanderPage().setCards(newPool); + refresh(); //refresh so cards shown that match commander's color identity + } + + protected void setPartnerCommander(PaperCard card) { + if (!cardManager.isInfinite()) { + removeCard(card); + } + parentScreen.getCommanderPage().addCard(card); + refresh(); //refresh so cards shown that match commander's color identity + } + + protected void setSignatureSpell(PaperCard card) { + if (!cardManager.isInfinite()) { + removeCard(card); + } + PaperCard signatureSpell = parentScreen.getDeck().getSignatureSpell(); + if (signatureSpell != null) { + parentScreen.getCommanderPage().removeCard(signatureSpell); //remove existing signature spell if any + } + parentScreen.getCommanderPage().addCard(card); + //refreshing isn't needed since color identity won't change from signature spell + } + + public void refresh() { + //not needed by default + } + + @Override + protected void doLayout(float width, float height) { + float x = 0; + if (Forge.isLandscapeMode()) { //add some horizontal padding in landscape mode + x = ItemFilter.PADDING; + width -= 2 * x; + } + cardManager.setBounds(x, 0, width, height); + } + } + + protected static class CatalogPage extends CardManagerPage { + private boolean initialized, needRefreshWhenShown; + + boolean showCollectionCards = true, showAutoSellCards = false, showNoSellCards = true; + + public void showAllCards() { + showCollectionCards = true; + showAutoSellCards = true; + showNoSellCards = true; + refresh(); + } + + public void toggleCollectionCards(boolean show) { + showCollectionCards = show; + refresh(); + } + + public void toggleAutoSellCards(boolean show) { + showAutoSellCards = show; + refresh(); + } + + public void toggleNoSellCards(boolean show) { + showNoSellCards = show; + refresh(); + } + + protected CatalogPage(ItemManagerConfig config, String caption0, FImage icon0) { + super(config, caption0, icon0); + refresh(); + } + + private void setNextSelected() { + setNextSelected(1); + } + + private void setNextSelected(int val) { + if (cardManager.getItemCount() < 1) + return; + if ((cardManager.getSelectedIndex() + val) < cardManager.getItemCount()) { + cardManager.setSelectedIndex(cardManager.getSelectedIndex() + val); + } else if ((cardManager.getSelectedIndex() + 1) < cardManager.getItemCount()) { + cardManager.setSelectedIndex(cardManager.getSelectedIndex() + 1); + } + } + + private void setPreviousSelected() { + setPreviousSelected(1); + } + + private void setPreviousSelected(int val) { + if (cardManager.getItemCount() < 1) + return; + if ((cardManager.getSelectedIndex() - val) > -1) { + cardManager.setSelectedIndex(cardManager.getSelectedIndex() - val); + } else if ((cardManager.getSelectedIndex() - 1) > -1) { + cardManager.setSelectedIndex(cardManager.getSelectedIndex() - 1); + } + } + + @Override + protected void initialize() { + if (initialized) { + return; + } //prevent initializing more than once if deck changes + initialized = true; + + super.initialize(); + cardManager.setCaption(getItemManagerCaption()); + + if (!isVisible()) { + needRefreshWhenShown = true; + } + } + + @Override + protected boolean canAddCards() { + if (needRefreshWhenShown) { //ensure refreshed before cards added if hasn't been refreshed yet + needRefreshWhenShown = false; refresh(); } + return !cardManager.isInfinite(); + } - public void toggleCollectionCards(boolean show) { - showCollectionCards = show; + protected String getItemManagerCaption() { + return Forge.getLocalizer().getMessage("lblCards"); + } + + @Override + public void setVisible(boolean visible0) { + if (isVisible() == visible0) { + return; + } + + super.setVisible(visible0); + if (visible0 && needRefreshWhenShown) { + needRefreshWhenShown = false; refresh(); } + } - public void toggleAutoSellCards(boolean show) { - showAutoSellCards = show; - refresh(); + @Override + public void refresh() { + final ItemPool adventurePool = new ItemPool<>(PaperCard.class); + + final ItemPool cardsInUse = new ItemPool<>(PaperCard.class); + cardsInUse.addAll(AdventurePlayer.current().getSelectedDeck().getMain()); + cardsInUse.addAll(AdventurePlayer.current().getSelectedDeck().getOrCreate(DeckSection.Sideboard)); + + if (showCollectionCards) { + adventurePool.addAll(AdventurePlayer.current().getCollectionCards(false)); + } + if (showNoSellCards) { + adventurePool.addAll(AdventurePlayer.current().getNoSellCards()); + adventurePool.removeAll(cardsInUse); + } else { + cardsInUse.removeAll(AdventurePlayer.current().getNoSellCards()); + adventurePool.removeAll(cardsInUse); + } + if (showAutoSellCards) { + adventurePool.addAll(AdventurePlayer.current().getAutoSellCards()); } - public void toggleNoSellCards(boolean show) { - showNoSellCards = show; - refresh(); + cardManager.setPool(adventurePool); + } + + @Override + protected void onCardActivated(PaperCard card) { + if (getMaxMoveQuantity(true, true) == 0) { + return; //don't add card if maximum copies of card already in deck } - - protected CatalogPage(ItemManagerConfig config, String caption0, FImage icon0) { - super(config, caption0, icon0); - refresh(); + if (needsCommander()) { + setCommander(card); //handle special case of setting commander + return; } - private void setNextSelected() { - setNextSelected(1); + if (canOnlyBePartnerCommander(card)) { + return; //don't auto-change commander unexpectedly } - private void setNextSelected(int val) { - if (cardManager.getItemCount() < 1) - return; - if ((cardManager.getSelectedIndex()+val) < cardManager.getItemCount()) { - cardManager.setSelectedIndex(cardManager.getSelectedIndex()+val); - } else if ((cardManager.getSelectedIndex()+1) < cardManager.getItemCount()) { - cardManager.setSelectedIndex(cardManager.getSelectedIndex()+1); - } - } - private void setPreviousSelected() { - setPreviousSelected(1); - } - private void setPreviousSelected(int val) { - if (cardManager.getItemCount() < 1) - return; - if ((cardManager.getSelectedIndex()-val) > -1) { - cardManager.setSelectedIndex(cardManager.getSelectedIndex()-val); - } else if ((cardManager.getSelectedIndex()-1) > -1) { - cardManager.setSelectedIndex(cardManager.getSelectedIndex()-1); - } + if (!cardManager.isInfinite()) { + removeCard(card); } + getMainDeckPage().addCard(card); + } - @Override - protected void initialize() { - if (initialized) { return; } //prevent initializing more than once if deck changes - initialized = true; + @Override + protected void buildMenu(final FDropDownMenu menu, final PaperCard card) { + if (!needsCommander() && !canOnlyBePartnerCommander(card)) { + if (!parentScreen.isShop) { + addItem(menu, Forge.getLocalizer().getMessage("lblAdd"), Forge.getLocalizer().getMessage("lblTo") + " " + getMainDeckPage().cardManager.getCaption(), getMainDeckPage().getIcon(), true, true, new Callback() { + @Override + public void run(Integer result) { + if (result == null || result <= 0) { + return; + } - super.initialize(); - cardManager.setCaption(getItemManagerCaption()); - - if (!isVisible() ) { - needRefreshWhenShown = true; - return; - } - } - - @Override - protected boolean canAddCards() { - if (needRefreshWhenShown) { //ensure refreshed before cards added if hasn't been refreshed yet - needRefreshWhenShown = false; - refresh(); - } - return !cardManager.isInfinite(); - } - - protected String getItemManagerCaption() { - return Forge.getLocalizer().getMessage("lblCards"); - } - - @Override - public void setVisible(boolean visible0) { - if (isVisible() == visible0) { return; } - - super.setVisible(visible0); - if (visible0 && needRefreshWhenShown) { - needRefreshWhenShown = false; - refresh(); - } - } - - @Override - public void refresh() { - final ItemPool adventurePool = new ItemPool<>(PaperCard.class); - - final ItemPool cardsInUse = new ItemPool<>(PaperCard.class); - cardsInUse.addAll(AdventurePlayer.current().getSelectedDeck().getMain()); - cardsInUse.addAll(AdventurePlayer.current().getSelectedDeck().getOrCreate(DeckSection.Sideboard)); - - if (showCollectionCards) { - adventurePool.addAll(AdventurePlayer.current().getCollectionCards(false)); - } - if (showNoSellCards) { - adventurePool.addAll(AdventurePlayer.current().getNoSellCards()); - adventurePool.removeAll(cardsInUse); - } - else{ - cardsInUse.removeAll(AdventurePlayer.current().getNoSellCards()); - adventurePool.removeAll(cardsInUse); - } - if (showAutoSellCards) { - adventurePool.addAll(AdventurePlayer.current().getAutoSellCards()); - } - - cardManager.setPool(adventurePool); - } - - @Override - protected void onCardActivated(PaperCard card) { - if (getMaxMoveQuantity(true, true) == 0) { - return; //don't add card if maximum copies of card already in deck - } - if (needsCommander()) { - setCommander(card); //handle special case of setting commander - return; - } - if (canOnlyBePartnerCommander(card)) { - return; //don't auto-change commander unexpectedly - } - if (!cardManager.isInfinite()) { - removeCard(card); - } - getMainDeckPage().addCard(card); - } - - @Override - protected void buildMenu(final FDropDownMenu menu, final PaperCard card) { - if (!needsCommander() && !canOnlyBePartnerCommander(card)) { - if(!parentScreen.isShop) - { - addItem(menu, Forge.getLocalizer().getMessage("lblAdd"), Forge.getLocalizer().getMessage("lblTo") + " " + getMainDeckPage().cardManager.getCaption(), getMainDeckPage().getIcon(), true, true, new Callback() { + if (!cardManager.isInfinite()) { + removeCard(card, result); + } + getMainDeckPage().addCard(card, result); + } + }); + if (getSideboardPage() != null) { + addItem(menu, Forge.getLocalizer().getMessage("lblAdd"), Forge.getLocalizer().getMessage("lbltosideboard"), getSideboardPage().getIcon(), true, true, new Callback() { @Override public void run(Integer result) { - if (result == null || result <= 0) { return; } + if (result == null || result <= 0) { + return; + } if (!cardManager.isInfinite()) { removeCard(card, result); } - getMainDeckPage().addCard(card, result); + getSideboardPage().addCard(card, result); } }); - if (getSideboardPage() != null) { - addItem(menu, Forge.getLocalizer().getMessage("lblAdd"), Forge.getLocalizer().getMessage("lbltosideboard"), getSideboardPage().getIcon(), true, true, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { return; } - - if (!cardManager.isInfinite()) { - removeCard(card, result); - } - getSideboardPage().addCard(card, result); - } - }); - } } } - - - addCommanderItems(menu, card, true, true); - } - @Override - protected void buildDeckMenu(FPopupMenu menu) { - if (cardManager.getConfig().getShowUniqueCardsOption()) { - menu.addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblUniqueCardsOnly"), cardManager.getWantUnique(), e -> { - boolean wantUnique = !cardManager.getWantUnique(); - cardManager.setWantUnique(wantUnique); - CatalogPage.this.refresh(); - cardManager.getConfig().setUniqueCardsOnly(wantUnique); - })); - } + + addCommanderItems(menu, card, true, true); + + } + + @Override + protected void buildDeckMenu(FPopupMenu menu) { + if (cardManager.getConfig().getShowUniqueCardsOption()) { + menu.addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblUniqueCardsOnly"), cardManager.getWantUnique(), e -> { + boolean wantUnique = !cardManager.getWantUnique(); + cardManager.setWantUnique(wantUnique); + CatalogPage.this.refresh(); + cardManager.getConfig().setUniqueCardsOnly(wantUnique); + })); + } + } + } + + protected static class DeckSectionPage extends CardManagerPage { + private final String captionPrefix; + private final DeckSection deckSection; + + private void setNextSelected() { + setNextSelected(1); + } + + private void setNextSelected(int val) { + if (cardManager.getItemCount() < 1) + return; + if ((cardManager.getSelectedIndex() + val) < cardManager.getItemCount()) { + cardManager.setSelectedIndex(cardManager.getSelectedIndex() + val); + } else if ((cardManager.getSelectedIndex() + 1) < cardManager.getItemCount()) { + cardManager.setSelectedIndex(cardManager.getSelectedIndex() + 1); } } - protected static class DeckSectionPage extends CardManagerPage { - private final String captionPrefix; - private final DeckSection deckSection; - private void setNextSelected() { - setNextSelected(1); - } - private void setNextSelected(int val) { - if (cardManager.getItemCount() < 1) - return; - if ((cardManager.getSelectedIndex()+val) < cardManager.getItemCount()) { - cardManager.setSelectedIndex(cardManager.getSelectedIndex()+val); - } else if ((cardManager.getSelectedIndex()+1) < cardManager.getItemCount()) { - cardManager.setSelectedIndex(cardManager.getSelectedIndex()+1); - } - } - private void setPreviousSelected() { - setPreviousSelected(1); - } - private void setPreviousSelected(int val) { - if (cardManager.getItemCount() < 1) - return; - if ((cardManager.getSelectedIndex()-val) > -1) { - cardManager.setSelectedIndex(cardManager.getSelectedIndex()-val); - } else if ((cardManager.getSelectedIndex()-1) > -1) { - cardManager.setSelectedIndex(cardManager.getSelectedIndex()-1); - } + private void setPreviousSelected() { + setPreviousSelected(1); + } + + private void setPreviousSelected(int val) { + if (cardManager.getItemCount() < 1) + return; + if ((cardManager.getSelectedIndex() - val) > -1) { + cardManager.setSelectedIndex(cardManager.getSelectedIndex() - val); + } else if ((cardManager.getSelectedIndex() - 1) > -1) { + cardManager.setSelectedIndex(cardManager.getSelectedIndex() - 1); } + } - protected DeckSectionPage(DeckSection deckSection0, ItemManagerConfig config) { - super(config, null, null); + protected DeckSectionPage(DeckSection deckSection0, ItemManagerConfig config) { + super(config, null, null); - deckSection = deckSection0; - switch (deckSection) { - default: - case Main: - captionPrefix = Forge.getLocalizer().getMessage("lblMain"); - cardManager.setCaption(Forge.getLocalizer().getMessage("ttMain")); - icon = MAIN_DECK_ICON; - break; - case Sideboard: - captionPrefix = Forge.getLocalizer().getMessage("lblSide"); - cardManager.setCaption(Forge.getLocalizer().getMessage("lblSideboard")); - icon = SIDEBOARD_ICON; - break; - case Commander: - captionPrefix = Forge.getLocalizer().getMessage("lblCommander"); - cardManager.setCaption(Forge.getLocalizer().getMessage("lblCommander")); - icon = FSkinImage.COMMANDER; - break; - } - } - - @Override - protected void initialize() { - super.initialize(); - cardManager.setPool(parentScreen.getDeck().getOrCreate(deckSection)); - updateCaption(); - } - - @Override - protected void updateCaption() { - if (deckSection == DeckSection.Commander) { - caption = captionPrefix; //don't display count for commander section since it won't be more than 1 - } else { - caption = captionPrefix + " (" + parentScreen.getDeck().get(deckSection).countAll() + ")"; - } - } - - @Override - protected void onCardActivated(PaperCard card) { - switch (deckSection) { - case Main: - case Planes: - case Schemes: - removeCard(card); - if (parentScreen.getCatalogPage() != null && currentEvent == null || currentEvent.getDraft() == null) { - parentScreen.getCatalogPage().addCard(card); - } - else if (getSideboardPage() != null) { - getSideboardPage().addCard(card); - } - break; - case Sideboard: - removeCard(card); - getMainDeckPage().addCard(card); - break; - default: - break; - } - } - - @Override - protected void buildMenu(final FDropDownMenu menu, final PaperCard card) { - switch (deckSection) { - default: - case Main: - addItem(menu, Forge.getLocalizer().getMessage("lblAdd"), null, Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS, true, false, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { return; } - - parentScreen.getCatalogPage().removeCard(card, result); - addCard(card, result); - } - }); - if (currentEvent == null ) { - addItem(menu, Forge.getLocalizer().getMessage("lblRemove"), null, Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS, false, false, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { - return; - } - - removeCard(card, result); - if (parentScreen.getCatalogPage() != null) { - parentScreen.getCatalogPage().addCard(card, result); - } - } - }); - } - if (getSideboardPage() != null) { - addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lbltosideboard"), getSideboardPage().getIcon(), false, false, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { return; } - - removeCard(card, result); - getSideboardPage().addCard(card, result); - } - }); - } - addCommanderItems(menu, card, false, false); - break; - case Sideboard: - addItem(menu, Forge.getLocalizer().getMessage("lblAdd"), null, Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS, true, false, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { return; } - - parentScreen.getCatalogPage().removeCard(card, result); - addCard(card, result); - } - }); - if (currentEvent == null) { - addItem(menu, Forge.getLocalizer().getMessage("lblRemove"), null, Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS, false, false, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { - return; - } - - removeCard(card, result); - if (parentScreen.getCatalogPage() != null) { - parentScreen.getCatalogPage().addCard(card, result); - } - } - }); - } - addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lblToMainDeck"), getMainDeckPage().getIcon(), false, false, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { return; } - - removeCard(card, result); - getMainDeckPage().addCard(card, result); - } - }); - addCommanderItems(menu, card, false, false); - break; - case Commander: - if ( isPartnerCommander(card)) { - addItem(menu, Forge.getLocalizer().getMessage("lblRemove"), null, Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS, false, false, new Callback() { - @Override - public void run(Integer result) { - if (result == null || result <= 0) { - return; - } - - removeCard(card, result); - parentScreen.getCatalogPage().refresh(); //refresh so commander options shown again - parentScreen.setSelectedPage(parentScreen.getCatalogPage()); - } - }); - } - break; - } - } - - public void addCards(Iterable> cards) { - if (canAddCards()) { - cardManager.addItems(cards); - //parentScreen.getEditorType().getController().notifyModelChanged(); - updateCaption(); - } - } - - private boolean isPartnerCommander(final PaperCard card) { - if (parentScreen.getCommanderPage() == null || parentScreen.getDeck().getCommanders().isEmpty()) { - return false; - } - - PaperCard firstCmdr = parentScreen.getDeck().getCommanders().get(0); - return !card.getName().equals(firstCmdr.getName()); + deckSection = deckSection0; + switch (deckSection) { + default: + case Main: + captionPrefix = Forge.getLocalizer().getMessage("lblMain"); + cardManager.setCaption(Forge.getLocalizer().getMessage("ttMain")); + icon = MAIN_DECK_ICON; + break; + case Sideboard: + captionPrefix = Forge.getLocalizer().getMessage("lblSide"); + cardManager.setCaption(Forge.getLocalizer().getMessage("lblSideboard")); + icon = SIDEBOARD_ICON; + break; + case Commander: + captionPrefix = Forge.getLocalizer().getMessage("lblCommander"); + cardManager.setCaption(Forge.getLocalizer().getMessage("lblCommander")); + icon = FSkinImage.COMMANDER; + break; } } @Override - public boolean keyDown(int keyCode) { - if (keyCode == Input.Keys.BUTTON_SELECT) { - return this.tabHeader.btnBack.trigger(); - } else if (keyCode == Input.Keys.BUTTON_R1) { - if (getSelectedPage() instanceof CatalogPage) - ((CatalogPage) getSelectedPage()).cardManager.closeMenu(); - else if (getSelectedPage() instanceof DeckSectionPage) - ((DeckSectionPage) getSelectedPage()).cardManager.closeMenu(); - selected++; - if (selected > 2) - selected = 0; - setSelectedPage(tabPages[selected]); - if (getSelectedPage() instanceof CatalogPage) { - ((CatalogPage) getSelectedPage()).cardManager.getConfig().setPileBy(null); - ((CatalogPage) getSelectedPage()).cardManager.setHideFilters(true); - } else if (getSelectedPage() instanceof DeckSectionPage) { - ((DeckSectionPage) getSelectedPage()).cardManager.getConfig().setPileBy(null); - ((DeckSectionPage) getSelectedPage()).cardManager.setHideFilters(true); - } - } else if (keyCode == Input.Keys.DPAD_RIGHT) { - if (getSelectedPage() instanceof CatalogPage) { - if (((CatalogPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) - ((CatalogPage) getSelectedPage()).setNextSelected(); - } else if (getSelectedPage() instanceof DeckSectionPage) { - if (((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) - ((DeckSectionPage) getSelectedPage()).setNextSelected(); - } - } else if (keyCode == Input.Keys.DPAD_LEFT) { - if (getSelectedPage() instanceof CatalogPage) { - if (((CatalogPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) - ((CatalogPage) getSelectedPage()).setPreviousSelected(); - } else if (getSelectedPage() instanceof DeckSectionPage) { - if (((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) - ((DeckSectionPage) getSelectedPage()).setPreviousSelected(); - } - } else if (keyCode == Input.Keys.DPAD_DOWN) { - if (getSelectedPage() instanceof CatalogPage) { - if (((CatalogPage) getSelectedPage()).cardManager.isContextMenuOpen()) { - ((CatalogPage) getSelectedPage()).cardManager.selectNextContext(); - } else { - if (((CatalogPage) getSelectedPage()).cardManager.getSelectedIndex() < 0) - ((CatalogPage) getSelectedPage()).setNextSelected(); - else if (((CatalogPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) - ((CatalogPage) getSelectedPage()).setNextSelected(((CatalogPage) getSelectedPage()).cardManager.getConfig().getImageColumnCount()); - else - ((CatalogPage) getSelectedPage()).setNextSelected(); - } - } else if (getSelectedPage() instanceof DeckSectionPage) { - if (((DeckSectionPage) getSelectedPage()).cardManager.isContextMenuOpen()) { - ((DeckSectionPage) getSelectedPage()).cardManager.selectNextContext(); - } else { - if (((DeckSectionPage) getSelectedPage()).cardManager.getSelectedIndex() < 0) - ((DeckSectionPage) getSelectedPage()).setNextSelected(); - else if (((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) - ((DeckSectionPage) getSelectedPage()).setNextSelected(((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getImageColumnCount()); - else - ((DeckSectionPage) getSelectedPage()).setNextSelected(); - } - } - } else if (keyCode == Input.Keys.DPAD_UP) { - if (getSelectedPage() instanceof CatalogPage) { - if (((CatalogPage) getSelectedPage()).cardManager.isContextMenuOpen()) { - ((CatalogPage) getSelectedPage()).cardManager.selectPreviousContext(); - } else { - if (((CatalogPage) getSelectedPage()).cardManager.getSelectedIndex() < 0) - ((CatalogPage) getSelectedPage()).setNextSelected(); - else if (((CatalogPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) - ((CatalogPage) getSelectedPage()).setPreviousSelected(((CatalogPage) getSelectedPage()).cardManager.getConfig().getImageColumnCount()); - else - ((CatalogPage) getSelectedPage()).setPreviousSelected(); - } - } else if (getSelectedPage() instanceof DeckSectionPage) { - if (((DeckSectionPage) getSelectedPage()).cardManager.isContextMenuOpen()) { - ((DeckSectionPage) getSelectedPage()).cardManager.selectPreviousContext(); - } else { - if (((DeckSectionPage) getSelectedPage()).cardManager.getSelectedIndex() < 0) - ((DeckSectionPage) getSelectedPage()).setNextSelected(); - else if (((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) - ((DeckSectionPage) getSelectedPage()).setPreviousSelected(((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getImageColumnCount()); - else - ((DeckSectionPage) getSelectedPage()).setPreviousSelected(); - } - } - } else if (keyCode == Input.Keys.BUTTON_A) { - if (getSelectedPage() instanceof CatalogPage) { - if (((CatalogPage) getSelectedPage()).cardManager.isContextMenuOpen()) - ((CatalogPage) getSelectedPage()).cardManager.activateSelectedContext(); - else - ((CatalogPage) getSelectedPage()).cardManager.showMenu(true); - } else if (getSelectedPage() instanceof DeckSectionPage) { - if (((DeckSectionPage) getSelectedPage()).cardManager.isContextMenuOpen() ) - ((DeckSectionPage) getSelectedPage()).cardManager.activateSelectedContext(); - else - ((DeckSectionPage) getSelectedPage()).cardManager.showMenu(true); - } - } else if (keyCode == Input.Keys.BUTTON_B) { - if (getSelectedPage() instanceof CatalogPage) { - if (((CatalogPage) getSelectedPage()).cardManager.isContextMenuOpen()) { - ((CatalogPage) getSelectedPage()).cardManager.closeMenu(); - } else - return this.tabHeader.btnBack.trigger(); - } else if (getSelectedPage() instanceof DeckSectionPage) { - if (((DeckSectionPage) getSelectedPage()).cardManager.isContextMenuOpen()) { - ((DeckSectionPage) getSelectedPage()).cardManager.closeMenu(); - } else - return this.tabHeader.btnBack.trigger(); - } - } else if (keyCode == Input.Keys.BUTTON_Y) { - if (getSelectedPage() instanceof CatalogPage) { - if (!((CatalogPage) getSelectedPage()).cardManager.isContextMenuOpen()) { - if (((CatalogPage) getSelectedPage()).cardManager.getCurrentView().getSelectionCount() > 0) { - ((CatalogPage) getSelectedPage()).cardManager.getCurrentView().zoomSelected(); - } - } else { - ((CatalogPage) getSelectedPage()).cardManager.closeMenu(); - if (((CatalogPage) getSelectedPage()).cardManager.getCurrentView().getSelectionCount() > 0) { - ((CatalogPage) getSelectedPage()).cardManager.getCurrentView().zoomSelected(); - } - } - } else if (getSelectedPage() instanceof DeckSectionPage) { - if (!((DeckSectionPage) getSelectedPage()).cardManager.isContextMenuOpen()) { - if (((DeckSectionPage) getSelectedPage()).cardManager.getCurrentView().getSelectionCount() > 0) { - ((DeckSectionPage) getSelectedPage()).cardManager.getCurrentView().zoomSelected(); - } - } else { - ((DeckSectionPage) getSelectedPage()).cardManager.closeMenu(); - if (((DeckSectionPage) getSelectedPage()).cardManager.getCurrentView().getSelectionCount() > 0) { - ((DeckSectionPage) getSelectedPage()).cardManager.getCurrentView().zoomSelected(); - } - } - } - } else if (keyCode == Input.Keys.BUTTON_L1) { - if (getSelectedPage() instanceof CatalogPage) { - ((CatalogPage) getSelectedPage()).cardManager.closeMenu(); - int index = ((CatalogPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1 ? 0 : 1; - ((CatalogPage) getSelectedPage()).cardManager.setViewIndex(index); - } else if (getSelectedPage() instanceof DeckSectionPage) { - ((DeckSectionPage) getSelectedPage()).cardManager.closeMenu(); - int index = ((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1 ? 0 : 1; - ((DeckSectionPage) getSelectedPage()).cardManager.setViewIndex(index); - } + protected void initialize() { + super.initialize(); + cardManager.setPool(parentScreen.getDeck().getOrCreate(deckSection)); + updateCaption(); + } + + @Override + protected void updateCaption() { + if (deckSection == DeckSection.Commander) { + caption = captionPrefix; //don't display count for commander section since it won't be more than 1 + } else { + caption = captionPrefix + " (" + parentScreen.getDeck().get(deckSection).countAll() + ")"; } - return true; + } + + @Override + protected void onCardActivated(PaperCard card) { + CatalogPage catalog = parentScreen == null ? null : parentScreen.getCatalogPage(); + switch (deckSection) { + case Main: + case Planes: + case Schemes: + removeCard(card); + if (currentEvent == null || currentEvent.getDraft() == null) { + if (catalog != null) + catalog.addCard(card); + } else if (getSideboardPage() != null) { + getSideboardPage().addCard(card); + } + break; + case Sideboard: + removeCard(card); + getMainDeckPage().addCard(card); + break; + default: + break; + } + } + + @Override + protected void buildMenu(final FDropDownMenu menu, final PaperCard card) { + CatalogPage catalog = parentScreen == null ? null : parentScreen.getCatalogPage(); + switch (deckSection) { + case Main: + addItem(menu, Forge.getLocalizer().getMessage("lblAdd"), null, Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS, true, false, new Callback() { + @Override + public void run(Integer result) { + if (result == null || result <= 0) { + return; + } + + if (catalog != null) { + catalog.removeCard(card, result); + addCard(card, result); + } + } + }); + if (currentEvent == null) { + addItem(menu, Forge.getLocalizer().getMessage("lblRemove"), null, Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS, false, false, new Callback() { + @Override + public void run(Integer result) { + if (result == null || result <= 0) { + return; + } + + if (catalog != null) { + removeCard(card, result); + catalog.addCard(card, result); + } + } + }); + } + if (getSideboardPage() != null) { + addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lbltosideboard"), getSideboardPage().getIcon(), false, false, new Callback() { + @Override + public void run(Integer result) { + if (result == null || result <= 0) { + return; + } + + removeCard(card, result); + getSideboardPage().addCard(card, result); + } + }); + } + addCommanderItems(menu, card, false, false); + break; + case Sideboard: + addItem(menu, Forge.getLocalizer().getMessage("lblAdd"), null, Forge.hdbuttons ? FSkinImage.HDPLUS : FSkinImage.PLUS, true, false, new Callback() { + @Override + public void run(Integer result) { + if (result == null || result <= 0) { + return; + } + + if (catalog != null) { + catalog.removeCard(card, result); + addCard(card, result); + } + } + }); + if (currentEvent == null) { + addItem(menu, Forge.getLocalizer().getMessage("lblRemove"), null, Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS, false, false, new Callback() { + @Override + public void run(Integer result) { + if (result == null || result <= 0) { + return; + } + + if (catalog != null) { + removeCard(card, result); + catalog.addCard(card, result); + } + } + }); + } + addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lblToMainDeck"), getMainDeckPage().getIcon(), false, false, new Callback() { + @Override + public void run(Integer result) { + if (result == null || result <= 0) { + return; + } + + removeCard(card, result); + getMainDeckPage().addCard(card, result); + } + }); + addCommanderItems(menu, card, false, false); + break; + case Commander: + if (isPartnerCommander(card)) { + addItem(menu, Forge.getLocalizer().getMessage("lblRemove"), null, Forge.hdbuttons ? FSkinImage.HDMINUS : FSkinImage.MINUS, false, false, new Callback() { + @Override + public void run(Integer result) { + if (result == null || result <= 0) { + return; + } + + if (catalog != null) { + removeCard(card, result); + catalog.refresh(); //refresh so commander options shown again + if (parentScreen != null) + parentScreen.setSelectedPage(catalog); + } + } + }); + } + break; + default: + break; + } + } + + public void addCards(Iterable> cards) { + if (canAddCards()) { + cardManager.addItems(cards); + //parentScreen.getEditorType().getController().notifyModelChanged(); + updateCaption(); + } + } + + private boolean isPartnerCommander(final PaperCard card) { + if (parentScreen.getCommanderPage() == null || parentScreen.getDeck().getCommanders().isEmpty()) { + return false; + } + + PaperCard firstCmdr = parentScreen.getDeck().getCommanders().get(0); + return !card.getName().equals(firstCmdr.getName()); } } + @Override + public boolean keyDown(int keyCode) { + if (keyCode == Input.Keys.BUTTON_SELECT) { + return this.tabHeader.btnBack.trigger(); + } else if (keyCode == Input.Keys.BUTTON_R1) { + if (getSelectedPage() instanceof CatalogPage) + ((CatalogPage) getSelectedPage()).cardManager.closeMenu(); + else if (getSelectedPage() instanceof DeckSectionPage) + ((DeckSectionPage) getSelectedPage()).cardManager.closeMenu(); + selected++; + if (selected > 2) + selected = 0; + setSelectedPage(tabPages[selected]); + if (getSelectedPage() instanceof CatalogPage) { + ((CatalogPage) getSelectedPage()).cardManager.getConfig().setPileBy(null); + ((CatalogPage) getSelectedPage()).cardManager.setHideFilters(true); + } else if (getSelectedPage() instanceof DeckSectionPage) { + ((DeckSectionPage) getSelectedPage()).cardManager.getConfig().setPileBy(null); + ((DeckSectionPage) getSelectedPage()).cardManager.setHideFilters(true); + } + } else if (keyCode == Input.Keys.DPAD_RIGHT) { + if (getSelectedPage() instanceof CatalogPage) { + if (((CatalogPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) + ((CatalogPage) getSelectedPage()).setNextSelected(); + } else if (getSelectedPage() instanceof DeckSectionPage) { + if (((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) + ((DeckSectionPage) getSelectedPage()).setNextSelected(); + } + } else if (keyCode == Input.Keys.DPAD_LEFT) { + if (getSelectedPage() instanceof CatalogPage) { + if (((CatalogPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) + ((CatalogPage) getSelectedPage()).setPreviousSelected(); + } else if (getSelectedPage() instanceof DeckSectionPage) { + if (((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) + ((DeckSectionPage) getSelectedPage()).setPreviousSelected(); + } + } else if (keyCode == Input.Keys.DPAD_DOWN) { + if (getSelectedPage() instanceof CatalogPage) { + if (((CatalogPage) getSelectedPage()).cardManager.isContextMenuOpen()) { + ((CatalogPage) getSelectedPage()).cardManager.selectNextContext(); + } else { + if (((CatalogPage) getSelectedPage()).cardManager.getSelectedIndex() < 0) + ((CatalogPage) getSelectedPage()).setNextSelected(); + else if (((CatalogPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) + ((CatalogPage) getSelectedPage()).setNextSelected(((CatalogPage) getSelectedPage()).cardManager.getConfig().getImageColumnCount()); + else + ((CatalogPage) getSelectedPage()).setNextSelected(); + } + } else if (getSelectedPage() instanceof DeckSectionPage) { + if (((DeckSectionPage) getSelectedPage()).cardManager.isContextMenuOpen()) { + ((DeckSectionPage) getSelectedPage()).cardManager.selectNextContext(); + } else { + if (((DeckSectionPage) getSelectedPage()).cardManager.getSelectedIndex() < 0) + ((DeckSectionPage) getSelectedPage()).setNextSelected(); + else if (((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) + ((DeckSectionPage) getSelectedPage()).setNextSelected(((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getImageColumnCount()); + else + ((DeckSectionPage) getSelectedPage()).setNextSelected(); + } + } + } else if (keyCode == Input.Keys.DPAD_UP) { + if (getSelectedPage() instanceof CatalogPage) { + if (((CatalogPage) getSelectedPage()).cardManager.isContextMenuOpen()) { + ((CatalogPage) getSelectedPage()).cardManager.selectPreviousContext(); + } else { + if (((CatalogPage) getSelectedPage()).cardManager.getSelectedIndex() < 0) + ((CatalogPage) getSelectedPage()).setNextSelected(); + else if (((CatalogPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) + ((CatalogPage) getSelectedPage()).setPreviousSelected(((CatalogPage) getSelectedPage()).cardManager.getConfig().getImageColumnCount()); + else + ((CatalogPage) getSelectedPage()).setPreviousSelected(); + } + } else if (getSelectedPage() instanceof DeckSectionPage) { + if (((DeckSectionPage) getSelectedPage()).cardManager.isContextMenuOpen()) { + ((DeckSectionPage) getSelectedPage()).cardManager.selectPreviousContext(); + } else { + if (((DeckSectionPage) getSelectedPage()).cardManager.getSelectedIndex() < 0) + ((DeckSectionPage) getSelectedPage()).setNextSelected(); + else if (((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1) + ((DeckSectionPage) getSelectedPage()).setPreviousSelected(((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getImageColumnCount()); + else + ((DeckSectionPage) getSelectedPage()).setPreviousSelected(); + } + } + } else if (keyCode == Input.Keys.BUTTON_A) { + if (getSelectedPage() instanceof CatalogPage) { + if (((CatalogPage) getSelectedPage()).cardManager.isContextMenuOpen()) + ((CatalogPage) getSelectedPage()).cardManager.activateSelectedContext(); + else + ((CatalogPage) getSelectedPage()).cardManager.showMenu(true); + } else if (getSelectedPage() instanceof DeckSectionPage) { + if (((DeckSectionPage) getSelectedPage()).cardManager.isContextMenuOpen()) + ((DeckSectionPage) getSelectedPage()).cardManager.activateSelectedContext(); + else + ((DeckSectionPage) getSelectedPage()).cardManager.showMenu(true); + } + } else if (keyCode == Input.Keys.BUTTON_B) { + if (getSelectedPage() instanceof CatalogPage) { + if (((CatalogPage) getSelectedPage()).cardManager.isContextMenuOpen()) { + ((CatalogPage) getSelectedPage()).cardManager.closeMenu(); + } else + return this.tabHeader.btnBack.trigger(); + } else if (getSelectedPage() instanceof DeckSectionPage) { + if (((DeckSectionPage) getSelectedPage()).cardManager.isContextMenuOpen()) { + ((DeckSectionPage) getSelectedPage()).cardManager.closeMenu(); + } else + return this.tabHeader.btnBack.trigger(); + } + } else if (keyCode == Input.Keys.BUTTON_Y) { + if (getSelectedPage() instanceof CatalogPage) { + if (!((CatalogPage) getSelectedPage()).cardManager.isContextMenuOpen()) { + if (((CatalogPage) getSelectedPage()).cardManager.getCurrentView().getSelectionCount() > 0) { + ((CatalogPage) getSelectedPage()).cardManager.getCurrentView().zoomSelected(); + } + } else { + ((CatalogPage) getSelectedPage()).cardManager.closeMenu(); + if (((CatalogPage) getSelectedPage()).cardManager.getCurrentView().getSelectionCount() > 0) { + ((CatalogPage) getSelectedPage()).cardManager.getCurrentView().zoomSelected(); + } + } + } else if (getSelectedPage() instanceof DeckSectionPage) { + if (!((DeckSectionPage) getSelectedPage()).cardManager.isContextMenuOpen()) { + if (((DeckSectionPage) getSelectedPage()).cardManager.getCurrentView().getSelectionCount() > 0) { + ((DeckSectionPage) getSelectedPage()).cardManager.getCurrentView().zoomSelected(); + } + } else { + ((DeckSectionPage) getSelectedPage()).cardManager.closeMenu(); + if (((DeckSectionPage) getSelectedPage()).cardManager.getCurrentView().getSelectionCount() > 0) { + ((DeckSectionPage) getSelectedPage()).cardManager.getCurrentView().zoomSelected(); + } + } + } + } else if (keyCode == Input.Keys.BUTTON_L1) { + if (getSelectedPage() instanceof CatalogPage) { + ((CatalogPage) getSelectedPage()).cardManager.closeMenu(); + int index = ((CatalogPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1 ? 0 : 1; + ((CatalogPage) getSelectedPage()).cardManager.setViewIndex(index); + } else if (getSelectedPage() instanceof DeckSectionPage) { + ((DeckSectionPage) getSelectedPage()).cardManager.closeMenu(); + int index = ((DeckSectionPage) getSelectedPage()).cardManager.getConfig().getViewIndex() == 1 ? 0 : 1; + ((DeckSectionPage) getSelectedPage()).cardManager.setViewIndex(index); + } + } + return true; + } +} +