/branches/cleka_acquire_etc/Colossus/core/src/main/java/net/sf/colossus/client/PickRecruiter.java

# · Java · 143 lines · 115 code · 21 blank · 7 comment · 8 complexity · 4a5d9fe35fcd899f6ba9768d6c65bab8 MD5 · raw file

  1. package net.sf.colossus.client;
  2. import java.awt.Color;
  3. import java.awt.Container;
  4. import java.awt.Point;
  5. import java.awt.event.MouseEvent;
  6. import java.awt.event.MouseListener;
  7. import java.awt.event.WindowEvent;
  8. import java.awt.event.WindowListener;
  9. import java.util.ArrayList;
  10. import java.util.Iterator;
  11. import java.util.List;
  12. import javax.swing.BoxLayout;
  13. import javax.swing.JFrame;
  14. import javax.swing.JPanel;
  15. import net.sf.colossus.game.Legion;
  16. import net.sf.colossus.server.Constants;
  17. import net.sf.colossus.util.KDialog;
  18. /**
  19. * Class PickRecruiter allows a player to choose which creature(s) recruit.
  20. * @version $Id: PickRecruiter.java 3116 2008-01-24 11:25:10Z peterbecker $
  21. * @author David Ripton
  22. */
  23. final class PickRecruiter extends KDialog implements MouseListener,
  24. WindowListener
  25. {
  26. private final List<String> recruiters;
  27. private final List<Chit> recruiterChits = new ArrayList<Chit>();
  28. private final Marker legionMarker;
  29. private static String recruiterName;
  30. private final SaveWindow saveWindow;
  31. /** recruiters is a list of creature name strings */
  32. private PickRecruiter(JFrame parentFrame, List<String> recruiters,
  33. String hexDescription, Legion legion, Client client)
  34. {
  35. super(parentFrame, client.getOwningPlayer().getName()
  36. + ": Pick Recruiter in " + hexDescription, true);
  37. recruiterName = null;
  38. this.recruiters = recruiters;
  39. addMouseListener(this);
  40. addWindowListener(this);
  41. Container contentPane = getContentPane();
  42. contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
  43. setBackground(Color.lightGray);
  44. int scale = 4 * Scale.get();
  45. JPanel legionPane = new JPanel();
  46. contentPane.add(legionPane);
  47. legionMarker = new Marker(scale, legion.getMarkerId());
  48. legionPane.add(legionMarker);
  49. List<String> imageNames = client.getLegionImageNames(legion);
  50. Iterator<String> it = imageNames.iterator();
  51. while (it.hasNext())
  52. {
  53. String imageName = it.next();
  54. Chit chit = new Chit(scale, imageName);
  55. legionPane.add(chit);
  56. }
  57. JPanel recruiterPane = new JPanel();
  58. contentPane.add(recruiterPane);
  59. int i = 0;
  60. it = recruiters.iterator();
  61. while (it.hasNext())
  62. {
  63. String recruiterName = it.next();
  64. if (recruiterName.equals(Constants.titan))
  65. {
  66. recruiterName = ((LegionClientSide)legion).getTitanBasename();
  67. }
  68. Chit chit = new Chit(scale, recruiterName);
  69. recruiterChits.add(chit);
  70. recruiterPane.add(chit);
  71. chit.addMouseListener(this);
  72. i++;
  73. }
  74. pack();
  75. saveWindow = new SaveWindow(client.getOptions(), "PickRecruiter");
  76. Point location = saveWindow.loadLocation();
  77. if (location == null)
  78. {
  79. centerOnScreen();
  80. }
  81. else
  82. {
  83. setLocation(location);
  84. }
  85. setVisible(true);
  86. repaint();
  87. }
  88. static String pickRecruiter(JFrame parentFrame, List<String> recruiters,
  89. String hexDescription, Legion legion, Client client)
  90. {
  91. new PickRecruiter(parentFrame, recruiters, hexDescription, legion,
  92. client);
  93. return recruiterName;
  94. }
  95. @Override
  96. public void mousePressed(MouseEvent e)
  97. {
  98. Object source = e.getSource();
  99. int i = recruiterChits.indexOf(source);
  100. if (i != -1)
  101. {
  102. recruiterName = recruiters.get(i);
  103. if (recruiterName.startsWith(Constants.titan))
  104. {
  105. recruiterName = Constants.titan;
  106. }
  107. // Then exit.
  108. dispose();
  109. }
  110. }
  111. @Override
  112. public void windowClosing(WindowEvent e)
  113. {
  114. dispose();
  115. }
  116. @Override
  117. public void dispose()
  118. {
  119. saveWindow.saveLocation(getLocation());
  120. super.dispose();
  121. }
  122. }