New features in ModelMaker 10

MM 10 released

On September 26 th 2008 ModelMaker Tools released ModelMaker 10. Check the upgrade policy to upgrade existing licenses.

Main new Features

and lots more...

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 <<contains>> 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.


  • 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.