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 00000000000..38caa9f2623 Binary files /dev/null and b/forge-gui/res/skins/default/sprite_favicons.png differ diff --git a/forge-gui/src/main/java/forge/assets/FSkinProp.java b/forge-gui/src/main/java/forge/assets/FSkinProp.java index 4167f4ed240..9443252d2c6 100644 --- a/forge-gui/src/main/java/forge/assets/FSkinProp.java +++ b/forge-gui/src/main/java/forge/assets/FSkinProp.java @@ -283,7 +283,14 @@ public enum FSkinProp { IMG_BTN_DISABLED_LEFT (new int[] {80, 200, 40, 40}, PropType.ICON), IMG_BTN_DISABLED_CENTER (new int[] {120, 200, 1, 40}, PropType.ICON), IMG_BTN_DISABLED_RIGHT (new int[] {160, 200, 40, 40}, PropType.ICON), - + + IMG_FAV1 (new int[] {0, 0, 100, 100}, PropType.FAVICON), + IMG_FAV2 (new int[] {100, 0, 100, 100}, PropType.FAVICON), + IMG_FAV3 (new int[] {200, 0, 100, 100}, PropType.FAVICON), + IMG_FAV4 (new int[] {300, 0, 100, 100}, PropType.FAVICON), + IMG_FAV5 (new int[] {400, 0, 100, 100}, PropType.FAVICON), + IMG_FAVNONE (new int[] {500, 0, 100, 100}, PropType.FAVICON), + IMG_QUEST_DRAFT_DECK (new int[] {0, 0, 680, 475}, PropType.IMAGE); private int[] coords; @@ -317,6 +324,7 @@ public enum FSkinProp { FOIL, OLD_FOIL, TROPHY, - PLANAR_CONQUEST + PLANAR_CONQUEST, + FAVICON } } diff --git a/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java b/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java index f697691a776..bd58768ba38 100644 --- a/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java +++ b/forge-gui/src/main/java/forge/itemmanager/SFilterUtil.java @@ -2,13 +2,8 @@ package forge.itemmanager; import com.google.common.base.Predicate; import com.google.common.base.Predicates; - import forge.StaticData; -import forge.card.CardEdition; -import forge.card.CardRules; -import forge.card.CardRulesPredicates; -import forge.card.ColorSet; -import forge.card.MagicColor; +import forge.card.*; import forge.deck.DeckProxy; import forge.game.GameFormat; import forge.interfaces.IButton; @@ -17,13 +12,11 @@ import forge.item.PaperCard; import forge.itemmanager.SItemManagerUtil.StatTypes; import forge.model.FModel; import forge.properties.ForgePreferences; +import forge.quest.data.StarRating; import forge.util.BinaryUtil; import forge.util.PredicateString.StringOp; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * Static factory; holds blocks of form elements and predicates @@ -141,9 +134,56 @@ public class SFilterUtil { } } - public static Predicate 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.");