mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +00:00
Move filter items to "Add" submenu and add "Reset Filters" option to main Filters menu
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,6 +104,7 @@ public class CardFormatFilter extends ListLabelFilter<PaperCard> {
|
||||
@Override
|
||||
public void reset() {
|
||||
this.formats.clear();
|
||||
this.updateLabel();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user