mirror of https://github.com/FreeCol/freecol.git
161 lines
5.4 KiB
Java
161 lines
5.4 KiB
Java
/**
|
|
* Copyright (C) 2002-2022 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.Component;
|
|
import java.awt.Dimension;
|
|
import java.awt.Font;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
import javax.swing.JButton;
|
|
import javax.swing.JPanel;
|
|
|
|
import net.miginfocom.swing.MigLayout;
|
|
|
|
import net.sf.freecol.client.FreeColClient;
|
|
import net.sf.freecol.client.gui.action.ActionManager;
|
|
import net.sf.freecol.client.gui.ImageLibrary;
|
|
import net.sf.freecol.common.resources.ResourceManager;
|
|
import static net.sf.freecol.common.util.StringUtils.*;
|
|
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
public final class ClassicMapControls extends MapControls {
|
|
|
|
/** The main panel. */
|
|
private final JPanel panel;
|
|
|
|
/** A font for the buttons. */
|
|
private final Font arrowFont;
|
|
|
|
/** Helper container for the abstract API functions. */
|
|
private final List<Component> componentList = new ArrayList<>();
|
|
|
|
|
|
/**
|
|
* The basic constructor.
|
|
*
|
|
* @param freeColClient The {@code FreeColClient} for the game.
|
|
*/
|
|
public ClassicMapControls(final FreeColClient freeColClient) {
|
|
super(freeColClient, false);
|
|
|
|
final ImageLibrary lib = freeColClient.getGUI().getFixedImageLibrary();
|
|
|
|
this.panel = new MigPanel(new MigLayout("wrap 3"));
|
|
this.panel.add(this.miniMap, "span"
|
|
+ ", width " + lib.scaleInt(MINI_MAP_WIDTH)
|
|
+ ", height " + lib.scaleInt(MINI_MAP_HEIGHT));
|
|
this.panel.add(this.miniMapZoomInButton, "newline 10");
|
|
this.panel.add(this.miniMapZoomOutButton, "skip");
|
|
|
|
String[] arrows = {
|
|
ResourceManager.getString("arrow.NW"),
|
|
ResourceManager.getString("arrow.N"),
|
|
ResourceManager.getString("arrow.NE"),
|
|
ResourceManager.getString("arrow.W"),
|
|
ResourceManager.getString("arrow.E"),
|
|
ResourceManager.getString("arrow.SW"),
|
|
ResourceManager.getString("arrow.S"),
|
|
ResourceManager.getString("arrow.SE"),
|
|
};
|
|
|
|
this.arrowFont = lib.getScaledFont("simple-bold-small",
|
|
join("", arrows));
|
|
this.panel.add(makeButton("NW", arrows[0]), "newline 20");
|
|
this.panel.add(makeButton("N", arrows[1]));
|
|
this.panel.add(makeButton("NE", arrows[2]));
|
|
this.panel.add(makeButton("W", arrows[3]));
|
|
this.panel.add(makeButton("E", arrows[4]), "skip");
|
|
this.panel.add(makeButton("SW", arrows[5]));
|
|
this.panel.add(makeButton("S", arrows[6]));
|
|
this.panel.add(makeButton("SE", arrows[7]), "wrap 20");
|
|
// initialization completes in initializeUnitButtons
|
|
|
|
this.componentList.add(this.panel);
|
|
}
|
|
|
|
/**
|
|
* Makes a {@code JButton} for a given arrow direction.
|
|
* By default, the direction and arrow parameters should
|
|
* be the same literal direction, just formatted for a
|
|
* unique context.
|
|
*
|
|
* @param direction The Direction on the {@code Map} to move
|
|
* @param arrow The Direction of the arrow itself
|
|
* @return A JButton with the correct display and action
|
|
*
|
|
* @since 0.10.6
|
|
*/
|
|
private JButton makeButton(String direction, String arrow) {
|
|
final ActionManager am = getFreeColClient().getActionManager();
|
|
JButton button
|
|
= new JButton(am.getFreeColAction("moveAction." + direction));
|
|
button.setFont(arrowFont);
|
|
button.setText(arrow);
|
|
return button;
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
@Override
|
|
protected boolean initializeUnitButtons() {
|
|
if (!super.initializeUnitButtons()) return false;
|
|
|
|
for (UnitButton ub : this.unitButtons) this.panel.add(ub);
|
|
this.panel.add(this.infoPanel, "newline push, span, width "
|
|
+ this.infoPanel.getWidth() + ", height "
|
|
+ this.infoPanel.getHeight());
|
|
return true;
|
|
}
|
|
|
|
// Implement MapControls
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
@Override
|
|
public List<Component> getComponentsToAdd(Dimension newSize) {
|
|
if (getGame() == null || this.panel.isShowing()) {
|
|
return Collections.<Component>emptyList();
|
|
}
|
|
int width = (int)this.panel.getPreferredSize().getWidth();
|
|
this.panel.setSize(width, newSize.height);
|
|
this.panel.setLocation(newSize.width - width, 0);
|
|
return this.componentList;
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
@Override
|
|
public List<Component> getComponentsPresent() {
|
|
return (this.panel.isShowing()) ? this.componentList
|
|
: Collections.<Component>emptyList();
|
|
}
|
|
}
|