diff --git a/src/main/java/forge/game/limited/BoosterDraft.java b/src/main/java/forge/game/limited/BoosterDraft.java index a90f90b22fa..4ff60d35075 100644 --- a/src/main/java/forge/game/limited/BoosterDraft.java +++ b/src/main/java/forge/game/limited/BoosterDraft.java @@ -252,7 +252,7 @@ public final class BoosterDraft implements IBoosterDraft { } this.computerChoose(); - return ItemPool.createFrom(this.pack.get(this.getCurrentBoosterIndex()), CardPrinted.class); + return ItemPool.createFrom(this.pack.get(this.getCurrentBoosterIndex()), CardPrinted.class, false); } /** diff --git a/src/main/java/forge/game/limited/CustomLimited.java b/src/main/java/forge/game/limited/CustomLimited.java index 911bf2b2b3d..80f27c44e4c 100644 --- a/src/main/java/forge/game/limited/CustomLimited.java +++ b/src/main/java/forge/game/limited/CustomLimited.java @@ -109,7 +109,8 @@ public class CustomLimited extends DeckBase { final String deckName = data.get("DeckFile"); final Deck deckCube = cubes.get(deckName); - cd.cardPool = deckCube == null ? ItemPool.createFrom(CardDb.instance().getAllUniqueCards(), CardPrinted.class) + cd.cardPool = deckCube == null ? ItemPool.createFrom( + CardDb.instance().getAllUniqueCards(), CardPrinted.class, false) : deckCube.getMain(); return cd; diff --git a/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java b/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java index 28c3c28e97f..018926e2f39 100644 --- a/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java +++ b/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java @@ -21,12 +21,16 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.List; import forge.Card; import forge.deck.DeckBase; import forge.gui.CardContainer; import forge.gui.deckeditor.SEditorIO.EditorPreference; import forge.gui.deckeditor.controllers.ACEditorBase; +import forge.gui.deckeditor.controllers.CProbabilities; +import forge.gui.deckeditor.controllers.CStatistics; +import forge.gui.deckeditor.tables.EditorTableView; import forge.gui.match.controllers.CDetail; import forge.gui.match.controllers.CPicture; import forge.item.InventoryItem; @@ -80,6 +84,7 @@ public enum CDeckEditorUI implements CardContainer { /** * Set controller for current configuration of editor. + * * @param editor0   {@link forge.gui.deckeditor.controllers.ACEditorBase} */ public void setCurrentEditorController(ACEditorBase editor0) { @@ -94,6 +99,46 @@ public enum CDeckEditorUI implements CardContainer { childController.getTableDeck().setWantUnique(wantUnique); } } + + private interface _MoveAction { + void move(InventoryItem item); + } + + private void moveSelectedCards( + EditorTableView table, _MoveAction moveAction, boolean moveFour) { + List items = table.getSelectedCards(); + for (InventoryItem item : items) { + final int numToMove = Math.min(moveFour? 4 : 1, table.getCardCount(item)); + for (int count = 0; numToMove > count; ++count) { + moveAction.move(item); + } + } + + CStatistics.SINGLETON_INSTANCE.update(); + CProbabilities.SINGLETON_INSTANCE.update(); + } + + @SuppressWarnings("unchecked") + public void addSelectedCards(boolean addFour) { + moveSelectedCards((EditorTableView)childController.getTableCatalog(), + new _MoveAction() { + @Override + public void move(InventoryItem item) { + childController.addCard(item); + } + }, addFour); + } + + @SuppressWarnings("unchecked") + public void removeSelectedCards(boolean removeFour) { + moveSelectedCards((EditorTableView)childController.getTableDeck(), + new _MoveAction() { + @Override + public void move(InventoryItem item) { + childController.removeCard(item); + } + }, removeFour); + } //========== Other methods /** @@ -103,28 +148,28 @@ public enum CDeckEditorUI implements CardContainer { childController.getTableCatalog().getTable().addKeyListener(new KeyAdapter() { @Override public void keyPressed(final KeyEvent e) { - if (e.getKeyChar() == ' ') { childController.addCard(); } + if (e.getKeyChar() == ' ') { addSelectedCards(false); } } }); childController.getTableDeck().getTable().addKeyListener(new KeyAdapter() { @Override public void keyPressed(final KeyEvent e) { - if (e.getKeyChar() == ' ') { childController.removeCard(); } + if (e.getKeyChar() == ' ') { removeSelectedCards(false); } } }); childController.getTableCatalog().getTable().addMouseListener(new MouseAdapter() { @Override public void mouseClicked(final MouseEvent e) { - if (e.getClickCount() == 2) { childController.addCard(); } + if (e.getClickCount() == 2) { addSelectedCards(false); } } }); childController.getTableDeck().getTable().addMouseListener(new MouseAdapter() { @Override public void mouseClicked(final MouseEvent e) { - if (e.getClickCount() == 2) { childController.removeCard(); } + if (e.getClickCount() == 2) { removeSelectedCards(false); } } }); diff --git a/src/main/java/forge/gui/deckeditor/VDeckEditorUI.java b/src/main/java/forge/gui/deckeditor/VDeckEditorUI.java index 60b41120407..6f4e7b39532 100644 --- a/src/main/java/forge/gui/deckeditor/VDeckEditorUI.java +++ b/src/main/java/forge/gui/deckeditor/VDeckEditorUI.java @@ -3,6 +3,7 @@ package forge.gui.deckeditor; import javax.swing.SwingWorker; import forge.gui.deckeditor.controllers.CCardCatalog; +import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.framework.IVTopLevelUI; import forge.gui.framework.SLayoutIO; @@ -36,6 +37,7 @@ public enum VDeckEditorUI implements IVTopLevelUI { @Override public Void doInBackground() { SLayoutIO.loadLayout(null); + VCardCatalog.SINGLETON_INSTANCE.focusTable(); return null; } }; diff --git a/src/main/java/forge/gui/deckeditor/controllers/ACEditorBase.java b/src/main/java/forge/gui/deckeditor/controllers/ACEditorBase.java index 7e5ebe1b8d7..343f7896793 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/ACEditorBase.java +++ b/src/main/java/forge/gui/deckeditor/controllers/ACEditorBase.java @@ -41,15 +41,16 @@ public abstract class ACEditorBase tblCatalog; private EditorTableView tblDeck; + /** * Operation to add one of selected card to current deck. */ - public abstract void addCard(); + public abstract void addCard(InventoryItem item); /** * Operation to remove one of selected card from current deck. */ - public abstract void removeCard(); + public abstract void removeCard(InventoryItem item); /** * Resets the cards in the catalog table and current deck table. diff --git a/src/main/java/forge/gui/deckeditor/controllers/CCardCatalog.java b/src/main/java/forge/gui/deckeditor/controllers/CCardCatalog.java index 631696dd763..690acbca399 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CCardCatalog.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CCardCatalog.java @@ -42,7 +42,6 @@ import forge.gui.home.quest.DialogChooseSets; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FSpinner; import forge.item.CardPrinted; -import forge.item.InventoryItem; import forge.item.ItemPredicate; import forge.quest.QuestWorld; import forge.quest.data.GameFormatQuest; @@ -87,26 +86,13 @@ public enum CCardCatalog implements ICDoc { VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().setCommand(new Command() { @Override public void execute() { - CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().addCard(); - CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getTableCatalog().getTable().requestFocusInWindow(); - CStatistics.SINGLETON_INSTANCE.update(); - CProbabilities.SINGLETON_INSTANCE.update(); + CDeckEditorUI.SINGLETON_INSTANCE.addSelectedCards(false); } }); VCardCatalog.SINGLETON_INSTANCE.getBtnAdd4().setCommand(new Command() { @Override public void execute() { - final InventoryItem item = CDeckEditorUI.SINGLETON_INSTANCE - .getCurrentEditorController().getTableCatalog().getSelectedCard(); - - for (int i = 0; i < 4; i++) { - if (item != null && item.equals(CDeckEditorUI.SINGLETON_INSTANCE - .getCurrentEditorController().getTableCatalog().getSelectedCard())) { - CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().addCard(); - } - } - CStatistics.SINGLETON_INSTANCE.update(); - CProbabilities.SINGLETON_INSTANCE.update(); + CDeckEditorUI.SINGLETON_INSTANCE.addSelectedCards(true); } }); @@ -328,8 +314,10 @@ public enum CCardCatalog implements ICDoc { // Apply to table // TODO: is there really no way to make this type safe? - ((ACEditorBase)CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController()) - .getTableCatalog().setFilter(filter); + ACEditorBase editor = CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController(); + if (null != editor) { + ((ACEditorBase)editor).getTableCatalog().setFilter(filter); + } } private boolean canSearch() { diff --git a/src/main/java/forge/gui/deckeditor/controllers/CCurrentDeck.java b/src/main/java/forge/gui/deckeditor/controllers/CCurrentDeck.java index fd4effe1f3c..50482b8da3e 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CCurrentDeck.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CCurrentDeck.java @@ -4,10 +4,10 @@ import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.io.File; -import javax.swing.filechooser.FileFilter; import javax.swing.JFileChooser; import javax.swing.JTextField; import javax.swing.SwingUtilities; +import javax.swing.filechooser.FileFilter; import forge.Command; import forge.deck.Deck; @@ -20,7 +20,6 @@ import forge.gui.deckeditor.tables.DeckController; import forge.gui.deckeditor.views.VCurrentDeck; import forge.gui.framework.ICDoc; import forge.gui.toolbox.FLabel; -import forge.item.InventoryItem; import forge.properties.ForgeProps; import forge.properties.NewConstants; @@ -104,22 +103,12 @@ public enum CCurrentDeck implements ICDoc { ((FLabel) VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove()).setCommand(new Command() { @Override public void execute() { - CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().removeCard(); + CDeckEditorUI.SINGLETON_INSTANCE.removeSelectedCards(false); } }); ((FLabel) VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove4()).setCommand(new Command() { @Override public void execute() { - final InventoryItem item = CDeckEditorUI.SINGLETON_INSTANCE - .getCurrentEditorController().getTableDeck().getSelectedCard(); - - if (item == null) { return; } - - for (int i = 0; i < 4; i++) { - if (item.equals(CDeckEditorUI.SINGLETON_INSTANCE - .getCurrentEditorController().getTableDeck().getSelectedCard())) { - CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().removeCard(); - } - } + CDeckEditorUI.SINGLETON_INSTANCE.removeSelectedCards(true); } }); } diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java index a519c288fa6..32e7a29bd18 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java @@ -91,8 +91,7 @@ public final class CEditorConstructed extends ACEditorBase { * @see forge.gui.deckeditor.ACEditorBase#addCard() */ @Override - public void addCard() { - final InventoryItem item = this.getTableCatalog().getSelectedCard(); + public void addCard(InventoryItem item) { if ((item == null) || !(item instanceof CardPrinted)) { return; } @@ -110,8 +109,7 @@ public final class CEditorConstructed extends ACEditorBase { * @see forge.gui.deckeditor.ACEditorBase#removeCard() */ @Override - public void removeCard() { - final InventoryItem item = this.getTableDeck().getSelectedCard(); + public void removeCard(InventoryItem item) { if ((item == null) || !(item instanceof CardPrinted)) { return; } @@ -133,7 +131,7 @@ public final class CEditorConstructed extends ACEditorBase { @Override public void resetTables() { // Constructed mode can use all cards, no limitations. - this.getTableCatalog().setDeck(ItemPool.createFrom(CardDb.instance().getAllTraditionalCards(), CardPrinted.class)); + this.getTableCatalog().setDeck(ItemPool.createFrom(CardDb.instance().getAllTraditionalCards(), CardPrinted.class, true)); this.getTableDeck().setDeck(this.controller.getModel().getMain()); } @@ -161,7 +159,7 @@ public final class CEditorConstructed extends ACEditorBase { } else { lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY)); this.getTableCatalog().setAvailableColumns(lstCatalogCols); - this.getTableCatalog().setDeck(ItemPool.createFrom(CardDb.instance().getAllTraditionalCards(), CardPrinted.class)); + this.getTableCatalog().setDeck(ItemPool.createFrom(CardDb.instance().getAllTraditionalCards(), CardPrinted.class, true)); this.getTableDeck().setDeck(this.controller.getModel().getMain()); } diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java index 75e24ad8845..c26fcb5da08 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java @@ -116,8 +116,7 @@ public class CEditorDraftingProcess extends ACEditorBase * @see forge.gui.deckeditor.ACEditorBase#addCard() */ @Override - public void addCard() { - final InventoryItem item = this.getTableCatalog().getSelectedCard(); + public void addCard(InventoryItem item) { if ((item == null) || !(item instanceof CardPrinted)) { return; } @@ -142,7 +141,7 @@ public class CEditorDraftingProcess extends ACEditorBase * @see forge.gui.deckeditor.ACEditorBase#removeCard() */ @Override - public void removeCard() { + public void removeCard(InventoryItem item) { } /** @@ -269,6 +268,8 @@ public class CEditorDraftingProcess extends ACEditorBase //Remove buttons VCardCatalog.SINGLETON_INSTANCE.getBtnAdd4().setVisible(false); + VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove().setVisible(false); + VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove4().setVisible(false); VCurrentDeck.SINGLETON_INSTANCE.getBtnDoSideboard().setVisible(false); diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java index d78fd444f1a..283e628e586 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java @@ -91,8 +91,7 @@ public final class CEditorLimited extends ACEditorBase { * @see forge.gui.deckeditor.ACEditorBase#addCard() */ @Override - public void addCard() { - final InventoryItem item = this.getTableCatalog().getSelectedCard(); + public void addCard(InventoryItem item) { if ((item == null) || !(item instanceof CardPrinted)) { return; } @@ -109,8 +108,7 @@ public final class CEditorLimited extends ACEditorBase { * @see forge.gui.deckeditor.ACEditorBase#removeCard() */ @Override - public void removeCard() { - final InventoryItem item = this.getTableDeck().getSelectedCard(); + public void removeCard(InventoryItem item) { if ((item == null) || !(item instanceof CardPrinted)) { return; } diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java index a610e6f9a00..11847faa24f 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java @@ -141,8 +141,7 @@ public final class CEditorQuest extends ACEditorBase { * @see forge.gui.deckeditor.ACEditorBase#addCard() */ @Override - public void addCard() { - final InventoryItem item = this.getTableCatalog().getSelectedCard(); + public void addCard(InventoryItem item) { if ((item == null) || !(item instanceof CardPrinted)) { return; } @@ -157,8 +156,7 @@ public final class CEditorQuest extends ACEditorBase { * @see forge.gui.deckeditor.ACEditorBase#removeCard() */ @Override - public void removeCard() { - final InventoryItem item = this.getTableDeck().getSelectedCard(); + public void removeCard(InventoryItem item) { if ((item == null) || !(item instanceof CardPrinted)) { return; } diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java index 6e2b73d8326..c509a4c09e6 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java @@ -90,7 +90,7 @@ public final class CEditorQuestCardShop extends ACEditorBase cardsForSale; private final ItemPool fullCatalogCards = - ItemPool.createFrom(CardDb.instance().getAllTraditionalCards(), InventoryItem.class); + ItemPool.createFrom(CardDb.instance().getAllTraditionalCards(), InventoryItem.class, true); private boolean showingFullCatalog = false; // get pricelist: @@ -287,77 +287,76 @@ public final class CEditorQuestCardShop extends ACEditorBase this.questData.getAssets().getCredits()) { + JOptionPane.showMessageDialog(null, "Not enough credits!"); + return; + } + + if (item instanceof CardPrinted) { + this.getTableCatalog().removeCard(item); - if (item instanceof CardPrinted) { - this.getTableCatalog().removeCard(item); + final CardPrinted card = (CardPrinted) item; + this.getTableDeck().addCard(card); + this.questData.getCards().buyCard(card, value); - final CardPrinted card = (CardPrinted) item; + } else if (item instanceof OpenablePack) { + this.getTableCatalog().removeCard(item); + + OpenablePack booster = null; + if (item instanceof BoosterPack) { + booster = (BoosterPack) ((BoosterPack) item).clone(); + } else if (item instanceof TournamentPack) { + booster = (TournamentPack) ((TournamentPack) item).clone(); + } else if (item instanceof FatPack) { + booster = (FatPack) ((FatPack) item).clone(); + } + this.questData.getCards().buyPack(booster, value); + final List newCards = booster.getCards(); + for (final CardPrinted card : newCards) { this.getTableDeck().addCard(card); - this.questData.getCards().buyCard(card, value); - - } else if (item instanceof OpenablePack) { - this.getTableCatalog().removeCard(item); - - OpenablePack booster = null; - if (item instanceof BoosterPack) { - booster = (BoosterPack) ((BoosterPack) item).clone(); - } else if (item instanceof TournamentPack) { - booster = (TournamentPack) ((TournamentPack) item).clone(); - } else if (item instanceof FatPack) { - booster = (FatPack) ((FatPack) item).clone(); - } - this.questData.getCards().buyPack(booster, value); - final List newCards = booster.getCards(); - for (final CardPrinted card : newCards) { - this.getTableDeck().addCard(card); - } - final CardListViewer c = new CardListViewer(booster.getName(), - "You have found the following cards inside:", newCards); - c.show(); - } else if (item instanceof PreconDeck) { - this.getTableCatalog().removeCard(item); - final PreconDeck deck = (PreconDeck) item; - this.questData.getCards().buyPreconDeck(deck, value); - - for (final CardPrinted card : deck.getDeck().getMain().toFlatList()) { - this.getTableDeck().addCard(card); - } - JOptionPane.showMessageDialog(null, String.format( - "Deck '%s' was added to your decklist.%n%nCards from it were also added to your pool.", - deck.getName()), "Thanks for purchasing!", JOptionPane.INFORMATION_MESSAGE); + } + final CardListViewer c = new CardListViewer(booster.getName(), + "You have found the following cards inside:", newCards); + c.show(); + } else if (item instanceof PreconDeck) { + this.getTableCatalog().removeCard(item); + final PreconDeck deck = (PreconDeck) item; + this.questData.getCards().buyPreconDeck(deck, value); + for (final CardPrinted card : deck.getDeck().getMain().toFlatList()) { + this.getTableDeck().addCard(card); } - this.creditsLabel.setText("Credits: " + this.questData.getAssets().getCredits()); - } else { - JOptionPane.showMessageDialog(null, "Not enough credits!"); + JOptionPane.showMessageDialog(null, String.format( + "Deck '%s' was added to your decklist.%n%nCards from it were also added to your pool.", + deck.getName()), "Thanks for purchasing!", JOptionPane.INFORMATION_MESSAGE); } + + this.creditsLabel.setText("Credits: " + this.questData.getAssets().getCredits()); } /* (non-Javadoc) * @see forge.gui.deckeditor.ACEditorBase#removeCard() */ @Override - public void removeCard() { + public void removeCard(InventoryItem item) { if (showingFullCatalog) { // no "selling" to the full catalog return; } - final InventoryItem item = this.getTableDeck().getSelectedCard(); + if ((item == null) || !(item instanceof CardPrinted)) { return; } @@ -398,19 +397,12 @@ public final class CEditorQuestCardShop extends ACEditorBase ownedItems = new ItemPool(InventoryItem.class); ownedItems.addAll(this.questData.getCards().getCardpool().getView()); diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorVariant.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorVariant.java index ff298bd980c..14b55020232 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorVariant.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorVariant.java @@ -93,8 +93,7 @@ public final class CEditorVariant extends ACEditorBase { * @see forge.gui.deckeditor.ACEditorBase#addCard() */ @Override - public void addCard() { - final InventoryItem item = this.getTableCatalog().getSelectedCard(); + public void addCard(InventoryItem item) { if ((item == null) || !(item instanceof CardPrinted)) { return; } @@ -109,8 +108,7 @@ public final class CEditorVariant extends ACEditorBase { * @see forge.gui.deckeditor.ACEditorBase#removeCard() */ @Override - public void removeCard() { - final InventoryItem item = this.getTableDeck().getSelectedCard(); + public void removeCard(InventoryItem item) { if ((item == null) || !(item instanceof CardPrinted)) { return; } @@ -132,7 +130,7 @@ public final class CEditorVariant extends ACEditorBase { Iterable allNT = CardDb.instance().getAllNonTraditionalCards(); allNT = Iterables.filter(allNT, cardPoolCondition); - this.getTableCatalog().setDeck(ItemPool.createFrom(allNT, CardPrinted.class)); + this.getTableCatalog().setDeck(ItemPool.createFrom(allNT, CardPrinted.class, true)); this.getTableDeck().setDeck(this.controller.getModel().getSideboard()); } diff --git a/src/main/java/forge/gui/deckeditor/controllers/CProbabilities.java b/src/main/java/forge/gui/deckeditor/controllers/CProbabilities.java index 5c03b2b1e9e..f25e9da35b8 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CProbabilities.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CProbabilities.java @@ -64,7 +64,7 @@ public enum CProbabilities implements ICDoc { CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController(); final ItemPoolView deck = ItemPool.createFrom( - ed.getTableDeck().getCards(), CardPrinted.class); + ed.getTableDeck().getCards(), CardPrinted.class, false); final List cardProbabilities = new ArrayList(); diff --git a/src/main/java/forge/gui/deckeditor/controllers/CStatistics.java b/src/main/java/forge/gui/deckeditor/controllers/CStatistics.java index f522473c106..eee4905ecac 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CStatistics.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CStatistics.java @@ -74,7 +74,7 @@ public enum CStatistics implements ICDoc { if (ed == null) { return; } final ItemPoolView deck = ItemPool.createFrom( - ed.getTableDeck().getCards(), CardPrinted.class); + ed.getTableDeck().getCards(), CardPrinted.class, false); int total = deck.countAll(); diff --git a/src/main/java/forge/gui/deckeditor/tables/EditorTableView.java b/src/main/java/forge/gui/deckeditor/tables/EditorTableView.java index cba940b0472..47bfc835f5a 100644 --- a/src/main/java/forge/gui/deckeditor/tables/EditorTableView.java +++ b/src/main/java/forge/gui/deckeditor/tables/EditorTableView.java @@ -21,6 +21,7 @@ import java.awt.Color; import java.awt.Component; import java.awt.Point; import java.awt.event.MouseEvent; +import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; @@ -157,9 +158,11 @@ public final class EditorTableView { Point p = e.getPoint(); int row = rowAtPoint(p); int col = columnAtPoint(p); - Object val = table.getValueAt(row, col); + if (col >= table.getColumnCount() || row >= table.getRowCount()) { + return null; + } - return _getCellTooltip(getCellRenderer(row, col), row, col, val); + return _getCellTooltip(getCellRenderer(row, col), row, col, table.getValueAt(row, col)); } }; @@ -252,7 +255,7 @@ public final class EditorTableView { * an Iterable */ public void setDeck(final Iterable cards) { - this.setDeckImpl(ItemPool.createFrom(cards, this.genericType)); + this.setDeckImpl(ItemPool.createFrom(cards, this.genericType, false)); } /** @@ -262,7 +265,7 @@ public final class EditorTableView { * an ItemPoolView */ public void setDeck(final ItemPoolView poolView) { - this.setDeckImpl(ItemPool.createFrom(poolView, this.genericType)); + this.setDeckImpl(ItemPool.createFrom(poolView, this.genericType, false)); } /** @@ -299,6 +302,17 @@ public final class EditorTableView { final int iRow = this.table.getSelectedRow(); return iRow >= 0 ? this.model.rowToCard(iRow).getKey() : null; } + + /** + * returns all selected cards + */ + public List getSelectedCards() { + List items = new ArrayList(); + for (int row : table.getSelectedRows()) { + items.add(model.rowToCard(row).getKey()); + } + return items; + } private boolean isUnfiltered() { return this.filter == null; @@ -313,7 +327,9 @@ public final class EditorTableView { */ public void setFilter(final Predicate filterToSet) { this.filter = filterToSet; - this.updateView(true); + if (null != pool) { + this.updateView(true); + } } /** @@ -328,7 +344,7 @@ public final class EditorTableView { this.pool.add(card); if (this.isUnfiltered()) { this.model.addCard(card); - } + } this.updateView(false); } @@ -348,6 +364,10 @@ public final class EditorTableView { this.updateView(false); this.fixSelection(n); } + + public int getCardCount(final T card) { + return this.pool.count(card); + } /** * diff --git a/src/main/java/forge/gui/deckeditor/views/VCardCatalog.java b/src/main/java/forge/gui/deckeditor/views/VCardCatalog.java index e739aa91dd2..f9b7041994e 100644 --- a/src/main/java/forge/gui/deckeditor/views/VCardCatalog.java +++ b/src/main/java/forge/gui/deckeditor/views/VCardCatalog.java @@ -63,7 +63,7 @@ public enum VCardCatalog implements IVDoc, ITableContainer { private final FLabel btnAdd = new FLabel.Builder() .fontSize(14) .text("Add card") - .tooltip("Add selected card to current deck (or double click the row)") + .tooltip("Add selected card to current deck (or double click the row or hit the spacebar)") .icon(FSkin.getIcon(FSkin.InterfaceIcons.ICO_PLUS)) .iconScaleAuto(false).hoverable(true).build(); private final FLabel btnAdd4 = new FLabel.Builder() @@ -239,6 +239,16 @@ public enum VCardCatalog implements IVDoc, ITableContainer { .build(); } + public void focusTable() { + if (null != tblCards) { + tblCards.requestFocusInWindow(); + + if (0 < tblCards.getRowCount()) { + tblCards.changeSelection(0, 0, false, false); + } + } + } + @SuppressWarnings("serial") public void addRestrictionWidget(JComponent component, final Command onRemove) { final JPanel pnl = new JPanel(new MigLayout("insets 2, gap 2, h 30!")); diff --git a/src/main/java/forge/item/ItemPool.java b/src/main/java/forge/item/ItemPool.java index 937fbdcea2d..9f0d3e3deb2 100644 --- a/src/main/java/forge/item/ItemPool.java +++ b/src/main/java/forge/item/ItemPool.java @@ -43,6 +43,10 @@ public class ItemPool extends ItemPoolView { super(cls); } + public ItemPool(final Class cls, boolean infiniteStock) { + super(cls, infiniteStock); + } + /** * createFrom method. * @@ -58,8 +62,8 @@ public class ItemPool extends ItemPoolView { */ @SuppressWarnings("unchecked") public static ItemPool createFrom( - final ItemPoolView from, final Class clsHint) { - final ItemPool result = new ItemPool(clsHint); + final ItemPoolView from, final Class clsHint, boolean infiniteStock) { + final ItemPool result = new ItemPool(clsHint, infiniteStock); if (from != null) { for (final Entry e : from) { final Tin srcKey = e.getKey(); @@ -86,8 +90,8 @@ public class ItemPool extends ItemPoolView { */ @SuppressWarnings("unchecked") public static ItemPool createFrom( - final Iterable from, final Class clsHint) { - final ItemPool result = new ItemPool(clsHint); + final Iterable from, final Class clsHint, boolean infiniteStock) { + final ItemPool result = new ItemPool(clsHint, infiniteStock); if (from != null) { for (final Tin srcKey : from) { if (clsHint.isInstance(srcKey)) { diff --git a/src/main/java/forge/item/ItemPoolView.java b/src/main/java/forge/item/ItemPoolView.java index 4aee4ab811e..2c9cbe6a5ab 100644 --- a/src/main/java/forge/item/ItemPoolView.java +++ b/src/main/java/forge/item/ItemPoolView.java @@ -76,33 +76,28 @@ public class ItemPoolView implements Iterable - */ public ItemPoolView(final Class cls) { - this.cards = new Hashtable(); - this.myClass = cls; + this(cls, false); + } + + public ItemPoolView(final Class cls, boolean infiniteStock) { + this(new Hashtable(), cls, infiniteStock); } - /** - * - * ItemPoolView. - * - * @param inMap - * a Map - * @param cls - * a Class - */ public ItemPoolView(final Map inMap, final Class cls) { + this(inMap, cls, false); + } + + public ItemPoolView(final Map inMap, final Class cls, boolean infiniteStock) { this.cards = inMap; this.myClass = cls; + this.infiniteStock = infiniteStock; } // Data members + // if this is true, queries for card count will return INT_MAX + private final boolean infiniteStock; + /** The cards. */ private final Map cards; @@ -157,7 +152,7 @@ public class ItemPoolView implements Iterable