Executive summary - Versioning system internally and integrated with API to SVN and git - Graph, Role and Port types can now have icons (like Object and Relationship) - deleting graph in browser shows unused subgraphs, asks whether to delete them - Specify supertypes in MERL - Improved Number Property dialog field behaviour on illegal entries - UUID Hex property types - Optimization: Object representations in a Diagram Editor cache their dynamic ports' connectables. - New: Allow drag-drop to move and copy elements in a property dialog's non-property collection - 30% faster login for multi-user demo repository - Improved zoom behaviour - Pasting, copying and replacing includes explosions - Property dialogs show scrollbars correctly when contents exceed window size - New: Mac OS X 10.7 - 10.10 widget set, default on OS X >= 10.7 and Linux - Correction: Type toolbar button images scaled incorrectly on Mac OS X hiDPI display modes - New: Indent/unindent selected text block with Tab / Shift+Tab - Change: To tab out of a text field, use Ctrl+Shift+Tab. - New: Recognize context menu key on Windows, opening the context menu of the currently focused widget (if any) - Fix: A broad and deep generator call tree, e.g. one that recurses via _*, could use up all memory calculating its hierarchy in the Generator Editor. - Fix: Close editors reliably when their graph representation has been abandoned - changing generator name in source asks whether to rename or duplicate - Saving and loading .rep files maintains timestamp - Made license expiry date behaviour consistent and messages clearer - Stabler sorting of elements in XML when comparing across repositories - Generator Output Tool remembers last closed size, is larger by default - Matrix & Table Editors larger on open, enough to fit contents if possible - textFor[Graph]Run() API function runs generator and returns results string - New API commands importGraph for Diagram, removeBinding for Matrix, documentGraphsInto: - roleDrawing setting in metaedit.ini with values #diagonal (default) or #manhattan - Info Tools show locking information - New Primer and Getting started for MERL generator language - MERL variables can store text formatting and links - MERL can navigate on from ports and use do/dowhile on graphs - MERL variables can store lists of model elements and navigate with them - MERL external...read runs the command without opening a shell GUI, and outputs the result - MERL internal...read runs the internal API command-line string function and outputs the result - Command-line string function ā€“ exists: - answers T if that filename exists - Command-line string functions ā€“ user, defaultProject, dbDir, dbName - Return repository information - Command-line string function ā€“ textForMERL: - Runs the arguments as a MERL snippet and returns the result. - Hardware fingerprints take more aspects into account, allowing keys to continue working in more cases. Windows * Fix: Retry if Windows gives some rare network errors (ERROR_UNEXP_NET_ERR, ERROR_TOO_MANY_POSTS) * Cosmetic: Background colour was XP beige not gray in a few places: - In the corner square between vertical and horizontal scroll bars - In the row and column labels in a table - In the column headers in a new-style dataset Mac OS X * New: Mac OS X 10.7 - 10.10 widget set * Correction: Type toolbar button images scaled incorrectly on Mac OS X hiDPI display modes * Correction: Recognize 'Lucida Grande' and 'Helvetica Neue' as sans-serif fonts * Correction: Prior to OS X 10.10 Helvetica Neue font was forced to plain Helvetica - now allowed, as it has become a default system font in 10.10 * Correction: Allow resize corner to work better on Macs, which do not respect the minimum size. * Correction: Secondary screens on Mac had their positions calculated incorrectly Licensing * New: Hardware fingerprints take more aspects into account, allowing keys to continue working in more cases. - Note that because of this change, a 5.1 executable will not be able to use a key obtained by a 5.5 executable (and vice versa). MetaCase recommends that all customers move to a pure 5.5 environment, as 5.5 will work better with 5.1 repositories than 5.1 did, automatically upgrading them as necessary. - Our philosophy is that a change in MetaEdit+ version should not affect your internal versioning needs (unlike a change in your metamodel version, where you may want certain repositories to stay at an older version of the metamodel). - * New: For licenses that expire, Help | About displays expiry date and full days left * Cosmetic: When showing expiry time, make clear that days left are full days (i.e. 0-1 days more than shown) - On Windows rental licenses, warning dialog before starting shows "less than N days left", and MetaEdit+ shows "N-1 full days left" * Cosmetic: When setting expiry time from key, subtract one second to make it clearer which day the key ends - e.g. 31.12.2015 23:59 - Matches correction in KeyMaker, which adds one day to expiry date * Correction: Removed unusable 'Enter Key' button from key expiry dialogs * Cosmetic: Improved texts in key expiry dialogs Repository * New: increment version number to 5.5 * New: Ignore files and directories in the repository structure that begin with a period ".", e.g. .svn. - Avoids warning dialog during !Version generator in EAST-ADL - Tested with SVN 1.6 (.svn directory at all depths), commit, abandon, garbage collect, all reconstruct operations - NB if you put a repository under version control, remember to always perform operations on all files and directories of the whole repository. * New: When backing up a database to a new directory and name, if the name is nil or empty, do not change the name in manager.ab nor add the new name to artbase.roo * Fix: After abandon, some abandoned objects that were created in this transaction were not being turned into ABUndefinedObjects. - If such an object was the main object for a window, and that window expected notification that the object had been abandoned, the notification was thus not sent, and the window remained open, causing 'ABUndefinedObject doesNotUnderstand: #...' errors - Bug ID: 22janoBcx * Fix: .tob files could have the 22-byte ArtBase 210 header written multiple times, because of a race condition. * Fix: "Such user already exists" error when adding a new user with the same name as an existing user. - Now show dialog and allow to Retry or Cancel * Correction: Single user version was unable to update artbase.roo if it contained an entry for a new multi-user database that had not been logged into. - #asBreakupFilename warning for ABServerAddress * Correction: Allow filenames like .\Filename as legal when checking input of various repository paths, correcting them to just Filename * Optimization: Can avoid flushing on abandon if no instances have lost property slots in this transaction. GOPPRR * New: Added String Property widget type UUID Hex - Like UUID Base64, but prints in 5 hypen-separated groups, 8-4-4-4-12, of lower-case hexadecimals, e.g. 123e4567-e89b-12d3-a456-426655440000 - Note that changing the widget type of an existing UUID Property type will not change how existing String values are displayed, only how new ones are created - Both new objects and copies of objects get a new UUID value * New: In Multi Component Selection Tool, make it easier for keyboard users to add a single element and close the dialog: can type as normal to move target outline to first matching element in selection list, then press Enter. - NB only works if no elements are in the Already Selected list. It selects and adds the current target, and then allows the Enter to be processed as normal by the OK button. * New: Property dialog reports all failures of property type regular expressions in a single dialog - also handles illegal regular expressions, treating them as failures * New: When a property regular expression test fails, show property local name in dialog too. * New: Copying and pasting elements from a graph into a graph will also include any explosion subgraphs. If the copy is deep, those will be copied too, as has always been the case with decomposition subgraphs. * New: In Paste Special or Replace with copy, when calculating items to copy to a given depth for an element in a graph, include the explosions of that element. - For Replace, wherever the object is encountered in the specified "In:" context, if it has an explosion there, copy that subgraph following the Copy to Depth setting. The depth is calculated from the object in that context, regardless of the depth at which the object is found: a depth of 2 will copy all subgraphs in the "In:" context but not their contents. * New: Binding can be opened using the existing mechanism for opening relationship * New: Widened ability for types to have icons from just Object and Relationship to all NonProperty types (i.e. Graph, Role and Port too) * New: Graph Creation Dialog now uses a true tree and shows graph type icons * New: Added Help button to Replace tool * New: Added Help button to Subgraphs tool * New: Add Copy to menus for Component Selection Tool, so the user can copy an object to the MetaEdit+ clipboard * New: Component Selection Tool remembers the size from the last time the window was used in this session - Note this was already thought to be added in MetaEdit 5.1, but an oversight meant the saved values were not being used * Change: sort instance bindings by relationship type name, relationship name, and connections (role type name, role name, object type name, object name, port type name, port name) * Change: when sorting explosions and decompositions in graph type documentation, sort types by metatype, name, and oid * Fix: Property dialog could give an error 'Invalid predicate selector' if a property type's regular expression contained an invalid predicate between colons. * Fix: If a type had a new property slot added and committed, a user read an un-updated instance from the repository and obtained the lock to update it, and before he committed another user read the same un-updated instance and failed to obtain the lock, hence creating another property in the slot but not marking the instance as changed, and this other user then abandoned, the instance was left referring to the ABUndefinedObject that replaced the abandoned property, causing errors. - Check for ABUndefinedObject and overwrite with a new property * Fix: #isInstantiatedFrom: error when creating an instance of an object type hidden by Show | Selected in Diagram Editor - Allow the hidden object to be visible while creating, e.g. to set size; it will be hidden after creation. * Fix: Supertype was being marked as changed whenever a subtype was saved. Since no lock was taken for supertype, if another user had that lock (even unused, e.g. changing existing generators in a graph), the first user would see a Lock conflict when trying to commit. - If the second user had made no changes he could commit, releasing the lock, and the first user could cancel commit then successfully commit * Fix: Paste Special... or Replace... with Deep Copy in diagram in unopened project gave Key not found error when trying to add new subgraph copy to the unopened project - Bug ID: 89nDWP * Fix: #element error on OK after Remove in Open Subgraph for element with multiple subgraphs - The list lost its selection, but the OK button was not disabled * Correction: After Replace of an object with an explosion, changes to the explosions of the replacement would affect the stored Undo command, leading to incorrect results or possibly errors when undoing the Replace. * Correction: When Replacing an element in a graph with a sufficiently deep copy, if the graph has explosions for that element, also change the explosion so that it maps the new element copy to the new subgraph copy. * Correction: When Replacing an element with a Copy to Depth >= 2, if the element was referenced within its deep copy, the original referrer was being changed to point to the copy, as well as the copied referrer pointing to the copy. - E.g. in Heating system's HomeHeating, Replacing Pump P1 with a Deep Copy led to P1's original subgraph PumpController containing P1's copy. It is considered better that when the original PumpController is cut out from the hierarchy and replaced with its copy, the original PumpController should be unchanged, i.e. contain the original P1 - For this to work also in cases where an object is referenced within itself via a property, we needed to make sure that such copied properties were included in copyDict (even if they are not shared). * Correction: when sorting type bindings, sort the list of ports in each connection before comparing * Correction: Replace was not replacing objects used as dynamic ports in bindings * Correction: Subgraphs dialog sorting was not consistent for elements with the same name * Correction: Creation Timestamp value was ambiguous during the hour replayed when the local time moves backwards during DST changes. * Correction: In Help | Graph Type | Bindings, the relationship type's icon was missing * Correction: In Help | Graph Type, property slots with an object etc. as data type were not showing the type's icon (if any) * Correction: Deleting a Graph or Graph representation was leaving the objects in the graph, if they were involved in bindings that were deleted. Now reversed order so bindings are deleted first then objects. * Optimization: Showing all instances of a type and its subtypes, e.g. in Component Selection Tool, took time proportional to the size of that set of types; now similar to time for one type. * Cosmetic: When reconnecting a role and its type must change, show the type of the object it is connecting to as well. - Also always show role type name: if Automatically Answer Dialogs is Never, this dialog will open when the existing role instance can be reused, and was showing the role instance name not type name. * Cosmetic: When copying sets of objects, bindings etc. in Paste Special and Duplicate Graph, perform the copies of the elements in oid order, so the new elements have the same oid order amongs themselves as the old ones. * Cosmetic: When displaying a type or instance prefixed by an obligatory icon, and the type does not have an icon, use a light gray folder icon rather than an empty icon, to keep the visual alignment clearer, particularly in a hierarchical list * Cosmetic: In Help | Graph Type | Bindings, show the port's icon if it has one * Cosmetic: In Help | Graph Type | Subgraphs, always show the icon for both source and target type, to maintain alignment. * Cosmetic: Added capitalization and period to list dialog label's "multiple selections allowed" * Cosmetic: Added accessor keys for Subgraphs Dialog pop-up menus * Cosmetic: Added period to end of Component Selection Tool messages: "Select something in this list first." Generator Editor * New: When saving a generator whose name has changed in the source code, ask whether the user intended to Rename or Save As New Generator. - Similarly if the new name is already in use: Rename and Overwrite, or Save As New Generator and Overwrite * New: When importing multiple .rep files with Read from File, set generator timestamp from file modification time * New: When exporting a generator to a .rep file on Windows, set the file modification time to match the generator timestamp. * New: Added Redo, Find Previous and Paste Quoted to Generator Editor for Symbols and Identifier Generators * New: Show type icons in the type choice box of the Generator Editor * New: Add Help links from Generator Editor to 5.1 Getting Started with Generators, 5.2 MERL Primer (previously linked as MERL Syntax & Usage), and 6 MERL Reference * New: Saving all generators with Write to File and no selection uses a full directory dialog rather than a simple string dialog * New: Added external...read and internal...read to the External I/O command category in the Generator Editor * Change: After inserting a type name from the Concept box, leave the cursor after it rather than selecting it - Easier to add a chain or otherwise continue - Also avoid the problem that the green font color spreads to the next characters you type if the type name was added right at the end of the generator * Fix: #space error when pressing "..." button in Advanced Find * Fix: #resetChildren error when renaming a generator inline and saving it if all the following conditions were met: 1) hierarchical view used; 2) generator was from a different graph type than that selected in the Generator Editor; 3) hierarchy calling this generator had all been deleted in another Generator Editor, and this window's generatory hierarchy had not been updated since. * Fix: If an Emergency: Low Space occurs when generating and a debugger is already open, reuse the debugger - Ask if possible, but if that gives an error, now assume the user wants to reuse the debugger * Fix: When running commands silently in the debugger (e.g. Run, Step Over), do not have the generation process send updates to the debugger process for things the debugger will ignore until the operation has finished, e.g. appending to the output - Previously each append or other change in debug state sent an inter-process message, which was then ignored. This is slow, and also more easily leads to deadlocks if a Low Space condition occurs while debugging. * Fix: When opening generator output for a generator run on multiple graphs from the Generator Editor, and where a MERL warning dialog has been shown and the user has pressed Yes to All, the generation could hang the UI process with the progress gauge open. Now the process does not hang, but a subsequent MERL warning dialog on the same run can open below the output window for the first graph. * Correction: Sort Role and Port types in the concept list. * Correction: Maintaining Generator Editor selection and scroll position failed when saving left the report characters unchanged but their formatting changed, e.g. because of adding MERL syntax coloring. * Correction: When a red wildcard is selected in the hierarchical generator list, and the list is switched to a flat list, select the next-highest generator * Correction: Generator Editor was not maintaining selection and scroll position when saving new generator * Correction: In Generator Editor, when changing from hierarchical to non-hierarchical list of generators, if the selection was a subgenerator of one of the items in the non-hierarchical list, that subgenerator and any siblings would erroneously be shown even if it was not in the list. * Correction: In Generator Editor, when changing the list of generators, the selection was not maintained in some cases when it could be. * Correction: After saving in Generator Editor, next character typed was highlighted * Correction: Renaming a generator with Rename... or F2 did not update the source code modification timestamp * Correction: Rare race condition between MERL progress gauge dialog and MERL browser warning for undefined variable near start of generation run - Warning dialog opens on top but does not respond, and as it is the topmost dialog it prevents mouse access to Progress gauge and its Break button - Keyboard focus is in Progress gauge transcript, but couldn't tab to Break button. Only option was to press F8. - Solution: Allow tab (at least Shift-tab works), give Break button Alt-b accelerator - keep button initially disabled as well as invisible so Alt-B does nothing unless button shown * Correction: Generator Output Tool should open in UI process, not generation process * Correction: Generated Files window should open in UI process, not generation process * Correction: Do not interrupt a generation process that is not running, for an Emergency: Low Space error * Correction: When synchronizing at the end of a generation run, a debug operation, or when a Low Space event occurs in the current debugger, make sure synchronization is on from then on. * Correction: When synchronizing the debugger display, update the status bar first and the generator output last, for the best chance of most things being updated in a Low Space condition * Correction: Paste Quoted was missing all existing formatting * Cosmetic: Generator Output Tool opens larger by default and remembers its previous size (size of most recently closed Output Tool). * Cosmetic: Minimum size for Generator Output Tool * Optimization: When updating the debugger output widget, recognize if the output stream is the same stream as before and save an update. Also calculate the text position faster, and hide the widget during its update for speed and to reduce flicker. MERL * New: Allow type specifications in loops etc. to specify a supertype, all of whose subtypes will then be recognized as matching. - .( sub-element already, but only to support cases where an object type was used as a dynamic port * New: Allow Diagram, Table and Matrix representations in XML to specify an empty timeStamp attribute. The attribute must still be present, but with an empty string value; the time of import will then be used as the timestamp. - * Change: In MXT export, sort explosions and decompositions by metatypes and type names rather than just oids - Using oid is slightly better when comparing within one repository, but much worse when comparing the same metamodel across repositories, or after MXT import to create rather than update, or similar-but-different metamodels in this repository * Change: In MXM export, sort explosions, objects and bindings by types and names rather than oids - Using oid is slightly better when comparing within one repository, but much worse when comparing similar models across repositories, or after import/export/duplicating in this repository, or similar-but-different models in this repository * Fix: Empty string as generator source text in generatorNPSource refused to marshall back from symbol's XML representation * Fix: Very rare 'UndefinedObject does not understand' errors under load after type creation * Fix: Do not save static port instances and types to MXS - filter out non-default connectables when saving object symbols from library * Correction: No need to warn in when importing 5.0 XML into 5.1 * Correction: Added min and max occurences for GeneratorNPSource's text source in SVG binding * Correction: MXM was not including Creation Timestamp values, leading to nil values on import and inability to edit objects with such properties. - Now appear correctly as 2016-04-11T23:30:01.000Z * Correction: .mxs XML Symbol Library file extension was not included in import dialog without API, although .mxs import was allowed - Although .mxs is XML and SVG, which generally are only available with the API version, we have allowed it as there is currently no other way to share metamodels that need library symbols. * Correction: Sorting (contents) data type subtypes in MXT now keeps sibling subtypes together, sorting at each level of the type hierarchy rather than flattening it then sorting. * Optimization: Improve performance of committing types, e.g. by 5% after importing all demo51o types as MXT. - Bug ID: 13stevnwJ: BOSS performance improvement with ShouldUpdateRegistryObjects API * New: API control function textForGraphRun() - xsd:string textForGraphRun (MEOop receiver, xsd:string textForGraphRun, xsd:string prerun) - For the receiver argument, a Graph MEOop, run the generator named in the second argument, a string. If the third argument, a string, is non-empty, first run the generator named there. Returns the contents of the default screen output stream produced by the generator(s). * New: API control function textForRun() - xsd:string textForRun (MENull receiver, xsd:string textForRun, MEAnyArray stack, MEAnyArray arguments, xsd:string preRun) - Runs the generator named in the second argument, textForRun, a string. The second argument, stack, is the MERL element stack, an MEAnyArray generally containing an MEOop for the graph, and possibly with subsequent stack elements for an object, subgraph, property or string element. The fourth argument, arguments, is an MEAnyArray for the arguments supplied to the generator, generally empty or containing String MEAnys; any MEOop MEAnys will be converted to a string representation before being used as an argument. If the fifth argument, preRun, a string, is non-empty, first run the generator named there. Returns the contents of the default screen output stream produced by the generator(s). * New: API command importGraph for Diagram - MENull importGraph (MEOop diagram) - Update the receiver, an MEOop of a Diagram, with the objects and bindings that are in the Graph but not this Diagram. * New: Added new command documentGraphsInto: to run generators to output text snapshots of all graphs to disk - For each Graph in a project open in this transaction, runs its _vcsGraphSnapshot generator to output a text snapshot to the directory named in the argument. The directory is created if necessary, and the file encoding is UTF-8. Filenames are .txt, formed from the graph name, oid and type name separated with underscores. * New: API graphs and bindings function removeBinding() - xsd:boolean removeBinding(MEOop receiver, MEOop removeBinding) - In the receiver argument, a Graph MEOop, remove the second argument, a Binding MEOop, and any explosions of its relationship or roles, and return true. If the binding still has Diagram representations, leave the graph as it is and return false. (To delete the Diagram representations of a Binding, iterate over the Binding's repSet(), sending remove() to each.) - NB If the binding is already not in the graph, return true. * New: API control function startMemento() - xsd:boolean startMemento(MENull meNull, xsd:string label) - Start an Undo Memento to contain the following API operations, up to the next stopMemento command. The first argument is an MENull. The second argument is the label for the Undo Memento, a short string describing what the commands do. The return value is a boolean showing whether the operation was successful. * New: API control function stopMemento() - xsd:boolean stopMemento(MENull meNull, xsd:string label) - Stop the current Undo Memento, collecting all the commands since the preceding startMemento into an undoable operation. The first argument is an MENull. The second argument is the label for the Undo Memento, which must match the label given in the preceding startMemento, which must still be the current memento. The return value is a boolean showing whether the operation was successful. * New: Added API graph contents operation portSet() - MEOopArray portSet(MEOop graph) - Returns the set of all ports from all bindings in this graph. The first argument is the MEOop of the graph. Note that each port may be either a static port (of metatype Port) or a dynamic port (of metatype Object). * New: Added API graph binding navigation operation objsForPort() - MEOopArray objsForPort(MEOop graph, MEOop port, METype objType) - For this receiver Graph and this port, returns the set of Objects directly connected to it. Note that the port in the second argument may be a static port (of metatype Port) or a dynamic port (of metatype Object). The third argument restricts the type of the connected objects: use NonProperty for no restriction. * New: Added API graph binding navigation operation portsForObj() - MEOopArray portsForObj(MEOop graph, MEOop obj, METype portType) - For this receiver Graph and this Object, returns the set of ports directly connected to it. Note that each port may be either a static port (of metatype Port) or a dynamic port (of metatype Object). The third argument restricts the type of the connected ports: use NonProperty for no restriction. * New: Added API graph binding navigation operation portsForPort() - MEOopArray portsForPort(MEOop graph, MEOop port, METype portType) - For this receiver Graph and this port, returns the set of ports directly connected to it. Note that each port in the result and second argument may be a static port (of metatype Port) or a dynamic port (of metatype Object). The third argument restricts the type of the connected ports: use NonProperty for no restriction. * New: Added API graph binding navigation operation portsForRel() - MEOopArray portsForRel(MEOop graph, MEOop rel, METype portType) - For this receiver Graph and this Relationship, returns the set of ports directly connected to it. Note that each port may be either a static port (of metatype Port) or a dynamic port (of metatype Object). The third argument restricts the type of the connected ports: use NonProperty for no restriction. * New: Added API graph binding navigation operation portsForRole() - MEOopArray portsForRole(MEOop graph, MEOop role, METype portType) - For this receiver Graph and this Role, returns the set of ports directly connected to it (either empty or a single port). Note that the port may be either a static port (of metatype Port) or a dynamic port (of metatype Object). The third argument restricts the type of the connected ports: use NonProperty for no restriction. * New: Added API graph binding navigation operation relsForPort() - MEOopArray relsForPort(MEOop graph, MEOop port, METype relType) - For this receiver Graph and this port, returns the set of Relationships directly connected to it. Note that the port in the second argument may be a static port (of metatype Port) or a dynamic port (of metatype Object). The third argument restricts the type of the connected relationships: use NonProperty for no restriction. * New: Added API graph binding navigation operation relsForRel() - MEOopArray relsForRel(MEOop graph, MEOop rel, METype relType) - For this receiver Graph and this Relationship, returns the set of Relationships connected to objects in this Relationship. The third argument restricts the type of the connected Relationships: use NonProperty for no restriction. * New: Added API graph binding navigation operation rolesForPort() - MEOopArray rolesForPort(MEOop graph, MEOop port, METype roleType) - For this receiver Graph and this port, returns the set of Roles directly connected to it. Note that the port in second argument may be a static port (of metatype Port) or a dynamic port (of metatype Object). The third argument restricts the type of the connected ports: use NonProperty for no restriction. * New: string typeTypeName (MEOop receiver) - Returns the string typeName of the type of the receiver argument, an MEOop representing a GOPPRR instance. * New: string allLocalNamesString (METype receiver) - Returns a string with the local names of the properties of the receiver METype argument, one per line. * New: MEAny propertyForLocalName (MEOop receiver, string propertyForLocalName) - For the receiver argument, an MEOop representing a NonProperty, return an MEAny representing the first property whose local name matches the second argument, a string. The MEAny will hold the MEOop of the property if successful, or an MENull if the string is not a local name in this type. * New: MEAny valueForLocalName (MEOop receiver, string valueForLocalName) - For the receiver argument, an MEOop representing a NonProperty, return an MEAny representing the value of the first property whose local name matches the second argument, a string. The MEAny will hold the value of the property if successful, or an MENull if the string is not a local name in this type. * New: MEOopArray contentsMatchingType (MEOop receiver, METype contentsMatchingType, boolean allowSubTypes) - Return the contents of this graph that match the supplied type (or also its subtypes, if allowSubTypes is true). The first argument is an MEOop representing the graph. The second argument is the METype of the desired type. The third argument is the boolean stating whether to include instances of subtypes. The result is an MEOopArray of the instances directly in this graph matching the type. * New: MEAny instPropsLocking (METype receiver, MEAnyArray propCollLocking, MEAnyArray valueColl, MEAny np, MEAny inArea) - As instProps, but also locks the properties, np and other internal objects if necessary. * New: string lockAll (MENull receiver, MEOopArray lockAll) - Lock the objects supplied as MEOops in the second argument, for the current user for the duration of the current transaction. Returns an empty string on success, or a string listing the objects that could not be locked on failure. Only necessary in the multi-user version. * New: MEOop createBindingWithPorts (MEOop receiver, METype relType, METypeArray roleTypes, MEAnyArray ports, MEOopArray objects) - Creates a new binding with ports into the receiver argument, a Graph MEOop. The second argument is the METype of the relationship to create. The third, fourth and fifth arguments are parallel collections of the same size, whose Nth member refers to the Nth role, port and object. The third argument is an METypeArray of the types of Roles to create. The fourth argument is an MEAnyArray of the existing instance ports (static or dynamic) through which this binding's roles will connect to their object - each element is an MEAny of an MEOop for a port, or an MEAny of an MENull for no port. The final argument is an MEOopArray (NB not an MEAnyArray) of the existing Objects that this binding will connect. The return value is the newly created binding MEOop. * New: MEAnyArray portSlots (MEOop receiver) - Returns an MEAnyArray of the ports for each role in this binding MEOop in order. Each element is an MEAny of an MEOop for a port, or an MEAny of an MENull if that role does not connect via a port. * New: MEAnyArray connectionIds (MEOop receiver) - Returns an MEAnyArray containing the integer ids of the connections in the receiver argument, a binding MEOop. This is intended primarily for use with the Diagram binding representation method, connectionReprIds. * New: Created a new category of command-line operations, API string functions, to return internal information. They all return a string, and if they have arguments, those arguments are strings. - Primarily to be called by MERL internal...read, but will work (but generally do nothing) on the command line, and can also be made available to the API - If multiple operations are called inside a single internal...read, non-string-function operations will have no effect on the output, and each function result will be on its own line. Note that some function results may themselves include newlines. * New: Command-line string function - exists: - Takes a single string argument representing a filename, and answers T if that filename exists or an empty string if not (or if testing it results in an error) * New: Command-line string function - user - Returns the name of the currently logged in repository user, or an empty string if not logged in * New: Command-line string function - defaultProject - Returns the name of the current default project, or an empty string if not logged in, or if no default project is set (e.g. if no projects are open) * New: Command-line string function - vcsComment - Returns the version comment of the most recent saved Version (of any user) visible in this transaction. The first line is the version number, user and date, and the remainder is the version comment. * New: Command-line string function - dbDir - Returns the repository directory specified when logging in, or an empty string if not logged in. The directory will be in the same format as in the roots file, so may be absolute, relative or a UNC * New: Command-line string function - dbName - Returns the repository name specified when logging in, or an empty string if not logged in * New: API command-line string function textForMERL: - Runs the arguments as a MERL snippet and returns the result - The snippet is run with no context, just a single empty string on the stack. - Can be used even when not logged in (obviously providing no operations are performed that require graphs on the stack). Subgenerators will be looked up from Graph; note that these are the Graph generators supplied in the MetaEdit+ executable, not those in a particular repository. - Useful e.g. for running _vcsInitClone, with settings supplied in .vcsPaths file * New: API command-line string function commandLine - Returns the command that started MetaEdit+ and its parameters, one per line - This is as received by MetaEdit+, so after the shell has parsed the command line, stripping quoting and processing escapes. To reuse, you may need to add quoting and escapes. * New: API command-line string function getCurrentDir - Returns the current working directory of the MetaEdit+ process * New: API command-line string function vcsDirty - Are there changes after the last Saved Version / vcsComment? Either in this transaction, in any users' working versions' commits and not included in the latest Saved Version by subsequent commits, or in generators newer than the latest Saved Version. Note we do not notice other metamodel changes, nor uncommitted changes by other users. Returns an empty string '' for false or 'T' for true. * New: Made API functions unconvertedVersion, version and versionVerbose available as API command-line string functions. * New: In command line parameter "login", if repository named "db" does not exist but "demo" does, use "demo" instead * New: Command line operation loginDB:user:password: can take a * as the password to mean that it opens a dialog to request the password from the user * Correction: Command line parameter obsolete: gave incorrect results for Object types whose identifier was a property with a local name containing characters that need escaping in MERL - The property identifier is replaced with a generator identifier including the property as :Local Name; * Optimization: Make SOAP operation lookup look first in normal WSDL commands and only then build command-line operations and check those * Documentation: textForRun mistakenly said stack was the second argument, when it is the third. Also mention the first argument is an MENull. * Documentation: unconvertedVersion adds 'etc.' to make clear that the list of possible return values does not end with 5.0. * Documentation: Improved some graph binding navigation operation descriptions * Documentation: Corrected comment of Graph delete: - Note this also deletes subgraph links to this graph from other graphs in open projects. It does not delete subgraphs of this graph. Graphical Editors * Correction: Clicking a selected polyline (and its descendants like role line) without creating a new breakpoint none the less caused a pair of undo-events to be created (as we first create the point and then remove it when we noticed that mouse was not moved) * Correction: If a Template had a Subobjects source that was a Generator that output the objects with character formatting (in addition to the Live Code hyperlink), the subobjects were not recognized. * Correction: If a Template had a Subobjects source that was a Generator that output more than one object per line, with the Live Code hyperlink stopping or otherwise changing between the objects, more than one subobject per line was recognized. * Correction: a major re-implementation of zoom behaviour in editors - Selecting fixed zoom ratio from the zoom canvas' drop-down box or pressing +/- buttons will zoom and center the view according to the center of visible portion of diagram - Using magnifying class +/- or mouse wheel will use mouse cursor point as an anchor and keep that portion of the diagram at the same place while zooming - Drawing pane tried to force its scroll grid during the zooming operation, we now bypass it during setting the zoom and scroll (MEDrawingPane>>ignoreGridWhile: and a new ignoreGrid iv) * Correction: Setting zoom percentage directly from editor's zoom canvas' (i.e. the widget set at the bottom-right corner of the window) drop-down list or pressing +/- buttons around it now centers the zoom result at the center point of visible area's and occupied extent's intersection * Optimization: Generator-based dynamic ports speeded up by 16% overall by lower-level code to extract objects from generator output without copying or reading each character - Minor change in behaviour if an object's generation output included newlines, e.g. Text id - before the same object would appear multiple times consecutively, now just once * Optimization: Operations that simultaneously added or removed many symbol elements - delete, paste, undo/redo etc. - no longer refresh after each element * Optimization: Mouse drags in Diagram Editor and Symbol Editor with Ctrl, Shift or Alt down were lagging behind the cursor. - The actual refresh rate was the same as for operations without modifier keys, but the frames got progressively further behind the cursor. - Bug ID: 9tsuvWrO "Resizing lags with Ctrl down" Metamodeling Tools * New: The menu of regular expression syntax used in the Property Tool now includes {} for repetitions, and the list of characters to escape is updated. * New: Widened ability for types to have icons from just Object and Relationship to all NonProperty types (i.e. Graph, Role and Port too) * New: When deleting types, also remove versioning info that would no longer work without them - Requires an extra transaction commit after graph instance deletion and before versioning info deletion, and that versioning info deletion happens while types are still loaded. - After type deletion and logout, logging in again (without repository garbage collection) will still find graph instances in Changes Dialog, because of their snapshots, showing them as live and not garbage collected. Opening them will work (at least initially): the type is anObsolete*. After repository garbage collection (which the type deletion dialog says to do), the snapshot changes are shown as desired with a red X to indicate they have been garbage collected, and Open is no longer offered. * Fix: Compiling a regular expression with an invalid or unrecognized message predicate :xxx: gave no error, but trying to match with it gave an error 'invalid predicate selector' or 'NonBoolean receiver -- proceed for truth' - E.g. :isZeparator: or [0-2][0-9]:[0-5][0-9]:[0-5][0-9] or :yourself: - Prefer to raise the error when compiling, by testing selector on $a. * Fix: Prevent users trying to edit non-visible metatypes, NonProperty and TargetLevel, if included in a metamodel * Fix: #widget error in Dialog Editor when dragging a selection handle with Alt down * Fix: #isEmpty error when pressing Ctrl+C in a pull-down list containing objects other than strings, e.g. the Data Type list in a Property Tool * Correction: sort types in Graph Subgraphs pane and Graph Types pane (where order is not manual) by metatype, type name, oid, rather than just type name. * Correction: Help button and Info button were not displaying their icons in Custom Property Dialog Editor * Cosmetic: When exporting instances to MEC (or MET for static ports), order them by oid, so the imported elements can have the same oid order amongst themselves as the old ones. * Cosmetic: Show icon (if any) for Graph types in Subgraphs tab * Cosmetic: In Graph Tool | Bindings, when adding a static port type or instance, indent instances further and do not show icons for them (they are iunder their type, which already shows the icon) * Cosmetic: Change Object Tool etc. Properties table column label from 'Property name' to 'Property type' * Cosmetic: Change Property Tool data type field label from Datatype to Data Type, and contents data type from Item type to Item Type Property Dialogs * New: Allow drag-drop to move and copy elements in a property dialog's non-property collection - Select and drag within the widget to move, hold Ctrl down to copy, Ctrl+Shift to copy the element and do Paste Special, allowing the user to select the copy depth in a dialog when dropping. * New: When opening Info on a Property, double-clicking an element in the list of owners of that Property will now not only open a property dialog for that element, but also place the focus in the field for that Property. * New: When creating an instance binding, the tabbed multiple property dialog for relationship and roles can now show scrollbars for each property dialog, allowing long dialogs to be filled in. * New: Constrain dialog width (as well as height) to fit on current monitor * Fix: Primitive failed on Mac OS X when opening a property dialog with a long label - Maximum label width was 27 numeric characters - On OS X the Lucida Grande font is measured to sub-pixel accuracy, which led to a Float for the minimum width once the label was wider than the buttons at the bottom of the window. * Fix: If a type had only hidden properties, opening a property dialog on an existing instance gave a #component error. - http://www.metacase.com/forums/forum_posts.asp?TID=798&PID=1931#1931 - Attempt to open property dialog now does nothing, as expected * Correction: In the Motif widget set, a menu opened from a shared property in a property dialog showed menu item label text in dark red. * Correction: In a Property Dialog, when the user tried to enter a number in a format that did not match the current locale, pressing OK would flash the number field, not accept its value, but accept and close the whole dialog and use the old value for the number. - Now pressing OK will flash the number field, return focus there, and leave the dialog open. * Correction: Turn on Property Dialog scrollbars as necessary, whether in dialog, tabbed binding creation dialog, or Dialog Editor - Major reworking of how minimum size and scrollbars are dealt with: now do not set scrollbars by default in stored dialog (whether automatic or custom), but turn them on if the window opening size is smaller than the declared minimum window size. * Correction: In tabbed binding creation dialog, property dialog tabs with scrollbars only laid out correctly if all widgets were fixed height, e.g. no Text widgets. * Correction: If "Prompt for window area" setting was on, opening a Dialog Editor prompted twice * Correction: If a window was forced to be smaller than its minimum size when opening (e.g. because the minimum size was taller or wider than the screen), resizing the window later would forcibly jump it to be the minimum size. Now resizes continue to allow the smaller size forced by the smaller screen. * Correction: If a window opens smaller than its minimum size, and has a scrollbar for the whole window, turn on the scrollbar and set it to scroll so the contents are laid out to the minimum size, making them all visible and accessible with the scrollbar. - Applies particularly to Property Dialogs with many fields * Correction: In a Property Dialog, could change a read-only NonProperty collection property by dragging and dropping with Ctrl or Ctrl+Shift down * Correction: Property Tool should warn but allow saving list properties with list values that do not match its regular expression. Only prevent saving if a Fixed List or Radio Button Set has no list values that match its regular expression. - Allows the metamodeler to obsolete values, whilst providing an explanation to the modeller in the property type documentation shown in the regular expression failure dialog. * Cosmetic: Minimum width for property dialog buttons was too small by 6 pixels Versioning - The new MetaEdit+ version control system for managing, comparing and annotating model versions * New: Changes & Versions Tool hosts the version control management and operations - Tree of Version -> Transaction (-> Project) -> model changes from graph to property, or otherway round - Version comment entry for selection (if Version, Transaction or Graph) - Version button to push a copy of the repository into version control - see Graph's _vcsCheckIn() generator * New: Compare in Changes & Versions popup menu provides a means to view changes in graphs as a text diff - Compares state at start of transaction with that at end of transaction (or when last refreshed, for current transaction) - Can also select a version to compare state at start of version with end (in multi-user version this currently includes other user's changes in parallel versions) - File name is id_oid_type.txt, with characters not supported by the file system corrected. A newline in the id is changed to a pilcrow (paragraph mark). - The first four lines in the file are internal type name, id (newline changed to pilcrow as above), oid, type - The rest of the file is the output of _vcsGraphSnapshot() * New: It is now possible to highlight changes in Diagram Editor (by selecting 'Open' from change list's popup menu): - If a graph is selected, all changes will be highlighted in the diagram - if another element is selected, it will be opened * New: Commit and Abandon buttons in ChangesDialog * New: Added and removed elements now colored in tree of changes - Green for graph add, red for graph remove - Green for newly-created objects, bindings, properties - gray for elements that are not changed themselves, but are in the tree as parents of elements that are changed * New: Added gray folder with red X for Changes Dialog to show a graph that has been deleted and garbage collected * New: Cope when a graph has been deleted and garbage collected from the repository. Show it with a gray folder icon with a light red X, sorted to the top of the list. - We still want to be able to show it in the version history, based on the _vcsGraphSnapshot outputs. (These can be left without any change dictionary elements when the graph is deleted: the last update of the dictionary will find no elements in the graph, as deleting it removes its contents first.) The GraphSnapshots are stored with only an indirect reference to the graph via its oid as a string (allowing garbage collect), but do store the graph name and type name. Similarly their hypertext has no direct link, but still shows the names (and if double-clicked after garbage collect, simply do nothing) * New: Project deletion removes versioning info that references elements in the project to be deleted, and which would thus cause errors in the versioning UI if left. * New: Added Reset Version History - Requires sysadmin and exclusive repository access * New: Compare history in the Changes tree now works: - Select version, transaction, project or graph and select 'Changes...' from the popup menu - Version: shows changes from earliest transaction to the current state - Transaction: show changes within itself - Project: show changes in this project within this transaction - Graph: show changes in this graph within this transaction * New: Checkbox for Ignore representations, which will hide those change elements that were included only because of changes in representations * New: Version, Transaction and Graph change comment is saved automatically as it is typed * New: We can now make a release, i.e. a version with all users' versions closed and our snapshots correspond to the DB state - Particularly useful for multi-user version * New: Version button now warns about missing versioning generators and halts versioning * New: Use UTC Timestamps internally (and in piped VCS version comment), but convert to local timezone for display in Changes Dialog * New: Refresh button refreshes the Changes Dialog * New: empty $vcsWorkingDir before running _vcsRepositorySnapshot() - In some cases this would allow the repository snapshot backup command to place the backup directly in the $vcsWorkingDir. Our _vcsCheckIn() generator does not currently take advantage of this. * New: Make Changes Dialog only have a single instance, raising and refreshing it if the user tries to open a new one. * New: Changes Dialog opens with its last closed size and position * New: In combined version comment sent to VCS, omit transactions with no transaction or graph comments, and indent with tabs as Version > Transaction > Graph - Include Transaction name and Graph name as headers for their comments * New: Show transaction comments in Changes Dialog tree * New: When a graph comment is removed because its graph's project or type is being deleted from the repository, append the graph comment to the parent Transaction's comment. * New: Current version's displayed name is "Working" * New: In version's line in tree, show line breaks in version comment as gray paragraph marks * New: Warn user if the version number given has already been used in an earlier version - Can only notice this if the earlier version was made before this transaction was committed * New: Correctly calculate changes within a user's version. - Only changes made by that user are taken into account - If between his changes there have been changes made by another user, show one entry for this user's changes before that change, and another for this user's changes after that change. * New: Compare window sorts graphs by name and type name - Use the most recent name if it has changed * New: As full versioning support with VCS integration requires the API for document:into: and backupDB:dir:, allow a lighter, purely internal versioning support without the API - UI remains the same - Only _vcsGraphSnapshot generator is used - Repository is not backed up, graph snapshots are not saved to disk, metamodel is not saved to disk, and VCS check in is not performed. * New: Reset Version History command in Options | Repository - Asks for confirmation, and if positive informs that the history has been reset, and the change will become permanent on commit. * New: Allow non-VCS versioning when the API is available and yet _vcs* generators are missing. The user will be asked to confirm, and if so versioning will be as in MetaEdit+ Modeler (where the API is not available), i.e. without the API part that writes the graph snapshot files, metamodel documentation and repository to disk and the VCS * New: When versioning and using VCS integration, check _vcsWorkingDir exists, is a directory, and is writable. Warn the user if not, and allow to continue without VCS integration or cancel and correct path in _vcsPaths * New: Condense version snapshots when saving a version with Save as Release * New: Repository Garbage Collect (and command-line maintainDatabase) now first condenses Graph snaphot versioning info * New: When versioning and using VCS integration, temporarily open all projects so we write all graph and metamodel snapshots, not just those in open projects. - Need this as VCS needs every file to be in each VCS version, otherwise it sees a closing projects as deleting their files, and opening projects as adding their files * New: Set $gitRebase automatically based on API string function versionVerbose - For single user, we must not have pull --rebase - For multi-user with a gitWorkingDir per user, we need pull --rebase - For multi-user with a shared gitWorkingDir, pull --rebase is a no-op * New: Choosing Open for a Graph in Changes & Versions Tool obeys the setting for Ignore representations, not highlighting purely representational changes * New: When highlighting changes in a Diagram, highlight the whole binding including the role lines, rather than just the relationship - We only know there has been some change somewhere in the binding, e.g. a role's property. Highlighting the relationship and roles seems the best visualization compromise, and matches the display of the string for the whole binding in the Changes & Versions Tool * New: Add a menu bar to Changes & Versions tool if the API features are present - VCS Settings | Paths to open _vcsPaths() generator to set paths etc. - VCS Settings | VCS Help to open manual for _vcsPaths() etc. - Extra VCS Commands to run _vcs* generators for Init, InitClone, Sync and CheckOut. Init and InitClone confirm first, Sync and CheckOut do a sanity check on vcsWorkingDir first. - Extra VCS Command | Metamodel Snapshot. Updates vcsWorkingDir with the current metamodel, allowing you to use your VCS to diff metamodel changes * New: Run non-trivial VCS generators in interactive mode, allowing them to open a debugger if necessary * New: Allow users to change their own already published versions' numbers and comments in Changes & Versions tool - Allow Changes pop-up menu item in read-only fields for Comment and Version number. Makes the field(s) writable until the Changes tree selection changes. Shows a warning dialog and refuses if the version was made by a different user. * New: Save Version will silently skip VCS integration if the output of _vcsWorkingDir() is empty - Lets the user turn off VCS integration, yet still run other _vcs* manually * New: Added _vcsPreCheckIn, called as a new first step of Save Version, before emptying $vcsWorkingDir. - Only needed for SVN, and only in multi-user MetaEdit+ with each user having their own $vcsWorkingDir. Allows us to rebase in SVN before emptying the working directory, because (unlike git) SVN can not rebase with an empty directory or after it has been filled with the new files. * New: If two users version in overlapping transactions and choose the same version number, the second user is prompted to choose a new version number (repeating until a non-clashing number is given). The version number and timestamp are updated and committed, and those are the ones used in VCS integration. * Fix: Prevent immediate errors when displaying the tree in Changes Dialog and elements are from deleted areas or have been garbage collected * Fix: When deleting a directory's contents, silently cope with entries that cannot be deleted, logging file name and error name to transcript. * Correction: Progress gauge could jump backwards when commit was performed as part of a longer series of operations, e.g. during versioning Browsers * New: When deleting a graph in a browser, offer to also delete any of its subgraphs that would no longer be used as subgraphs by any graph in an open project. - The user can see all subgraphs of the graph, with those to be deleted selected. He can change the selection, adding and removing graphs-to-delete as desired. Ctrl-click will toggle the selection of one graph, Shift-click allows selection of multiple graphs. - The selected graphs will be deleted, along with any subgraph links to them in open projects. * New: Show type icons in the rightmost list of the Object Browser when an object collection property (blue folder icon) is selected in the middle list. * Change: Project deletion makes clear that all graphs must be deleted manually from the project before deleting it - Can open just that project, use Graph Manager | Select All, Delete Selected - Must close project and commit to be able to delete that project * Correction: Hidden and read only properties now handled in Object Browser * Correction: If a property was shared, and some owners had it as read-only, filtering the Object Browser menus could be based on the wrong owner, incorrectly showing or hiding menu items * Correction: When checking locks to delete a graph, treat as a failure if the graph is from a project which is not open * Correction: When opening a Graph Browser on a graph (e.g. from an editor, with Graph | View | Graph Browser), find the graph even if it is below the two levels of hierarchy that are automatically opened. - Find the highest occurrence of that graph in the tree, and also open one level of its children. * Cosmetic: Project deletion makes clear that the user is responsible for deleting content from the project before attempting to delete it, and that deletion cannot be undone Matrix Editor * New: Show symbols in Axis Tool if they are shown in Matrix Editor axis * New: Show symbols in Axis Tool's Move dialog if they are shown in Matrix Editor axis * New: In Axis Tool's Move dialog, select initial position and indicate it with > * New: Copying and pasting elements from a graph into a graph will also include any explosion subgraphs. If the copy is deep, those will be copied too, as has always been the case with decomposition subgraphs. * New: Automatically extend window to fit matrix when opened * Fix: Matrix Editors on matrices created in this transaction were not being closed on Abandon. * Correction: Opening an Axis Tool on a Matrix Editor and closing it after making no changes did not repair parts of the Matrix Editor window that had been obscured (problem was only visible with certain display settings on Windows 7 and earlier) * Cosmetic: View | Fit Window to Matrix needs one pixel extra width to avoid active horizontal scrollbar * Cosmetic: Larger default minimum opening size for Matrix Editor window * Cosmetic: Set workable minimal size for resizing Matrix Editor window * Cosmetic: Tree view in browsers should show expansion decorations for top-level elements, mostly so their subtrees can be closed * Cosmetic: Show icon (rather than folder icon) for Graphs that have them - Object Browser still shows colored folder icons Table Editor * New: Copying and pasting elements from a graph into a graph will also include any explosion subgraphs. If the copy is deep, those will be copied too, as has always been the case with decomposition subgraphs. * New: Automatically extend window to fit table when opened * New: Made Sort dialog horizontally scalable * New: Made View Selected dialog scalable * New: When creating a Table, sort the elements by type, id and oid * Fix: Table Editors on tables created in this transaction were not being closed on Abandon. * Fix: Subscript out of bounds error when deleting last element in a table, then pressing toolbar Delete button (or otherwise deleting). * Correction: Filter hidden properties from the table columns and sortable columns * Correction: In Select by Cell mode, double-clicking or selecting Properties for a read-only Non-Property property's cell should not create a new instance, but rather open the row object's property dialog * Correction: Editing properties of an object would scroll the table back to the start * Correction: Table cell contents were out of sync with column labels if properties were hidden in the metamodel * Cosmetic: View | Fit Window to Table needs one pixel extra width to avoid active horizontal scrollbar * Cosmetic: Larger default minimum opening size for Table Editor window * Cosmetic: Set workable minimal size for resizing Table Editor window Graph Layout * Optimization: As graph size increases, calculating the transitive closure becomes the bottleneck. Use lower-level calls to matrix access and avoid recalculation to achieve a 3x speed increase (e.g. 2s -> 0.7s for QL 256 binary tree) * Optimization: Calculating transitive closure by Floyd-Warshall is O(N^3), taking 433 seconds for QL 2048 binary tree. Now O(N^2): 0.7 seconds for QL 2048. * Optimization: If all the nodes (objects, relationships and role breakpoints) are fixed (i.e. handled by the Sugiyama layout), do not bother running the force-directed layout simulated annealing, as it cannot affect anything. Diagram Editor * New: Copying and pasting elements from a graph into a graph will also include any explosion subgraphs. If the copy is deep, those will be copied too, as has always been the case with decomposition subgraphs. * New: In the sidebar tree of objects by type, abstract types now show all instances of their subtypes - Bug ID: 66jptmMer * New: Allow roles in Diagram Editor to be drawn diagonally or using one or two orthogonal vertical and horizontal line segments. - Note that cut points for roles on object or relationship connectables are always determined as if #diagonal was in force, so will appear slightly off when using #manhattan - Currently this option is not revealed in the UI, but can be changed at startup through the metaedit.ini file (or later by forcing re-reading of metaedit.ini with currentDir:) - metaedit.ini: roleDrawing setting with values #diagonal (default) or #manhattan. * New: Diagram's Import Graph improvements - Grid new elements if Snap to Grid is set - Take object's default connectable target point into account - Do not leave excessive blank space on left and top edge or between element slots * New: When focus is in a row in the property sheet, and the menu for that row has a simple Edit command, pressing F2 will execute that command - Generally this will activate the in-line editing for that row. For a row representing a sub-object, it will open the property dialog: useful e.g. when a legal set of property values cannot be obtained by editing individual rows for that sub-object, because of constraints and/or regular expression checks. * New: Live Check pane generator output no longer shows MERL syntax coloring (e.g. dark red for fixed text), but still shows Live Code links * Fix: Diagram Editors on diagrams created in this transaction were not being closed on Abandon. * Fix: Opening a Diagram Editor and closing it before it has finished opening could cause an error in building and resizing the tree view and sidebar * Fix: Subscript out of bounds error when cancelling the dialog to select a port when creating a straight binary relationship to a connectable with several ports * Correction: When Graph | Layout changed a non-straight relationship to a straight one, Undo left the relationship in the wrong place. * Correction: In the sidebar property sheet, Radio Button Set properties were allowing values to be selected from the list or typed manually: they should only be selectable from the list. * Correction: When adding a new role to a straight relationship with Import Graph, set it as non-straight * Correction: Polyline rectangles scaled very small could give a ZeroDivide error or display with triangles appended * Correction: Red animation highlight outline was displayed offset for objects whose symbols had templates whose display area extended asymmetrically beyond the boundaries of the rectangle on which handles are placed. * Correction: Ctrl+double-clicking to open a subgraph also toggled selection because of the initial Ctrl+click. Leave the selection as just the Ctrl+double-clicked element. * Correction: Thick red highlight line for role could be offset away from role line by difference between top left of role line and top left of role symbol elements * Cosmetic: Import Graph done from a Diagram Editor now gives the same results as when done from the API * Optimization: Object representations in a Diagram Editor cache their dynamic ports' connectables. - Needed particularly for cases where pairs of objects have dozens of ports interconnected. Slowdown was signficantly worse than linear, e.g. for EAST-ADL2 with 4 objects chained via26, 28 and 9 relationships, 4s for one refresh, of which 3.7 was for repeated calculation of dynamic ports by generator in template; now 0.018s, so 200x faster for the part of refresh that calculates dynamic ports - All such caches are invalidated whenever any persistent object changes. This ensures template subobject source generators can use information from anywhere (except changing external files or external program results). - Straight relationships to dynamic ports on an object will all be recalculated when the object is moved, leading to more cache misses. EAST-ADL2 uses relationship positions to order dynamic ports, so this cannot be optimized away. - NB EAST-ADL2 dynamic port order is thus still cyclically dependent on and unstable wrt. existing relationship positions, and will still show incorrect connections particularly when moving objects quickly. The caching does not affect this. Symbol Editor * New: In Symbol Browser, allow Delete and Rename on library symbols in all modes * New: In Symbol Browser Save as Copy mode, New automatically saves to the new library symbol and closes the dialog - Prompt for overwriting is no longer shown for an empty symbol * Fix: #symbolElements error in Symbol Editors on Import from Library of a type that has no symbol (but is shown because a subtype has a symbol). * Fix: Error #formatDialogs when double-clicking in Symbol Editor property sheet, if there were multiple elements selection * Fix: When editing the points of a template in the Symbol Editor, corner cases could confuse whether they were operating on the layout path or cloning path - Some did not detect a hit on a point handle, only along the path - Caused errors when a point was deleted from the wrong path - Caused incorrect display of information on menus, e.g. whether Delete Point was allowed or whether the path was Closed * Correction: Symbol Browser should disable Edit button in dialog modes for Types as well as Library symbols * Correction: Symbol Editor's tree view sometimes scrolled unnecessarily when selection was changed * Correction: Format Template dialog Subobjects tab, Subgraph object menu did not escape ampersands * Correction: Update the Port list in a Connectable after editing the properties of a Port there * Correction: When creating a Connectable, round the co-ordinates of its cross-hair target point. Otherwise the offset to other elements of the symbol (for the default connectable) or the connectable outline is not an integer, which leads to Cairo drawing lines fuzzily between pixels * Optimization: Operations that simultaneously added or removed many symbol elements - delete, paste, undo/redo etc. - no longer refresh after each element * Cosmetic: Improve dialog warning text and button labels when trying to remove last role line * Cosmetic: Improved warning dialogs when trying to enter an illegal color component value or HTML color in Symbol Editor color selection tool. * Cosmetic: Show graph icon in Format Template dialog Subobjects tab, Subgraph of type * Cosmetic: Format Template dialog Subobjects tab, menus for Subgraph and object now use ? instead of * as prefix for a current type selection that exists but is not in the list of currently available subgraph types Command Line * New: Added command-line parameter, condenseVersions, to condense duplicate graph snapshots in version history - MetaEdit+ already notices if a graph snapshot is the same as the previous one made by this user, but not from previous sessions or other users. - Requires that this is the only user logged in * New: Added command-line parameter, resetVersionHistory, to remove the entire version history of all users. - The removal will become permanent on commit. - Requires that this is the only user logged in * Correction: backupToDB:dir: arguments were the wrong way round Launcher * New: Show Changes replaced by Versions & Changes tool with versioning support * New: Adding a user initializes the versions collection for that user * New: Reset Version History button on Options Tool Repository page * New: Open the Startup Launcher at the top left of the current monitor (the one with the mouse), rather than the top left of the primary monitor * New: Open the main MetaEdit+ Launcher window at the same position as the Startup Launcher - If there was no Startup Launcher, open at the top left of the current monitor * Fix: Key not found error when changing a repository entry's details in the Startup Launcher, if the repository entry had been removed or renamed from artbase.roo, e.g. by another user. * Fix: After repository garbage collect, there can be objects still in memory that are no longer in the repository. Using those objects in the model, e.g. with Paste or Add Existing, will result in errors on the next login. After garbage collect we thus now show a dialog telling the user he must now exit MetaEdit+. * Correction: We now use platform specific command string for external editor when setting options default values * Correction: In the dialog to choose a project to open, projects that had been closed in this transaction but whose areas were still open were missing the * prefix * Cosmetic: Rearranged Options Tool Repository buttons and added accessor keys Dialogs * New: Info Window for Object, Relationship, Role and Port instances shows lock info - NB These elements are rarely locked themselves (only by property (un)sharing or object decomposition changes); their properties are more commonly locked * New: Added Check Property Locks button to Info Tools for Graphs and Non-Properties - Checks and shows whether each property is locked, and shows who has the lock - Allows to open an Info Tool on a property * New: Info Window for Property instance shows lock info * New: Info Window for Property instance can show Info for the selected property owner * Correction: Info Window for Graph showed duplicate "Locked by: Locked by" in lock text for graph representations Widget Set * New: Recognize context menu key on Windows, opening the context menu of the currently focused widget (if any) - This is in addition to Shift+F10, which was already recognized, and is available on all platforms * New: When searching for an element in a tree, search breadth-first, so higher occurrences are found first. Don't search other branches once we have a path. * New: Use system font in first column of non-native file dialogs * New: Turning off View | Word Wrap on a text field turns on the horizontal scrollbar (if not already on) * New: File dialogs now hide hidden files also on Windows * New: Add resize corner for non-native file dialogs (e.g. directory selection dialog) * Change: Double-clicking a normal button was interpreted as two clicks before; now interpret as a single click * Fix: Drag and drop (e.g. between lists) could hang * Fix: Error "receiver must be an existing directory" when a Windows file dialog was opened from MetaEdit+ and the drive it was referring to disappeared (e.g. by pulling out the USB stick while the dialog was open). * Fix: Rare #isVisitedHyperlink error displaying hypertext links * Fix: Various errors and poor behaviour in non-native file dialogs * Correction: Double-clicking a partially visible element at the bottom of an old-style dataset scrolls it fully into view on the first click, so the second click operated incorrectly on the element below it - Bug ID: 36janrQHj * Cosmetic: Use a thinner raised border on table row and column labels in Windows XP and later for a more modern look than Windows 95. * Cosmetic: Use shorter format for timestamps in non-native file dialogs (month number not name) Text Editor * New: Add block indenting. - If the selection includes more than one line, pressing Tab will indent the selected lines by one tab more, and Shift+Tab will unindent by one tab. - Note that a word-wrapped line only counts as a single line * New: Added Find Previous and Redo to main menu for Generator Output and text editors * Change: To tab out of a text field, use Ctrl+Shift+Tab. - Previous Ctrl+Alt+Tab was used, but that is now intercepted by many OSs (e.g. Windows 8.1 and Ubuntu 14.04) as tabbing through windows. - Ctrl+Shift+Tab tabs forwards through any widgets, Shift+Tab backwards * Fix: Pressing Alt+Shift+Tab on Linux in a text field caused an error * Correction: Allow Mac's Ctrl+Option+Tab for inserting a tab in a text field - Plain tab also works * Cosmetic: Larger default size and better minimum size for Text Editor Help * Fix: Error after dialog warning 'No help available for *' - Return after dialog rather than allowing to continue Conversion * Correction: When converting a Connectable from MetaEdit+ 3.0, round the co-ordinates of its cross-hair target point. Otherwise the offset to other elements of the symbol (for the default connectable) or the connectable outline is not an integer, which leads to Cairo drawing lines fuzzily between pixels * New: Correct some values that were misinitialized as Strings, and hence possibly stored like that, to Texts. - generator snippet source code used in Symbol element conditions, Template Subobjects, Template Subsymbols, Generator Breakpoint Conditions - Template Subsymbol choices of a fixed library symbol - The possible misinitializations have also been corrected Error dialogs * New: In the error dialog, show the path to meplus0.err and ask user to email it Emergency Evaluator (Shift+F8) * New: Added new "extras" command to Emergency Evaluator to output all graph types' metamodel.txt and generators and all library symbols to emergencyDump directory - uses document:into: * emergencyDump * New: Emergency Evaluator accepts command line parameters, e.g. fileInPatch: patchFile.mep - If the API features are available, this also allows commands like commit and backupDB:dir: * Fix: If an Emergency Evaluator command tried to open a window or otherwise interact with the user, that interaction would never be received, and the Emergency Evaluator would hang * Fix: #model error if Emergency Evaluator window was open when a tool tried to raise its single instance (or just find it) - E.g. Generator Output Tool raises any existing instance at the end of a generator, and Changes & Versions Tool tries to find any existing instance when a transaction is started Graph Generators * New: Added relationship counting to Metrics generator * New: JavaScript-based HTML export * New: _vcs* generators for integration with Version Control Systems like git or SVN * New: Generators for base conversion: _fromDec, _toDec