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.ItemPool;
import forge.util.LayoutHelper;
import forge.util.ReflectionUtil;
import java.util.*;
import java.util.Map.Entry;
@@ -55,9 +54,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
private ItemPool<T> pool;
private final ItemManagerModel<T> model;
private Predicate<? super T> filterPredicate = null;
private final Map<Class<? extends ItemFilter<? extends T>>, List<ItemFilter<? extends T>>> filters =
new HashMap<Class<? extends ItemFilter<? extends T>>, List<ItemFilter<? extends T>>>();
private final List<ItemFilter<? extends T>> orderedFilters = new ArrayList<ItemFilter<? extends T>>();
private final List<ItemFilter<? extends T>> filters = new ArrayList<ItemFilter<? extends T>>();
private boolean wantUnique = false;
private boolean alwaysNonUnique = 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.newLine();
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.newLine(-ItemFilter.PADDING);
@@ -615,32 +612,8 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
protected abstract void addDefaultFilters();
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) {
final Class<? extends ItemFilter<? extends T>> filterClass = (Class<? extends ItemFilter<? extends T>>) filter.getClass();
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);
filters.add(filter);
add(filter.getWidget());
boolean visible = !hideFilters;
@@ -659,37 +632,28 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
public void restoreDefaultFilters() {
lockFiltering = true;
for (ItemFilter<? extends T> filter : orderedFilters) {
for (ItemFilter<? extends T> filter : filters) {
remove(filter.getWidget());
}
filters.clear();
orderedFilters.clear();
addDefaultFilters();
lockFiltering = false;
revalidate();
applyFilters();
}
@SuppressWarnings("unchecked")
public void removeFilter(ItemFilter<? extends T> filter) {
final Class<? extends ItemFilter<? extends T>> filterClass = (Class<? extends ItemFilter<? extends T>>) filter.getClass();
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());
revalidate();
applyFilters();
}
filters.remove(filter);
remove(filter.getWidget());
revalidate();
applyFilters();
}
public boolean applyFilters() {
if (lockFiltering || !initialized) { return false; }
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()) {
predicates.add(filter.buildPredicate(genericType));
}
@@ -738,7 +702,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
hideFilters = hideFilters0;
boolean visible = !hideFilters0;
for (ItemFilter<? extends T> filter : orderedFilters) {
for (ItemFilter<? extends T> filter : filters) {
filter.getWidget().setVisible(visible);
}
for (ItemView<T> view : views) {

View File

@@ -28,18 +28,4 @@ public class CardSetFilter extends CardFormatFilter {
this.sets.clear();
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.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();
}
/**
* 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() {
/*final DialogChooseSets dialog = new DialogChooseSets(this.sets, null, true);
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);
}
/**
* 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
public boolean isEmpty() {
return formats.isEmpty();

View File

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

View File

@@ -46,16 +46,6 @@ public class TextSearchFilter<T extends InventoryItem> extends ItemFilter<T> {
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
protected void buildWidget(Widget widget) {
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 {
private FEventHandler longPressHandler;

View File

@@ -107,14 +107,4 @@ public abstract class ValueRangeFilter<T extends InventoryItem> extends ItemFilt
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;
}
}