package forge.quest.gui.bazaar;
import forge.quest.data.bazaar.QuestStallManager;
import forge.quest.gui.QuestAbstractPanel;
import forge.quest.gui.QuestFrame;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* <p>QuestBazaarPanel class.</p>
*
* @author Forge
* @version $Id: $
*/
public class QuestBazaarPanel extends QuestAbstractPanel {
/** Constant <code>serialVersionUID=1418913010051869222L</code> */
private static final long serialVersionUID = 1418913010051869222L;
/** Constant <code>stallList</code> */
static List<QuestBazaarStall> stallList = new ArrayList<QuestBazaarStall>();
JPanel buttonPanel = new JPanel(new BorderLayout());
JPanel buttonPanelMain = new JPanel();
JPanel stallPanel = new JPanel();
JToggleButton selectedStall = null;
CardLayout stallLayout = new CardLayout();
/**
* <p>Constructor for QuestBazaarPanel.</p>
*
* @param mainFrame a {@link forge.quest.gui.QuestFrame} object.
*/
public QuestBazaarPanel(QuestFrame mainFrame) {
super(mainFrame);
this.setLayout(new BorderLayout());
stallList = new ArrayList<QuestBazaarStall>();
for (String stallName : QuestStallManager.getStallNames()) {
stallList.add(new QuestBazaarStall(QuestStallManager.getStall(stallName)));
}
buttonPanelMain.setLayout(new GridLayout(stallList.size(), 1));
stallPanel.setLayout(stallLayout);
List<JToggleButton> buttonList = new LinkedList<JToggleButton>();
double maxWidth = 0;
double maxHeight = 0;
for (QuestBazaarStall stall : stallList) {
JToggleButton stallButton = new JToggleButton(stall.getStallName(), stall.getStallIcon());
stallButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (QuestBazaarPanel.this.selectedStall == e.getSource()) {
QuestBazaarPanel.this.selectedStall.setSelected(true);
return;
}
if (QuestBazaarPanel.this.selectedStall != null) {
QuestBazaarPanel.this.selectedStall.setSelected(false);
}
QuestBazaarPanel.this.showStall(((JToggleButton) e.getSource()).getText());
QuestBazaarPanel.this.selectedStall = (JToggleButton) e.getSource();
}
});
Dimension preferredSize = stallButton.getPreferredSize();
if (preferredSize.getWidth() > maxWidth) {
maxWidth = preferredSize.getWidth();
}
if (preferredSize.getHeight() > maxHeight) {
maxHeight = preferredSize.getHeight();
}
buttonList.add(stallButton);
buttonPanelMain.add(stallButton);
stallPanel.add(stall, stall.getStallName());
}
buttonList.get(0).setSelected(true);
this.selectedStall = buttonList.get(0);
Dimension max = new Dimension((int) maxWidth, (int) maxHeight);
for (JToggleButton button : buttonList) {
button.setMinimumSize(max);
}
buttonPanel.add(buttonPanelMain, BorderLayout.NORTH);
JButton quitButton = new JButton("Leave Bazaar");
quitButton.setSize(max);
quitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
QuestBazaarPanel.this.mainFrame.showMainPane();
}
});
buttonPanel.add(quitButton, BorderLayout.SOUTH);
this.add(buttonPanel, BorderLayout.WEST);
this.add(stallPanel, BorderLayout.CENTER);
}
/**
* <p>showStall.</p>
*
* @param source a {@link java.lang.String} object.
*/
private void showStall(String source) {
stallLayout.show(stallPanel, source);
}
/**
* Slightly hackish, but should work.
*/
static void refreshLastInstance() {
for (QuestBazaarStall stall : stallList) {
stall.updateItems();
}
}
/** {@inheritDoc} */
@Override
public void refreshState() {
refreshLastInstance();
}
}