diff --git a/forge-gui/src/main/java/forge/Card.java b/forge-gui/src/main/java/forge/Card.java index 12207b12902..48eef513c72 100644 --- a/forge-gui/src/main/java/forge/Card.java +++ b/forge-gui/src/main/java/forge/Card.java @@ -8701,9 +8701,9 @@ public class Card extends GameEntity implements Comparable { private static final Map cp2card = new HashMap(); public static Card getCardForUi(IPaperCard pc) { - if( pc instanceof PaperCard ) { + if (pc instanceof PaperCard) { Card res = cp2card.get(pc); - if (null == res) { + if (res == null) { res = fromPaperCard(pc, null); cp2card.put((PaperCard) pc, res); } @@ -8712,5 +8712,14 @@ public class Card extends GameEntity implements Comparable { return fromPaperCard(pc, null); } - + /** + * Update Card instance for the given PaperCard if any + * @param pc + */ + public static void updateCard(PaperCard pc) { + Card res = cp2card.get(pc); + if (res != null) { + cp2card.put(pc, fromPaperCard(pc, null)); + } + } } // end Card class diff --git a/forge-gui/src/main/java/forge/card/CardRules.java b/forge-gui/src/main/java/forge/card/CardRules.java index 6e40c0b556b..19b30a69aa3 100644 --- a/forge-gui/src/main/java/forge/card/CardRules.java +++ b/forge-gui/src/main/java/forge/card/CardRules.java @@ -30,16 +30,19 @@ import forge.card.mana.ManaCost; * @version $Id: CardRules.java 9708 2011-08-09 19:34:12Z jendave $ */ public final class CardRules implements ICardCharacteristics { - private final CardSplitType splitType; - private final ICardFace mainPart; - private final ICardFace otherPart; + private CardSplitType splitType; + private ICardFace mainPart; + private ICardFace otherPart; //private final Map setsPrinted = new TreeMap(String.CASE_INSENSITIVE_ORDER); private CardAiHints aiHints; private ColorSet colorIdentity = null; private File sourceFile; - public CardRules(ICardFace[] faces, CardSplitType altMode, CardAiHints cah) { + public CardRules() { + } + + public void setup(ICardFace[] faces, CardSplitType altMode, CardAiHints cah) { splitType = altMode; mainPart = faces[0]; otherPart = faces[1]; @@ -65,6 +68,12 @@ public final class CardRules implements ICardCharacteristics { colMask |= calculateColorIdentity(otherPart); } colorIdentity = ColorSet.fromMask(colMask); + + //reset these + this.deltaHand = 0; + this.deltaLife = 0; + this.dlUrl = null; + this.dlUrlOtherSide = null; } private byte calculateColorIdentity(ICardFace face) { @@ -136,7 +145,6 @@ public final class CardRules implements ICardCharacteristics { } } - @Override public ManaCost getManaCost() { switch(splitType.getAggregationMethod()) { diff --git a/forge-gui/src/main/java/forge/card/CardRulesReader.java b/forge-gui/src/main/java/forge/card/CardRulesReader.java index 58af9ff48aa..57448987ea9 100644 --- a/forge-gui/src/main/java/forge/card/CardRulesReader.java +++ b/forge-gui/src/main/java/forge/card/CardRulesReader.java @@ -18,6 +18,7 @@ package forge.card; import java.util.StringTokenizer; + import org.apache.commons.lang3.StringUtils; import forge.card.mana.IParserManaCost; @@ -68,35 +69,43 @@ public class CardRulesReader { this.needs = null; this.hints = null; } - + /** - * Gets the card. + * Create new CardRules from read properties * * @return the card */ - public final CardRules getCard() { + public final CardRules createCardRules() { + final CardRules rules = new CardRules(); + apply(rules); + return rules; + } + + /** + * Apply read properties to a CardRules object + * + */ + private final void apply(CardRules rules) { CardAiHints cah = new CardAiHints(removedFromAIDecks, removedFromRandomDecks, hints, needs ); faces[0].assignMissingFields(); - if (null != faces[1]) faces[1].assignMissingFields(); - final CardRules result = new CardRules(faces, altMode, cah); - result.setDlUrls(pictureUrl); - if (StringUtils.isNotBlank(handLife)) - result.setVanguardProperties(handLife); - return result; + if (faces[1] != null) { + faces[1].assignMissingFields(); + } + rules.setup(faces, altMode, cah); + rules.setDlUrls(pictureUrl); + if (StringUtils.isNotBlank(handLife)) { + rules.setVanguardProperties(handLife); + } } public final CardRules readCard(final Iterable script) { this.reset(); for (String line : script) { - if (line.isEmpty() || line.charAt(0) == '#') { - continue; - } this.parseLine(line); } - return this.getCard(); + return this.createCardRules(); } - - + /** * Parses the line. * @@ -104,6 +113,10 @@ public class CardRulesReader { * the line */ public final void parseLine(final String line) { + if (line.isEmpty() || line.charAt(0) == '#') { + return; + } + int colonPos = line.indexOf(':'); String key = colonPos > 0 ? line.substring(0, colonPos) : line; String value = colonPos > 0 ? line.substring(1+colonPos).trim() : null; @@ -225,6 +238,7 @@ public class CardRulesReader { /** * Instantiates class, reads a card. Do not use for batch operations. + * * @param script * @return */ @@ -233,7 +247,22 @@ public class CardRulesReader { for(String line : script) { crr.parseLine(line); } - return crr.getCard(); + return crr.createCardRules(); + } + + /** + * Instantiates class, reads card rules from script, then updates an existing card. + * + * @param rules + * @param script + */ + public static void updateCardRules(CardRules rules, String script) { + CardRulesReader crr = new CardRulesReader(); + String[] lines = script.split("(\r\n)|\n"); + for (String line : lines) { + crr.parseLine(line); + } + crr.apply(rules); } /** diff --git a/forge-gui/src/main/java/forge/gui/toolbox/FUndoManager.java b/forge-gui/src/main/java/forge/gui/toolbox/FUndoManager.java index 7957c8840da..e7a3f0d5764 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/FUndoManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/FUndoManager.java @@ -7,7 +7,6 @@ import java.awt.event.KeyEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.KeyStroke; -import javax.swing.SwingUtilities; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.UndoableEditEvent; diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java index dbe074b1afb..b23c009ff63 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java @@ -540,10 +540,6 @@ public abstract class ItemManager extends JPanel { */ public void focus() { this.table.requestFocusInWindow(); - - if (this.table.getRowCount() > 0) { - this.table.changeSelection(0, 0, false, false); - } } public void addSelectionListener(ListSelectionListener listener) { diff --git a/forge-gui/src/main/java/forge/gui/workshop/controllers/CCardScript.java b/forge-gui/src/main/java/forge/gui/workshop/controllers/CCardScript.java index 39e5e5995e4..e9b78847da3 100644 --- a/forge-gui/src/main/java/forge/gui/workshop/controllers/CCardScript.java +++ b/forge-gui/src/main/java/forge/gui/workshop/controllers/CCardScript.java @@ -11,6 +11,8 @@ import forge.Command; import forge.Singletons; import forge.gui.framework.FScreen; import forge.gui.framework.ICDoc; +import forge.gui.match.controllers.CDetail; +import forge.gui.match.controllers.CPicture; import forge.gui.toolbox.FTextEditor; import forge.gui.workshop.menus.WorkshopFileMenu; import forge.gui.workshop.views.VCardDesigner; @@ -139,6 +141,11 @@ public enum CCardScript implements ICDoc { this.baseText = text; updateDirtyFlag(); + + this.currentCard.updateRules(text); + VWorkshopCatalog.SINGLETON_INSTANCE.getCardManager().repaint(); + CDetail.SINGLETON_INSTANCE.showCard(this.currentCard); + CPicture.SINGLETON_INSTANCE.showImage(this.currentCard); return true; } catch (final Exception ex) { JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "FileUtil : writeFile() error, problem writing file - " + sourceFile + " : " + ex); diff --git a/forge-gui/src/main/java/forge/item/PaperCard.java b/forge-gui/src/main/java/forge/item/PaperCard.java index d4db6cc35b8..090842f5075 100644 --- a/forge-gui/src/main/java/forge/item/PaperCard.java +++ b/forge-gui/src/main/java/forge/item/PaperCard.java @@ -19,8 +19,10 @@ package forge.item; import com.google.common.base.Function; +import forge.Card; import forge.card.CardRarity; import forge.card.CardRules; +import forge.card.CardRulesReader; /** @@ -34,10 +36,10 @@ import forge.card.CardRules; */ public final class PaperCard implements Comparable, InventoryItemFromSet, IPaperCard { // Reference to rules - private final transient CardRules card; + private final transient CardRules rules; // These fields are kinda PK for PrintedCard - public final String name; + public String name; public final String edition; public final int artIndex; public final boolean foil; @@ -72,7 +74,7 @@ public final class PaperCard implements Comparable, InventoryItemFro @Override public CardRules getRules() { - return this.card; + return this.rules; } @Override @@ -80,15 +82,11 @@ public final class PaperCard implements Comparable, InventoryItemFro return this.rarity; } - - - // @Override // public String getImageKey() { // return getImageLocator(getImageName(), getArtIndex(), true, false); // } - - + @Override public String getItemType() { return "Card"; @@ -100,7 +98,7 @@ public final class PaperCard implements Comparable, InventoryItemFro public static final Function FN_GET_RULES = new Function() { @Override public CardRules apply(final PaperCard from) { - return from.card; + return from.rules; } }; public static final Function FN_GET_NAME = new Function() { @@ -110,19 +108,20 @@ public final class PaperCard implements Comparable, InventoryItemFro } }; - public PaperCard(final CardRules c, final String edition0, final CardRarity rare, final int index) { - this(c, edition0, rare, index, false); + public PaperCard(final CardRules rules0, final String edition0, final CardRarity rarity0, final int artIndex0) { + this(rules0, edition0, rarity0, artIndex0, false); } - public PaperCard(final CardRules c, final String edition0, final CardRarity rare, final int index, final boolean foil) { - if ( edition0 == null || c == null || rare == null ) + public PaperCard(final CardRules rules0, final String edition0, final CardRarity rarity0, final int artIndex0, final boolean foil0) { + if (edition0 == null || rules0 == null || rarity0 == null) { throw new IllegalArgumentException("Cannot create card without rules, edition or rarity"); - this.card = c; - this.name = c.getName(); + } + this.rules = rules0; + this.name = rules0.getName(); this.edition = edition0; - this.artIndex = index; - this.foil = foil; - this.rarity = rare; + this.rarity = rarity0; + this.artIndex = artIndex0; + this.foil = foil0; } // Want this class to be a key for HashTable @@ -193,4 +192,10 @@ public final class PaperCard implements Comparable, InventoryItemFro // TODO compare sets properly return this.edition.compareTo(o.getEdition()); } + + public void updateRules(String script) { + CardRulesReader.updateCardRules(this.rules, script); + this.name = this.rules.getName(); + Card.updateCard(this); + } } diff --git a/forge-gui/src/test/java/forge/item/DeckHintsTest.java b/forge-gui/src/test/java/forge/item/DeckHintsTest.java index cd264a77d1b..a890b537f43 100644 --- a/forge-gui/src/test/java/forge/item/DeckHintsTest.java +++ b/forge-gui/src/test/java/forge/item/DeckHintsTest.java @@ -138,7 +138,7 @@ public class DeckHintsTest { crr.parseLine(line); } // Don't care what the actual set or rarity is here. - return new PaperCard(crr.getCard(), "M11", CardRarity.Common, 0); + return new PaperCard(crr.createCardRules(), "M11", CardRarity.Common, 0); } }