/**
* 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.JButton;
import org.freecolandroid.repackaged.javax.swing.JPanel;
import net.sf.freecol.client.FreeColClient;
import net.sf.freecol.client.gui.Canvas;
import net.sf.freecol.client.gui.GUI;
import net.sf.freecol.client.gui.action.ActionManager;
import net.sf.freecol.common.resources.ResourceManager;
import net.miginfocom.swing.MigLayout;
/**
* A collection of panels and buttons that are used to provide
* the user with a more detailed view of certain elements on the
* map and also to provide a means of input in case the user
* can't use the keyboard.
*
* The MapControls are useless by themselves, this object needs to
* be placed on a JComponent in order to be usable.
*/
public final class ClassicMapControls extends MapControls {
private JPanel panel;
private Font arrowFont;
private ActionManager am;
/**
* The basic constructor.
* @param freeColClient The main controller object for the client
* @param gui
*/
public ClassicMapControls(final FreeColClient freeColClient, GUI gui) {
super(freeColClient, gui, false);
am = freeColClient.getActionManager();
arrowFont = ResourceManager.getFont("SimpleFont", Font.BOLD, 24f);
panel = new JPanel(new MigLayout("wrap 3"));
MiniMap miniMap = getMiniMap();
panel.add(miniMap, "span, width " + miniMap.getWidth()
+ ", height " + miniMap.getHeight());
panel.add(makeButton("NW", "\u2196"), "newline 20");
panel.add(makeButton("N", "\u2191"));
panel.add(makeButton("NE", "\u2197"));
panel.add(makeButton("W", "\u2190"));
panel.add(makeButton("E", "\u2192"), "skip");
panel.add(makeButton("SW", "\u2199"));
panel.add(makeButton("S", "\u2193"));
panel.add(makeButton("SE", "\u2198"), "wrap 20");
for (UnitButton button : getUnitButtons()) {
panel.add(button);
}
InfoPanel infoPanel = getInfoPanel();
panel.add(infoPanel, "newline push, span, width " + infoPanel.getWidth()
+ ", height " + infoPanel.getHeight());
}
private JButton makeButton(String direction, String arrow) {
JButton button = new JButton(am.getFreeColAction("moveAction." + direction));
button.setFont(arrowFont);
button.setText(arrow);
return button;
}
public boolean isShowing() {
return panel.getParent() != null;
}
/**
* Adds the map controls to the given component.
* @param component The component to add the map controls to.
*/
public void addToComponent(Canvas component) {
if (getFreeColClient().getGame() == null
|| getFreeColClient().getGame().getMap() == null) {
return;
}
int width = (int) panel.getPreferredSize().getWidth();
panel.setSize(width, component.getHeight());
panel.setLocation(component.getWidth() - width, 0);
component.add(panel, CONTROLS_LAYER, false);
}
/**
* Removes the map controls from the parent canvas component.
*
* @param canvas <code>Canvas</code> parent
*/
public void removeFromComponent(Canvas canvas) {
canvas.remove(panel, false);
}
}