From 32e3d00cecf003b244222eaff52dbb9d2a140c66 Mon Sep 17 00:00:00 2001 From: leriomaggio Date: Sat, 10 Jul 2021 21:22:40 +0100 Subject: [PATCH] ItemManager now includes a new special method to get filtered set codes from CardPool The method is implemented in the abstract super class (ItemManager) and so inherited by `CardManager` (where there is no format nor game type that could be used), and specialised by `DeckManager`. In particular, the only current format with limitations on sets is Brawl, and so the only one accounted for. In any case, the list of (unique) allowed sets is automatically inferred by default from the cardpool (as in the case of `CardManager`). It is important to note that this filter is stored into an attribute, and so the list is calculated only once. The results of this list will be passed on the `DialogChooseSets` to update the content of the dialog panel, accordingly. --- .../java/forge/itemmanager/CardManager.java | 10 +++---- .../java/forge/itemmanager/DeckManager.java | 15 ++++++++-- .../java/forge/itemmanager/ItemManager.java | 28 +++++++++++++++---- 3 files changed, 39 insertions(+), 14 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java index 86c4f82c562..8f69d994b4e 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java @@ -1,9 +1,6 @@ package forge.itemmanager; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.Map.Entry; import javax.swing.JMenu; @@ -126,13 +123,14 @@ public class CardManager extends ItemManager { existingFilter.edit(itemManager); } else { - final DialogChooseSets dialog = new DialogChooseSets(null, null, true); + List limitedSets = getFilteredSetCodesInCatalog(); + final DialogChooseSets dialog = new DialogChooseSets(null, null, limitedSets, true); dialog.setOkCallback(new Runnable() { @Override public void run() { List sets = dialog.getSelectedSets(); if (!sets.isEmpty()) { - itemManager.addFilter(new CardSetFilter(itemManager, sets, dialog.getWantReprints())); + itemManager.addFilter(new CardSetFilter(itemManager, sets, limitedSets, dialog.getWantReprints())); } } }); diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java index b0574553527..4a583e9fd2b 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java @@ -257,12 +257,13 @@ public final class DeckManager extends ItemManager implements IHasGam if (existingFilter != null) { existingFilter.edit(); } else { - final DialogChooseSets dialog = new DialogChooseSets(null, null, true); + List limitedSets = getFilteredSetCodesInCatalog(); + final DialogChooseSets dialog = new DialogChooseSets(null, null, limitedSets, true); dialog.setOkCallback(new Runnable() { @Override public void run() { final List sets = dialog.getSelectedSets(); if (!sets.isEmpty()) { - addFilter(new DeckSetFilter(DeckManager.this, sets, dialog.getWantReprints())); + addFilter(new DeckSetFilter(DeckManager.this, sets, limitedSets, dialog.getWantReprints())); } } }); @@ -334,6 +335,16 @@ public final class DeckManager extends ItemManager implements IHasGam }); } + @Override + protected List getFilteredSetCodesInCatalog(){ + GameType gameType = getGameType(); + if (gameType == GameType.Brawl) { + filteredSetCodesInCatalog = FModel.getFormats().get("Brawl").getAllowedSetCodes(); + return filteredSetCodesInCatalog; + } + return super.getFilteredSetCodesInCatalog(); + } + public void editDeck(final DeckProxy deck) { ACEditorBase editorCtrl = null; FScreen screen = null; diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java index dcd7287c6a2..041d1312fd4 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java @@ -22,12 +22,7 @@ import java.awt.Toolkit; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; import javax.swing.JMenu; @@ -48,12 +43,14 @@ import com.google.common.collect.Lists; import forge.gui.GuiUtils; import forge.gui.UiCommand; import forge.item.InventoryItem; +import forge.item.PaperCard; import forge.itemmanager.filters.ItemFilter; import forge.itemmanager.views.ImageView; import forge.itemmanager.views.ItemListView; import forge.itemmanager.views.ItemTableColumn; import forge.itemmanager.views.ItemView; import forge.localinstance.skin.FSkinProp; +import forge.screens.deckeditor.views.VCardCatalog; import forge.screens.match.controllers.CDetailPicture; import forge.toolbox.ContextMenuBuilder; import forge.toolbox.FComboBox; @@ -1279,4 +1276,23 @@ public abstract class ItemManager extends JPanel implem menu.show(e.getComponent(), e.getX(), e.getY()); } + + protected List filteredSetCodesInCatalog = null; + protected List getFilteredSetCodesInCatalog(){ + if (filteredSetCodesInCatalog == null) { + ItemManager cardsManager = VCardCatalog.SINGLETON_INSTANCE.getItemManager(); + if (cardsManager == null) + return null; + try { + ItemPool cardsPool = (ItemPool) cardsManager.getPool(); + Set uniqueSetCodes = new HashSet<>(); // init + for (Entry entry : cardsPool) + uniqueSetCodes.add(entry.getKey().getEdition()); + filteredSetCodesInCatalog = new ArrayList<>(uniqueSetCodes); + } catch (ClassCastException ex) { + return null; + } + } + return filteredSetCodesInCatalog; + } }