/* * $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.documentation; import java.awt.Image; import java.awt.event.ActionEvent; import java.io.File; import javax.swing.AbstractAction; import javax.swing.Action; import VASSAL.Info; import VASSAL.build.AbstractConfigurable; import VASSAL.build.Buildable; import VASSAL.build.GameModule; import VASSAL.build.module.Documentation; import VASSAL.build.module.ModuleExtension; import VASSAL.i18n.Resources; import VASSAL.tools.DataArchive; import VASSAL.tools.image.ImageUtils; import VASSAL.tools.imageop.ImageOp; import VASSAL.tools.imageop.Op; import VASSAL.tools.menu.MenuManager; import VASSAL.tools.swing.AboutWindow; /** * Places an entry in the <code>Help</code> menu. Selecting the entry * displays a window with a stored image on it. Good for a splash * screen or an "about" screen. */ public class AboutScreen extends AbstractConfigurable { protected ImageOp op; protected Image image; protected String title; protected String fileName; protected Action launch; public AboutScreen() { launch = new AbstractAction() { private static final long serialVersionUID = 1L; public void actionPerformed(ActionEvent e) { launch(); } }; } public AboutScreen(ImageOp op) { this(); if (op == null) throw new IllegalArgumentException(); this.op = op; } @Deprecated public AboutScreen(Image i) { this(); this.op = Op.load(ImageUtils.toBufferedImage(i)); } public void launch() { if (op == null) return; final GameModule g = GameModule.getGameModule(); if (g == null) return; final StringBuilder sb = new StringBuilder("<html><center>"); sb.append( Resources.getString("AboutScreen.module_version", //$NON-NLS-1$ g.getLocalizedGameName(), g.getGameVersion())); for (ModuleExtension ext : g.getComponentsOf(ModuleExtension.class)) { sb.append("<br/>").append( Resources.getString("AboutScreen.extension_version", //$NON-NLS-1$ ext.getName(), ext.getVersion())); } sb.append("<br/>").append( Resources.getString("AboutScreen.vassal_version", //$NON-NLS-1$ Info.getVersion())); sb.append("</center></html>"); final AboutWindow w = new AboutWindow(g.getFrame(), op.getImage(), sb.toString()); w.setVisible(true); w.toFront(); } public static String getConfigureTypeName() { return "About Screen"; } /** * The attributes of an AboutScreen are: * * <code>TITLE</code> the text of the menu entry in the Help menu * <code>FILE</code> the name of an image file in the {@link * DataArchive}. The image is displayed when the menu item is * selected */ public String[] getAttributeNames() { return new String[]{ TITLE, FILE }; } public String[] getAttributeDescriptions() { return new String[]{ "Menu Entry: ", //$NON-NLS-1$ "Image: " //$NON-NLS-1$ }; } public Class<?>[] getAttributeTypes() { return new Class<?>[]{ String.class, Image.class }; } public String getAttributeValueString(String key) { if (TITLE.equals(key)) { return title; } else if (FILE.equals(key)) { return fileName; } return null; } public static final String TITLE = "title"; //$NON-NLS-1$ public static final String FILE = "fileName"; //$NON-NLS-1$ public void setAttribute(String key, Object val) { if (TITLE.equals(key)) { title = (String) val; // don't permit "About VASSAL" if (title != null && title.equals(Resources.getString("AboutScreen.about_vassal"))) { title = Resources.getString("Documentation.about_module"); } setConfigureName(title); launch.putValue(Action.NAME, title); } else if (FILE.equals(key)) { if (val instanceof File) { val = ((File) val).getName(); } fileName = (String) val; op = null; if (fileName != null) { fileName = fileName.trim(); if (fileName.length() > 0) { op = Op.load(fileName); final Image img = op.getImage(); if (img != null) { GameModule.getGameModule() .getWizardSupport() .setBackgroundImage(op.getImage()); } else { op = null; } } } } } public Class<?>[] getAllowableConfigureComponents() { return new Class<?>[0]; } public void removeFrom(Buildable b) { MenuManager.getInstance().removeAction("Documentation.about_module"); } /** * Expects to be added to a {@link Documentation}. Adds an entry * to the <code>Help</code> menu */ public void addTo(Buildable b) { MenuManager.getInstance().addAction("Documentation.about_module", launch); } public HelpFile getHelpFile() { return HelpFile.getReferenceManualPage("HelpMenu.htm", "AboutScreen"); //$NON-NLS-1$ //$NON-NLS-2$ } }