package net.sf.colossus.gui;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import net.sf.colossus.common.Constants;
import net.sf.colossus.game.Legion;
import net.sf.colossus.guiutil.KDialog;
import net.sf.colossus.guiutil.SaveWindow;
/**
* Class PickRecruiter allows a player to choose which creature(s) recruit.
*
* @author David Ripton
*/
final class PickRecruiter extends KDialog
{
private final List<Chit> recruiterChits = new ArrayList<Chit>();
private final Marker legionMarker;
private String recruiterName;
private final SaveWindow saveWindow;
/** recruiters is a list of creature name strings */
private PickRecruiter(JFrame parentFrame, List<String> recruiters,
String hexDescription, Legion legion, ClientGUI gui)
{
super(parentFrame, gui.getOwningPlayer().getName()
+ ": Pick Recruiter in " + hexDescription, true);
recruiterName = null;
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
setBackground(Color.lightGray);
int scale = 4 * Scale.get();
JLabel label = new JLabel(
" There is more than one way you can recruit this.");
label.setAlignmentX(FlowLayout.LEADING);
contentPane.add(Box.createRigidArea(new Dimension(0, scale / 4)));
contentPane.add(label);
contentPane.add(Box.createRigidArea(new Dimension(0, scale / 4)));
JPanel legionPane = new JPanel();
String legionId = legion.getMarkerId();
String text = "Current content of legion " + legionId + ":";
legionPane.setBorder(BorderFactory.createTitledBorder(text));
legionMarker = new Marker(legion, scale, legion.getLongMarkerId());
legionPane.add(legionMarker);
List<String> imageNames = gui.getGameClientSide().getLegionImageNames(
legion);
Iterator<String> it = imageNames.iterator();
while (it.hasNext())
{
String imageName = it.next();
Chit chit = Chit.newCreatureChit(scale, imageName);
legionPane.add(chit);
}
contentPane.add(legionPane);
contentPane.add(Box.createRigidArea(new Dimension(0, scale / 4)));
JLabel label2 = new JLabel(
" Pick the creature type you want to reveal: ");
label2.setAlignmentX(FlowLayout.LEADING);
contentPane.add(label2);
JPanel recruiterPane = new JPanel();
contentPane.add(recruiterPane);
for (String potentialRecruiterName : recruiters)
{
if (potentialRecruiterName.equals(Constants.titan))
{
potentialRecruiterName = legion.getPlayer().getTitanBasename();
}
else if (potentialRecruiterName.equals(Constants.angel))
{
potentialRecruiterName = legion.getPlayer().getAngelBasename();
}
final String realRecruiterName = potentialRecruiterName;
Chit chit = Chit.newCreatureChit(scale, realRecruiterName);
recruiterChits.add(chit);
recruiterPane.add(chit);
chit.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
recruiterName = realRecruiterName;
if (recruiterName.startsWith(Constants.titan))
{
recruiterName = Constants.titan;
}
// Then exit.
dispose();
}
});
}
pack();
saveWindow = new SaveWindow(gui.getOptions(), "PickRecruiter");
Point location = saveWindow.loadLocation();
if (location == null)
{
centerOnScreen();
}
else
{
setLocation(location);
}
setVisible(true);
repaint();
}
private String getRecruiterName()
{
return recruiterName;
}
static String pickRecruiter(JFrame parentFrame, List<String> recruiters,
String hexDescription, Legion legion, ClientGUI gui)
{
PickRecruiter pr = new PickRecruiter(parentFrame, recruiters,
hexDescription, legion, gui);
return pr.getRecruiterName();
}
}