New features in ModelMaker 8.20

General features

  • Super Tool Tips added for non-trivial options.

Refactoring

  • Parameter wizards allow multiple selection delete. Clipboard operations Cut, Copy and Paste added. Copy includes a plain text clipboard format that can be pasted in source code. The parameter name has a full parameter history (drops down on F4) that allows selecting a parameter name and type from the history at once.
  • IntelliReplace optionally searches inside comments, strings and directives in code. Defaults are set on the Refactoring | Options IntelliReplace tab. The Rename Local dialog allows temporarily overriding these defaults.
  • Copy/Pasting a property updates access code for renamed state fields.

Diagrams

  • The diagram engine supports UML 2.0 in addition to UML 1.4. Project Options | Diagram allows selecting UML style: "1.4 strict", "2.0 strict" or "1.4 enriched with 2.0".
  • New diagram types supported: these diagrams are now supported:
    • structure diagrams: class, package , composite , component, deployment diagram
    • behaviour diagrams: use case, activity, sequence, interaction overview, communication (collaboration), state diagram
    • additional diagrams: robustness, concurrency and mindmap diagrams
  • Generic Diagram features
    • New Tool box to select diagram editor tools. Tools are grouped in categories. Right click on the tool box for options such as "Show Captions", "Hide Tool" etc.
    • Diagrams optionally show bounding frame (UML 2) with diagram type and diagram name. The default for new diagrams can be set on Project Options | Diagrams
    • Container symbols such as frame, use case container etc. can now be created with a specific size (drag while creating the symbol).
    • Some classifier symbols show stereotype icons (top right corner). Applicable for (required) interfaces, components, uses cases and actors.
    • Custom Classifiers support Class, Role and Instance styles, plus role name, and instance name.
    • Relation Creation Mode: (Environment options | Diagrams) controls how new relations are created: either auto attached to symbol center (default and previous behaviour) or at the mouse position. Pressing the Ctrl key while creating the relation toggles the default mode. Some symbols (frames) and relations (sequence diagram messages) implicitly use "create at mous position" regardless of this option or Ctrl key state.
    • Label tool added - preset for existing annotation without border.
    • Annotations and Labels can have a category (stereotype).
    • External File Hyperlinks support command line parameters.
  • New Structure diagram features
    • Associations (and links) allow the UML 2.0 explicit "not - navigable" end point style - displayed as an X (cross).
    • Class Associations can be marked as "Derived".
    • Interfaces can be marked as "required interface" - this shows a collapsed interface as a "socket" (half circle) rather a circle. The connector orientation is either automatically derived from connected relations or preset.
    • Explicit tool category for Object Diagrams containing new tools "Object" (linked to class), Custom Object (unlinked) and Instance Link
    • Explicit tool category for Composite Diagrams containing new tools: For UML 1.4 "Composite Classifier". For UML 2: "Part" "Collaboration Use", "Required Interface" "Assembly Connector" (ball socket style connector) and "Connector"
    • Explicit tool category for Component Diagrams containing new tool "Component Classifier"
    • Explicit tool category for Deployment Diagrams containing new tool "Device", "Artifact", "Deployment Spec" and "Deploy" and "Manifest" relations
    • Class Associations in the model can be viewed using the Associations view, available from main menu "View | Class Associations".
  • New Use Case diagram features
    • Actor Classifier and Use Case Classifer symbols. Use Case Classifier for example allows listing extension points. Both classifiers show UML stereotype icons.
    • Custom classifiers can communicate with use cases - this allows creating non-human (stereotyped) actors such as timers.
  • New Sequence diagram features
    • Read more on the new Sequence Diagram features...
    • Time Shift Tool: Check the flash movie.
    • (Optional) Auto Time Shift when moving entities
    • Nested activations, Auto or manual inserted.
    • Optional auto inserted call returns
    • Adjustable Interaction Top-Offset
    • UML 2.0 in-line interactions inside frames
    • Activity Diagram can be combined with in-line Sequence diagrams on "Interaction Diagrams"
    • Automatic UML 2.0 Interaction Gates replacing UML 1.4 Actors and Boundaries
    • Interaction fragment frames - with presets for "alternative", "optional", "loop" and "ref" (Interaction Use). Operand Separator lines can be inserted into fragment frames.
    • State / Continuation symbol.
    • Object Creation type message.
    • Interruption type message. This not UML, but is in style with the same type of message in Activity diagrams. Can for example be used to model exceptions ot events firing to event handlers.
    • Message alignment adjustable. This allows better growing / shrinking of recurrent messages.
  • New Activity diagram features
    • Activity Diagram can be combined with in-line Sequence diagrams on "Interaction Diagrams"
    • Activity Frame (UML 2) for nested activities.
    • New pseudo state node "Flow Final", allows label such as "Abort"
    • Timed Send(timer)
    • Activity Parameter Object flow node acting as input / output object for activity frame
    • Action Pin (input / output) Object flow node acting as input for action.
    • Activity Parameter and Action Pin can be marked as "Exception" showing an exception triangle
    • Interruptable Region
    • Extensions on flow edges: "Interruption" for use with Exception Handler and Interruptable region and Streaming Object flow.
  • New Communication (Collaboration) diagram features
    • Note: UML 2.0 renamed Collaboration to Communication diagram.
    • Custom classifiers added to Collaboration diagram. These can communicate with other classifiers and actors. For example used to model non-human (stereotyped) actors such as timers.
    • Explicit Concurrency tool category with new toolTimer diagram.
  • New State Machine diagram features
    • Adding a State Region to a Simple (non-composite) state automatically turns the state into a concurrent state. Applies to creating with "Create State Region" tool and Paste region from clipboard.
    • New pseudo states available:Entry Point, Exit point, "Termination", "Deep History", "Shallow History".
    • New UML 2.0 Actions, Send Signal, Receive Signal and Timer
  • Visualization of implicit class relations
    • Field and Property relations (automatically) visualize implicit class relations. Examples of implicit relations are
      // Pascal:
      // FButtons contains an implicit reference to TButton
      FButtons: array[TButtonKind] of TButton;

      // C#:
      // Contacts is an implicit reference to Contact
      Contacts[] contacts;
      // map contains implicit references to Contact and Order
      Map<Contact, Order> map;
      Implicit class reference relations are included when visualizing "uses" class relations or related classes. Manipulating implicit class references with the diagram editor or through the code model:
      • Moving the source end point to a different class moves the member to the new class as expected.
      • Moving the target end point to a different class changes the member type name to the new explicit class. For example
      • Moving the relation Contacts[] to a class Order will change the type to "Order", not "Order[]".
      • Renaming implicit classes is propagated in member type names. For example:
        renaming class "Contact" to "MyContact", updates "Contact[] contacts;" to "MyContact[] contacts;"
        renaming "TButton" to "TMyButton" updates "FButtons: array of TButton;" to "FButtons: array of TMyButton;".
    • When visualizing implicit relations, the visualizer automatically assigns source and target multiplicity as single (1) and many (*). The multiplicity strings for single and many can be adjusted on the Environment Options | Diagram Editor tab.

Code Generation

  • C# Edition: Project Options | Code Generation allows disabling the (previously implicit) grouping of property state fields in code generation. Similar option in Members view Properties (Members view sorting order).
  • The default module name for a new module added through a popup menu on a Class "Copy to Module | New Module" is the class name.

Import

  • Importer supports source files containing the UTF-8 byte-order mark EF BB BF.
  • C# importer now supports unsafe pointer types as in:
    void* Pointer;
    int** PointerToPointerToInt;
    char*[] PointerToCharArray();
  • C# importer now supports nullable types as in:
    int? x;
    int? z = x ?? y;
    char?[] letters;
  • C# class syntax allows specifying interface support without specifying an ancestor class. For example:
    interface ITest { }

    class Test: ITest { }
    The ModelMaker C# importer does not require compiling code and must therefore guess wether ITest is the ancestor or a supported interface. Part of this guess is based on the Microsoft C# style guide, that says an interface name should start with "I" followed with an uppercase letter: interface ITest. Classes on the other hand should never start with an "I" followed by a captial letter (class Interaction). In additition to the "I" prefix, the importer checks the interface prefix as defined in "Coding Style" This prefix based "fix ancestor, interface support" behaviour can be disabled on Project Options | Code Import.

Documentation

  • Documentation tools and surround templates available in Documentation tabs in dialogs and Documentation view.
  • The documentation surround templates can be used to insert tags like <summary></summary> and <code></code> The templates (tags or any other text templates) are fully customizable: Use "Surround with Template | Edit Templates" to show the templates editor.
  • The default templates reflect XML Doc style tags.
  • Additionally specialized commands using these templates are available on tool bars and popup.
    • Default Template: Looks for a template names "system.Default_Template" and expands that with a single button click. Customize the default template code to your needs. The initial Default Template looks like this:
      <summary> <!membername!>
      </summary>
      <returns> <!typename!>
      </returns>
      <!_parameter_list_!>
      The macro _parameter_list_ expands the Parameter Tool described next.
    • Paramater List: Uses the "system.Parameter_List" and "system.Parameter_Format" templates to expand the current parameter list. Effective for methods and array / indexer properties only - in all other cases it will expand to an empty string. Macro _parameter_list_ may be used to insert a parameter list in templates. Check for example the Default Template above.
      The Parameter_List template can be customized to insert text before and after the list of parameters. The Parameter_Format template prefix code (only) is used to expand each parameter in the parameter list. The prefix code can be customized to modify the formatting of each parameter. The standard template looks like this:
      <param> name="<!param_name!>> <!param_type!></param>
      This result in an XML Doc style parameter list.
  • These special commands use templates stored in the "system" template folder. Do not rename or move the folder or any of the templates in the folder.

IDE Integration

  • The ModelMaker Delphi IDE integration add-in no longer silently reloads a regenerated file that is also modified in the IDE. Instead of reloading this file, it activates the IDE which then handles this as usualy by asking if you want to reload the modified file or not.
  • To help synchronizing between ModelMaker and the IDE, activating MM or loading a new model (optionally) checks for unsaved files in the IDE. If any unsaved files are also in the model you'll get a - don't ask me again style - warning.
    Visual Studio: This feature requires Visual Studio IDE Integration pack version version 1.20 or higher. Check the download page.

MM ToolsAPI

  • IMMDiagamType extended with new UML 2 diagrams. The existing IMMDiagram.DiagramType now returns a TV9DiagramType. This ensures without recompiling add-ins are binary compatible with MM8.20. When recompiling an add-in with the updated MMDiagramAPI you have to cast IMMDiagram as IMMV10Diagram to access property DiagramType: TMMDiagramType.
  • IMMV10DiagramManager added. Supports method Clone that clones a diagram. Supports methods to add the new UML 2 diagrams.
  • IMMCompartmentedSymbol and IMMSymbolCompartment added. These interfaces gives access to sysmbol compartments. Use QueryInterface on an IMMSymbol to find if a symbol supports IMMCompartmentedSymbol. Auto maintained (member) compartments are read-only.

Solved problems

  • Associations between classes with qualified names would disappear from diagrams after reloading the model. Solved.
  • Diagram elements linked to code model members could disappear in certain cases after reloading the model. Solved.
  • A model containing diagram elements using a named style would remain "modified" after saving the model. Solved.
  • Memory leaks (some building up style) removed.
  • Large fonts / high resolution form scaling problems solved.
  • C#: Convert to Constant would insert the default name instead of the user modified name. Solved.
  • C#: Convert Field to Property would apply a default name to the property based on the field name instead of normalizing a camelcase field name. Solved.
  • Pascal: class / record helper method implementations would be removed from module code. Regenerating the module would remove the helper method implementations. Solved