mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
New Block CardManager filter (if Load Historic format is enabled)
The new CardBlockFilter extends the generic CardSetFilter by specialising the selection to set codes allowed in the corresponding Block GameFormat. A new Label `lblBlock` has been added to language file (so far, English only)
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package forge.itemmanager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
@@ -11,21 +13,8 @@ import forge.gamemodes.quest.QuestWorld;
|
||||
import forge.gamemodes.quest.data.QuestPreferences;
|
||||
import forge.gui.GuiUtils;
|
||||
import forge.item.PaperCard;
|
||||
import forge.itemmanager.filters.AdvancedSearchFilter;
|
||||
import forge.itemmanager.filters.CardCMCFilter;
|
||||
import forge.itemmanager.filters.CardCMCRangeFilter;
|
||||
import forge.itemmanager.filters.CardColorFilter;
|
||||
import forge.itemmanager.filters.CardFoilFilter;
|
||||
import forge.itemmanager.filters.CardFormatFilter;
|
||||
import forge.itemmanager.filters.CardPowerFilter;
|
||||
import forge.itemmanager.filters.CardQuestWorldFilter;
|
||||
import forge.itemmanager.filters.CardRatingFilter;
|
||||
import forge.itemmanager.filters.CardSearchFilter;
|
||||
import forge.itemmanager.filters.CardSetFilter;
|
||||
import forge.itemmanager.filters.CardToughnessFilter;
|
||||
import forge.itemmanager.filters.CardTypeFilter;
|
||||
import forge.itemmanager.filters.FormatFilter;
|
||||
import forge.itemmanager.filters.ItemFilter;
|
||||
import forge.itemmanager.filters.*;
|
||||
import forge.localinstance.properties.ForgePreferences;
|
||||
import forge.model.FModel;
|
||||
import forge.screens.home.quest.DialogChooseFormats;
|
||||
import forge.screens.home.quest.DialogChooseSets;
|
||||
@@ -156,12 +145,34 @@ public class CardManager extends ItemManager<PaperCard> {
|
||||
GuiUtils.addMenuItem(world, w.getName(), null, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
itemManager.addFilter(new CardQuestWorldFilter(itemManager, w, false));
|
||||
itemManager.addFilter(new CardQuestWorldFilter(itemManager, w));
|
||||
}
|
||||
}, CardQuestWorldFilter.canAddQuestWorld(w, itemManager.getFilter(CardQuestWorldFilter.class)));
|
||||
}
|
||||
menu.add(world);
|
||||
|
||||
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.LOAD_HISTORIC_FORMATS)) {
|
||||
JMenu blocks = GuiUtils.createMenu(localizer.getMessage("lblBlock"));
|
||||
List<GameFormat> blockFormats = new ArrayList<>();
|
||||
for (GameFormat format : FModel.getFormats().getHistoricList()){
|
||||
if (format.getFormatSubType() != GameFormat.FormatSubType.BLOCK)
|
||||
continue;
|
||||
if (!format.getName().endsWith("Block"))
|
||||
continue;
|
||||
blockFormats.add(format);
|
||||
}
|
||||
Collections.sort(blockFormats); // GameFormat will be sorted by Index!
|
||||
for (final GameFormat f : blockFormats) {
|
||||
GuiUtils.addMenuItem(blocks, f.getName(), null, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
itemManager.addFilter(new CardBlockFilter(itemManager, f));
|
||||
}
|
||||
}, CardBlockFilter.canAddCardBlockWorld(f, itemManager.getFilter(CardBlockFilter.class)));
|
||||
}
|
||||
menu.add(blocks);
|
||||
}
|
||||
|
||||
GuiUtils.addSeparator(menu);
|
||||
|
||||
GuiUtils.addMenuItem(menu, localizer.getMessage("lblColors"), null, new Runnable() {
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
package forge.itemmanager.filters;
|
||||
|
||||
import forge.game.GameFormat;
|
||||
import forge.item.PaperCard;
|
||||
import forge.itemmanager.ItemManager;
|
||||
import forge.model.FModel;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
public class CardBlockFilter extends CardSetFilter {
|
||||
|
||||
private final Set<GameFormat> selectedBlocks = new HashSet<>();
|
||||
private GameFormat cardBlock = null;
|
||||
|
||||
public CardBlockFilter(final ItemManager<? super PaperCard> itemManager0, final GameFormat cardBlock) {
|
||||
super(itemManager0, cardBlock.getAllowedSetCodes(), false);
|
||||
this.formats.add(cardBlock);
|
||||
this.selectedBlocks.add(cardBlock);
|
||||
}
|
||||
|
||||
private CardBlockFilter(final ItemManager<? super PaperCard> itemManager0, GameFormat cardBlock,
|
||||
Set<GameFormat> selectedBlocks){
|
||||
this(itemManager0, cardBlock);
|
||||
this.selectedBlocks.addAll(selectedBlocks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFilter<PaperCard> createCopy() {
|
||||
return new CardBlockFilter(itemManager, this.cardBlock, this.selectedBlocks);
|
||||
}
|
||||
|
||||
public static boolean canAddCardBlockWorld(final GameFormat cardBlock, final ItemFilter<PaperCard> existingFilter) {
|
||||
if (cardBlock == null || FModel.getBlocks() == null) {
|
||||
return false; //must have format
|
||||
}
|
||||
return existingFilter == null || !((CardBlockFilter)existingFilter).selectedBlocks.contains(cardBlock);
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge the given filter with this filter if possible
|
||||
* @param filter
|
||||
* @return true if filter merged in or to suppress adding a new filter, false to allow adding new filter
|
||||
*/
|
||||
@Override
|
||||
public boolean merge(final ItemFilter<?> filter) {
|
||||
final CardBlockFilter cardBlockFilter = (CardBlockFilter)filter;
|
||||
this.selectedBlocks.addAll(cardBlockFilter.selectedBlocks);
|
||||
this.sets.addAll(cardBlockFilter.sets);
|
||||
List<String> allBannedCards = new ArrayList<>();
|
||||
for (GameFormat f : this.formats){
|
||||
List<String> bannedCards = f.getBannedCardNames();
|
||||
if (bannedCards != null && bannedCards.size() > 0)
|
||||
allBannedCards.addAll(bannedCards);
|
||||
}
|
||||
this.formats.clear();
|
||||
this.formats.add(new GameFormat(null, this.sets, allBannedCards));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getCaption() {
|
||||
return "Block";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getCount() {
|
||||
return this.selectedBlocks.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Iterable<String> getList() {
|
||||
final Set<String> strings = new HashSet<>();
|
||||
for (final GameFormat f : this.selectedBlocks) {
|
||||
strings.add(f.getName());
|
||||
}
|
||||
return strings;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user