2.1 alpha 14 (not released yet) - Fixed: Project/New Plug-in Wizard: option to add DIY code should not be visible because it isn't finished. - Fixed: Remove Trailing Spaces should be disabled if a code editor is not active. - Fixed: Project: add task dialog may display wrong error message. 2.1 alpha 13 (2668) - Fixed: Regression: marker/token editor not extracting correct shape from silhouette images; results in all tokens being rectangular. - Fixed: Card Layout Editor in project system: dragging a layer only updates the layer information temporarily; it is lost after selecting another layer. - Fixed: when updating a core component, restart is required before the request can complete. - Fixed: Regression: custom mythos location portrait default scale set to "0." instead of "0.5". - Added Relationship card editor. - Added card expansion symbol graphic for The Lurker at the Threshold. - Added items for The Lurker at the Threshold. - Gate Marker Editor: added support for effect symbols (devouring gate, monstrous gate, etc.) and split gates. - Mythos Card Editor: allows optional second location. - Proxy options allow using the catalogue/update/core download mechanism through a proxy server. - Updated body typeface (Linux Libertine) to 4.7.5 series. - InsertCharsDialog (used to insert symbols into markup and preview font files in projects) excludes surrogate code range (D800-DFFF), allows setting custom fallback fonts, allows switching to the full Unicode range. - Expansion symbols printed on components are mipmapped to improve quality when there is a mismatch between the resolution of the symbol and the resolution of the component being drawn. - Added plug-in import action, which is like adding an import plug-in task, but you right click on a bundle in the project. - Portrait panel: can paste an image from the clipboard into the field (Ctrl+V/Command+V); it will be written to a temporary file and opened. - Project file management improvements/fixes: - when moving a file any editors showing the file are updated with the new location - when pasting a file into a folder that already contains a file with the same name, and not pasting into the same folder as the original, should offer option to overwrite in addition to renaming - Two new interfaces, PortraitProvider and Portrait, have been added that unify access to the portraits in game components. See the updated Portrait Thief plug-in source in the plug-in authoring kit for an example of use. - The component viewer plug-in now lists portraits separately via the PortraitProvider interface. Temporary Workaround: A bug sometimes prevents updating a plug-in. It occurs when the plug-in was previously uninstalled, and for some reason reinstalling it does not remove it from the uninstalled list. As a result, the plug-in bundle is updated but never loaded. The cause is currently unknown, so as a temporary workaround the uninstall list is now cleared when the application starts, after deleting/updating any bundle files that couldn't be updated during the last run. Currently this means that bundle updates are handled as follows: - On installing a plug-in, if no bundle with that name exists, then the plug-in is copied to the plug-in folder. If it is a regular plug-in (not an extension or theme), then it is immediately started. - If a plug-in bundle with the same name already exists, then that bundle is deleted. This usually fails because the existing bundle is probably loaded and in use---see uninstallation, below. The new plug-in will be copied to a bundle with the same name, but with ".autoupdate" appended. When the application is next started, ".autoupdate" bundles will be installed automatically, and renamed to the original bundle name. - When a bundle is uninstalled, an attempt is made to delete the bundle immediately. This is likely to fail, as the bundle file is probably in use (as it has been "merged" into the running application). In this case, another attempt is made to delete the bundle when the application closes. This often fails as well; it depends on the platform and plug-in type. In this case, the bundle file is added to a list of undeletable bundles. When the program is next started, it again attempts to delete the bundle. 2.1 alpha 12 (2659) - Fixed: An out of date copy of the ImageWriter library was being built into release distributions, causing Image.write to fail with an error message. - Fixed: GameData parsers must specify an encoding. - Fixed: Probability table, mythos text plug-ins should instantiate their dialogs lazily. - Fixed: Plug-ins that require an update to SE were not candidates for being considered "new". - Fixed: Regression: NPE when choosing base folder on New Project Dialog. - Fixed: When selecting a project parent folder, Make New Folder should be disabled if a project is selected. - Fixed: Regression: NPE when cancelling the file dialog while adding a new Import Plug-in task. - Fixed: When double-clicking on an error stack trace in the script console, the error message is not parsed correctly when it is decorated with a function name after the line number. - Fixed: On some systems, imageutils Image.save function failed. - Fixed: Regression: code editor escapes more characters than necessary because ISO-8859 safe list corrupted during conversion of source base to UTF-8. - Fixed: Find in Project: when switching to/from regular expression mode via the context menu, the pattern text needs to be reparsed in order to update the error highlights. - Fixed: NPE when right clicking on a task folder with missing task type info. - Detachable editor tabs. - Added "Go To (file)" to context menu of script console when right- clicking over an error line. - Updated Spanish game text. - Markup boxes cache line break positions during layout, yielding a small performance boost on average. This can be disabled by setting the shared key "use-fast-line-breaker" to "no". - Markup boxes can accept multiple tab stops. - Added the interface EditorListener to StrangeEonsEditor: public static interface EditorListener extends EventListener { /** * An editor has become the selected editor. * @param editor the editor that was activated */ public void editorSelected( StrangeEonsEditor editor ); /** * An editor is no longer the selected editor. * @param editor the editor that was deactivated */ public void editorDeselected( StrangeEonsEditor editor ); /** * An editor is about to close and will be removed from the * application. * @param editor the editor is closing */ public void editorClosing( StrangeEonsEditor editor ); /** * An editor has been detached from the application. * @param editor the editor that was detached */ public void editorDetached( StrangeEonsEditor editor ); /** * An editor has been reattached to the application. * @param editor the editor that was reattached */ public void editorAttached( StrangeEonsEditor editor ); } An editor listener can be added (using addEditorListener(el)) to either an individual editor (in which case it applies to that editor only), or to the entire application (in which case it is called as if it were added to every editor). - Added getPlugin() to PluginContext in order to obtain a reference to the plug-in associated with the context (or null if none). - Resource scripts that are opened by double-clicking an error in the script console are now shown in read-only script editor tabs instead of standalone dialogs. - Added the "Resource Reference" task type, which creates a copy of the program resources, including all core components (they are installed if required). This, in conjunction with an upcoming translation tools plug-in, will replace the resource tool dialog. Plug-in Authoring Kit - added example code for editor listeners: - added source code for Zip Tools plug-in to