EXECUTIVE SUMMARY ================= * Eclipse IDE integration * View changes graphically directly in the models * Enhanced dynamic behavior of symbols - Templates to include common elements in multiple symbols - Dynamic ports shown based on component interfaces etc. * Faster, more intuitive modeling - New tools for handling model hierarchies - Create large objects by dragging area * New generator functions - generator parameters, local variables - conditional breakpoints - break into running generator * New graphics engine with high-quality anti-aliasing * Windows 7 support HIGHLIGHTS ========== General * New: Windows 7 support * New: Smoother anti-aliased high-quality graphics with Cairo library * New: Allow new Metamodeling Security Level: Type. * Improvement: Better international locale support Diagram Editor * New: Diagram element format dialog (e.g. location, size) * New: Non-scalable symbols * New: Binding creation preview in Diagram Editor * New: Create large objects in Diagram Editor by dragging area Symbol Editor * New: Template symbol element for building symbols dynamically from subsymbols * New: Dynamic ports * New: Conditional role lines * New: Symbol Browser - browse, create, edit and delete type and library symbols * New: New powerful color selection/editing dialog * New: Sidebar & treeview added to Symbol Editor * New: Creation of polylines, splines, connectables and templates from polyline-like elements using Duplicate As... Metamodeling & Metamodeling tools * New: Can create Object, Role and Relationship types from a Graph Tool, with the 'Add New...' menu item in the Types tab pop-up menus. * New: Adding ports offers Static and Dynamic ports, explaining the difference and where each are created. Generator Editor & MERL * New: MERL enhancements: - runSuper - like run but looks up the named generator in the supertype of the graph type containing the current generator. - local variables, scoped to a single invocation of a generator - generators can now have parameters - breakpoints can have conditions * New: Generator diff with saved version * New: A generator can have an icon, currently shown if the generator is included in editors' action toolbar * New: Generated Files status bar shows total size in kB and speed (kB/s) * New: A Break button is now added to the Progress Dialog when running a generator * New: User can set the timeout in milliseconds for running background generators API * New: API commands for creating and editing non-properties via dialogs * New: API command to run a generator on a specific graph * New: API command to return a string containing the names of all the generators defined in a graph type * New: Command-line parameter saveWSDL:, which will save the WSDL to the file specified in the next argument. ================================================================================ General * New: Windows 7 support * New: Smoother anti-aliased high-quality graphics with Cairo library * New: Deleting a graph also deletes subgraph links to it from graphs in open projects * New: Support for finding all subgraph links to a graph * New: Symbol icons for buttons etc. now have transparent background on Windows * Improvement: Much faster graphics on Mac OS X Aqua * Improvement: Better memory management * Improvement: Better international locale support * Improvement: Better time zone calculation * Fix: Processing of UI events while file dialogs are open * Fix: If an error occurred while choosing the printer, or the user cancelled some extra printer dialog after choosing the printer and before choosing the Diagram Editor scale, MetaEdit+ could be left waiting forever for the printer * Fix: Negative or floating point numbers were being read from .ini files as symbols rather than numbers Dialogs & Browsers * New: Graph Manager has Delete Selected button to delete multiple graphs at once * New: In Graph and Types Manager, replaced Unselect All button with Invert Selection * New: Allow multiple additions to Replace and In lists in Replace dialog * New: Trees stay open when updated * New: Trees select the correct element when updated, even if that element occurs in several different places in the tree * Correction: Updating a list widget with a new list and selection could leave the new elements undisplayed * Correction: Clicking in selection in multi-selection dataset now selects just that element Graphical editors * New: Scroll Tool in graphical editors * Fix: Abandoning imported types could cause error in open editors * Fix: Pressing tab in an empty graphical editor caused a #select error * Fix: When the screen color depth was changed, graphical editor windows could give an error * Correction: Adding roleline/polyline breakpoint in graphical editors now snaps to grid according to the setting Diagram Editor * New: Diagram element format dialog (e.g. location, size) * New: Non-scalable symbols - handles are disabled appropriately - format dialog only allows appropriate operations * New: Binding creation preview in Diagram Editor * New: Create big objects in Diagram Editor by dragging area * New: Show/Hide sidebar * New: Toolbar buttons made from text not symbols are now as wide as the text, up to a maximum of 8 em's * New: Straighten multiple relationships (+ shift restores target points) * New: True printing of fountain fills on host printers * Fix: Losing focus & tool deactivation during connection creation started from 'Add new Role' menu selection didn't clear up the unfinished role/connection * Fix: Changing grid settings from status bar was possible even if the user did not have the lock for this diagram * Fix: Delete requires locks on both diagram and graph * Correction: When creating a relationship from a small object to a larger enclosing object, clicking a certain target point on the larger object's non-sticky connectable did not cause the role to attach there * Correction: When a lifeline (i.e. fence in fence diagram) object was created in UML's Sequence Diagram, the new object was created on the left edge of the drawing area regardless where the mouse was clicked. * Cosmetic: View | Selected dialog now shows symbols with object/relationship types Symbol Editor * New: Template symbol element - build symbols dynamically from subsymbols - reveal subsymbols as dynamic ports * New: Conditional role lines * - role symbol can have several role lines * New: New powerful color selection/editing dialog * New: Sidebar & treeview added to Symbol Editor - enables users to access elements within groups - menus are accessible from the treeview * New: Definition of non-scalable symbols * New: Show extra info/help about the current tool or editing mode in the status bar * New: Creation of polylines, splines, connectables and templates from polyline-like elements using Duplicate As... * New: ctrl+click deletes existing break point during polyline creation * New: 'Align to Grid' button added toolbar * Correction: Undo creation for add/remove breakpoint added for polylines * Correction: Position and Size format dialog allows smaller that 1 (but greater than zero) absolute width and height, as a legal scale setting can render these values less than 1 * Correction: The color, line style and line weight menus in Symbol Editor are now enabled/disabled depending on the selection - e.g. all of them are disabled for connectables, all of the are enabled for rectangle, etc.) * Correction: Adding ports in connectables format dialog by-passed dialog's buffering and added ports directly to the symbol * Correction: Add Existing Port... in connectable's format dialog didn't filter ports that were already assigned * Cosmetic: Format dialogs now denote the type of edited element in their window caption (i.e. 'Format Rectangle') * Cosmetic: Increased size for format dialogs SVG * Correction: Creating MEGroupGO from SVG didn't do a lot of additional element initialization * Correction: Faulty definition for the regex that parses X and Y for point from XML strings Symbol Library & Browser * New: Symbol Library is now stored globally in the repository (Common area) * New: New Symbol Browser - browse, create, edit and delete type and library symbols - import from library to symbol editor or save copy from symbol editor to library - use as template subsymbols - library symbol's are associated with specific editors by their type (Object, Relationship, Role) Metamodeling & Metamodeling tools * New: Can create Object, Role and Relationship types from a Graph Tool, with the 'Add New...' menu item in the Types tab pop-up menus. - this allows creating metamodels top-down, starting from the Graph type. * New: Improved order of Graph Types Tool lists: Object, Relationship, Role * New: Adding ports offers Static and Dynamic ports, explaining the difference and where each are created. - static ports shows port types and allows to select them or their instances - dynamic allows to select NonProperty types * Correction: If the minimum height of a generated property dialog window is taller than the screen, set the minimum height to the screen height * Correction: Creation Timestamp was missing from the list of property data types when selecting a filter in Property Tool * Correction: Two type bindings were being considered identical if their only difference was the cardinality of a connection * Cosmetic: Property dialog layout could leave some fields slightly the wrong height GXL * Fix: If MXTs do not supply property slot ids, we get an error 'The variable name ''p1'' is overloaded for Object_...' if we first import an MXT that creates a type with some properties, followed by a second MXT that has those properties plus an extra one - the type XML schema allowed the elements' id attribute to be optional, and import has used the next name in the series p1, p2..., excluding those found in the supertype - but not those found existing in this type (see comment for 1.3.1). - now find the maximum of all p[0-9]+ names in the supertype and existing type (including ones to be removed by this new MXT), and start allocating new names after that. * Fix: Importing an MXT file which tried to change the order of existing property slots resulted in the wrong order. The order of existing slots is intended to override that of MXT slots, because MXT generation order is often unclear (e.g. a mixture of a collection of properties with properties from relationships). - to change the order of slots, the simplest way is to use the form-based metamodeling tools. It is also possible with MXT: log in opening no projects, open projects with shift down so no instances are loaded (otherwise the next step would lose their property values), import an MXT that removes the properties, then import an MXT with the desired order. - old slots were being removed from the collection, and the index of each was recorded at the time of removal. Removing first, second and third thus gave indexes 1, 1, 1. * Fix: Creating types names after metatype class names was not possible in graphical GOPRR * Correction: Before, control characters like FormFeed (0x0C) were output in XML, where as XML only allows tab, CR and LF Generator Editor & MERL * New: Generators allow Unicode characters in type names without escaping * New: Generator diff with saved version * New: Enter maintains indent in generators * New: Added Format | Background Color to Generator Editor * New: Generated Files status bar shows total size in kB and speed (kB/s) * New: Existing Generated Files window is used rather than opening a new one * New: A generator can have an icon. Currently it is only shown if the generator is included in editors' action toolbar. * New: Regex translators can have their subexpression matches translated, e.g. $1%upper; on the RHS will find the match for $1, then translate it with the %upper translator (looked up when used) * New: Support for background process generation to start with a full NP stack and to use coloring * New: Hypertext links reply to #innermostNP with their NP (or NP pointed to by their property) * New: Added runSuper - like run but looks up the named generator in the supertype of the graph type containing the current generator. - can call subgenerators of a different name from the current generator - cannot be used in Graph, nor in generators not stored in a particular Graph type * New: Added local variables, scoped to a single invocation of a generator - long syntax: local...write...close, local...read - short syntax: @foo (NB: @ is now a reserved character) - local and global variables are in separate namespaces, i.e. $foo has no relationship to @foo - For generators: report 'Main' @a = 'outer' subreport 'Sub' run @a endreport report 'Sub' @a = 'inner' endreport the output will be 'outer': the subgenerator cannot read or write the supergenerator's local variables (even if Sub is the same generator as Main, i.e. for recursive generators) * New: Added the new MERL commands to the template list: - encoding runSuper executeBlocking internal...execute local @variable graphs * New: Generator Debugger shows local as well as global variables - local variables are shown for the context of the generator currently selected in the generator stack list * New: MERL breakpoints can have conditions, which are evaluated as MERL snippets in the current context (including element stack and variables), and the output compared to the supplied string or regular expression. - "Breakpoint | Edit Condition" will edit the condition for the breakpoint in the selection (if none, a breakpoint with an empty condition is first added at the start of the selection) - setting the condition source to None or pressing Clear will remove the condition, i.e. make the breakpoint always active. * New: Generators can now have parameters, and can be defined with a new syntax: myGenerator(@a, @b) 'firstParameter is: ' @a ' and second is '@b'. Note there can be no space before opening parenthesis. Generators can be called with an extra arguments keyword and comma-separated arguments: subreport 'myGenerator' arguments 'firstArg', 'secondArg' run Each argument can be made up of a string of MERL commands (as in the orderby clause for do and foreach loops): subreport 'myGenerator' arguments 'first' 'Arg', 'second' 'Arg' run Arguments to subreport calls can now be nested, e.g. subreport ... arguments subreport...arguments...run run * New: If the number of arguments supplied when calling a generator does not match the number of parameters expected by that generator, any missing parameters are given an empty string as a value, and any extra arguments are added as local variables called __extraParamN, where N is the 1-based index of the argument. - a warning is raised when running from a Generator Editor, but not elsewhere * New: Can call subgenerators with shorter syntax, myGenerator(). Note there can be no space before opening parenthesis. Any arguments can be added separated by commas. Each argument can be made up by multiple commands in the same way as in subreport...arguments...run, e.g. myGenerator('first' 'Arg' , 'second' 'Arg') - new node type NewSubreportNode, a subclass of RunNode which merges SubreportNode behaviour into itself. * New: A Break button is now added to the Progress Dialog when running a generator, allowing infinite recursion problems to be cleanly debugged - pressing Break interrupts the generator and opens a Generator Debugger at the current state. - this feature still needs work to be a true debugging tool: the resulting debugger does not seem to behave right e.g. with Step Over if the recursion is a simple call to the same generator. * New: User can set the timeout in milliseconds for running background generators (identifier generators, text and condition generators in symbols). Default is 200ms. - most background generators run in under 1ms, but things like iterating through all graphs or using representation information can take longer. - the time is clock time, not CPU time used by MetaEdit+ or that generator, so another high priority program can occasionally cause spurious timeouts. - if there is an infinite recursion in a background generator, it may well be run for many objects simultaneously, since many are visible on the screen. This can slow response to a crawl: with 20 objects and 200ms, you have to wait 4 seconds for each click to be processed. - we advise leaving the default alone while building generators, but it can be increased or turned off entirely with a value of 0 in order to make sure all background generators are run to completion, e.g. during code generation. * New: Hierarchical tree view of generators maintains which branches are open on update * New: Maintains selection of correct generator in correct hierarchical context on update, in more cases than before * New: When creating or renaming a generator, accept the new syntax for generator names, myGen() * New: If the name of a generator has changed in the source code, choosing Rename As... will offer the new name by default * Change: At the end of a generator run in the debugger, keep the outermost generator and its variables visible in their lists * Change: A named translator can now be redefined during a generator. * Fix: Ignore "Value not found" error when deleting a generator that has already been deleted (e.g. from another Generator Editor window) * Fix: Reusing MERL debugger caused execution to hung * Fix: Generators running in the background with a timeout (symbol texts and conditions, identifier generators) were not passing errors to the parent process. E.g. during commit a window refresh could cause an attempt to read an object from the repository, raising an error: "Cannot read persistent object when cache is reversed". * Fix: true AND not false AND not true was ignoring last condition - fixed precedence to be like normal order: parentheses, not, and, or * Fix: Renaming a generator did not cope with the (impossible?) case that the generator was unchanged and uncompiled * Fix: Representation commands run on strings etc. give error - Object, Relationship and Role are legal and work - Graph and Port aren't illegal but give no output - String gives a MERL error * Fix: Globally removing all breakpoints gave a #subnodesDeeply error if there was an uncompiled generator * Fix: Errors when switching between hierarchical and alphabetical view in Generator Editor * Fix: Display updates in the debugger are now processed in the correct, i.e. UI, process, and at the time they are requested by the executing generator - this cures a variety of possible errors in the debugger caused by the UI state being out of synch with the generator execution state * Correction: Don't need to show an error dialog when evaluating a representation command in MERL, if the target of that command is undefined * Correction: Allow removal of breakpoints in comments * Correction: Made Generator menu bar and pop-up menus the same (apart from Exit) * Correction: Execution context stack now properly constructed for displaying texts and checking conditions * Correction: Debugger did not update variables pane values * Correction: The MERL parser was only allowing body generators, e.g. in symbols or identifier generators, with at least one clause; allow zero * Correction: When showing errors for a generator, syntax highlight all the errors, since all will be shown in the error pane * Correction: When executing generators in batch mode, do not offer to open the Generator Editor if a generator contains compile errors * Correction: Select new generator when saving it, and maintain selection when switching between hierarchical and alphabetical view * Correction: In Generator Debugger, generator stack selected the wrong list element if the same generator was in the list more than once, e.g. with a recursive generator. * Cosmetic: Corrected and combined some variant dialogs from "Select a report first!" to use generator instead of report. * Cosmetic: Rename Generator dialog mentioned 'report' not 'generator' API * New: API commands for creating and editing non-properties via dialogs - for starting the Create Graph dialog: MEAny createGraphDialog(METype) - for creating a new non-property from a dialog: MEAny createFromPropertyDialogInArea(METype, xsd:int) - for opening a Property Dialog on an existing non-property: xsd:boolean propertyDialog(MEOop) - Note that if the user takes a long time in the dialog, the API call may time out. In that case the dialog remains open, and actions taken there are valid - the API caller just doesn't hear about the results after receiving the timeout notification. * New: Added API command to run a generator on a specific graph: - Boolean forGraphRun(MEOop) * New: Added API command to return a string containing the names of all the generators defined in a graph type, one per line - String generatorNames(METype) * New: Command-line parameter saveWSDL:, which will save the WSDL to the file specified in the next argument. - The settings for hostname and port will be taken from the API Tool most recently started via the API, or the defaults if none. Startup and main launchers * New: If the user types in the User Name or Password fields, automatically select Other as the user for login. * New: Allow new Metamodeling Security Level: Type. - With this setting when metamodeling, only the affected type is locked, allowing multiple metamodelers to work on the same metamodel. * New: Options | System and metaedit.ini setting for backgroundGeneratorTimeoutMilliseconds, default 200 - NB: The 4.5 backgroundGeneratorTimeout.mep patch added a similar setting but for seconds. If you use that, its values will be ignored - please switch to this new setting. * New: Added option System | Use Cairo if available. - When enabled, Diagram and Symbol Editors will use the external Cairo library for most graphics except text. - The most visible effect is a softening of curves and diagonal lines by anti-aliasing * New: Added option "Shift wants lock on open". - By default it is false, and corresponds to the original MetaEdit+ behavior that opening an editor or property dialog tries to get the lock for editing, unless shift is held down. If set to true, this reverses the behavior of shift, so shift must be held down to get the lock. * New: Added Windows 7 as a new widget set Screen option * New: Allow Help Path: Manual Root to be a URL, e.g. http://www.metacase.com/support/45/manuals * New: Diagram Editor sidebar visibility option * New: Main Launcher's Metamodel menu now includes item for opening Symbol Library Browser * Correction: The Screen page in Options lost the connection between the color selection and the color sliders when changing to another page and back Multiuser * Fix: when deleting a graph, rather than locking the repSets of all its objects and bindings, only lock the repSets that will be changed * Correction: When adding/deleting an explosion, the locks were taken correctly but the lock information message was being read from the graph itself rather than the explosions