What's new in ModelMaker Pascal Edition 11.3.0

Nov 6, 2012
  • New Features:
  • Delphi XE3 IDE addin, language modes extended with Delphi XE3 Win32
  • C#: support for visibility and attributes on property access methods. Visibility and attributes are applied via the method and editable as you'd expect it. For example via Members View | Change Visibility pop up menu and the Method Properties dialog. Note: this feature makes the model incompatible with older versions of ModelMaker as those do not support access method visibility.
  • Method Implementation View has a new Attributes input. Displays and edits attributes for the selected method. Can optionally be hidden with the pop up menu.
  • Importer from source clears attributes in the model entities if the source entity has no attributes defined. Previously, model entity attributes would be replaced if the source entity had attributes defined but not be cleared if the source entity had no attributes.
  • Package symbols linked to a Pascal unit displaying contained delegates and / or procedures respect the settings for "Show return type" and "Show parameters lists". Either as defined on Project or Diagram level or as (re-)defined on package symbol level. The options to control this have been added to the package symbol dialog.
  • The class symbol option to display the module identifier as prefix for the class name has been extended to imported classes. When displaying a placeholder class imported from a reference, the module name will be taken from the reference source file. Previously no module name was displayed in this case.
  • Diagram Relation labels (name, roles etc) are displayed non-transparent. This allows placing the texts on the relation, visually "breaking" the relation line, making it clear to which line a text belongs.
  • C#: new formatting option on tab Project Options | Code Generation: "Space before constructor initializer". When enabled, this inserts a space between the constructor parameter list and the initialize call. Used to be in line with StyleCop.
  • C#: new option on tab Project Options | Coding Style: "New property binding". Allows defining a default binding for new properties in classes.
  • Pascal: new option on tab Project Options | Coding Style: "Empty Parameter lists" controls how empty method, procedure and delegate parameter lists are emitted: either suppressed - pascal style, or emitted as ( ) - c-style.
  • Solved problems:
  • Class diagrams: a package symbol linked to a pascal unit displaying contained procedures would not update the compartment after the module code was modified. Solved.
  • The Attributes Tab on entity dialogs would not expand classname and membername macros. Solved.
  • C#: verbatim strings containing empty lines could cause an AV when importing. Also, empty lines where removed from imported string. Solved.

New in ModelMaker Pascal Edition 11.2.0 (Nov 6, 2012)

  • New Features:
  • Delphi XE2 Addin, language modes extended with Delphi XE Win32 and XE2 Win32
  • Copy / Move class members in the Diagram Editor. The Classifier symbol allows selecting and drag dropping an (entity) member from a compartment to another class symbol. This will either copy (default) or move (press Shift) the member to the target class. Similar, text can be drag-dropped between custom compartments in any classifier symbol. Dropping an (entity) member on a custom compartment inserts the text in the custom compartment (but does not copy/move the member).
  • The diagram editor multi page printer now clips the diagram exactly according to the diagram editor page dividers. Previously the diagram would be clipped inside the printed margins.
  • IDE Addin "Jump to ModelMaker" activates the current method in the implementation editor when jumping from a method and other methods are pinned in the implementation editor.
  • Solved problems:
  • Pascal: the "delayed" keyword on external procedures was incorrectly generated with a semicolon placed in front of it. The MMX parser would also expect the semicolon. Solved.
  • Pascal: two bugs fixed in handling of overloaded methods, in method dialog and copy/paste (clone) behaviour.

New in ModelMaker Pascal Edition 11.1.5 (Nov 6, 2012)

  • New Features:
  • Diagram Editor Export to Image File supports Postscript format (.eps)
  • Package symbol allows customizing number of columns used when displaying (module) contents.
  • The diagram editor check that all text in a diagram can be displayed using the selected fonts. If this is not the case, you'll get a don't warn again style warning and an option to open the project style options to adjust the default fonts.
  • C#5 support:
  • Project Options | General has a new C#5 language mode that enables the new async language features.
  • The modifier generation order of the async keyword can be adjusted on Project Options | Coding Style.
  • The async (context sensitive) modifier is supported by importer, editor and generator. The await keyword can only appear in method implementations and is left uninterpreted (although syntax highlighted).
  • Solved problems:
  • Brace matching in the Syntax highlighting editor had yet another small glitch. Solved.
  • The source importer no longer marks a class containing abstract methods abstract if the source language supports the "abstract" (or "sealed") modifier for classes.
  • C#: the unsafe statement would result in import errors. Solved.
  • Class Symbol: a customized number of member columns of "1" would not be persisted. Solved.

New in ModelMaker Pascal Edition 11.1.0 (Nov 6, 2012)

  • New Diagram Rendering Engine:
  • Diagrams are now painted using a new rendering engine resulting in much prettier, anti-aliased images and exports.
  • Concurrency Diagram:
  • Composition image showing the same diagram rendered with MM 11.10 (top) and MM 11.03 (bottom)
  • New diagram printing mode: visual area auto rotated and scaled down only. This is now the default.
  • Export Diagram as Image now supports export as .pdf. Exporting as .wmf is no longer available.
  • New Printing style option: Use semi-transparency. If enabled, semi-transparent surfaces (frames, drawing shapes) are painted semi-transparent like in the diagram editor. If disabled, semi-transparent surfaces are not filled. This may give better results on the printed output.
  • When e-mailing diagrams, you get the option of attaching any of .pdf, .png and .bmp formats - rather than a single user defined format.
  • Some options are now deprecated and were removed from Environment Options | Diagrams | Printing and Appearance:
  • Printing Scheme - Dashed Pen Scale (no longer needed)
  • Appearance - Colored Image Exports (now implicitly enabled)
  • Appearance - Image Exports - Pixel format (fixed at 24 bit)
  • Image Export - Image Format, you may now select the attached image formats each time diagrams are mailed.
  • ToolsAPI: IMMDiagram.CreateMetaFile returns a meta file containing a single bitmap representing the entire diagram.
  • Solved problems:
  • Particularly on more recent Windows versions, Diagram Explorer thumbnails would in some cases be displayed intermittently. Solved
  • The MM8 style MMGUI.hlp context sensitive would no longer be loaded OK in MM11. Solved.
  • Brace matching in the Syntax highlighting editor had a small glitch, particularly when using non-white backgrounds. Solved.

New in ModelMaker Pascal Edition 11 (Nov 6, 2012)

  • Delphi XE support:
  • Delphi XE IDE integration is supported similar to previous Delphi IDEs. The installer includes the Delphi XE integration add-in.
  • Visual Studio 2010 support
  • Visual Studio 2010 IDE integration supported through IDE Integration Pack update v200
  • C# 4 syntax support:
  • Support for the optional parameters. Default values available in (integrated) Parameter Wizard.
  • co- and contra variance support.
  • Other new C#4 syntax supported without changes.
  • Unicode Support:
  • Model engine and GUI support unicode.
  • Models are stored as UTF8.
  • Module source files can be generated as UTF8, UCS2 or Ansi (define per module).
  • Pascal: Improved Method Code Layout support:
  • ModelMaker 11 is able to create/regenerate most method implementation code layouts. Unlike previous versions, ModelMaker 11 supports code at column 1 and allows local variables to be declared after local procedures etc. See below.
  • Pascal Method Editor;
  • Note how:
  • The local var section is inserted after LocalProcedure at column 1
  • the const section at column 1
  • In the main body, the conditional define {$IFOPT D+} and the comments appear at column 1
  • Pascal: Flat Method Code Editor;
  • The ModelMaker 11 Method Implementation Editor edits the entire method implementation in a single block of text. Method Sections (user and/or non-user owned) internally still exist but are expanded when viewing or editing the method.
  • Flat Method Editor;
  • In most cases non-user owned code sections (like property access method and "inherited call" sections) are auto converted to user-code whenever the code is modified and saved. Where this is not possible (like with certain pattern related sections) the section is displayed with a special region marker This region has to be treated as read-only. The picture above shows a non-user section owned by the Singleton pattern.
  • Related to this: the Property Dialog now uses customizable Code Snippets (like the C# version) to insert access code and the predefined hard-coded options have been removed. This allows more flexibility when creating property access code.
  • Nested Type support:
  • ModelMaker 11 supports nested types like nested classes, interfaces, enums and other types like aliases. Nested classes, interfaces, records/structs and nested delegates are modeled just like other classes and delegates. Nested Classes and Delegates are either imported or manually added through the Members View Add pop up sub menu.
  • A Nested Type entity is used to encapsulate all other (non-class) nested types like enums and Pascal aliases. This entity is basically a text blob containing the type declaration code as found in a source file. The importer inserts and maintains these entities. The code generator emits them as imported, possible decorated with attributes and documentation. In the GUI these entities are read-only. Only Delete, Copy, Paste and Change Visibility are supported (Members View). The Nested Type entity supports adding a Stereotype, Documentation, a One-Liner and Attributes.
  • Modeled type references should use qualified names as in ContainingClass.NestedClass. This applies to ancestors, supported interfaces and member (return) types. Auto-maintained code model references (ancestor, member type etc.) do enforce this.
  • type
  • SampleClass = class(ContainingClass.NestedClass, ContainingClass.NestedInterface)
  • private
  • FField: ContainingClass.NestedClass;
  • function SomeMethod(): ContainingClass.NestedClass;
  • end;
  • Difference View handles analyzes nested types rather than reducing them to module code as previously.
  • IDE Add-ins support nested types in the Locate in IDE and Locate in ModelMaker commands.
  • Nested Types in Classes view:
  • Nested classes appear in the classes view just like normal classes. They are displayed with a qualified name in all ordering modes except order by containment.
  • A classes view ordering mode Order by containment is available. This is similar to Order by Name, but shows class containment as tree.
  • Selecting a nested class in classes view shows its members in Members view.
  • Copy/Pasting a nested class in classes view creates a new, unnested class. Note: use Copy/Paste in Members View to paste as a new nested class.
  • Refresh Import is not available for nested classes.
  • Pascal: option insert forward declaration option is not available and ignored during code generation for nested classes.
  • Nested Types in Members view:
  • Nested types appear in the Members View as part of the containing class.
  • Show Classes and Show Other Types filters allow controlling display of nested types. Available from tool bar and pop up menu.
  • Go to class (shortcut Enter) extended to select a nested class in the classes view, not only the (return) class types of members.
  • The Add pop up sub menu allows adding new nested classes, interfaces, records/structs and delegates.
  • The Class Info Bar optionally shows the containing class for nested classes, allowing to navigate to the containing class.
  • Similar, Show Related Classes shows the containing class for nested classes.
  • Nested Delegates can be dragged to other classes or the containing class to create events or event handlers based on the dragged delegate signature.
  • Change Visibility, Rearrange mode and Custom ordering work as expected with nested types
  • Member Manipulator does not operate on nested types
  • Nested classes and delegates can be renamed in Members view. Nested Type entities (like enums) are read-only.
  • Copy/Paste works with nested types. Copying a nested class and pasting it in the members view, inserts a new nested class.
  • Class Templates can contain nested types: both when creating a Class Template and when applying a Class Template. Note: ModelMaker Code Explorer recognizes simple nested types like delegates in Class Templates, but will not load nested classes.
  • Nested Types in Diagram Editor:
  • Nested classes are displayed as normal class symbols but with a qualified name as in ContainingClass.NestedClass
  • An auto maintained types compartment is displayed in class symbols. The Class Symbol "Symbol Style" tab (and similar tabs in Diagram / Project Options) has a Show Classes and Show Other Types filter that allows controlling which nested types are displayed. The custom member list styles do not allow displaying auto maintained nested types.
  • Stereotype based auto coloring:
  • The Stereotype Manager (main menu Options | Stereotype) allows defining a color for each Stereotype. Diagram symbols use this color if no custom color is assigned. Class symbol member compartments also use stereotype based colors.
  • Stereotype based coloring is commonly used to easily spot different archetypes of classes. Check for example Wikipedia for UML Colors
  • Stereotype base colors:
  • The Standard Stereotypes have been merged with the Stereotype manager view and allow defining default colored Stereotypes.
  • Generic changes:
  • C#: New Methods optionally have a default code snippet. Typically used to insert a Todo comment or throw a NotImplemented exception. Defined in Project Options | Coding Style | New Methods | Default Code.
  • The Interface Wizard allows disabling inserting Todo items in new methods. Option added to interface wizard window.
  • Pascal: in Win32 mode class constructors naming and visibility restrictions are in line with syntax, also, class destructors are supported.
  • Delegates now support a Stereotype like other model entities. Documentation view tracks Delegates.
  • Browse Members and Browse Methods that existed up to MM 9.x have been restored. These utilities allow searching members in the entire model and maintain the matches in a list that can be used to navigate. Available from the main Tools Menu
  • Property access method Code snippets can use a new macro "GenericTypeParams". This will expand to the property's type, type parameters. For example:
  • Property type = List
  • GenericTypeParams expands to "" (omit quotes)
  • Module Code View allows Pinning a module. Pinned modules are opened in a new tab and decouple module code editing form the selection in Modules View.
  • Pinned Modules:
  • Throughout the GUI "Category" has been renamed to "Stereotype" to be in line with UML terminology.
  • Classes view: in Order by Stereotype, drag-drop classes on a Stereotype node to change the classes Stereotype.
  • Diagrams changes:
  • The Diagram Editor supports Pinning Diagrams. A tab is added for each pinned diagram. The tab acts as shortcut for selecting the diagram.
  • Pinned Diagrams:
  • Note: unlike pinning in the Method Implementation View, pinning does not decouple the diagram editor from the selection in the Diagram Explorer. This gives a more natural behaviour.
  • Annotations can have captions and Stereotypes and allow hyper-linking like other symbols.
  • Suggested instance names for Generic (nested) classes - as for example used on sequence, communication and object diagrams, are improved.
  • Code Generation changes:
  • Documentation is optionally only word wrapped at spaces. Option Project Options | Source Documentation | Documentation Generation | Word wrap on spaces only
  • The macros and that can be re-defined to customize emitting stereotypes in code, have been replaced with and respectively. The old macros are still available for backward compatibility. Also, the default text used to emit a stereotype has been changed from
  • {: } // old style
  • {: } // new style
  • To restore the previous style, define a (project) macro named IntfStereotype and or ImplStereotype containing the previous style text.
  • Code Import change:
  • Refresh importing a Module or class(es) in a module uses a more precise class matching algorithm. It for example handles (auto) qualified class names and will not mix up identical named classes from a different module. Also, when an existing class is not found in the source file, it offers a manual match to a renamed class (if any) or to delete it from the model.
  • Manual Class Import Matching
  • The member type and visibility filters have been removed from the Import dialog. These were previously used to import only a limited set of members for place holder classes. Import (and Refresh Import) now implicitly import entire classes only as non-placeholder. Use a Source Reference for cases where you need a limited set of members for placeholder classes.
  • Documentation view:
  • Documentation view now tracks the focused entity from all other views. This includes delegates in modules view and nested types in members view.
  • The Check Completeness view handles nested types and recursively checks the currently focused entity for being documented.
  • The default Documentation template for Nested Type entities can be customized by adding a documentation template "Default_Template.OtherType" in the "system" templates folder. To do this, click the Documentation templates button and from the drop down menu select "Edit Documentation Templates".
  • ToolsAPI:
  • The MM ToolsAPI has been reworked to deal with nested types and reflect generalization of the code model. Several properties previously only available in IMMMember are now available for IMMModelPart. Several interface parameters in method calls have been changed to "const"
  • ToolsAPI updated to v12. All add-ins need to be recompiled.
  • IMMModelPart: Parent/Children gives access to (nested) containment. Children/ChildCount Replaces IMMClassifier.Members/MemberCount.
  • IMMModelPart.FindChild/FindChildOnID replace IMMClassifier FindMember
  • IMMModelPart.RootClassifier gives access to top level containing classifier (if any). IMMModelPart.NamePath gives the period separated name path for all entities.
  • IMMModelPart.CodeItemKind enumerate replaces both IMMMember.MemberType and IMMClassifier.ClassifierKind
  • IMMModelPart introduces CustomOrder and Visibility that were previously only available to IMMMember
  • IMMModelPart.Category renamed to Stereotype
  • Delegates (IMMDelegate) are accessed via the IMMCodeModel rather than via a separate MMToolsServices.MMDelegateManager (which has been removed). Delegates can be contained either by a class (IMMDelegate.IsNestedType = True) or the global model namespace (default).
  • IMMDelegate and IMMClassifier both descend from IMMTypeEntity. IMMTypeEntity.IsNestedType: Boolean returns true if a class or delegate are nested types.
  • IMMNestedType added. This encapsulates all nested types other than classes and delegates. BaseType: TCodeItemKind and Code give the details (including name).
  • TLinkableEntity enumerate (nttClass..nttDiagram) as used to link entities in references and messages has been replaced with TEntityType (tyNone, tyClass..tyDiagram)
  • IMMNavigator.CurMember is of type IMMModelPart (rather than IMMMember). In case of nested classes, CurMember can be any IMMModelPart.
  • IMMNavigator.GetSelectedMembers potentially returns a list of IMMModelPart not just IMMMember
  • IMMMethod gives access to Section Indent Level
  • IMMModule gives access to TextEncoding
  • IMMCategoryManager renamed to IMMStereotypeManager, methods accessing categories renamed to stereotype. Added access to stereotype colors. IMMToolServices.StereotypeManager is also renamed.
  • Solved problems:
  • Pascal: using fields and method resolution clauses in a custom class interface order could result in an uncompilable class interface due to a missing visibility specifier. Solved.
  • ToolsAPI: IMMModule.AddToUseClause would generate a catastrophic failure. Solved.
  • Syntax Editor: Unindent text could cause an AV. Solved.
  • Pasting a class in a new model, could cause an unselectable ancestor placeholder class. Solved.
  • ModelMaker 11.02 Service update:
  • Generic changes:
  • Macro TrimmedClassName is available in code snippets. It contains the class name stripped from class prefix and generic parameters. For example, for TList, TrimmedClassName contains "List"
  • Improved handling for abstract methods (similar for partial external methods): when making a method abstract, MM offers to clear any remaining code. The implementation view appears empty and disabled for empty abstract methods. If an abstract method contains code it will be displayed like before. This allows copying code out of abstract methods. Like previously, the code generator emits no code for an abstract method, even if its implementation is non-empty.
  • The Diagram Navigation Context Diagram can be printed - like other diagrams. It uses environment Printing Style to control black and white scheme, showing navigation icons etc.
  • Solved problems:
  • The Name label in a class association would be prefixed with "class association" This bug was introduced in MM11. Solved.
  • Some operations (such as copying members to clipboard or using drag drop to rearrange classes in a module) would lock the Modules View until a next model change caused a rebuild of the modules tree. Solved.
  • Pascal: the parser would not recognize anonymous records in an "array of record end;" construct. Solved.
  • "Apply Class Template" and Members view "Paste" members from text would erroneously assign class template attributes to the model class - such as ancestor. Solved.
  • Modules view in order by namespace or folder structure would not always be updated after a modules was changed. Solved.
  • ModelMaker 11.03 Service update:
  • Generic changes:
  • Diagram elements like Actions, Use cases etc. allow hotlinking to other diagrams.
  • Solved problems:
  • Syntax Editors could remain disabled in some cases - no workaround known. Solved.
  • Modules View could in some cases remain locked. Reactivating the modules view usually re-enabled it again. Solved.
  • Pascal: The Project Options | Coding Style | Property Access method Visibility would not be applied when creating new properties. Instead "private visibility" would be assigned. Solved.
  • Auto coloring based on stereotype would not work for Annotations. Solved.
  • Default Property "many" multiplicity was not assigned for indexer properties. Solved. Related: the "many" multiplicity would be applied to 1 to 1 properties. Solved.
  • Module documentation would not be emitted if default visibility was not included in documentation visibility filter. Solved.
  • Delphi IDE add-ins: to avoid conflicts with existing IDE shortcuts, the shortcut for "Refresh in model" now defaults to Ctrl+Shift+Alt+R and "Jump to ModelMaker" defaults to Ctrl+Shift+Alt+M.

New in ModelMaker Pascal Edition 10.21 (Nov 6, 2012)

  • =Delphi 2010 syntax support and IDE integration;
  • New Pascal Delphi 2010 Win32 language mode on Project Options | General tab.
  • Support for the delayed option in external procedures.
  • Support for custom attributes in parser and editor.
  • Attributes wizard available for classes and members (multiple selection in explorer). Uses attribute presets, organized similar to templates.
  • Delphi 2010 IDE Integration add-in. Available in Pascal and C# editions.
  • New Syntax Editors:
  • The Syntax highlighting editor as used in Implementation view, Module code view and some code related option tabs has been replaced, adding a wealth of features:
  • Show Tabs (enabled by default), Show spaces (disabled).
  • Brace matching for ( { [ ] } )
  • Cursor beyond end-of-line
  • Highlighting of the active line (different background) and a cursor-indicator > showing the active line in the gutter.
  • Whole words search in Search and Replace
  • Much improved Editor templates expanding on Ctrl+J, the templates are much easier to edit. Also, if necessary a filtered drop down list appears to select a template.
  • The settings to control the new features are located on tab Environment Options | Editor and its sub-pages Highlighting and Templates.
  • The Difference View also uses this component and has new styling options on Environment | Difference.
  • Diagrams;
  • The Diagram Explorer view (optionally) displays Diagram thumbnails. Display of thumbnails and thumbnail size can be adjusted on Environment Options | Diagrams | Appearance & Printing.
  • Diagram Editor command Link to diagram creates a navigation hyperlink to a diagram for the focused symbol. The symbol's text is optionally linked to the diagram name. The command is a shortcut for creating a hyperlink manually via the Hyperlinks tab in the symbol's dialog.
  • Email Diagram - creates an email and attaches an image of the current diagram. Uses the default mail application for address selection etc. The image file format defaults to *.png and can be adjusted on Environment Options | Diagrams | Appearance and Printing.
  • Hyperlinks to external files show the file type image.
  • The Diagram Editor navigation history has a "Recent diagrams" drop down list allowing to navigate through the previously visited diagrams.
  • The Diagram Editor Navigation Context window is made "Auto Hide" - deactivating the Context window automatically hides it.
  • The Diagram Explorer view allows ordering diagrams by
  • Diagram name.
  • Diagram type and diagram name.
  • Custom order - use drag and drop to rearrange diagrams.
  • Time stamp - diagrams are ordered in the order they were created.
  • The dialog that allows selecting a hyperlink to a diagram displays the diagrams organized by folder structure. A Diagram Search Edit filters the displayed diagrams to help locating diagrams in large folder structures. The "New..." button now creates new diagrams in the folder selected in the dialog.
  • Mind Map Diagrams;
  • Mind Map symbols can show an Icon. Icons are selected from a build-in list of presets like: Tick, Dismiss, Todo and Colored numbers.
  • Double click in a Mind Map diagram adds a branch to the focused Mind Map symbol at the double click position.
  • New Auto Mind Map style Colors on Black - similar to Bright Colors, with a black background.
  • New Auto Mind Map style Compact Gray scale - gray scale colors but without borders and thin lines.
  • New Quick Access Tool in Mind Map nodes to create a child branch.
  • Alt+Click on a symbol in a Mind Map diagram selects the Mind Map node and its branches.
  • Alt+Drag on a Mind Map diagram moves a symbol and its branches.
  • Layout branches command re-layouts the focused symbol's branch nodes.
  • The Custom Mind Map style editor supports adjusting border style, diagram background color and font color. Note: Line style and shadow color are currently unused.
  • Members view;
  • Class Info bar optionally displays descendants and siblings (classes descending from the same ancestor). The number of rows in the class info bar is adjustable. Check Members view pop up | Properties | Members view for options.
  • Code Generation and Import:
  • Generation of the default ancestor for classes is configurable via tab Project Options | Code Generation.
  • Pascal: the default ancestor TObject may be suppressed by disabling option "Emit Default Ancestor". Default this is enabled to be compatible with previous versions.
  • C#: the default ancestor may be emitted as "System.Object", "object" or may be suppressed. Default this is set to emit as System.Object to be compatible with previous versions.
  • If you change the default, and want it applied to other and new models, click the "Make default" button on the Project Options dialog.
  • C# code generation: optionally an empty line is emitted between property access methods. Controlled on Project Options | Code Generation tab.
  • C# code generation: optionally a space is emitted before the class heritage colon. Controlled on Project Options | Code Generation | Space before heritage.
  • class Sample : object { } // space before heritage
  • class Sample: object { } // no space before heritage
  • C#: an empty line is emitted before fields if they contain documentation or attributes to conform to StyleCop metrics.
  • C# Code Import: when importing nested classes ModelMaker qualifies the nested class names to avoid collisions with equally named (nested) classes. Optionally you may now qualify nested classes with just the containing class name rather than the fully qualified name including name spaces. Controlled via C# Project Options | Code Import | Fully qualified nested classes. Default this is enabled to be compatible with previous versions. If you change the default, and want it applied to other and new models, click the "Make default" button on the Project Options dialog.
  • IDE Integration:
  • New command: Model Search - activates the ModelMaker Model Search bar with the word at IDE editor cursor position. Available for Delphi 4 - Delphi 2009 IDEs and Visual Studio 2003-2008.
  • Modules view:
  • Import Source File when invoked from the Modules view pop up menu, presets the import dialog with the directory of to the selected module.
  • Pascal: Modules view has a new ordering mode Order by namespace (alpha sorted). This is similar to Order by namespace, but additionally mixes alpha sorted modules and namespaces (folders) at the same level rather than first displaying namespaces (as folders) followed by modules (as nodes)
  • Pascal: The Use Unit dialog optionally displays the file path when modules are displayed in a single column.
  • Pascal: Format uses clause - reformats the uses clause at cursor position according to the margin settings. Shortcut Ctrl+Alt+U
  • Implementation view:
  • Extract Method and other refactoring commands available on the Implementation view toolbar. Use the "Customize..." command from the toolbar pop up to expose them.
  • Generic changes:
  • Invoke "Model Search" command has been added to Classes view, Members view, Modules view and the Diagram Editor. The search bar is invoked with the focused entity's name. Shortcut: Ctrl+Shift+F2
  • ModelMaker Dialogs use clear type font Tahoma
  • ToolsAPI:
  • State transitions attributes like event-label and guard have been exposed through the diagram explorer. Check IMMStateTransition in MMDiagramApi.pas
  • Solved problems;
  • Reconnecting documentation links to association was impossible in some cases. Solved.
  • Implicit links from classes to their state diagram would not appear in the "Find references on Diagrams" results for that class. Solved.
  • Diagram Editor Time-Shift tools would in some cases not move association shape nodes, distorting the line paths. Solved.
  • Jumping from ModelMaker to the Delphi IDE would in some cases not set focus to the IDE editor. Solved.
  • Pascal: In some cases the method editor local var list remained empty when activating the implementation view. Solved.
  • Pascal: property accessors using qualified names would in some cases cause the importer to fail. Solved.
  • Pascal: the code generator would emit wrong code for a method with constrained generic parameters. Solved.
  • ModelMaker 10.21 bug fix update - changes;
  • The "Bring to foreground mode" for the Delphi IDE integration add-ins is adjustable with the IDE integration options dialog. This allows fine tuning the MM / Delphi interaction.
  • Method Implementation editor Hyper jump (Ctrl+H) also navigates to a class if the cursor is at a class name.
  • Environment options | Editor takes "Tab width" and "Use tabs" settings from Project options | Code generation | Code layout.
  • C#: non-user owned sections in the Implementation editor have a different background color. Adjustable via Environment Options | Editors | Syntax Highlighting
  • C#: the Method dialog allows adding code snippets to the method implementation. Select a predefined snippet or add you own snippets via the drop down list.
  • ModelMaker 10.21 fixed bugs;
  • Method Implementation and Module Code editors would in some cases not commit changes to the model. Fixed.
  • Env Options | Editors | Tab Width would remain at 2. Fixed.
  • MM VS IDE integration pack v1.71 fixed bugs:
  • Add to Model would invoke Model Search. Fixed.
  • In some cases "Add Files to model" and "Convert Project to model" would not do anything on Vista / Win7. Fixed.

New in ModelMaker Pascal Edition 10.10 (Nov 6, 2012)

  • Generic changes:
  • Engine, importers, editors and tools support higher Ascii characters in identifiers, allowing names like Länge and Mañana - depending on the system code page.
  • New type selector with auto drop down filtered list of all known types and auto completion. Old style type selectors (radio buttons) have been removed everywhere and related dialogs have been redesigned.
  • Type Selector handles Alt+Right / Alt+ Left to go to the next uppercase character in an identifier. This improves navigating in identifiers like MoveToNextBoundary.
  • The type selector auto completion checks type history and predefined types (previously known as type presets) before checking other known types. Customizing the predefined types allows changing auto completion order, character case (pascal) for types like string (or String, STRING), int (Integer) bool (Boolean). Predefined types can be edited via Environment Options | General. New defaults are applied, previous type presets are ignored.
  • Global Navigation History and Stack based forward / backward history in the main toolbar. The two histories styles give access to methods (optionally also other member types) recently visited. Keyboard shortcuts are Alt+Left/Right (stack based history) and Ctrl+` for the global history. (German keyboards Ctrl+0). The history buttons can be hidden using "Customize toolbar". History options are available in tab Environment Options | General | Search & History.
  • The Delegate dialog has an embedded parameter wizard. This allows structured editing of the delegate parameter list.
  • The (embedded) parameter wizard (method and delegate dialogs) has a filtered auto drop down list with previously entered variable/typename combinations.
  • The (embedded) parameter wizard supports multiple selection when changing parameter modifiers (const, out etc) typename and default value.
  • "Locate in Delphi/VS" commits pending changes in model views before switching to the IDE.
  • "Invoke model search" added to Module code view and implementation view. Activates the model search bar with the identifier at cursor position. Shortcut Ctrl+Shift+F
  • Drag-dropping files on the Reference view adds these files as references, similar to how Modules view imports dropped files.
  • When using the IDE add-ins to convert a file or project to a model, ModelMaker suggests to adjust (increases) the language mode if necessary. For example: invoked from VS2008 the C# language mode will be set to C# v3 minimum, invoked from Delphi 2009, the Delphi language will be at least D2009 win32 mode. This should avoid most importing problems.
  • Environment variables may be used in the path specified in a path alias. Aliased path "($PROJECTS)" (omit quotes) will expand environment variable "PROJECTS". Environment vars can only be at the beginning of an aliased path. Sub directories are supported. For example: "($PROJECTS)\Test". Environment vars inside aliased paths are not supported. For example: "E:\($SOURCE)\Tests" is not supported.
  • Members view - class info bar:
  • The Members view class info bar displays classes related to the current class. For example: ancestor, supported interfaces and classes implementing the current interface. The related classes are displayed up in a scrollable list. Clicking a class or interface navigates to it. Using this, it is easy to navigate between a class and interfaces it implements and vice versa.
  • Modules View:
  • Modules can be additionally be ordered by namespace (Pascal only). In this ordering mode modules can be drag-dropped on a namespace to change the unit name / namespace. If the module source file name is changed to an already existing file, the module's auto code generation is disabled to avoid unwanted overwriting existing source files.
  • Module can also be dropped on other modules to change namespace, folder, alias or category. Previously modules could only be dropped only on folder nodes.
  • Module nodes can be displayed as bold to make navigation easier - option on tab Environment options | GUI.
  • Module Path information is optionally suppressed, - option on tab Environment options | GUI.
  • Modules view uses super-hints to show details of entities
  • Some class related commands are available on the Modules view toolbar. Use toolbar customization to show/hide or move these.
  • Print Module - allows emitting the module to clipboard, file, printer or preview, without generating the source. Default shortcut Ctrl+P, The command is available from the editor pop up | Wizards sub menu. The command is also available in the toolbar, but hidden by default. Use toolbar customization to expose it. The Module Code view has a similar command Print Module Code. This prints the unexpanded module code, the code for contained classes is not expanded.
  • Diagrams:
  • Diagram editor: "Assign custom color" shows the current color for the selected symbol rather than the previous selected color.
  • Diagram symbols, Visual style tab: for parent defined (not-customized) colors, the color dialog comes up with the parent defined color rather than black.
  • Color selectors in drawing shape symbol replaced with drop down pick lists containing standard web-safe colors.
  • Add Web URL hyperlink on diagram elements hyperlinks tab. Allows creating http:// links
  • The hot area for role life lines (sequence diagrams) has been increased. This makes it easier to connect messages to life lines.
  • Mind Maps Diagrams:
  • Mind Map diagrams can be Auto styled. Auto styling consist of two parts: First, one of the (new) predefined visual styles is assigned to mind map nodes: Central Theme, Branch or Sub-Branch. These styles define border style, font size etc. Additionally, a color scheme assigns fill and stroke colors to Mind Map symbols, overriding the colors as defined in the visual styles. Several color schemes are available, such as Bright Colors, Pastel Colors and Gray scale. Additional color schemes may be created based on one of the predefined schemes.
  • To customize the fill and stroke color of individual mind map nodes in an auto styled diagram, use the "Apply Custom Color" button from the main diagram editor visual style toolbar (or popup menu). This command resets the "Auto styled" option for the selected node(s) and then assigns a color as Fill Color (using the symbol's visual style). The same thing can be done using the MindMap symbol dialog: disable the auto styled option and select a new custom fill or border color.
  • For colored (palettized) styles you may pick a color from the style's color palette using the assign color drop down in the Mind Map tool bar.
  • Similar, you can add a new branch with a specific color using the Add Branch drop down from the Mind Map tool bar
  • The hierarchical structure as used in auto styled diagrams, is based on Mind Map relations and their direction. Mind Map symbols, images etc. are included in the structural analysis. Other relations like dependencies and and annotation relations do not define the hierarchy. Arrows as may be displayed on the mind map relations are purely decorational and have no meaning for the hierarchical structure. This helps analyzing problems with Auto styled diagrams, arrows are auto-displayed when mind map relations are selected. .
  • Several Border Styles are available: round rectangle, ellipse, drop round rectangle etc. The border style is part of the Visual Style. Therefore, to change the default border style for all mind map symbols, you should edit the visual styles "mindmap:defaults" or "mindmap-node" (in older versions). To change the border for individual nodes, use the border style selector in the mind map editor toolbar.
  • The Tool Palette commands to create a Central Theme and (Sub) Branch have no effect in an auto styled diagram: in all cases a new node will be created but the visual style will be assigned based on the hierarchy.
  • Manual styled diagrams: (auto styling disabled) in this case the styles for nodes are not auto assigned. When creating a node, ModelMaker analyses the structure in some cases to guess the correct style, but once assigned styles are not updated, nor are color schemes applied (the color schemes require the structure to be present). In manual mode you create new nodes with Ins/Ctrl+Ins keyboard shortcuts, with the Quick Access Tools (QAT) or Editor Tool Palette. The QAT and Palette tools auto detect and assign the required parent style (central theme, first level branch, subbranch). In most cases manual styled diagrams look OK and result in about the same diagram as a gray scale auto styled diagram.
  • New keyboard shortcuts:
  • Backspace: select parent node
  • Delete (Del): selects the parent node for the deleted nodes.
  • Insert (Ins): inserts a new sub branch (child) Mind Map symbol
  • Ctrl+Insert (Ctrl+Ins): inserts a new sibling sub branch (add a child to the parent of the selected symbol.
  • Change Parent: Alt+Drag/Drop a MindMap symbol on another MindMap symbol changes the Mind Map hierarchy (instead of symbol containment as on other diagrams). The MindMap between the two symbols relation is created or modified. The dropped symbol and its sub branches are auto-repositioned.
  • Mind Maps created with SimpleMind for the iPhone can be imported with the Diagrams view | Import diagrams command.
  • Creating custom schemes for Mind Maps is done with the Custom Scheme Editor. This is invoked from the Mind Map toolbar when a colored style is selected. Note: the command is only available when the selected color scheme is a palettized scheme (not Black & White or Gray Scale). The build-in styles cannot be adjusted, instead you use the "save as" command in the Custom Style editor to clone and modify these. You may add descriptions to color entries such as "Fix asap", "Feature request". These descriptions are displayed in the color The custom scheme files are picked up at startup from directory
  • C:\Documents and Settings\[USERNAME]\Application Data\ModelMakerTools\ModelMaker\10.0
  • To delete custom styles, remove them from this directory and restart ModelMaker.
  • Difference view:
  • Modules can be additionally be ordered by namespace (Pascal only).
  • Documentation editors;
  • In documentation templates the macros and are available. These expand to the short date and time format as defined in the system locale settings.
  • Method implementation view;
  • Print method - allows emitting the entire method to clipboard, file, printer or preview. Default shortcut Ctrl+P, The command is available from the editor pop up | Tools sub menu. The command is also available in the toolbar, but hidden by default. Use toolbar customization to expose it. The members view has a similar command Print methods. This prints the selected methods - in the order as displayed in the members view.
  • Solved problems;
  • Treeviews would handle Ctrl/Shift+Left/Right and Select all when the inplace editor was active. Solved
  • Treeviews would start rename when clicking on an already selected node to focus the tree. Solved.
  • Event editor dialog would add available delegates to the drop down list each time the dialog was invoked rather than first clearing the list. Solved.
  • Modules view folder structure would not discriminate between a (sub) folder name and a file with the same name, causing the (sub) solder to be invisible. Fixed.
  • Pascal: class vars and consts would in some cases be generated as instance fields (vars). Solved.
  • Adding methods to a decorator pattern would cause an access violation. Solved.
  • The Documentation editor font as defined on Environment Options | Editors would not be user in all cases, changes would not be picked. Solved.
  • Minor xml formatting problem solved.
  • Modules view and Classes view: invoking class difference with a just single class selected would cause a list index out of bounds error. Solved.
  • Class difference could in some cases lead to a series of error messages "ambiguous module...". Solved.

New in ModelMaker Pascal Edition 10 (Nov 6, 2012)

  • Delphi 2009 support:
  • Delphi 2009 IDE add-in
  • New Delphi 2009 syntax supported:
  • Generic types: for example in classes, interfaces, records and delegates.
  • Anonymous methods: the "reference to procedure" construct is emitted as a special delegate type. Anonymous method implementations are emitted as Live Metric hints with navigation support.
  • Parsing support for the deprecated hint directive with string comment. Note: editing the hint using MM is not supported yet.
  • Other parser improvements to make the above possible: improved asm handling, improved operator keyword handling,
  • To enable Delphi 2009 syntax, make sure the pascal language mode on Project Options | General is set to D2009 win32. Selected Language mode is also displayed on the statusbar
  • Modules View:
  • A lot has been done to make creating, managing and synchronizing modules (source files) easier. The demo movie Managing (C#) source files. One class per module scenario shows the C# one class per file scenario, but is also relevant for Pascal.
  • Synchronize model: refresh imports all modules that have been modified after the last generation from ModelMaker. Similar to how the difference view marks modules modified. The command is available main toolbar and main menu. Also available in IDE integration add-ins.
  • Generate all: generates all modules to source files. If code generation is locked, you get the option of unlocking the code generation.
  • Modules tree supports multiple selection. All commands now support multiple selected modules, classes or delegates, except some drag-drop operations and "Erase module"
  • Multiple selected classes or modules can now be dragged from modules view to the diagram editor for visualization.
  • Modules can be ordered by [ folder structure | name | path (or alias + name) | category, name | category, path (or alias + name) ].
  • Ordered by Folder structure displays the modules in the folder hierarchy based based on file name or alias - depending on the setting for Display Aliases (see below). In this ordering mode modules can be drag-dropped on a folder to change the module name : the alias and relative module path are copied from the the first module in this folder. If the module source file name is changed to an already existing file, the module's auto code generation is disabled to avoid unwanted overwriting existing source files.
  • The Display aliases | Display paths option is available from the Modules view pop up menu.
  • Ordered by category + name or path, modules are organized in category folders. Modules can be drag-dropped on a category folder to change module category.
  • Create Modules containing class: this command makes it easier to work in the "one-class-per-file" mode. It creates a new module for each selected class. The module is named after the class (Documents.pas, Document.cs). The modules have the @MMProjectDir alias, making the source files relative to the project directory. Place-holder and imported classes are auto-skipped. Classes currently in another module are removed from those modules.
  • Create module containing class is also invoked when drag-dropping classes on a folder node (order by folder structure). In this case the newly created modules receive the alias and relative path from the first module in this folder.
  • Module option Auto derived module name. If enabled, the module name is auto composed from the the first class|interface|record (in that order) in the module. The module name is based on the auto module name format as defined on Project Options | Coding Style. This format is by default "[Class]s" (pascal) and "[Class]" where [Class] is replaced by the actual unprefixed class name.
  • Pascal example: a class TSample results in module Samples.pas
  • C# example: a class Sample results in module name Sample.cs
  • Project Option | Coding style "default auto derived module name" controls if the modules view "Create module from class" command enables the auto derived module name for the newly created modules.
  • Auto derived module names are particularly useful in a "one class per module" scenario.
  • C# only: Module option "Derive namespace from relative directory": If enabled, and the module directory is a sub directory of the project directory, the default namespace macro as used in module code generation is derived from the project default namespace and the relative project directory. For example:
  • Project namespace = MyProject
  • Module filename relative to model = Tests\Sample.cs
  • Resulting default namespace = MyProject.Tests
  • The importer substitutes the expanded namespace with the macro if the imported namespace name matches the expanded name.
  • C#: Add Modules to IDE project: adds the source files for the selected modules to the IDE (Visual Studio | Delphi) project defined in Project Options. If no IDE project is defined yet, you may define one. Files already in the project are skipped. The IDE must be running for this command to function.
  • Class manipulator available for selected classes.
  • Search bars:
  • Search bars have been added to make it easier to locate entities.
  • Model Search bar in main window toolbar. Used to search classes or their members and modules in the entire model.
  • Member Search bar in members view toolbar. Used to search a member in the current class.
  • Search bar options include: "sub string search" and "case sensitive search". Check search bar pop up menu and tab Environment Options | General | Searching.
  • Find References on Diagrams;
  • Tools to locate diagrams containing an entity (class, module etc)
  • The Find references on diagrams command displays the diagrams that contain a reference to the selected entity. The list allows selecting the diagram.
  • Find references on diagrams is available classes view, members view, modules view, diagram explorer and diagram editor. Check context menu. The command is also available in the toolbars - but hidden by default.
  • In the diagram editor, invoking the command in empty space displays the reference to the active diagram on other diagrams.
  • Visualizing Diagram navigation relations;
  • Tools to help finding related diagrams and visualize diagram navigation relations.
  • The diagram editor Navigation Context window shows the navigations references to and from the current diagram and other diagrams. This window is shows/hidden with a "Context" button in the top right corner of the diagram editor.
  • The context view shows optionally incoming and/or outgoing references - adjust using the Options drop down from the toolbar.
  • Insert navigation context: inserts the incoming and outgoing references as hyper links in current diagram
  • Copy navigation context: copies the incoming and outgoing references as hyper link symbols to the clipboard. Used to manually create a diagram navigation index.
  • The Overview and Navigation Context buttons in the diagram editor can optionally be hidden: use the button's pop up menu, or the options on tab Environment Options | Diagrams | Diagram Editor.
  • Visualize related diagrams: Visualizes navigation relations between diagrams using hyper link symbols and dependency relations. The command operates on selected hyper link symbols with links to diagrams. It inserts new hyper link symbols and navigation relations between existing and new hyper links. Available from the diagram editor wizards menu.
  • Visualize diagram relations: Visualizes navigation relations between diagrams using hyper link symbols and dependency relations. The command operates on selected hyper link symbols with links to diagrams. It inserts new navigation relations between the existing hyper links. Available from the diagram editor wizards menu.
  • Create diagram navigation index command in the Diagram Explorer view, create a new diagram visualizing the current diagrams and their navigation relations. Note this diagram visualizes a snap shot of the current diagrams and is not auto-maintained if diagrams are added or modified.
  • General Diagrams new features:
  • Hyper link symbol visual style is exposed. This allows adding a border to hyper links symbols by setting Border width > 0. Also adjustable are Colors and Font style.
  • Mind Map Relation allows defining line-end arrow styles.
  • Most Classifier symbols allow defining the stereotype icon image displayed in the top right corner of the name compartment. Typically used to show a (custom) classifier is a data stores an interface etc.
  • Visualize containing modules - used to visualize the modules containing the selected classes and inserts dependency relations to the classes the module contains. Available from the diagram editor wizards drop down and "associated module" diagram editor pop up sub menu.
  • Visualize Module Relations - a dialog lets you select the module relations to visualize: containment and/or dependencies. Available from the diagram editor wizards drop down menu.
  • Difference view:
  • Modules can be ordered by [ folder structure | name | path (or alias + name) | category, name | category, path (or alias + name) ] - similar to the Modules view.
  • Super tool tips added to the difference tree, showing details and explaining the status of the tree nodes.
  • Implementation view:
  • New "Multi line" style added to Surround templates. In this style the template prefix and suffix are inserted at the beginning and end of each selected line. Optionally existing code is converted to a string. This style is very useful when working with SQL or XML formatted text or any other text that is not Delphi or C# code. For example - assume a template with prefix Sql.Add(' and postfix ');
  • select * from Customers
  • where Name = 'Abc'
  • // after applying the template:
  • Sql.Add('select * from Customers');
  • Sql.Add('where Name = ''Abc''');
  • Multi Line surround wizard: based on Multi Line style surround templates. Lets you enter prefix and postfix texts and inserts these before and after each selected line. Saves you creating a template for less common cases. Available from the "Surround" sub menu.
  • Generic changes:
  • Huge performance improvement for operations that would result in a large chain of changes - such as renaming a commonly used class.
  • MMToolsAPI:
  • interface IMMMethodInstrumentationHook added. This allows customization of method instrumentation code on a per method base.
  • Solved problems:
  • Pascal: The Interface wizard would display inherited interfaces implemented by delegation as not-implemented. Solved.
  • In some cases a new model could contain some class associations from previously loaded models. Solved.
  • Add local var, field, method, property etc. in the method implementation view would in some cases fail, silently or with an error message - due to uncaught exceptions when trying to detect type and or name for the new entity. Solved.
  • The type name wizard in Type selectors did not suggest a type name at all. Solved.
  • The method override wizard could make existing property access methods inheritance restricted. This could then cause error when refresh importing the source later. Solved.
  • Pascal: the importer would in some cases ignore a change in property "const" write parameters, requiring a second refresh import. Solved
  • Indented method sections would appear without indentation after reloading the model. Fixed.