/*
* $Id$
*
* Copyright (c) 2000-2003 by Rodney Kinney
*
* 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.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.swing.JOptionPane;
import VASSAL.build.AbstractConfigurable;
import VASSAL.build.AutoConfigurable;
import VASSAL.build.Buildable;
import VASSAL.build.GameModule;
import VASSAL.build.module.Map;
import VASSAL.build.module.documentation.HelpFile;
import VASSAL.configure.Configurer;
import VASSAL.configure.ConfigurerFactory;
import VASSAL.configure.IconConfigurer;
import VASSAL.counters.GamePiece;
import VASSAL.i18n.Resources;
import VASSAL.tools.LaunchButton;
import VASSAL.tools.NamedKeyStroke;
import VASSAL.tools.WriteErrorDialog;
import VASSAL.tools.filechooser.FileChooser;
import VASSAL.tools.io.IOUtils;
public class TextSaver extends AbstractConfigurable {
protected static final String HOTKEY = "hotkey";
protected static final String BUTTON_TEXT = "buttonText";
protected static final String TOOLTIP = "tooltip";
protected static final String ICON_NAME = "icon";
protected Map map;
protected LaunchButton launch;
public TextSaver() {
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
apply();
}
};
launch = new LaunchButton("Save Text", TOOLTIP, BUTTON_TEXT,
HOTKEY, ICON_NAME, al);
launch.setAttribute(TOOLTIP, "Save map contents as plain text file");
}
public String[] getAttributeNames() {
return new String[] {
BUTTON_TEXT,
TOOLTIP,
ICON_NAME,
HOTKEY
};
}
public String[] getAttributeDescriptions() {
return new String[] {
Resources.getString(Resources.BUTTON_TEXT),
Resources.getString(Resources.TOOLTIP_TEXT),
Resources.getString(Resources.BUTTON_ICON),
Resources.getString(Resources.HOTKEY_LABEL),
};
}
public Class<?>[] getAttributeTypes() {
return new Class<?>[] {
String.class,
String.class,
IconConfig.class,
NamedKeyStroke.class
};
}
public static class IconConfig implements ConfigurerFactory {
public Configurer getConfigurer(AutoConfigurable c, String key, String name) {
return new IconConfigurer(key, name, ((TextSaver) c).launch.getAttributeValueString(ICON_NAME));
}
}
public void setAttribute(String key, Object value) {
launch.setAttribute(key, value);
}
public String getAttributeValueString(String key) {
return launch.getAttributeValueString(key);
}
public void addTo(Buildable b) {
map = (Map) b;
map.getToolBar().add(launch);
}
public void removeFrom(Buildable b) {
map = (Map) b;
map.getToolBar().remove(launch);
map.getToolBar().revalidate();
}
public void apply() {
switch (JOptionPane.showConfirmDialog
(null, "Write contents as seen by opponents?", "", JOptionPane.YES_NO_OPTION)) {
case JOptionPane.NO_OPTION:
writeMapAsText();
break;
case JOptionPane.YES_OPTION:
String myId = GameModule.getUserId();
GameModule.setUserId("yendoR117");
writeMapAsText();
GameModule.setUserId(myId);
break;
}
}
protected void writeMapAsText() {
final FileChooser fc = GameModule.getGameModule().getFileChooser();
if (fc.showSaveDialog(map.getView()) != FileChooser.APPROVE_OPTION) return;
final File file = fc.getSelectedFile();
PrintWriter p = null;
try {
p = new PrintWriter(new BufferedWriter(new FileWriter(file)));
for (GamePiece gp : map.getPieces()) {
final String s = gp.getName();
if (s.length() > 0) {
p.println(map.locationName(gp.getPosition()) + ": " + s);
}
}
p.close();
}
catch (IOException e) {
WriteErrorDialog.error(e, file);
}
finally {
IOUtils.closeQuietly(p);
}
}
public HelpFile getHelpFile() {
return HelpFile.getReferenceManualPage("Map.htm", "TextCapture");
}
public static String getConfigureTypeName() {
return Resources.getString("Editor.TextCapture.component_type"); //$NON-NLS-1$
}
/**
* @return an array of Configurer objects representing
* all possible classes of Buildable children of this Configurable object
*/
public Class<?>[] getAllowableConfigureComponents() {
return new Class<?>[0];
}
}