[vassalengine-svn] SF.net SVN: vassalengine:[4694] VASSAL-src/branches/uckelman-dialogs
Brought to you by:
rodneykinney,
uckelman
From: <uck...@us...> - 2008-12-27 14:20:49
|
Revision: 4694 http://vassalengine.svn.sourceforge.net/vassalengine/?rev=4694&view=rev Author: uckelman Date: 2008-12-27 14:20:44 +0000 (Sat, 27 Dec 2008) Log Message: ----------- Merged trunk. Modified Paths: -------------- VASSAL-src/branches/uckelman-dialogs/Makefile VASSAL-src/branches/uckelman-dialogs/NOTES VASSAL-src/branches/uckelman-dialogs/dist/windows/nsis/installer.nsi VASSAL-src/branches/uckelman-dialogs/src/VASSAL/Info.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/BadDataReport.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/DoActionButton.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/PredefinedSetup.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/DeckGlobalKeyCommand.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/PieceMover.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/SetupStack.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/boardPicker/board/Region.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/ChangePropertyButton.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/IncrementProperty.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/PropertyChangerConfigurer.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/widget/HtmlChart.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/chat/ui/PrivateMessageAction.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/BasicPiece.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/CounterGlobalKeyCommand.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Decorator.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/DynamicProperty.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Embellishment.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PieceDefiner.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PlaceMarker.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PlaySound.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Replace.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/SendToLocation.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Translate.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/i18n/VASSAL.properties VASSAL-src/branches/uckelman-dialogs/src/VASSAL/i18n/VASSAL_fr.properties VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/BugDialog.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/DataArchive.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/FormattedString.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/ProblemDialog.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/image/ImageUtils.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/imageop/Op.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/imageop/RotateScaleOpBitmapImpl.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/imageop/RotateScaleOpSVGImpl.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/imageop/SourceOpBitmapImpl.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/imageop/SourceOpMappedBitmapImpl.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/imageop/SourceOpSVGImpl.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/logging/LogEntry.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/swing/DetailsDialog.java VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/swing/ExpandingPane.java Property Changed: ---------------- VASSAL-src/branches/uckelman-dialogs/ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/image/ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/tools/image/memmap/ Property changes on: VASSAL-src/branches/uckelman-dialogs ___________________________________________________________________ Modified: svn:mergeinfo - /VASSAL-src/trunk:4520-4563 + /VASSAL-src/trunk:4476-4693 Modified: VASSAL-src/branches/uckelman-dialogs/Makefile =================================================================== --- VASSAL-src/branches/uckelman-dialogs/Makefile 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/Makefile 2008-12-27 14:20:44 UTC (rev 4694) @@ -10,8 +10,8 @@ VNUM:=3.1.0 SVNVERSION:=$(shell svnversion | perl -pe 's/(\d+:)?(\d+[MS]?)/$$2/; s/(\d+)M/$$1+1/e') -VERSION:=$(VNUM)-svn$(SVNVERSION) -#VERSION:=$(VNUM)-beta5 +#VERSION:=$(VNUM)-svn$(SVNVERSION) +VERSION:=$(VNUM)-svn4576 #CLASSPATH:=$(CLASSDIR):$(LIBDIR)/* Modified: VASSAL-src/branches/uckelman-dialogs/NOTES =================================================================== --- VASSAL-src/branches/uckelman-dialogs/NOTES 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/NOTES 2008-12-27 14:20:44 UTC (rev 4694) @@ -1,4 +1,4 @@ -The VASSAL Team is happy to announce the release of VASSAL 3.1.0-beta6. +The VASSAL Team is happy to announce the release of VASSAL 3.1.0-beta7. ********************* Download @@ -6,69 +6,52 @@ For Windows: -http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-beta6-windows.exe +http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-beta7-windows.exe For Mac OS X: -http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-beta6-macosx.dmg +http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-beta7-macosx.dmg For Linux (and other platforms): -http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-beta6-generic.zip +http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-beta7-generic.zip Source code: -http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-beta6-src.zip +http://downloads.sourceforge.net/vassalengine/VASSAL-3.1.0-beta7-src.zip ********************* -Changes since beta5: +Changes since beta6: ********************* -A number of problems present in 3.1.0-beta5 are fixed in 3.1.0-beta6: +A number of problems present in 3.1.0-beta6 are fixed in 3.1.0-beta7: -* Bug 2346899: file chooser fails with null owner window in Java 1.5 -* Bug 2344403: gpidSupport not set on pieces coming from PieceDefiner -* Bug 2340311: Edit All pieces, no change, should not update pieces -* Bug 2339611: Try to load PNGs with bad metadata anyway -* Bug 2319018: Triggering multiple 'Move Fixed Distance' traits doesn't work -* Bug 2316022: ArithmeticException in PropertySheet.TickLabel.mouseClicked -* Bug 2311318: Setting Label length to 0 in Turn Tracker changes to Fixed -* Bug 2309593: Move Fixed Distance auto-report never turns off -* Bug 2306908: Default option for 'Auto-Report Moves' should be Always -* Bug 2306873: Not a Number when referencing DiceButton value in Edit mode -* Bug 2305254: Chart Maps not Visible if Main map undocked -* Bug 2301594: LoadExtensionException trying to open an Extension -* Bug 2294041: Bad Image generates IOException instead of Bad Data report -* Bug 2292450: Corrupted Color Preference causing NoSuchElement Exception -* Bug 2290225: Cancel when setting a Dynamic/Global Property sets to null -* Bug 2286888: NPE in FileChooser$NativeFileChooser.awt_file_dialog_init -* Bug 2285925: NPE in FileChooser.NativeFileChooser.awt_file_dialog_init() -* Bug 2282205: ArrayIndexOutOfBoundsException in ZoomMenu.initZoomItems() -* Bug 2280943: Delete key no longer deletes elements in Edit Mode -* Bug 2280253: NPE if no Key Command specified -* Bug 2273032: NPE in PlaceMarker.placeMarker() -* Bug 2261405: Unable to move region in irregular grid -* Bug 2259361: NPE in FreeRotator.mouseReleased() -* Bug 2254357: StringIndexOutOfBoundsException in FormattedStringConfigurer -* Bug 2250058: NPE when adding a Place Marker to a prototype. -* Bug 2248313: NoSuchElementException in ColorConfigurer.stringToColor() -* Bug 2199032: NPE in FileChooser.NativeFileChooser.awt_file_dialog_init() -* Bug 2198485: NPE in PlaceMarker.updateGpId() -* Bug 2174283: SymbolSet$SymbolData.getImage() creates 0-width image -* Bug: Restricted Access trait works again -* Bug: Must recalculate bounding box for rotation when inner piece changes -* Bug: Check that child port is in [0,65535] when launching Player or Editor -* Bug: Problem when adding a Place Marker to a Place Marker definition -* Bug: Transparent SVG has an opaque black background -* Bug: Some transparent PNGs not loaded properly by ImageIO -* Bug: Added missing Cancel button, close window handling to several dialogs -* Cosmetic changes to the Bug Report dialog -* ADC2: If a flip definition points to itself, then it's not really valid -* ADC2: Invalid masks cause the piece to be completely transparent -* ADC2: Better method for recognizing files to import +* Bug 2442887: Exception if no Layer levels and type new level name +* Bug 2432774: ClassCastException: PrototypeDefinition$Config$Definer$Plain + cannot be cast to VASSAL.counters.Decorator +* Bug 2418907: NPE When SendToLocation sends to Region that does not exist +* Bug 2418813: NPE Sending PrivateMsg to person who is 'Ignoring' you +* Bug 2415632: NPE in DeckGlobalKeyCommand.encode() +* Bug 2393130: Zoom menu not initialized at time of Zoomer creation +* Bug 2393526: Cache requests not marked as failed when Errors occured +* Bug 2390630: Connecting to server blocks GUI when server is down +* Bug 2381419: NPE in RegionGrid.Config.EditRegionAction.windowClosed() +* Bug 2380245: FileNotFoundException not being caught during image loading +* Bug 2373956: NPE in child ImageOp when parent fails +* Bug 2372199: NPE in PieceSlot.updateGpId() +* Bug 2315230: ConnectException in HttpRequestWrapper.doGet() +* Bug 2296067: InvalidDnDOperationException in PieceMover.DragHandler +* Bug 2225711: Fixed ConcurrentModificationException in SavedGameUpdater +* Bug 2187303: IllegalArgumentException in SavedGameUpdaterDialog +* Bug 2186983: EmptyStackException in ModuleManagerWindow.GameFolderInfo +* Bug 2162266: NPE in HybridClient.setDelegate() +* Bug 2129550: UnknownHostException in HttpRequestWrapper.doGet() +* Bug: Canonicalize $0 in case VASSAL.sh is being invoked via a symbolic link -Please report all bugs in beta6, even if they are bugs which you've +* Updated Windows installer to download JRE 1.6.0_11. + +Please report all bugs in beta7, even if they are bugs which you've already reported against other betas. We take your bug reports very seriously---they're the reason we've been able to fix so many bugs. @@ -108,7 +91,7 @@ you find any problems/oddities/bugs, please tell us so that we can fix them before VASSAL 3.1.0 is released. Also, if you've had problems with 3.0.x or a previous 3.1.0 beta, please check and let us know if those -problems are resolved in 3.1.0-beta6. +problems are resolved in 3.1.0-beta7. Report bugs here in the Technical Support & Bugs category at the VASSAL forums: Modified: VASSAL-src/branches/uckelman-dialogs/dist/windows/nsis/installer.nsi =================================================================== --- VASSAL-src/branches/uckelman-dialogs/dist/windows/nsis/installer.nsi 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/dist/windows/nsis/installer.nsi 2008-12-27 14:20:44 UTC (rev 4694) @@ -33,7 +33,7 @@ !define IROOT "${VROOT}\${VNAME}" !define AROOT "Software\Classes" !define JRE_MINIMUM "1.5.0" -!define JRE_URL "http://javadl.sun.com/webapps/download/AutoDL?BundleId=24934" +!define JRE_URL "http://javadl.sun.com/webapps/download/AutoDL?BundleId=26223" Name "VASSAL" OutFile "${TMPDIR}/VASSAL-${VERSION}-windows.exe" Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/Info.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/Info.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/Info.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -33,7 +33,7 @@ * Class for storing release-related information */ public final class Info { - private static final String VERSION = "3.1.0-beta5"; //$NON-NLS-1$ + private static final String VERSION = "3.1.0-svn4576"; //$NON-NLS-1$ private static File homeDir; private static final boolean isWindows; Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/BadDataReport.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/BadDataReport.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/BadDataReport.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -17,6 +17,10 @@ package VASSAL.build; +import VASSAL.configure.ConfigureTree; +import VASSAL.counters.Decorator; +import VASSAL.counters.EditablePiece; + /** * General-purpose condition indicating that VASSAL has encountered data that's inconsistent with the current module. * A typical example would be failing to find a map/board/image/prototype from the supplied name. Covers a variety of @@ -36,12 +40,67 @@ public BadDataReport() { } + /** + * Basic Bad Data Report + * + * @param message Message to display + * @param data Data causing error + * @param cause Throwable that generated error + */ public BadDataReport(String message, String data, Throwable cause) { - this.message = message; + this(null, null, message, data, cause); + } + + public BadDataReport(String message, String data) { + this(message, data, null); + } + + /** + * Expanded Bad Data Report called by Traits. + * Display additional information to aid debugging + * + * @param piece Trait that generated the error + * @param message Resource message key to display + * @param data Data causing error + * @param cause Throwable that generated error + */ + public BadDataReport(EditablePiece piece, String message, String data, Throwable cause) { + this(Decorator.getOutermost(piece).getLocalizedName(), piece.getDescription(), message, data, cause); + } + + public BadDataReport(EditablePiece piece, String message, String data) { + this(Decorator.getOutermost(piece).getLocalizedName(), piece.getDescription(), message, data, null); + } + + public BadDataReport(String pieceName, String traitDesc, String message, String data, Throwable cause) { + String m = ((pieceName != null && pieceName.length() > 0) ? pieceName+" " : ""); + m += ((traitDesc != null && traitDesc.length() > 0) ? "["+traitDesc+"] " : ""); + m += m.length() > 0 ? "- " : ""; + m += message; + this.message = m; this.cause = cause; this.data = data; } + + /** + * Expanded Bad Data Report for AbstractConfigurables. + * Display the name and type of the Configurable + * + * @param c AbstractConfigurable that generated the error + * @param message Resource message key to display + * @param data Data causing error + * @param cause Throwable that generated error + */ + public BadDataReport(AbstractConfigurable c, String message, String data, Throwable cause) { + this.message = c.getConfigureName() + "[" + ConfigureTree.getConfigureName(c.getClass())+"]: "+message; + this.cause = cause; + this.data = data; + } + public BadDataReport(AbstractConfigurable c, String messageKey, String data) { + this(c, messageKey, data, null); + } + public String getMessage() { return message; } Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/DoActionButton.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/DoActionButton.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/DoActionButton.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -18,6 +18,7 @@ */ package VASSAL.build.module; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; @@ -43,6 +44,7 @@ import VASSAL.configure.PlayerIdFormattedStringConfigurer; import VASSAL.configure.VisibilityCondition; import VASSAL.i18n.TranslatableConfigurerFactory; +import VASSAL.tools.ErrorDialog; import VASSAL.tools.FormattedString; import VASSAL.tools.LaunchButton; import VASSAL.tools.SequenceEncoder; @@ -73,12 +75,27 @@ protected List<KeyStroke> hotkeys = new ArrayList<KeyStroke>(); public DoActionButton() { - ActionListener rollAction = new ActionListener() { - public void actionPerformed(ActionEvent e) { - execute(); + final ActionListener rollAction = new ActionListener() { + private boolean on = false; + + public void actionPerformed(ActionEvent evt) { + try { + execute(); + } + catch (StackOverflowError e) { +System.out.println('!'); + + ErrorDialog.showDisableable( + e, + this, + "Looping" + ); + } } }; - launch = new LaunchButton("Do Action", TOOLTIP, BUTTON_TEXT, HOTKEY, ICON, rollAction); + + 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"); @@ -89,23 +106,35 @@ } public String[] getAttributeNames() { - String s[] = {NAME, BUTTON_TEXT, TOOLTIP, ICON, HOTKEY, DO_REPORT, REPORT_FORMAT, DO_SOUND, SOUND_CLIP, DO_HOTKEY, HOTKEYS}; - return s; + return new String[] { + NAME, + BUTTON_TEXT, + TOOLTIP, + ICON, + HOTKEY, + DO_REPORT, + REPORT_FORMAT, + DO_SOUND, + SOUND_CLIP, + DO_HOTKEY, + HOTKEYS + }; } 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: ", - }; + 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 { @@ -167,7 +196,7 @@ /** * The component to be added to the control window toolbar */ - protected java.awt.Component getComponent() { + protected Component getComponent() { return launch; } Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/PredefinedSetup.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/PredefinedSetup.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/PredefinedSetup.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -33,6 +33,7 @@ import VASSAL.build.module.documentation.HelpFile; import VASSAL.command.Command; import VASSAL.configure.VisibilityCondition; +import VASSAL.i18n.Resources; import VASSAL.tools.ErrorDialog; import VASSAL.tools.menu.ChildProxy; import VASSAL.tools.menu.MenuItemProxy; @@ -177,7 +178,7 @@ .loadGameInBackground(fileName, getSavedGameContents()); } catch (IOException e) { - ErrorDialog.dataError(new BadDataReport("Setup not found",fileName,e)); + ErrorDialog.dataError(new BadDataReport(this, Resources.getString("Error.not_found", "Setup"),fileName,e)); } } else { Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/DeckGlobalKeyCommand.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/DeckGlobalKeyCommand.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/DeckGlobalKeyCommand.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -45,6 +45,7 @@ public DeckGlobalKeyCommand() { globalCommand = new DeckGlobalCommand(); + setConfigureName(""); } public DeckGlobalKeyCommand(String code) { Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/PieceMover.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/PieceMover.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/PieceMover.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -1178,54 +1178,24 @@ } final BufferedImage dragImage = makeDragImage(dragPieceOffCenterZoom); - String thisDrag = ""; //FIXME: Remove after Debugging + // begin dragging try { final Point dragPointOffset = new Point( boundingBox.x + currentPieceOffsetX - EXTRA_BORDER, boundingBox.y + currentPieceOffsetY - EXTRA_BORDER); - thisDrag = getDragInfo(dge); //FIXME: Remove after Debugging dge.startDrag(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR), dragImage, dragPointOffset, new StringSelection(""), this); //$NON-NLS-1$ - lastDrag = thisDrag; //FIXME: Remove after Debugging dge.getDragSource().addDragSourceMotionListener(this); } + + // FIXME: Fix by replacing AWT Drag 'n Drop with Swing DnD. + // Catch and ignore spurious DragGestures catch (InvalidDnDOperationException e) { - Logger.log("This Drag: "+thisDrag); //FIXME: Debugging - Logger.log("Last Drag: "+lastDrag); //FIXME: Debugging - ErrorDialog.bug(e); } - } + } - // FIXME: Remove after Debugging - protected String lastDrag = ""; - protected String getDragInfo(DragGestureEvent dge) { - String message = "time=" + System.currentTimeMillis(); - Component c = dge.getComponent(); - message += " type=" + c.getClass().toString(); - if (c instanceof Map.View) { - Map m = ((Map.View) c).getMap(); - if (m != null) { - message += ", name=" + m.getMapName(); - } - } - else if (c instanceof PieceSlot.Panel) { - PieceSlot slot = ((PieceSlot.Panel) c).getPieceSlot(); - if (slot != null) { - message += ", name=" + slot.getConfigureName(); - } - } - for (Iterator<InputEvent> i = dge.iterator(); i.hasNext();) { - InputEvent e = i.next(); - message += ", event="+e.toString() + ", when="+e.getWhen(); - - } - - return message; - } - //FIXME: End Debugging - /////////////////////////////////////////////////////////////////////////// // DRAG SOURCE LISTENER INTERFACE // Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/SetupStack.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/SetupStack.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/SetupStack.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -181,7 +181,7 @@ pos = getConfigureBoard().getGrid().getLocation(location); } catch (BadCoords e) { - ErrorDialog.dataError(new BadDataReport("Invalid board location",location,e)); + ErrorDialog.dataError(new BadDataReport(this, "Error.setup_stack_position_error", location,e)); } } } Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/boardPicker/board/Region.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/boardPicker/board/Region.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/map/boardPicker/board/Region.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -44,9 +44,11 @@ private boolean selected = false; public Region() { + setConfigureName("New Region"); } public Region(Point p) { + this(); origin = p; } Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/ChangePropertyButton.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/ChangePropertyButton.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/ChangePropertyButton.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -185,6 +185,7 @@ public void addTo(Buildable parent) { property = (GlobalProperty) parent; property.getToolBar().add(launch); + propChangeConfig.setName(property.getConfigureName()); } public static String getConfigureTypeName() { Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/IncrementProperty.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/IncrementProperty.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/IncrementProperty.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -19,6 +19,7 @@ package VASSAL.build.module.properties; import VASSAL.build.BadDataReport; +import VASSAL.i18n.Resources; import VASSAL.tools.ErrorDialog; import VASSAL.tools.FormattedString; @@ -32,16 +33,27 @@ public class IncrementProperty implements PropertyChanger { protected Constraints constraints; protected FormattedString format = new FormattedString(); + protected PropertyChangerConfigurer prop; - public IncrementProperty(String incr, Constraints constraints) { + public IncrementProperty(PropertyChangerConfigurer prop, String incr, Constraints constraints) { super(); + this.prop = prop; this.constraints = constraints; format.setFormat(incr); } - + public String getNewValue(String oldValue) { + int value = 0; try { - int value = Integer.parseInt(oldValue); + value = Integer.parseInt(oldValue); + } + catch (NumberFormatException e) { + ErrorDialog.dataError(new BadDataReport(Resources.getString("Error.non_number_error"),"Increment "+prop.getName()+": oldValue "+"="+oldValue,e)); + return oldValue; + } + + try { + int incr = Integer.parseInt(format.getText(constraints)); if (constraints.isWrap()) { if (value + incr > constraints.getMaximumValue()) { @@ -62,7 +74,7 @@ return String.valueOf(value); } catch (NumberFormatException e) { - ErrorDialog.dataError(new BadDataReport("Not a number",format.getText(constraints),e)); + ErrorDialog.dataError(new BadDataReport(Resources.getString("Error.non_number_error"),"Increment "+prop.getName()+": format="+format.getFormat()+", value="+format.getText(constraints),e)); return oldValue; } } Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/PropertyChangerConfigurer.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/PropertyChangerConfigurer.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/module/properties/PropertyChangerConfigurer.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -154,7 +154,7 @@ p = new PropertyPrompt(constraints, promptConfig.getValueString()); break; case INCR_CODE: - p = new IncrementProperty(incrConfig.getValueString(), constraints); + p = new IncrementProperty(this, incrConfig.getValueString(), constraints); break; case ENUM_CODE: p = new EnumeratedPropertyPrompt(constraints, @@ -208,7 +208,7 @@ p = new PropertyPrompt(constraints, sd.nextToken("Enter new value")); break; case INCR_CODE: - p = new IncrementProperty(sd.nextToken("1"), constraints); + p = new IncrementProperty(this, sd.nextToken("1"), constraints); break; case ENUM_CODE: p = new EnumeratedPropertyPrompt(constraints, sd.nextToken("Select new value"), sd.nextStringArray(0)); Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/widget/HtmlChart.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/widget/HtmlChart.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/build/widget/HtmlChart.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -47,6 +47,7 @@ import VASSAL.build.GameModule; import VASSAL.build.Widget; import VASSAL.build.module.documentation.HelpFile; +import VASSAL.i18n.Resources; import VASSAL.tools.ErrorDialog; import VASSAL.tools.ReadErrorDialog; import VASSAL.tools.ScrollPane; @@ -99,7 +100,7 @@ in.close(); } catch (IOException e) { - ErrorDialog.dataError(new BadDataReport("Chart not found",fname,e)); + ErrorDialog.dataError(new BadDataReport(this, Resources.getString("Error.not_found", "Chart"),fname,e)); } finally { IOUtils.closeQuietly(in); Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/chat/ui/PrivateMessageAction.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/chat/ui/PrivateMessageAction.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/chat/ui/PrivateMessageAction.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -45,12 +45,16 @@ && mgr != null && !p.equals(client.getUserInfo())); } - public void actionPerformed(ActionEvent evt) { - PrivateChatter chat = mgr.getChatterFor(p); - java.awt.Window f = (java.awt.Window)chat.getTopLevelAncestor(); - f.setVisible(true); - f.toFront(); + + public void actionPerformed(ActionEvent evt) { + PrivateChatter chat = mgr.getChatterFor(p); + // Chat is null of other player is ignoring us. + if (chat != null) { + java.awt.Window f = (java.awt.Window)chat.getTopLevelAncestor(); + f.setVisible(true); + f.toFront(); } + } public static PlayerActionFactory factory(final ChatServerConnection client, final PrivateChatManager chatMgr) { return new PlayerActionFactory() { Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/BasicPiece.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/BasicPiece.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/BasicPiece.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -37,7 +37,6 @@ import javax.swing.JTextField; import javax.swing.KeyStroke; -import VASSAL.build.BadDataReport; import VASSAL.build.GameModule; import VASSAL.build.module.Chatter; import VASSAL.build.module.GlobalOptions; @@ -51,8 +50,8 @@ import VASSAL.command.RemovePiece; import VASSAL.i18n.Localization; import VASSAL.i18n.PieceI18nData; +import VASSAL.i18n.Resources; import VASSAL.i18n.TranslatablePiece; -import VASSAL.tools.ErrorDialog; import VASSAL.tools.SequenceEncoder; import VASSAL.tools.image.ImageUtils; import VASSAL.tools.imageop.ScaledImagePainter; @@ -541,7 +540,7 @@ if (!"null".equals(mapId)) { newMap = Map.getMapById(mapId); if (newMap == null) { - ErrorDialog.dataError(new BadDataReport("Could not find map",mapId,null)); + Decorator.reportDataError(this, Resources.getString("Error.not_found", "Map"), "mapId="+mapId); } } final Point newPos = new Point(st.nextInt(0), st.nextInt(0)); Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/CounterGlobalKeyCommand.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/CounterGlobalKeyCommand.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/CounterGlobalKeyCommand.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -32,7 +32,6 @@ import javax.swing.KeyStroke; import javax.swing.SwingUtilities; -import VASSAL.build.BadDataReport; import VASSAL.build.GameModule; import VASSAL.build.module.Map; import VASSAL.build.module.documentation.HelpFile; @@ -46,8 +45,8 @@ import VASSAL.configure.PropertyExpressionConfigurer; import VASSAL.configure.StringConfigurer; import VASSAL.i18n.PieceI18nData; +import VASSAL.i18n.Resources; import VASSAL.i18n.TranslatablePiece; -import VASSAL.tools.ErrorDialog; import VASSAL.tools.SequenceEncoder; /** @@ -186,7 +185,7 @@ r = Integer.parseInt(rangeValue); } catch (NumberFormatException e) { - ErrorDialog.dataError(new BadDataReport("Not a number",rangeValue,e)); + reportDataError(this, Resources.getString("Error.non_number_error"), "range["+rangeProperty+"]="+rangeValue, e); } } filter = new BooleanAndPieceFilter(filter,new RangeFilter(getMap(), getPosition(), r)); Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Decorator.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Decorator.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Decorator.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -19,12 +19,16 @@ package VASSAL.counters; import java.awt.Point; + import javax.swing.KeyStroke; + +import VASSAL.build.BadDataReport; import VASSAL.build.module.Map; import VASSAL.command.Command; import VASSAL.i18n.Localization; import VASSAL.i18n.PieceI18nData; import VASSAL.i18n.TranslatablePiece; +import VASSAL.tools.ErrorDialog; import VASSAL.tools.SequenceEncoder; /** @@ -353,4 +357,16 @@ String fullKey = TranslatablePiece.PREFIX + key; return Localization.getInstance().translate(fullKey, key); } + + /** + * Report a Data Error detected by a trait + */ + protected static void reportDataError(EditablePiece piece, String message, String data, Throwable e) { + ErrorDialog.dataError(new BadDataReport(piece, message, data, e)); + } + + protected static void reportDataError(EditablePiece piece, String message, String data) { + ErrorDialog.dataError(new BadDataReport(piece, message, data)); + } + } Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/DynamicProperty.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/DynamicProperty.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/DynamicProperty.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -387,7 +387,7 @@ new PropertyPrompt(target, "Change value of " + target.getKey()))); commandConfig = new StringConfigurer(null, " Menu Command: ", "Change value"); keyConfig = new HotKeyConfigurer(null, " Key Command: ", KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK)); - propChangeConfig = new PropertyChangerConfigurer(null, "Action: ", target); + propChangeConfig = new PropertyChangerConfigurer(null, target.getKey(), target); propChangeConfig.setValue(new PropertyPrompt(target, " Change value of " + target.getKey())); PropertyChangeListener pl = new PropertyChangeListener() { Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Embellishment.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Embellishment.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Embellishment.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -48,7 +48,6 @@ import javax.swing.KeyStroke; import javax.swing.event.ListSelectionListener; -import VASSAL.build.BadDataReport; import VASSAL.build.GameModule; import VASSAL.build.module.documentation.HelpFile; import VASSAL.command.ChangeTracker; @@ -59,8 +58,8 @@ import VASSAL.configure.KeyModifiersConfigurer; import VASSAL.configure.StringConfigurer; import VASSAL.i18n.PieceI18nData; +import VASSAL.i18n.Resources; import VASSAL.i18n.TranslatablePiece; -import VASSAL.tools.ErrorDialog; import VASSAL.tools.FormattedString; import VASSAL.tools.SequenceEncoder; import VASSAL.tools.image.ImageUtils; @@ -416,7 +415,7 @@ value = isActive() ? v : -v; } catch (NumberFormatException e) { - ErrorDialog.dataError(new BadDataReport("Not a number",val,e)); + reportDataError(this, Resources.getString("Error.non_number_error"), "followProperty["+propertyName+"]="+val, e); } return; } @@ -517,15 +516,15 @@ if (tracker == null) { tracker = new ChangeTracker(this); } - + final GamePiece outer = Decorator.getOutermost(this); + final String levelText = resetLevel.getText(outer); try { - final int level = Integer.parseInt( - resetLevel.getText(Decorator.getOutermost(this))); + final int level = Integer.parseInt(levelText); setValue(Math.abs(level) - 1); setActive(level > 0); } catch (NumberFormatException e) { - ErrorDialog.dataError(new BadDataReport("Not a number",resetLevel.getText(Decorator.getOutermost(this)),e)); + reportDataError(this, Resources.getString("Error.non_number_error"), resetLevel.debugInfo(levelText, "resetLevel"), e); } } // random layers @@ -1027,7 +1026,7 @@ isPrefix.set(index, NEITHER); } } - else { + else if (index == 0) { names.set(index, null); isPrefix.set(index, NEITHER); } Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PieceDefiner.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PieceDefiner.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PieceDefiner.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -372,6 +372,7 @@ removeButton.setEnabled(false); copyButton.setEnabled(false); } + copyButton.setEnabled(index > 0); pasteButton.setEnabled(clipBoard != null); moveUpButton.setEnabled(index > 1); moveDownButton.setEnabled(index > 0 Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PlaceMarker.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PlaceMarker.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PlaceMarker.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -32,13 +32,13 @@ import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; +import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; -import VASSAL.build.BadDataReport; import VASSAL.build.Configurable; import VASSAL.build.GameModule; import VASSAL.build.GpIdSupport; @@ -58,9 +58,9 @@ import VASSAL.configure.IntConfigurer; import VASSAL.configure.StringConfigurer; import VASSAL.i18n.PieceI18nData; +import VASSAL.i18n.Resources; import VASSAL.i18n.TranslatablePiece; import VASSAL.tools.ComponentPathBuilder; -import VASSAL.tools.ErrorDialog; import VASSAL.tools.SequenceEncoder; /** @@ -81,13 +81,13 @@ protected String gpId = ""; protected String newGpId; protected GpIdSupport gpidSupport; // The component that generates unique Slot Id's for us - private static final int STACK_TOP = 0; - private static final int STACK_BOTTOM = 1; - private static final int ABOVE = 2; - private static final int BELOW = 3; + protected static final int STACK_TOP = 0; + protected static final int STACK_BOTTOM = 1; + protected static final int ABOVE = 2; + protected static final int BELOW = 3; protected int placement = STACK_TOP; + protected boolean above; - public PlaceMarker() { this(ID + "Place Marker;M;null;null;null", null); } @@ -129,7 +129,8 @@ .append(afterBurnerKey) .append(description) .append(gpId) - .append(placement); + .append(placement) + .append(above); return ID + se.getValue(); } @@ -290,7 +291,7 @@ } } catch (ComponentPathBuilder.PathFormatException e) { - ErrorDialog.dataError(new BadDataReport(e.getMessage(),markerSpec,e)); + reportDataError(this, Resources.getString("Resources.place_error"), e.getMessage()+" markerSpec="+markerSpec, e); } } return piece; @@ -350,6 +351,7 @@ description = st.nextToken(""); setGpId(st.nextToken("")); placement = st.nextInt(STACK_TOP); + above = st.nextBoolean(false); gpidSupport = GameModule.getGameModule().getGpIdSupport(); } @@ -389,6 +391,7 @@ protected IntConfigurer xOffsetConfig = new IntConfigurer(null, "Horizontal offset: "); protected IntConfigurer yOffsetConfig = new IntConfigurer(null, "Vertical offset: "); protected BooleanConfigurer matchRotationConfig; + protected BooleanConfigurer aboveConfig; protected JComboBox placementConfig; protected HotKeyConfigurer afterBurner; protected StringConfigurer descConfig; @@ -396,6 +399,7 @@ protected Ed(PlaceMarker piece) { matchRotationConfig = createMatchRotationConfig(); + aboveConfig = createAboveConfig(); descConfig = new StringConfigurer(null, "Description: ", piece.description); keyInput = new HotKeyConfigurer(null, "Keyboard Command: ", piece.key); afterBurner = new HotKeyConfigurer(null, "Keystroke to apply after placement: ", piece.afterBurnerKey); @@ -443,6 +447,16 @@ p.add(yOffsetConfig.getControls()); matchRotationConfig.setValue(Boolean.valueOf(piece.matchRotation)); p.add(matchRotationConfig.getControls()); + if (aboveConfig != null) { + aboveConfig.setValue(Boolean.valueOf(piece.above)); + p.add(aboveConfig.getControls()); + ((JCheckBox) matchRotationConfig.getControls()).addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + aboveConfig.getControls().setVisible(((JCheckBox) matchRotationConfig.getControls()).isSelected()); + } + }); + aboveConfig.getControls().setVisible(Boolean.valueOf(piece.matchRotation)); + } placementConfig = new JComboBox(new String[]{"On top of stack","On bottom of stack","Above this piece","Below this piece"}); placementConfig.setSelectedIndex(piece.placement); Box placementBox = Box.createHorizontalBox(); @@ -456,6 +470,10 @@ protected BooleanConfigurer createMatchRotationConfig() { return new BooleanConfigurer(null, "Match Rotation?"); } + + protected BooleanConfigurer createAboveConfig() { + return null; + } public Component getControls() { return p; @@ -488,6 +506,7 @@ se.append(descConfig.getValueString()); se.append(slotId); se.append(placementConfig.getSelectedIndex()); + se.append(aboveConfig == null ? "false" : aboveConfig.getValueString()); return ID + se.getValue(); } public static class ChoosePieceDialog extends ChooseComponentPathDialog { Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PlaySound.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PlaySound.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/PlaySound.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -29,7 +29,6 @@ import javax.swing.JPanel; import javax.swing.KeyStroke; -import VASSAL.build.BadDataReport; import VASSAL.build.GameModule; import VASSAL.build.module.documentation.HelpFile; import VASSAL.command.Command; @@ -39,8 +38,8 @@ import VASSAL.configure.HotKeyConfigurer; import VASSAL.configure.StringConfigurer; import VASSAL.i18n.PieceI18nData; +import VASSAL.i18n.Resources; import VASSAL.i18n.TranslatablePiece; -import VASSAL.tools.ErrorDialog; import VASSAL.tools.FormattedString; import VASSAL.tools.SequenceEncoder; @@ -112,7 +111,7 @@ } } catch (IOException e) { - ErrorDialog.dataError(new BadDataReport("Audio clip not found",clipName,e)); + reportDataError(this, Resources.getString("Error.not_found", "Audio Clip"), "Clip="+clipName, e); } } return c; Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Replace.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Replace.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Replace.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -18,28 +18,20 @@ */ package VASSAL.counters; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JCheckBox; -import javax.swing.JPanel; import javax.swing.KeyStroke; -import VASSAL.build.GameModule; import VASSAL.build.module.documentation.HelpFile; import VASSAL.command.Command; import VASSAL.command.RemovePiece; import VASSAL.configure.BooleanConfigurer; import VASSAL.i18n.PieceI18nData; -import VASSAL.tools.SequenceEncoder; /** * GamePiece trait that replaces a GamePiece with another one */ public class Replace extends PlaceMarker { public static final String ID = "replace;"; - protected boolean above; - + public Replace() { this(ID + "Replace;R;null", null); } @@ -80,40 +72,9 @@ public HelpFile getHelpFile() { return HelpFile.getReferenceManualPage("Replace.htm"); } - - public void mySetType(String type) { - SequenceEncoder.Decoder st = new SequenceEncoder.Decoder(type, ';'); - st.nextToken(); - String name = st.nextToken(); - key = st.nextKeyStroke(null); - command = new KeyCommand(name, key, this, this); - if (name.length() > 0 && key != null) { - commands = new KeyCommand[]{command}; - } - else { - commands = new KeyCommand[0]; - } - markerSpec = st.nextToken(); - if ("null".equals(markerSpec)) { - markerSpec = null; - } - markerText = st.nextToken("null"); - if ("null".equals(markerText)) { - markerText = null; - } - xOffset = st.nextInt(0); - yOffset = st.nextInt(0); - matchRotation = st.nextBoolean(false); - afterBurnerKey = st.nextKeyStroke(null); - description = st.nextToken(""); - setGpId(st.nextToken("")); - above = st.nextBoolean(false); - gpidSupport = GameModule.getGameModule().getGpIdSupport(); - } - public String myGetType() { - return ID + super.myGetType().substring(PlaceMarker.ID.length()) + ";" + String.valueOf(above); + return ID + super.myGetType().substring(PlaceMarker.ID.length()); } public PieceEditor getEditor() { @@ -175,29 +136,22 @@ } protected static class Ed extends PlaceMarker.Ed { - protected BooleanConfigurer aboveConfig = new BooleanConfigurer(null, "Only match states above this trait?"); public Ed(Replace piece) { super(piece); defineButton.setText("Define Replacement"); - JPanel p = (JPanel) getControls(); - p.add(aboveConfig.getControls(), 7); - aboveConfig.setValue(Boolean.valueOf(piece.above)); - ((JCheckBox) matchRotationConfig.getControls()).addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - aboveConfig.getControls().setVisible(((JCheckBox) matchRotationConfig.getControls()).isSelected()); - } - }); } protected BooleanConfigurer createMatchRotationConfig() { return new BooleanConfigurer(null, "Match Current State?"); } + protected BooleanConfigurer createAboveConfig() { + return new BooleanConfigurer(null, "Only match states above this trait?"); + } + public String getType() { - String s = super.getType(); - s = ID + s.substring(PlaceMarker.ID.length()) + ";" + aboveConfig.getValueString(); - return s; + return ID + super.getType().substring(PlaceMarker.ID.length()); } } } Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/SendToLocation.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/SendToLocation.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/SendToLocation.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -40,7 +40,6 @@ import javax.swing.KeyStroke; import javax.swing.SwingUtilities; -import VASSAL.build.BadDataReport; import VASSAL.build.GameModule; import VASSAL.build.module.Map; import VASSAL.build.module.documentation.HelpFile; @@ -56,8 +55,8 @@ import VASSAL.configure.StringConfigurer; import VASSAL.configure.StringEnumConfigurer; import VASSAL.i18n.PieceI18nData; +import VASSAL.i18n.Resources; import VASSAL.i18n.TranslatablePiece; -import VASSAL.tools.ErrorDialog; import VASSAL.tools.FormattedString; import VASSAL.tools.SequenceEncoder; /** @@ -73,6 +72,7 @@ */ public class SendToLocation extends Decorator implements TranslatablePiece { public static final String ID = "sendto;"; + private static final String _0 = "0"; public static final String BACK_MAP = "backMap"; public static final String BACK_POINT = "backPoint"; protected static final String DEST_LOCATION = "Location on selected Map"; @@ -251,22 +251,11 @@ if (map != null) { switch (destination.charAt(0)) { case 'L': - Integer xValue=null,yValue=null; - try { - xValue = Integer.valueOf(x.getText(outer)); - } - catch (NumberFormatException e) { - ErrorDialog.dataError(new BadDataReport("Not a number",x.getText(outer),e)); - } - try { - yValue = Integer.valueOf(y.getText(outer)); - } - catch (NumberFormatException e) { - ErrorDialog.dataError(new BadDataReport("Not a number",y.getText(outer),e)); - } - if (xValue != null && yValue != null) { - dest = new Point(xValue,yValue); - } + final int xValue = x.getTextAsInt(outer, "Xlocation", this); + final int yValue = y.getTextAsInt(outer, "YLocation", this); + + dest = new Point(xValue,yValue); + Board b = map.getBoardByName(boardName.getText(outer)); if (b != null && dest != null) { dest.translate(b.bounds().x, b.bounds().y); @@ -274,8 +263,12 @@ break; case 'Z': - Zone z = map.findZone(zone.getText(outer)); - if (z != null) { + final String zoneName = zone.getText(outer); + Zone z = map.findZone(zoneName); + if (z == null) { + reportDataError(this, Resources.getString("Error.not_found", "Zone"), zone.debugInfo(zoneName, "Zone")); + } + else { Rectangle r = z.getBounds(); Rectangle r2 = z.getBoard().bounds(); dest = new Point(r2.x + r.x + r.width/2, r2.y + r.y + r.height/2); @@ -283,11 +276,17 @@ break; case 'R': - Region r = map.findRegion(region.getText(outer)); - Rectangle r2 = r.getBoard().bounds(); - if (r != null) { - dest = new Point(r.getOrigin().x + r2.x, r.getOrigin().y + r2.y); + final String regionName = region.getText(outer); + Region r = map.findRegion(regionName); + if (r == null) { + reportDataError(this, Resources.getString("Error.not_found", "Region"), region.debugInfo(regionName, "Region")); } + else { + Rectangle r2 = r.getBoard().bounds(); + if (r != null) { + dest = new Point(r.getOrigin().x + r2.x, r.getOrigin().y + r2.y); + } + } break; } } @@ -335,8 +334,8 @@ * Offset the destination by the Advanced Options offset */ protected Point offsetDestination(int x, int y, GamePiece outer) { - int xPos = x + Integer.parseInt(xIndex.getText(outer)) * Integer.parseInt(xOffset.getText(outer)); - int yPos = y + Integer.parseInt(yIndex.getText(outer)) * Integer.parseInt(yOffset.getText(outer)); + int xPos = x + Integer.parseInt(xIndex.getText(outer, _0)) * Integer.parseInt(xOffset.getText(outer, _0)); + int yPos = y + Integer.parseInt(yIndex.getText(outer, _0)) * Integer.parseInt(yOffset.getText(outer, _0)); return new Point(xPos, yPos); } Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Translate.java =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Translate.java 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/counters/Translate.java 2008-12-27 14:20:44 UTC (rev 4694) @@ -39,7 +39,6 @@ import javax.swing.KeyStroke; import javax.swing.SwingUtilities; -import VASSAL.build.BadDataReport; import VASSAL.build.GameModule; import VASSAL.build.module.GlobalOptions; import VASSAL.build.module.Map; @@ -53,7 +52,6 @@ import VASSAL.configure.StringConfigurer; import VASSAL.i18n.PieceI18nData; import VASSAL.i18n.TranslatablePiece; -import VASSAL.tools.ErrorDialog; import VASSAL.tools.FormattedString; import VASSAL.tools.SequenceEncoder; @@ -62,6 +60,7 @@ * direction, optionally tracking the current rotation of the piece. */ public class Translate extends Decorator implements TranslatablePiece { + private static final String _0 = "0"; public static final String ID = "translate;"; protected KeyCommand[] commands; protected String commandName; @@ -99,13 +98,13 @@ SequenceEncoder.Decoder st = new SequenceEncoder.Decoder(type, ';'); commandName = st.nextToken("Move Forward"); keyCommand = st.nextKeyStroke('M'); - xDist.setFormat(st.nextToken("0")); + xDist.setFormat(st.nextToken(_0)); yDist.setFormat(st.nextToken("60")); moveStack = st.nextBoolean(true); - xIndex.setFormat(st.nextToken("0")); - yIndex.setFormat(st.nextToken("0")); - xOffset.setFormat(st.nextToken("0")); - yOffset.setFormat(st.nextToken("0")); + xIndex.setFormat(st.nextToken(_0)); + yIndex.setFormat(st.nextToken(_0)); + xOffset.setFormat(st.nextToken(_0)); + yOffset.setFormat(st.nextToken(_0)); description = st.nextToken(""); commands = null; } @@ -215,36 +214,26 @@ int x = 0; int y = 0; final GamePiece outer = Decorator.getOutermost(this); - final Board b = outer.getMap().findBoard(p); - String dist = xDist.getText(outer); - String index = xIndex.getText(outer); - String offset = xOffset.getText(outer); - try { - x = Integer.parseInt(dist) + Integer.parseInt(index) * - Integer.parseInt(offset); - if (b != null) { - x = (int)Math.round(b.getMagnification()*x); - } - } - catch (NumberFormatException e) { - ErrorDialog.dataError(new BadDataReport("Not all numbers",dist+","+index+","+offset,e)); - } - dist = yDist.getText(outer); - index = yIndex.getText(outer); - offset = yOffset.getText(outer); - try { - y = Integer.parseInt(dist) + Integer.parseInt(index) * - Integer.parseInt(offset); - if (b != null) { - y = (int)Math.round(b.getMagnification()*y); - } + final int Xdist = xDist.getTextAsInt(outer, "Xdistance", this); + final int Xindex = xIndex.getTextAsInt(outer, "Xindex", this); + final int Xoffset = xOffset.getTextAsInt(outer, "Xoffset", this); + + x = Xdist + Xindex * Xoffset; + if (b != null) { + x = (int)Math.round(b.getMagnification()*x); } - catch (NumberFormatException e) { - ErrorDialog.dataError(new BadDataReport("Not all numbers",dist+","+index+","+offset,e)); - } + final int Ydist = yDist.getTextAsInt(outer, "Ydistance", this); + final int Yindex = yIndex.getTextAsInt(outer, "Yindex", this); + final int Yoffset = yOffset.getTextAsInt(outer, "Yoffset", this); + + y = Ydist + Yindex * Yoffset; + if (b != null) { + y = (int)Math.round(b.getMagnification()*y); + } + p.translate(x, -y); } Modified: VASSAL-src/branches/uckelman-dialogs/src/VASSAL/i18n/VASSAL.properties =================================================================== --- VASSAL-src/branches/uckelman-dialogs/src/VASSAL/i18n/VASSAL.properties 2008-12-27 13:57:20 UTC (rev 4693) +++ VASSAL-src/branches/uckelman-dialogs/src/VASSAL/i18n/VASSAL.properties 2008-12-27 14:20:44 UTC (rev 4694) @@ -6,6 +6,8 @@ # Dialogs # Dialogs.disable=Don't show this again +Dialogs.show_details=Show details +Dialogs.hide_details=Hide details # # @@ -21,8 +23,6 @@ BugDialog.user_email_address=Your email address: BugDialog.send_button=Send BugDialog.dont_send_button=Don't Send -BugDialog.show_details=Show details -BugDialog.hide_details=Hide details BugDialog.old_version_instructions=<html>VASSAL had an internal error. Because this version of VASSAL is no longer current, bug reporting is disabled. If you can reproduce this bug with a <a href="http://sourceforge.net/project/showfiles.php?group_id=90612">current verision</a> of VASSAL, please do so and alert the VASSAL developers to the problem.</html> BugDialog.connection_failed_instructions=<html>VASSAL was unable to submit your bug report. Please post the file <a href="file://{0}">{0}</a> and a description of what you were doing when the bug occurred in the <a href="http://www.vassalengine.org/forums/viewforum.php?f=3">Technical Support & Bugs</a> section of the VASSAL Forum.</html> BugDialog.how_to_proceed=Due to the error, VASSAL may be in an inconsistent state or may behave erratically. We recommend that you save your open files under different names and restart VASSAL.\n\nDepending on what the error was, modules, saved games, and logs written afterwards may be corrupt. Be sure to check any modules, saved games, or logs written after an error before continuing to use them. @@ -79,18 +79,12 @@ # -# class loading and instantiation errors +# class loading and instantiation errors # Error.custom_class_error_title=Custom Class Error Error.custom_class_error_heading=Custom Class Error Error.custom_class_error_message=There was an error loading or instantiating the class {0}, which is provided by this module. Please report this problem to the module maintainer. - - - - - - Error.invalid_vassal_file_title=Invalid VASSAL File Error.invalid_vassal_file_heading=Invalid VASSAL File Error.invalid_vassal_file_message=The file ''{0}'' is not recognized by VASSAL. @@ -119,6 +113,12 @@ Error.not_a_gamepiece_heading=Invalid GamePiece Error.not_a_gamepiece_message=The class {0} which you attempted to import does not implement the GamePiece interface. Only classes which are GamePieces may be imported this way. +# Bad Module Data Error Messages +Error.not_found={0} not found +Error.non_number_error=Numeric field contains a non-number +Error.place_error=Error trying to place new marker +Error.setup_stack_position_error=Can''t position SetupStack, Invalid board location + GameModule.version_warning_title=Version Mismatch GameModule.version_warning_heading=Version Mismatch GameModule.version_warning_message=This module was created using version {0} of VASSAL. You are using version {1}, which is older. It''... [truncated message content] |