diff --git a/forge-core/src/main/java/forge/card/CardRarity.java b/forge-core/src/main/java/forge/card/CardRarity.java index 6f5b19f5fd9..14ced613b3c 100644 --- a/forge-core/src/main/java/forge/card/CardRarity.java +++ b/forge-core/src/main/java/forge/card/CardRarity.java @@ -17,31 +17,42 @@ */ package forge.card; +import com.google.common.base.Function; + public enum CardRarity { - BasicLand("L"), - Common("C"), - Uncommon("U"), - Rare("R"), - MythicRare("M"), - Special("S"), // Timeshifted - Unknown("?"); // In development + BasicLand("L", "Basic Land"), + Common("C", "Common"), + Uncommon("U", "Uncommon"), + Rare("R", "Rare"), + MythicRare("M", "Mythic Rare"), + Special("S", "Special"), // Timeshifted + Unknown("?", "Unknown"); // In development - private final String strValue; + private final String shortName, longName; - private CardRarity(final String sValue) { - this.strValue = sValue; + private CardRarity(final String shortName0, final String longName0) { + shortName = shortName0; + longName = longName0; } @Override public String toString() { - return this.strValue; + return shortName; } public static CardRarity smartValueOf(String input) { - for(CardRarity r : CardRarity.values()) { - if( r.name().equalsIgnoreCase(input) || r.strValue.equalsIgnoreCase(input)) + for (CardRarity r : CardRarity.values()) { + if (r.name().equalsIgnoreCase(input) || r.shortName.equalsIgnoreCase(input) || r.longName.equalsIgnoreCase(input)) { return r; + } } return Unknown; } + + public static final Function FN_GET_LONG_NAME = new Function() { + @Override + public String apply(final CardRarity rarity) { + return rarity.longName; + } + }; } diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java index 6336479628c..8b97a4d92ac 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java @@ -224,6 +224,7 @@ public class AdvancedSearchFilter extends ItemFilter } } + @SuppressWarnings("unchecked") private void removeNextFilter(Filter fromFilter) { int index = scroller.indexOf(fromFilter); if (index < scroller.getChildCount() - 1) { @@ -254,12 +255,17 @@ public class AdvancedSearchFilter extends ItemFilter @Override public void run() { final AdvancedSearch.Filter newFilter = AdvancedSearch.getFilter(itemManager.getGenericType(), filter); - if (newFilter != null) { + if (filter != newFilter) { FThreads.invokeInEdtLater(new Runnable() { @Override public void run() { filter = newFilter; - btnFilter.setText(filter.toString()); + if (filter != null) { + btnFilter.setText(filter.toString()); + } + else { + btnFilter.setText(emptyFilterText); + } } }); } diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index f3190fb1616..e1dd456ac6a 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -26,6 +26,7 @@ import forge.util.gui.SOptionPane; public class AdvancedSearch { private enum FilterOption { + NONE("(none)", null, null, null), CARD_NAME("Name", PaperCard.class, FilterOperator.STRING_OPS, new StringEvaluator() { @Override protected String getItemValue(PaperCard input) { @@ -140,7 +141,7 @@ public class AdvancedSearch { return input.getRules().getManaCost().toString(); } }), - CARD_RARITY("Rarity", PaperCard.class, FilterOperator.SINGLE_LIST_OPS, new CustomListEvaluator(Arrays.asList(CardRarity.values())) { + CARD_RARITY("Rarity", PaperCard.class, FilterOperator.SINGLE_LIST_OPS, new CustomListEvaluator(Arrays.asList(CardRarity.values()), CardRarity.FN_GET_LONG_NAME, CardRarity.FN_GET_LONG_NAME) { @Override protected CardRarity getItemValue(PaperCard input) { return input.getRarity(); @@ -567,6 +568,9 @@ public class AdvancedSearch { public static Filter getFilter(Class type, Filter editFilter) { //build list of filter options based on ItemManager type List options = new ArrayList(); + if (editFilter != null) { + options.add(FilterOption.NONE); //provide option to clear existing filter + } for (FilterOption opt : FilterOption.values()) { if (opt.type == type) { options.add(opt); @@ -575,11 +579,13 @@ public class AdvancedSearch { final FilterOption defaultOption = editFilter == null ? null : editFilter.option; final FilterOption option = SGuiChoose.oneOrNone("Select a filter type", options, defaultOption, null); - if (option == null) { return null; } + if (option == null) { return editFilter; } + + if (option == FilterOption.NONE) { return null; } //allow user to clear filter by selecting "(none)" final FilterOperator defaultOperator = option == defaultOption ? editFilter.operator : null; final FilterOperator operator = SGuiChoose.oneOrNone("Select an operator for " + option.name, option.operatorOptions, defaultOperator, null); - if (operator == null) { return null; } + if (operator == null) { return editFilter; } final String message = option.name + " " + operator.caption + " ?"; return (Filter)option.evaluator.createFilter(message, option, operator);