diff --git a/res/preferences/editor.preferences b/res/preferences/editor.preferences index f87aae94786..6f3f7776833 100644 --- a/res/preferences/editor.preferences +++ b/res/preferences/editor.preferences @@ -2,6 +2,7 @@ + diff --git a/src/main/java/forge/gui/deckeditor/SEditorIO.java b/src/main/java/forge/gui/deckeditor/SEditorIO.java index 23492e5ad5e..aa0fd3daab7 100644 --- a/src/main/java/forge/gui/deckeditor/SEditorIO.java +++ b/src/main/java/forge/gui/deckeditor/SEditorIO.java @@ -49,7 +49,8 @@ public class SEditorIO { /** Preferences (must match with PREFS file). */ public enum EditorPreference { /** */ stats_deck, /** */ - stats_catalog + stats_catalog, + display_unique_only } private static final XMLEventFactory EVENT_FACTORY = XMLEventFactory.newInstance(); diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java index 1e2395c4a7c..6e275147fe5 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorConstructed.java @@ -24,6 +24,7 @@ import com.google.common.base.Supplier; import forge.Singletons; import forge.deck.Deck; import forge.gui.deckeditor.SEditorIO; +import forge.gui.deckeditor.SEditorIO.EditorPreference; import forge.gui.deckeditor.SEditorUtil; import forge.gui.deckeditor.tables.DeckController; import forge.gui.deckeditor.tables.SColumnUtil; @@ -61,8 +62,10 @@ public final class CEditorConstructed extends ACEditorBase { public CEditorConstructed() { super(); - final EditorTableView tblCatalog = new EditorTableView(true, CardPrinted.class); - final EditorTableView tblDeck = new EditorTableView(true, CardPrinted.class); + boolean wantUnique = SEditorIO.getPref(EditorPreference.display_unique_only); + + final EditorTableView tblCatalog = new EditorTableView(wantUnique, CardPrinted.class); + final EditorTableView tblDeck = new EditorTableView(wantUnique, CardPrinted.class); VCardCatalog.SINGLETON_INSTANCE.setTableView(tblCatalog.getTable()); VCurrentDeck.SINGLETON_INSTANCE.setTableView(tblDeck.getTable()); diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java index a8660835213..e40c7c7a32e 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java @@ -26,6 +26,8 @@ import forge.deck.Deck; import forge.deck.DeckGroup; import forge.game.limited.BoosterDraft; import forge.game.limited.IBoosterDraft; +import forge.gui.deckeditor.SEditorIO; +import forge.gui.deckeditor.SEditorIO.EditorPreference; import forge.gui.deckeditor.tables.DeckController; import forge.gui.deckeditor.tables.EditorTableView; import forge.gui.deckeditor.tables.SColumnUtil; @@ -65,12 +67,15 @@ public class CEditorDraftingProcess extends ACEditorBase * Updates the deck editor UI as necessary draft selection mode. */ public CEditorDraftingProcess() { - final EditorTableView tblCatalog = new EditorTableView(true, CardPrinted.class); - final EditorTableView tblDeck = new EditorTableView(true, CardPrinted.class); + final EditorTableView tblCatalog = new EditorTableView(false, CardPrinted.class); + final EditorTableView tblDeck = new EditorTableView(false, CardPrinted.class); VCardCatalog.SINGLETON_INSTANCE.setTableView(tblCatalog.getTable()); VCurrentDeck.SINGLETON_INSTANCE.setTableView(tblDeck.getTable()); + tblCatalog.setAlwaysNonUnique(true); + tblDeck.setAlwaysNonUnique(true); + this.setTableCatalog(tblCatalog); this.setTableDeck(tblDeck); } diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java index ddc5af62bcd..f0fcd9fbfb9 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java @@ -23,6 +23,7 @@ import forge.Command; import forge.deck.Deck; import forge.deck.DeckGroup; import forge.gui.deckeditor.SEditorIO; +import forge.gui.deckeditor.SEditorIO.EditorPreference; import forge.gui.deckeditor.SEditorUtil; import forge.gui.deckeditor.tables.DeckController; import forge.gui.deckeditor.tables.EditorTableView; @@ -56,12 +57,15 @@ public final class CEditorLimited extends ACEditorBase { * @param deckMap0   {@link forge.deck.DeckGroup}<{@link forge.util.IStorage}> */ public CEditorLimited(final IStorage deckMap0) { - final EditorTableView tblCatalog = new EditorTableView(true, CardPrinted.class); - final EditorTableView tblDeck = new EditorTableView(true, CardPrinted.class); + final EditorTableView tblCatalog = new EditorTableView(false, CardPrinted.class); + final EditorTableView tblDeck = new EditorTableView(false, CardPrinted.class); VCardCatalog.SINGLETON_INSTANCE.setTableView(tblCatalog.getTable()); VCurrentDeck.SINGLETON_INSTANCE.setTableView(tblDeck.getTable()); + tblCatalog.setAlwaysNonUnique(true); + tblDeck.setAlwaysNonUnique(true); + this.setTableCatalog(tblCatalog); this.setTableDeck(tblDeck); diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorPreferences.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorPreferences.java index 427ac6676f2..c4d094d3d54 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorPreferences.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorPreferences.java @@ -7,6 +7,7 @@ import java.util.HashMap; import javax.swing.JCheckBox; import forge.Command; +import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.SEditorIO; import forge.gui.deckeditor.SEditorIO.EditorPreference; import forge.gui.deckeditor.tables.SColumnUtil; @@ -85,6 +86,8 @@ public enum CEditorPreferences implements ICDoc { SEditorIO.getPref(EditorPreference.stats_catalog)); VEditorPreferences.SINGLETON_INSTANCE.getChbDeckStats().setSelected( SEditorIO.getPref(EditorPreference.stats_deck)); + VEditorPreferences.SINGLETON_INSTANCE.getChbCardDisplayUnique().setSelected( + SEditorIO.getPref(EditorPreference.display_unique_only)); if (!SEditorIO.getPref(EditorPreference.stats_deck)) { VCurrentDeck.SINGLETON_INSTANCE.getPnlStats().setVisible(false); @@ -92,6 +95,15 @@ public enum CEditorPreferences implements ICDoc { if (!SEditorIO.getPref(EditorPreference.stats_catalog)) { VCardCatalog.SINGLETON_INSTANCE.getPnlStats().setVisible(false); } + + boolean wantUnique = SEditorIO.getPref(EditorPreference.display_unique_only); + ACEditorBase curEditor = CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController(); + if (curEditor != null) { + curEditor.getTableCatalog().setWantUnique(wantUnique); + curEditor.getTableCatalog().updateView(true); + curEditor.getTableDeck().setWantUnique(wantUnique); + curEditor.getTableDeck().updateView(true); + } VEditorPreferences.SINGLETON_INSTANCE.getChbCatalogStats().addItemListener(new ItemListener() { @Override public void itemStateChanged(final ItemEvent e) { @@ -106,6 +118,19 @@ public enum CEditorPreferences implements ICDoc { ((JCheckBox) e.getSource()).isSelected()); SEditorIO.setPref(EditorPreference.stats_deck, ((JCheckBox) e.getSource()).isSelected()); SEditorIO.savePreferences(); } }); + + VEditorPreferences.SINGLETON_INSTANCE.getChbCardDisplayUnique().addItemListener(new ItemListener() { + @Override public void itemStateChanged(final ItemEvent e) { + ACEditorBase curEditor = CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController(); + boolean wantUnique = ((JCheckBox) e.getSource()).isSelected(); + if (curEditor != null) { + curEditor.getTableCatalog().setWantUnique(wantUnique); + curEditor.getTableCatalog().updateView(true); + curEditor.getTableDeck().setWantUnique(wantUnique); + curEditor.getTableDeck().updateView(true); + } + SEditorIO.setPref(EditorPreference.display_unique_only, wantUnique); + SEditorIO.savePreferences(); } }); } /* (non-Javadoc) diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java index f19a1f84bdd..7324706f3f7 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java @@ -90,6 +90,9 @@ public final class CEditorQuest extends ACEditorBase { final EditorTableView tblCatalog = new EditorTableView(false, CardPrinted.class); final EditorTableView tblDeck = new EditorTableView(false, CardPrinted.class); + tblCatalog.setAlwaysNonUnique(true); + tblDeck.setAlwaysNonUnique(true); + VCardCatalog.SINGLETON_INSTANCE.setTableView(tblCatalog.getTable()); VCurrentDeck.SINGLETON_INSTANCE.setTableView(tblDeck.getTable()); diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java index 71a89acaa41..05375f93d08 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java @@ -98,6 +98,9 @@ public final class CEditorQuestCardShop extends ACEditorBase tblCatalog = new EditorTableView(false, InventoryItem.class); final EditorTableView tblDeck = new EditorTableView(false, InventoryItem.class); + tblCatalog.setAlwaysNonUnique(true); + tblDeck.setAlwaysNonUnique(true); + VCardCatalog.SINGLETON_INSTANCE.setTableView(tblCatalog.getTable()); VCurrentDeck.SINGLETON_INSTANCE.setTableView(tblDeck.getTable()); diff --git a/src/main/java/forge/gui/deckeditor/tables/EditorTableView.java b/src/main/java/forge/gui/deckeditor/tables/EditorTableView.java index e4a24de3f2c..b011c12041d 100644 --- a/src/main/java/forge/gui/deckeditor/tables/EditorTableView.java +++ b/src/main/java/forge/gui/deckeditor/tables/EditorTableView.java @@ -52,6 +52,7 @@ public final class EditorTableView { private final JTable table = new JTable(); private Predicate filter = null; private boolean wantUnique = false; + private boolean alwaysNonUnique = false; private final Class genericType; @@ -301,4 +302,44 @@ public final class EditorTableView { return this.pool; } + /** + * + * getWantUnique. + * + * @return true if the editor is in "unique card names only" mode. + */ + public boolean getWantUnique() { + return this.wantUnique; + } + + /** + * + * setWantUnique + * + * @param unique if true, the editor will be set to the "unique card names only" mode. + */ + public void setWantUnique(boolean unique) { + this.wantUnique = this.alwaysNonUnique ? false : unique; + } + + /** + * + * getAlwaysNonUnique + * + * @return if ture, this editor must always show non-unique cards (e.g. quest editor). + */ + public boolean getAlwaysNonUnique() { + return this.alwaysNonUnique; + } + + /** + * + * setAlwaysNonUnique + * + * @param nonUniqueOnly if true, this editor must always show non-unique cards (e.g. quest editor). + */ + public void setAlwaysNonUnique(boolean nonUniqueOnly) { + this.alwaysNonUnique = nonUniqueOnly; + } + } diff --git a/src/main/java/forge/gui/deckeditor/views/VEditorPreferences.java b/src/main/java/forge/gui/deckeditor/views/VEditorPreferences.java index 7230346a175..fbca3a48246 100644 --- a/src/main/java/forge/gui/deckeditor/views/VEditorPreferences.java +++ b/src/main/java/forge/gui/deckeditor/views/VEditorPreferences.java @@ -41,6 +41,10 @@ public enum VEditorPreferences implements IVDoc { .text("Current Deck Columns").tooltip("Toggle columns in current deck panel") .fontSize(12).build(); + private JLabel lblDisplay = new FLabel.Builder() + .text("Card Catalog Options").tooltip("Toggle card catalog display options") + .fontSize(12).build(); + private JCheckBox chbCatalogColor = new FCheckBox("Color"); private JCheckBox chbCatalogRarity = new FCheckBox("Rarity"); private JCheckBox chbCatalogCMC = new FCheckBox("CMC"); @@ -60,6 +64,8 @@ public enum VEditorPreferences implements IVDoc { private JCheckBox chbDeckStats = new FCheckBox("Show stats in current deck"); private JCheckBox chbCatalogStats = new FCheckBox("Show stats in card catalog"); + private JCheckBox chbCardDisplayUnique = new FCheckBox("Show unique cards only (only affects Constructed)"); + private JPanel pnl = new JPanel(new MigLayout("insets 0, gap 0, wrap 2, ax center")); private JScrollPane scroller = new JScrollPane(pnl); @@ -68,6 +74,7 @@ public enum VEditorPreferences implements IVDoc { lblStats.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); lblCatalog.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); lblDeck.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); + lblDisplay.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); chbCatalogColor.setFont(FSkin.getFont(12)); chbCatalogRarity.setFont(FSkin.getFont(12)); @@ -85,12 +92,14 @@ public enum VEditorPreferences implements IVDoc { chbDeckPower.setFont(FSkin.getFont(12)); chbDeckToughness.setFont(FSkin.getFont(12)); - chbDeckStats.setFont(FSkin.getFont(12)); chbCatalogStats.setFont(FSkin.getFont(12)); chbDeckStats.setSelected(true); chbCatalogStats.setSelected(true); + chbCardDisplayUnique.setFont(FSkin.getFont(12)); + chbCardDisplayUnique.setSelected(false); + pnl.add(lblStats, "h 25px!, gap 5px 5px 5px 5px, ax center, span 2 1"); pnl.add(chbCatalogStats, "h 25px!, gap 5px 5px 5px 5px, ax center, span 2 1"); pnl.add(chbDeckStats, "h 25px!, gap 5px 5px 5px 5px, ax center, span 2 1"); @@ -112,7 +121,10 @@ public enum VEditorPreferences implements IVDoc { pnl.add(chbDeckSet, constraints); pnl.add(chbDeckPower, constraints); pnl.add(chbDeckToughness, constraints); - pnl.add(chbDeckAI, constraints); + pnl.add(chbDeckAI, constraints + ", wrap"); + + pnl.add(lblDisplay, constraints + ", span 2 1"); + pnl.add(chbCardDisplayUnique, "h 25px!, gap 5px 5px 5px 5px, ax center, span 2 1"); pnl.setOpaque(false); scroller.setOpaque(false); @@ -252,6 +264,11 @@ public enum VEditorPreferences implements IVDoc { public JCheckBox getChbCatalogStats() { return chbCatalogStats; } + + /** @return {@link javax.swing.JCheckBox} */ + public JCheckBox getChbCardDisplayUnique() { + return chbCardDisplayUnique; + } //========== Other methods }