package forge.quest.gui.bazaar;
import forge.AllZone;
import forge.gui.GuiUtils;
import forge.properties.NewConstants;
import forge.quest.data.QuestData;
import forge.quest.data.bazaar.QuestStallDefinition;
import forge.quest.data.bazaar.QuestStallManager;
import forge.quest.data.bazaar.QuestStallPurchasable;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.util.ArrayList;
/**
* <p>QuestBazaarStall class.</p>
*
* @author Forge
* @version $Id: $
*/
public class QuestBazaarStall extends JPanel implements NewConstants {
/** Constant <code>serialVersionUID=-4147745071116906043L</code> */
private static final long serialVersionUID = -4147745071116906043L;
String name;
String stallName;
String fluff;
ImageIcon icon;
private JLabel creditLabel = new JLabel();
private JPanel inventoryPanel = new JPanel();
protected QuestData questData = AllZone.getQuestData();
/**
* <p>Constructor for QuestBazaarStall.</p>
*
* @param name a {@link java.lang.String} object.
* @param stallName a {@link java.lang.String} object.
* @param iconName a {@link java.lang.String} object.
* @param fluff a {@link java.lang.String} object.
*/
protected QuestBazaarStall(String name, String stallName, String iconName, String fluff) {
this.name = name;
this.fluff = fluff;
this.icon = GuiUtils.getIconFromFile(iconName);
this.stallName = stallName;
initUI();
}
/**
* <p>Constructor for QuestBazaarStall.</p>
*
* @param definition a {@link forge.quest.data.bazaar.QuestStallDefinition} object.
*/
protected QuestBazaarStall(QuestStallDefinition definition) {
this.fluff = definition.fluff;
this.icon = GuiUtils.getIconFromFile(definition.iconName);
this.stallName = definition.displayName;
this.name = definition.name;
initUI();
}
/**
* <p>initUI.</p>
*/
private void initUI() {
this.removeAll();
JLabel stallNameLabel;
GridBagLayout layout = new GridBagLayout();
this.setLayout(layout);
stallNameLabel = new JLabel(stallName);
stallNameLabel.setFont(new Font("sserif", Font.BOLD, 22));
stallNameLabel.setHorizontalAlignment(SwingConstants.CENTER);
creditLabel.setText("Credits: " + questData.getCredits());
creditLabel.setFont(new Font("sserif", 0, 14));
JTextArea fluffArea = new JTextArea(fluff);
fluffArea.setFont(new Font("sserif", Font.ITALIC, 14));
fluffArea.setLineWrap(true);
fluffArea.setWrapStyleWord(true);
fluffArea.setOpaque(false);
fluffArea.setEditable(false);
fluffArea.setFocusable(false);
fluffArea.setPreferredSize(new Dimension(fluffArea.getPreferredSize().width, 40));
GridBagConstraints constraints = new GridBagConstraints(0,
0,
1,
1,
1,
0,
GridBagConstraints.CENTER,
GridBagConstraints.NONE,
new Insets(2, 2, 2, 2),
0,
0);
layout.setConstraints(stallNameLabel, constraints);
this.add(stallNameLabel);
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.WEST;
constraints.fill = GridBagConstraints.HORIZONTAL;
layout.setConstraints(fluffArea, constraints);
this.add(fluffArea);
constraints.gridy = 2;
layout.setConstraints(creditLabel, constraints);
this.add(creditLabel);
constraints.gridy = 3;
constraints.anchor = GridBagConstraints.NORTHWEST;
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(10, 5, 10, 5);
constraints.weighty = 1;
constraints.weightx = GridBagConstraints.REMAINDER;
populateInventory(populateItems());
JScrollPane scrollPane = new JScrollPane(inventoryPanel);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setBorder(new EmptyBorder(0, 0, 0, 0));
layout.setConstraints(scrollPane, constraints);
this.add(scrollPane);
this.setBorder(new EmptyBorder(0, 5, 0, 0));
}
/**
* <p>populateInventory.</p>
*
* @param stallItems a {@link java.util.List} object.
*/
private void populateInventory(java.util.List<QuestBazaarItem> stallItems) {
inventoryPanel.removeAll();
GridBagLayout innerLayout = new GridBagLayout();
inventoryPanel.setLayout(innerLayout);
GridBagConstraints innerConstraints =
new GridBagConstraints(0,
0,
1,
1,
1,
0,
GridBagConstraints.NORTHWEST,
GridBagConstraints.HORIZONTAL,
new Insets(2, 2, 2, 2),
0,
0);
JLabel purchaseLabel = new JLabel();
if (stallItems.size() == 0) {
purchaseLabel.setText("The merchant does not have anything useful for sale");
inventoryPanel.add(purchaseLabel);
innerConstraints.gridy++;
} else {
innerConstraints.insets = new Insets(5, 20, 5, 5);
for (QuestBazaarItem item : stallItems) {
JPanel itemPanel = item.getItemPanel();
innerLayout.setConstraints(itemPanel, innerConstraints);
inventoryPanel.add(itemPanel);
innerConstraints.gridy++;
}
}
innerConstraints.weighty = 1;
JLabel fillLabel = new JLabel();
innerLayout.setConstraints(fillLabel, innerConstraints);
inventoryPanel.add(fillLabel);
}
/**
* <p>populateItems.</p>
*
* @return a {@link java.util.List} object.
*/
protected java.util.List<QuestBazaarItem> populateItems() {
java.util.List<QuestBazaarItem> ret = new ArrayList<QuestBazaarItem>();
java.util.List<QuestStallPurchasable> purchasables = QuestStallManager.getItems(name);
for (QuestStallPurchasable purchasable : purchasables) {
ret.add(new QuestBazaarItem(purchasable));
}
return ret;
}
/**
* <p>getStallIcon.</p>
*
* @return a {@link javax.swing.ImageIcon} object.
*/
public ImageIcon getStallIcon() {
return icon;
}
/**
* <p>Getter for the field <code>stallName</code>.</p>
*
* @return a {@link java.lang.String} object.
*/
public String getStallName() {
return stallName;
}
/**
* <p>updateItems.</p>
*/
public void updateItems() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
populateInventory(populateItems());
creditLabel.setText("Credits: " + questData.getCredits());
inventoryPanel.invalidate();
inventoryPanel.repaint();
}
});
}
}