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.
This commit is contained in:
leriomaggio
2021-07-10 21:22:40 +01:00
parent b800e478f1
commit 32e3d00cec
3 changed files with 39 additions and 14 deletions

View File

@@ -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<PaperCard> {
existingFilter.edit(itemManager);
}
else {
final DialogChooseSets dialog = new DialogChooseSets(null, null, true);
List<String> limitedSets = getFilteredSetCodesInCatalog();
final DialogChooseSets dialog = new DialogChooseSets(null, null, limitedSets, true);
dialog.setOkCallback(new Runnable() {
@Override
public void run() {
List<String> sets = dialog.getSelectedSets();
if (!sets.isEmpty()) {
itemManager.addFilter(new CardSetFilter(itemManager, sets, dialog.getWantReprints()));
itemManager.addFilter(new CardSetFilter(itemManager, sets, limitedSets, dialog.getWantReprints()));
}
}
});

View File

@@ -257,12 +257,13 @@ public final class DeckManager extends ItemManager<DeckProxy> implements IHasGam
if (existingFilter != null) {
existingFilter.edit();
} else {
final DialogChooseSets dialog = new DialogChooseSets(null, null, true);
List<String> limitedSets = getFilteredSetCodesInCatalog();
final DialogChooseSets dialog = new DialogChooseSets(null, null, limitedSets, true);
dialog.setOkCallback(new Runnable() {
@Override public void run() {
final List<String> 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<DeckProxy> implements IHasGam
});
}
@Override
protected List<String> 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<? extends InventoryItem, ? extends DeckBase> editorCtrl = null;
FScreen screen = null;

View File

@@ -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<T extends InventoryItem> extends JPanel implem
menu.show(e.getComponent(), e.getX(), e.getY());
}
protected List<String> filteredSetCodesInCatalog = null;
protected List<String> getFilteredSetCodesInCatalog(){
if (filteredSetCodesInCatalog == null) {
ItemManager<? extends InventoryItem> cardsManager = VCardCatalog.SINGLETON_INSTANCE.getItemManager();
if (cardsManager == null)
return null;
try {
ItemPool<PaperCard> cardsPool = (ItemPool<PaperCard>) cardsManager.getPool();
Set<String> uniqueSetCodes = new HashSet<>(); // init
for (Entry<PaperCard, Integer> entry : cardsPool)
uniqueSetCodes.add(entry.getKey().getEdition());
filteredSetCodesInCatalog = new ArrayList<>(uniqueSetCodes);
} catch (ClassCastException ex) {
return null;
}
}
return filteredSetCodesInCatalog;
}
}