Executive overview: - Property sheet in Diagram Editor shows properties and their contents as a tree, editable in-place - Movable dynamic ports - Reconnect a role to a different object or port - Holding ALT and dragging large objects / symbol elements drags contents too - Holding ALT snaps element handles to grid during creation and resize - More selection info and current tool or mode help in status bar - Better UI support for large type hierarchies, abstract and hidden types, fewer dialogs - Automation support for generated types - Read-only and hidden properties - UUID properties, created with unique value - Regular expression support for explicit numbers of repetitions and non-capturing groups - Generators can prompt for filenames with a file dialog - Generate hyperlinks, e.g. for more info in LiveCheck - Optimizations for large models in generators, Diagram Editor, and XML import - Embedding MetaEdit+ as an OEM product (hiding certain windows and menus) - Version control integration from command-line, MERL and API - Optimization of display and binding creation in large diagrams - Optimization of navigation operations in generators Detailed list of new features, changes in previous behaviour, and important bug fixes: Regular Expressions * New: Regex support for explicitly numbered repetitions - Exactly three occurences: {3}. Two to five occurences: {2,5}. Three or more occurences: {3,}. Two or fewer occurences: {,2} * New: Regex support for non-capturing groups groups, (?:...) - add ?: at the start of the group for it not to be included as one of the numbered substring matches - e.g. in a translator to get just the surname from Mr Smith or Mrs Jones: /(?:Mr|Mrs|Miss|Ms) (.*)/ $$1 GOPPRR * New: If a binding specifies a port type, also allow instances of subtypes of that port type * New: If an abstract type is included in a graph type's list of legal objects, when instantiating it ask for a concrete subtype, and when pasting allow instances of subtypes * New: In Component Selection Tool on a graph, allow instances of subtypes of any abstract object type specified in the graph type's object type list * New: When displaying objects in a property dialog property, show any carriage returns as gray paragraph marks, rather than omitting them completely. * New: When copying elements in Paste Special, Replace, or Duplicate / Replace Graph, maintain any shared properties they have - Unshared properties are created as new properties as before - For shared properties, if all users of the original are being copied create a new shared property, otherwise share with the original. - The latter goes beyond what object copying can do, allowing us to distinguish between something that appears to have a reuse scope wider than the current set of elements being copied, and something that is local to that set. * New: Creation Timestamp and UUID properties get new values when creating a new object as a copy of an existing one with Paste Special and depth >= 1 * New: Allow a Port Constraint to specify a dynamic port type (a subtype of Object), or even Any port type (whether static or dynamic) * Fix: Rare doesNotUnderstand errors originating from Graphs during abandon Metamodeling Tools * New: Added a new Property Widget type UUID Base64. Its datatype is String, and initial value is a near-guaranteed unique sequence of characters. If the property slot is set as read-only, so this can serve as a globally unique, permanent ID. Unlike the oid, two different objects created in different repositories will not have the same UUID, and an object exported and imported to another repository will have the same UUID in both. - The UUID is version 4, i.e. pseudo-random and not revealing details of the computer or user that created it - For compactness the UUID is represented as a string in Base64 encoding, a-zA-Z0-9+/ * New: If a property slot's local name begins with _ (underscore), make it read-only - Instances will have whatever intial value the metamodel assigns, but not be editable in modeler UI - Affects default property dialog and Diagram Editor sidebar * New: If a property slot's local name begins with __ (double underscore), make it hidden - Instances will have whatever initial value the metamodel assigns, but not be shown in modeler UI - Affects default property dialog and Diagram Editor sidebar * New: Text and Boolean property data types now have UI for setting their default values * Fix: Opening a SOAP Fixed List property type's Methods menu gave an #asCharacterArray error if the WSDL didn't include a selector attribute in the in the * Fix: Subscript out of bounds error when testing a property type's SOAP list source, if the SOAP method took parameters * Fix: Type Manager's Delete Unselected Types was not deleting instances of graph and port types that are being deleted but have also already been Removed in Type Browser - Bug ID: 75stembyz Generators - MERL * New: prompt...askFilename will request a filename from the user with a file dialog. - The extension to AskNode is written so as to be backwards compatible with 5.0 AskNodes, defaulting to a normal string request dialog. * New: When iterating over properties with "do :()", "containers" gives the local name of this property, and "do contents" allows to iterate into the property value if it is a non-property, a collection, or a Text (the first two allow recursive descent; Text can be distinguished by "do contents { if metatype = 'Text'..."). - This is useful for meta-programming, i.e. writing a MERL generator that is not specific to a given language, and hence cannot know property names or structures ahead of time. - Note that "containers" will look first for the preceding element on the stack, expecting it to be the non-property that contains this property, and answer just the single local name. If the stack is not as expected, it will look instead for all the objects that share this property (generally just one), and return all the local names. In both cases, it will only find the first occurrence of this property in each object, even if the same object shares the same property several times. /* An example of a generator to list properties deeply by local name */ propsDeeply() do :() { containers ': ' id newline do contents where metatype <> 'Text' and metatype <> 'String' { propsDeeply() } } * New: Include roles in image written to an HTML file while outputting a bitmap of a diagram with filename...print. - As the role co-ordinates form a polyline, but must be a polygon, we need to turn them into a polygon representing an appropriate clickable area around the role line. As we also want the original points to be readable from the image map, e.g. for automatic processing or to be able to highlight a role line, output the original points first and then continue to form a polygon surrounding the line: _____________<_____________ | __start_____>_____________| | __end_______<_____________ |_____________>_____________| Head out first along the real points, back along the points offset 2 up and 3 left, out again along the points offset 2 down and 3 right, then back along the real points. Those who just want the original points can simply take the first quarter of the collection of points. Generators - Tools * New: In batch or minimal UI mode, if there are no errors writing generated files, do not show the Generated Files browser * New: Format | Hyperlink prompts the user for a hyperlink to add to the selected text. - As with other formatting, note that a single MERL output text will only have one consistent formatting, determined by the formatting of the first character. To have a fixed string containing a link in the middle, break it into three fixed strings, with the hyperlink applied to the middle one. * New: If no generator is selected, choosing Generator | Delete... will allow the user to select multiple generators to delete. * New: When opening a new Generator Debugger, set the Variables / Watches radio button to the option the user chose most recently * New: If a Low Space condition occurs while running a generator, e.g. caused by infinite recursion, open the Generator Debugger - set it to show Watches rather than Variables, as the low space may be caused or exacerbated by memory used by variables * New: Added little resizing splitters vertically in the horizontal row between the top and bottom half, to resize the whole left side and whole right side of the window. * New: When saving in the Generator Editor, and the syntax highlighting updates the generator text, maintain the scrolling position and the position of the cursor * New: Show the graph type in the Generator Debugger's Generator Stack, if it is different from the top-level generator. * New: Individual Help URLs for each MERL command in pop-up menu in top-right list in Generator Editor * New: Changed Generator Editor's view style pulldown menu's "Last Find" from being global to having its own value for each Generator Editor * New: The menu of regular expression syntax used in the Property Tool and Generator Editor Advanced Find dialog now includes {} for repetitions, and the list of characters to escape is updated. * Fix: When appending to an existing file, if a character illegal in the encoding was found there was a Subscript Out of Bounds error trying to highlight the character in the output window. - The correct character cannot be highlighted because the output window contains just the text to append, but the error is raised based on the position in the file, including the existing file contents. For now just prevent the error. * Fix: Implicitly renaming a subgenerator from another graph type (shown in green) by changing its name in the source code left the old generator unchanged in the other graph type, and created a bad generator with the new name in the current graph type. - Trying to delete or rename the bad generators will cause various problems in this generator and in generators of that name in the other graph type. Instructions for finding and correcting bad generators: http://www.metacase.com/forums/forum_posts.asp?TID=776&PID=1868#1868 - Bug ID: 86genlNnJ * Fix: Trying to raise an existing Generated Files window could give a 'primitive has failed' error, if the windows OS handle had become nil. * Correction: Generators from supertypes were not included in MEC unless instance of supertype was in MEC, or in MET unless supertype was selected on left in Type Manager - Since generators affect the behaviour of subtype instances, they should be included - as with property slots from the supertype. This is in contrast to the list of object types, bindings etc. in the supertype, which are left blank (or unaltered if the supertype already exists) unless the type is selected. * Correction: When Advanced Find was not using regular expressions, { and | were still interpreted as in a regular expression XML * New: If we are reading a GOPPRR type or instance from XML, and the element includes metaType="Object", change the metaType to look under for types of this name to Object - Needed for tag of dynamic ports (i.e. objects) in - Note that if the dynamic port has a , within that will again be with metaType="Object" * New: When importing XML, search for types first by internal name, then by exact match for user-visible name, then by user-visible name ignoring possible initial inverted question mark indicating removed type. * New: Allow Property types of dataType Text to have defaultValue - some string - As elsewhere, in XML any text formatting is lost. Line breaks and indenting in the element are preserved * New: MXT now includes support for storing the fact that a template has movable ports. -