Move filter items to "Add" submenu and add "Reset Filters" option to main Filters menu

This commit is contained in:
drdev
2014-01-03 03:47:19 +00:00
parent df022d5df7
commit f0ffeefe24
5 changed files with 61 additions and 28 deletions

View File

@@ -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<PaperCard> {
}
@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<PaperCard> {
return new CardSearchFilter(itemManager);
}
public static void buildFilterMenu(JPopupMenu menu, final ItemManager<? super PaperCard> itemManager) {
public static void buildAddFilterMenu(JMenu menu, final ItemManager<? super PaperCard> itemManager) {
GuiUtils.addSeparator(menu); //separate from current search item
JMenu fmt = GuiUtils.createMenu("Format");

View File

@@ -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<T extends InventoryItem> 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<T extends InventoryItem> 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<? extends T> 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<T extends InventoryItem> 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",
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());
buildFilterMenu(menu);
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<T extends InventoryItem> extends JPanel {
protected abstract void addDefaultFilters();
protected abstract ItemFilter<? extends T> createSearchFilter();
protected abstract void buildFilterMenu(JPopupMenu menu);
protected abstract void buildAddFilterMenu(JMenu menu);
protected <F extends ItemFilter<? extends T>> F getFilter(Class<F> filterClass) {
return ReflectionUtil.safeCast(this.filters.get(filterClass), filterClass);
@@ -656,8 +691,6 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
if (this.lockFiltering || !this.initialized) { return; }
List<Predicate<? super T>> predicates = new ArrayList<Predicate<? super T>>();
predicates.add(Predicates.instanceOf(this.genericType));
for (ItemFilter<? extends T> filter : this.orderedFilters) { //TODO: Support custom filter logic
if (filter.isEnabled() && !filter.isEmpty()) {
predicates.add(filter.buildPredicate(this.genericType));

View File

@@ -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<InventoryItem> {
}
@Override
protected void buildFilterMenu(JPopupMenu menu) {
CardManager.buildFilterMenu(menu, this);
protected void buildAddFilterMenu(JMenu menu) {
CardManager.buildAddFilterMenu(menu, this);
}
}

View File

@@ -104,6 +104,7 @@ public class CardFormatFilter extends ListLabelFilter<PaperCard> {
@Override
public void reset() {
this.formats.clear();
this.updateLabel();
}
@Override

View File

@@ -33,11 +33,17 @@ public abstract class ListLabelFilter<T extends InventoryItem> 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<T extends InventoryItem> 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