/** * 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.Image; import org.freecolandroid.repackaged.javax.swing.ImageIcon; 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.GameOptions; import net.sf.freecol.common.model.Goods; import net.sf.freecol.common.model.GoodsContainer; import net.sf.freecol.common.model.Location; import net.sf.freecol.common.model.Ownable; import net.sf.freecol.common.model.Player; import net.sf.freecol.common.resources.ResourceManager; /** * This label holds Goods data in addition to the JLabel data, which makes it * ideal to use for drag and drop purposes. */ public final class GoodsLabel extends AbstractGoodsLabel { /** * Initializes this JLabel with the given goods data. * * @param goods The Goods that this JLabel will visually represent. * @param parent The parent that knows more than we do. */ public GoodsLabel(Goods goods, GUI gui) { super(goods, gui); initializeDisplay(); } /** * Initializes the display that shows the goods. */ private void initializeDisplay() { Player player = null; Goods goods = getGoods(); Location location = goods.getLocation(); if (getAmount() < GoodsContainer.CARGO_SIZE) { setPartialChosen(true); } if (location instanceof Ownable) { player = ((Ownable) location).getOwner(); } if (player == null || !goods.getType().isStorable() || player.canTrade(goods) || (location instanceof Colony && player.getGame().getSpecification().getBoolean(GameOptions.CUSTOM_IGNORE_BOYCOTT) && ((Colony) location).hasAbility(Ability.EXPORT))) { setToolTipText(Messages.message(goods.getNameKey())); } else { setToolTipText(Messages.message(goods.getLabel(false))); setIcon(getDisabledIcon()); } if (!goods.getType().limitIgnored() && location instanceof Colony && ((Colony) location).getWarehouseCapacity() < goods.getAmount()) { setForeground(ResourceManager.getColor("goodsLabel.capacityExceeded.color")); } else if (location instanceof Colony && goods.getType().isStorable() && ((Colony) location).getExportData(goods.getType()).isExported()) { setForeground(ResourceManager.getColor("goodsLabel.exported.color")); } else if (goods.getAmount() == 0) { setForeground(ResourceManager.getColor("goodsLabel.zeroAmount.color")); } else if (goods.getAmount() < 0) { setForeground(ResourceManager.getColor("goodsLabel.negativeAmount.color")); } else { setForeground(ResourceManager.getColor("goodsLabel.positiveAmount.color")); } super.setText(String.valueOf(goods.getAmount())); } /** * Set whether only a partial amount is to be selected. * * @param partialChosen a <code>boolean</code> value */ @Override public void setPartialChosen(boolean partialChosen) { super.setPartialChosen(partialChosen); Image image = getGUI().getImageLibrary() .getGoodsImage(getType(), partialChosen ? 0.75f : 1f); setIcon(new ImageIcon(image)); } /** * Returns this GoodsLabel's goods data. * * @return This GoodsLabel's goods data. */ @Override public Goods getGoods() { return (Goods) super.getGoods(); } }