From 217a95e21e7daae0af6be9a0e868d4bcb9318ead Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Mon, 30 Jan 2012 20:07:34 +0000 Subject: [PATCH] Added some descriptions for non-card items in the quest shop --- src/main/java/forge/card/CardSet.java | 4 ++ .../forge/gui/deckeditor/CardPanelLite.java | 37 +++++++++++++++++++ src/main/java/forge/item/ItemPoolView.java | 11 ++++++ src/main/java/forge/item/PreconDeck.java | 14 ++++++- 4 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/main/java/forge/card/CardSet.java b/src/main/java/forge/card/CardSet.java index 26a7a2c15b2..f09314d457a 100644 --- a/src/main/java/forge/card/CardSet.java +++ b/src/main/java/forge/card/CardSet.java @@ -320,6 +320,10 @@ public final class CardSet implements Comparable { // immutable return this.nLand; } + public final int getTotal() { + return nCommon + nUncommon + nRare + nSpecial + nDoubleFaced + nLand; + } + /** * Gets the foil chance. * diff --git a/src/main/java/forge/gui/deckeditor/CardPanelLite.java b/src/main/java/forge/gui/deckeditor/CardPanelLite.java index b21e1344a0c..9785ffefda0 100644 --- a/src/main/java/forge/gui/deckeditor/CardPanelLite.java +++ b/src/main/java/forge/gui/deckeditor/CardPanelLite.java @@ -17,17 +17,27 @@ */ package forge.gui.deckeditor; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JScrollPane; +import javax.swing.ScrollPaneConstants; + +import org.apache.commons.lang3.StringUtils; import net.miginfocom.swing.MigLayout; import forge.Card; +import forge.SetUtils; +import forge.card.CardSet; import forge.gui.game.CardDetailPanel; import forge.gui.game.CardPicturePanel; +import forge.item.BoosterPack; import forge.item.CardPrinted; import forge.item.InventoryItem; +import forge.item.PreconDeck; /** * This panel is to be placed in the right part of a deck editor. @@ -42,6 +52,8 @@ public class CardPanelLite extends CardPanelBase { private final CardDetailPanel detail = new CardDetailPanel(null); private final CardPicturePanel picture = new CardPicturePanel(null); private final JButton bChangeState = new JButton(); + private final JLabel descLabel = new JLabel(); + private final JScrollPane description; /** * @@ -57,12 +69,19 @@ public class CardPanelLite extends CardPanelBase { }); this.bChangeState.setFont(new java.awt.Font("Dialog", 0, 10)); + description = new JScrollPane( descLabel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ); + descLabel.setSize(descLabel.getWidth() - description.getVerticalScrollBar().getWidth(), descLabel.getHeight()); + this.setLayout(new MigLayout("fill, ins 0")); this.add(this.detail, "w 239, h 303, grow, flowy, wrap"); + this.add(this.description, "w 239, h 303, grow, flowy, wrap"); this.add(this.bChangeState, "align 50% 0%, wrap"); this.add(this.picture, "wmin 239, hmin 323, grow"); } + private static Dimension shrinkedComponent = new Dimension(239, 0); + private static Dimension expandedComponent = new Dimension(239, 303); + /** * * ShowCard. @@ -75,6 +94,9 @@ public class CardPanelLite extends CardPanelBase { this.picture.setCard(card); final boolean isCard = (card != null) && (card instanceof CardPrinted); this.detail.setVisible(isCard); + this.description.setVisible(!isCard); + description.setMaximumSize(isCard ? shrinkedComponent : expandedComponent); + detail.setMaximumSize(!isCard ? shrinkedComponent : expandedComponent); if (isCard) { final Card toSet = ((CardPrinted) card).toForgeCard(); @@ -87,6 +109,21 @@ public class CardPanelLite extends CardPanelBase { this.bChangeState.setText("Transform"); } } + } else { + if( card instanceof BoosterPack ) + { + BoosterPack booster = (BoosterPack) card; + CardSet set = SetUtils.getSetByCodeOrThrow(booster.getSet()); + String tpl = "%s booster pack.
Contains %d cards.

Buy it to reveal the cards and add them to your inventory."; + descLabel.setText(String.format(tpl, set.getName(), set.getBoosterData().getTotal())); + } else if ( card instanceof PreconDeck ) + { + PreconDeck deck = (PreconDeck) card; + String desc = deck.getDescription(); + String tpl = "
%s
%s

This deck contains the following cards:
%s"; + String decklist = StringUtils.join( deck.getDeck().getMain().toItemListString(), "
"); + descLabel.setText(String.format(tpl, deck.getName(), desc, decklist )); + } } } diff --git a/src/main/java/forge/item/ItemPoolView.java b/src/main/java/forge/item/ItemPoolView.java index e91f7f84726..e4ae1e53be4 100644 --- a/src/main/java/forge/item/ItemPoolView.java +++ b/src/main/java/forge/item/ItemPoolView.java @@ -24,6 +24,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import org.apache.commons.lang3.StringUtils; + import net.slightlymagic.braids.util.lambda.Lambda1; import forge.CardList; import forge.card.CardRules; @@ -334,4 +336,13 @@ public class ItemPoolView implements Iterable> getFnToPrinted() { return this.fnToPrinted; } + + + public Iterable toItemListString() { + List list = new ArrayList(); + for(Entry e : cards.entrySet()) { + list.add(String.format("%d x %s", e.getValue(), e.getKey().getName())); + } + return list; + } } diff --git a/src/main/java/forge/item/PreconDeck.java b/src/main/java/forge/item/PreconDeck.java index 9eeaa3206a1..5d89fe7df54 100644 --- a/src/main/java/forge/item/PreconDeck.java +++ b/src/main/java/forge/item/PreconDeck.java @@ -37,6 +37,8 @@ public class PreconDeck implements InventoryItemFromSet { private final Deck deck; private final String imageFilename; private final String set; + private final String description; + private final SellRules recommendedDeals; /* (non-Javadoc) @@ -77,6 +79,7 @@ public class PreconDeck implements InventoryItemFromSet { String filenameProxy = null; String setProxy = "n/a"; + String descriptionProxy = ""; List metadata = sections.get("metadata"); if (null != metadata && !metadata.isEmpty()) { for (String s : metadata) { @@ -84,14 +87,18 @@ public class PreconDeck implements InventoryItemFromSet { if ("Image".equalsIgnoreCase(kv[0])) { filenameProxy = kv[1]; } - if ("set".equalsIgnoreCase(kv[0]) && SetUtils.getSetByCode(kv[1].toUpperCase()) != null) { + else if ("set".equalsIgnoreCase(kv[0]) && SetUtils.getSetByCode(kv[1].toUpperCase()) != null) { setProxy = kv[1]; } + else if ("description".equalsIgnoreCase(kv[0]) && SetUtils.getSetByCode(kv[1].toUpperCase()) != null) { + descriptionProxy = kv[1]; + } } } imageFilename = filenameProxy; set = setProxy; recommendedDeals = new SellRules(sections.get("shop")); + description = descriptionProxy; } @@ -121,4 +128,9 @@ public class PreconDeck implements InventoryItemFromSet { public String getSet() { return set; } + + public final String getDescription() { + return description; + } + }