[vassalengine-svn] SF.net SVN: vassalengine: [3365] VASSAL-src/branches/uckelman-working
Brought to you by:
rodneykinney,
uckelman
From: <uck...@us...> - 2008-03-25 18:12:39
|
Revision: 3365 http://vassalengine.svn.sourceforge.net/vassalengine/?rev=3365&view=rev Author: uckelman Date: 2008-03-25 11:10:42 -0700 (Tue, 25 Mar 2008) Log Message: ----------- State of working branch prior to app split. Modified Paths: -------------- VASSAL-src/branches/uckelman-working/dist/macosx/Info.plist VASSAL-src/branches/uckelman-working/src/VASSAL/Info.java VASSAL-src/branches/uckelman-working/src/VASSAL/build/GameModule.java VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/BasicLogger.java VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/Documentation.java VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/GameState.java VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/PredefinedSetup.java VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/AboutScreen.java VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/BrowserHelpFile.java VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/HelpFile.java VASSAL-src/branches/uckelman-working/src/VASSAL/configure/ConfigureTree.java VASSAL-src/branches/uckelman-working/src/VASSAL/configure/ShowHelpAction.java VASSAL-src/branches/uckelman-working/src/VASSAL/configure/TranslateVassalAction.java VASSAL-src/branches/uckelman-working/src/VASSAL/i18n/Editor.properties VASSAL-src/branches/uckelman-working/src/VASSAL/launch/AboutVASSAL.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/BasicModule.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/CreateModuleAction.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/EditModuleAction.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/EditorWindow.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ExtensionEditorWindow.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/GameModuleAction.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/Main.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ModuleEditorWindow.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ModuleManager.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/PlayerWindow.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ShutDownAction.java VASSAL-src/branches/uckelman-working/src/VASSAL/tools/FileChooser.java VASSAL-src/branches/uckelman-working/src/VASSAL/tools/OrderedMenu.java VASSAL-src/branches/uckelman-working/src/VASSAL/tools/UsernameAndPasswordDialog.java VASSAL-src/branches/uckelman-working/src/VASSAL/tools/imports/ImportAction.java Added Paths: ----------- VASSAL-src/branches/uckelman-working/lib/AppleJavaExtensions.jar VASSAL-src/branches/uckelman-working/lib/swing-layout-1.0.3.jar VASSAL-src/branches/uckelman-working/src/VASSAL/launch/os/ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/os/MacOSX.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/os/macos/ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/os/macos/MacOS.java VASSAL-src/branches/uckelman-working/src/VASSAL/launch/os/windows/ VASSAL-src/branches/uckelman-working/src/VASSAL/tools/ActionManager.java VASSAL-src/branches/uckelman-working/src/VASSAL/tools/MenuManager.java VASSAL-src/branches/uckelman-working/src/VASSAL/tools/UIUtils.java Modified: VASSAL-src/branches/uckelman-working/dist/macosx/Info.plist =================================================================== --- VASSAL-src/branches/uckelman-working/dist/macosx/Info.plist 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/dist/macosx/Info.plist 2008-03-25 18:10:42 UTC (rev 3365) @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple. +com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleName</key> Added: VASSAL-src/branches/uckelman-working/lib/AppleJavaExtensions.jar =================================================================== (Binary files differ) Property changes on: VASSAL-src/branches/uckelman-working/lib/AppleJavaExtensions.jar ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Added: VASSAL-src/branches/uckelman-working/lib/swing-layout-1.0.3.jar =================================================================== (Binary files differ) Property changes on: VASSAL-src/branches/uckelman-working/lib/swing-layout-1.0.3.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/Info.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/Info.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/Info.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -32,7 +32,7 @@ * Class for storing release-related information */ public final class Info { - private static final String VERSION = "3.1.0-svn3360"; //$NON-NLS-1$ + private static final String VERSION = "3.1.0-svn3365"; //$NON-NLS-1$ private static File homeDir; private static final boolean isWindows; Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/build/GameModule.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/build/GameModule.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/build/GameModule.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -31,7 +31,6 @@ import javax.swing.JComponent; import javax.swing.JFrame; -import javax.swing.JMenu; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JToolBar; @@ -283,7 +282,10 @@ } public String[] getAttributeDescriptions() { - return new String[]{Resources.getString("Editor.GameModule.name_label"), Resources.getString("Editor.GameModule.version_label")}; //$NON-NLS-1$ //$NON-NLS-2$ + return new String[]{ + Resources.getString("Editor.GameModule.name_label"), //$NON-NLS-1$ + Resources.getString("Editor.GameModule.version_label") //$NON-NLS-1$ + }; } public Class<?>[] getAttributeTypes() { @@ -601,20 +603,6 @@ } /** - * @return the File menu of the command window - */ - public JMenu getFileMenu() { - return frame.getFileMenu(); - } - - /** - * @return the Help menu of the command window - */ - public JMenu getHelpMenu() { - return frame.getHelpMenu(); - } - - /** * Append the string to the title of the controls window and all Map windows * @param s If null, set the title to the default. */ @@ -929,5 +917,4 @@ return getProperty(key); } } - } Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/BasicLogger.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/BasicLogger.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/BasicLogger.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -55,6 +55,7 @@ import VASSAL.tools.BridgeStream; import VASSAL.tools.FileChooser; import VASSAL.tools.KeyStrokeListener; +import VASSAL.tools.MenuManager; import VASSAL.tools.Obfuscator; public class BasicLogger implements Logger, Buildable, GameComponent, CommandEncoder { @@ -98,8 +99,11 @@ mod.addCommandEncoder(this); mod.getGameState().addGameComponent(this); - GameModule.getGameModule().getFileMenu().add(newLogAction); - GameModule.getGameModule().getFileMenu().add(endLogAction); + final MenuManager mm = MenuManager.getInstance(); + mm.getInstance().addAction("BasicLogger.begin_logfile", newLogAction); + mm.getInstance().addAction("BasicLogger.end_logfile", endLogAction); +// GameModule.getGameModule().getFileMenu().add(newLogAction); +// GameModule.getGameModule().getFileMenu().add(endLogAction); JButton button = mod.getToolBar().add(undoAction); button.setToolTipText(Resources.getString("BasicLogger.undo_last_move")); //$NON-NLS-1$ @@ -366,7 +370,9 @@ } return null; } + protected Action undoAction = new UndoAction(); + protected Action endLogAction = new AbstractAction(Resources.getString("BasicLogger.end_logfile")) { //$NON-NLS-1$ private static final long serialVersionUID = 1L; @@ -387,6 +393,7 @@ } } }; + protected Action newLogAction = new AbstractAction(Resources.getString("BasicLogger.begin_logfile")) { //$NON-NLS-1$ private static final long serialVersionUID = 1L; Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/Documentation.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/Documentation.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/Documentation.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -20,9 +20,8 @@ import java.io.File; import java.net.MalformedURLException; - import javax.swing.JMenu; - +import javax.swing.JMenuBar; import org.w3c.dom.Element; import VASSAL.Info; @@ -36,6 +35,7 @@ import VASSAL.configure.Configurer; import VASSAL.configure.SingleChildInstance; import VASSAL.i18n.Resources; +import VASSAL.tools.MenuManager; /** * Represents the <code>Help</code> menu of the controls window @@ -45,7 +45,10 @@ } public JMenu getHelpMenu() { - return GameModule.getGameModule().getHelpMenu(); + final JMenuBar mb = + MenuManager.getInstance().getMenuBar(MenuManager.PLAYER); + return mb.getMenu(mb.getMenuCount()-1); +// return GameModule.getGameModule().getHelpMenu(); } public void build(Element el) { Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/GameState.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/GameState.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/GameState.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -35,6 +35,8 @@ import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import javax.swing.Action; +import javax.swing.AbstractAction; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JOptionPane; @@ -55,6 +57,7 @@ import VASSAL.tools.BridgeStream; import VASSAL.tools.Deobfuscator; import VASSAL.tools.FileChooser; +import VASSAL.tools.MenuManager; import VASSAL.tools.Obfuscator; // FIXME: switch back to javax.swing.SwingWorker on move to Java 1.6 @@ -70,7 +73,8 @@ protected Map<String,GamePiece> pieces = new HashMap<String,GamePiece>(); protected List<GameComponent> gameComponents = new ArrayList<GameComponent>(); protected List<GameSetupStep> setupSteps = new ArrayList<GameSetupStep>(); - protected JMenuItem loadGame, saveGame, newGame, closeGame; +// protected JMenuItem loadGame, saveGame, newGame, closeGame; + protected Action loadGame, saveGame, newGame, closeGame; protected String lastSave; protected DirectoryConfigurer savedGameDirectoryPreference; @@ -83,43 +87,55 @@ * entries to the <code>File</code> menu of the controls window */ public void addTo(GameModule mod) { - loadGame = new JMenuItem(Resources.getString("GameState.load_game")); //$NON-NLS-1$ - loadGame.addActionListener(new ActionListener() { + loadGame = new AbstractAction(Resources.getString("GameState.load_game")) { + private static final long serialVersionUID = 1L; + public void actionPerformed(ActionEvent e) { loadGame(); } - }); - loadGame.setMnemonic('L'); + }; +// loadGame.setProperty(Action.MNEMONIC_KEY, 'L'); - saveGame = new JMenuItem(Resources.getString("GameState.save_game")); //$NON-NLS-1$ - saveGame.addActionListener(new ActionListener() { + saveGame = new AbstractAction(Resources.getString("GameState.save_game")) { + private static final long serialVersionUID = 1L; + public void actionPerformed(ActionEvent e) { saveGame(); } - }); - saveGame.setMnemonic('S'); + }; +// saveGame.setProperty(Action.MNEMONIC_KEY, 'S'); - newGame = new JMenuItem(Resources.getString("GameState.new_game")); //$NON-NLS-1$ - newGame.addActionListener(new ActionListener() { + newGame = new AbstractAction(Resources.getString("GameState.new_game")) { + private static final long serialVersionUID = 1L; + public void actionPerformed(ActionEvent e) { setup(false); setup(true); } - }); - newGame.setMnemonic('N'); + }; +// newGame.setProperty(Action.MNEMONIC_KEY, 'N'); - closeGame = new JMenuItem(Resources.getString("GameState.close_game")); //$NON-NLS-1$ - closeGame.addActionListener(new ActionListener() { + closeGame = new AbstractAction( + Resources.getString("GameState.close_game")) { + private static final long serialVersionUID = 1L; + public void actionPerformed(ActionEvent e) { setup(false); } - }); - closeGame.setMnemonic('C'); + }; +// closeGame.setProperty(Action.MNEMONIC_KEY, 'C'); + final MenuManager mm = MenuManager.getInstance(); + mm.addAction("GameState.new_game", newGame); + mm.addAction("GameState.load_game", loadGame); + mm.addAction("GameState.save_game", saveGame); + mm.addAction("GameState.close_game", closeGame); +/* GameModule.getGameModule().getFileMenu().add(newGame); GameModule.getGameModule().getFileMenu().add(loadGame); GameModule.getGameModule().getFileMenu().add(saveGame); GameModule.getGameModule().getFileMenu().add(closeGame); +*/ saveGame.setEnabled(gameStarting); closeGame.setEnabled(gameStarting); @@ -227,11 +243,13 @@ closeGame.setEnabled(gameStarting); if (gameStarting) { - loadGame.setText(Resources.getString("GameState.load_continuation")); //$NON-NLS-1$ + loadGame.putValue(Action.NAME, Resources.getString("GameState.load_continuation")); +// loadGame.setText(Resources.getString("GameState.load_continuation")); //$NON-NLS-1$ GameModule.getGameModule().getWizardSupport().showGameSetupWizard(); } else { - loadGame.setText(Resources.getString("GameState.load_game")); //$NON-NLS-1$ + loadGame.putValue(Action.NAME, Resources.getString("GameState.load_game")); +// loadGame.setText(Resources.getString("GameState.load_game")); //$NON-NLS-1$ GameModule.getGameModule().appendToTitle(null); } Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/PredefinedSetup.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/PredefinedSetup.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/PredefinedSetup.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -25,12 +25,14 @@ import java.io.InputStream; import javax.swing.JMenu; import javax.swing.JMenuItem; + import VASSAL.build.AbstractConfigurable; import VASSAL.build.Buildable; import VASSAL.build.GameModule; import VASSAL.build.module.documentation.HelpFile; import VASSAL.configure.VisibilityCondition; import VASSAL.i18n.Resources; +import VASSAL.tools.MenuManager; /** * Defines a saved game that is accessible from the File menu. @@ -196,10 +198,15 @@ public void addTo(Buildable parent) { if (parent instanceof GameModule) { + final MenuManager mm = MenuManager.getInstance(); + originalItem = mm.getMenuItem("GameState.new_game"); + mm.addMenuItem("GameState.new_game", getMenuInUse()); +/* JMenu fileMenu = GameModule.getGameModule().getFileMenu(); originalItem = (JMenuItem) fileMenu.getMenuComponent(0); fileMenu.insert(getMenuInUse(), 0); fileMenu.remove(originalItem); +*/ } else if (parent instanceof PredefinedSetup) { PredefinedSetup setup = (PredefinedSetup) parent; @@ -222,9 +229,13 @@ public void removeFrom(Buildable parent) { if (parent instanceof GameModule) { + final MenuManager mm = MenuManager.getInstance(); + mm.addMenuItem("GameState.new_game", originalItem); +/* JMenu fileMenu = GameModule.getGameModule().getFileMenu(); fileMenu.insert(originalItem, 0); fileMenu.remove(getMenuInUse()); +*/ } else if (parent instanceof PredefinedSetup) { PredefinedSetup setup = (PredefinedSetup) parent; Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/AboutScreen.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/AboutScreen.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/AboutScreen.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -240,6 +240,7 @@ } public void removeFrom(Buildable b) { +// MenuManager.getInstance().removeAction(launch); ((Documentation) b).getHelpMenu().remove(launch); } @@ -249,6 +250,7 @@ public void addTo(Buildable b) { final Documentation d = (Documentation) b; d.getHelpMenu().add(launch); +// MenuManager.getInstance().addAction(launch); if (op == null) { // use the VASSAL about image in case there is no image given Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/BrowserHelpFile.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/BrowserHelpFile.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/BrowserHelpFile.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -1,4 +1,6 @@ /* + * $Id$ + * * Copyright (c) 2000-2007 by Rodney Kinney * * This library is free software; you can redistribute it and/or @@ -29,9 +31,9 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; - +import javax.swing.AbstractAction; +import javax.swing.Action; import javax.swing.JMenuItem; - import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -51,7 +53,8 @@ import VASSAL.tools.IOUtils; /** - * Unpacks a zipped directory stored in the module and displays it in an external browser window + * Unpacks a zipped directory stored in the module and displays it in an + * external browser window. * * @author rkinney */ @@ -61,19 +64,31 @@ public static final String STARTING_PAGE = "startingPage"; //$NON-NLS-1$ protected String name; protected String startingPage; - protected JMenuItem launch; +// protected JMenuItem launch; + protected Action launch; protected URL url; protected PropertyChangeSupport propSupport = new PropertyChangeSupport(this); protected ComponentI18nData myI18nData; public BrowserHelpFile() { super(); + + launch = new AbstractAction() { + private static final long serialVersionUID = 1L; + + public void actionPerformed(ActionEvent e) { + launch(); + } + }; + +/* launch = new JMenuItem(); launch.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { launch(); } }); +*/ } public void launch() { @@ -187,7 +202,8 @@ public void setAttribute(String key, Object value) { if (TITLE.equals(key)) { name = (String) value; - launch.setText(name); +// launch.setText(name); + launch.putValue(Action.NAME, name); url = null; getI18nData().setUntranslatedValue(key, name); } @@ -197,8 +213,10 @@ } } + protected JMenuItem launchItem; + public void addTo(Buildable parent) { - ((Documentation) parent).getHelpMenu().add(launch); + launchItem = ((Documentation) parent).getHelpMenu().add(launch); } public void addPropertyChangeListener(PropertyChangeListener l) { @@ -229,13 +247,14 @@ } public void removeFrom(Buildable parent) { - ((Documentation) parent).getHelpMenu().remove(launch); + ((Documentation) parent).getHelpMenu().remove(launchItem); launch.setEnabled(false); } public static String getConfigureTypeName() { return "HTML Help File"; //$NON-NLS-1$ } + /** * The attributes we want to expose in the editor are not the same as the ones we want to save to the buildFile, so we * use this object to specify the properties in the editor. Also packs up the contents directory and saves it to the Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/HelpFile.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/HelpFile.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/build/module/documentation/HelpFile.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -24,7 +24,10 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import javax.swing.Action; +import javax.swing.AbstractAction; import javax.swing.JMenuItem; + import VASSAL.build.AbstractConfigurable; import VASSAL.build.Buildable; import VASSAL.build.GameModule; @@ -48,7 +51,8 @@ protected URL contents; protected String title; protected String fileName; - protected JMenuItem launch; +// protected JMenuItem launch; + protected Action launch; protected String fileType = ARCHIVE_ENTRY; public static String getConfigureTypeName() { @@ -56,6 +60,7 @@ } public HelpFile() { +/* launch = new JMenuItem(); setConfigureName("help"); setMenuItem(); @@ -64,6 +69,18 @@ showWindow(); } }); +*/ + setConfigureName("help"); + + launch = new AbstractAction() { + private static final long serialVersionUID = 1L; + + public void actionPerformed(ActionEvent e) { + showWindow(); + } + }; + + setMenuItem(); } @@ -164,7 +181,8 @@ } private void setMenuItem() { - launch.setText(getConfigureName()); + launch.putValue(Action.NAME, getConfigureName()); +// launch.setText(getConfigureName()); } /** @@ -196,7 +214,8 @@ if (TITLE.equals(key)) { title = (String) val; setConfigureName(title); - launch.setText(title); +// launch.setText(title); + launch.putValue(Action.NAME, title); } else if (FILE.equals(key)) { if (val instanceof File) { @@ -232,12 +251,14 @@ } public void removeFrom(Buildable b) { - ((Documentation) b).getHelpMenu().remove(launch); + ((Documentation) b).getHelpMenu().remove(launchItem); launch.setEnabled(false); } + protected JMenuItem launchItem; + public void addTo(Buildable b) { - ((Documentation) b).getHelpMenu().add(launch); + launchItem = ((Documentation) b).getHelpMenu().add(launch); } public static HelpFile getReferenceManualPage(String page) { Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/configure/ConfigureTree.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/configure/ConfigureTree.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/configure/ConfigureTree.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -18,6 +18,8 @@ */ package VASSAL.configure; +import java.awt.Component; +import java.awt.Font; import java.awt.Frame; import java.awt.Toolkit; import java.awt.event.ActionEvent; @@ -70,6 +72,7 @@ import VASSAL.i18n.Resources; import VASSAL.i18n.TranslateAction; import VASSAL.launch.EditorWindow; +import VASSAL.tools.MenuManager; /** * This is the Configuration Tree that appears in the Configuration window @@ -112,6 +115,7 @@ protected Action propertiesAction; protected Action translateAction; protected Action helpAction; +/* protected JMenuItem cutItem; protected JMenuItem copyItem; protected JMenuItem pasteItem; @@ -119,8 +123,9 @@ protected JMenuItem moveItem; protected JMenuItem propertiesItem; protected JMenuItem translateItem; - public static java.awt.Font POPUP_MENU_FONT = - new java.awt.Font("Dialog", 0, 11); +*/ + + public static Font POPUP_MENU_FONT = new Font("Dialog", 0, 11); protected static List<AdditionalComponent> additionalComponents = new ArrayList<AdditionalComponent>(); @@ -681,7 +686,7 @@ public Renderer() { } - public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { Configurable c = null; if (value instanceof DefaultMutableTreeNode) { c = (Configurable) ((DefaultMutableTreeNode) value).getUserObject(); @@ -855,6 +860,17 @@ } public void populateEditMenu(EditorWindow ew) { + final MenuManager mm = MenuManager.getInstance(); + + mm.addAction("Editor.delete", deleteAction); + mm.addAction("Editor.cut", cutAction); + mm.addAction("Editor.copy", copyAction); + mm.addAction("Editor.paste", pasteAction); + mm.addAction("Editor.move", moveAction); + mm.addAction("Editor.ModuleEditor.properties", propertiesAction); + mm.addAction("Editor.ModuleEditor.translate", translateAction); + +/* ew.setMenuItem(EditorWindow.MenuKey.DELETE, deleteAction); ew.setMenuItem(EditorWindow.MenuKey.CUT, cutAction); ew.setMenuItem(EditorWindow.MenuKey.COPY, copyAction); @@ -870,6 +886,7 @@ moveItem = ew.getMenuItem(EditorWindow.MenuKey.MOVE); propertiesItem = ew.getMenuItem(EditorWindow.MenuKey.PROPERTIES); translateItem = ew.getMenuItem(EditorWindow.MenuKey.TRANSLATE); +*/ updateEditMenu(); } Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/configure/ShowHelpAction.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/configure/ShowHelpAction.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/configure/ShowHelpAction.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -16,6 +16,8 @@ * License along with this library; if not, copies are available * at http://www.opensource.org. */ + +// FIXME: Why is this in configure instead of build.module.documentation? package VASSAL.configure; import java.awt.event.ActionEvent; @@ -38,7 +40,7 @@ private URL contents; public ShowHelpAction(URL contents, URL iconURL) { - this(null,contents,iconURL); + this(null, contents, iconURL); } public ShowHelpAction(HelpWindow helpWindow, HelpFile contents, URL iconURL) { @@ -55,6 +57,7 @@ putValue(Action.NAME, Resources.getString(Resources.HELP)); } + public void actionPerformed(ActionEvent e) { if (contents != null) { if (helpWindow == null) { Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/configure/TranslateVassalAction.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/configure/TranslateVassalAction.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/configure/TranslateVassalAction.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -17,6 +17,7 @@ * at http://www.opensource.org. */ +// FIXME: Why is this in configure and not i18n? package VASSAL.configure; import java.awt.Frame; Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/i18n/Editor.properties =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/i18n/Editor.properties 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/i18n/Editor.properties 2008-03-25 18:10:42 UTC (rev 3365) @@ -23,8 +23,10 @@ Editor.delete=Delete Editor.undo=Undo Editor.move=Move -Editor.save=Save {0} -Editor.save_as=Save {0} As... +#Editor.save=Save {0} +#Editor.save_as=Save {0} As... +Editor.save=Save +Editor.save_as=Save As... Editor.edit_extension=Edit Extension Editor.new_extension=New Extension Editor.import_module=Import Module... Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/AboutVASSAL.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/AboutVASSAL.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/AboutVASSAL.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -1,3 +1,22 @@ +/* + * $Id$ + * + * Copyright (c) 2008 by Joel Uckelman + * + * 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.launch; import java.awt.Color; Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/BasicModule.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/BasicModule.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/BasicModule.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -61,6 +61,7 @@ import VASSAL.preferences.PositionOption; import VASSAL.preferences.Prefs; import VASSAL.tools.DataArchive; +import VASSAL.tools.MenuManager; import VASSAL.tools.SequenceEncoder; public class BasicModule extends GameModule { @@ -108,7 +109,10 @@ throw new IllegalArgumentException(ex.getMessage()); } - GameModule.getGameModule().getFileMenu().add(getPrefs().getEditor().getEditAction()); + MenuManager.getInstance().addAction("Prefs.edit_preferences", + getPrefs().getEditor().getEditAction()); + +// GameModule.getGameModule().getFileMenu().add(getPrefs().getEditor().getEditAction()); } public void build(Element e) { Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/CreateModuleAction.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/CreateModuleAction.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/CreateModuleAction.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -1,4 +1,6 @@ /* + * $Id$ + * * Copyright (c) 2000-2007 by Rodney Kinney * * This library is free software; you can redistribute it and/or Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/EditModuleAction.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/EditModuleAction.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/EditModuleAction.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -1,4 +1,6 @@ /* + * $Id$ + * * Copyright (c) 2000-2007 by Rodney Kinney * * This library is free software; you can redistribute it and/or Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/EditorWindow.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/EditorWindow.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/EditorWindow.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -27,9 +27,10 @@ import java.awt.event.KeyEvent; import java.io.File; import java.net.MalformedURLException; +import java.net.URL; import java.util.HashMap; import java.util.Map; - +import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JFrame; import javax.swing.JMenu; @@ -52,6 +53,7 @@ import VASSAL.configure.ValidationReportDialog; import VASSAL.i18n.Resources; import VASSAL.i18n.TranslateVassalWindow; +import VASSAL.tools.MenuManager; import VASSAL.tools.OrderedMenu; /** @@ -67,7 +69,8 @@ protected SaveAction saveAction; protected SaveAsAction saveAsAction; protected JMenuItem componentHelpItem; - protected JMenuItem createUpdater; +// protected JMenuItem createUpdater; + protected Action createUpdater; protected JMenuItem close; protected final HelpWindow helpWindow = new HelpWindow( @@ -79,13 +82,14 @@ public abstract String getEditorType(); + protected final JToolBar toolBar = new JToolBar(); + +/* private final Map<MenuKey,JMenuItem> menuItems = new HashMap<MenuKey,JMenuItem>(); protected final JMenuBar menuBar = new JMenuBar(); - protected final JToolBar toolBar = new JToolBar(); - private final JMenu fileMenu; private final JMenu editMenu; private final JMenu toolsMenu; @@ -171,23 +175,149 @@ } return null; } +*/ protected final JScrollPane scrollPane; protected EditorWindow() { setTitle("VASSAL " + getEditorType() + " Editor"); setLayout(new BorderLayout()); - setJMenuBar(menuBar); - + toolBar.setFloatable(false); add(toolBar, BorderLayout.NORTH); + // setup menubar and actions + final MenuManager mm = MenuManager.getInstance(); + setJMenuBar(mm.getMenuBar(MenuManager.EDITOR)); + + final int mask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); + + saveAction = new SaveAction() { + private static final long serialVersionUID = 1L; + public void actionPerformed(ActionEvent e) { + save(); + treeStateChanged(false); + } + }; + + saveAction.setEnabled(false); + saveAction.putValue(Action.ACCELERATOR_KEY, + KeyStroke.getKeyStroke(KeyEvent.VK_S, mask)); + mm.addAction("Editor.save", saveAction); + toolBar.add(saveAction); + + saveAsAction = new SaveAsAction() { + private static final long serialVersionUID = 1L; + public void actionPerformed(ActionEvent e) { + saveAs(); + treeStateChanged(false); + } + }; + + saveAsAction.setEnabled(false); + saveAsAction.putValue(Action.ACCELERATOR_KEY, + KeyStroke.getKeyStroke(KeyEvent.VK_A, mask)); + mm.addAction("Editor.save_as", saveAsAction); + toolBar.add(saveAsAction); + + mm.addAction("General.quit", new ShutDownAction()); +// FXIME: mnemonics should be language-dependant +// mm.getAction("General.quit").setMnemonic('Q'); + + createUpdater = new AbstractAction( + "Create " + getEditorType() + " updater") { + private static final long serialVersionUID = 1L; + + public void actionPerformed(ActionEvent e) { + new ModuleUpdaterDialog(EditorWindow.this).setVisible(true); + } + }; + createUpdater.setEnabled(false); + mm.addAction("create_module_updater", createUpdater); + + + URL url = null; + try { + File dir = VASSAL.build.module.Documentation.getDocumentationBaseDir(); + dir = new File(dir, "ReferenceManual/index.htm"); //$NON-NLS-1$ + url = HelpFile.toURL(dir); + } + catch (MalformedURLException e) { + e.printStackTrace(); + } + + final Action helpAction = new ShowHelpAction(url, + helpWindow.getClass().getResource("/images/Help16.gif")); //$NON-NLS-1$ + helpAction.putValue(Action.SHORT_DESCRIPTION, Resources.getString( + "Editor.ModuleEditor.reference_manual")); //$NON-NLS-1$ + + mm.addAction("Editor.ModuleEditor.reference_manual", helpAction); + toolBar.add(helpAction); + +/* + // Temporary Component Help item until the Module is loaded + componentHelpItem = new JMenuItem("Component help"); + componentHelpItem.setEnabled(false); + menu.add(componentHelpItem); +*/ + + mm.addAction("AboutScreen.about_vassal", AboutVASSAL.getAction()); + +/* // build File menu fileMenu = new JMenu(Resources.getString("General.file")); fileMenu.setMnemonic(KeyEvent.VK_F); menuBar.add(fileMenu); populateFileMenu(fileMenu); +*/ +/* + final JMenuItem deleteItem = + new JMenuItem(Resources.getString("Editor.delete")); + deleteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); + + final JMenuItem cutItem = new JMenuItem(Resources.getString("Editor.cut")); + cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, mask)); + + final JMenuItem copyItem = + new JMenuItem(Resources.getString("Editor.copy")); + copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, mask)); + + final JMenuItem pasteItem = + new JMenuItem(Resources.getString("Editor.paste")); + pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, mask)); + + final JMenuItem moveItem = + new JMenuItem(Resources.getString("Editor.move")); + moveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, mask)); + + final JMenuItem propertiesItem = + new JMenuItem(Resources.getString("Editor.ModuleEditor.properties")); + propertiesItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, mask)); + + final JMenuItem translateItem = new JMenuItem( + Resources.getString("Editor.ModuleEditor.translate"), KeyEvent.VK_T); + translateItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, mask)); + + addMenuItem(MenuKey.DELETE, menu.add(deleteItem)); + addMenuItem(MenuKey.CUT, menu.add(cutItem)); + addMenuItem(MenuKey.COPY, menu.add(copyItem)); + addMenuItem(MenuKey.PASTE, menu.add(pasteItem)); + addMenuItem(MenuKey.MOVE, menu.add(moveItem)); + menu.addSeparator(); + addMenuItem(MenuKey.PROPERTIES, menu.add(propertiesItem)); + addMenuItem(MenuKey.TRANSLATE, menu.add(translateItem)); + + deleteItem.setEnabled(false); + cutItem.setEnabled(false); + copyItem.setEnabled(false); + pasteItem.setEnabled(false); + moveItem.setEnabled(false); + propertiesItem.setEnabled(false); + translateItem.setEnabled(false); +*/ + +/* // build Edit menu editMenu = OrderedMenu.builder("General.edit").create(); menuBar.add(editMenu); @@ -202,6 +332,7 @@ helpMenu = new JMenu(Resources.getString("General.help")); menuBar.add(helpMenu); populateHelpMenu(helpMenu); +*/ // the presence of the panel prevents a NullPointerException on packing final JPanel panel = new JPanel(); @@ -220,12 +351,13 @@ * Add options to the File Menu. Different component types will * add different options. */ - protected abstract void populateFileMenu(JMenu menu); +// protected abstract void populateFileMenu(JMenu menu); /** * Add options to the Edit Menu. These are dummies entries, which * the {@link ConfigureTree} will replace when a module is loaded. */ +/* protected void populateEditMenu(JMenu menu) { final int mask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); @@ -273,17 +405,19 @@ propertiesItem.setEnabled(false); translateItem.setEnabled(false); } +*/ /** * Add options to the Tools Menu. Different component types will * add different options. */ - protected abstract void populateToolsMenu(JMenu menu); +// protected abstract void populateToolsMenu(JMenu menu); /** * Add options to the Help Menu. All component types share the same Help * Menu options. */ +/* protected void populateHelpMenu(JMenu menu) { Action helpAction = null; @@ -314,10 +448,12 @@ final Action aboutVASSAL = AboutVASSAL.getAction(); menuItems.put(MenuKey.ABOUT_VASSAL, menu.add(aboutVASSAL)); } +*/ /* * Menu Items common to multiple components - */ + */ +/* protected void addSaveMenuItem(JMenu menu) { saveAction = new SaveAction() { private static final long serialVersionUID = 1L; @@ -347,14 +483,16 @@ addMenuItem(MenuKey.SAVE_AS, menu.add(saveAsAction)); toolBar.add(saveAsAction); } - +*/ + /* * Each component must Save, SaveAs and close itself */ protected abstract void save(); protected abstract void saveAs(); protected abstract void close(); - + +/* protected void addQuitMenuItem(JMenu menu) { menuItems.put(MenuKey.QUIT, menu.add(new ShutDownAction())); // FXIME: mnemonics should be language-dependant @@ -385,6 +523,7 @@ addMenuItem(MenuKey.CREATE_MODULE_UPDATER, createUpdater); } +*/ protected void saver(final Runnable save) { final ValidationReport report = new ValidationReport(); Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ExtensionEditorWindow.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ExtensionEditorWindow.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ExtensionEditorWindow.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -27,6 +27,7 @@ import VASSAL.build.GameModule; import VASSAL.build.module.ModuleExtension; import VASSAL.configure.ExtensionTree; +import VASSAL.tools.MenuManager; public class ExtensionEditorWindow extends EditorWindow { @@ -48,7 +49,9 @@ scrollPane.setViewportView(tree); tree.populateEditMenu(this); - componentHelpItem.setAction(tree.getHelpAction()); + + final MenuManager mm = MenuManager.getInstance(); + mm.addAction("Editor.ModuleEditor.reference_manual", tree.getHelpAction()); saveAction.setEnabled(true); saveAsAction.setEnabled(true); @@ -66,6 +69,7 @@ return "Extension"; } +/* protected void populateFileMenu(JMenu menu) { addSaveMenuItem(menu); addSaveAsMenuItem(menu); @@ -78,6 +82,7 @@ menu.addSeparator(); addTranslateMenuItem(menu); } +*/ protected void save() { ExtensionEditorWindow.this.saver(new Runnable() { Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/GameModuleAction.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/GameModuleAction.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/GameModuleAction.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -1,4 +1,6 @@ /* + * $Id$ + * * Copyright (c) 2000-2007 by Rodney Kinney * * This library is free software; you can redistribute it and/or @@ -86,4 +88,4 @@ r.run(); } } -} \ No newline at end of file +} Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/Main.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/Main.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/Main.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -36,12 +36,17 @@ import VASSAL.build.module.ModuleExtension; import VASSAL.i18n.Localization; import VASSAL.i18n.Resources; +import VASSAL.launch.os.macos.MacOS; import VASSAL.preferences.Prefs; import VASSAL.tools.DataArchive; import VASSAL.tools.ErrorLog; import VASSAL.tools.JarArchive; -//import org.jdesktop.swinghelper.debug.EventDispatchThreadHangMonitor; +/* +import javax.swing.RepaintManager; +import org.jdesktop.swinghelper.debug.CheckThreadViolationRepaintManager; +import org.jdesktop.swinghelper.debug.EventDispatchThreadHangMonitor; +*/ public class Main { protected boolean isFirstTime; @@ -54,6 +59,8 @@ public Main(final String[] args) { initSystemProperties(); + + // begin the error log System.err.println("-- OS " + System.getProperty("os.name")); //$NON-NLS-1$ //$NON-NLS-2$ System.err.println("-- Java version " + System.getProperty("java.version")); //$NON-NLS-1$ //$NON-NLS-2$ System.err.println("-- VASSAL version " + Info.getVersion()); //$NON-NLS-1$ @@ -121,28 +128,57 @@ } protected void initSystemProperties() { - if (System.getProperty("stderr") == null) { //$NON-NLS-1$ - System.setProperty("stderr", new File(Info.getHomeDir(), "errorLog").getPath()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + // + // Error log setup + // + String stderr = "stderr"; //$NON-NLS-1$ + final String errorLog = "errorLog"; //$NON-NLS-1$ + + // redirect stderr to errorLog by default + if (System.getProperty(stderr) == null) { + System.setProperty(stderr, + new File(Info.getHomeDir(), errorLog).getPath()); } - if (!"null".equals(System.getProperty("stderr"))) { //$NON-NLS-1$ //$NON-NLS-2$ + + // write no log if stderr is set to null + stderr = System.getProperty(stderr); + if (!"null".equals(stderr)) { //$NON-NLS-1$ try { - System.setErr(new PrintStream(new FileOutputStream(System.getProperty("stderr")))); //$NON-NLS-1$ + System.setErr(new PrintStream(new FileOutputStream(stderr))); } catch (IOException ex) { - System.err.println("Unable to redirect stderr to " + System.getProperty("stderr")); //$NON-NLS-1$ //$NON-NLS-2$ + System.err.println( + "Unable to redirect stderr to " + stderr); //$NON-NLS-1$ } } - if (System.getProperty("http.proxyHost") == null //$NON-NLS-1$ - && System.getProperty("proxyHost") != null) { //$NON-NLS-1$ - System.setProperty("http.proxyHost", System.getProperty("proxyHost")); //$NON-NLS-1$ //$NON-NLS-2$ + // + // HTTP proxying setup + // + final String httpProxyHost = "http.proxyHost"; //$NON-NLS-1$ + final String proxyHost = "proxyHost"; //$NON-NLS-1$ + + if (System.getProperty(httpProxyHost) == null && + System.getProperty(proxyHost) != null) { + System.setProperty(httpProxyHost, System.getProperty(proxyHost)); } - if (System.getProperty("http.proxyPort") == null //$NON-NLS-1$ - && System.getProperty("proxyPort") != null) { //$NON-NLS-1$ - System.setProperty("http.proxyPort", System.getProperty("proxyPort")); //$NON-NLS-1$ //$NON-NLS-2$ + final String httpProxyPort = "http.proxyPort"; //$NON-NLS-1$ + final String proxyPort = "proxyPort"; //$NON-NLS-1$ + + if (System.getProperty(httpProxyPort) == null && + System.getProperty(proxyPort) != null) { + System.setProperty(httpProxyPort, System.getProperty(proxyPort)); } + // + // OS-specific setup + // + if (Info.isMacOSX()) MacOS.setup(); + + // + // Miscellaneous setup + // System.setProperty("swing.aatext", "true"); //$NON-NLS-1$ //$NON-NLS-2$ System.setProperty("swing.boldMetal", "false"); //$NON-NLS-1$ //$NON-NLS-2$ System.setProperty("awt.useSystemAAFontSettings", "on"); //$NON-NLS-1$ //$NON-NLS-2$ @@ -238,6 +274,8 @@ } public static void main(String[] args) { +// EventDispatchThreadHangMonitor.initMonitoring(); +// RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager()); new Main(args); } } Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ModuleEditorWindow.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ModuleEditorWindow.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ModuleEditorWindow.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -18,7 +18,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; - +import javax.swing.AbstractAction; +import javax.swing.Action; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuItem; @@ -27,12 +28,14 @@ import VASSAL.configure.ConfigureTree; import VASSAL.configure.SavedGameUpdaterDialog; import VASSAL.i18n.Resources; +import VASSAL.tools.MenuManager; public class ModuleEditorWindow extends EditorWindow { - private static final long serialVersionUID = 1L; - protected JMenuItem updateSavedGame; +// protected JMenuItem updateSavedGame; + protected Action updateSavedGame; + public ModuleEditorWindow(GameModule mod) { super(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -41,8 +44,21 @@ scrollPane.setViewportView(tree); tree.populateEditMenu(this); - componentHelpItem.setAction(tree.getHelpAction()); - + + final MenuManager mm = MenuManager.getInstance(); + + mm.addAction("Editor.ModuleEditor.reference_manual", tree.getHelpAction()); + + updateSavedGame = new AbstractAction(Resources.getString( + "Editor.ModuleEditor.update_saved")) { //$NON-NLS-1$ + private static final long serialVersionUID = 1L; + + public void actionPerformed(ActionEvent e) { + new SavedGameUpdaterDialog(ModuleEditorWindow.this).setVisible(true); + } + }; + mm.addAction("Editor.ModuleEditor.update_saved", updateSavedGame); + saveAction.setEnabled(true); saveAsAction.setEnabled(true); createUpdater.setEnabled(true); @@ -55,13 +71,11 @@ return "Module"; } +/* protected void populateFileMenu(JMenu menu) { - addSaveMenuItem(menu); addSaveAsMenuItem(menu); - menu.addSeparator(); - addQuitMenuItem(menu); } @@ -83,6 +97,7 @@ addTranslateMenuItem(menu); } +*/ protected void save() { ModuleEditorWindow.this.saver(new Runnable() { Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ModuleManager.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ModuleManager.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ModuleManager.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -35,6 +35,7 @@ import java.io.File; import java.io.IOException; import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -81,7 +82,9 @@ import VASSAL.tools.ComponentSplitter; import VASSAL.tools.BrowserSupport; import VASSAL.tools.DataArchive; +import VASSAL.tools.ErrorLog; import VASSAL.tools.FileChooser; +import VASSAL.tools.MenuManager; import VASSAL.tools.OrderedMenu; import VASSAL.tools.imports.ImportAction; @@ -141,27 +144,66 @@ public void showFrame() { if (theFrame == null) { theFrame = new JFrame("VASSAL"); - theFrame.setLayout(new BoxLayout(theFrame.getContentPane(), BoxLayout.X_AXIS)); - JMenuBar menuBar = new JMenuBar(); - theFrame.setJMenuBar(menuBar); - menuBar.add(buildFileMenu()); - menuBar.add(buildToolsMenu()); - menuBar.add(buildHelpMenu()); + theFrame.setLayout( + new BoxLayout(theFrame.getContentPane(), BoxLayout.X_AXIS)); + + // setup menubar and actions + final MenuManager mm = MenuManager.getInstance(); + theFrame.setJMenuBar(mm.getMenuBar(MenuManager.MANAGER)); + + mm.addAction("Main.play_module", new LoadModuleAction(theFrame)); + mm.addAction("Main.edit_module", new EditModuleAction(theFrame)); + mm.addAction("Main.new_module", new CreateModuleAction(theFrame)); + mm.addAction("Editor.import_module", new ImportAction(theFrame)); + mm.addAction("General.quit", new ShutDownAction()); + + mm.addAction("Chat.server_status", new AbstractAction( + Resources.getString("Chat.server_status")) { + private static final long serialVersionUID = 1L; + + public void actionPerformed(ActionEvent e) { + serverStatusView.toggleVisibility(); + BooleanConfigurer config = (BooleanConfigurer) + Prefs.getGlobalPrefs().getOption(SHOW_STATUS_KEY); + if (config != null) { + config.setValue( + config.booleanValue() ? Boolean.FALSE : Boolean.TRUE); + } + } + }); + mm.addAction("Editor.ModuleEditor.translate_vassal", + new TranslateVassalAction(theFrame)); + + mm.addAction("AboutScreen.about_vassal", AboutVASSAL.getAction()); + URL url = null; + try { + url = new File(Documentation.getDocumentationBaseDir(), + "README.html").toURI().toURL(); + } + catch (MalformedURLException e) { + ErrorLog.warn(e); + } + mm.addAction("General.help", new ShowHelpAction(url, null)); + + // set up panes JSplitPane modAndExtControls = new JSplitPane(JSplitPane.VERTICAL_SPLIT); modAndExtControls.setResizeWeight(1.0); theFrame.add(modAndExtControls); modAndExtControls.add(buildModuleControls()); extensionsControls = buildExtensionsControls(); modAndExtControls.add(extensionsControls); + JPanel allControls = new JPanel(new BorderLayout()); JComponent serverStatusControls = buildServerStatusControls(); allControls.add(modAndExtControls, BorderLayout.CENTER); theFrame.add(allControls); + serverStatusView = new ComponentSplitter().splitRight(allControls, serverStatusControls, false); serverStatusView.revalidate(); Rectangle r = Info.getScreenBounds(theFrame); extensionsControls.setPreferredSize(new Dimension(0, r.height / 4)); serverStatusControls.setPreferredSize(new Dimension((int) (r.width / 3.5), 0)); + theFrame.setSize(3 * r.width / 4, 3 * r.height / 4); theFrame.setLocation(r.width / 8, r.height / 8); theFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); @@ -172,7 +214,9 @@ } }); } - BooleanConfigurer config = new BooleanConfigurer(SHOW_STATUS_KEY, null, true); + + BooleanConfigurer config = + new BooleanConfigurer(SHOW_STATUS_KEY, null, true); Prefs.getGlobalPrefs().addOption(null, config); if (config.booleanValue()) { SwingUtilities.invokeLater(new Runnable() { @@ -181,6 +225,7 @@ } }); } + theFrame.setVisible(true); } Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/PlayerWindow.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/PlayerWindow.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/PlayerWindow.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -24,12 +24,13 @@ import javax.swing.Action; import javax.swing.JFrame; -import javax.swing.JMenu; -import javax.swing.JMenuBar; +//import javax.swing.JMenu; +//import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JToolBar; -import VASSAL.tools.OrderedMenu; +import VASSAL.tools.MenuManager; +//import VASSAL.tools.OrderedMenu; import VASSAL.tools.WrapLayout; public class PlayerWindow extends JFrame { @@ -42,6 +43,8 @@ public JPanel getControlPanel() { return controlPanel; } + +/* protected final JMenuBar menuBar = new JMenuBar(); public JMenu getFileMenu() { @@ -54,14 +57,25 @@ protected final JMenu fileMenu; protected final JMenu helpMenu; +*/ + protected final JToolBar toolBar = new JToolBar(); protected final JPanel controlPanel = new JPanel(); public PlayerWindow() { setTitle("VASSAL"); setLayout(new BorderLayout()); - setJMenuBar(menuBar); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // setup menubar and actions + final MenuManager mm = MenuManager.getInstance(); + setJMenuBar(mm.getMenuBar(MenuManager.PLAYER)); + + mm.addAction("General.quit", new ShutDownAction()); + + mm.addAction("AboutScreen.about_vassal", AboutVASSAL.getAction()); + +/* // build File menu fileMenu = OrderedMenu.builder("General.file") .appendItem("GameState.new_game") @@ -78,7 +92,6 @@ .create(); fileMenu.add(new ShutDownAction()); menuBar.add(fileMenu); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // build Help menu helpMenu = OrderedMenu.builder("General.help") @@ -87,6 +100,7 @@ menuBar.add(helpMenu); final Action aboutVASSAL = AboutVASSAL.getAction(); helpMenu.add(aboutVASSAL); +*/ // build toolbar toolBar.setLayout(new WrapLayout(FlowLayout.LEFT, 0, 0)); Modified: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ShutDownAction.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ShutDownAction.java 2008-03-24 13:11:39 UTC (rev 3364) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/ShutDownAction.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -29,6 +29,7 @@ import VASSAL.preferences.Prefs; public class ShutDownAction extends AbstractAction { + private static final long serialVersionUID = 1L; public ShutDownAction() { super(Resources.getString(Resources.QUIT)); Added: VASSAL-src/branches/uckelman-working/src/VASSAL/launch/os/MacOSX.java =================================================================== --- VASSAL-src/branches/uckelman-working/src/VASSAL/launch/os/MacOSX.java (rev 0) +++ VASSAL-src/branches/uckelman-working/src/VASSAL/launch/os/MacOSX.java 2008-03-25 18:10:42 UTC (rev 3365) @@ -0,0 +1,115 @@ + +package VASSAL.launch.os; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import javax.swing.UIManager; + +import VASSAL.tools.ErrorLog; + +public class MacOSX { + private MacOSX() { } + +/* + private static class OSXAdapter implements InvocationHandler { + public OSXAdapter() { + try { + // get Application.class and an instance + final Class<?> appClass = Class.forName("com.apple.eawt.Application"); + final Object app = appClass.newInstance(); + + // get ApplicationListener.class + final Class<?> listenerClass = + Class.forName("com.apple.eawt.ApplicationListener"); + + // get Application.addApplicationListener() + final Method addListenerMethod = appClass.getDeclaredMethod( + "addApplicationListener", + new Class<?>[] { listenerClass } + ); + + // create a proxy object for ApplicationListener + final Object adapterProxy = Proxy.newProxyInstance( + OSXAdapter.class.getClassLoader(), + new Class<?>[] { listenerClass }, + this + ); + + // call app.addApplicationListener() + addListenerMethod.invoke(app, new Object[] { adapterProxy }); + } + catch (Exception e) { + ErrorLog.warn(e); + } + } + + public void handleOpenApplication(Object event) { + setApplicationEventHandled(event, false); + } + + public void handleOpenFile(Object event) { + setApplicationEventHandled(event, false); + } + + public void handlePreferences(Object event) { + setApplicationEventHandled(event, false); + } + + public void handlePrintFile(Object event) { + setApplicationEventHandled(event, false); + } + + public void handleQuit(Object event) { + setApplicationEventHandled(event, false); + } + + public void handleReOpenApplication(Object event) { + setApplicationEventHandled(event, false); + } + + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable { + + // sanity check + if (args.length != 1) return null; + + // call the requested method + final String name = method.getName(); + if ("handleOpenApplication".equals(name)) { + handleOpenApplication(args[0]); + } + else if ("handleOpenFile".equals(name)) { + handleOpenFile(args[0]); + } + else if ("handlePreferences".equals(name)) { + han... [truncated message content] |