package net.sf.colossus.gui; import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import net.sf.colossus.game.Legion; import net.sf.colossus.guiutil.KDialog; import net.sf.colossus.guiutil.SaveWindow; import net.sf.colossus.variant.CreatureType; /** * Class AcquireAngel allows a player to acquire an angel or archangel. * * @author David Ripton */ final class AcquireAngel extends KDialog { private final List<Chit> chits = new ArrayList<Chit>(); private final ClientGUI gui; private final Legion legion; private final SaveWindow saveWindow; AcquireAngel(JFrame parentFrame, final ClientGUI clientGui, Legion legion, final List<CreatureType> recruits) { super(parentFrame, clientGui.getOwningPlayer().getName() + ": Acquire Angel in legion " + legion, false); this.gui = clientGui; this.legion = legion; addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { cleanup(null); } }); Container contentPane = getContentPane(); contentPane.setLayout(new FlowLayout()); setBackground(Color.lightGray); Iterator<CreatureType> it = recruits.iterator(); while (it.hasNext()) { final CreatureType creature = it.next(); Chit chit = Chit.newCreatureChit(4 * Scale.get(), creature); chits.add(chit); contentPane.add(chit); chit.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { cleanup(creature); } }); } JButton acquireButton = new JButton("Acquire"); contentPane.add(acquireButton); acquireButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (recruits.size() == 1) { cleanup(recruits.get(0)); } else { gui.showMessageDialogAndWait("Acquire which type?"); } } }); JButton cancelButton = new JButton("Cancel"); contentPane.add(cancelButton); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cleanup(null); } }); pack(); saveWindow = new SaveWindow(gui.getOptions(), "AcquireAngel"); Point location = saveWindow.loadLocation(); if (location == null) { centerOnScreen(); } else { setLocation(location); } setVisible(true); repaint(); } void cleanup(CreatureType angelType) { gui.getCallbackHandler().acquireAngelCallback(legion, angelType); saveWindow.saveLocation(getLocation()); dispose(); } }