ModelMaker 9.10

Feature highlights

  • Convert IDE debugger stack to a sequence diagram. Movie: Converting Debugger stack to Sequence Diagram demo movie
  • Member categories are optionally emitted as source code regions.
  • Delphi 2007 IDE integration and initial Generics syntax support
  • Referenced classes can auto-maintain members. Members are automatically imported and maintained when the referenced file changes.

General new features

  • The interface wizard optionally assign the interface name to the implementing member category. This allows grouping or sorting members on category during code generation or member display in diagrams or members view.


  • The IDE add-ins have a new command Create sequence diagram. This converts the debugger call stack to a sequence diagram. Note: the debug process should be paused at a breakpoint to have access to the call stack.
  • The name text for iconic Interface symbols (collapsed, displayed as circles) is now by default fixed rather than floating. As a result, by default moving the name also moves the icon (circle). The classifier dialog has been extended with an option to adjust the name position to Floating or Fixed (Top, Bottom, Left, Right). To adjust the default name position, use Symbol Preferences. Note: to ensure backward compatibility, existing interface symbols are loaded as floating, not locked.
  • Horizontal and Vertical shifters added to all diagram types. Similar to the sequence diagram Time shift, these tools extend or compress space in horizontal or vertical direction with need to select symbols. Particularly (but no only) useful in sequence diagrams to create / remove horizontal space. These tools are part of the selection group in the diagram editor. Just like any other tool, you can hide these tools from the diagram editor tool box if not needed.
  • Visual Style editor tabs redesigned: visual style is now edited in an in place editable tree showing the available options in logical hierarchy.
  • Multi page (printing) support redesigned: a diagram optionally consists of multiple pages arranged in a matrix (columns x rows). This allows creating large diagrams up to 4 x 4 pages. The diagram editor (optionally) displays page dividers. The previous multi page style has been removed.
  • Environment options | Diagram Editor has an option to adjust the default zoom factor other than 100% when loading a diagram in the diagram editor. Select from 25%..200% or page, page width etc.
  • The Visual style option "Show Association names" now only controls class associations, just like Show Association-class names" also only controls class associations. All other relations such as state transitions, sequence diagram messages etc. are now unaffected by the setting of this option.
  • Diagram Editor: Ctrl+Tab / Ctrl+Shift+Tab navigate to Next / Previous diagram. Note: this cycles through the global list of diagrams, not through previously visited diagrams (backward and forward Ctrl+B / Ctrl+F). Available in the Diagram Editor pop up Navigation sub menu or in the main toolbar customization dialog.
  • Diagram Explorer view hint shows diagram name, diagram type and diagram one liner / documentation.
  • Pascal: the type name for property overrides is suppressed in class compartments. This avoids imported property overrides to be displayed as the default Integer type.

Member region support

  • Member categories are optionally emitted as source code regions, using the category as region name. This way non-nested regions are supported in Pascal class interfaces and C# classes. Nested regions are not supported.
    // member regions supported - similar for pascal
    public class Foo {
      #region Bars
      public void FirstBar() { }
      public void LastBar() { }
      public void NextBar() { }

      #region Trivials
      public void FirstTrivial() { }
      public void LastTrivial() { }
      public void NextTrivial() { }
  • Emitting members categories as regions is controlled in Project Options | Code Generation.
  • When generating members, each time the member category changes, a new region is emitted. To avoid unwanted switching between regions (same region name emitted more than once), set code generation sorting to "group by category". C#: do not group property state fields.
  • Category based region generation ignores the <!IntfCategory!> <!ImplCategory!> macros.
  • To support a full round trip, the importer optionally assigns the containing source region name to the member's category. This is controlled in Project Options | Code Import.
  • Pascal: optionally method implementation regions are also emitted. Unlike the class interface regions, method implementation regions cannot be imported and simply ignored. To be able to remove auto generated implementation regions, the region name is prefixed with a special tag "#MM:>>".

References: Auto maintained members

Referenced classes can "Auto maintain members". If this is enabled for a class, all members are automatically imported and maintained when the referenced file changes. If ModelMaker detects changes in the referenced file when reloading the model, not only these classes and their members are automatically refresh imported - (that is how normal references work), but also new members are added to the model and members removed from the reference are deleted from the model.

Rather than only importing methods from referenced classes when required for overriding etc., the auto maintain members feature imports all members for a referenced class. This makes these members available in diagrams and the interface wizard.

This feature makes referencing to a class very similar to "import source file" that previously was frequently used to refer to 3rd party classes or classes maintained in other models. But without creating the module in the model and thus without the danger of accidentally regenerating the source, or needing to manually synchronize (refresh import) these modules.

Auto maintain members is controlled per class with an option in class dialogs and class manipulator. Additionally the references view has command "Import including members" which imports the class and at the same time enables the Auto maintain members option.

Interface members default auto maintained

A very common use case is to implement referenced interfaces using the interface wizard. For this, the interface wizard needs all members. Therefore by default referencing an interface automatically sets auto-maintained members for that interface. This is controlled (disabled) on Environment Options | General.

Private members and fields not auto maintained

Fields and private members are by default *not* imported to reduce model size: private members and fields from referenced classes are usually not accessible in a a descending or "using" class.

However, because of this, class relations between referenced classes based on these internal details (private members or fields) cannot be auto-visualized in the diagram editor. If you want to visualize these internal relations, you can enable auto maintaining fields and / or private members on Environment Options | General. By default this is disabled.

The question remains of course whether it is good practise to visualize internal details form referenced classes.

Modules view

  • Convert Module to Reference converts the selected modules to references - Modules view pop up menu | Wizards. A new Reference to the module source file name is and classes and delegates contained by the Module are marked as Imported from the reference. Classes have the option "Auto maintain members" enabled. Finally the Module is deleted from the model and after the reference has been reparsed, you'll see the usual notification "References analyzed. Click to update model" which completes the conversion.
  • Modules view pop up menu reorganized. Classes and delegates now have their own pop up menus rather than a sub menu of the main modules pop up menu.


  • The Pascal parser support nested types in Delphi 2005 and higher language modes. Nested types cannot be imported into the model yet - but at least the importer emits warnings rather than going totally astray on nested types.

Delphi 2007 and Generics support

  • Delphi 2007 IDE integration added.
  • A Delphi 2007.Net language mode may be selected on the Pascal | Parsing tab. In this mode, the parser supports generic types and navigation for generic types is also supported. Editing and generating generic types is still under construction. In particular type parameter constraints will result in incorrect declarations. Other editing operations are untested and may or may not work.

Solved problems

  • Tagged values added through the ToolsAPI could in some case result in duplicate tagged values. Solved.
  • Diagram editor: Moving a selection of multiple association adornments would move the association rather than the adornments. Solved.
  • Pascal import: importing multi cast events (event property with add / remove syntax) would fail and replace add/remove with get/set syntax. Solved
  • Layouts: docking container view names from existing layouts would be loaded in "old" state, not displaying newly added views or old names such as "units" instead of "modules". Solved
  • Several main window keyboard shortcuts missing - such as Ctrl+F11. Solved.
  • The MM9 Add-in custom menu items did not support separators anymore: a menu with "-" was displayed instead of a separator. Solved.
  • A non-empty category (stereotype) for diagram symbols not linked to entities would change after reloading / undoing. Bug was introduced in MM9.01. Solved.
  • Importing previously exported diagrams would in some cases not merge exported diagram folders. Solved.
  • Pascal: In some cases an Access Violation would occur when renaming a local procedure in the method implementation editor. Solved.
  • C#: Destructor attributes and comments would not be associated with the destructor method. As a result sorting or moving the destructor could result in loss of attributes or documentation. Solved.
  • C#: constructor base / this calls would not accept array initializers as in base(new int[]{1,2,3}) . Solved
  • C#: implicit/ explicit operators would not accept array types. Solved.
  • Pascal: an unterminated string in a region name would cause an unhandled exception, leaving the explorer window empty. Solved.
  • Pascal: matching Implicit and Explicit operator implementations with declarations could cause problems if operator parameter lists were identical. Solved.
  • The macros view would cause an AV when loaded in a screen resolution other than 96 dpi. If the macros view was visible at startup, it would be impossible to start MM. Solved.
  • A class difference (difference view) for two classes no in a module would cause a series of messages "no associated module" in the message view. Solved.
  • After pasting symbols in the diagram editor, the pasted symbols would appear as selected, but operations invoked on the selection (like pressing F2 to rename) would not work. Solved.
  • Pascal: importing modules containing threadvar declarations could in some cases cause harmless importer warnings about unexpected tokens. Solved.