Clean up filters logic

This commit is contained in:
drdev
2014-07-24 23:17:34 +00:00
parent 85f22db6df
commit 879b9a59d5
9 changed files with 10 additions and 131 deletions

View File

@@ -45,7 +45,6 @@ import forge.toolbox.FLabel;
import forge.util.Aggregates; import forge.util.Aggregates;
import forge.util.ItemPool; import forge.util.ItemPool;
import forge.util.LayoutHelper; import forge.util.LayoutHelper;
import forge.util.ReflectionUtil;
import java.util.*; import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
@@ -55,9 +54,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
private ItemPool<T> pool; private ItemPool<T> pool;
private final ItemManagerModel<T> model; private final ItemManagerModel<T> model;
private Predicate<? super T> filterPredicate = null; private Predicate<? super T> filterPredicate = null;
private final Map<Class<? extends ItemFilter<? extends T>>, List<ItemFilter<? extends T>>> filters = private final List<ItemFilter<? extends T>> filters = new ArrayList<ItemFilter<? extends T>>();
new HashMap<Class<? extends ItemFilter<? extends T>>, List<ItemFilter<? extends T>>>();
private final List<ItemFilter<? extends T>> orderedFilters = new ArrayList<ItemFilter<? extends T>>();
private boolean wantUnique = false; private boolean wantUnique = false;
private boolean alwaysNonUnique = false; private boolean alwaysNonUnique = false;
private boolean hideFilters = false; private boolean hideFilters = false;
@@ -218,7 +215,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
helper.include(btnAdvancedSearchOptions, viewButtonWidth, fieldHeight); helper.include(btnAdvancedSearchOptions, viewButtonWidth, fieldHeight);
helper.newLine(); helper.newLine();
if (!hideFilters) { if (!hideFilters) {
for (ItemFilter<? extends T> filter : orderedFilters) { for (ItemFilter<? extends T> filter : filters) {
helper.include(filter.getWidget(), filter.getPreferredWidth(helper.getRemainingLineWidth(), fieldHeight), fieldHeight); helper.include(filter.getWidget(), filter.getPreferredWidth(helper.getRemainingLineWidth(), fieldHeight), fieldHeight);
} }
helper.newLine(-ItemFilter.PADDING); helper.newLine(-ItemFilter.PADDING);
@@ -615,32 +612,8 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
protected abstract void addDefaultFilters(); protected abstract void addDefaultFilters();
protected abstract TextSearchFilter<? extends T> createSearchFilter(); protected abstract TextSearchFilter<? extends T> createSearchFilter();
protected <F extends ItemFilter<? extends T>> F getFilter(Class<F> filterClass) {
return ReflectionUtil.safeCast(filters.get(filterClass), filterClass);
}
@SuppressWarnings("unchecked")
public void addFilter(final ItemFilter<? extends T> filter) { public void addFilter(final ItemFilter<? extends T> filter) {
final Class<? extends ItemFilter<? extends T>> filterClass = (Class<? extends ItemFilter<? extends T>>) filter.getClass(); filters.add(filter);
List<ItemFilter<? extends T>> classFilters = filters.get(filterClass);
if (classFilters == null) {
classFilters = new ArrayList<ItemFilter<? extends T>>();
filters.put(filterClass, classFilters);
}
if (classFilters.size() > 0) {
//if filter with the same class already exists, try to merge if allowed
//NOTE: can always use first filter for these checks since if
//merge is supported, only one will ever exist
final ItemFilter<? extends T> existingFilter = classFilters.get(0);
if (existingFilter.merge(filter)) {
//if new filter merged with existing filter, just refresh the widget
existingFilter.refreshWidget();
applyNewOrModifiedFilter(existingFilter);
return;
}
}
classFilters.add(filter);
orderedFilters.add(filter);
add(filter.getWidget()); add(filter.getWidget());
boolean visible = !hideFilters; boolean visible = !hideFilters;
@@ -659,37 +632,28 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
public void restoreDefaultFilters() { public void restoreDefaultFilters() {
lockFiltering = true; lockFiltering = true;
for (ItemFilter<? extends T> filter : orderedFilters) { for (ItemFilter<? extends T> filter : filters) {
remove(filter.getWidget()); remove(filter.getWidget());
} }
filters.clear(); filters.clear();
orderedFilters.clear();
addDefaultFilters(); addDefaultFilters();
lockFiltering = false; lockFiltering = false;
revalidate(); revalidate();
applyFilters(); applyFilters();
} }
@SuppressWarnings("unchecked")
public void removeFilter(ItemFilter<? extends T> filter) { public void removeFilter(ItemFilter<? extends T> filter) {
final Class<? extends ItemFilter<? extends T>> filterClass = (Class<? extends ItemFilter<? extends T>>) filter.getClass(); filters.remove(filter);
final List<ItemFilter<? extends T>> classFilters = filters.get(filterClass);
if (classFilters != null && classFilters.remove(filter)) {
if (classFilters.size() == 0) {
filters.remove(filterClass);
}
orderedFilters.remove(filter);
remove(filter.getWidget()); remove(filter.getWidget());
revalidate(); revalidate();
applyFilters(); applyFilters();
} }
}
public boolean applyFilters() { public boolean applyFilters() {
if (lockFiltering || !initialized) { return false; } if (lockFiltering || !initialized) { return false; }
List<Predicate<? super T>> predicates = new ArrayList<Predicate<? super T>>(); List<Predicate<? super T>> predicates = new ArrayList<Predicate<? super T>>();
for (ItemFilter<? extends T> filter : orderedFilters) { //TODO: Support custom filter logic for (ItemFilter<? extends T> filter : filters) { //TODO: Support custom filter logic
if (!filter.isEmpty()) { if (!filter.isEmpty()) {
predicates.add(filter.buildPredicate(genericType)); predicates.add(filter.buildPredicate(genericType));
} }
@@ -738,7 +702,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
hideFilters = hideFilters0; hideFilters = hideFilters0;
boolean visible = !hideFilters0; boolean visible = !hideFilters0;
for (ItemFilter<? extends T> filter : orderedFilters) { for (ItemFilter<? extends T> filter : filters) {
filter.getWidget().setVisible(visible); filter.getWidget().setVisible(visible);
} }
for (ItemView<T> view : views) { for (ItemView<T> view : views) {

View File

@@ -28,18 +28,4 @@ public class CardSetFilter extends CardFormatFilter {
this.sets.clear(); this.sets.clear();
super.reset(); super.reset();
} }
/**
* 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(ItemFilter<?> filter) {
CardSetFilter cardSetFilter = (CardSetFilter)filter;
this.sets.addAll(cardSetFilter.sets);
this.formats.clear();
this.formats.add(new GameFormat(null, this.sets, null));
return true;
}
} }

View File

@@ -69,11 +69,4 @@ public class DeckFolderFilter extends ListLabelFilter<DeckProxy> {
this.folders.clear(); this.folders.clear();
this.updateLabel(); this.updateLabel();
} }
@Override
public boolean merge(ItemFilter<?> filter) {
DeckFolderFilter formatFilter = (DeckFolderFilter)filter;
this.folders.addAll(formatFilter.folders);
return true;
}
} }

View File

@@ -29,20 +29,6 @@ public class DeckSetFilter extends DeckFormatFilter {
super.reset(); super.reset();
} }
/**
* 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(ItemFilter<?> filter) {
DeckSetFilter cardSetFilter = (DeckSetFilter)filter;
this.sets.addAll(cardSetFilter.sets);
this.formats.clear();
this.formats.add(new GameFormat(null, this.sets, null));
return true;
}
public void edit() { public void edit() {
/*final DialogChooseSets dialog = new DialogChooseSets(this.sets, null, true); /*final DialogChooseSets dialog = new DialogChooseSets(this.sets, null, true);
dialog.setOkCallback(new Runnable() { dialog.setOkCallback(new Runnable() {

View File

@@ -56,19 +56,6 @@ public abstract class FormatFilter<T extends InventoryItem> extends ItemFilter<T
return existingFilter == null || !existingFilter.formats.contains(format); return existingFilter == null || !existingFilter.formats.contains(format);
} }
/**
* 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
*/
@SuppressWarnings("unchecked")
@Override
public boolean merge(ItemFilter<?> filter) {
FormatFilter<T> formatFilter = (FormatFilter<T>)filter;
this.formats.addAll(formatFilter.formats);
return true;
}
@Override @Override
public boolean isEmpty() { public boolean isEmpty() {
return formats.isEmpty(); return formats.isEmpty();

View File

@@ -67,13 +67,6 @@ public abstract class ItemFilter<T extends InventoryItem> {
public abstract boolean isEmpty(); public abstract boolean isEmpty();
public abstract void reset(); public abstract void reset();
/**
* 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
*/
public abstract boolean merge(ItemFilter<?> filter);
public float getPreferredWidth(float maxWidth, float height) { public float getPreferredWidth(float maxWidth, float height) {
return maxWidth; //use maximum width by default return maxWidth; //use maximum width by default
} }

View File

@@ -46,16 +46,6 @@ public class TextSearchFilter<T extends InventoryItem> extends ItemFilter<T> {
return txtSearch; return txtSearch;
} }
/**
* 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(ItemFilter<?> filter) {
return false;
}
@Override @Override
protected void buildWidget(Widget widget) { protected void buildWidget(Widget widget) {
txtSearch = new SearchField(); txtSearch = new SearchField();

View File

@@ -62,16 +62,6 @@ public abstract class ToggleButtonsFilter<T extends InventoryItem> extends ItemF
} }
} }
/**
* 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(ItemFilter<?> filter) {
return true;
}
public class ToggleButton extends FLabel { public class ToggleButton extends FLabel {
private FEventHandler longPressHandler; private FEventHandler longPressHandler;

View File

@@ -107,14 +107,4 @@ public abstract class ValueRangeFilter<T extends InventoryItem> extends ItemFilt
return SFilterUtil.optimizedAnd(pLower, pUpper); return SFilterUtil.optimizedAnd(pLower, pUpper);
} }
/**
* 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(ItemFilter<?> filter) {
return true;
}
} }