/* * $Id$ * * Copyright (c) 2003 by Brent Easton and 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; /* * * @author Brent Easton * * Enhanced Dice Button includes access to Internet Die Servers via the DieManager. * */ import VASSAL.build.AutoConfigurable; import VASSAL.build.Buildable; import VASSAL.build.GameModule; import VASSAL.build.module.documentation.HelpFile; import VASSAL.command.Command; import VASSAL.command.CommandEncoder; import VASSAL.configure.Configurer; import VASSAL.configure.FormattedStringConfigurer; import VASSAL.i18n.Resources; import VASSAL.tools.ArrayUtils; /** * This component places a button into the controls window toolbar. Pressing the button generates random numbers and * displays the result in the Chatter */ public class InternetDiceButton extends DiceButton implements GameComponent, CommandEncoder { protected static DieManager dieManager; private static final String COMMAND_PREFIX = "SEMAIL\t"; //$NON-NLS-1$ /** Report format variale */ public static final String DETAILS = "rollDetails"; //$NON-NLS-1$ public InternetDiceButton() { super(); } public static String getConfigureTypeName() { return Resources.getString("Editor.InternetDiceButton.component_type"); //$NON-NLS-1$ } public Class<?>[] getAttributeTypes() { final Class<?>[] c = super.getAttributeTypes(); for (int i = 0; i < c.length; ++i) { if (c[i] == ReportFormatConfig.class) { c[i] = InternetReportFormatConfig.class; } } return c; } public static class InternetReportFormatConfig extends ReportFormatConfig { public Configurer getConfigurer(AutoConfigurable c, String key, String name) { final FormattedStringConfigurer config = (FormattedStringConfigurer) super.getConfigurer(c, key, name); config.setOptions(ArrayUtils.append(config.getOptions(), DETAILS)); return config; } } /** * Ask the die manager to do our roll! */ protected void DR() { reportFormat.setProperty(NAME, getLocalizedConfigureName()); dieManager.roll(nDice, nSides, plus, reportTotal, getLocalizedConfigureName(), reportFormat); } /** * Expects to be added to the DieManager. */ public void addTo(Buildable parent) { initDieManager(); dieManager.addDieButton(this); GameModule.getGameModule().addCommandEncoder(this); GameModule.getGameModule().getGameState().addGameComponent(this); super.addTo(parent); } protected void initDieManager() { if (dieManager == null) { dieManager = new DieManager(); dieManager.build(null); } } public void removeFrom(Buildable b) { dieManager.removeDieButton(this); GameModule.getGameModule().removeCommandEncoder(this); GameModule.getGameModule().getGameState().removeGameComponent(this); super.removeFrom(b); } public void setup(boolean gameStarting) { } public Command getRestoreCommand() { return new SetSecondaryEmail(dieManager.getServer().getSecondaryEmail()); } public Command decode(String command) { Command comm = null; if (command.startsWith(COMMAND_PREFIX)) { comm = new SetSecondaryEmail(command.substring(COMMAND_PREFIX.length())); } return comm; } public String encode(Command c) { String s = null; if (c instanceof SetSecondaryEmail) { s = COMMAND_PREFIX + ((SetSecondaryEmail) c).msg; } return s; } private static class SetSecondaryEmail extends Command { private String msg; private SetSecondaryEmail(String s) { msg = s; } protected void executeCommand() { dieManager.setSecondaryEmail(msg); } protected Command myUndoCommand() { return null; } } public HelpFile getHelpFile() { return HelpFile.getReferenceManualPage("GameModule.htm", "InternetDiceButton"); //$NON-NLS-1$ //$NON-NLS-2$ } }