/** * 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 org.freecolandroid.repackaged.java.awt.Font; import org.freecolandroid.repackaged.javax.swing.ImageIcon; import org.freecolandroid.repackaged.javax.swing.JLabel; import org.freecolandroid.repackaged.javax.swing.JToolTip; 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.AbstractGoods; import net.sf.freecol.common.model.Building; import net.sf.freecol.common.model.GoodsType; import net.sf.freecol.common.model.ProductionInfo; import net.sf.freecol.common.model.StringTemplate; import net.sf.freecol.common.model.Unit; import net.sf.freecol.common.resources.ResourceManager; /** * This panel represents a single building in a Colony. */ public class BuildingToolTip extends JToolTip { private static final JLabel arrow = new JLabel("\u2192"); static { arrow.setFont(ResourceManager.getFont("SimpleFont", Font.BOLD, 24f)); } private GUI gui; /** * Creates this BuildingToolTip. * * @param freeColClient * @param building The building to display information from. * @param parent a <code>Canvas</code> value */ public BuildingToolTip(FreeColClient freeColClient, Building building, GUI gui) { this.gui = gui; int workplaces = building.getUnitCapacity(); String columns = "[align center]"; for (int index = 0; index < workplaces; index++) { columns += "20[]5[]"; } MigLayout layout = new MigLayout("fill, insets 20, wrap " + (2 * workplaces + 1), columns, "[][][align bottom]"); setLayout(layout); JLabel buildingName = new JLabel(Messages.message(building.getNameKey())); buildingName.setFont(ResourceManager.getFont("SimpleFont", Font.BOLD, 16f)); add(buildingName, "span"); ProductionInfo info = building.getProductionInfo(); if (info == null || info.getProduction().isEmpty()) { add(new JLabel(), "span"); } else { AbstractGoods production = info.getProduction().get(0); AbstractGoods maximumProduction = info.getMaximumProduction().isEmpty() ? production : info.getMaximumProduction().get(0); ProductionLabel productionOutput = new ProductionLabel(freeColClient, gui, production, maximumProduction); if (info.getConsumption().isEmpty()) { add(productionOutput, "span"); } else { AbstractGoods consumption = info.getConsumption().get(0); if (consumption.getAmount() > 0) { AbstractGoods maximumConsumption = info.getMaximumConsumption().isEmpty() ? consumption: info.getMaximumConsumption().get(0); ProductionLabel productionInput = new ProductionLabel(freeColClient, gui, consumption, maximumConsumption); add(productionInput, "span, split 3"); add(arrow); add(productionOutput); } else { add(new JLabel(gui.getImageLibrary().getGoodsImageIcon(consumption.getType())), "span, split 3"); add(arrow); add(new JLabel(gui.getImageLibrary().getGoodsImageIcon(production.getType()))); } } } add(new JLabel(new ImageIcon(ResourceManager.getImage(building.getType().getId() + ".image")))); for (Unit unit : building.getUnitList()) { UnitLabel unitLabel = new UnitLabel(freeColClient, unit, gui, false); if (building.canTeach() && unit.getStudent() != null) { JLabel progress = new JLabel(unit.getTurnsOfTraining() + "/" + unit.getNeededTurnsOfTraining()); UnitLabel studentLabel = new UnitLabel(freeColClient, unit.getStudent(), gui, true); studentLabel.setIgnoreLocation(true); add(unitLabel); add(progress, "split 2, flowy"); add(studentLabel); } else { add(unitLabel, "span 2"); } } int diff = building.getUnitCapacity() - building.getUnitCount(); for (int index = 0; index < diff; index++) { add(new JLabel(new ImageIcon(ResourceManager.getImage("placeholder.image"))), "span 2"); } GoodsType output = building.getGoodsOutputType(); int breedingNumber = (output == null) ? GoodsType.INFINITY : output.getBreedingNumber(); if (breedingNumber < GoodsType.INFINITY && breedingNumber > building.getColony().getGoodsCount(output)) { StringTemplate t = StringTemplate.template("buildingToolTip.breeding") .addAmount("%number%", breedingNumber) .add("%goods%", output.getNameKey()); add(new JLabel(Messages.message(t))); } setPreferredSize(layout.preferredLayoutSize(this)); } }