[vassalengine-svn-trunk] [vassalengine-svn] SF.net SVN: vassalengine: [2245] VASSAL-src/trunk
Brought to you by:
rodneykinney,
uckelman
From: <rod...@us...> - 2007-06-25 04:01:55
|
Revision: 2245 http://svn.sourceforge.net/vassalengine/?rev=2245&view=rev Author: rodneykinney Date: 2007-06-24 21:00:34 -0700 (Sun, 24 Jun 2007) Log Message: ----------- Merge swampwallaby-merge@2239-2244: DoActionButton, TurnTracker i18n Modified Paths: -------------- VASSAL-src/trunk/VASSAL/build/GameModule.java VASSAL-src/trunk/VASSAL/build/module/turn/CounterTurnLevel.java VASSAL-src/trunk/VASSAL/build/module/turn/ListTurnLevel.java VASSAL-src/trunk/VASSAL/build/module/turn/TurnLevel.java VASSAL-src/trunk/VASSAL/build/module/turn/TurnTracker.java VASSAL-src/trunk/VASSAL/configure/ListConfigurer.java VASSAL-src/trunk/VASSAL/i18n/VASSAL.properties VASSAL-src/trunk/doc/ReferenceManual/GameModule.htm Added Paths: ----------- VASSAL-src/trunk/VASSAL/build/module/DoActionButton.java VASSAL-src/trunk/VASSAL/build/module/turn/TurnGlobalHotkey.java VASSAL-src/trunk/doc/ReferenceManual/DoActionButton.htm VASSAL-src/trunk/doc/ReferenceManual/TurnTracker.htm VASSAL-src/trunk/doc/ReferenceManual/images/DoActionButton.png Removed Paths: ------------- VASSAL-src/trunk/VASSAL/build/module/PlaySoundButton.java VASSAL-src/trunk/VASSAL/build/module/turn/TurnGlobalKeyCommand.java VASSAL-src/trunk/doc/ReferenceManual/PlaySoundButton.htm VASSAL-src/trunk/doc/ReferenceManual/images/PlaySoundButton.png Modified: VASSAL-src/trunk/VASSAL/build/GameModule.java =================================================================== --- VASSAL-src/trunk/VASSAL/build/GameModule.java 2007-06-24 02:28:47 UTC (rev 2244) +++ VASSAL-src/trunk/VASSAL/build/GameModule.java 2007-06-25 04:00:34 UTC (rev 2245) @@ -45,6 +45,7 @@ import VASSAL.build.module.ChartWindow; import VASSAL.build.module.Chatter; import VASSAL.build.module.DiceButton; +import VASSAL.build.module.DoActionButton; import VASSAL.build.module.Documentation; import VASSAL.build.module.GameState; import VASSAL.build.module.GlobalKeyCommand; @@ -55,7 +56,6 @@ import VASSAL.build.module.MultiActionButton; import VASSAL.build.module.NotesWindow; import VASSAL.build.module.PieceWindow; -import VASSAL.build.module.PlaySoundButton; import VASSAL.build.module.PlayerHand; import VASSAL.build.module.PlayerRoster; import VASSAL.build.module.PredefinedSetup; @@ -70,6 +70,7 @@ import VASSAL.build.module.properties.MutablePropertiesContainer; import VASSAL.build.module.properties.MutableProperty; import VASSAL.build.module.properties.PropertySource; +import VASSAL.build.module.turn.TurnTracker; import VASSAL.command.Command; import VASSAL.command.CommandEncoder; import VASSAL.command.Logger; @@ -275,7 +276,7 @@ PrototypesContainer.class, ToolbarMenu.class, MultiActionButton.class, - PlaySoundButton.class, + DoActionButton.class, DiceButton.class, GlobalKeyCommand.class, Inventory.class, @@ -286,7 +287,8 @@ ChartWindow.class, PrivateMap.class, PlayerHand.class, - NotesWindow.class + NotesWindow.class, + TurnTracker.class }; return c; } Copied: VASSAL-src/trunk/VASSAL/build/module/DoActionButton.java (from rev 2244, VASSAL-src/branches/swampwallaby-merge/VASSAL/build/module/DoActionButton.java) =================================================================== --- VASSAL-src/trunk/VASSAL/build/module/DoActionButton.java (rev 0) +++ VASSAL-src/trunk/VASSAL/build/module/DoActionButton.java 2007-06-25 04:00:34 UTC (rev 2245) @@ -0,0 +1,315 @@ +/* + * $Id: ctionButton.java 2151 2007-06-01 13:31:10 +0000 (Fri, 01 Jun 2007) swampwallaby $ + * + * 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; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.KeyStroke; + +import VASSAL.build.AbstractConfigurable; +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.NullCommand; +import VASSAL.command.PlayAudioClipCommand; +import VASSAL.configure.AudioClipConfigurer; +import VASSAL.configure.Configurer; +import VASSAL.configure.ConfigurerFactory; +import VASSAL.configure.HotKeyConfigurer; +import VASSAL.configure.IconConfigurer; +import VASSAL.configure.ListConfigurer; +import VASSAL.configure.PlayerIdFormattedStringConfigurer; +import VASSAL.configure.VisibilityCondition; +import VASSAL.i18n.TranslatableConfigurerFactory; +import VASSAL.tools.FormattedString; +import VASSAL.tools.LaunchButton; +import VASSAL.tools.SequenceEncoder; + +/** + * This component places a button into the controls window toolbar. + * Pressing the button displays a message, plays a sound and/or sends hotkeys */ +public class DoActionButton extends AbstractConfigurable { + + public static final String BUTTON_TEXT = "text"; //$NON-NLS-1$ + public static final String TOOLTIP = "tooltip"; //$NON-NLS-1$ + public static final String NAME = "name"; //$NON-NLS-1$ + public static final String HOTKEY = "hotkey"; //$NON-NLS-1$ + public static final String ICON = "icon"; //$NON-NLS-1$ + public static final String DO_REPORT = "doReport"; //$NON-NLS-1$ + public static final String REPORT_FORMAT = "reportFormat"; //$NON-NLS-1$ + public static final String DO_SOUND = "doSound"; //$NON-NLS-1$ + public static final String SOUND_CLIP = "soundClip"; //$NON-NLS-1$ + public static final String DO_HOTKEY = "doHotkey"; //$NON-NLS-1$ + public static final String HOTKEYS = "hotkeys"; //$NON-NLS-1$ + + protected LaunchButton launch; + protected boolean doReport = false; + protected FormattedString reportFormat = new FormattedString(GameModule.getGameModule()); + protected boolean doSound = false; + protected String soundClip = ""; + protected boolean doHotkey = false; + protected List<KeyStroke> hotkeys = new ArrayList<KeyStroke>(); + + public DoActionButton() { + ActionListener rollAction = new ActionListener() { + public void actionPerformed(ActionEvent e) { + execute(); + } + }; + launch = new LaunchButton("Do Action", TOOLTIP, BUTTON_TEXT, HOTKEY, ICON, rollAction); + setAttribute(NAME, "Do Action"); + setAttribute(TOOLTIP, "Do Action"); + launch.setAttribute(BUTTON_TEXT, "Do Action"); + } + + public static String getConfigureTypeName() { + return "Action Button"; + } + + public String[] getAttributeNames() { + String s[] = {NAME, BUTTON_TEXT, TOOLTIP, ICON, HOTKEY, DO_REPORT, REPORT_FORMAT, DO_SOUND, SOUND_CLIP, DO_HOTKEY, HOTKEYS}; + return s; + } + + public String[] getAttributeDescriptions() { + return new String[]{"Description: ", + "Button text: ", + "Button Tooltip text: ", + "Button icon: ", + "Hot key: ", + "Display Message?", + "Report Format: ", + "Play a sound?", + "Sound Clip: ", + "Send Hotkeys?", + "Hot Keys: ", + }; + } + + public static class IconConfig implements ConfigurerFactory { + public Configurer getConfigurer(AutoConfigurable c, String key, String name) { + return new IconConfigurer(key, name, null); //$NON-NLS-1$ + } + } + + public static class SoundConfig implements ConfigurerFactory { + public Configurer getConfigurer(AutoConfigurable c, String key, String name) { + return new AudioClipConfigurer(key, name, GameModule.getGameModule().getArchiveWriter()); + } + } + + public static class ReportFormatConfig implements TranslatableConfigurerFactory { + public Configurer getConfigurer(AutoConfigurable c, String key, String name) { + return new PlayerIdFormattedStringConfigurer(key, name, new String[]{}); + } + } + + public static class HotkeyConfig implements TranslatableConfigurerFactory { + public Configurer getConfigurer(AutoConfigurable c, String key, String name) { + return new HotkeyListConfigurer(key, name); + } + } + + public static class HotkeyListConfigurer extends ListConfigurer { + + public HotkeyListConfigurer(String key, String name) { + super(key, name); + } + + protected Configurer buildChildConfigurer() { + return new HotKeyConfigurer(null, " HotKey: "); + } + + } + + public Class[] getAttributeTypes() { + return new Class[]{String.class, + String.class, + String.class, + IconConfig.class, + KeyStroke.class, + Boolean.class, + ReportFormatConfig.class, + Boolean.class, + SoundConfig.class, + Boolean.class, + HotkeyConfig.class}; + } + + public void addTo(Buildable parent) { + GameModule.getGameModule().getToolBar().add(getComponent()); + } + + /** + * The component to be added to the control window toolbar + */ + protected java.awt.Component getComponent() { + return launch; + } + + public void setAttribute(String key, Object o) { + if (NAME.equals(key)) { + setConfigureName((String) o); + } + else if (DO_REPORT.equals(key)) { + if (o instanceof String) { + o = new Boolean((String) o); + } + doReport = ((Boolean) o).booleanValue(); + } + else if (REPORT_FORMAT.equals(key)) { + reportFormat.setFormat((String) o); + } + else if (DO_SOUND.equals(key)) { + if (o instanceof String) { + o = new Boolean((String) o); + } + doSound = ((Boolean) o).booleanValue(); + } + if (SOUND_CLIP.equals(key)) { + if (o instanceof File) { + o = ((File) o).getName(); + } + soundClip = (String) o; + } + else if (DO_HOTKEY.equals(key)) { + if (o instanceof String) { + o = new Boolean((String) o); + } + doHotkey = ((Boolean) o).booleanValue(); + } + else if (HOTKEYS.equals(key)) { + if (o instanceof String) { + o = decodeHotkeys((String) o); + } + hotkeys = (List<KeyStroke>) o; + } + else { + launch.setAttribute(key, o); + } + } + + public String getAttributeValueString(String key) { + if (NAME.equals(key)) { + return getConfigureName(); + } + else if (DO_REPORT.equals(key)) { + return String.valueOf(doReport); + } + else if (REPORT_FORMAT.equals(key)) { + return reportFormat.getFormat(); + } + else if (DO_SOUND.equals(key)) { + return String.valueOf(doSound); + } + else if (SOUND_CLIP.equals(key)) { + return soundClip; + } + else if (DO_HOTKEY.equals(key)) { + return String.valueOf(doHotkey); + } + else if (HOTKEYS.equals(key)) { + return encodeHotkeys(); + } + else { + return launch.getAttributeValueString(key); + } + } + + + public VisibilityCondition getAttributeVisibility(String name) { + if (REPORT_FORMAT.equals(name)) { + return new VisibilityCondition() { + public boolean shouldBeVisible() { + return doReport; + }}; + } + else if (SOUND_CLIP.equals(name)) { + return new VisibilityCondition() { + public boolean shouldBeVisible() { + return doSound; + }}; + } + else if (HOTKEYS.equals(name)) { + return new VisibilityCondition() { + public boolean shouldBeVisible() { + return doHotkey; + }}; + } + else { + return null; + } + } + + protected String encodeHotkeys() { + SequenceEncoder se = new SequenceEncoder(','); + for (KeyStroke key : hotkeys) { + se.append(HotKeyConfigurer.encode(key)); + } + return "" + se.getValue(); + } + + protected List<KeyStroke> decodeHotkeys(String s) { + List<KeyStroke> list = new ArrayList<KeyStroke>(); + SequenceEncoder.Decoder sd = new SequenceEncoder.Decoder(s, ','); + while (sd.hasMoreTokens()) { + KeyStroke key = HotKeyConfigurer.decode(sd.nextToken()); + list.add(key); + } + return list; + } + + public Class[] getAllowableConfigureComponents() { + return new Class[0]; + } + + public void removeFrom(Buildable b) { + GameModule.getGameModule().getToolBar().remove(getComponent()); + GameModule.getGameModule().getToolBar().revalidate(); + } + + public HelpFile getHelpFile() { + return HelpFile.getReferenceManualPage("MessageButton.htm"); //$NON-NLS-1$ + } + + protected void execute() { + Command c = new NullCommand(); + if (doReport) { + String report = reportFormat.getLocalizedText(); + c.append(new Chatter.DisplayText(GameModule.getGameModule().getChatter(), "* " + report)); + } + if (doSound) { + String clipName = new FormattedString(soundClip).getText(GameModule.getGameModule()); + c.append(new PlayAudioClipCommand(clipName)); + } + if (doHotkey) { + for (KeyStroke key : hotkeys) { + GameModule.getGameModule().fireKeyStroke(key); + } + } + c.execute(); + GameModule.getGameModule().sendAndLog(c); + } +} Deleted: VASSAL-src/trunk/VASSAL/build/module/PlaySoundButton.java =================================================================== --- VASSAL-src/trunk/VASSAL/build/module/PlaySoundButton.java 2007-06-24 02:28:47 UTC (rev 2244) +++ VASSAL-src/trunk/VASSAL/build/module/PlaySoundButton.java 2007-06-25 04:00:34 UTC (rev 2245) @@ -1,188 +0,0 @@ -/* - * $Id: DiceButton.java 2151 2007-06-01 13:31:10 +0000 (Fri, 01 Jun 2007) swampwallaby $ - * - * 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; - -import java.applet.AudioClip; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.File; -import java.io.IOException; - -import javax.swing.KeyStroke; - -import VASSAL.build.AbstractConfigurable; -import VASSAL.build.AutoConfigurable; -import VASSAL.build.Buildable; -import VASSAL.build.GameModule; -import VASSAL.build.module.documentation.HelpFile; -import VASSAL.configure.AudioClipConfigurer; -import VASSAL.configure.Configurer; -import VASSAL.configure.ConfigurerFactory; -import VASSAL.configure.IconConfigurer; -import VASSAL.configure.PlayerIdFormattedStringConfigurer; -import VASSAL.i18n.TranslatableConfigurerFactory; -import VASSAL.tools.FormattedString; -import VASSAL.tools.LaunchButton; - -/** - * This component places a button into the controls window toolbar. - * Pressing the button plays a sounf */ -public class PlaySoundButton extends AbstractConfigurable { - - public static final String BUTTON_TEXT = "text"; //$NON-NLS-1$ - public static final String TOOLTIP = "tooltip"; //$NON-NLS-1$ - public static final String NAME = "name"; //$NON-NLS-1$ - public static final String HOTKEY = "hotkey"; //$NON-NLS-1$ - public static final String ICON = "icon"; //$NON-NLS-1$ - public static final String SOUND_CLIP = "soundClip"; //$NON-NLS-1$ - public static final String REPORT_FORMAT = "reportFormat"; //$NON-NLS-1$ - - protected LaunchButton launch; - protected FormattedString reportFormat = new FormattedString(GameModule.getGameModule()); - protected String soundClip; - - public PlaySoundButton() { - ActionListener rollAction = new ActionListener() { - public void actionPerformed(ActionEvent e) { - playSound(); - } - }; - launch = new LaunchButton("Play Sound", TOOLTIP, BUTTON_TEXT, HOTKEY, ICON, rollAction); - setAttribute(NAME, "Play Sound"); - setAttribute(TOOLTIP, "Play Sound"); - launch.setAttribute(BUTTON_TEXT, "Play Sound"); - } - - public static String getConfigureTypeName() { - return "Play Sound Button"; - } - - public String[] getAttributeNames() { - String s[] = {NAME, BUTTON_TEXT, TOOLTIP, HOTKEY, ICON, SOUND_CLIP, REPORT_FORMAT}; - return s; - } - - public String[] getAttributeDescriptions() { - return new String[]{"Name: ", - "Button text: ", - "Tooltip text: ", - "Hot key: ", - "Button icon: ", - "Sound clip: ", - "Report Format: "}; - } - - public static class IconConfig implements ConfigurerFactory { - public Configurer getConfigurer(AutoConfigurable c, String key, String name) { - return new IconConfigurer(key, name, null); //$NON-NLS-1$ - } - } - - public static class SoundConfig implements ConfigurerFactory { - public Configurer getConfigurer(AutoConfigurable c, String key, String name) { - return new AudioClipConfigurer(key, name, GameModule.getGameModule().getArchiveWriter()); - } - } - - public static class ReportFormatConfig implements TranslatableConfigurerFactory { - public Configurer getConfigurer(AutoConfigurable c, String key, String name) { - return new PlayerIdFormattedStringConfigurer(key, name, new String[]{}); - } - } - - public Class[] getAttributeTypes() { - return new Class[]{String.class, - String.class, - String.class, - KeyStroke.class, - IconConfig.class, - SoundConfig.class, - ReportFormatConfig.class}; - } - - public void addTo(Buildable parent) { - GameModule.getGameModule().getToolBar().add(getComponent()); - } - - /** - * The component to be added to the control window toolbar - */ - protected java.awt.Component getComponent() { - return launch; - } - - public void setAttribute(String key, Object o) { - if (NAME.equals(key)) { - setConfigureName((String) o); - } - else if (SOUND_CLIP.equals(key)) { - if (o instanceof File) { - o = ((File) o).getName(); - } - soundClip = (String) o; - } - else if (REPORT_FORMAT.equals(key)) { - reportFormat.setFormat((String) o); - } - else { - launch.setAttribute(key, o); - } - } - - public String getAttributeValueString(String key) { - if (NAME.equals(key)) { - return getConfigureName(); - } - else if (SOUND_CLIP.equals(key)) { - return soundClip; - } - else if (REPORT_FORMAT.equals(key)) { - return reportFormat.getFormat(); - } - else { - return launch.getAttributeValueString(key); - } - } - - public Class[] getAllowableConfigureComponents() { - return new Class[0]; - } - - public void removeFrom(Buildable b) { - GameModule.getGameModule().getToolBar().remove(getComponent()); - GameModule.getGameModule().getToolBar().revalidate(); - } - - public HelpFile getHelpFile() { - return null; - } - - protected void playSound() { - String clipName = new FormattedString(soundClip).getText(GameModule.getGameModule()); - try { - AudioClip clip = GameModule.getGameModule().getDataArchive().getCachedAudioClip(clipName); - if (clip != null) { - clip.play(); - } - } - catch (IOException e) { - e.printStackTrace(); - } - } -} Modified: VASSAL-src/trunk/VASSAL/build/module/turn/CounterTurnLevel.java =================================================================== --- VASSAL-src/trunk/VASSAL/build/module/turn/CounterTurnLevel.java 2007-06-24 02:28:47 UTC (rev 2244) +++ VASSAL-src/trunk/VASSAL/build/module/turn/CounterTurnLevel.java 2007-06-25 04:00:34 UTC (rev 2245) @@ -29,10 +29,10 @@ public class CounterTurnLevel extends TurnLevel { - protected static final String START = "start"; - protected static final String INCR = "incr"; - protected static final String LOOP = "loop"; - protected static final String LOOP_LIMIT = "loopLimit"; + protected static final String START = "start"; //$NON-NLS-1$ + protected static final String INCR = "incr"; //$NON-NLS-1$ + protected static final String LOOP = "loop"; //$NON-NLS-1$ + protected static final String LOOP_LIMIT = "loopLimit"; //$NON-NLS-1$ protected int incr = 1; protected boolean loop = false; @@ -84,20 +84,20 @@ loop = sd.nextBoolean(false); loopLimit = sd.nextInt(-1); for (int i = 0; i < getTurnLevelCount(); i++) { - getTurnLevel(i).setState(sd.nextToken("")); + getTurnLevel(i).setState(sd.nextToken("")); //$NON-NLS-1$ } myValue.setPropertyValue(getValueString()); } protected String getValueString() { - return current + ""; + return current + ""; //$NON-NLS-1$ } /* (non-Javadoc) * @see turn.TurnLevel#getLongestValueName() */ protected String getLongestValueName() { - return start < 10000 ? "9999" : start+""; + return start < 10000 ? "9999" : start+""; //$NON-NLS-1$ //$NON-NLS-2$ } /* @@ -139,7 +139,7 @@ protected Component getSetControl() { - IntConfigurer config = new IntConfigurer("", " "+getConfigureName()+": ", new Integer(current)); + IntConfigurer config = new IntConfigurer("", " "+getConfigureName()+": ", new Integer(current)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ config.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { current = ((Integer) ((IntConfigurer) e.getSource()).getValue()).intValue(); @@ -212,16 +212,16 @@ public String getAttributeValueString(String key) { if (START.equals(key)) { - return start + ""; + return start + ""; //$NON-NLS-1$ } else if (INCR.equals(key)) { - return incr + ""; + return incr + ""; //$NON-NLS-1$ } else if (LOOP.equals(key)) { - return loop + ""; + return loop + ""; //$NON-NLS-1$ } else if (LOOP_LIMIT.equals(key)) { - return loopLimit + ""; + return loopLimit + ""; //$NON-NLS-1$ } else return super.getAttributeValueString(key); Modified: VASSAL-src/trunk/VASSAL/build/module/turn/ListTurnLevel.java =================================================================== --- VASSAL-src/trunk/VASSAL/build/module/turn/ListTurnLevel.java 2007-06-24 02:28:47 UTC (rev 2244) +++ VASSAL-src/trunk/VASSAL/build/module/turn/ListTurnLevel.java 2007-06-25 04:00:34 UTC (rev 2245) @@ -28,24 +28,25 @@ import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JDialog; +import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPanel; -import VASSAL.build.Buildable; import VASSAL.build.GameModule; import VASSAL.configure.BooleanConfigurer; import VASSAL.configure.StringArrayConfigurer; import VASSAL.configure.StringEnumConfigurer; import VASSAL.configure.VisibilityCondition; +import VASSAL.i18n.Resources; import VASSAL.tools.FormattedString; import VASSAL.tools.SequenceEncoder; public class ListTurnLevel extends TurnLevel implements ActionListener { - protected static final String LIST = "list"; - protected static final String CONFIG_LIST = "configList"; - protected static final String CONFIG_FIRST = "configFirst"; - protected static final String PROMPT = "prompt"; + protected static final String LIST = "list"; //$NON-NLS-1$ + protected static final String CONFIG_LIST = "configList"; //$NON-NLS-1$ + protected static final String CONFIG_FIRST = "configFirst"; //$NON-NLS-1$ + protected static final String PROMPT = "prompt"; //$NON-NLS-1$ protected int first = 0; protected String[] list = new String[0]; @@ -60,7 +61,7 @@ public ListTurnLevel() { super(); - turnFormat = new FormattedString("$" + LEVEL_VALUE + "$"); + turnFormat = new FormattedString("$" + LEVEL_VALUE + "$"); //$NON-NLS-1$ //$NON-NLS-2$ } /* @@ -73,11 +74,6 @@ } setLow(); } - - public void addTo(Buildable p) { - super.addTo(p); - prompt = "First " + getConfigureName() + " in " + ((TurnComponent) p).getConfigureName(); - } protected void setLow() { current = first; @@ -103,7 +99,7 @@ se.append(first); String s[] = new String[active.length]; for (int i = 0; i < s.length; i++) { - s[i] = active[i] + ""; + s[i] = active[i] + ""; //$NON-NLS-1$ } se.append(s); for (int i = 0; i < getTurnLevelCount(); i++) { @@ -124,10 +120,10 @@ String[] s = sd.nextStringArray(0); active = new boolean[s.length]; for (int i = 0; i < s.length; i++) { - active[i] = s[i].equals("true"); + active[i] = s[i].equals("true"); //$NON-NLS-1$ } for (int i = 0; i < getTurnLevelCount(); i++) { - getTurnLevel(i).setState(sd.nextToken("")); + getTurnLevel(i).setState(sd.nextToken("")); //$NON-NLS-1$ } myValue.setPropertyValue(getValueString()); } @@ -137,7 +133,7 @@ return list[current]; } else { - return ""; + return ""; //$NON-NLS-1$ } } @@ -147,7 +143,7 @@ * @see turn.TurnLevel#getLongestValueName() */ protected String getLongestValueName() { - String s = "X"; + String s = "X"; //$NON-NLS-1$ for (int i = 0; i < list.length; i++) { if (list[i].length() > s.length()) { s = list[i]; @@ -223,7 +219,7 @@ } if (configFirst || configList) { - JMenuItem item = new JMenuItem("Configure " + getConfigureName()); + JMenuItem item = new JMenuItem(Resources.getString("TurnTracker.configure2", getConfigureName())); //$NON-NLS-1$ item.addActionListener(this); configMenu.add(item); } @@ -238,7 +234,7 @@ protected Component getSetControl() { - StringEnumConfigurer config = new StringEnumConfigurer("", " " + getConfigureName() + ": ", list); + StringEnumConfigurer config = new StringEnumConfigurer("", " " + getConfigureName() + ": ", list); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ config.setValue(list[current]); config.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { @@ -257,8 +253,8 @@ public String[] getAttributeDescriptions() { String a[] = super.getAttributeDescriptions(); - String b[] = new String[] { "List: ", "Allow players to select list options?", - "Allow players to set first item in list?", "Prompt to select first item: " }; + String b[] = new String[] { "List of Items", "Allow players to hide items in this list?", + "Allow players to change which item goes first?", "Prompt to players to select which item goes first: " }; String c[] = new String[a.length + b.length]; System.arraycopy(a, 0, c, 0, a.length); System.arraycopy(b, 0, c, a.length, b.length); @@ -321,10 +317,10 @@ return StringArrayConfigurer.arrayToString(list); } else if (CONFIG_LIST.equals(key)) { - return configList + ""; + return configList + ""; //$NON-NLS-1$ } else if (CONFIG_FIRST.equals(key)) { - return configFirst + ""; + return configFirst + ""; //$NON-NLS-1$ } else if (PROMPT.equals(key)) { return prompt; @@ -367,12 +363,15 @@ private static final long serialVersionUID = 1L; public ConfigDialog() { - super(GameModule.getGameModule().getFrame(), "Configure " + getConfigureName()); + super(GameModule.getGameModule().getFrame(), Resources.getString("TurnTracker.configure2", getConfigureName())); //$NON-NLS-1$ Container pane = getContentPane(); pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); if (configFirst) { - StringEnumConfigurer firstItem = new StringEnumConfigurer("", prompt + " : ", list); + if (prompt == null) { + prompt = "First " + getConfigureName() + " each " + parent.getConfigureName(); + } + StringEnumConfigurer firstItem = new StringEnumConfigurer("", prompt + " : ", list); //$NON-NLS-1$ //$NON-NLS-2$ firstItem.setValue(list[first]); firstItem.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { @@ -388,6 +387,8 @@ } if (configList) { + + pane.add(new JLabel(Resources.getString("TurnTracker.turn_off"))); //$NON-NLS-1$ for (int i = 0; i < list.length; i++) { BooleanConfigurer b = new BooleanConfigurer(null, list[i], new Boolean(active[i])); @@ -408,8 +409,8 @@ JPanel p = new JPanel(); - JButton saveButton = new JButton("Save"); - saveButton.setToolTipText("Save Changes"); + JButton saveButton = new JButton(Resources.getString(Resources.SAVE)); + saveButton.setToolTipText(Resources.getString("TurnTracker.save_changes")); //$NON-NLS-1$ p.add(saveButton); saveButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -417,8 +418,8 @@ } }); - JButton cancelButton = new JButton("Cancel"); - cancelButton.setToolTipText("Discard Changes"); + JButton cancelButton = new JButton(Resources.getString(Resources.CANCEL)); + cancelButton.setToolTipText(Resources.getString("TurnTracker.discard_changes")); //$NON-NLS-1$ cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(false); Copied: VASSAL-src/trunk/VASSAL/build/module/turn/TurnGlobalHotkey.java (from rev 2244, VASSAL-src/branches/swampwallaby-merge/VASSAL/build/module/turn/TurnGlobalHotkey.java) =================================================================== --- VASSAL-src/trunk/VASSAL/build/module/turn/TurnGlobalHotkey.java (rev 0) +++ VASSAL-src/trunk/VASSAL/build/module/turn/TurnGlobalHotkey.java 2007-06-25 04:00:34 UTC (rev 2245) @@ -0,0 +1,117 @@ +package VASSAL.build.module.turn; + +import javax.swing.KeyStroke; + +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.HotKeyConfigurer; +import VASSAL.configure.PlayerIdFormattedStringConfigurer; +import VASSAL.configure.PropertyExpression; +import VASSAL.counters.BasicPiece; +import VASSAL.i18n.TranslatableConfigurerFactory; +import VASSAL.tools.FormattedString; + +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 KeyStroke 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, KeyStroke.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 HotKeyConfigurer.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 = HotKeyConfigurer.decode((String) value); + } + hotkey = (KeyStroke) 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 HelpFile getHelpFile() { + return HelpFile.getReferenceManualPage("TurnTracker.htm","GlobalKey"); //$NON-NLS-1$ //$NON-NLS-2$ + } + + public void removeFrom(Buildable parent) { + + } + + public void addTo(Buildable parent) { + + } + + public static String getConfigureTypeName() { + return "Global Hotkey"; + } + + 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); + } + } + } +} \ No newline at end of file Deleted: VASSAL-src/trunk/VASSAL/build/module/turn/TurnGlobalKeyCommand.java =================================================================== --- VASSAL-src/trunk/VASSAL/build/module/turn/TurnGlobalKeyCommand.java 2007-06-24 02:28:47 UTC (rev 2244) +++ VASSAL-src/trunk/VASSAL/build/module/turn/TurnGlobalKeyCommand.java 2007-06-25 04:00:34 UTC (rev 2245) @@ -1,95 +0,0 @@ -package VASSAL.build.module.turn; - -import java.util.Collection; -import VASSAL.build.Buildable; -import VASSAL.build.GameModule; -import VASSAL.build.module.Map; -import VASSAL.build.module.map.MassKeyCommand; -import VASSAL.configure.VisibilityCondition; -import VASSAL.counters.BasicPiece; -import VASSAL.counters.PieceFilter; -import VASSAL.counters.PropertiesPieceFilter; - -public class TurnGlobalKeyCommand extends MassKeyCommand { - - public static final String CHECK = "check"; - - protected String checkProperties = ""; - protected PieceFilter checkFilter; - protected BasicPiece checkPiece = new BasicPiece(); - - public TurnGlobalKeyCommand() { - super(); - } - - public void addTo(Buildable parent) { - } - - public void removeFrom(Buildable parent) { - } - - - public void apply() { - if (checkFilter.accept(checkPiece)) { - Collection<Map> l = GameModule.getGameModule().getComponentsOf(Map.class); - GameModule.getGameModule().sendAndLog(globalCommand.apply((Map[]) l.toArray(new Map[l.size()]),filter)); - } - } - - public VisibilityCondition getAttributeVisibility(String name) { - if (ICON.equals(name) || TOOLTIP.equals(name) || BUTTON_TEXT.equals(name) || HOTKEY.equals(name) || AFFECTED_PIECE_NAMES.equals(name)) { - return new VisibilityCondition() { - public boolean shouldBeVisible() { - return false; - } - }; - } - else { - return super.getAttributeVisibility(name); - } - } - - public String[] getAttributeDescriptions() { - String[] a = super.getAttributeDescriptions(); - String[] b = new String[a.length+1]; - b[0] = "Run when Global Properties match"; - System.arraycopy(a, 0, b, 1, a.length); - return b; - } - - public String[] getAttributeNames() { - String[] a = super.getAttributeNames(); - String[] b = new String[a.length+1]; - b[0] = CHECK; - System.arraycopy(a, 0, b, 1, a.length); - return b; - } - - public Class[] getAttributeTypes() { - Class[] a = super.getAttributeTypes(); - Class[] b = new Class[a.length+1]; - b[0] = String.class; - System.arraycopy(a, 0, b, 1, a.length); - return b; - } - - public String getAttributeValueString(String key) { - if (CHECK.equals(key)) { - return checkProperties; - } - else { - return super.getAttributeValueString(key); - } - } - - public void setAttribute(String key, Object value) { - if (CHECK.equals(key)) { - checkProperties = (String) value; - checkFilter = PropertiesPieceFilter.parse(checkProperties); - } - else { - super.setAttribute(key, value); - } - } - -} Modified: VASSAL-src/trunk/VASSAL/build/module/turn/TurnLevel.java =================================================================== --- VASSAL-src/trunk/VASSAL/build/module/turn/TurnLevel.java 2007-06-24 02:28:47 UTC (rev 2244) +++ VASSAL-src/trunk/VASSAL/build/module/turn/TurnLevel.java 2007-06-25 04:00:34 UTC (rev 2245) @@ -44,15 +44,17 @@ public abstract class TurnLevel extends TurnComponent { - protected static final String NAME = "name"; - protected static final String TURN_FORMAT = "turnFormat"; + protected static final String NAME = "name"; //$NON-NLS-1$ + protected static final String PROP = "property"; //$NON-NLS-1$ + protected static final String TURN_FORMAT = "turnFormat"; //$NON-NLS-1$ + protected static final String LEVEL_VALUE = "value"; //$NON-NLS-1$ - protected static final String LEVEL_VALUE = "value"; - protected TurnTracker turn; protected JDialog setDialog; protected JPanel levelSetControls = null; protected Component childSetControls = null; + protected TurnComponent parent = null; + protected String propertyName; protected int start = 0; // Counter Start value @@ -62,7 +64,7 @@ protected boolean subLevelRolledOver = false; protected boolean rolledOver = false; - protected MutableProperty.Impl myValue = new MutableProperty.Impl("",this); + protected MutableProperty.Impl myValue = new MutableProperty.Impl("",this); //$NON-NLS-1$ protected FormattedString turnFormat; @@ -78,7 +80,7 @@ public TurnLevel() { super(); - turnFormat = new FormattedString("$" + LEVEL_VALUE + "$"); + turnFormat = new FormattedString("$" + LEVEL_VALUE + "$"); //$NON-NLS-1$ //$NON-NLS-2$ } protected boolean hasSubLevelRolledOver() { @@ -273,22 +275,25 @@ } public String[] getAttributeDescriptions() { - return new String[] { "Name: ", "Turn Format: " }; + return new String[] { "Description: ", "Property Name: ", "Turn Level Format: " }; } public Class[] getAttributeTypes() { - return new Class[] { String.class, TurnFormatConfig.class }; + return new Class[] { String.class, String.class, TurnFormatConfig.class }; } public String[] getAttributeNames() { - return new String[] { NAME, TURN_FORMAT }; + return new String[] { NAME, PROP, TURN_FORMAT }; } public void setAttribute(String key, Object value) { if (NAME.equals(key)) { setConfigureName((String) value); - myValue.setPropertyName(getConfigureName()); } + else if (PROP.equals(key)) { + propertyName = (String) value; + myValue.setPropertyName(propertyName); + } else if (TURN_FORMAT.equals(key)) { turnFormat.setFormat((String) value); } @@ -301,12 +306,16 @@ else if (TURN_FORMAT.equals(key)) { return turnFormat.getFormat(); } + else if (PROP.equals(key)) { + return propertyName; + } else { - return ""; + return ""; //$NON-NLS-1$ } } public void addTo(Buildable parent) { + this.parent = (TurnComponent) parent; ((TurnComponent) parent).addLevel(this); myValue.addTo(GameModule.getGameModule()); } Modified: VASSAL-src/trunk/VASSAL/build/module/turn/TurnTracker.java =================================================================== --- VASSAL-src/trunk/VASSAL/build/module/turn/TurnTracker.java 2007-06-24 02:28:47 UTC (rev 2244) +++ VASSAL-src/trunk/VASSAL/build/module/turn/TurnTracker.java 2007-06-25 04:00:34 UTC (rev 2245) @@ -38,9 +38,9 @@ import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; import java.util.ArrayList; import java.util.Iterator; + import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; @@ -51,10 +51,11 @@ import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; -import javax.swing.JTextArea; import javax.swing.KeyStroke; +import javax.swing.SwingConstants; import javax.swing.border.BevelBorder; import javax.swing.border.Border; + import VASSAL.build.AutoConfigurable; import VASSAL.build.Buildable; import VASSAL.build.GameModule; @@ -66,15 +67,18 @@ import VASSAL.build.module.properties.MutableProperty; import VASSAL.command.Command; import VASSAL.command.CommandEncoder; -import VASSAL.configure.ColorConfigurer; +import VASSAL.configure.BooleanConfigurer; import VASSAL.configure.Configurer; import VASSAL.configure.ConfigurerFactory; import VASSAL.configure.FormattedStringConfigurer; +import VASSAL.configure.HotKeyConfigurer; import VASSAL.configure.IconConfigurer; import VASSAL.configure.IntConfigurer; import VASSAL.configure.PlayerIdFormattedStringConfigurer; import VASSAL.configure.StringEnumConfigurer; +import VASSAL.i18n.Resources; import VASSAL.tools.FormattedString; +import VASSAL.tools.KeyStrokeListener; import VASSAL.tools.LaunchButton; import VASSAL.tools.SequenceEncoder; import VASSAL.tools.UniqueIdManager; @@ -84,83 +88,132 @@ */ public class TurnTracker extends TurnComponent implements CommandEncoder, GameComponent, ActionListener, UniqueIdManager.Identifyable { - protected static UniqueIdManager idMgr = new UniqueIdManager("TurnTracker"); - protected PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this); + protected static UniqueIdManager idMgr = new UniqueIdManager("TurnTracker"); //$NON-NLS-1$ - protected static final String COMMAND_PREFIX = "TURN"; - public static final String VERSION = "1.8"; + protected static final String COMMAND_PREFIX = "TURN"; //$NON-NLS-1$ - public static final String NAME = "name"; - public static final String HOT_KEY = "hotkey"; - public static final String ICON = "icon"; - public static final String BUTTON_TEXT = "buttonText"; - public static final String TURN_FORMAT = "turnFormat"; - public static final String REPORT_FORMAT = "reportFormat"; - public static final String COLOR = "color"; - public static final String TOOLTIP = "tooltip"; - public static final String LENGTH = "length"; + public static final String NAME = "name"; //$NON-NLS-1$ + public static final String HOT_KEY = "hotkey"; //$NON-NLS-1$ + public static final String NEXT_HOT_KEY = "nexthotkey"; //$NON-NLS-1$ + public static final String PREV_HOT_KEY = "prevhotkey"; //$NON-NLS-1$ + public static final String ICON = "icon"; //$NON-NLS-1$ + public static final String BUTTON_TEXT = "buttonText"; //$NON-NLS-1$ + public static final String TURN_FORMAT = "turnFormat"; //$NON-NLS-1$ + public static final String REPORT_FORMAT = "reportFormat"; //$NON-NLS-1$ + public static final String TOOLTIP = "tooltip"; //$NON-NLS-1$ + public static final String LENGTH = "length"; //$NON-NLS-1$ - private static final String FONT_SIZE = "size"; - private static final String FONT_STYLE = "style"; + protected static final String FONT_SIZE = "turnFontSize"; //$NON-NLS-1$ + protected static final String FONT_BOLD = "turnFontBold"; //$NON-NLS-1$ + protected static final String DOCKED = "turnDocked"; //$NON-NLS-1$ /** Variable name for reporting format */ - public static final String OLD_TURN = "oldTurn"; - public static final String NEW_TURN = "newTurn"; - public static final String LEVEL = "level"; + protected static final String OLD_TURN = "oldTurn"; //$NON-NLS-1$ + protected static final String NEW_TURN = "newTurn"; //$NON-NLS-1$ + protected static final String LEVEL = "level"; //$NON-NLS-1$ - public static final String TURN_FONT = "Dialog"; - public static final String SET_COMMAND = "Set Turn"; - public static final String PLAIN_COMMAND = "Plain"; - public static final String BOLD_COMMAND = "Bold"; + protected static final String TURN_FONT = "Dialog"; + protected static String SET_COMMAND; + protected static String DOCK_COMMAND; + protected static String UNDOCK_COMMAND; - public static final String NEXT = "Next"; - public static final String PREV = "Prev"; - public static final String SET = "Set"; + protected static final String NEXT = "Next"; + protected static final String PREV = "Prev"; + protected static final String SET = "Set"; - public static final String PROP_VALUE = "_value"; - public static final String PROP_NAME = "_name"; - public static final String PROP_COMMAND = "_command"; + protected static final String PROP_VALUE = "_value"; //$NON-NLS-1$ + protected static final String PROP_COMMAND = "_command"; //$NON-NLS-1$ - public static final String[] FONT_FAMILYS = new String[] { "Dialog", "DialogInput", "Monospaced", "SanSerif", "Serif"}; + protected static final String[] FONT_FAMILYS = new String[] { "Dialog", "DialogInput", "Monospaced", "SanSerif", "Serif"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - protected FormattedString turnFormat = new FormattedString("$"+LEVEL+"1$ $"+LEVEL+"2$ $"+LEVEL+"3$ $"+LEVEL+"4$"); + protected FormattedString turnFormat = new FormattedString("$"+LEVEL+"1$ $"+LEVEL+"2$ $"+LEVEL+"3$ $"+LEVEL+"4$"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - protected FormattedString reportFormat = new FormattedString("* <$" + GlobalOptions.PLAYER_ID - + "$> Turn Updated from $"+OLD_TURN+"$ to $"+NEW_TURN+"$"); - - protected Color color = Color.white; + protected FormattedString reportFormat = new FormattedString("* <$" + GlobalOptions.PLAYER_ID //$NON-NLS-1$ + + "$> Turn Updated from $"+OLD_TURN+"$ to $"+NEW_TURN+"$"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ protected TurnWindow turnWindow; + protected TurnWidget turnWidget; + protected JPanel launchWidget; protected SetDialog setDialog; protected LaunchButton launch; - protected JTextArea turnLabel = new JTextArea(); - protected String tooltip = "Right-click to configure"; - protected int length = 0; + protected KeyStrokeListener nextListener; + protected KeyStrokeListener prevListener; - protected String savedState = ""; - protected String savedSetState = ""; - protected String savedTurn = ""; + protected String savedState = ""; //$NON-NLS-1$ + protected String savedSetState = ""; //$NON-NLS-1$ + protected String savedTurn = ""; //$NON-NLS-1$ protected JPopupMenu popup; protected int currentLevel = 0; protected String id; + protected int width; protected MutableProperty.Impl lastCommand = new MutableProperty.Impl(SET,this); + protected MutableProperty.Impl lastTurn = new MutableProperty.Impl("",this); public TurnTracker() { ActionListener al = new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { - turnWindow.setControls(); - turnWindow.setVisible(!turnWindow.isShowing()); + if (!isDocked()) { + turnWindow.setControls(); + turnWindow.setVisible(!turnWindow.isShowing()); + } } }; - launch = new LaunchButton("Turn", BUTTON_TEXT, HOT_KEY, ICON, al); - launch.setToolTipText("Turn Tracker"); - launch.setEnabled(false); + setConfigureName(Resources.getString("TurnTracker.turn")); //$NON-NLS-1$ + launch = new LaunchButton(Resources.getString("TurnTracker.turn"), BUTTON_TEXT, HOT_KEY, ICON, al); //$NON-NLS-1$ + launch.setToolTipText(Resources.getString("TurnTracker.turn_tracker")); //$NON-NLS-1$ + SET_COMMAND = Resources.getString("TurnTracker.set_turn"); //$NON-NLS-1$ + DOCK_COMMAND = Resources.getString("General.dock"); //$NON-NLS-1$ + UNDOCK_COMMAND = Resources.getString("General.undock"); //$NON-NLS-1$ + + // Create preferences + final IntConfigurer size = new IntConfigurer(FONT_SIZE, Resources.getString("TurnTracker.size_pref"), new Integer(14)); //$NON-NLS-1$ + final BooleanConfigurer bold = new BooleanConfigurer(FONT_BOLD, Resources.getString("TurnTracker.bold_pref"), new Boolean(false)); //$NON-NLS-1$ + final BooleanConfigurer docked = new BooleanConfigurer(DOCKED, Resources.getString("TurnTracker.docked_pref"), new Boolean(false)); //$NON-NLS-1$ + + String prefTab = Resources.getString("TurnTracker.turn_counter"); //$NON-NLS-1$ + GameModule.getGameModule().getPrefs().addOption(prefTab, size); + GameModule.getGameModule().getPrefs().addOption(prefTab, bold); + GameModule.getGameModule().getPrefs().addOption(prefTab, docked); + + size.addPropertyChangeListener(new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent e) { + setDisplayFont(); + }}); + + bold.addPropertyChangeListener(new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent e) { + setDisplayFont(); + }}); + + docked.addPropertyChangeListener(new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent e) { + setDocked(isDocked(), false); + }}); + + // Set up listeners for prev/next hotkeys + nextListener = new KeyStrokeListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + turnWidget.doNext(); + } + }); + GameModule.getGameModule().addKeyStrokeListener(nextListener); + + prevListener = new KeyStrokeListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + turnWidget.doPrev(); + } + }); + GameModule.getGameModule().addKeyStrokeListener(prevListener); + + // Create the displayable widget + turnWidget = new TurnWidget(); } + public String getState() { SequenceEncoder se = new SequenceEncoder('|'); se.append(currentLevel); @@ -178,7 +231,7 @@ Iterator i = getTurnLevels(); while (i.hasNext()) { TurnLevel level = (TurnLevel) i.next(); - level.setState(sd.nextToken("")); + level.setState(sd.nextToken("")); //$NON-NLS-1$ } setLaunchToolTip(); @@ -193,7 +246,7 @@ * Module level Configuration stuff */ public String[] getAttributeNames() { - return new String[] { NAME, BUTTON_TEXT, ICON, HOT_KEY, COLOR, TURN_FORMAT, REPORT_FORMAT, TOOLTIP, LENGTH }; + return new String[] { NAME, BUTTON_TEXT, ICON, HOT_KEY, NEXT_HOT_KEY, PREV_HOT_KEY, TURN_FORMAT, REPORT_FORMAT, TOOLTIP, LENGTH }; } public void setAttribute(String key, Object value) { @@ -201,6 +254,7 @@ clearGlobalProperties(); setConfigureName((String) value); lastCommand.setPropertyName(getConfigureName()+PROP_COMMAND); + lastTurn.setPropertyName(getConfigureName()+PROP_VALUE); } else if (REPORT_FORMAT.equals(key)) { reportFormat.setFormat((String) value); @@ -209,30 +263,35 @@ turnFormat.setFormat((String) value); } else if (TOOLTIP.equals(key)) { - tooltip = ((String) value); - turnLabel.setToolTipText(tooltip); + turnWidget.setLabelToolTipText((String) value); } else if (LENGTH.equals(key)) { if (value instanceof String) { value = new Integer((String) value); } - length = ((Integer) value).intValue(); - turnLabel.setColumns(length); + width = ((Integer) value).intValue(); + turnWidget.setWidth(width); } - else if (COLOR.equals(key)) { + else if (NEXT_HOT_KEY.equals(key)) { if (value instanceof String) { - value = ColorConfigurer.stringToColor((String) value); + value = HotKeyConfigurer.decode((String) value); } - color = (Color) value; + nextListener.setKeyStroke((KeyStroke) value); } + else if (PREV_HOT_KEY.equals(key)) { + if (value instanceof String) { + value = HotKeyConfigurer.decode((String) value); + } + prevListener.setKeyStroke((KeyStroke) value); + } else { launch.setAttribute(key, value); } } protected void setDisplayFont() { - turnLabel.setFont(getDisplayFont()); - if (turnWindow != null) { + turnWidget.setLabelFont(getDisplayFont()); + if (!isDocked() && turnWindow != null) { turnWindow.pack(); } } @@ -242,28 +301,43 @@ int size = getFontSize(); return new Font(TURN_FONT, style, size); } - - protected void setFontStyle(int style) { - GameModule.getGameModule().getPrefs().setValue(FONT_STYLE, new Integer(style)); + + protected void setFontSize() { setDisplayFont(); } + protected int getFontSize() { + return ((Integer) GameModule.getGameModule().getPrefs().getValue(FONT_SIZE)).intValue(); + } + protected int getFontStyle() { - return ((Integer) GameModule.getGameModule().getPrefs().getValue(FONT_STYLE)).intValue(); + return ((Boolean) GameModule.getGameModule().getPrefs().getValue(FONT_BOLD)).booleanValue() ? 1 : 0; } - protected void setFontSize(int size) { - GameModule.getGameModule().getPrefs().setValue(FONT_SIZE, new Integer(size)); - setDisplayFont(); + protected boolean isDocked() { + return ((Boolean) GameModule.getGameModule().getPrefs().getValue(DOCKED)).booleanValue(); } - protected int getFontSize() { - return ((Integer) GameModule.getGameModule().getPrefs().getValue(FONT_SIZE)).intValue(); + protected void setDocked(boolean dock, boolean initializing) { + GameModule.getGameModule().getPrefs().setValue(DOCKED, new Boolean(dock)); + launch.setVisible(!dock); + if (dock) { + turnWindow.setWidget(null); + turnWindow.setVisible(false); + launchWidget.add(turnWidget, BorderLayout.CENTER); + launchWidget.setVisible(!initializing); + } + else { + launchWidget.setVisible(false); + launchWidget.remove(turnWidget); + turnWindow.setWidget(turnWidget); + turnWindow.setVisible(!initializing); + } } public String getAttributeValueString(String key) { if (NAME.equals(key)) { - return getConfigureName() + ""; + return getConfigureName() + ""; //$NON-NLS-1$ } else if (REPORT_FORMAT.equals(key)) { return reportFormat.getFormat(); @@ -272,26 +346,29 @@ return turnFormat.getFormat(); } else if (TOOLTIP.equals(key)) { - return tooltip; + return turnWidget.getLabelToolTipText(); } - else if (COLOR.equals(key)) { - return ColorConfigurer.colorToString(color); - } else if (LENGTH.equals(key)) { - return String.valueOf(length); + return String.valueOf(width); } + else if (NEXT_HOT_KEY.equals(key)) { + return HotKeyConfigurer.encode(nextListener.getKeyStroke()); + } + else if (PREV_HOT_KEY.equals(key)) { + return HotKeyConfigurer.encode(prevListener.getKeyStroke()); + } else { return launch.getAttributeValueString(key); } } public String[] getAttributeDescriptions() { - return new String[] { "Name: ", "Button text: ", "Button Icon: ", "Hotkey: ", "Background Color: ", - "Turn Format", "Report Format: ", "Display Tooltip Text: ", "Display length of Turn label (0 for variable): " }; + return new String[] { "Name: ", "Button text: ", "Button Icon: ", "Show/hide Hotkey: ", "Next Turn Hotkey: ", "Previous Turn Hotkey: ", + "Turn Name Format: ", "Report Format: ", "Turn Label Tooltip Text: ", "Turn label Display length (Pixels, 0 for variable): " }; } public Class[] getAttributeTypes() { - return new Class[] { String.class, String.class, IconConfig.class, KeyStroke.class, Color.class, + return new Class[] { String.class, String.class, IconConfig.class, KeyStroke.class, KeyStroke.class, KeyStroke.class, TurnFormatConfig.class, ReportFormatConfig.class, String.class, Integer.class }; } @@ -320,48 +397,54 @@ public Class[] getAllowableConfigureComponents() { - return new Class[] { CounterTurnLevel.class, ListTurnLevel.class, TurnGlobalKeyCommand.class }; + return new Class[] { CounterTurnLevel.class, ListTurnLevel.class, TurnGlobalHotkey.class }; } public static String getConfigureTypeName() { - return "Turn Tracker v"+VERSION; + return "Turn Counter"; } public void addTo(Buildable b) { + //Create the turn window + turnWindow = new TurnWindow(); + turnWindow.pack(); + turnWindow.setVisible(false); + + launchWidget = new JPanel(); + launchWidget.setLayout(new BorderLayout()); + launchWidget.setBorder(BorderFactory.createEtchedBorder()); + GameModule.getGameModule().getToolBar().add(launchWidget); + launchWidget.setAlignmentY(0.0F); + launchWidget.setVisible(false); + GameModule.getGameModule().getToolBar().add(launch); launch.setAlignmentY(0.0F); + launch.setEnabled(false); + + setDocked(isDocked(), true); + GameModule.getGameModule().addCommandEncoder(this); GameModule.getGameModule().getGameState().addGameComponent(this); idMgr.add(this); - - // Create preferences for Turn text - final IntConfigurer size = new IntConfigurer(FONT_SIZE, "", new Integer(14)); - final IntConfigurer style = new IntConfigurer(FONT_STYLE, "", new Integer(Font.BOLD)); - - GameModule.getGameModule().getPrefs().addOption(null, size); - GameModule.getGameModule().getPrefs().addOption(null, style); - + //Global Property support -// propertyChangeSupport.addPropertyChangeListener(((MutablePropertiesContainer) b).getPropertyListener()); lastCommand.addTo((MutablePropertiesContainer) b); - - //Create the turn window - turnWindow = new TurnWindow(); - turnWindow.setColor(color); - turnWindow.pack(); - + lastTurn.addTo((MutablePropertiesContainer) b); + } public void removeFrom(Buildable b) { GameModule.getGameModule().getToolBar().remove(launch); + GameModule.getGameModule().getToolBar().remove(launchWidget); GameModule.getGameModule().removeCommandEncoder(this); GameModule.getGameModule().getGameState().removeGameComponent(this); lastCommand.removeFromContainer(); + lastTurn.removeFromContainer(); clearGlobalProperties(); } public HelpFile getHelpFile() { - return null; + return HelpFile.getReferenceManualPage("TurnTracker.htm"); //$NON-NLS-1$ //$NON-NLS-2$ } public void setId(String id) { @@ -384,7 +467,7 @@ reportFormat.setProperty(OLD_TURN, savedTurn); reportFormat.setProperty(NEW_TURN, getTurnString()); - String s = updateString(reportFormat.getText(), new String[] { "\\n", "\\t" }, new String[] { " - ", " " }); + String s = updateString(reportFormat.getText(), new String[] { "\\n", "\\t" }, new String[] { " - ", " " }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ Command c = new Chatter.DisplayText(GameModule.getGameModule().ge... [truncated message content] |