From 567ffe84cda9dfb32795d144ddb925f95201ffac Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Tue, 21 Jan 2014 09:32:36 +0000 Subject: [PATCH] DeckManagers use DeckProxies --- forge-core/src/main/java/forge/deck/Deck.java | 26 ---- .../forge/gui/deckchooser/FDeckChooser.java | 132 ++++++------------ .../java/forge/gui/deckeditor/DeckProxy.java | 128 +++++++++++++++++ .../gui/deckeditor/controllers/CAllDecks.java | 5 +- .../gui/home/quest/CSubmenuQuestDecks.java | 15 +- .../gui/home/sanctioned/CSubmenuDraft.java | 20 ++- .../gui/home/sanctioned/CSubmenuSealed.java | 9 +- .../home/sanctioned/VSubmenuConstructed.java | 4 +- .../gui/toolbox/itemmanager/DeckManager.java | 14 +- .../itemmanager/filters/DeckColorFilter.java | 15 +- .../itemmanager/filters/DeckFormatFilter.java | 14 +- .../filters/DeckQuestWorldFilter.java | 10 +- .../itemmanager/filters/DeckSearchFilter.java | 8 +- .../itemmanager/filters/DeckSetFilter.java | 6 +- .../filters/DeckStatTypeFilter.java | 10 +- .../toolbox/itemmanager/views/ItemColumn.java | 3 +- 16 files changed, 239 insertions(+), 180 deletions(-) diff --git a/forge-core/src/main/java/forge/deck/Deck.java b/forge-core/src/main/java/forge/deck/Deck.java index b92e7c1472d..9d92ad1ece1 100644 --- a/forge-core/src/main/java/forge/deck/Deck.java +++ b/forge-core/src/main/java/forge/deck/Deck.java @@ -31,7 +31,6 @@ import java.util.TreeSet; import org.apache.commons.lang3.StringUtils; import com.google.common.base.Function; -import com.google.common.base.Predicate; import com.google.common.collect.Lists; import forge.StaticData; @@ -307,29 +306,4 @@ public class Deck extends DeckBase implements Iterable createPredicate(final Predicate cardPredicate) { - return new Predicate() { - @Override - public boolean apply(Deck input) { - for (Entry deckEntry : input) { - switch (deckEntry.getKey()) { - case Main: - case Sideboard: - case Commander: - for (Entry poolEntry : deckEntry.getValue()) { - if (!cardPredicate.apply(poolEntry.getKey())) { - return false; //all cards in deck must pass card predicate to pass deck predicate - } - } - break; - default: - break; //ignore other sections - } - } - return true; - } - }; - } } diff --git a/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java b/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java index aa35c59c6c3..3616f332687 100644 --- a/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java +++ b/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java @@ -13,17 +13,15 @@ import org.apache.commons.lang3.StringUtils; import forge.Command; import forge.Singletons; import forge.deck.Deck; -import forge.deck.DeckBase; import forge.game.GameType; import forge.game.player.RegisteredPlayer; import forge.gui.deckchooser.DecksComboBox.DeckType; +import forge.gui.deckeditor.DeckProxy; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.itemmanager.DeckManager; import forge.gui.toolbox.itemmanager.ItemManagerContainer; -import forge.item.PreconDeck; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; -import forge.quest.QuestController; import forge.quest.QuestEvent; import forge.quest.QuestEventChallenge; import forge.quest.QuestUtil; @@ -79,7 +77,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { private void updateCustom() { lstDecks.setAllowMultipleSelections(false); - lstDecks.setPool(Singletons.getModel().getDecks().getConstructed()); + lstDecks.setPool(DeckProxy.getAllConstructedDecks()); lstDecks.update(); btnRandom.setText("Random Deck"); @@ -93,43 +91,36 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { lstDecks.setSelectedIndex(0); } - //Deck that generates its card pool via some algorithm - private abstract class DeckGenerator extends Deck { - public DeckGenerator(final String name0) { - super(name0); - } - - @Override - protected DeckBase newInstance(final String name0) { - final DeckGenerator deckGen = this; - return new DeckGenerator(name0) { - @Override - public Deck generateDeck() { - return deckGen.generateDeck(); - } - }; - } - - public abstract Deck generateDeck(); - } - - private class ColorDeckGenerator extends DeckGenerator { + private class ColorDeckGenerator extends DeckProxy implements Comparable { + private String name; private int index; public ColorDeckGenerator(String name0, int index0) { - super(name0); + super(null, null, null); + name = name0; this.index = index0; } @Override - public int compareTo(final DeckBase d) { - return d instanceof ColorDeckGenerator ? Integer.compare(this.index, ((ColorDeckGenerator)d).index) : super.compareTo(d); + public String getName() { + return name; + } + + @Override + public String toString() { + return name; + } + + + @Override + public int compareTo(final ColorDeckGenerator d) { + return d instanceof ColorDeckGenerator ? Integer.compare(this.index, ((ColorDeckGenerator)d).index) : 1; } @Override - public Deck generateDeck() { + public Deck getDeck() { List selection = new ArrayList(); - for (Deck deck : lstDecks.getSelectedItems()) { + for (DeckProxy deck : lstDecks.getSelectedItems()) { selection.add(deck.getName()); } if (DeckgenUtil.colorCheck(selection)) { @@ -144,7 +135,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { String[] colors = new String[] { "Random 1", "Random 2", "Random 3", "White", "Blue", "Black", "Red", "Green" }; - ArrayList decks = new ArrayList(); + ArrayList decks = new ArrayList(); for (int i = 0; i < colors.length; i++) { decks.add(new ColorDeckGenerator(colors[i], i)); } @@ -164,26 +155,10 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { lstDecks.setSelectedIndices(new Integer[]{0, 1}); } - private class ThemeDeckGenerator extends DeckGenerator { - public ThemeDeckGenerator(String name0) { - super(name0); - } - - @Override - public Deck generateDeck() { - return DeckgenUtil.buildThemeDeck(this.getName()); - } - } - private void updateThemes() { lstDecks.setAllowMultipleSelections(false); - ArrayList decks = new ArrayList(); - for (final String s : GenerateThemeDeck.getThemeNames()) { - decks.add(new ThemeDeckGenerator(s)); - } - - lstDecks.setPool(decks); + lstDecks.setPool(DeckProxy.getAllThemeDecks()); lstDecks.update(true); btnRandom.setText("Random Deck"); @@ -200,12 +175,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { private void updatePrecons() { lstDecks.setAllowMultipleSelections(false); - ArrayList decks = new ArrayList(); - for (final PreconDeck preconDeck : QuestController.getPrecons()) { - decks.add(preconDeck.getDeck()); - } - - lstDecks.setPool(decks); + lstDecks.setPool(DeckProxy.getAllPreconstructedDecks()); lstDecks.update(false, true); btnRandom.setText("Random Deck"); @@ -222,16 +192,7 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { private void updateQuestEvents() { lstDecks.setAllowMultipleSelections(false); - ArrayList decks = new ArrayList(); - QuestController quest = Singletons.getModel().getQuest(); - for (QuestEvent e : quest.getDuelsManager().getAllDuels()) { - decks.add(e.getEventDeck()); - } - for (QuestEvent e : quest.getChallenges()) { - decks.add(e.getEventDeck()); - } - - lstDecks.setPool(decks); + lstDecks.setPool(DeckProxy.getAllQuestEventAndChallenges()); lstDecks.update(false, true); btnRandom.setText("Random Deck"); @@ -246,11 +207,8 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { } public Deck getDeck() { - Deck deck = lstDecks.getSelectedItem(); - if (deck instanceof DeckGenerator) { - return ((DeckGenerator)deck).generateDeck(); - } - return deck; + DeckProxy proxy = lstDecks.getSelectedItem(); + return proxy.getDeck(); } /** Generates deck from current list selection(s). */ @@ -348,31 +306,33 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { private String getState() { String deckType = decksComboBox.getDeckType().name(); - String state = deckType; - state += ";"; - Iterable selectedDecks = lstDecks.getSelectedItems(); + StringBuilder state = new StringBuilder(deckType); + state.append(";"); + joinSelectedDecks(state, SELECTED_DECK_DELIMITER); + return state.toString(); + } + + private void joinSelectedDecks(StringBuilder state, String delimiter) { + Iterable selectedDecks = lstDecks.getSelectedItems(); + boolean isFirst = true; if (selectedDecks != null) { - for (Deck deck : selectedDecks) { - state += deck + SELECTED_DECK_DELIMITER; + for (DeckProxy deck : selectedDecks) { + if(isFirst) + isFirst = false; + else + state.append(delimiter); + state.append(deck.getName()); } - state = state.substring(0, state.length() - SELECTED_DECK_DELIMITER.length()); } - return state; } /** Returns a clean name from the state that can be used for labels. */ public final String getStateForLabel() { String deckType = decksComboBox.getDeckType().toString(); - String state = deckType; - state += ": "; - Iterable selectedDecks = lstDecks.getSelectedItems(); - if (selectedDecks != null) { - for (Deck deck : selectedDecks) { - state += deck + ", "; - } - state = state.substring(0, state.length() - 2); - } - return state; + StringBuilder state = new StringBuilder(deckType); + state.append(": "); + joinSelectedDecks(state, ", "); + return state.toString(); } private void restoreSavedState() { diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/DeckProxy.java b/forge-gui/src/main/java/forge/gui/deckeditor/DeckProxy.java index 092a0f58d43..b2c262d716a 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/DeckProxy.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/DeckProxy.java @@ -1,12 +1,28 @@ package forge.gui.deckeditor; +import java.util.ArrayList; +import java.util.List; +import java.util.Map.Entry; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; + import forge.Singletons; import forge.card.ColorSet; +import forge.deck.CardPool; import forge.deck.Deck; +import forge.deck.DeckGroup; import forge.deck.DeckSection; import forge.game.GameFormat; import forge.game.GameType; +import forge.gui.deckchooser.DeckgenUtil; +import forge.gui.deckchooser.GenerateThemeDeck; import forge.item.InventoryItem; +import forge.item.PaperCard; +import forge.item.PreconDeck; +import forge.quest.QuestController; +import forge.quest.QuestEvent; import forge.util.storage.IStorage; public class DeckProxy implements InventoryItem { @@ -34,6 +50,10 @@ public class DeckProxy implements InventoryItem { return "Deck"; } + public Deck getDeck() { + return deck; + } + public void invalidateCache() { color = null; formats = null; @@ -76,6 +96,114 @@ public class DeckProxy implements InventoryItem { public void deleteFromStorage() { // if storage is not readonly, delete the deck from there. + } + + // TODO: The methods below should not take the decks collections from singletons, instead they are supposed to use data passed in parameters + + public static Iterable getAllConstructedDecks() { + // This is a temporary solution that does not iterate over subfolders. - will improve + + return Iterables.transform(Singletons.getModel().getDecks().getConstructed(), new Function(){ + public DeckProxy apply(Deck deck) { return new DeckProxy(deck, GameType.Constructed, Singletons.getModel().getDecks().getConstructed()); + }}); + } + + + //create predicate that applys a card predicate to all cards in deck + public static final Predicate createPredicate(final Predicate cardPredicate) { + return new Predicate() { + @Override + public boolean apply(DeckProxy input) { + for (Entry deckEntry : input.getDeck()) { + switch (deckEntry.getKey()) { + case Main: + case Sideboard: + case Commander: + for (Entry poolEntry : deckEntry.getValue()) { + if (!cardPredicate.apply(poolEntry.getKey())) { + return false; //all cards in deck must pass card predicate to pass deck predicate + } + } + break; + default: + break; //ignore other sections + } + } + return true; + } + }; + } + + private static class ThemeDeckGenerator extends DeckProxy { + private final String name; + public ThemeDeckGenerator(String name0) { + super(null, null, null); + name = name0; + } + + @Override + public Deck getDeck() { + return DeckgenUtil.buildThemeDeck(this.getName()); + } + + @Override + public String getName() { return name; } } + + public static Iterable getAllThemeDecks() { + ArrayList decks = new ArrayList(); + for (final String s : GenerateThemeDeck.getThemeNames()) { + decks.add(new ThemeDeckGenerator(s)); + } + return decks; + } + + public static Iterable getAllPreconstructedDecks() { + ArrayList decks = new ArrayList(); + for (final PreconDeck preconDeck : QuestController.getPrecons()) { + decks.add(new DeckProxy(preconDeck.getDeck(), null, null)); + } + return decks; + } + + public static Iterable getAllQuestEventAndChallenges() { + ArrayList decks = new ArrayList(); + QuestController quest = Singletons.getModel().getQuest(); + for (QuestEvent e : quest.getDuelsManager().getAllDuels()) { + decks.add(new DeckProxy(e.getEventDeck(), null, null)); + } + for (QuestEvent e : quest.getChallenges()) { + decks.add(new DeckProxy(e.getEventDeck(), null, null)); + } + return decks; + } + + public static Iterable getAllSealedDecks(IStorage sealed) { + final List humanDecks = new ArrayList(); + + // Since AI decks are tied directly to the human choice, + // they're just mapped in a parallel map and grabbed when the game starts. + for (final DeckGroup d : sealed) { + humanDecks.add(new DeckProxy(d.getHumanDeck(), GameType.Sealed, null)); + } + return humanDecks; + } + + public static Iterable getAllQuestDecks(IStorage storage) { + ArrayList decks = new ArrayList(); + if( storage != null ) + for (final Deck preconDeck : storage) { + decks.add(new DeckProxy(preconDeck, GameType.Quest, storage)); + } + return decks; + } + + public static Iterable getDraftDecks(IStorage draft) { + ArrayList decks = new ArrayList(); + for (DeckGroup d : draft) { + decks.add(new DeckProxy(d.getHumanDeck(), GameType.Draft, null)); + } + return decks; + } } diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CAllDecks.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CAllDecks.java index 71404ea389b..eb3c395e3b9 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CAllDecks.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/CAllDecks.java @@ -1,7 +1,7 @@ package forge.gui.deckeditor.controllers; import forge.Command; -import forge.Singletons; +import forge.gui.deckeditor.DeckProxy; import forge.gui.deckeditor.views.VAllDecks; import forge.gui.framework.ICDoc; @@ -30,8 +30,7 @@ public enum CAllDecks implements ICDoc { */ @Override public void initialize() { - VAllDecks.SINGLETON_INSTANCE.getLstDecks().setPool( - Singletons.getModel().getDecks().getConstructed()); + VAllDecks.SINGLETON_INSTANCE.getLstDecks().setPool(DeckProxy.getAllConstructedDecks()); } /* (non-Javadoc) diff --git a/forge-gui/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java b/forge-gui/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java index e490682f66c..b27c3613d32 100644 --- a/forge-gui/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java +++ b/forge-gui/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java @@ -1,6 +1,6 @@ package forge.gui.home.quest; -import java.util.ArrayList; +import java.util.Map.Entry; import javax.swing.SwingUtilities; @@ -8,6 +8,7 @@ import forge.Command; import forge.Singletons; import forge.deck.Deck; import forge.gui.deckeditor.CDeckEditorUI; +import forge.gui.deckeditor.DeckProxy; import forge.gui.deckeditor.controllers.CEditorQuest; import forge.gui.framework.EDocID; import forge.gui.framework.FScreen; @@ -31,7 +32,7 @@ public enum CSubmenuQuestDecks implements ICDoc { private final Command cmdDeckSelect = new Command() { @Override public void run() { - currentDeck = VSubmenuQuestDecks.SINGLETON_INSTANCE.getLstDecks().getSelectedItem(); + currentDeck = VSubmenuQuestDecks.SINGLETON_INSTANCE.getLstDecks().getSelectedItem().getDeck(); Singletons.getModel().getQuestPreferences().setPref(QPref.CURRENT_DECK, currentDeck.toString()); Singletons.getModel().getQuestPreferences().save(); } @@ -66,7 +67,7 @@ public enum CSubmenuQuestDecks implements ICDoc { final QuestController qData = Singletons.getModel().getQuest(); boolean hasQuest = qData.getAssets() != null; // Retrieve and set all decks - view.getLstDecks().setPool(hasQuest ? qData.getMyDecks() : new ArrayList()); + view.getLstDecks().setPool(DeckProxy.getAllQuestDecks(hasQuest ? qData.getMyDecks() : null)); view.getLstDecks().update(); // Look through list for preferred deck from prefs @@ -75,13 +76,11 @@ public enum CSubmenuQuestDecks implements ICDoc { if (hasQuest) { final String cd = Singletons.getModel().getQuestPreferences().getPref(QPref.CURRENT_DECK); - for (Deck d : qData.getMyDecks()) { - if (d.getName() != null && d.getName().equals(cd)) { - currentDeck = d; - view.getLstDecks().setSelectedItem(d); + for (Entry d : view.getLstDecks().getPool() ) + if( d.getKey().getName().equals(cd) ) { + view.getLstDecks().setSelectedItem(d.getKey()); break; } - } } // Not found? Set first one. Still not found? OK, throw to setCurrentDeckStatus(). diff --git a/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java b/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java index 62757b1551d..f7a094d5143 100644 --- a/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java +++ b/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java @@ -17,6 +17,7 @@ import forge.game.player.RegisteredPlayer; import forge.gui.GuiChoose; import forge.gui.SOverlayUtils; import forge.gui.deckeditor.CDeckEditorUI; +import forge.gui.deckeditor.DeckProxy; import forge.gui.deckeditor.controllers.CEditorDraftingProcess; import forge.gui.framework.FScreen; import forge.gui.framework.ICDoc; @@ -74,18 +75,13 @@ public enum CSubmenuDraft implements ICDoc { */ @Override public void update() { - List human = new ArrayList(); - for (DeckGroup d : Singletons.getModel().getDecks().getDraft()) { - human.add(d.getHumanDeck()); - } - - final VSubmenuDraft view = VSubmenuDraft.SINGLETON_INSTANCE; + final VSubmenuDraft view = VSubmenuDraft.SINGLETON_INSTANCE; final JButton btnStart = view.getBtnStart(); - view.getLstDecks().setPool(human); + view.getLstDecks().setPool(DeckProxy.getDraftDecks(Singletons.getModel().getDecks().getDraft())); view.getLstDecks().update(); - if (human.size() > 1) { + if (!view.getLstDecks().getPool().isEmpty()) { btnStart.setEnabled(true); } @@ -102,7 +98,7 @@ public enum CSubmenuDraft implements ICDoc { private void startGame(final GameType gameType) { final boolean gauntlet = !VSubmenuDraft.SINGLETON_INSTANCE.isSingleSelected(); - final Deck humanDeck = VSubmenuDraft.SINGLETON_INSTANCE.getLstDecks().getSelectedItem(); + final DeckProxy humanDeck = VSubmenuDraft.SINGLETON_INSTANCE.getLstDecks().getSelectedItem(); final int aiIndex = (int) Math.floor(Math.random() * 7); if (humanDeck == null) { @@ -111,7 +107,7 @@ public enum CSubmenuDraft implements ICDoc { } if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) { - String errorMessage = gameType.getDecksFormat().getDeckConformanceProblem(humanDeck); + String errorMessage = gameType.getDecksFormat().getDeckConformanceProblem(humanDeck.getDeck()); if (null != errorMessage) { FOptionPane.showErrorDialog("Your deck " + errorMessage + " Please edit or choose a different deck.", "Invalid Deck"); return; @@ -122,7 +118,7 @@ public enum CSubmenuDraft implements ICDoc { if (gauntlet) { int rounds = Singletons.getModel().getDecks().getDraft().get(humanDeck.getName()).getAiDecks().size(); - Singletons.getModel().getGauntletMini().launch(rounds, humanDeck, gameType); + Singletons.getModel().getGauntletMini().launch(rounds, humanDeck.getDeck(), gameType); return; } @@ -142,7 +138,7 @@ public enum CSubmenuDraft implements ICDoc { List starter = new ArrayList(); Lobby lobby = FServer.instance.getLobby(); - starter.add(new RegisteredPlayer(humanDeck).setPlayer(lobby.getGuiPlayer())); + starter.add(new RegisteredPlayer(humanDeck.getDeck()).setPlayer(lobby.getGuiPlayer())); starter.add(new RegisteredPlayer(aiDeck).setPlayer(lobby.getAiPlayer())); Singletons.getControl().startMatch(GameType.Draft, starter); diff --git a/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java b/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java index b841bf1db09..6bd8241e1d6 100644 --- a/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java +++ b/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java @@ -23,6 +23,7 @@ import forge.deck.DeckSection; import forge.game.GameType; import forge.gui.GuiChoose; import forge.gui.deckeditor.CDeckEditorUI; +import forge.gui.deckeditor.DeckProxy; import forge.gui.deckeditor.controllers.ACEditorBase; import forge.gui.deckeditor.controllers.CEditorLimited; import forge.gui.framework.FScreen; @@ -105,7 +106,7 @@ public enum CSubmenuSealed implements ICDoc { } final VSubmenuSealed view = VSubmenuSealed.SINGLETON_INSTANCE; - view.getLstDecks().setPool(humanDecks); + view.getLstDecks().setPool(DeckProxy.getAllSealedDecks(Singletons.getModel().getDecks().getSealed())); view.getLstDecks().update(); SwingUtilities.invokeLater(new Runnable() { @@ -121,7 +122,7 @@ public enum CSubmenuSealed implements ICDoc { } private void startGame(final GameType gameType) { - final Deck human = VSubmenuSealed.SINGLETON_INSTANCE.getLstDecks().getSelectedItem(); + final DeckProxy human = VSubmenuSealed.SINGLETON_INSTANCE.getLstDecks().getSelectedItem(); if (human == null) { FOptionPane.showErrorDialog("Please build and/or select a deck for yourself.", "No Deck"); @@ -129,7 +130,7 @@ public enum CSubmenuSealed implements ICDoc { } if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) { - String errorMessage = gameType.getDecksFormat().getDeckConformanceProblem(human); + String errorMessage = gameType.getDecksFormat().getDeckConformanceProblem(human.getDeck()); if (null != errorMessage) { FOptionPane.showErrorDialog("Your deck " + errorMessage + " Please edit or choose a different deck.", "Invalid Deck"); return; @@ -137,7 +138,7 @@ public enum CSubmenuSealed implements ICDoc { } int matches = Singletons.getModel().getDecks().getSealed().get(human.getName()).getAiDecks().size(); - Singletons.getModel().getGauntletMini().launch(matches, human, gameType); + Singletons.getModel().getGauntletMini().launch(matches, human.getDeck(), gameType); } @SuppressWarnings("unchecked") diff --git a/forge-gui/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java b/forge-gui/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java index 8a3a8ba3bd8..2d2b59fe22b 100644 --- a/forge-gui/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java +++ b/forge-gui/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java @@ -26,10 +26,10 @@ import org.apache.commons.lang3.StringUtils; import forge.Command; import forge.Singletons; -import forge.deck.Deck; import forge.game.GameType; import forge.gui.deckchooser.DecksComboBox.DeckType; import forge.gui.deckchooser.FDeckChooser; +import forge.gui.deckeditor.DeckProxy; import forge.gui.framework.DragCell; import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; @@ -428,7 +428,7 @@ public enum VSubmenuConstructed implements IVSubmenu { mainDeckPanel.add(mainChooser, "grow, push, wrap"); } - protected void onDeckClicked(int iPlayer, DeckType type, Iterable selectedDecks) { + protected void onDeckClicked(int iPlayer, DeckType type, Iterable selectedDecks) { String text = type.toString() + ": " + Lang.joinHomogenous(selectedDecks); deckSelectorBtns.get(iPlayer).setText(text); } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java index 0ed6264ecff..a0f3b5f4469 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java @@ -13,12 +13,12 @@ import javax.swing.event.ListSelectionListener; import forge.Command; import forge.Singletons; -import forge.deck.Deck; import forge.deck.DeckBase; import forge.game.GameFormat; import forge.game.GameType; import forge.gui.GuiUtils; import forge.gui.deckeditor.CDeckEditorUI; +import forge.gui.deckeditor.DeckProxy; import forge.gui.deckeditor.SEditorIO; import forge.gui.deckeditor.controllers.ACEditorBase; import forge.gui.deckeditor.controllers.CEditorLimited; @@ -47,7 +47,7 @@ import forge.quest.QuestWorld; * */ @SuppressWarnings("serial") -public final class DeckManager extends ItemManager { +public final class DeckManager extends ItemManager { private static final FSkin.SkinIcon icoDelete = FSkin.getIcon(FSkin.InterfaceIcons.ICO_DELETE); private static final FSkin.SkinIcon icoDeleteOver = FSkin.getIcon(FSkin.InterfaceIcons.ICO_DELETE_OVER); private static final FSkin.SkinIcon icoEdit = FSkin.getIcon(FSkin.InterfaceIcons.ICO_EDIT); @@ -71,7 +71,7 @@ public final class DeckManager extends ItemManager { * @param gt */ public DeckManager(final GameType gt) { - super(Deck.class, true); + super(DeckProxy.class, true); this.gametype = gt; columns.get(ColumnDef.DECK_ACTIONS).setCellRenderer(new DeckActionsRenderer()); @@ -149,7 +149,7 @@ public final class DeckManager extends ItemManager { } @Override - protected ItemFilter createSearchFilter() { + protected ItemFilter createSearchFilter() { return new DeckSearchFilter(this); } @@ -213,7 +213,7 @@ public final class DeckManager extends ItemManager { }, getFilter(DeckColorFilter.class) == null); } - private void editDeck(final Deck deck) { + private void editDeck(final DeckProxy deck) { if (deck == null || this.preventEdit) { return; } ACEditorBase editorCtrl = null; @@ -252,7 +252,7 @@ public final class DeckManager extends ItemManager { CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController().load(deck.getName()); } - public boolean deleteDeck(Deck deck) { + public boolean deleteDeck(DeckProxy deck) { if (deck == null || this.preventEdit) { return false; } if (!FOptionPane.showConfirmDialog( @@ -316,7 +316,7 @@ public final class DeckManager extends ItemManager { int x = e.getX() - cellBounds.x; if (e.getID() == MouseEvent.MOUSE_PRESSED && e.getButton() == 1) { - Deck deck = (Deck) value; + DeckProxy deck = (DeckProxy) value; if (x >= 0 && x < imgSize) { //delete button if (DeckManager.this.deleteDeck(deck)) { diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckColorFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckColorFilter.java index 25f10561551..fa55d067368 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckColorFilter.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckColorFilter.java @@ -5,6 +5,7 @@ import javax.swing.JPanel; import com.google.common.base.Predicate; import forge.card.MagicColor; import forge.deck.Deck; +import forge.gui.deckeditor.DeckProxy; import forge.gui.toolbox.itemmanager.ItemManager; import forge.gui.toolbox.itemmanager.SItemManagerUtil.StatTypes; import forge.util.BinaryUtil; @@ -14,13 +15,13 @@ import forge.util.ItemPool; * TODO: Write javadoc for this type. * */ -public class DeckColorFilter extends StatTypeFilter { - public DeckColorFilter(ItemManager itemManager0) { +public class DeckColorFilter extends StatTypeFilter { + public DeckColorFilter(ItemManager itemManager0) { super(itemManager0); } @Override - public ItemFilter createCopy() { + public ItemFilter createCopy() { return new DeckColorFilter(itemManager); } @@ -36,10 +37,10 @@ public class DeckColorFilter extends StatTypeFilter { } @Override - protected final Predicate buildPredicate() { - return new Predicate() { + protected final Predicate buildPredicate() { + return new Predicate() { @Override - public boolean apply(Deck input) { + public boolean apply(DeckProxy input) { byte colorProfile = input.getColor().getColor(); if (colorProfile == 0) { return buttonMap.get(StatTypes.DECK_COLORLESS).getSelected(); @@ -121,7 +122,7 @@ public class DeckColorFilter extends StatTypeFilter { @Override public void afterFiltersApplied() { - final ItemPool items = itemManager.getFilteredItems(); + final ItemPool items = itemManager.getFilteredItems(); buttonMap.get(StatTypes.DECK_WHITE).setText(String.valueOf(items.countAll(IS_WHITE, Deck.class))); buttonMap.get(StatTypes.DECK_BLUE).setText(String.valueOf(items.countAll(IS_BLUE, Deck.class))); diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckFormatFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckFormatFilter.java index e86350105e7..9ff7898b522 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckFormatFilter.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckFormatFilter.java @@ -2,8 +2,8 @@ package forge.gui.toolbox.itemmanager.filters; import com.google.common.base.Predicate; -import forge.deck.Deck; import forge.game.GameFormat; +import forge.gui.deckeditor.DeckProxy; import forge.gui.toolbox.itemmanager.ItemManager; import forge.gui.toolbox.itemmanager.SFilterUtil; @@ -11,23 +11,23 @@ import forge.gui.toolbox.itemmanager.SFilterUtil; * TODO: Write javadoc for this type. * */ -public class DeckFormatFilter extends FormatFilter { - public DeckFormatFilter(ItemManager itemManager0) { +public class DeckFormatFilter extends FormatFilter { + public DeckFormatFilter(ItemManager itemManager0) { super(itemManager0); } - public DeckFormatFilter(ItemManager itemManager0, GameFormat format0) { + public DeckFormatFilter(ItemManager itemManager0, GameFormat format0) { super(itemManager0, format0); } @Override - public ItemFilter createCopy() { + public ItemFilter createCopy() { DeckFormatFilter copy = new DeckFormatFilter(itemManager); copy.formats.addAll(this.formats); return copy; } @Override - protected final Predicate buildPredicate() { - return Deck.createPredicate(SFilterUtil.buildFormatFilter(this.formats, this.allowReprints)); + protected final Predicate buildPredicate() { + return DeckProxy.createPredicate(SFilterUtil.buildFormatFilter(this.formats, this.allowReprints)); } } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckQuestWorldFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckQuestWorldFilter.java index 529ec605a69..912a552bb73 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckQuestWorldFilter.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckQuestWorldFilter.java @@ -4,8 +4,8 @@ import java.util.HashSet; import java.util.Set; import forge.Singletons; -import forge.deck.Deck; import forge.game.GameFormat; +import forge.gui.deckeditor.DeckProxy; import forge.gui.toolbox.itemmanager.ItemManager; import forge.quest.QuestWorld; @@ -16,17 +16,17 @@ import forge.quest.QuestWorld; public class DeckQuestWorldFilter extends DeckFormatFilter { private final Set questWorlds = new HashSet(); - public DeckQuestWorldFilter(ItemManager itemManager0) { + public DeckQuestWorldFilter(ItemManager itemManager0) { super(itemManager0); } - public DeckQuestWorldFilter(ItemManager itemManager0, QuestWorld questWorld0) { + public DeckQuestWorldFilter(ItemManager itemManager0, QuestWorld questWorld0) { super(itemManager0); this.questWorlds.add(questWorld0); this.formats.add(getQuestWorldFormat(questWorld0)); } @Override - public ItemFilter createCopy() { + public ItemFilter createCopy() { DeckQuestWorldFilter copy = new DeckQuestWorldFilter(itemManager); copy.questWorlds.addAll(this.questWorlds); for (QuestWorld w : this.questWorlds) { @@ -41,7 +41,7 @@ public class DeckQuestWorldFilter extends DeckFormatFilter { super.reset(); } - public static boolean canAddQuestWorld(QuestWorld questWorld, ItemFilter existingFilter) { + public static boolean canAddQuestWorld(QuestWorld questWorld, ItemFilter existingFilter) { if (questWorld.getFormat() == null && Singletons.getModel().getQuest().getMainFormat() == null) { return false; //must have format } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckSearchFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckSearchFilter.java index 336deb4454b..d75d20d7d91 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckSearchFilter.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckSearchFilter.java @@ -1,19 +1,19 @@ package forge.gui.toolbox.itemmanager.filters; -import forge.deck.Deck; +import forge.gui.deckeditor.DeckProxy; import forge.gui.toolbox.itemmanager.ItemManager; /** * TODO: Write javadoc for this type. * */ -public class DeckSearchFilter extends TextSearchFilter { - public DeckSearchFilter(ItemManager itemManager0) { +public class DeckSearchFilter extends TextSearchFilter { + public DeckSearchFilter(ItemManager itemManager0) { super(itemManager0); } @Override - public ItemFilter createCopy() { + public ItemFilter createCopy() { DeckSearchFilter copy = new DeckSearchFilter(itemManager); copy.getWidget(); //initialize widget copy.txtSearch.setText(this.txtSearch.getText()); diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckSetFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckSetFilter.java index b1ae3bc2d1f..e145dbbe3b1 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckSetFilter.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckSetFilter.java @@ -4,8 +4,8 @@ import java.util.Collection; import java.util.HashSet; import java.util.Set; -import forge.deck.Deck; import forge.game.GameFormat; +import forge.gui.deckeditor.DeckProxy; import forge.gui.home.quest.DialogChooseSets; import forge.gui.toolbox.itemmanager.ItemManager; @@ -16,7 +16,7 @@ import forge.gui.toolbox.itemmanager.ItemManager; public class DeckSetFilter extends DeckFormatFilter { private final Set sets = new HashSet(); - public DeckSetFilter(ItemManager itemManager0, Collection sets0, boolean allowReprints0) { + public DeckSetFilter(ItemManager itemManager0, Collection sets0, boolean allowReprints0) { super(itemManager0); this.sets.addAll(sets0); this.formats.add(new GameFormat(null, this.sets, null)); @@ -24,7 +24,7 @@ public class DeckSetFilter extends DeckFormatFilter { } @Override - public ItemFilter createCopy() { + public ItemFilter createCopy() { return new DeckSetFilter(itemManager, this.sets, this.allowReprints); } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckStatTypeFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckStatTypeFilter.java index b636a7e5941..9ec68ab7ca3 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckStatTypeFilter.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/DeckStatTypeFilter.java @@ -4,7 +4,7 @@ import java.util.Map; import com.google.common.base.Predicates; -import forge.deck.Deck; +import forge.gui.deckeditor.DeckProxy; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.itemmanager.ItemManager; import forge.gui.toolbox.itemmanager.SItemManagerUtil; @@ -12,8 +12,8 @@ import forge.item.InventoryItem; import forge.item.PaperCard; import forge.util.ItemPool; -public abstract class DeckStatTypeFilter extends StatTypeFilter { - public DeckStatTypeFilter(ItemManager itemManager0) { +public abstract class DeckStatTypeFilter extends StatTypeFilter { + public DeckStatTypeFilter(ItemManager itemManager0) { super(itemManager0); } @@ -24,11 +24,11 @@ public abstract class DeckStatTypeFilter extends StatTypeFilter { @Override public void afterFiltersApplied() { - final ItemPool items = itemManager.getFilteredItems(); + final ItemPool items = itemManager.getFilteredItems(); for (Map.Entry btn : buttonMap.entrySet()) { if (btn.getKey().predicate != null) { - int count = items.countAll(Deck.createPredicate(Predicates.compose(btn.getKey().predicate, PaperCard.FN_GET_RULES)), Deck.class); + int count = items.countAll(DeckProxy.createPredicate(Predicates.compose(btn.getKey().predicate, PaperCard.FN_GET_RULES)), DeckProxy.class); btn.getValue().setText(String.valueOf(count)); } } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemColumn.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemColumn.java index a69e012cf7f..9c83cdf97bb 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemColumn.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemColumn.java @@ -38,6 +38,7 @@ import forge.deck.Deck; import forge.deck.DeckSection; import forge.game.GameFormat; import forge.gui.CardPreferences; +import forge.gui.deckeditor.DeckProxy; import forge.item.IPaperCard; import forge.item.InventoryItem; import forge.item.InventoryItemFromSet; @@ -546,7 +547,7 @@ public class ItemColumn extends TableColumn { return i instanceof Deck ? ((Deck) i) : null; } private static ColorSet toDeckColor(final InventoryItem i) { - return i instanceof Deck ? ((Deck) i).getColor() : null; + return i instanceof DeckProxy ? ((DeckProxy) i).getColor() : null; } private static int toDeckCount(final InventoryItem i, DeckSection section) { Deck deck = toDeck(i);