package VASSAL.build.module.turn; import VASSAL.build.AbstractConfigurable; import VASSAL.build.AutoConfigurable; import VASSAL.build.Buildable; import VASSAL.build.GameModule; import VASSAL.build.module.Chatter; import VASSAL.build.module.documentation.HelpFile; import VASSAL.command.Command; import VASSAL.configure.Configurer; import VASSAL.configure.NamedHotKeyConfigurer; import VASSAL.configure.PlayerIdFormattedStringConfigurer; import VASSAL.configure.PropertyExpression; import VASSAL.counters.BasicPiece; import VASSAL.i18n.TranslatableConfigurerFactory; import VASSAL.tools.FormattedString; import VASSAL.tools.NamedKeyStroke; public class TurnGlobalHotkey extends AbstractConfigurable { public static final String NAME = "name"; //$NON-NLS-1$ public static final String HOTKEY = "hotkey"; //$NON-NLS-1$ public static final String MATCH = "match"; //$NON-NLS-1$ public static final String REPORT_FORMAT = "reportFormat"; //$NON-NLS-1$ protected PropertyExpression match = new PropertyExpression(); protected NamedKeyStroke hotkey; protected FormattedString format = new FormattedString(); protected BasicPiece checkPiece = new BasicPiece(); public String[] getAttributeDescriptions() { return new String[] { "Description: ", "Global Hotkey: ", "Match Properties: ", "Report Format: " }; } public Class<?>[] getAttributeTypes() { return new Class<?>[] { String.class, NamedKeyStroke.class, PropertyExpression.class, ReportFormatConfig.class }; } public static class ReportFormatConfig implements TranslatableConfigurerFactory { public Configurer getConfigurer(AutoConfigurable c, String key, String name) { return new PlayerIdFormattedStringConfigurer(key, name, new String[]{}); } } public String[] getAttributeNames() { return new String[] {NAME, HOTKEY, MATCH, REPORT_FORMAT}; } public String getAttributeValueString(String key) { if (NAME.equals(key)) { return getConfigureName(); } else if (HOTKEY.equals(key)) { return NamedHotKeyConfigurer.encode(hotkey); } else if (MATCH.equals(key)) { return match.getExpression(); } else if (REPORT_FORMAT.equals(key)) { return format.getFormat(); } else return null; } public void setAttribute(String key, Object value) { if (NAME.equals(key)) { setConfigureName((String) value); } else if (HOTKEY.equals(key)) { if (value instanceof String) { value = NamedHotKeyConfigurer.decode((String) value); } hotkey = (NamedKeyStroke) value; } else if (MATCH.equals(key)) { match.setExpression((String) value); } else if (REPORT_FORMAT.equals(key)) { format.setFormat((String) value); } } public Class<?>[] getAllowableConfigureComponents() { return new Class[0]; } public void removeFrom(Buildable parent) { } public void addTo(Buildable parent) { } public static String getConfigureTypeName() { return "Global Hotkey"; } public HelpFile getHelpFile() { return HelpFile.getReferenceManualPage("TurnTracker.htm","Hotkey"); //$NON-NLS-1$ //$NON-NLS-2$ } public void apply() { if (match.isNull() || match.accept(checkPiece)) { GameModule.getGameModule().fireKeyStroke(hotkey); String reportText = format.getLocalizedText(); if (reportText.length() > 0) { Command c = new Chatter.DisplayText(GameModule.getGameModule().getChatter(), "* " + reportText); c.execute(); GameModule.getGameModule().sendAndLog(c); } } } }