ModelMaker 9.00

Feature highlights

The new ModelMaker 9 features focus on making it easier than ever to work with ModelMaker:

  • References make it easy to using multiple models, thus improving team development.
  • The Find model wizard makes it easy to locate a model containing a source file.
  • The existing binary file format has been replaced with an xml format for better use in version control systems.
  • Class tree supports multiple selection and cut/copy/paste classes.
  • The customizable New model wizard makes it easy to create specific templates containing references to common library source files or .NET assemblies.

General features

  • New xml persistency format. Models are stored as a bundle of xml files (plus .mmproj / .mmcsproj) OR as an archive containing these xml files: The archive is a plain zip file named [project].mpb or [project].mmcs . Rename to .zip to open with standard winzip.
  • Theme support. Environment Options | General allows selecting a theme for toolbars, menus etc.
  • Customizable "New model" menu. Project templates can add predefined references and specify language mode, open an existing model as template or invoke an IMMProjectCreator extension (Check ToolsAPI).
  • Find and Open model. MM9 keeps track of models opened and saved and the source files they contain. The Find model wizard allows locating a model by looking for a module name. The same logic and wizard is used whn you invoke "Open model" from the IDE integration add-in.
  • Locate, Generate, Generate and Compile have a context sensitive hint showing the target source file. Commands are now disabled when unavailable.


  • Classes can be cut, copied and pasted through the clipboard - also between models. Available in classes view, Modules view (pasted classes are also added to the selected module) and Diagram editor (pasted classes are also visualized on the current diagram).
  • Note that Cut class followed by a paste actually creates new, different class rather than restoring the original one. The original class will have been removed from any module and from linked entities on diagrams. Cut is intended only for moving classes between models.
  • Delegates can be cut, copied and pasted through the clipboard - also between models. Available in delegates view and modules view.
  • Implement Interface when invoked on an interface this creates a new class named after the interface and then runs the interface wizard to implement the interface members. Available from classes view, modles view and diagram editor.

Classes view

  • Class tree allows multiple selection. The list display style has been removed.
  • Cut / Copy / Paste multiple classes is supported: check refactoring.
  • Implement interface: check refactoring
  • Classes view allows ordering by hierarchy, name or category + name. In order by category mode, classifiers are grouped per category.
  • The classes view can be filtered on category using the category filter. The category filter is only visible and effective in non-hierarchy mode.


  • Merge folders on import - importing diagrams that had been exported from an other model, merges the required part of the source model folder hierachy.
  • Edit Diagram: new dialog that allows entering diagram documentation, 1-liner and tagged values.
  • Improved annotation multiline in-place editor.
  • Implement interface: check refactoring

Code Generation

  • The code generator uses a different strategy to detect externally modified source files. This avoids unneccesary warnings for overwriting a file that had not been changed in the first place. First, file time stamps are compared, like in previous versions, if non-matching, a hash is used to detect changes with the last time the source was generated.
  • A similar strategy is used in the Difference view "time stamp" mode. Only modules that really are different from the last time the file was generated are displayed as different.
  • The "Check External Modified Modules" design critic uses the same strategy as the Difference view "time stamp" mode. As a result this critic only emits warnings if a file actually has been changed externally.


  • Pascal: local vars with anonymous record definitions - inplace record definitions - are no longer converted to MM vars, but instead left as plain local code. This ensures that code formatting for records is kept.


  • Pascal: Module Code View: Use unit dialog has been redesigned. It now displays files found in the active Delphi IDE library and Browsing Paths.
  • Cut/ Copy / Paste classes and Delegetas supported: check Refactorings.
  • Implement interface: check refactoring


  • New References View. Here you add references to models, source files and .NET assemblies. The types contained in the referenced files are available in the model without explicitly importing all contained types immediatly. Whenever required, a referenced entity is automatically imported and the imported model entity maintains a link with the referenced entity. After re-loading the model (or manual invoked refresh) the imported entity is auto-refreshed from the reference file.
  • The type selectors have been extended to included referenced types. For example: selecting an ancestor from a referenced file, auto-inserts the ancestor as imported entity in the model, including the ancestor's ancestor etc etc.
  • The method override dialog includes all methods from ancestors available in references. Overriding a method from a referenced ancestor auto-imports just this "root" method and maintains a link bteween the root method and the method in the reference file.
  • References to models are ID-based rather than name based and therefore support renaming: changing a class or method name in the referenced model is auto-propagated to the imported class / method in the using model.
  • References to assemblies and source files support updating signature changes but do not support renaming the entity. Changing a method parameter lists or return type is auto updated, changing a method name not.
  • Drag and drop support from references view. Note: although multiple selection allows selecting delegate and class types, only one type can be dragged at the same time. The first selected entity determines tha actually dragged type.
    • Drag class references on a (class) diagram: classes are imported and visualized. Note: only the class type is imported, not the containing members. As a result the imported classes appear empty in class diagrams.
    • Drag delegate references to delegate list: imports dropped delegates
    • Drag delegate references to members view or on a class in classes view or modules view: imports delegates and allows creating an eventhandler or event in the target class.
    • Drag class or delegate reference to code editor: entity name will be inserted as text.


  • Delegates view supports Cut/Copy/Paste delegates.
  • Modules view popup sub menu "Delegate" has Cut, Copy and Paste that operate on the selected delegate. Copy copies the selected delegate to the clipboard. Paste, reads (all) delegates from the clipboard as new delegate types and adds them to the selected module. Cut not only removes the delegate from the module, but also from the model. To move delegates between modules it is generally better to use drag drop to move delegates rather than Cut / Paste.

IDE Integration

  • "Open Model" uses the Find and Open Model wizard if no single matching model was found for the IDE top module.


  • Major revision and verion update to MMToolsAPI v10. All add-ins need to be recompiled with the latest API files. To be able to recompile existing experts:
    • Rename IMMUnit => IMMModule, similar methods related to Modules have been renamed from DoUnit to DoModule
    • Rename IMMUnitManager => IMMModuleManager, with properties Modules[ ] and ModuleCount
    • Rename IMMEventKind => IMMDelegate, similar methods related to Delegates have been renamed from DoEventKind to DoDelegete
    • Rename IMMEventLibrary => IMMDelegateManager, with properties Delegates[ ] and DelegateCount
    • Rename IMMClassBase => IMMClassifier
    • Rename IMMMember.ClassBase => IMMMember.Classifier
    • Remove all casts (X as IMMV10xyz) - the v10 interfaces have been merged with the existing ones.
    • Some Diagram types from the enum TMMDiagramType have been renamed. Check MMDiagramAPI.pas. Note that diFolder no longer exists. Folders are now accessed through the IMM
  • IMMProjectCreator added. Allows invoking an extension through the customizable "New model" menu. In the templates file add a template like this:
        // Existing templates .....
        <projectcreator name="Menu-caption" ID="creator-id"/>
    Where extension-id is the string returned by IMMProjectCreator.ExtensionID. The project creator instance should be registered using MMToolServices.AddExtension(...) - just like all Extensions

Solved problems

  • Relative module names containing ..\ or .\ would appear unexpanded. Solved
  • The project language mode (Delphi and C#) could change to the default language mode when copying members. Solved
  • Documentation view would not toggle full screen state using shortcut F12. Solved
  • Untyped var parameters could cause rare problems in method overload resolution. Solved.