From f0ffeefe2419bb199084b9cf93bfcb8976eb1e5c Mon Sep 17 00:00:00 2001 From: drdev Date: Fri, 3 Jan 2014 03:47:19 +0000 Subject: [PATCH] Move filter items to "Add" submenu and add "Reset Filters" option to main Filters menu --- .../gui/toolbox/itemmanager/CardManager.java | 8 +-- .../gui/toolbox/itemmanager/ItemManager.java | 57 +++++++++++++++---- .../toolbox/itemmanager/SpellShopManager.java | 6 +- .../itemmanager/filters/CardFormatFilter.java | 1 + .../itemmanager/filters/ListLabelFilter.java | 17 +++--- 5 files changed, 61 insertions(+), 28 deletions(-) diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/CardManager.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/CardManager.java index 8b758556806..dcf7d519af1 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/CardManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/CardManager.java @@ -3,8 +3,6 @@ package forge.gui.toolbox.itemmanager; import java.util.List; import javax.swing.JMenu; -import javax.swing.JPopupMenu; - import forge.Singletons; import forge.game.GameFormat; import forge.gui.GuiUtils; @@ -44,8 +42,8 @@ public final class CardManager extends ItemManager { } @Override - protected void buildFilterMenu(JPopupMenu menu) { - buildFilterMenu(menu, this); + protected void buildAddFilterMenu(JMenu menu) { + buildAddFilterMenu(menu, this); } /* Static overrides shared with SpellShopManager*/ @@ -60,7 +58,7 @@ public final class CardManager extends ItemManager { return new CardSearchFilter(itemManager); } - public static void buildFilterMenu(JPopupMenu menu, final ItemManager itemManager) { + public static void buildAddFilterMenu(JMenu menu, final ItemManager itemManager) { GuiUtils.addSeparator(menu); //separate from current search item JMenu fmt = GuiUtils.createMenu("Format"); diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java index 3bdf01a850f..2a5885a0f9d 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java @@ -29,6 +29,7 @@ import java.util.Map; import java.util.Map.Entry; import javax.swing.JCheckBox; +import javax.swing.JMenu; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; @@ -158,7 +159,6 @@ public abstract class ItemManager extends JPanel { filter.setEnabled(enabled); } txtFilterLogic.setEnabled(enabled); - btnFilters.setEnabled(enabled); mainSearchFilter.setEnabled(enabled); mainSearchFilter.updateEnabled(); //need to call updateEnabled since no listener for filter checkbox lockFiltering = false; @@ -194,6 +194,32 @@ public abstract class ItemManager extends JPanel { } } }; + final Runnable cmdResetFilters = new Runnable() { + @Override + public void run() { + lockFiltering = true; //prevent updating filtering from this change until all filters reset + for (ItemFilter filter : orderedFilters) { + filter.setEnabled(true); + filter.reset(); + } + mainSearchFilter.reset(); + lockFiltering = false; + + if (mainSearchFilter.isEnabled()) { + applyFilters(); + } + else { + chkEnableFilters.setSelected(true); //this will apply filters in itemStateChanged handler + } + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + focus(); + } + }); + } + }; this.mainSearchFilter.getMainComponent().addKeyListener(new KeyAdapter() { @Override @@ -206,20 +232,29 @@ public abstract class ItemManager extends JPanel { } }); - //setup command for btnAddFilter - final Command addFilterCommand = new Command() { + //setup command for btnFilters + final Command cmdBuildFilterMenu = new Command() { @Override public void run() { JPopupMenu menu = new JPopupMenu("FilterMenu"); - GuiUtils.addMenuItem(menu, "Current text search", - KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), - cmdAddCurrentSearch, !mainSearchFilter.isEmpty()); - buildFilterMenu(menu); + JMenu addMenu = GuiUtils.createMenu("Add"); + if (mainSearchFilter.isEnabled()) { + GuiUtils.addMenuItem(addMenu, "Current text search", + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), + cmdAddCurrentSearch, !mainSearchFilter.isEmpty()); + buildAddFilterMenu(addMenu); + } + else { + addMenu.setEnabled(false); + } + menu.add(addMenu); + GuiUtils.addSeparator(menu); + GuiUtils.addMenuItem(menu, "Reset Filters", null, cmdResetFilters); menu.show(btnFilters, 0, btnFilters.getHeight()); } }; - this.btnFilters.setCommand(addFilterCommand); - this.btnFilters.setRightClickCommand(addFilterCommand); //show menu on right-click too + this.btnFilters.setCommand(cmdBuildFilterMenu); + this.btnFilters.setRightClickCommand(cmdBuildFilterMenu); //show menu on right-click too //setup initial filters addDefaultFilters(); @@ -586,7 +621,7 @@ public abstract class ItemManager extends JPanel { protected abstract void addDefaultFilters(); protected abstract ItemFilter createSearchFilter(); - protected abstract void buildFilterMenu(JPopupMenu menu); + protected abstract void buildAddFilterMenu(JMenu menu); protected > F getFilter(Class filterClass) { return ReflectionUtil.safeCast(this.filters.get(filterClass), filterClass); @@ -656,8 +691,6 @@ public abstract class ItemManager extends JPanel { if (this.lockFiltering || !this.initialized) { return; } List> predicates = new ArrayList>(); - predicates.add(Predicates.instanceOf(this.genericType)); - for (ItemFilter filter : this.orderedFilters) { //TODO: Support custom filter logic if (filter.isEnabled() && !filter.isEmpty()) { predicates.add(filter.buildPredicate(this.genericType)); diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/SpellShopManager.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/SpellShopManager.java index d83ad38da11..06e681a2e3d 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/SpellShopManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/SpellShopManager.java @@ -1,6 +1,6 @@ package forge.gui.toolbox.itemmanager; -import javax.swing.JPopupMenu; +import javax.swing.JMenu; import forge.gui.toolbox.itemmanager.filters.ItemFilter; import forge.item.InventoryItem; @@ -26,7 +26,7 @@ public final class SpellShopManager extends ItemManager { } @Override - protected void buildFilterMenu(JPopupMenu menu) { - CardManager.buildFilterMenu(menu, this); + protected void buildAddFilterMenu(JMenu menu) { + CardManager.buildAddFilterMenu(menu, this); } } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardFormatFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardFormatFilter.java index 57cfac77ca6..2b3fdcb7d7f 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardFormatFilter.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/CardFormatFilter.java @@ -104,6 +104,7 @@ public class CardFormatFilter extends ListLabelFilter { @Override public void reset() { this.formats.clear(); + this.updateLabel(); } @Override diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/ListLabelFilter.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/ListLabelFilter.java index ad037609e60..b1a88da2d7b 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/ListLabelFilter.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/filters/ListLabelFilter.java @@ -33,11 +33,17 @@ public abstract class ListLabelFilter extends ItemFilte @Override protected final void buildWidget(JPanel widget) { + label = new FLabel.Builder().fontAlign(SwingConstants.LEFT).fontSize(12).build(); + updateLabel(); + widget.add(label); + } + + protected void updateLabel() { StringBuilder labelBuilder = new StringBuilder(); labelBuilder.append(getCaption()); switch (getCount()) { case 0: - labelBuilder.append(": All"); + labelBuilder.append("s: All"); break; case 1: labelBuilder.append(": " + getList().iterator().next()); @@ -46,13 +52,8 @@ public abstract class ListLabelFilter extends ItemFilte labelBuilder.append("s: " + TextUtil.join(getList(), ", ")); break; } - label = new FLabel.Builder() - .text(labelBuilder.toString()) - .tooltip(getTooltip()) - .fontAlign(SwingConstants.LEFT) - .fontSize(12) - .build(); - widget.add(label); + label.setText(labelBuilder.toString()); + label.setToolTipText(getTooltip()); } @Override