mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
Move Advanced Search option into ItemManager as button next to search field
Add menu option to reset filters
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -1244,7 +1244,7 @@ forge-gui-mobile/src/forge/itemmanager/CardManager.java -text
|
|||||||
forge-gui-mobile/src/forge/itemmanager/DeckManager.java -text
|
forge-gui-mobile/src/forge/itemmanager/DeckManager.java -text
|
||||||
forge-gui-mobile/src/forge/itemmanager/ItemManager.java -text
|
forge-gui-mobile/src/forge/itemmanager/ItemManager.java -text
|
||||||
forge-gui-mobile/src/forge/itemmanager/SpellShopManager.java -text
|
forge-gui-mobile/src/forge/itemmanager/SpellShopManager.java -text
|
||||||
forge-gui-mobile/src/forge/itemmanager/filters/CardAdvancedFilter.java -text
|
forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java -text
|
||||||
forge-gui-mobile/src/forge/itemmanager/filters/CardCMCFilter.java -text
|
forge-gui-mobile/src/forge/itemmanager/filters/CardCMCFilter.java -text
|
||||||
forge-gui-mobile/src/forge/itemmanager/filters/CardColorFilter.java -text
|
forge-gui-mobile/src/forge/itemmanager/filters/CardColorFilter.java -text
|
||||||
forge-gui-mobile/src/forge/itemmanager/filters/CardColorlessCostFilter.java -text
|
forge-gui-mobile/src/forge/itemmanager/filters/CardColorlessCostFilter.java -text
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import forge.itemmanager.ColumnDef;
|
|||||||
import forge.itemmanager.ItemColumn;
|
import forge.itemmanager.ItemColumn;
|
||||||
import forge.itemmanager.ItemManager.ContextMenuBuilder;
|
import forge.itemmanager.ItemManager.ContextMenuBuilder;
|
||||||
import forge.itemmanager.ItemManagerConfig;
|
import forge.itemmanager.ItemManagerConfig;
|
||||||
import forge.itemmanager.filters.CardAdvancedFilter;
|
|
||||||
import forge.itemmanager.filters.ItemFilter;
|
import forge.itemmanager.filters.ItemFilter;
|
||||||
import forge.limited.BoosterDraft;
|
import forge.limited.BoosterDraft;
|
||||||
import forge.menu.FCheckBoxMenuItem;
|
import forge.menu.FCheckBoxMenuItem;
|
||||||
@@ -185,7 +184,6 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
protected final FLabel lblName = deckHeader.add(new FLabel.Builder().font(FSkinFont.get(16)).insets(new Vector2(Utils.scale(5), 0)).build());
|
protected final FLabel lblName = deckHeader.add(new FLabel.Builder().font(FSkinFont.get(16)).insets(new Vector2(Utils.scale(5), 0)).build());
|
||||||
private final FLabel btnSave = deckHeader.add(new FLabel.Builder().icon(FSkinImage.SAVE).align(HAlignment.CENTER).pressedColor(Header.BTN_PRESSED_COLOR).build());
|
private final FLabel btnSave = deckHeader.add(new FLabel.Builder().icon(FSkinImage.SAVE).align(HAlignment.CENTER).pressedColor(Header.BTN_PRESSED_COLOR).build());
|
||||||
private final FLabel btnMoreOptions = deckHeader.add(new FLabel.Builder().text("...").font(FSkinFont.get(20)).align(HAlignment.CENTER).pressedColor(Header.BTN_PRESSED_COLOR).build());
|
private final FLabel btnMoreOptions = deckHeader.add(new FLabel.Builder().text("...").font(FSkinFont.get(20)).align(HAlignment.CENTER).pressedColor(Header.BTN_PRESSED_COLOR).build());
|
||||||
private final CardAdvancedFilter advancedSearchFilter;
|
|
||||||
|
|
||||||
public FDeckEditor(EditorType editorType0, DeckProxy editDeck, boolean showMainDeck) {
|
public FDeckEditor(EditorType editorType0, DeckProxy editDeck, boolean showMainDeck) {
|
||||||
this(editorType0, editDeck.getName(), editDeck.getPath(), null, showMainDeck);
|
this(editorType0, editDeck.getName(), editDeck.getPath(), null, showMainDeck);
|
||||||
@@ -227,8 +225,6 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
advancedSearchFilter = catalogPage != null ? new CardAdvancedFilter(catalogPage.cardManager) : null;
|
|
||||||
|
|
||||||
switch (editorType) {
|
switch (editorType) {
|
||||||
case Sealed:
|
case Sealed:
|
||||||
//if opening brand new sealed deck, show sideboard (card pool) by default
|
//if opening brand new sealed deck, show sideboard (card pool) by default
|
||||||
@@ -305,15 +301,6 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
setSelectedPage(getMainDeckPage()); //select main deck page if needed so main deck is visible below dialog
|
setSelectedPage(getMainDeckPage()); //select main deck page if needed so main deck is visible below dialog
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
if (advancedSearchFilter != null) {
|
|
||||||
addItem(new FMenuItem("Advanced Search", FSkinImage.SEARCH, new FEventHandler() {
|
|
||||||
@Override
|
|
||||||
public void handleEvent(FEvent e) {
|
|
||||||
advancedSearchFilter.edit();
|
|
||||||
setSelectedPage(getCatalogPage()); //select catalog page if needed so catalog is visible below dialog
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
if (!isLimitedEditor()) {
|
if (!isLimitedEditor()) {
|
||||||
addItem(new FMenuItem("Import from Clipboard", FSkinImage.OPEN, new FEventHandler() {
|
addItem(new FMenuItem("Import from Clipboard", FSkinImage.OPEN, new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import forge.assets.FSkinFont;
|
|||||||
import forge.card.CardRenderer;
|
import forge.card.CardRenderer;
|
||||||
import forge.card.CardZoom;
|
import forge.card.CardZoom;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
|
import forge.itemmanager.filters.AdvancedSearchFilter;
|
||||||
import forge.itemmanager.filters.CardColorFilter;
|
import forge.itemmanager.filters.CardColorFilter;
|
||||||
import forge.itemmanager.filters.CardFormatFilter;
|
import forge.itemmanager.filters.CardFormatFilter;
|
||||||
import forge.itemmanager.filters.CardSearchFilter;
|
import forge.itemmanager.filters.CardSearchFilter;
|
||||||
@@ -33,6 +34,11 @@ public class CardManager extends ItemManager<PaperCard> {
|
|||||||
return createSearchFilter(this);
|
return createSearchFilter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected AdvancedSearchFilter<PaperCard> createAdvancedSearchFilter() {
|
||||||
|
return createAdvancedSearchFilter(this);
|
||||||
|
}
|
||||||
|
|
||||||
/* Static overrides shared with SpellShopManager*/
|
/* Static overrides shared with SpellShopManager*/
|
||||||
|
|
||||||
public static void addDefaultFilters(final ItemManager<? super PaperCard> itemManager) {
|
public static void addDefaultFilters(final ItemManager<? super PaperCard> itemManager) {
|
||||||
@@ -45,6 +51,10 @@ public class CardManager extends ItemManager<PaperCard> {
|
|||||||
return new CardSearchFilter(itemManager);
|
return new CardSearchFilter(itemManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static AdvancedSearchFilter<PaperCard> createAdvancedSearchFilter(final ItemManager<? super PaperCard> itemManager) {
|
||||||
|
return new AdvancedSearchFilter<PaperCard>(itemManager);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemRenderer getListItemRenderer(final CompactModeHandler compactModeHandler) {
|
public ItemRenderer getListItemRenderer(final CompactModeHandler compactModeHandler) {
|
||||||
return new ItemRenderer() {
|
return new ItemRenderer() {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import forge.deck.FDeckViewer;
|
|||||||
import forge.deck.io.DeckPreferences;
|
import forge.deck.io.DeckPreferences;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.IHasGameType;
|
import forge.game.IHasGameType;
|
||||||
|
import forge.itemmanager.filters.AdvancedSearchFilter;
|
||||||
import forge.itemmanager.filters.DeckColorFilter;
|
import forge.itemmanager.filters.DeckColorFilter;
|
||||||
import forge.itemmanager.filters.DeckFormatFilter;
|
import forge.itemmanager.filters.DeckFormatFilter;
|
||||||
import forge.itemmanager.filters.DeckSearchFilter;
|
import forge.itemmanager.filters.DeckSearchFilter;
|
||||||
@@ -72,6 +73,11 @@ public final class DeckManager extends ItemManager<DeckProxy> implements IHasGam
|
|||||||
return new DeckSearchFilter(this);
|
return new DeckSearchFilter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected AdvancedSearchFilter<DeckProxy> createAdvancedSearchFilter() {
|
||||||
|
return new AdvancedSearchFilter<DeckProxy>(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean allowSortChange() {
|
protected boolean allowSortChange() {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -33,12 +33,15 @@ import forge.assets.FSkinFont;
|
|||||||
import forge.assets.FSkinImage;
|
import forge.assets.FSkinImage;
|
||||||
import forge.card.CardZoom.ActivateHandler;
|
import forge.card.CardZoom.ActivateHandler;
|
||||||
import forge.item.InventoryItem;
|
import forge.item.InventoryItem;
|
||||||
|
import forge.itemmanager.filters.AdvancedSearchFilter;
|
||||||
import forge.itemmanager.filters.ItemFilter;
|
import forge.itemmanager.filters.ItemFilter;
|
||||||
import forge.itemmanager.filters.TextSearchFilter;
|
import forge.itemmanager.filters.TextSearchFilter;
|
||||||
import forge.itemmanager.views.ImageView;
|
import forge.itemmanager.views.ImageView;
|
||||||
import forge.itemmanager.views.ItemListView;
|
import forge.itemmanager.views.ItemListView;
|
||||||
import forge.itemmanager.views.ItemView;
|
import forge.itemmanager.views.ItemView;
|
||||||
import forge.menu.FDropDownMenu;
|
import forge.menu.FDropDownMenu;
|
||||||
|
import forge.menu.FMenuItem;
|
||||||
|
import forge.menu.FPopupMenu;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
import forge.toolbox.FComboBox;
|
import forge.toolbox.FComboBox;
|
||||||
import forge.toolbox.FContainer;
|
import forge.toolbox.FContainer;
|
||||||
@@ -58,6 +61,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
private ItemPool<T> pool;
|
private ItemPool<T> pool;
|
||||||
protected final ItemManagerModel<T> model;
|
protected final ItemManagerModel<T> model;
|
||||||
private Predicate<? super T> filterPredicate = null;
|
private Predicate<? super T> filterPredicate = null;
|
||||||
|
private AdvancedSearchFilter<? extends T> advancedSearchFilter;
|
||||||
private final List<ItemFilter<? extends T>> filters = new ArrayList<ItemFilter<? extends T>>();
|
private final List<ItemFilter<? extends T>> filters = new ArrayList<ItemFilter<? extends T>>();
|
||||||
private boolean hideFilters = false;
|
private boolean hideFilters = false;
|
||||||
private boolean wantUnique = false;
|
private boolean wantUnique = false;
|
||||||
@@ -72,10 +76,13 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
|
|
||||||
private final TextSearchFilter<? extends T> searchFilter;
|
private final TextSearchFilter<? extends T> searchFilter;
|
||||||
|
|
||||||
private static final FSkinImage VIEW_OPTIONS_ICON = FSkinImage.SETTINGS;
|
private final FLabel btnSearch = new FLabel.ButtonBuilder()
|
||||||
|
.icon(FSkinImage.SEARCH).iconScaleFactor(0.9f).build();
|
||||||
|
private final FLabel btnView = new FLabel.ButtonBuilder()
|
||||||
|
.iconScaleFactor(0.9f).build(); //icon set later
|
||||||
private final FLabel btnAdvancedSearchOptions = new FLabel.Builder()
|
private final FLabel btnAdvancedSearchOptions = new FLabel.Builder()
|
||||||
.selectable(true).align(HAlignment.CENTER)
|
.selectable(true).align(HAlignment.CENTER)
|
||||||
.icon(VIEW_OPTIONS_ICON).iconScaleFactor(0.9f)
|
.icon(FSkinImage.SETTINGS).iconScaleFactor(0.9f)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
private final FComboBox<ItemColumn> cbxSortOptions;
|
private final FComboBox<ItemColumn> cbxSortOptions;
|
||||||
@@ -107,18 +114,12 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
views.add(listView);
|
views.add(listView);
|
||||||
views.add(imageView);
|
views.add(imageView);
|
||||||
currentView = listView;
|
currentView = listView;
|
||||||
|
btnView.setIcon(currentView.getIcon());
|
||||||
//initialize views
|
|
||||||
for (int i = 0; i < views.size(); i++) {
|
|
||||||
views.get(i).initialize(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
//build display
|
//build display
|
||||||
add(searchFilter.getWidget());
|
add(searchFilter.getWidget());
|
||||||
for (ItemView<T> view : views) {
|
add(btnSearch);
|
||||||
add(view.getButton());
|
add(btnView);
|
||||||
view.getButton().setSelected(view == currentView);
|
|
||||||
}
|
|
||||||
add(btnAdvancedSearchOptions);
|
add(btnAdvancedSearchOptions);
|
||||||
btnAdvancedSearchOptions.setSelected(!hideFilters);
|
btnAdvancedSearchOptions.setSelected(!hideFilters);
|
||||||
if (allowSortChange()) {
|
if (allowSortChange()) {
|
||||||
@@ -131,6 +132,57 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
add(currentView.getPnlOptions());
|
add(currentView.getPnlOptions());
|
||||||
add(currentView.getScroller());
|
add(currentView.getScroller());
|
||||||
|
|
||||||
|
btnSearch.setCommand(new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
FPopupMenu menu = new FPopupMenu() {
|
||||||
|
@Override
|
||||||
|
protected void buildMenu() {
|
||||||
|
addItem(new FMenuItem("Advanced Search", FSkinImage.SEARCH, new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
if (advancedSearchFilter == null) {
|
||||||
|
advancedSearchFilter = createAdvancedSearchFilter();
|
||||||
|
}
|
||||||
|
advancedSearchFilter.edit();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FMenuItem("Reset Filters", FSkinImage.DELETE, new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
resetFilters();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
menu.show(btnSearch, 0, btnSearch.getHeight());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
btnView.setCommand(new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
FPopupMenu menu = new FPopupMenu() {
|
||||||
|
@Override
|
||||||
|
protected void buildMenu() {
|
||||||
|
for (int i = 0; i < views.size(); i++) {
|
||||||
|
final int index = i;
|
||||||
|
ItemView<T> view = views.get(i);
|
||||||
|
FMenuItem item = new FMenuItem(view.getCaption(), view.getIcon(), new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
setViewIndex(index);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (currentView == view) {
|
||||||
|
item.setSelected(true);
|
||||||
|
}
|
||||||
|
addItem(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
menu.show(btnView, 0, btnView.getHeight());
|
||||||
|
}
|
||||||
|
});
|
||||||
btnAdvancedSearchOptions.setCommand(new FEventHandler() {
|
btnAdvancedSearchOptions.setCommand(new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
@@ -287,13 +339,12 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
itemsToSelect = null;
|
itemsToSelect = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
currentView.getButton().setSelected(false);
|
|
||||||
remove(currentView.getPnlOptions());
|
remove(currentView.getPnlOptions());
|
||||||
remove(currentView.getScroller());
|
remove(currentView.getScroller());
|
||||||
|
|
||||||
currentView = view;
|
currentView = view;
|
||||||
|
btnView.setIcon(view.getIcon());
|
||||||
|
|
||||||
view.getButton().setSelected(true);
|
|
||||||
view.refresh(itemsToSelect, backupIndexToSelect, 0);
|
view.refresh(itemsToSelect, backupIndexToSelect, 0);
|
||||||
|
|
||||||
add(view.getPnlOptions());
|
add(view.getPnlOptions());
|
||||||
@@ -306,12 +357,10 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
LayoutHelper helper = new LayoutHelper(this, ItemFilter.PADDING, ItemFilter.PADDING);
|
LayoutHelper helper = new LayoutHelper(this, ItemFilter.PADDING, ItemFilter.PADDING);
|
||||||
float fieldHeight = searchFilter.getMainComponent().getHeight();
|
float fieldHeight = searchFilter.getMainComponent().getHeight();
|
||||||
float viewButtonWidth = fieldHeight;
|
float viewButtonWidth = fieldHeight;
|
||||||
float viewButtonCount = views.size() + 1;
|
|
||||||
helper.offset(0, ItemFilter.PADDING);
|
helper.offset(0, ItemFilter.PADDING);
|
||||||
helper.fillLine(searchFilter.getWidget(), fieldHeight, (viewButtonWidth + helper.getGapX()) * viewButtonCount); //leave room for view buttons
|
helper.fillLine(searchFilter.getWidget(), fieldHeight, (viewButtonWidth + helper.getGapX()) * 3); //leave room for search, view, and options buttons
|
||||||
for (ItemView<T> view : views) {
|
helper.include(btnSearch, viewButtonWidth, fieldHeight);
|
||||||
helper.include(view.getButton(), viewButtonWidth, fieldHeight);
|
helper.include(btnView, viewButtonWidth, fieldHeight);
|
||||||
}
|
|
||||||
helper.include(btnAdvancedSearchOptions, viewButtonWidth, fieldHeight);
|
helper.include(btnAdvancedSearchOptions, viewButtonWidth, fieldHeight);
|
||||||
helper.newLine();
|
helper.newLine();
|
||||||
if (!hideFilters) {
|
if (!hideFilters) {
|
||||||
@@ -740,6 +789,7 @@ 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 abstract AdvancedSearchFilter<? extends T> createAdvancedSearchFilter();
|
||||||
|
|
||||||
public void addFilter(final ItemFilter<? extends T> filter) {
|
public void addFilter(final ItemFilter<? extends T> filter) {
|
||||||
addFilter(-1, filter);
|
addFilter(-1, filter);
|
||||||
@@ -779,6 +829,20 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
applyFilters();
|
applyFilters();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void resetFilters() {
|
||||||
|
lockFiltering = true; //prevent updating filtering from this change until all filters reset
|
||||||
|
for (final ItemFilter<? extends T> filter : filters) {
|
||||||
|
filter.reset();
|
||||||
|
}
|
||||||
|
searchFilter.reset();
|
||||||
|
if (advancedSearchFilter != null) {
|
||||||
|
advancedSearchFilter.reset();
|
||||||
|
}
|
||||||
|
lockFiltering = false;
|
||||||
|
|
||||||
|
applyFilters();
|
||||||
|
}
|
||||||
|
|
||||||
public void removeFilter(ItemFilter<? extends T> filter) {
|
public void removeFilter(ItemFilter<? extends T> filter) {
|
||||||
filters.remove(filter);
|
filters.remove(filter);
|
||||||
remove(filter.getWidget());
|
remove(filter.getWidget());
|
||||||
@@ -1103,7 +1167,10 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
showMenu(true);
|
showMenu(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public FComboBox<ItemColumn> getSortOptions() {
|
public float getPileByWidth() {
|
||||||
return cbxSortOptions;
|
if (cbxSortOptions != null) {
|
||||||
|
return cbxSortOptions.getWidth();
|
||||||
|
}
|
||||||
|
return filters.get(filters.size() - 1).getWidget().getWidth();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import forge.card.CardRenderer;
|
|||||||
import forge.card.CardZoom;
|
import forge.card.CardZoom;
|
||||||
import forge.item.InventoryItem;
|
import forge.item.InventoryItem;
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
|
import forge.itemmanager.filters.AdvancedSearchFilter;
|
||||||
import forge.itemmanager.filters.TextSearchFilter;
|
import forge.itemmanager.filters.TextSearchFilter;
|
||||||
import forge.quest.QuestSpellShop;
|
import forge.quest.QuestSpellShop;
|
||||||
import forge.toolbox.FList;
|
import forge.toolbox.FList;
|
||||||
@@ -43,6 +44,11 @@ public final class SpellShopManager extends ItemManager<InventoryItem> {
|
|||||||
return CardManager.createSearchFilter(this);
|
return CardManager.createSearchFilter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected AdvancedSearchFilter<? extends InventoryItem> createAdvancedSearchFilter() {
|
||||||
|
return CardManager.createAdvancedSearchFilter(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemRenderer getListItemRenderer(final CompactModeHandler compactModeHandler) {
|
public ItemRenderer getListItemRenderer(final CompactModeHandler compactModeHandler) {
|
||||||
return new ItemRenderer() {
|
return new ItemRenderer() {
|
||||||
|
|||||||
@@ -8,8 +8,7 @@ import com.google.common.base.Predicate;
|
|||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
|
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
import forge.assets.FSkinImage;
|
import forge.item.InventoryItem;
|
||||||
import forge.item.PaperCard;
|
|
||||||
import forge.itemmanager.BooleanExpression.Operator;
|
import forge.itemmanager.BooleanExpression.Operator;
|
||||||
import forge.itemmanager.ItemManager;
|
import forge.itemmanager.ItemManager;
|
||||||
import forge.menu.FTooltip;
|
import forge.menu.FTooltip;
|
||||||
@@ -24,26 +23,25 @@ import forge.toolbox.FEvent.FEventHandler;
|
|||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
|
|
||||||
|
|
||||||
public class CardAdvancedFilter extends ItemFilter<PaperCard> {
|
public class AdvancedSearchFilter<T extends InventoryItem> extends ItemFilter<T> {
|
||||||
private final List<Object> expression = new ArrayList<Object>();
|
private final List<Object> expression = new ArrayList<Object>();
|
||||||
|
|
||||||
private FiltersLabel label;
|
private FiltersLabel label;
|
||||||
private FLabel btnEdit;
|
|
||||||
private boolean isAdded;
|
private boolean isAdded;
|
||||||
private EditScreen editScreen;
|
private EditScreen editScreen;
|
||||||
|
|
||||||
public CardAdvancedFilter(ItemManager<? super PaperCard> itemManager0) {
|
public AdvancedSearchFilter(ItemManager<? super T> itemManager0) {
|
||||||
super(itemManager0);
|
super(itemManager0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemFilter<PaperCard> createCopy() {
|
public ItemFilter<T> createCopy() {
|
||||||
CardAdvancedFilter copy = new CardAdvancedFilter(itemManager);
|
AdvancedSearchFilter<T> copy = new AdvancedSearchFilter<T>(itemManager);
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected final Predicate<PaperCard> buildPredicate() {
|
protected final Predicate<T> buildPredicate() {
|
||||||
if (expression.isEmpty()) {
|
if (expression.isEmpty()) {
|
||||||
return Predicates.alwaysTrue();
|
return Predicates.alwaysTrue();
|
||||||
}
|
}
|
||||||
@@ -65,9 +63,9 @@ public class CardAdvancedFilter extends ItemFilter<PaperCard> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private Predicate<PaperCard> getPredicatePiece(ExpressionIterator iterator) {
|
private Predicate<T> getPredicatePiece(ExpressionIterator iterator) {
|
||||||
Predicate<PaperCard> pred = null;
|
Predicate<T> pred = null;
|
||||||
Predicate<PaperCard> predPiece = null;
|
Predicate<T> predPiece = null;
|
||||||
Operator operator = null;
|
Operator operator = null;
|
||||||
boolean applyNot = false;
|
boolean applyNot = false;
|
||||||
|
|
||||||
@@ -92,7 +90,7 @@ public class CardAdvancedFilter extends ItemFilter<PaperCard> {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
predPiece = ((ItemFilter<PaperCard>) piece).buildPredicate();
|
predPiece = ((ItemFilter<T>) piece).buildPredicate();
|
||||||
}
|
}
|
||||||
if (applyNot) {
|
if (applyNot) {
|
||||||
predPiece = Predicates.not(predPiece);
|
predPiece = Predicates.not(predPiece);
|
||||||
@@ -168,22 +166,11 @@ public class CardAdvancedFilter extends ItemFilter<PaperCard> {
|
|||||||
label = new FiltersLabel();
|
label = new FiltersLabel();
|
||||||
updateLabel();
|
updateLabel();
|
||||||
widget.add(label);
|
widget.add(label);
|
||||||
|
|
||||||
btnEdit = new FLabel.ButtonBuilder().icon(FSkinImage.SEARCH).iconScaleFactor(0.9f).command(new FEventHandler() {
|
|
||||||
@Override
|
|
||||||
public void handleEvent(FEvent e) {
|
|
||||||
edit();
|
|
||||||
}
|
|
||||||
}).build();
|
|
||||||
widget.add(btnEdit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doWidgetLayout(float width, float height) {
|
protected void doWidgetLayout(float width, float height) {
|
||||||
float buttonWidth = height;
|
label.setSize(width, height);
|
||||||
float buttonHeight = height;
|
|
||||||
btnEdit.setBounds(width - buttonWidth, (height - buttonHeight) / 2, buttonWidth, buttonHeight);
|
|
||||||
label.setSize(btnEdit.getLeft() - ItemFilter.PADDING, height);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class FiltersLabel extends FLabel {
|
private class FiltersLabel extends FLabel {
|
||||||
@@ -388,7 +388,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
btnExpandCollapseAll.setBounds(x, y, h, h);
|
btnExpandCollapseAll.setBounds(x, y, h, h);
|
||||||
x += h + padding;
|
x += h + padding;
|
||||||
|
|
||||||
float pileByWidth = itemManager.getSortOptions().getWidth();
|
float pileByWidth = itemManager.getPileByWidth();
|
||||||
float groupByWidth = width - x - padding - pileByWidth;
|
float groupByWidth = width - x - padding - pileByWidth;
|
||||||
|
|
||||||
cbGroupByOptions.setBounds(x, y, groupByWidth, h);
|
cbGroupByOptions.setBounds(x, y, groupByWidth, h);
|
||||||
@@ -654,7 +654,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected FImage getIcon() {
|
public FImage getIcon() {
|
||||||
if (itemManager.getGenericType().equals(DeckProxy.class)) {
|
if (itemManager.getGenericType().equals(DeckProxy.class)) {
|
||||||
return FSkinImage.PACK;
|
return FSkinImage.PACK;
|
||||||
}
|
}
|
||||||
@@ -662,7 +662,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getCaption() {
|
public String getCaption() {
|
||||||
return "Image View";
|
return "Image View";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,12 +71,12 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected FImage getIcon() {
|
public FImage getIcon() {
|
||||||
return FSkinImage.LIST;
|
return FSkinImage.LIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getCaption() {
|
public String getCaption() {
|
||||||
return "List View";
|
return "List View";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,7 @@ import forge.itemmanager.ItemManagerConfig;
|
|||||||
import forge.itemmanager.ItemManagerModel;
|
import forge.itemmanager.ItemManagerModel;
|
||||||
import forge.toolbox.FContainer;
|
import forge.toolbox.FContainer;
|
||||||
import forge.toolbox.FEvent;
|
import forge.toolbox.FEvent;
|
||||||
import forge.toolbox.FEvent.FEventHandler;
|
|
||||||
import forge.toolbox.FEvent.FEventType;
|
import forge.toolbox.FEvent.FEventType;
|
||||||
import forge.toolbox.FLabel;
|
|
||||||
import forge.toolbox.FScrollPane;
|
import forge.toolbox.FScrollPane;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -22,7 +20,6 @@ import java.util.Collection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
|
||||||
import com.badlogic.gdx.math.Rectangle;
|
import com.badlogic.gdx.math.Rectangle;
|
||||||
|
|
||||||
public abstract class ItemView<T extends InventoryItem> {
|
public abstract class ItemView<T extends InventoryItem> {
|
||||||
@@ -33,7 +30,6 @@ public abstract class ItemView<T extends InventoryItem> {
|
|||||||
protected int minSelections = 0;
|
protected int minSelections = 0;
|
||||||
protected int maxSelections = 1;
|
protected int maxSelections = 1;
|
||||||
private final Scroller scroller = new Scroller();
|
private final Scroller scroller = new Scroller();
|
||||||
private final FLabel button;
|
|
||||||
private final OptionsPanel pnlOptions = new OptionsPanel();
|
private final OptionsPanel pnlOptions = new OptionsPanel();
|
||||||
|
|
||||||
private float heightBackup;
|
private float heightBackup;
|
||||||
@@ -42,8 +38,6 @@ public abstract class ItemView<T extends InventoryItem> {
|
|||||||
protected ItemView(ItemManager<T> itemManager0, ItemManagerModel<T> model0) {
|
protected ItemView(ItemManager<T> itemManager0, ItemManagerModel<T> model0) {
|
||||||
itemManager = itemManager0;
|
itemManager = itemManager0;
|
||||||
model = model0;
|
model = model0;
|
||||||
button = new FLabel.Builder().selectable(true).align(HAlignment.CENTER)
|
|
||||||
.iconScaleFactor(0.9f).icon(getIcon()).build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Scroller extends FScrollPane {
|
private class Scroller extends FScrollPane {
|
||||||
@@ -96,24 +90,6 @@ public abstract class ItemView<T extends InventoryItem> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialize(final int index) {
|
|
||||||
button.setCommand(new FEventHandler() {
|
|
||||||
@Override
|
|
||||||
public void handleEvent(FEvent e) {
|
|
||||||
if (button.isSelected()) {
|
|
||||||
itemManager.setViewIndex(index);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
button.setSelected(true); //prevent toggling off button
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public FLabel getButton() {
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
public FScrollPane getScroller() {
|
public FScrollPane getScroller() {
|
||||||
return scroller;
|
return scroller;
|
||||||
}
|
}
|
||||||
@@ -285,8 +261,8 @@ public abstract class ItemView<T extends InventoryItem> {
|
|||||||
public abstract int getIndexAtPoint(float x, float y);
|
public abstract int getIndexAtPoint(float x, float y);
|
||||||
public abstract void scrollSelectionIntoView();
|
public abstract void scrollSelectionIntoView();
|
||||||
public abstract Rectangle getSelectionBounds();
|
public abstract Rectangle getSelectionBounds();
|
||||||
protected abstract FImage getIcon();
|
public abstract FImage getIcon();
|
||||||
protected abstract String getCaption();
|
public abstract String getCaption();
|
||||||
protected abstract void onSetSelectedIndex(int index);
|
protected abstract void onSetSelectedIndex(int index);
|
||||||
protected abstract void onSetSelectedIndices(Iterable<Integer> indices);
|
protected abstract void onSetSelectedIndices(Iterable<Integer> indices);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user