UnitsPanel.java

package org.microcol.gui;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

import org.microcol.gui.event.StatusBarMessageController;
import org.microcol.gui.event.StatusBarMessageEvent;
import org.microcol.model.Ship;

import com.google.common.base.Preconditions;
import com.google.inject.Inject;

/**
 * Display one unit description.
 *
 */
public class UnitsPanel extends JPanel implements Localized {

	/**
	 * Default serialVersionUID.
	 */
	private static final long serialVersionUID = 1L;

	private final ImageProvider imageProvider;

	private final LocalizationHelper localizationHelper;

	@Inject
	public UnitsPanel(final ImageProvider imageProvider, final StatusBarMessageController statusBarMessageController,
			final LocalizationHelper localizationHelper) {
		this.imageProvider = Preconditions.checkNotNull(imageProvider);
		this.localizationHelper = Preconditions.checkNotNull(localizationHelper);
		this.setLayout(new GridBagLayout());
		addMouseListener(new MouseAdapter() {
			@Override
			public void mouseEntered(final MouseEvent e) {
				statusBarMessageController
						.fireEvent(new StatusBarMessageEvent(getText().get("unitsPanel.description")));
			}
		});
	}

	public void clear() {
		removeAll();
	}

	public void setUnits(final List<Ship> units) {
		int i = 0;
		for (final Ship u : units) {
			Ship s = (Ship) u;
			add(new JLabel(new ImageIcon(imageProvider.getShipImage(s.getType()))), new GridBagConstraints(0, i, 1, 2,
					0D, 0D, GridBagConstraints.NORTH, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
			final StringBuilder sb = new StringBuilder(200);
			sb.append("<html><div>");
			sb.append(localizationHelper.getShipName(s.getType()));
			sb.append("</div><div>");
			sb.append(getText().get("unitsPanel.availableMoved"));
			sb.append(" ");
			sb.append(s.getAvailableMoves());
			sb.append("</div><div>");
			sb.append(getText().get("unitsPanel.owner"));
			sb.append(" ");
			sb.append(s.getOwner().getName());
			sb.append("</div></html>");
			add(new JLabel(sb.toString()), new GridBagConstraints(1, i, 1, 1, 1D, 0D, GridBagConstraints.NORTHWEST,
					GridBagConstraints.VERTICAL, new Insets(0, 0, 0, 0), 0, 0));
			i += 1;
		}
		add(new JLabel(""), new GridBagConstraints(1, i + 1, 2, 1, 1D, 1D, GridBagConstraints.NORTH,
				GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
		validate();
	}

}