DeckManagers use DeckProxies

This commit is contained in:
Maxmtg
2014-01-21 09:32:36 +00:00
parent d97495ed41
commit 567ffe84cd
16 changed files with 239 additions and 180 deletions

View File

@@ -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<Entry<DeckSection, CardPo
}
return ColorSet.fromMask(colorProfile);
}
//create predicate that applys a card predicate to all cards in deck
public static final Predicate<Deck> createPredicate(final Predicate<PaperCard> cardPredicate) {
return new Predicate<Deck>() {
@Override
public boolean apply(Deck input) {
for (Entry<DeckSection, CardPool> deckEntry : input) {
switch (deckEntry.getKey()) {
case Main:
case Sideboard:
case Commander:
for (Entry<PaperCard, Integer> 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;
}
};
}
}

View File

@@ -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<ColorDeckGenerator> {
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<String> selection = new ArrayList<String>();
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<Deck> decks = new ArrayList<Deck>();
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
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<Deck> decks = new ArrayList<Deck>();
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<Deck> decks = new ArrayList<Deck>();
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<Deck> decks = new ArrayList<Deck>();
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<Deck> 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<DeckProxy> 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<Deck> 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() {

View File

@@ -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<DeckProxy> getAllConstructedDecks() {
// This is a temporary solution that does not iterate over subfolders. - will improve
return Iterables.transform(Singletons.getModel().getDecks().getConstructed(), new Function<Deck, DeckProxy>(){
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<DeckProxy> createPredicate(final Predicate<PaperCard> cardPredicate) {
return new Predicate<DeckProxy>() {
@Override
public boolean apply(DeckProxy input) {
for (Entry<DeckSection, CardPool> deckEntry : input.getDeck()) {
switch (deckEntry.getKey()) {
case Main:
case Sideboard:
case Commander:
for (Entry<PaperCard, Integer> 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<DeckProxy> getAllThemeDecks() {
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
for (final String s : GenerateThemeDeck.getThemeNames()) {
decks.add(new ThemeDeckGenerator(s));
}
return decks;
}
public static Iterable<DeckProxy> getAllPreconstructedDecks() {
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
for (final PreconDeck preconDeck : QuestController.getPrecons()) {
decks.add(new DeckProxy(preconDeck.getDeck(), null, null));
}
return decks;
}
public static Iterable<DeckProxy> getAllQuestEventAndChallenges() {
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
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<DeckProxy> getAllSealedDecks(IStorage<DeckGroup> sealed) {
final List<DeckProxy> humanDecks = new ArrayList<DeckProxy>();
// 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<DeckProxy> getAllQuestDecks(IStorage<Deck> storage) {
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
if( storage != null )
for (final Deck preconDeck : storage) {
decks.add(new DeckProxy(preconDeck, GameType.Quest, storage));
}
return decks;
}
public static Iterable<DeckProxy> getDraftDecks(IStorage<DeckGroup> draft) {
ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>();
for (DeckGroup d : draft) {
decks.add(new DeckProxy(d.getHumanDeck(), GameType.Draft, null));
}
return decks;
}
}

View File

@@ -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)

View File

@@ -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<Deck>());
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<DeckProxy, Integer> 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().

View File

@@ -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<Deck> human = new ArrayList<Deck>();
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<RegisteredPlayer> starter = new ArrayList<RegisteredPlayer>();
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);

View File

@@ -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")

View File

@@ -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<CSubmenuConstructed> {
mainDeckPanel.add(mainChooser, "grow, push, wrap");
}
protected void onDeckClicked(int iPlayer, DeckType type, Iterable<Deck> selectedDecks) {
protected void onDeckClicked(int iPlayer, DeckType type, Iterable<DeckProxy> selectedDecks) {
String text = type.toString() + ": " + Lang.joinHomogenous(selectedDecks);
deckSelectorBtns.get(iPlayer).setText(text);
}

View File

@@ -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<Deck> {
public final class DeckManager extends ItemManager<DeckProxy> {
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<Deck> {
* @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<Deck> {
}
@Override
protected ItemFilter<Deck> createSearchFilter() {
protected ItemFilter<DeckProxy> createSearchFilter() {
return new DeckSearchFilter(this);
}
@@ -213,7 +213,7 @@ public final class DeckManager extends ItemManager<Deck> {
}, getFilter(DeckColorFilter.class) == null);
}
private <T extends DeckBase> void editDeck(final Deck deck) {
private <T extends DeckBase> void editDeck(final DeckProxy deck) {
if (deck == null || this.preventEdit) { return; }
ACEditorBase<? extends InventoryItem, ? extends DeckBase> editorCtrl = null;
@@ -252,7 +252,7 @@ public final class DeckManager extends ItemManager<Deck> {
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<Deck> {
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)) {

View File

@@ -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<Deck> {
public DeckColorFilter(ItemManager<? super Deck> itemManager0) {
public class DeckColorFilter extends StatTypeFilter<DeckProxy> {
public DeckColorFilter(ItemManager<? super DeckProxy> itemManager0) {
super(itemManager0);
}
@Override
public ItemFilter<Deck> createCopy() {
public ItemFilter<DeckProxy> createCopy() {
return new DeckColorFilter(itemManager);
}
@@ -36,10 +37,10 @@ public class DeckColorFilter extends StatTypeFilter<Deck> {
}
@Override
protected final Predicate<Deck> buildPredicate() {
return new Predicate<Deck>() {
protected final Predicate<DeckProxy> buildPredicate() {
return new Predicate<DeckProxy>() {
@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<Deck> {
@Override
public void afterFiltersApplied() {
final ItemPool<? super Deck> items = itemManager.getFilteredItems();
final ItemPool<? super DeckProxy> 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)));

View File

@@ -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<Deck> {
public DeckFormatFilter(ItemManager<? super Deck> itemManager0) {
public class DeckFormatFilter extends FormatFilter<DeckProxy> {
public DeckFormatFilter(ItemManager<? super DeckProxy> itemManager0) {
super(itemManager0);
}
public DeckFormatFilter(ItemManager<? super Deck> itemManager0, GameFormat format0) {
public DeckFormatFilter(ItemManager<? super DeckProxy> itemManager0, GameFormat format0) {
super(itemManager0, format0);
}
@Override
public ItemFilter<Deck> createCopy() {
public ItemFilter<DeckProxy> createCopy() {
DeckFormatFilter copy = new DeckFormatFilter(itemManager);
copy.formats.addAll(this.formats);
return copy;
}
@Override
protected final Predicate<Deck> buildPredicate() {
return Deck.createPredicate(SFilterUtil.buildFormatFilter(this.formats, this.allowReprints));
protected final Predicate<DeckProxy> buildPredicate() {
return DeckProxy.createPredicate(SFilterUtil.buildFormatFilter(this.formats, this.allowReprints));
}
}

View File

@@ -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<QuestWorld> questWorlds = new HashSet<QuestWorld>();
public DeckQuestWorldFilter(ItemManager<? super Deck> itemManager0) {
public DeckQuestWorldFilter(ItemManager<? super DeckProxy> itemManager0) {
super(itemManager0);
}
public DeckQuestWorldFilter(ItemManager<? super Deck> itemManager0, QuestWorld questWorld0) {
public DeckQuestWorldFilter(ItemManager<? super DeckProxy> itemManager0, QuestWorld questWorld0) {
super(itemManager0);
this.questWorlds.add(questWorld0);
this.formats.add(getQuestWorldFormat(questWorld0));
}
@Override
public ItemFilter<Deck> createCopy() {
public ItemFilter<DeckProxy> 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<Deck> existingFilter) {
public static boolean canAddQuestWorld(QuestWorld questWorld, ItemFilter<DeckProxy> existingFilter) {
if (questWorld.getFormat() == null && Singletons.getModel().getQuest().getMainFormat() == null) {
return false; //must have format
}

View File

@@ -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<Deck> {
public DeckSearchFilter(ItemManager<? super Deck> itemManager0) {
public class DeckSearchFilter extends TextSearchFilter<DeckProxy> {
public DeckSearchFilter(ItemManager<? super DeckProxy> itemManager0) {
super(itemManager0);
}
@Override
public ItemFilter<Deck> createCopy() {
public ItemFilter<DeckProxy> createCopy() {
DeckSearchFilter copy = new DeckSearchFilter(itemManager);
copy.getWidget(); //initialize widget
copy.txtSearch.setText(this.txtSearch.getText());

View File

@@ -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<String> sets = new HashSet<String>();
public DeckSetFilter(ItemManager<? super Deck> itemManager0, Collection<String> sets0, boolean allowReprints0) {
public DeckSetFilter(ItemManager<? super DeckProxy> itemManager0, Collection<String> 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<Deck> createCopy() {
public ItemFilter<DeckProxy> createCopy() {
return new DeckSetFilter(itemManager, this.sets, this.allowReprints);
}

View File

@@ -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<Deck> {
public DeckStatTypeFilter(ItemManager<? super Deck> itemManager0) {
public abstract class DeckStatTypeFilter extends StatTypeFilter<DeckProxy> {
public DeckStatTypeFilter(ItemManager<? super DeckProxy> itemManager0) {
super(itemManager0);
}
@@ -24,11 +24,11 @@ public abstract class DeckStatTypeFilter extends StatTypeFilter<Deck> {
@Override
public void afterFiltersApplied() {
final ItemPool<? super Deck> items = itemManager.getFilteredItems();
final ItemPool<? super DeckProxy> items = itemManager.getFilteredItems();
for (Map.Entry<SItemManagerUtil.StatTypes, FLabel> 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));
}
}

View File

@@ -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);