/**
* 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.awt.event.ActionListener;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
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.Ability;
import net.sf.freecol.common.model.Colony;
import net.sf.freecol.common.model.Location;
import net.sf.freecol.common.model.TypeCountMap;
import net.sf.freecol.common.model.UnitType;
import net.sf.freecol.common.model.Unit.Role;
/**
* This panel displays the Labour Report.
*/
public final class ReportLabourDetailPanel extends ReportPanel implements ActionListener {
private Map<UnitType, Map<Location, Integer>> data;
private TypeCountMap<UnitType> unitCount;
private List<Colony> colonies;
private UnitType unitType;
/**
* Creates the detail portion of a labour report.
*
* @param freeColClient The <code>FreeColClient</code> for the game.
* @param gui The <code>GUI</code> to display on.
* @param unitType The <code>UnitType</code> to display detail for.
* @param data The location data.
* @param unitCount The unit counts by type.
* @param colonies A list of <code>Colony</code>s for this player.
*/
public ReportLabourDetailPanel(FreeColClient freeColClient, GUI gui,
UnitType unitType,
Map<UnitType, Map<Location, Integer>> data,
TypeCountMap<UnitType> unitCount,
List<Colony> colonies) {
super(freeColClient, gui, Messages.message("report.labour.details"));
this.unitType = unitType;
this.data = data;
this.unitCount = unitCount;
this.colonies = colonies;
}
public void initialize() {
JPanel detailPanel = new JPanel(new MigLayout("wrap 7", "[]30[][]30[][]30[][]", ""));
detailPanel.setOpaque(false);
Role role = Role.DEFAULT;
if (unitType.hasAbility(Ability.EXPERT_PIONEER)) {
role = Role.PIONEER;
} else if (unitType.hasAbility(Ability.EXPERT_MISSIONARY)) {
role = Role.MISSIONARY;
}
// summary
detailPanel.add(new JLabel(getLibrary().getUnitImageIcon(unitType, role)), "spany");
detailPanel.add(localizedLabel(unitType.getNameKey()));
detailPanel.add(new JLabel(String.valueOf(unitCount.getCount(unitType))), "wrap 10");
boolean canTrain = false;
Map<Location, Integer> unitLocations = data.get(unitType);
for (Colony colony : colonies) {
if (unitLocations.get(colony) != null) {
String colonyName = colony.getName();
if (colony.canTrain(unitType)) {
canTrain = true;
colonyName += "*";
}
JButton colonyButton = getLinkButton(colonyName, null, colony.getId());
colonyButton.addActionListener(this);
detailPanel.add(colonyButton);
JLabel countLabel = new JLabel(unitLocations.get(colony).toString());
countLabel.setForeground(LINK_COLOR);
detailPanel.add(countLabel);
}
}
for (Entry<Location, Integer> entry : unitLocations.entrySet()) {
if (!(entry.getKey() instanceof Colony)) {
String locationName = Messages.message(entry.getKey().getLocationName());
JButton linkButton = getLinkButton(locationName, null, entry.getKey().getId());
linkButton.addActionListener(this);
detailPanel.add(linkButton);
JLabel countLabel = new JLabel(entry.getValue().toString());
countLabel.setForeground(LINK_COLOR);
detailPanel.add(countLabel);
}
}
if (canTrain) {
detailPanel.add(new JLabel(Messages.message("report.labour.canTrain")),
"newline 20, span");
}
reportPanel.add(detailPanel);
}
}