/*
* $Id$
*
* Copyright (c) 2000-2003 by Ben smith
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License (LGPL) as published by the Free Software Foundation.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, copies are available
* at http://www.opensource.org.
*/
package VASSAL.build.module.map;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JPanel;
import org.w3c.dom.Element;
import VASSAL.build.AutoConfigurable;
import VASSAL.build.Buildable;
import VASSAL.build.Configurable;
import VASSAL.build.GameModule;
import VASSAL.build.module.GameComponent;
import VASSAL.build.module.Map;
import VASSAL.build.module.documentation.HelpFile;
import VASSAL.command.Command;
import VASSAL.configure.AutoConfigurer;
import VASSAL.configure.Configurer;
import VASSAL.configure.ConfigurerFactory;
import VASSAL.configure.IconConfigurer;
import VASSAL.configure.VisibilityCondition;
import VASSAL.i18n.ComponentI18nData;
import VASSAL.i18n.Resources;
import VASSAL.i18n.Translatable;
import VASSAL.tools.LaunchButton;
import VASSAL.tools.NamedKeyStroke;
/**
* This removes all game pieces from the (@link Map)
* therefore providing an un-cluttered view.
*/
public class HidePiecesButton extends JPanel implements MouseListener,
AutoConfigurable, GameComponent, Drawable {
private static final long serialVersionUID = 1L;
protected boolean piecesVisible = false;
protected Map map;
protected LaunchButton launch;
protected String showingIcon;
protected String hiddenIcon;
protected ComponentI18nData myI18nData;
public static final String DEFAULT_SHOWING_ICON = "/images/globe_unselected.gif";
public static final String DEFAULT_HIDDEN_ICON = "/images/globe_selected.gif";
public static final String HOTKEY = "hotkey";
public static final String HIDDEN_ICON = "hiddenIcon";
public static final String SHOWING_ICON = "showingIcon";
public static final String LAUNCH_ICON = "icon";
public static final String TOOLTIP = "tooltip";
public static final String BUTTON_TEXT = "buttonText";
public HidePiecesButton() {
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
setPiecesVisible(!piecesVisible);
}
};
launch = new LaunchButton(null, TOOLTIP, BUTTON_TEXT, HOTKEY, LAUNCH_ICON, al);
launch.setAttribute(TOOLTIP, "Hide all pieces on this map");
addMouseListener(this);
}
/**
* Expects to be added to a {@link Map}. Adds itself as a {@link
* GameComponent} and a {@link Drawable} component */
public void addTo(Buildable b) {
map = (Map) b;
GameModule.getGameModule().getGameState().addGameComponent(this);
map.addDrawComponent(this);
map.getToolBar().add(launch);
if (b instanceof Translatable) {
getI18nData().setOwningComponent((Translatable) b);
}
}
protected void setPiecesVisible(boolean visible) {
map.setPiecesVisible(visible);
launch.setAttribute(LAUNCH_ICON, visible ? showingIcon : hiddenIcon);
piecesVisible = visible;
map.repaint();
}
public void add(Buildable b) {
}
public void remove(Buildable b) {
}
public void removeFrom(Buildable b) {
map = (Map) b;
map.removeDrawComponent(this);
map.getToolBar().remove(launch);
GameModule.getGameModule().getGameState().removeGameComponent(this);
}
public void setAttribute(String key, Object value) {
if (SHOWING_ICON.equals(key)) {
showingIcon = (String) value;
}
else if (HIDDEN_ICON.equals(key)) {
hiddenIcon = (String) value;
}
else {
launch.setAttribute(key,value);
}
}
public void build(Element e) {
AutoConfigurable.Util.buildAttributes(e, this);
}
public String[] getAttributeNames() {
return new String[]{BUTTON_TEXT, TOOLTIP, HOTKEY, SHOWING_ICON, HIDDEN_ICON};
}
public VisibilityCondition getAttributeVisibility(String name) {
return null;
}
public String getAttributeValueString(String key) {
String s = null;
if (HIDDEN_ICON.equals(key)) {
s = hiddenIcon;
}
else if (SHOWING_ICON.equals(key)) {
s = showingIcon;
}
else {
s = launch.getAttributeValueString(key);
}
return s;
}
public String[] getAttributeDescriptions() {
return new String[]{
Resources.getString(Resources.BUTTON_TEXT),
Resources.getString(Resources.TOOLTIP_TEXT),
Resources.getString(Resources.HOTKEY_LABEL),
Resources.getString("Editor.HidePieceButton.show_icon"), //$NON-NLS-1$
Resources.getString("Editor.HidePieceButton.hide_icon"), //$NON-NLS-1$
};
}
public Class<?>[] getAttributeTypes() {
return new Class<?>[]{
String.class,
String.class,
NamedKeyStroke.class,
ShowingIconConfig.class,
HiddenIconConfig.class
};
}
public static class ShowingIconConfig implements ConfigurerFactory {
public Configurer getConfigurer(AutoConfigurable c, String key, String name) {
return new IconConfigurer(key,name,DEFAULT_SHOWING_ICON);
}
}
public static class HiddenIconConfig implements ConfigurerFactory {
public Configurer getConfigurer(AutoConfigurable c, String key, String name) {
return new IconConfigurer(key,name,DEFAULT_HIDDEN_ICON);
}
}
public void draw(Graphics g, Map m) {
repaint();
}
public boolean drawAboveCounters() {
return false;
}
public void paint(Graphics g) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public String getToolTipText(MouseEvent e) {
return null;
}
public Command getRestoreCommand() {
return null;
}
public void setup(boolean show) {
if (show) {
setPiecesVisible(true);
}
}
public static String getConfigureTypeName() {
return Resources.getString("Editor.HidePieceButton.component_type"); //$NON-NLS-1$
}
public String getConfigureName() {
return null;
}
public Configurer getConfigurer() {
return new AutoConfigurer(this);
}
public Configurable[] getConfigureComponents() {
return new Configurable[0];
}
public Class<?>[] getAllowableConfigureComponents() {
return new Class<?>[0];
}
public void addPropertyChangeListener(java.beans.PropertyChangeListener l) {
}
public HelpFile getHelpFile() {
return HelpFile.getReferenceManualPage("Map.htm", "HidePieces");
}
public org.w3c.dom.Element getBuildElement(org.w3c.dom.Document doc) {
return AutoConfigurable.Util.getBuildElement(doc, this);
}
public ComponentI18nData getI18nData() {
if (myI18nData == null) {
myI18nData = new ComponentI18nData(this, "HidePieces");
}
return myI18nData;
}
}