/*
* $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.widget;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Image;
import java.io.File;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import VASSAL.build.Buildable;
import VASSAL.build.Widget;
import VASSAL.build.module.documentation.HelpFile;
import VASSAL.tools.AdjustableSpeedScrollPane;
import VASSAL.tools.DataArchive;
import VASSAL.tools.imageop.Op;
import VASSAL.tools.imageop.OpIcon;
import VASSAL.tools.imageop.SourceOp;
/**
* A Chart is used for displaying charts and tables for the module.
* The charts are loaded as images stored in the DataArchive. As a subclass
* of Widget, a Chart may be added to any Widget, but it may not contain
* children of its own.
*/
public class Chart extends Widget {
public static final String NAME = "chartName";
public static final String FILE = "fileName";
private Component chart;
private String fileName;
private SourceOp srcOp;
private JLabel label;
public Chart() {
}
public Component getComponent() {
if (chart == null) {
label = new JLabel();
srcOp = fileName == null || fileName.trim().length() == 0
? null : Op.load(fileName);
if (srcOp != null) {
label.setIcon(new OpIcon(srcOp));
}
/*
try {
Image image = GameModule.getGameModule().getDataArchive().getCachedImage(fileName);
ImageIcon icon = image == null ? null : new ImageIcon(image);
label.setIcon(icon);
}
catch (IOException ex) {
label.setText("Image " + fileName + " not found");
}
*/
final Dimension d = label.getPreferredSize();
if (d.width > 300 || d.height > 300) {
final JScrollPane scroll = new AdjustableSpeedScrollPane(label);
scroll.getViewport().setPreferredSize(label.getPreferredSize());
scroll.getViewport().setAlignmentY(0.0F);
chart = scroll;
}
else {
chart = label;
}
}
return chart;
}
public String getFileName() {
return fileName;
}
public void addTo(Buildable parent) {
}
public void removeFrom(Buildable parent) {
}
public HelpFile getHelpFile() {
return HelpFile.getReferenceManualPage("ChartWindow.htm", "Chart");
}
public void setAttribute(String key, Object val) {
if (NAME.equals(key)) {
setConfigureName((String) val);
}
else if (FILE.equals(key)) {
if (val instanceof File) {
val = ((File) val).getName();
}
fileName = (String) val;
if (label != null) {
/*
try {
Image image = GameModule.getGameModule().getDataArchive().getCachedImage(fileName);
ImageIcon icon = image == null ? null : new ImageIcon(image);
label.setIcon(icon);
label.revalidate();
}
catch (IOException ex) {
}
*/
srcOp = fileName == null || fileName.trim().length() == 0
? null : Op.load(fileName);
if (srcOp != null) {
label.setIcon(new OpIcon(srcOp));
label.revalidate();
}
}
}
}
/*
* public Configurer[] getAttributeConfigurers() { Configurer config[] = new Configurer[2]; config[0] = new
* StringConfigurer(NAME,"Name"); config[0].setValue(getConfigureName()); listenTo(config[0]);
*
* config[1] = new ImageConfigurer (FILE,"Image", GameModule.getGameModule().getArchiveWriter());
* config[1].setValue(fileName); listenTo(config[1]);
*
* return config; }
*/
public Class<?>[] getAllowableConfigureComponents() {
return new Class[0];
}
/**
* The Attributes of a Chart are:
*
* <pre>
* <code>
* NAME
* </code>
* for the name of the chart
* <code>
* FILE
* </code>
* for the name of the image in the {@link DataArchive}
* </pre>
*/
public String[] getAttributeNames() {
return new String[]{NAME, FILE};
}
public String[] getAttributeDescriptions() {
return new String[]{"Name: ", "Image: "};
}
public Class<?>[] getAttributeTypes() {
return new Class<?>[]{String.class, Image.class};
}
public String getAttributeValueString(String name) {
if (NAME.equals(name)) {
return getConfigureName();
}
else if (FILE.equals(name)) {
return fileName;
}
return null;
}
public static String getConfigureTypeName() {
return "Chart";
}
}