/** * Copyright (C) 2002-2012 The FreeCol Team * * This file is part of FreeCol. * * FreeCol is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * FreeCol is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with FreeCol. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.freecol.client.gui.panel; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.logging.Logger; import org.freecolandroid.repackaged.java.awt.event.ActionEvent; import org.freecolandroid.repackaged.java.awt.event.ActionListener; import org.freecolandroid.repackaged.javax.swing.ImageIcon; import org.freecolandroid.repackaged.javax.swing.JButton; import org.freecolandroid.repackaged.javax.swing.JLabel; import net.miginfocom.swing.MigLayout; import net.sf.freecol.client.FreeColClient; import net.sf.freecol.client.gui.GUI; import net.sf.freecol.client.gui.i18n.Messages; import net.sf.freecol.common.model.Europe; import net.sf.freecol.common.model.Player; import net.sf.freecol.common.model.StringTemplate; import net.sf.freecol.common.model.Unit.Role; import net.sf.freecol.common.model.UnitType; /** * The panel that allows a user to train people in Europe. */ public final class TrainDialog extends FreeColDialog<Integer> implements ActionListener { @SuppressWarnings("unused") private static final Logger logger = Logger.getLogger(TrainDialog.class.getName()); private final JLabel question; private final List<UnitType> trainableUnits = new ArrayList<UnitType>(); private final Comparator<UnitType> unitPriceComparator; /** * The constructor to use. * @param freeColClient */ public TrainDialog(FreeColClient freeColClient, GUI gui, EuropePanel.EuropeAction europeAction) { super(freeColClient, gui); okButton.setText(Messages.message("trainDialog.done")); final Europe europe = getMyPlayer().getEurope(); unitPriceComparator = new Comparator<UnitType>() { public int compare(final UnitType type1, final UnitType type2) { return (europe.getUnitPrice(type1) - europe.getUnitPrice(type2)); } }; switch(europeAction) { case TRAIN: trainableUnits.addAll(getSpecification().getUnitTypesTrainedInEurope()); question = new JLabel(Messages.message("trainDialog.clickOn")); setLayout(new MigLayout("wrap 3", "[sg]", "")); break; case PURCHASE: default: trainableUnits.addAll(getSpecification().getUnitTypesPurchasedInEurope()); question = new JLabel(Messages.message("purchaseDialog.clickOn")); setLayout(new MigLayout("wrap 2", "[sg]", "")); } } /** * Updates this panel's labels so that the information it displays is up to * date. */ public void initialize() { removeAll(); add(question, "span, wrap 20"); final Player player = getMyPlayer(); final Europe europe = player.getEurope(); // price may have changed Collections.sort(trainableUnits, unitPriceComparator); for (UnitType unitType : trainableUnits) { int price = europe.getUnitPrice(unitType); JButton newButton = new JButton(); newButton.setLayout(new MigLayout("wrap 2", "[60]", "[30][30]")); ImageIcon unitIcon = getLibrary().getUnitImageIcon(unitType, Role.DEFAULT, !player.checkGold(price), 0.66); JLabel unitName = localizedLabel(unitType.getNameKey()); JLabel unitPrice = localizedLabel(StringTemplate.template("goldAmount") .addAmount("%amount%", price)); if (!player.checkGold(price)) { unitName.setEnabled(false); unitPrice.setEnabled(false); newButton.setEnabled(false); } newButton.add(new JLabel(unitIcon), "span 1 2"); newButton.add(unitName); newButton.add(unitPrice); newButton.setActionCommand(unitType.getId()); newButton.addActionListener(this); enterPressesWhenFocused(newButton); add(newButton, "grow"); } add(okButton, "newline 20, span, tag ok"); setSize(getPreferredSize()); revalidate(); } /** * Analyzes an event and calls the right external methods to take care of * the user's request. * * @param event The incoming action event */ public void actionPerformed(ActionEvent event) { String command = event.getActionCommand(); if (OK.equals(command)) { setResponse(new Integer(-1)); } else { UnitType unitType = getSpecification().getUnitType(command); getController().trainUnitInEurope(unitType); initialize(); } } }