From b090cdfa417afee0b4e496913350c38bfff097af Mon Sep 17 00:00:00 2001 From: Tim Scott Date: Sun, 24 Feb 2019 11:52:05 -0600 Subject: [PATCH] Fix deck editor Set/Format edit problems. Add code to respect the "allow reprints" option on the Formats dialog. Default it to 'true'. Also add code to be able to initialize the sate of that same checkbox. Change format and set edits to refresh the item manager list so edits are realized. Change wording of set "allow reprints" checkbox to remove confusion / conflict with the format "allow reprints" checkbox. Add constructor so a whole format list can simply be added at once rather than iterating and creating multiple filter objects for each format. (Net result is the same in either case.) Change text of filter drop down to indicate things are being added or edited vs just added. --- .../java/forge/itemmanager/CardManager.java | 11 ++++---- .../java/forge/itemmanager/ItemManager.java | 2 +- .../itemmanager/filters/CardFormatFilter.java | 26 ++++++++++++++++++- .../itemmanager/filters/CardSetFilter.java | 8 +++--- .../home/quest/DialogChooseFormats.java | 4 +++ .../screens/home/quest/DialogChooseSets.java | 6 ++++- 6 files changed, 45 insertions(+), 12 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java index aac030a4515..534c103524d 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java @@ -95,18 +95,17 @@ public class CardManager extends ItemManager { GuiUtils.addMenuItem(menu, "Formats...", null, new Runnable() { @Override public void run() { - final CardSetFilter existingFilter = itemManager.getFilter(CardSetFilter.class); + final CardFormatFilter existingFilter = itemManager.getFilter(CardFormatFilter.class); if (existingFilter != null) { - existingFilter.edit(); + existingFilter.edit(itemManager); } else { final DialogChooseFormats dialog = new DialogChooseFormats(); + dialog.setWantReprintsCB(true); // assume user wants things permissive... dialog.setOkCallback(new Runnable() { @Override public void run() { final List formats = dialog.getSelectedFormats(); if (!formats.isEmpty()) { - for(GameFormat format: formats) { - itemManager.addFilter(new CardFormatFilter(itemManager, format)); - } + itemManager.addFilter(new CardFormatFilter(itemManager,formats,dialog.getWantReprints())); } } }); @@ -119,7 +118,7 @@ public class CardManager extends ItemManager { public void run() { CardSetFilter existingFilter = itemManager.getFilter(CardSetFilter.class); if (existingFilter != null) { - existingFilter.edit(); + existingFilter.edit(itemManager); } else { final DialogChooseSets dialog = new DialogChooseSets(null, null, true); diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java index c0817e94e1c..31604a9e53a 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java @@ -250,7 +250,7 @@ public abstract class ItemManager extends JPanel implem if (hideFilters) { GuiUtils.addMenuItem(menu, "Show Filters", null, cmdHideFilters); } else { - final JMenu addMenu = GuiUtils.createMenu("Add Filter"); + final JMenu addMenu = GuiUtils.createMenu("Add/Edit Filter"); GuiUtils.addMenuItem(addMenu, "Current text search", KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), cmdAddCurrentSearch, !mainSearchFilter.isEmpty()); diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardFormatFilter.java b/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardFormatFilter.java index 70b39925c45..e2252f506e1 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardFormatFilter.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardFormatFilter.java @@ -1,21 +1,29 @@ package forge.itemmanager.filters; +import java.util.List; import com.google.common.base.Predicate; import forge.game.GameFormat; import forge.item.PaperCard; import forge.itemmanager.ItemManager; import forge.itemmanager.SFilterUtil; - +import forge.screens.home.quest.DialogChooseFormats; public class CardFormatFilter extends FormatFilter { public CardFormatFilter(ItemManager itemManager0) { super(itemManager0); } + public CardFormatFilter(ItemManager itemManager0, GameFormat format0) { super(itemManager0, format0); } + public CardFormatFilter(ItemManager itemManager0, List formats0,boolean allowReprints0) { + super(itemManager0); + this.formats.addAll(formats0); + this.allowReprints = allowReprints0; + } + @Override public ItemFilter createCopy() { CardFormatFilter copy = new CardFormatFilter(itemManager); @@ -27,4 +35,20 @@ public class CardFormatFilter extends FormatFilter { protected final Predicate buildPredicate() { return SFilterUtil.buildFormatFilter(this.formats, this.allowReprints); } + + public void edit(final ItemManager itemManager) { + final DialogChooseFormats dialog = new DialogChooseFormats(this.formats); + final CardFormatFilter itemFilter = this; + dialog.setWantReprintsCB(allowReprints); + + dialog.setOkCallback(new Runnable() { + @Override + public void run() { + formats.clear(); + formats.addAll(dialog.getSelectedFormats()); + allowReprints = dialog.getWantReprints(); + itemManager.addFilter(itemFilter); // this adds/updates the current filter... + } + }); + } } diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardSetFilter.java b/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardSetFilter.java index 79b4a6f8fa4..62ae54615cb 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardSetFilter.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardSetFilter.java @@ -49,16 +49,18 @@ public class CardSetFilter extends CardFormatFilter { return true; } - public void edit() { + public void edit(final ItemManager itemManager) { final DialogChooseSets dialog = new DialogChooseSets(this.sets, null, true); + final CardSetFilter itemFilter = this; + dialog.setWantReprintsCB(allowReprints); + dialog.setOkCallback(new Runnable() { @Override public void run() { sets.clear(); sets.addAll(dialog.getSelectedSets()); allowReprints = dialog.getWantReprints(); - formats.clear(); - formats.add(new GameFormat(null, sets, null)); + itemManager.addFilter(itemFilter); // this adds/updates the current filter } }); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/DialogChooseFormats.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/DialogChooseFormats.java index 70e3896d7a3..378715b3a07 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/DialogChooseFormats.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/DialogChooseFormats.java @@ -116,6 +116,10 @@ public class DialogChooseFormats { return wantReprints; } + public void setWantReprintsCB(boolean isSet) { + cbWantReprints.setSelected(isSet); + } + private JPanel makeCheckBoxList(List formats, String title, boolean focused) { choices.addAll(formats); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/DialogChooseSets.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/DialogChooseSets.java index fc8969b9134..1177b4ce256 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/DialogChooseSets.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/DialogChooseSets.java @@ -24,7 +24,7 @@ public class DialogChooseSets { private Runnable okCallback; private final List choices = new ArrayList<>(); - private final FCheckBox cbWantReprints = new FCheckBox("Allow compatible reprints from other sets"); + private final FCheckBox cbWantReprints = new FCheckBox("Display compatible reprints from more recent sets"); // lists are of set codes (e.g. "2ED") public DialogChooseSets(Collection preselectedSets, Collection unselectableSets, boolean showWantReprintsCheckbox) { @@ -129,6 +129,10 @@ public class DialogChooseSets { public boolean getWantReprints() { return wantReprints; } + + public void setWantReprintsCB(boolean isSet) { + cbWantReprints.setSelected(isSet); + } private JPanel makeCheckBoxList(List sets, String title, boolean focused) {