From ca92f90f6d73640d3c428d6676fba67fd470638c Mon Sep 17 00:00:00 2001 From: Agetian Date: Mon, 25 Sep 2017 13:14:23 +0000 Subject: [PATCH] - Integrating Personal Ratings patch by Seravy. --- .gitattributes | 3 + .../java/forge/deckchooser/FDeckViewer.java | 32 ++++----- .../java/forge/itemmanager/CardManager.java | 18 ++++- .../forge/itemmanager/SpellShopManager.java | 11 ++- .../itemmanager/filters/CardRatingFilter.java | 39 +++++++++++ .../deckeditor/controllers/ACEditorBase.java | 38 ++++------- .../controllers/CEditorCommander.java | 5 +- .../controllers/CEditorConstructed.java | 5 +- .../controllers/CEditorDraftingProcess.java | 4 +- .../controllers/CEditorLimited.java | 6 +- .../deckeditor/controllers/CEditorQuest.java | 59 +++++++++++++--- .../CEditorQuestDraftingProcess.java | 4 +- .../controllers/CEditorQuestLimited.java | 17 +++-- .../controllers/CEditorVariant.java | 5 +- .../controllers/CEditorWinstonProcess.java | 22 +++--- .../workshop/views/VWorkshopCatalog.java | 14 ++-- .../src/main/java/forge/toolbox/FSkin.java | 10 ++- .../res/skins/default/sprite_favicons.png | Bin 0 -> 8923 bytes .../src/main/java/forge/assets/FSkinProp.java | 12 +++- .../java/forge/itemmanager/SFilterUtil.java | 64 ++++++++++++++---- .../forge/itemmanager/SItemManagerUtil.java | 28 +++++--- .../java/forge/properties/ForgeConstants.java | 1 + .../java/forge/quest/QuestController.java | 25 +++++-- .../main/java/forge/quest/data/QuestData.java | 5 +- .../java/forge/quest/data/StarRating.java | 53 +++++++++++++++ .../main/java/forge/quest/io/QuestDataIO.java | 12 ++-- 26 files changed, 357 insertions(+), 135 deletions(-) create mode 100644 forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardRatingFilter.java create mode 100644 forge-gui/res/skins/default/sprite_favicons.png create mode 100644 forge-gui/src/main/java/forge/quest/data/StarRating.java diff --git a/.gitattributes b/.gitattributes index a8008d1bd35..8854172d3d6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -915,6 +915,7 @@ forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardFoilFilter.java -t forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardFormatFilter.java -text forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardPowerFilter.java -text forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardQuestWorldFilter.java -text +forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardRatingFilter.java -text forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardSearchFilter.java -text forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardSetFilter.java -text forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardToughnessFilter.java -text @@ -21812,6 +21813,7 @@ forge-gui/res/skins/default/font1.ttf -text forge-gui/res/skins/default/grid_icons.png -text forge-gui/res/skins/default/loader.gif -text forge-gui/res/skins/default/sprite_avatars.png -text +forge-gui/res/skins/default/sprite_favicons.png -text forge-gui/res/skins/default/sprite_foils.png -text forge-gui/res/skins/default/sprite_icons.png -text forge-gui/res/skins/default/sprite_old_foils.png -text @@ -22238,6 +22240,7 @@ forge-gui/src/main/java/forge/quest/data/QuestData.java svneol=native#text/plain forge-gui/src/main/java/forge/quest/data/QuestEventDraftContainer.java -text forge-gui/src/main/java/forge/quest/data/QuestItemCondition.java -text forge-gui/src/main/java/forge/quest/data/QuestPreferences.java svneol=native#text/plain +forge-gui/src/main/java/forge/quest/data/StarRating.java -text forge-gui/src/main/java/forge/quest/data/package-info.java svneol=native#text/plain forge-gui/src/main/java/forge/quest/io/QuestChallengeReader.java -text forge-gui/src/main/java/forge/quest/io/QuestDataIO.java svneol=native#text/plain diff --git a/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckViewer.java b/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckViewer.java index a54fca91b62..1be2b35c6a9 100644 --- a/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckViewer.java +++ b/forge-gui-desktop/src/main/java/forge/deckchooser/FDeckViewer.java @@ -1,21 +1,5 @@ package forge.deckchooser; -import java.awt.Dimension; -import java.awt.Toolkit; -import java.awt.datatransfer.StringSelection; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.List; -import java.util.Map.Entry; - -import javax.swing.JPanel; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; - -import forge.model.FModel; -import forge.properties.ForgePreferences; -import net.miginfocom.swing.MigLayout; import forge.deck.CardPool; import forge.deck.Deck; import forge.deck.DeckSection; @@ -29,9 +13,23 @@ import forge.itemmanager.ItemManagerConfig; import forge.itemmanager.ItemManagerContainer; import forge.itemmanager.ItemManagerModel; import forge.itemmanager.views.ImageView; +import forge.model.FModel; +import forge.properties.ForgePreferences; import forge.toolbox.FButton; import forge.toolbox.FOptionPane; import forge.view.FDialog; +import net.miginfocom.swing.MigLayout; + +import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.*; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; +import java.util.Map.Entry; @SuppressWarnings("serial") public class FDeckViewer extends FDialog { @@ -57,7 +55,7 @@ public class FDeckViewer extends FDialog { private FDeckViewer(final Deck deck0) { this.deck = deck0; this.setTitle(deck.getName()); - this.cardManager = new CardManager(null, false) { + this.cardManager = new CardManager(null, false, false) { @Override //show hovered card in Image View in dialog instead of main Detail/Picture panes protected ImageView createImageView(final ItemManagerModel model0) { return new ImageView(this, model0) { 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 569d85f97b9..301188d2053 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/CardManager.java @@ -10,7 +10,6 @@ import forge.screens.home.quest.DialogChooseSets; import forge.screens.match.controllers.CDetailPicture; import javax.swing.*; - import java.util.HashMap; import java.util.List; import java.util.Map.Entry; @@ -21,8 +20,12 @@ import java.util.Map.Entry; */ @SuppressWarnings("serial") public class CardManager extends ItemManager { - public CardManager(final CDetailPicture cDetailPicture, final boolean wantUnique0) { + + private boolean QuestMode; + + public CardManager(final CDetailPicture cDetailPicture, final boolean wantUnique0, final boolean qm) { super(PaperCard.class, cDetailPicture, wantUnique0); + QuestMode = qm; } @Override @@ -66,7 +69,7 @@ public class CardManager extends ItemManager { return new CardSearchFilter(itemManager); } - public static void buildAddFilterMenu(JMenu menu, final ItemManager itemManager) { + public void buildAddFilterMenu(JMenu menu, final ItemManager itemManager) { GuiUtils.addSeparator(menu); //separate from current search item JMenu fmt = GuiUtils.createMenu("Format"); @@ -164,6 +167,15 @@ public class CardManager extends ItemManager { } }, itemManager.getFilter(CardFoilFilter.class) == null); + if (QuestMode) { + GuiUtils.addMenuItem(menu, "Personal Rating", null, new Runnable() { + @Override + public void run() { + itemManager.addFilter(new CardRatingFilter(itemManager)); + } + }, itemManager.getFilter(CardRatingFilter.class) == null); + } + GuiUtils.addSeparator(menu); GuiUtils.addMenuItem(menu, "Advanced...", null, new Runnable() { diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/SpellShopManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/SpellShopManager.java index 5ccb5144eb9..a889e58fc4b 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/SpellShopManager.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/SpellShopManager.java @@ -6,14 +6,20 @@ import forge.screens.match.controllers.CDetailPicture; import javax.swing.*; -/** +/** * TODO: Write javadoc for this type. * */ @SuppressWarnings("serial") public final class SpellShopManager extends ItemManager { + + private final CDetailPicture cDetailPicture2; + private final boolean wantUnique02; + public SpellShopManager(final CDetailPicture cDetailPicture, final boolean wantUnique0) { super(InventoryItem.class, cDetailPicture, wantUnique0); + cDetailPicture2 = cDetailPicture; + wantUnique02 = wantUnique0; } @Override @@ -28,6 +34,7 @@ public final class SpellShopManager extends ItemManager { @Override protected void buildAddFilterMenu(JMenu menu) { - CardManager.buildAddFilterMenu(menu, this); + CardManager CM = new CardManager(cDetailPicture2, wantUnique02, true); + CM.buildAddFilterMenu(menu, this); } } diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardRatingFilter.java b/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardRatingFilter.java new file mode 100644 index 00000000000..dbe593d1966 --- /dev/null +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/filters/CardRatingFilter.java @@ -0,0 +1,39 @@ +package forge.itemmanager.filters; + +import com.google.common.base.Predicate; +import forge.item.PaperCard; +import forge.itemmanager.ItemManager; +import forge.itemmanager.SFilterUtil; +import forge.itemmanager.SItemManagerUtil.StatTypes; +import forge.model.FModel; + +import javax.swing.*; + +public class CardRatingFilter extends StatTypeFilter { + public CardRatingFilter(ItemManager itemManager0) { + super(itemManager0); + } + + @Override + public ItemFilter createCopy() { + return new CardRatingFilter(itemManager); + } + + @Override + protected void buildWidget(JPanel widget) { + /*if (itemManager instanceof SpellShopManager) { + addToggleButton(widget, StatTypes.PACK_OR_DECK); + }*/ + addToggleButton(widget, StatTypes.RATE_NONE); + addToggleButton(widget, StatTypes.RATE_1); + addToggleButton(widget, StatTypes.RATE_2); + addToggleButton(widget, StatTypes.RATE_3); + addToggleButton(widget, StatTypes.RATE_4); + addToggleButton(widget, StatTypes.RATE_5); + } + + @Override + protected final Predicate buildPredicate() { + return SFilterUtil.buildStarRatingFilter(buttonMap, FModel.getQuest().GetRating()); + } +} diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java index d012b0f4fae..250c718699f 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java @@ -19,32 +19,12 @@ package forge.screens.deckeditor.controllers; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; -import java.awt.Toolkit; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; -import java.util.Arrays; -import java.util.List; -import java.util.Map.Entry; - -import javax.swing.JMenu; -import javax.swing.JPopupMenu; -import javax.swing.KeyStroke; -import javax.swing.SwingUtilities; - import forge.UiCommand; import forge.assets.FSkinProp; -import forge.deck.CardPool; -import forge.deck.Deck; -import forge.deck.DeckBase; -import forge.deck.DeckGroup; -import forge.deck.DeckSection; +import forge.deck.*; import forge.gui.GuiChoose; import forge.gui.GuiUtils; -import forge.gui.framework.DragCell; -import forge.gui.framework.FScreen; -import forge.gui.framework.ICDoc; -import forge.gui.framework.IVDoc; -import forge.gui.framework.SRearrangingUtil; +import forge.gui.framework.*; import forge.item.InventoryItem; import forge.item.PaperCard; import forge.itemmanager.ItemManager; @@ -64,6 +44,14 @@ import forge.util.Aggregates; import forge.util.ItemPool; import forge.view.FView; +import javax.swing.*; +import java.awt.*; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.util.Arrays; +import java.util.List; +import java.util.Map.Entry; + /** * Maintains a generically typed architecture for various editing * environments. A basic editor instance requires a card catalog, the @@ -431,7 +419,7 @@ public abstract class ACEditorBase getItemManager() { + public ItemManager getItemManager() { return isAddContextMenu ? catalogManager : deckManager; } @@ -439,6 +427,10 @@ public abstract class ACEditorBase { commanderPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.CAN_BE_COMMANDER, PaperCard.FN_GET_RULES)),PaperCard.class); normalPool = ItemPool.createFrom(FModel.getMagicDb().getCommonCards().getAllCards(), PaperCard.class); - CardManager catalogManager = new CardManager(getCDetailPicture(), true); - CardManager deckManager = new CardManager(getCDetailPicture(), true); + CardManager catalogManager = new CardManager(getCDetailPicture(), true, false); + CardManager deckManager = new CardManager(getCDetailPicture(), true, false); catalogManager.setCaption("Catalog"); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java index 4e077e6de76..5c0e46db7ad 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java @@ -19,7 +19,6 @@ package forge.screens.deckeditor.controllers; import com.google.common.base.Predicates; import com.google.common.base.Supplier; - import forge.UiCommand; import forge.card.CardRulesPredicates; import forge.deck.CardPool; @@ -78,8 +77,8 @@ public final class CEditorConstructed extends ACEditorBase { schemePool = ItemPool.createFrom(FModel.getMagicDb().getVariantCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_SCHEME, PaperCard.FN_GET_RULES)), PaperCard.class); conspiracyPool = ItemPool.createFrom(FModel.getMagicDb().getVariantCards().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_CONSPIRACY, PaperCard.FN_GET_RULES)), PaperCard.class); - CardManager catalogManager = new CardManager(getCDetailPicture(), false); // TODO: restore the functionality of the "want uniques only" toggle - CardManager deckManager = new CardManager(getCDetailPicture(), false); // IMPORTANT: must *always* show all cards in the deck, otherwise cards with different art get ignored! + CardManager catalogManager = new CardManager(getCDetailPicture(), false, false); // TODO: restore the functionality of the "want uniques only" toggle + CardManager deckManager = new CardManager(getCDetailPicture(), false, false); // IMPORTANT: must *always* show all cards in the deck, otherwise cards with different art get ignored! catalogManager.setCaption("Catalog"); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java index 860e28030e0..9cbc925a51c 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java @@ -65,8 +65,8 @@ public class CEditorDraftingProcess extends ACEditorBase { public CEditorDraftingProcess(final CDetailPicture cDetailPicture) { super(FScreen.DRAFTING_PROCESS, cDetailPicture); - final CardManager catalogManager = new CardManager(getCDetailPicture(), false); - final CardManager deckManager = new CardManager(getCDetailPicture(), false); + final CardManager catalogManager = new CardManager(getCDetailPicture(), false, false); + final CardManager deckManager = new CardManager(getCDetailPicture(), false, false); //hide filters and options panel so more of pack is visible by default catalogManager.setHideViewOptions(1, true); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorLimited.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorLimited.java index 490d9c64da4..372a6c084b0 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorLimited.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorLimited.java @@ -18,7 +18,6 @@ package forge.screens.deckeditor.controllers; import com.google.common.base.Supplier; - import forge.UiCommand; import forge.card.CardEdition; import forge.deck.CardPool; @@ -43,7 +42,6 @@ import forge.util.storage.IStorage; import java.util.ArrayList; import java.util.HashSet; - import java.util.List; import java.util.Map.Entry; import java.util.Set; @@ -74,8 +72,8 @@ public final class CEditorLimited extends ACEditorBase { public CEditorLimited(final IStorage deckMap0, final FScreen screen0, final CDetailPicture cDetailPicture) { super(screen0, cDetailPicture); - final CardManager catalogManager = new CardManager(getCDetailPicture(), false); - final CardManager deckManager = new CardManager(getCDetailPicture(), false); + final CardManager catalogManager = new CardManager(getCDetailPicture(), false, false); + final CardManager deckManager = new CardManager(getCDetailPicture(), false, false); catalogManager.setCaption("Sideboard"); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java index fa3ad0bc6ce..06c894b7a23 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java @@ -17,18 +17,13 @@ */ package forge.screens.deckeditor.controllers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - import com.google.common.base.Function; import com.google.common.base.Supplier; import forge.UiCommand; import forge.deck.CardPool; import forge.deck.Deck; import forge.deck.DeckSection; +import forge.gui.GuiUtils; import forge.gui.framework.DragCell; import forge.gui.framework.FScreen; import forge.item.InventoryItem; @@ -49,6 +44,13 @@ import forge.screens.home.quest.CSubmenuQuestDecks; import forge.screens.match.controllers.CDetailPicture; import forge.util.ItemPool; +import javax.swing.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + /** * Child controller for quest deck editor UI. *

@@ -100,8 +102,8 @@ public final class CEditorQuest extends ACEditorBase { this.questData = questData0; - final CardManager catalogManager = new CardManager(cDetailPicture, false); - final CardManager deckManager = new CardManager(cDetailPicture, false); + final CardManager catalogManager = new CardManager(cDetailPicture, false, true); + final CardManager deckManager = new CardManager(cDetailPicture, false, true); catalogManager.setCaption("Quest Inventory"); @@ -180,6 +182,41 @@ public final class CEditorQuest extends ACEditorBase { @Override protected void buildAddContextMenu(final EditorContextMenuBuilder cmb) { CEditorConstructed.buildAddContextMenu(cmb, sectionMode); + AddRatingItem(cmb, 1); + AddRatingItem(cmb, 2); + AddRatingItem(cmb, 3); + AddRatingItem(cmb, 4); + AddRatingItem(cmb, 5); + AddRatingItem(cmb, 0); + } + + public void AddRatingItem(final EditorContextMenuBuilder cmb, final int n) { + if (n == 1) { + cmb.getMenu().addSeparator(); + } + String s; + if (n == 0) { + s = "Remove custom rating"; + } else { + s = "Rate this card as " + Integer.toString(n) + " stars"; + } + GuiUtils.addMenuItem(cmb.getMenu(), s, + KeyStroke.getKeyStroke(48 + n, 0), + new Runnable() { + @Override + public void run() { + SetRatingStars(n,cmb); + } + }); + } + + public void SetRatingStars(int n, EditorContextMenuBuilder cmb) { + ItemPool selected = cmb.getItemManager().getSelectedItemPool(); + + for (final Entry itemEntry : selected) { + // the card: itemEntry.getKey() + questData.SetRating(itemEntry.getKey().getName(), itemEntry.getKey().getEdition(), n); + } } /* (non-Javadoc) @@ -188,6 +225,12 @@ public final class CEditorQuest extends ACEditorBase { @Override protected void buildRemoveContextMenu(final EditorContextMenuBuilder cmb) { CEditorConstructed.buildRemoveContextMenu(cmb, sectionMode); + AddRatingItem(cmb, 1); + AddRatingItem(cmb, 2); + AddRatingItem(cmb, 3); + AddRatingItem(cmb, 4); + AddRatingItem(cmb, 5); + AddRatingItem(cmb, 0); } /* diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestDraftingProcess.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestDraftingProcess.java index 66e995d4594..efdb817f4e5 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestDraftingProcess.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestDraftingProcess.java @@ -69,8 +69,8 @@ public class CEditorQuestDraftingProcess extends ACEditorBase
@@ -100,8 +99,8 @@ public final class CEditorQuestLimited extends ACEditorBase { this.cardPoolCondition = poolCondition; this.sectionMode = deckSection0; - final CardManager catalogManager = new CardManager(cDetailPicture, true); - final CardManager deckManager = new CardManager(cDetailPicture, true); + final CardManager catalogManager = new CardManager(cDetailPicture, true, false); + final CardManager deckManager = new CardManager(cDetailPicture, true, false); catalogManager.setCaption("Catalog"); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorWinstonProcess.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorWinstonProcess.java index 6cdfea51d93..5a9c8e79b14 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorWinstonProcess.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorWinstonProcess.java @@ -24,23 +24,23 @@ import forge.deck.CardPool; import forge.deck.Deck; import forge.deck.DeckGroup; import forge.deck.DeckSection; +import forge.gui.framework.DragCell; +import forge.gui.framework.FScreen; +import forge.item.PaperCard; +import forge.itemmanager.CardManager; +import forge.itemmanager.ItemManagerConfig; +import forge.limited.BoosterDraft; +import forge.limited.IBoosterDraft; +import forge.limited.WinstonDraft; import forge.model.FModel; +import forge.properties.ForgePreferences.FPref; import forge.screens.deckeditor.CDeckEditorUI; import forge.screens.deckeditor.views.VAllDecks; import forge.screens.deckeditor.views.VCurrentDeck; import forge.screens.deckeditor.views.VDeckgen; -import forge.gui.framework.DragCell; -import forge.gui.framework.FScreen; import forge.screens.home.sanctioned.CSubmenuWinston; import forge.screens.match.controllers.CDetailPicture; import forge.toolbox.FOptionPane; -import forge.itemmanager.CardManager; -import forge.itemmanager.ItemManagerConfig; -import forge.item.PaperCard; -import forge.limited.BoosterDraft; -import forge.limited.IBoosterDraft; -import forge.limited.WinstonDraft; -import forge.properties.ForgePreferences.FPref; import forge.util.ItemPool; import forge.util.MyRandom; @@ -78,8 +78,8 @@ public class CEditorWinstonProcess extends ACEditorBase { public CEditorWinstonProcess(final CDetailPicture cDetailPicture) { super(FScreen.DRAFTING_PROCESS, cDetailPicture); - final CardManager catalogManager = new CardManager(cDetailPicture, false); - final CardManager deckManager = new CardManager(cDetailPicture, false); + final CardManager catalogManager = new CardManager(cDetailPicture, false, false); + final CardManager deckManager = new CardManager(cDetailPicture, false, false); //hide filters and options panel so more of pack is visible by default catalogManager.setHideViewOptions(1, true); diff --git a/forge-gui-desktop/src/main/java/forge/screens/workshop/views/VWorkshopCatalog.java b/forge-gui-desktop/src/main/java/forge/screens/workshop/views/VWorkshopCatalog.java index 277fcfb2263..09ba2b49780 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/workshop/views/VWorkshopCatalog.java +++ b/forge-gui-desktop/src/main/java/forge/screens/workshop/views/VWorkshopCatalog.java @@ -1,13 +1,6 @@ package forge.screens.workshop.views; -import javax.swing.JPanel; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; - -import net.miginfocom.swing.MigLayout; - import com.google.common.collect.Iterables; - import forge.gui.framework.DragCell; import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; @@ -20,6 +13,11 @@ import forge.screens.match.controllers.CDetailPicture; import forge.screens.workshop.controllers.CCardScript; import forge.screens.workshop.controllers.CWorkshopCatalog; import forge.util.ItemPool; +import net.miginfocom.swing.MigLayout; + +import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; /** * Assembles Swing components of card catalog in workshop. @@ -39,7 +37,7 @@ public enum VWorkshopCatalog implements IVDoc { //========== Constructor private VWorkshopCatalog() { - this.cardManager = new CardManager(cDetailPicture, true); + this.cardManager = new CardManager(cDetailPicture, true, false); this.cardManager.setCaption("Catalog"); final Iterable allCards = Iterables.concat(FModel.getMagicDb().getCommonCards(), FModel.getMagicDb().getVariantCards()); this.cardManager.setPool(ItemPool.createFrom(allCards, PaperCard.class), true); diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/FSkin.java b/forge-gui-desktop/src/main/java/forge/toolbox/FSkin.java index 0c8628339aa..4e76ed2a9bd 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/FSkin.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/FSkin.java @@ -1006,7 +1006,7 @@ public class FSkin { private static int currentSkinIndex; private static String preferredDir; private static String preferredName; - private static BufferedImage bimDefaultSprite, bimPreferredSprite, bimFoils, bimQuestDraftDeck, + private static BufferedImage bimDefaultSprite, bimFavIcon, bimPreferredSprite, bimFoils, bimQuestDraftDeck, bimOldFoils, bimDefaultAvatars, bimPreferredAvatars, bimTrophies; private static int x0, y0, w0, h0, newW, newH, preferredW, preferredH; private static int[] tempCoords; @@ -1125,7 +1125,7 @@ public class FSkin { if (preferredName.isEmpty()) { loadLight("default", true); } } - FView.SINGLETON_INSTANCE.setSplashProgessBarMessage("Processing image sprites: ", 7); + FView.SINGLETON_INSTANCE.setSplashProgessBarMessage("Processing image sprites: ", 8); // Grab and test various sprite files. final String defaultDir = ForgeConstants.DEFAULT_SKINS_DIR; @@ -1137,6 +1137,7 @@ public class FSkin { final File f6 = new File(defaultDir + ForgeConstants.SPRITE_OLD_FOILS_FILE); final File f7 = new File(defaultDir + ForgeConstants.SPRITE_TROPHIES_FILE); final File f8 = new File(defaultDir + ForgeConstants.DRAFT_DECK_IMG_FILE); + final File f9 = new File(defaultDir + ForgeConstants.SPRITE_FAVICONS_FILE); try { int p = 0; @@ -1153,6 +1154,8 @@ public class FSkin { bimTrophies = ImageIO.read(f7); FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p); bimQuestDraftDeck = ImageIO.read(f8); + FView.SINGLETON_INSTANCE.incrementSplashProgessBar(++p); + bimFavIcon = ImageIO.read(f9); if (f5.exists()) { bimPreferredAvatars = ImageIO.read(f5); } @@ -1200,6 +1203,9 @@ public class FSkin { case TROPHY: setImage(prop, bimTrophies); break; + case FAVICON: + setImage(prop, bimFavIcon); + break; default: break; } diff --git a/forge-gui/res/skins/default/sprite_favicons.png b/forge-gui/res/skins/default/sprite_favicons.png new file mode 100644 index 0000000000000000000000000000000000000000..38caa9f2623b84f63375a930afda69b3fc6b188d GIT binary patch literal 8923 zcmbVy1yoy2*Dj^FyE_yMULeIaKyeBL_aH44m*B-A_*ED3k)FxLZka zTCC`wx8L{uvhKbAz4u=$C$ncid!E_n%$(VKW}PHMeN9p#CL$~>EYinX>QAt+u+1?t zga8loZ>gfsjVT2DLFWEyzRnK*PrW=jOrAb>#!5-!5C?JqIV8j|g}9Wgq?D|f1P4G& zTukh+En@=H2;cv)9teL8pORXLl&UJ$45K3S*0S)!!eWE|eccd;o=IVTX`bPzT90;8ff1rg(s2cNX_6J`%3c`?{Q>#_T%2|PxB&>) z33l?LU@J$nw#X3TFJj-C&FDqJJ_A+JI!Tw&H|1ocRJM*X!9UAnCAFYQ4-h|gcg8u^ z9^{NP&VPfe^yvt3k41u6nRq$~L=#hbxc-o4#2FF``BrU4TVr^0F}&p%-YSA_!Vf)P z?MqeYsO%m8n7Nh8Tdt(9aRm;$!gLuw3||;B?w9cG#~Km|Jv=7@<@&Nu zOzJXxUIftCfIy&({Rw z+}x$xfCvN4dI>h8fs%vc4)jau60@eoIf2L}c4l(R%5LoMU0J19Sj^;a2!*71%VdQj z?Ke~&Mxh2`O%k@qJ>=bZ>tmkT2Mk}q=~ z)1CM2b+Fs>=O1p%WMsxG4A{{#@7QT*Xq0_@KhJlJ4!7tqI(H26JxIEmh@0>IGecB~ zkoX$bQqt0Wd_`f{+1c6Ea$8yP@pu8Ne()M8=#f2xtUrHQMTL7%@4QIu*ky+VSz-jG zxhkNJpDl|RhQAfPuF_fzH5B1zJBedch&seiAY)x$7I^s3H~?&t_H?JVWe^+VKv3Ca+-g zQqc6gWwUR{-q6L9u985~vvDrvT6iDSAo)V39x23J>?gq zaec{W0Cv($!MCWcuKt$jbAq0jZ?4PkpB#Q9bQzHNKBhdOX(p3+-d0n@EtIvjct2n> zx@ktd9H&j4`tYh|Rh3fyd+_}%pCkzvzy|Yhixnfezy_VOH6lgcS$8LbMViTUw`m}S z@qP>*DNLqkkUf&bb*yj-S>khYe?l}~)^&pVh}pLt^Qwwq78)Iqp?%Do+wNgRWOHg@ z?tvt%4s+H84>&qs+cE|&V`;auCy;6=ee045+%y01R%dLYRCBHd$j=QrA*LdV0v#7y z8_M(3(~uA2qGEhij_r%>^I}`QRSc(skMcu{Yj9)QgeZyUMY}H6U&*ait9jVY>v^6# z#bVlSJ)oh+w2Jjr5rS9Q!iSC=>eu+Vj7Ei4Qv4nV=a`vB=@D)&CCtHiQa?D_S zJ;nIiiCN1;pDG9KJ>4gIM@QU_dT9M1r0*-S(0`eWe@{*B!H|7y&%9FnD;IH^=AN)UJOFG744|nTKoz#X?baerO~#gl>w2iy?A9LuS@s<0qjCls=g|!S|VBmpKu8| zTRAv+l$w_UnXQAjvY&B3SvE+tvrm(rr`fm)miw$2 z*WYVTjpoR(w6AYT#XmlV*;9uzW%fRoPfQmT6r}o>>@~W`aVg0avjC-F?`{;Aj4Ui4 z{M$w;|E3E)nMfkqc|!F$4@f>;Yti4?+0tUp%7oTkbMkDt*Dk6o<4-I^^CTpye5Kov zhmetyYcmZqr=5IN4qjPj$nnx|rpZ)vbg<9~nHPIrdeAOXFrjD_>0ZrOfB*jd)s>_F zkRjlwb!fOcQ6rjPKp^UTIn-c@gUV`WEMI2wL|md!w4F1cB#Df1EO#kGc0xTNWqZU^ ztH7;9ZQz$PuuNZaf^*|{yo1`al>0V{P1}Sg*uDx&wn`+6Vn$CU9H7iZ z)!6{EKGBHd;_Gk52EB`|eohCXe!4?204XCVA-4wKIgQZ5r<}7CedK#u{8^k6 zfRu#Lu-YQovSfH6sOU7H2MRN`7gDB!N7&PrH(R2SKLWTt2~wHWf?^I# zm1t~A5|apmy?!=4F*1VB$Je%~8u|;{by=UBcsQK2{aW61E~~Gn)Yj24r9a-vwTsuw zlkR2q>bNHtbP!9;r>~WrY}Jbn*zWv9ee3kcp72gQWU2Iow@8Yg@zPE(teI9P_D8_X z4)W+G^yc!^`>^x8&(sXnRBKu97#Cs6A@R7qCmBB=Pd7JFafSgu8T6ga#Hz_73Y1Kz zqNhiC9{8SWCH&k56Npp}i{~icOPm$Y*Ez&6jqLJ$xUQ|nn`zp{cmH4i6=|Mb^e}2ALj%%E zX~xu$C`4ms7Xlz}z>~9@IXys-dLPX=(t^2QfX!Zfc9VoY9Q5)DCRaGyUzqE}=ai9Q ze5;o?K-X$uGQd{FrK(U%pd7`~7XNguFYfKSwlwrz-Xwnx?LB@9^=UDOYghWkfT@ zs?f!}Wt#(lq}YR_5&>c3Y!iOXCrbLFcOZhZDBC4tGZc-UtUfo@T zu46Jl+W998=T${m^{e4CNSkNEO?aM{@;>Y8XX59A8{6}=RmqE~6r2s-sMTuIn$_Ri zMG3bzSN%8VE96DLKf8YGOgTxUGLL8jA5#c4d~Vq;40UXJsGK8WLsY7nes((h2YJw- z4=z)^>)OxAM%~#AOvU~3V(vpsULMkBi-l^GzWeoS@&hcvEmI0Q>YkzCm-gc(n(hxL zfhFV^2Ygdc26f09*H{tHaGy%9AD%5Ek>Y*&{JH6F#N0ff$VhO3ueFC%?TcXv|oLg3X8(sC3-8^%6#jXPzAynjh!Mk?3#S=KO-(8-*d+7!w zCZ-79+}ir>E1%g115s1F$tx!$nb>F1XQt_Qszu{-#nC47a!3Mos2L*KEX-$Z>rMzM zE8G*c98e{M1f!#0apFl78lz)lO-UYR)mt#OLUB=3y)pRkrnBgUMC7*zxz>Hsbch7x zt@%_5-`M)6Hd6~QBVMZ8%rL>+qEIPsSzO#Q9XL4i=JikI{9rnOzNyrz`@)?uKJ0PaI!mmO)6N;Szew61{e=u8G z<>T>3k|h>)u#GXr@Vpr!YRgy>!7QeWWKm|3aZrJ}Xc0(rvRh`rHAGPUeS^|sLn8Z( zt->$)&GS>wa+C46y+A@$h=W7uZFA1YukC6`i2Ei?2z`DLG&l3FHZ(P z9=i0^iB{B*K7NUfHdl??v!+uu3&l0Hb{L&HSZWUqAn(bJF1kIb;8ap73SYcG47EAg z42E8sflMF_k`irTc}OCOU1Y)C9h+R6D+DqdCaw6lHadl*zUFGc%nx2GZyHeRjSHs~ z5GXjh@tT>1o?Q%~Esu}nB!n)GjTcR0K6G2drD^u38hSM${s<@zE8{b49fO3Q8%oz< z5BFNSDVYGBUSrBg+T2K^0l|HuX-jyEqf&lpOWR(<$jKGytukYJQeg*W*ZZc_>bwW; zJZ|y)z}>yM#&}ZDyUsJqnK9A7bt|59fi8Cyha}MfcX<`k9I1TBjCN0C3}yc!@JW^w zm1I9TaHO)XbAMC3(&omEWBU&idPvM7_>(tkE&6`=6xorjN@g*qdD$#C($K^KfCsjQ zSH6)CmH;4+jK_g0jy`c0O+m`v)N|Nb=VH`jhx%^K+^ z+^Ukhozrba^efW-zL5uN{HrgVjRr(3YxemIr}=oAFwQiru!FJ7^UFtS3kPaThX4fh zNIl0+m3YA|D=W*}D^Dr1Yh#Zh}2W(OXdqeGc1>N-0~t8>E#XIe*WhYoNGCpXj~ z;U^vsuYV7OJi1X~W?7iU#-EYyzf+jTY0r`B%On-{e*4~L$uC1w+l4ADFraCa`w3?| z;YAWzUSc)w{^{xI&NCIT_38eCnJ7|nTTqgjO739u07t2<+o`vSy9MrKK%#Ek7oLj3*0ytQxOIBI7Z;%KQa5>#tvj;fJA3 z%>zj#7_T~qR6DGlp_jTu@+}QY9=Fs=RFVtnVlbqs{0SGaIF)6q-K8vv^{L#!^MEl# zbebQ%qW@-i04GpG{#!)jk`tS1$HzxHBdB&ZoPb5`;(z<_x;})4<)4+ zgMZbWdS8d_u~g=Xxm+VU zQQ2`e`KTm!di@8d7 zds&nu0Z41Oc8&ASRp%3Z3R&qv7NWncfrhUwI zW{XEIn?4IV!<_io0@Ij*X-l@GPAb>szAW!zeMMD)v2YQ9M-9%>YLf_{utn9g?Fa9| z`tUGIDU3b9Lg>fS0x=hyZsC4S&9A}=nzLZSw%%tpIl1dZKdweW8J3cZ#~4eq01FMt ztY1z&pH+87MG;gfBc$`VH~7Er-N!?pBRfg069E$hl;%wOIJy=Vj2;V3q|%;?m1#4! zp{b$W@$vD6R~~Z>xQdr(Zosb}t)KnoO46wBIq@PrJB~G8DTFqa{;ul|lg}02xe&1b z0{mGNa$&d;VP2a&@VDjb7rm;1qP^Sw$U}`f5vDQcWZ4M9SBj+<06h1zk9Lpx+T7%G zQ_*mSyWV+#waieoa2Ug_G2{9f?XMTBOA7zu zLxKG9duyDy7IWy;U}pD3qu@hDR<0qTP{sQ2myLkI>`8+bgdW0 z@?o|-Hta6^?9vyaYaKPr9H=rktO7{{8wqQZdR2de_T(4Dju`i^Ll+<1>EA(i%~Nmh z{U^A8^>vk4sEr7O^x$$V)o5i-ZGRk-@18odR=da5ufC|N+L4x#AC6eT77qAc#r{vP zOcH3-;DIWlbwor&vo+nc3Pz$7ymfm6F+=;!D`X=%!n;!`pUIk+Lux7~v)S5@i_P>o zCbwhl>zK)x8{7=jz5Cu>k-e?y7vvxA3fDoPCv)f;p&0~pa>uLrz{?XV{Ttr0%6>t_ zX+hmD&4cEbTqYqfqPgyyPoF+r>g5L|7FN>74)?bG{+>7WhINtPt4NFNJ@;q=uOn>+ zy&^@MlPYy=ZnI$`eq>=-3sF36rZ-24W*XkGw;%R+^b?evqyhOdtqwPmQ2i6l6RD{UFV7A*9 z)NLReCT2u|TOFPmiwe`r|m}ChR(d;A}@szLhIa*cu;4U}aWKrd%HbcByRX0XRwm0ie+azlC zZMQDJmhEG9)GYia{Se|uJbRkLvP=}TY>huNS_MS3ulJs9!9rMb*pKbM&~Nv@7>vOE zG^bGWw)pr42wy*Vr|jw!v%l?h&q=ttEi3ii!6VlSi0#ZZ4lTzk4#UKAH#Y&zJGDX4i$3PK?W# z$I7oZ0Rx-6IIlTHo9}~ft!8#~7vBe;cll#BV7qfc6lMhLc;n_5wv}P5;wfNa7>*fB zlWCUP*=Hm$BP~9p(yE=P(RRW(nWbP@2bL$hp*8yW$$}V!j#o{?fvRkaw<=G*NN)Px zHkm+aE$f?_s<`a2J+lGHj^f?WayYVZzB{s;4_k+ar;dQjk%rXM7@re3TE6g21qZ*$ z?a?t)cnbxItjU-F_e(!!*gL&hewGD^I97PUV&}lfejrt6O*{SUoabPQ`r*z2uB~VD zOSH{W=Zog0G~+)Qv~`IrARwLimQxjfS7oW^hOi<#D~n~I=SD_L2}R16xZ@wc zHjCJR6l;L!l2D(l1~NO>lPvG1$Yp>aDaEG}M;(xLL0geE|*pyzj|~_#aYkfgwh^ zS~!>WpK72PeEG9rqCFpe3CV%~S?wfyZMa9Cg4uQou%U+DS@rBTNGgl{(knr2*0HOR z&b^2US|;6fGg%n(^sNb_ z0bt`f`q_kc0h%xbsn&QUVP)nJ7krCUBeU3u+K@XFq&mW! z!lhEmTdcvA9Ge4V07Yx)DW|H_5em<&vWNLsdy2KNGG~;aE%`%AY$?q7f`G@xtPakB z9(;a@j%NR(S~2pV^CDHk^DFY()YQGR4$L0BE>Es;Q20RJE+xn(R5`O?u{^MDuMMnW z2tktu+5ouuB~I|#k=c|qj3F^Lm<=S1q_Y?4?u-M9FZ5v)TPKqHkeiiNX@%Th?qqKA zTKVGH8m|vV%cW`q>QZ8}jq#JX)PfiY0TpCap!fqZDzH8)4~%5Vfu}ZKR*QzQtzXMr zCLjaTNo=8cT~iZyX)vd}yc{=;O<}k*(wvZo>pe9&6Cs;usSIDHLzbhe+;MT{>aoNd zKPpBI0p9;tkP{UvC@Sc5&-Rh`Dwc_f$;ZXN^EpgD0JlNiZ9erR*QRs;sw4tRx4D6U z9FC9K6TdR^Xmu#ohta=>Mqv*Ke4J0hHeFCuu`LoIioT6P;@a)wv$I2;YF1Xv{{H@M zX2(j
lY6{0BGchke7%|qzm#}L%J4?jnQB|>beERNj~*S^Uqg}LhBYfC`)B3J45 zgG}1)|1d3g^>fuwM~yEpf3YP!jr3mOR&9ie@y`tJupquj)r!L{hPyS`?H{wZ=>FN+#pS_#$e*Ozc=wOY(+UF#bB~TkZ^n zS62&uCu7(i&6hE5hmC6fT4XbUsPpTx4s+DbI_-eKB>^vTRm|%Lza`hI?_!C@)H$YC z(OV=<-?PPYK(QH%Hc%n%caZeK6yDlGjPRi%3Ga!6gM+Q3ObrctFk?kYMLEoaoOR-R zCWrs}BW>uO`txm$mo1Lz1(o|O5Gu31dg>1aF}mw81?dldVq4Gmv2R&5Gf{sP7Ls9d zuD#}E8U=@D95%|3iJ4)qTF*V9g$_h&8T*k}@G ztxK+{EYO)nnST57U~gUU*)~<65A6p(!uA%}PAkRt3$8kU1S8iuJ4~TM?2%>d2sN%s zNy7h42C4KFQp;FQ3^XT-!TMl95e^jQS~PLAhu3`^bs79bfaTwDD)yX4G~kY3#4$ap rCH%F}ZB6Xt|NJ$^e=BpPTq_Zmq`VU(+}FT-P=fUsq_2)twU7Qc8G_ buildFoilFilter(Map buttonMap) { + public static Predicate buildStarRatingFilter(Map buttonMap, final HashSet QuestRatings) { + final Map buttonMap2 = buttonMap; + return new Predicate() { + @Override + public boolean apply(PaperCard card) { - // final Map buttonMap2 =buttonMap; + StarRating r = new StarRating(); + r.Name = card.getName(); + r.Edition = card.getEdition(); + int j = 0; + for (int i = 1; i < 6; i++) { + r.rating = i; + if (QuestRatings.contains(r)) { + j = i; + } + } + boolean result = true; + + if (j == 0) { + if (!buttonMap2.get(StatTypes.RATE_NONE).isSelected()) { + result = false; + } + } else if (j == 1) { + if (!buttonMap2.get(StatTypes.RATE_1).isSelected()) { + result = false; + } + } else if (j == 2) { + if (!buttonMap2.get(StatTypes.RATE_2).isSelected()) { + result = false; + } + } else if (j == 3) { + if (!buttonMap2.get(StatTypes.RATE_3).isSelected()) { + result = false; + } + } else if (j == 4) { + if (!buttonMap2.get(StatTypes.RATE_4).isSelected()) { + result = false; + } + } else if (j == 5) { + if (!buttonMap2.get(StatTypes.RATE_5).isSelected()) { + result = false; + } + } + return result; + + } + }; + } + + public static Predicate buildFoilFilter(Map buttonMap) { final int Foil = (((buttonMap.get(StatTypes.FOIL_OLD).isSelected()) ? 1 : 0) + ((buttonMap.get(StatTypes.FOIL_NEW).isSelected()) ? 2 : 0) + ((buttonMap.get(StatTypes.FOIL_NONE).isSelected()) ? 4 : 0)); diff --git a/forge-gui/src/main/java/forge/itemmanager/SItemManagerUtil.java b/forge-gui/src/main/java/forge/itemmanager/SItemManagerUtil.java index 17d753b7b4a..09f68f9a904 100644 --- a/forge-gui/src/main/java/forge/itemmanager/SItemManagerUtil.java +++ b/forge-gui/src/main/java/forge/itemmanager/SItemManagerUtil.java @@ -1,13 +1,6 @@ package forge.itemmanager; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.Map.Entry; - import com.google.common.base.Predicate; - import forge.assets.FSkinProp; import forge.assets.IHasSkinProp; import forge.card.CardRules; @@ -17,6 +10,12 @@ import forge.interfaces.IComboBox; import forge.item.InventoryItem; import forge.util.ComparableOp; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map.Entry; + /** * Static methods for working with top-level editor methods, * included but not limited to preferences IO, icon generation, @@ -62,10 +61,17 @@ public final class SItemManagerUtil { DECK_COLORLESS (FSkinProp.IMG_MANA_COLORLESS, null, "Colorless decks"), DECK_MULTICOLOR (FSkinProp.IMG_MULTI, null, "Multicolor decks"), - FOIL_OLD (FSkinProp.FOIL_11, null, "Old style Foil cards"), - FOIL_NEW (FSkinProp.FOIL_01, null, "New style Foil cards"), - FOIL_NONE (FSkinProp.ICO_CLOSE, null, "non-Foil cards"); - + FOIL_OLD (FSkinProp.FOIL_11, null, "Old style Foil cards"), + FOIL_NEW (FSkinProp.FOIL_01, null, "New style Foil cards"), + FOIL_NONE (FSkinProp.ICO_CLOSE, null, "Non-Foil cards"), + + RATE_NONE (FSkinProp.IMG_FAVNONE, null, "Unrated cards"), + RATE_1 (FSkinProp.IMG_FAV1, null, "1 star cards"), + RATE_2 (FSkinProp.IMG_FAV2, null, "2 star cards"), + RATE_3 (FSkinProp.IMG_FAV3, null, "3 star cards"), + RATE_4 (FSkinProp.IMG_FAV4, null, "4 star cards"), + RATE_5 (FSkinProp.IMG_FAV5, null, "5 star cards"); + public final FSkinProp skinProp; public final Predicate predicate; diff --git a/forge-gui/src/main/java/forge/properties/ForgeConstants.java b/forge-gui/src/main/java/forge/properties/ForgeConstants.java index 38889fe194e..38defdae304 100644 --- a/forge-gui/src/main/java/forge/properties/ForgeConstants.java +++ b/forge-gui/src/main/java/forge/properties/ForgeConstants.java @@ -92,6 +92,7 @@ public final class ForgeConstants { public static final String SPRITE_OLD_FOILS_FILE = "sprite_old_foils.png"; public static final String SPRITE_TROPHIES_FILE = "sprite_trophies.png"; public static final String SPRITE_AVATARS_FILE = "sprite_avatars.png"; + public static final String SPRITE_FAVICONS_FILE = "sprite_favicons.png"; public static final String SPRITE_PLANAR_CONQUEST_FILE = "sprite_planar_conquest.png"; public static final String FONT_FILE = "font1.ttf"; public static final String SPLASH_BG_FILE = "bg_splash.png"; diff --git a/forge-gui/src/main/java/forge/quest/QuestController.java b/forge-gui/src/main/java/forge/quest/QuestController.java index 33a7d23c679..d87bdf0c51b 100644 --- a/forge-gui/src/main/java/forge/quest/QuestController.java +++ b/forge-gui/src/main/java/forge/quest/QuestController.java @@ -32,10 +32,7 @@ import forge.properties.ForgeConstants; import forge.quest.bazaar.QuestBazaarManager; import forge.quest.bazaar.QuestItemType; import forge.quest.bazaar.QuestPetStorage; -import forge.quest.data.GameFormatQuest; -import forge.quest.data.QuestAchievements; -import forge.quest.data.QuestAssets; -import forge.quest.data.QuestData; +import forge.quest.data.*; import forge.quest.data.QuestPreferences.DifficultyPrefs; import forge.quest.data.QuestPreferences.QPref; import forge.quest.io.QuestChallengeReader; @@ -137,6 +134,22 @@ public class QuestController { return this.myCards; } + // Set the card's custom rating to N stars + public void SetRating(String name, String edition, int n) { + StarRating r = new StarRating(); + r.Name = name; + r.Edition = edition; + for (int i = 0; i < 6; i++) { + r.rating = i; + model.Ratings.remove(r); + } + + r.rating = n; + if (n != 0) { + model.Ratings.add(r); + } + } + /** * Gets the my decks. * @@ -427,6 +440,10 @@ public class QuestController { this.duelManager = new QuestEventDuelManager(new File(path)); } + public HashSet GetRating() { + return model.Ratings; + } + /** * * Reset the challenges manager. diff --git a/forge-gui/src/main/java/forge/quest/data/QuestData.java b/forge-gui/src/main/java/forge/quest/data/QuestData.java index 54953525b99..50b290f2162 100644 --- a/forge-gui/src/main/java/forge/quest/data/QuestData.java +++ b/forge-gui/src/main/java/forge/quest/data/QuestData.java @@ -25,6 +25,7 @@ import forge.quest.io.QuestDataIO; import java.io.File; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; //when you create QuestDataOld and AFTER you copy the AI decks over @@ -41,7 +42,7 @@ import java.util.Map; */ public final class QuestData { /** Holds the latest version of the Quest Data. */ - public static final int CURRENT_VERSION_NUMBER = 10; + public static final int CURRENT_VERSION_NUMBER = 11; // This field places the version number into QD instance, // but only when the object is created through the constructor @@ -65,6 +66,8 @@ public final class QuestData { private final Map petSlots = new HashMap<>(); private int matchLength = 3; + public HashSet Ratings = new HashSet(); + public QuestData() { //needed for XML serialization } diff --git a/forge-gui/src/main/java/forge/quest/data/StarRating.java b/forge-gui/src/main/java/forge/quest/data/StarRating.java new file mode 100644 index 00000000000..a6d7b5429fd --- /dev/null +++ b/forge-gui/src/main/java/forge/quest/data/StarRating.java @@ -0,0 +1,53 @@ +package forge.quest.data; + +public class StarRating { + public String Name; + public String Edition; + public int rating; + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((Edition == null) ? 0 : Edition.hashCode()); + result = prime * result + ((Name == null) ? 0 : Name.hashCode()); + result = prime * result + rating; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + + StarRating other = (StarRating) obj; + if (Edition == null) { + if (other.Edition != null) { + return false; + } + } else if (!Edition.equals(other.Edition)) { + return false; + } + + if (Name == null) { + if (other.Name != null) { + return false; + } + } else if (!Name.equals(other.Name)) { + return false; + } + + if (rating != other.rating) { + return false; + } + + return true; + } +} diff --git a/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java b/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java index 3ddacf50b53..003e32ef551 100644 --- a/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java +++ b/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java @@ -50,10 +50,7 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.*; import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.Map.Entry; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; @@ -199,6 +196,11 @@ public class QuestDataIO { } if (saveVersion < 11) { + // clear player star ratings on cards - no card has been rated yet + QuestDataIO.setFinalField(QuestData.class, "Ratings", newData, new HashSet()); + newData.Ratings.clear(); + } + if (saveVersion < 12) { // Migrate DraftTournaments to use new Tournament class } @@ -378,7 +380,7 @@ public class QuestDataIO { //Copy the save file in case the save fails FileUtil.copyFile(f + ".dat", f + ".dat.bak"); QuestDataIO.savePacked(f + ".dat", xStream, qd); - // QuestDataIO.saveUnpacked(f + ".xml", xStream, qd); + //QuestDataIO.saveUnpacked(f + ".xml", xStream, qd); } catch (final Exception ex) { //BugReporter.reportException(ex, "Error saving Quest Data.");