mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Clean up filters logic
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user