- Integrating Personal Ratings patch by Seravy.

git-svn-id: http://svn.slightlymagic.net/forge/trunk@35767 269b9781-a132-4a9b-9d4e-f004f1b56b58
This commit is contained in:
Agetian 2017-09-25 13:14:23 +00:00
parent d413390a95
commit 85576d8a13
25 changed files with 354 additions and 135 deletions

View File

@ -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<PaperCard> createImageView(final ItemManagerModel<PaperCard> model0) {
return new ImageView<PaperCard>(this, model0) {

View File

@ -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<PaperCard> {
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<PaperCard> {
return new CardSearchFilter(itemManager);
}
public static void buildAddFilterMenu(JMenu menu, final ItemManager<? super PaperCard> itemManager) {
public void buildAddFilterMenu(JMenu menu, final ItemManager<? super PaperCard> itemManager) {
GuiUtils.addSeparator(menu); //separate from current search item
JMenu fmt = GuiUtils.createMenu("Format");
@ -164,6 +167,15 @@ public class CardManager extends ItemManager<PaperCard> {
}
}, 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() {

View File

@ -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<InventoryItem> {
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<InventoryItem> {
@Override
protected void buildAddFilterMenu(JMenu menu) {
CardManager.buildAddFilterMenu(menu, this);
CardManager CM = new CardManager(cDetailPicture2, wantUnique02, true);
CM.buildAddFilterMenu(menu, this);
}
}

View File

@ -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<PaperCard> {
public CardRatingFilter(ItemManager<? super PaperCard> itemManager0) {
super(itemManager0);
}
@Override
public ItemFilter<PaperCard> 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<PaperCard> buildPredicate() {
return SFilterUtil.buildStarRatingFilter(buttonMap, FModel.getQuest().GetRating());
}
}

View File

@ -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<TItem extends InventoryItem, TModel extends D
isAddContextMenu = isAddContextMenu0;
}
private ItemManager<TItem> getItemManager() {
public ItemManager<TItem> getItemManager() {
return isAddContextMenu ? catalogManager : deckManager;
}
@ -439,6 +427,10 @@ public abstract class ACEditorBase<TItem extends InventoryItem, TModel extends D
return isAddContextMenu ? deckManager : catalogManager;
}
public JPopupMenu getMenu() {
return menu;
}
@Override
public void buildContextMenu(final JPopupMenu menu) {
this.menu = menu; //cache menu while controller populates menu

View File

@ -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.Deck;
@ -75,8 +74,8 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
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");

View File

@ -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<PaperCard, Deck> {
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");

View File

@ -65,8 +65,8 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
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);

View File

@ -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<PaperCard, DeckGroup> {
public CEditorLimited(final IStorage<DeckGroup> 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");

View File

@ -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.
* <br><br>
@ -100,8 +102,8 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
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<PaperCard, Deck> {
@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<PaperCard> selected = cmb.getItemManager().getSelectedItemPool();
for (final Entry<PaperCard, Integer> 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<PaperCard, Deck> {
@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);
}
/*

View File

@ -69,8 +69,8 @@ public class CEditorQuestDraftingProcess extends ACEditorBase<PaperCard, DeckGro
public CEditorQuestDraftingProcess(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);

View File

@ -17,15 +17,8 @@
*/
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.Deck;
import forge.deck.DeckGroup;
@ -49,6 +42,12 @@ import forge.screens.deckeditor.views.VDeckgen;
import forge.screens.home.quest.CSubmenuQuestDecks;
import forge.screens.match.controllers.CDetailPicture;
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.
* <br><br>
@ -100,8 +99,8 @@ public final class CEditorQuestLimited extends ACEditorBase<PaperCard, DeckGroup
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("Sideboard");

View File

@ -20,7 +20,6 @@ package forge.screens.deckeditor.controllers;
import com.google.common.base.Predicate;
import com.google.common.base.Supplier;
import com.google.common.collect.Iterables;
import forge.UiCommand;
import forge.deck.Deck;
import forge.deck.DeckSection;
@ -69,8 +68,8 @@ public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
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");

View File

@ -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<PaperCard, DeckGroup> {
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);

View File

@ -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<CWorkshopCatalog> {
//========== Constructor
private VWorkshopCatalog() {
this.cardManager = new CardManager(cDetailPicture, true);
this.cardManager = new CardManager(cDetailPicture, true, false);
this.cardManager.setCaption("Catalog");
final Iterable<PaperCard> allCards = Iterables.concat(FModel.getMagicDb().getCommonCards(), FModel.getMagicDb().getVariantCards());
this.cardManager.setPool(ItemPool.createFrom(allCards, PaperCard.class), true);

View File

@ -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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

@ -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
}
}

View File

@ -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<PaperCard> buildFoilFilter(Map<SItemManagerUtil.StatTypes, ? extends IButton> buttonMap) {
public static Predicate<PaperCard> buildStarRatingFilter(Map<SItemManagerUtil.StatTypes, ? extends IButton> buttonMap, final HashSet<StarRating> QuestRatings) {
final Map<SItemManagerUtil.StatTypes, ? extends IButton> buttonMap2 = buttonMap;
return new Predicate<PaperCard>() {
@Override
public boolean apply(PaperCard card) {
// final Map<StatTypes, ? extends IButton> 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<PaperCard> buildFoilFilter(Map<SItemManagerUtil.StatTypes, ? extends IButton> 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));

View File

@ -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<CardRules> predicate;

View File

@ -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";

View File

@ -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<StarRating> GetRating() {
return model.Ratings;
}
/**
*
* Reset the challenges manager.

View File

@ -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<Integer, String> petSlots = new HashMap<>();
private int matchLength = 3;
public HashSet<StarRating> Ratings = new HashSet<StarRating>();
public QuestData() { //needed for XML serialization
}

View File

@ -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;
}
}

View File

@ -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<StarRating>());
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.");