mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +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 java.util.List;
|
||||||
|
|
||||||
import javax.swing.JMenu;
|
import javax.swing.JMenu;
|
||||||
import javax.swing.JPopupMenu;
|
|
||||||
|
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.game.GameFormat;
|
import forge.game.GameFormat;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
@@ -44,8 +42,8 @@ public final class CardManager extends ItemManager<PaperCard> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void buildFilterMenu(JPopupMenu menu) {
|
protected void buildAddFilterMenu(JMenu menu) {
|
||||||
buildFilterMenu(menu, this);
|
buildAddFilterMenu(menu, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Static overrides shared with SpellShopManager*/
|
/* Static overrides shared with SpellShopManager*/
|
||||||
@@ -60,7 +58,7 @@ public final class CardManager extends ItemManager<PaperCard> {
|
|||||||
return new CardSearchFilter(itemManager);
|
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
|
GuiUtils.addSeparator(menu); //separate from current search item
|
||||||
|
|
||||||
JMenu fmt = GuiUtils.createMenu("Format");
|
JMenu fmt = GuiUtils.createMenu("Format");
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import java.util.Map;
|
|||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import javax.swing.JCheckBox;
|
import javax.swing.JCheckBox;
|
||||||
|
import javax.swing.JMenu;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JPopupMenu;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
@@ -158,7 +159,6 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
|||||||
filter.setEnabled(enabled);
|
filter.setEnabled(enabled);
|
||||||
}
|
}
|
||||||
txtFilterLogic.setEnabled(enabled);
|
txtFilterLogic.setEnabled(enabled);
|
||||||
btnFilters.setEnabled(enabled);
|
|
||||||
mainSearchFilter.setEnabled(enabled);
|
mainSearchFilter.setEnabled(enabled);
|
||||||
mainSearchFilter.updateEnabled(); //need to call updateEnabled since no listener for filter checkbox
|
mainSearchFilter.updateEnabled(); //need to call updateEnabled since no listener for filter checkbox
|
||||||
lockFiltering = false;
|
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() {
|
this.mainSearchFilter.getMainComponent().addKeyListener(new KeyAdapter() {
|
||||||
@Override
|
@Override
|
||||||
@@ -206,20 +232,29 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//setup command for btnAddFilter
|
//setup command for btnFilters
|
||||||
final Command addFilterCommand = new Command() {
|
final Command cmdBuildFilterMenu = new Command() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
JPopupMenu menu = new JPopupMenu("FilterMenu");
|
JPopupMenu menu = new JPopupMenu("FilterMenu");
|
||||||
GuiUtils.addMenuItem(menu, "Current text search",
|
JMenu addMenu = GuiUtils.createMenu("Add");
|
||||||
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
|
if (mainSearchFilter.isEnabled()) {
|
||||||
cmdAddCurrentSearch, !mainSearchFilter.isEmpty());
|
GuiUtils.addMenuItem(addMenu, "Current text search",
|
||||||
buildFilterMenu(menu);
|
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());
|
menu.show(btnFilters, 0, btnFilters.getHeight());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this.btnFilters.setCommand(addFilterCommand);
|
this.btnFilters.setCommand(cmdBuildFilterMenu);
|
||||||
this.btnFilters.setRightClickCommand(addFilterCommand); //show menu on right-click too
|
this.btnFilters.setRightClickCommand(cmdBuildFilterMenu); //show menu on right-click too
|
||||||
|
|
||||||
//setup initial filters
|
//setup initial filters
|
||||||
addDefaultFilters();
|
addDefaultFilters();
|
||||||
@@ -586,7 +621,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
|
|||||||
|
|
||||||
protected abstract void addDefaultFilters();
|
protected abstract void addDefaultFilters();
|
||||||
protected abstract ItemFilter<? extends T> createSearchFilter();
|
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) {
|
protected <F extends ItemFilter<? extends T>> F getFilter(Class<F> filterClass) {
|
||||||
return ReflectionUtil.safeCast(this.filters.get(filterClass), 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; }
|
if (this.lockFiltering || !this.initialized) { return; }
|
||||||
|
|
||||||
List<Predicate<? super T>> predicates = new ArrayList<Predicate<? super T>>();
|
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
|
for (ItemFilter<? extends T> filter : this.orderedFilters) { //TODO: Support custom filter logic
|
||||||
if (filter.isEnabled() && !filter.isEmpty()) {
|
if (filter.isEnabled() && !filter.isEmpty()) {
|
||||||
predicates.add(filter.buildPredicate(this.genericType));
|
predicates.add(filter.buildPredicate(this.genericType));
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package forge.gui.toolbox.itemmanager;
|
package forge.gui.toolbox.itemmanager;
|
||||||
|
|
||||||
import javax.swing.JPopupMenu;
|
import javax.swing.JMenu;
|
||||||
|
|
||||||
import forge.gui.toolbox.itemmanager.filters.ItemFilter;
|
import forge.gui.toolbox.itemmanager.filters.ItemFilter;
|
||||||
import forge.item.InventoryItem;
|
import forge.item.InventoryItem;
|
||||||
@@ -26,7 +26,7 @@ public final class SpellShopManager extends ItemManager<InventoryItem> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void buildFilterMenu(JPopupMenu menu) {
|
protected void buildAddFilterMenu(JMenu menu) {
|
||||||
CardManager.buildFilterMenu(menu, this);
|
CardManager.buildAddFilterMenu(menu, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ public class CardFormatFilter extends ListLabelFilter<PaperCard> {
|
|||||||
@Override
|
@Override
|
||||||
public void reset() {
|
public void reset() {
|
||||||
this.formats.clear();
|
this.formats.clear();
|
||||||
|
this.updateLabel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -33,11 +33,17 @@ public abstract class ListLabelFilter<T extends InventoryItem> extends ItemFilte
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected final void buildWidget(JPanel widget) {
|
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();
|
StringBuilder labelBuilder = new StringBuilder();
|
||||||
labelBuilder.append(getCaption());
|
labelBuilder.append(getCaption());
|
||||||
switch (getCount()) {
|
switch (getCount()) {
|
||||||
case 0:
|
case 0:
|
||||||
labelBuilder.append(": All");
|
labelBuilder.append("s: All");
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
labelBuilder.append(": " + getList().iterator().next());
|
labelBuilder.append(": " + getList().iterator().next());
|
||||||
@@ -46,13 +52,8 @@ public abstract class ListLabelFilter<T extends InventoryItem> extends ItemFilte
|
|||||||
labelBuilder.append("s: " + TextUtil.join(getList(), ", "));
|
labelBuilder.append("s: " + TextUtil.join(getList(), ", "));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
label = new FLabel.Builder()
|
label.setText(labelBuilder.toString());
|
||||||
.text(labelBuilder.toString())
|
label.setToolTipText(getTooltip());
|
||||||
.tooltip(getTooltip())
|
|
||||||
.fontAlign(SwingConstants.LEFT)
|
|
||||||
.fontSize(12)
|
|
||||||
.build();
|
|
||||||
widget.add(label);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user