History

This is the release history for versions below 13.0

General new features – version 12.3.0

  • Delphi 10.2 Tokyo support.

Delphi 10.2 Tokyo defines some commonly used MMX keyboard shortcuts. For example Ctrl+E: MMX::Edit Entity is now Delphi::Incremental Search.
You may need to redefine the shortcuts you use via MMX | Properties | Keyboard shortcuts. For example : MMX: Edit Entity -> Shift+Alt+E etc. Much depending on what else you have installed in your IDE.

General new features – version 12.2.0

  • Huge Explorer Window update performance improvement when 3rd party exception handlers are installed in Delphi IDE (for example: MadExcept, JVCL packages). Most noticable with “odd/complex” units like Windows.pas
  • Recognizing {$R *.fmx} resource directive, used when determinating method insertion position

General new features – version 12.1.0

  • Delphi 10.1 Berlin support

General new features – version 12.0.0

  • Delphi 10 Seattle support
  • Support for nested type declarations in record helpers and class helpers
  • Bug fixed where Use Unit / Open Unit would not recognize win32 path
  • Use Unit / Open Unit uses active project’s platform specific search path

General new features – version 11.2.0

  • Delphi XE8 / RAD Studio XE8 support
  • Support for const declarations in record helpers

General new features – version 11.1.0

  • Delphi XE7 / RAD Studio XE7 support
  • Reverse Lines – reverses the selected lines (first becomes last etc.)

General new features – version 11.0.0

  • Delphi XE6 / RAD Studio XE6 support

General new features – version 10.2.0

  • Delphi XE5 / RAD Studio XE5 support
  • deprecated comment support.

General new features – version 10.1.0

  • Delphi XE4 / RAD Studio XE4 support

Solved bugs – version 10.1.0

  • Find Next match form used non-scaled font. Solved
  • Delphi XE2 / XE3: Event Handler window and Explorer Members view Rearrange Implementation Mode would cause AV’s. Solved.
  • Bug fixed in extracting / converting non-ascii hard coded strings.
  • Pascal: Bug fixed in sorting method implementations on visibility.

General new features – version 10.0.0

  • Delphi XE3 / RAD Studio XE3 support
  • Member Search list allows filtering on member type. Todo items are also displayed.
  • Pascal, new option on tab MMX | Properties | Pascal | New Entities | Methods: Empty Parameter lists.
    This controls how empty method, procedure and delegate parameter lists are emitted: either suppressed – pascal style, or emitted as ( ) – c-style.
  • Locate Type: displays a filtered list of previously parsed class and interface types.
    This is used to open the containing source file and locate a class inside the file. Default key binding Alt+Shift+T.

Solved bugs – version 10.0.0

  • Text containing line breaks and stored in XML (settings, snippets) could contain stray 0x0B (#11) characters. Solved.
  • An access violation at shutdown could occur in older Delphi IDEs if MMX was not docked. Solved.
  • If the Delphi IDE editor buffer contains a stray #0 (which is bad in itself) would cause all kinds of exception in MMX.
    MMX now detects stray #0’s and abort all editing operations, displaying the line:column of the bad #0 character.
  • Pascal: relative paths starting with \ (relative to root in drive) would not be handled correct. Solved.

MMX 9.1.0 General new features

  • Delphi XE2 supported
  • Add Explaining Variable optionally replaces all occurrences of the selected expression with a reference to the local variable. A few notes:
    • With this option disabled (default) behavior is identical to previous behaviour.
    • Expression detection is white space independent.
    • If the expression is also found before the line at which the local variable would be initialized, you’ll get a warning with an option to cancel.
      “Cancel” positions the cursor at the first occurence.
    • If a plain assignment (Pascal := C# = ) to the expression is detected, it is skipped to avoid changing semantics. You’ll get a warning and only the normal cases are replaced.
  • Pascal: Classes and Interfaces contained by loaded packages are available in type selectors if option MMX Proeprties | General | “Check Packages” is enabled.
  • Pascal: Package Class Report and type extraction based on loaded packages improved by filtering out IDE packages and design packages.
  • Pascal: the Tools | Package Class Report is now also available for Delphi 2010 and up.
  • Pascal: Extract Method inserts class type variables with “value” (none) parameter modifier, records with “var” modifier.

MMX 9.1.0 Solved bugs

  • MMX| Properties | Keybindings: Suggest All and Suggest Undefined would not take the sorting order into account – resulting in odd default shortcuts. Solved.
  • 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.

MMX 9.0.5 General new features

  • Confirmed Delphi 2010 IDE command “Format Source”. MMX intercepts the IDE command “Format Source”
    and proceeds only after you confirm. This avoids unnoticed re-formatting the source by accidentally pressing the corresponding keyboard shortcut. (This is already an option in the Delphi XE formatter)
  • Pascal: Extract Method will add local vars that are referenced outside the extracted code to the extracted method’s parameter list. These parameters are displayed in the Extract Method dialog’s parameter wizard. If such a parameter is removed from the parameter list is it inserted as local var anyway. This solves problems (invisible to the compiler) when local vars in the original method are used to transfer to / from the extracted method. The parameters are either inserted as “var” (for known value types like Integer and Boolean and string) and as “const” for other (reference) types. The var/const modifier can be modified in the dialog.
  • Pascal: Generic type parameters lists and constraints are stripped from macros “classname” and “membername” as used in surround and documentation templates. For example, the macro value for “Handler<T: constructor>” is trimmed to “Handler
  • Explorer Classes view now supports displaying seemingly recursive relations in hierarchy mode:

    //C#

    // Pascal

  • Pascal: Convert Field to Property allows defining read access as [field, method] and write access as [none, field, method]. The existing “make default” check box allows changing the default setting.

C#5 support

  • MMX | Properties | C# | Parsing has a new C#5 language mode that enables the new async language feature.
  • The generation order of async keyword can be adjusted on tab MMX | Properties | C# | New Entities.
  • The async (context sensitive) modifier is supported by parser and editor. The await keyword can only appear in method implementations and is therefore uninterpreted.

MMX 9.0.5 Solved bugs

  • The “Use Unit” dialog would list the .dcu file rather than the .pas file depending on search path order.
    This made it impossible to use the “Use Unit” dialog to “Open” the source file in this case. Solved.
  • In very special cases – involving constructs like “TList = class (Classes.TList)” – an endless loop would occur when locating inherited classes. Solved.
  • In several dialogs the keyboard shortcuts have been revised and duplicates removed.
  • C#: the unsafe statement would result in parsing errors. Solved.
  • Pascal: The Module String Converter would show 0-based line numbers, rather than 1-based line numbers as the IDE does. Solved.
  • Pascal: The Module String Converter interaction with the IDE editor for multiple selection has been improved.

MMX 9.0.0 General new features

  • Delphi XE support.
  • Delphi Generics support: Refactoring Editor supports Generic types, all major operations work as you’d expect. Note: renaming a type identifier (the T in Sample<T>) is not Intelli-Replaced.
    Navigation History supports Generic types and methods. Documentation Pane supports editing generic types.
  • Delphi 2010 and XE: Enhance IDE Find. When enabled, it adds all identifiers from the current source file to the Find drop down list. Option set controlled on Properties | General | Delphi Editor.
  • Navigation History improvements: the history stores the relative position for methods. When navigating, this is restored rather than locating the method’s first line.
    Also, the history picks up the current method when navigating using the history. Very similar to “back to previous item” works. Both changes help making the history more effective.

with statement converter

The with converter wizard helps a great deal converting with statements to normal, qualified calls.

It offers to:

  • remove with statement,
  • remove the begin end block,
  • unindent the with statements,
  • add a local var. This functions very similar to explaining var – the with expression is replaced with a variable.
  • insert markers comments,

When applying the wizard, it converts the code according to the preview, optionally adds the local var declaration and
puts the qualifying text on the clipboard.

Invoking the wizard
In the IDE editor position the cursor on the line containing the with keyword and use the MMX menu or default keyboard shortcut Shift+Alt+W.
From the Explorer Select the with statement via Live Metric Hints | with statements and use the Members view pop up menu “Convert with statement”

Note: MMX does not compile code and can therefore not automatically fully replace a with statement with qualified member access.

Entity Insight new features

  • The Entity Insight Name attribute shows the class name for members as feedback. The edit allows resizing if necessary.
  • The Entity Insight Name attribute has a drop drown list that allows navigating within the selected container (either class or module). For a class all methods are displayed in code order. For all other cases the procedures and types contained by the module are displayed in code order.

Source Indexer new features

  • Find selected Component, uses Source Indexer to locate (local) references to the component selected in the Object Inspector. Default keyboard binding Shift+Alt+F
  • Matches are highlighted in the index viewer, making them easier to spot. Colors are adjustable via integer color values in HKEY_CURRENT_USER\Software\ModelMaker\MideX\8.0\SourceIndexer\BDS 7
  • Selecting an item through the Search Edit history drop down searches for the selected word.

C# v4 support

The C# v4 Language mode can be selected on Properties | C# | Parsing tab.
New syntax features include: optional parameter support,
dynamic type support, named argument support, indexed property support, generics co-variance and contra-variance support.

Minor new features

  • Edit Class dialog uses an auto complete style drop down list to select interface support.
  • Move Entity Up/Down maintains relative cursor position within the moved entity.
  • Pressing Escape in the Explorer Class Tree or Member List sets focus to the IDE Code Editor.
  • Custom Find Identifier (default binding Shift+Alt+Home) loads a (filtered) list of all available identifiers in the current source file, making it easier to enter identifiers to search for.
  • Convert Field to Property allows specifying the field and property visibilities. The default field visibility is “state field visibility” as defined on MMX | Properties | [Language] | New Entities. The default property visibility is public.
  • Macro TrimmedClassName is available in code snippets. It contains the class name stripped from class prefix and generic parameters. For example, for TList<int>, TrimmedClassName contains “List”

Solved bugs

  • The Show related classes pop up mouse over hint would not display a module name for ancestors and supported interfaces in the same module. Solved.
  • The Use/Open unit dialog would flicker when typing in the units list box. Solved.
  • Pascal: The parser did not recognize multiple compiler hint directives in methods. Solved.
  • Delphi 2005-2010: Several problems related to multi-byte characters in the IDE editor and the editor cursor position and selection. Solved.
  • Several sorting and rearranging problems solved related to method resolution clauses in combination with fields.
  • D2005-2010: Locate in Explorer would not set focus to either explorer classes or members view. Solved.
  • Several minor file text encoding related problems solved.
  • Several minor visual appearance related problems solved.
  • Delphi: class destructors would not be recognized / editable. Supported now.
  • Delphi: generics constructor constraint would not be recognized / editable. Supported now.
  • C#: Adding a new method “after current method” with Add Method or Extract Method would insert the new method inside the current method. Solved.
  • Pascal: the parser would not recognize anonymous records in an “array of record end;” construct. Solved.

ModelMaker Code Explorer 9.01 Service update

Solved bugs

  • The “Use Unit” dialog would list the .dcu file rather than the .pas file depending on search path order.
    This made it impossible to use the “Use Unit” dialog to “Open” the source file in this case. Solved.
  • In very special cases – involving constructs like “TList = class (Classes.TList)” – an endless loop would occur when locating inherited classes. Solved.
  • In several dialogs the keyboard shortcuts have been revised and duplicates removed.

MMX 8 released

On September 7th 2009 ModelMaker Tools released ModelMaker Code Explorer 8.
Check the upgrade policy to upgrade existing licenses.

Main new Features

  • IDE and syntax support.
  • Show Related Classes.
  • Interface Wizard more easily invoked.
  • Format Uses Clause.
  • Activate Page in earlier IDEs.
  • Excluded Paths in Source Indexer.
  • Align Code.

Delphi 2010 IDE and syntax support

  • New Delphi 2010 Win32 language mode on Properties | Pascal| Parsing 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.

Show Related Classes

  • Show related classes: “Alt+Click” in Explorer Classes view shows Related Classes in a popup window. Also available from the classes view tool bar and Navigate pop-up sub menu and the IDE Editor Navigate commands.
    Used to navigate (across modules) between

    • a class and its descendants,
    • a class and its ancestor,
    • a class and other classes derived from the same ancestor (siblings),
    • a class and the interfaces it supports (implements)
    • an interface and classes implementing (realizing) the interface.

     

General New Features

    • The Interface Wizard is invoked when dropping an interface reference node on a class node in the Explorer classes view.
      Referenced interfaces may defined in other source files as the file was previously parsed by MMX.
    • Pascal: support for type alias IUknown = IInterface in navigation features and the interface wizard.
    • Pascal: Auto add to uses first checks all already “used” units before using a new unit. This makes the feature more precise.
    • Format uses clause: reformats a uses clause either as “combine and wrap units” or “each unit on new line” style.
      If there’s a comment or compiler directive in the uses clause, the clause is skipped and a message displayed.
      Available in the main IDE MMX |Sorting sub menu and in the Explorer Members view Sorting sub menu. Editor keybinding defaults to Ctrl+Alt+U.
    • Delphi 6, 7 and 2005: Activate Page lets you activate an editor page using a filtered drop down list. A button is inserted in the IDE editor tab control –
      similar to more recent Delphi IDEs.In Delphi 6 and 7 a Close Page button is also added.
    • Source Indexer “Excluded Paths” accepts sub directories such as “\__history\” .
      Excluded sub directories are case insensitive. For example:
      “\cv” skips “c:\tests\CVS” and “c:\tests\cvs-tests”
      “\cvs\” skips “c:\tests\CVS\” but not “c:\tests\cvs-tests\”
      “\_history\” skips “c:\source\main\_history\” and “c:\source\options\_history\”
    • Align Code, align selected lines on tokens like
      = : := ; “read” “write”

      . Commonly used to align var, constant and property declarations.

    • Convert to Const now accepts all letters (and digits) when building the constant identifier from the extracted text.
    • MMX dialogs use ClearType font Tahoma.
    • The main IDE Tools sub menu has been split into “Tools” and “Text Tools” to avoid the sub menu getting too large.

Solved bugs

  • D2009: Sorting | Rearrange Members would cause an AV. Fixed.
  • D2009: anonymous methods (closures) without parameters and with an empty param list ( ) would cause parse errors. Solved.
  • D2009: selected text would in some cases (for example in Convert to Const) not use the correct editor encoding, possibly resulting in odd extracted texts. Solved.
  • D2009 (possibly other IDEs too): the explorer classes tree would in some cases be invisible after returning from debug layout. Solved.
  • Pascal: property accessors using qualified names would in some cases cause the importer to fail. Solved.
  • Pascal: combining deprecated calling conventions like far and export with others like stdcall would clear the non-deprecated calling convention. Solved.
  • Pascal: Extract method invoked on nested procedures would not look into containing methods to find local vars and parameters. Solved.

MMX 7.1.0, and 7.0.0 General new features

  • Engine, importers, 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 Properties | [Language] | Editing. New defaults are applied, previous type presets are ignored.
  • 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.
  • Extract method makes the extracted method a static / class method if the original method was a static / class method
  • Surround template – default style – optionally selects the entire method body if no selection is made. Useful to insert templates that
    insert code before and after the current method code.
  • “Select method body”: selects the implementation between begin/end (pascal) or {} (C#). No default key binding assigned.
  • Pasting members internally uses IntelliReplaces to rename original class name and conflicting members in pasted source.
  • In documentation templates the macros <!date!> and <!time!> are available. These expand to the short date and time format as defined in the system locale settings.

Delphi 2009 support

  • Delphi 2009 IDE integration
  • 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.
    • Support for the deprecated hint directive with string comment. Note: editing the hint using MMX 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 Properties | Pascal |Parsing is set to D2009 win32.

Dockable Live Documentation view

  • The Dockable Live Documentation view is similar to the documentation pane integrated in the Explorer window, but it is a
    separate dockable window, allowing to make it wider than the explorer.
  • Use the MMX main menu or toolbar to show the dockable Live Doc view.
  • Both doc views (integrated and dockable) can be used at the same time.
    However, do not modify text through both views at the same time. The views are not linked in edit-mode:
    when entering text in one view, the other view will not be updated until the documentation is committed and
    source is reparsed.
  • Both views share the same toolbar customization. Customizing one will affect the other (after restart).

Normalize and Sort local vars (Pascal)

  • Add Local Var and Add Explaining Var insert new variables sorted according to the variable sorting scheme (see below: sorted on name or type name).
    Setting the sorting scheme to unsorted, appends new variables like in previous versions.
  • Normalize Local vars” – optionally normalizes (splits or combines) and / or sorts local variables for selected method(s) or
    for the method at editor cursor position. Options for this feature are found on Properties | Pascal | Sorting.
  • Normalize operates on methods, procedures and nested procedures. Normalizing a method or procedure will not automatically
    normalize nested procedures – these must be included in the selection or normalized separately.
  • Variable normalization is set to “unchanged”, “split combined variables” or “combine variables with the same type name”
  • Split combined vars breaks up combined var declarations like so:

    // becomes:

     

  • Combine vars with the same type name normalization mode does the reverse and combines vars with the type name into a single declaration.

    // becomes:

  • Sorting is optionally disabled, on var name or on var type name + var name
  • Optionally vars are aligned in columns like so:

  • Command “Normalize Local vars in Module, normalizes local vars in all (nested) procedures and methods in the entire unit.
  • When normalizing vars, comments placed on the lines before the var are maintained and moved with the var. Other comments are removed.
  • Compiler directives inside a var section are removed when normalizing. To avoid this, you’ll get a warning that allows skipping this section – showing a preview of the
    “normalized” var section.
  • Example:

    becomes in split combined vars mode:

    and becomes in combine vars mode:

Other New Features

    • Search bars on IDE editor toolbar and in Explorer window will now show all classes and their members if the search text is empty.
      This allows using it to look up a member if you do not know its name. Activate (focus) the drop down window by pressing
      the Up or Down in the search edit.
    • Search bar Options include: “sub string search” and “case sensitive search”. Check popup menu and Environment Options | General | Searching.
    • Options Show procedure nesting level – if enabled, nested procedures are displayed indented according to their nesting level.
      If disabled, nested procedures are indented by one irrespective of their nesting level. Check tab Properties | General | Display,
      Default = enabled.
    • Pascal: Property dialog Presets support applying read/write method binding and visibility. This allows you to create a preset for
      a property with virtual protected methods. When applied the preset will change access to method(s), change method binding and method visibility – all in a single click.
    • Pascal: uses clauses are added with uses keyword on a separate line, like so:
    • Uncommenting using Toggle comment, removes the auto-inserted comment test if this is unchanged.
    • Pascal: Several (most) operations on methods automatically insert missing method declarations.
      (a la Class Completion). For example: Edit Method, Change visibility, Change method signature (binding etc) through
      Entity Insight.
    • Pascal: Making methods abstract, offers to remove non-empty implementations. If the implementation is left, it is commented.
    • Pascal: Adding an Implicit or Explicit conversion operator mark this as overload and additionally mark any existing conversion operators overload.
    • Pascal: Adding an event with event dispatch method offers to mark existing methods with the same name as the dispatch method, as overload.
    • Add (explaining) var: name is now a combo box with listing previously used var names. Particularly useful for Add Explaining Variable.
    • Several plain text commands available for non-source files such as .dfm’s: Find next/previous identifier, duplicate selection, move selection up/down,
      sort text and Undo last MMX operation.
    • 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 ‘);


      // after applying the template:
  • 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.

C# version 3 support

  • Auto implemented properties supported.
  • The partial method modifier is supported.
  • The extension method this parameter modifier is supported.

Source Indexer

  • Excluded paths may be defined in the Indexer Options dialog. This allows skipping paths including their sub directories.
  • Close all tabs added.
  • Pressing Escape sets focus to the IDE editor.
  • Ctrl+Q clears all tabs
  • If errors occur when building the index, an errors icon will be available in status bar and
    toolbar. Its hint shows the first 10 errors, clicking it, allows viewing (printing etc) all errors.

MMX 7.1.0 Solved bugs

  • CodeGear IDEs: interaction with the IDE editor for multi-byte characters had several problems. Fixed for Delphi 2005 – 2007.
    Partially fixed for Delphi 2009.
  • Delphi 2009: in some cases an AV would occur at startup. Solved.
  • Delphi 2009: in some cases Live Spell checking would not work. Solved.
  • Delphi 2009: word wrap in Documentation editors in dialogs and Live Doc views would not work. Solved.

MMX 7.0.0 Solved bugs

  • In some cases Apply Class Template would insert properties in the wrong place (outside the class). Solved.
  • CodeGear IDEs: History navigation would only work if the explorer was visible. Solved.
  • Compound names space names as “namespace Root.Test.This { } ” would make it impossible
    to save documentation in the documentation window. Also history based navigation would fail. Solved.
  • Pascal: operations like add local var could cause an access violation when invoked on deep nested (module) procedures. Solved
  • CodeGear IDEs: auto Hide IDE editor toolbars could cause bad aligned IDE views such as CPU view and Welcome Page. Solved
  • Pascal: Convert method to property would wrongly offer to invoke IntelliReplace for the renamed method. Solved.
  • Pascal: Rename in Scope for nested procedures would fail without a message if the scope was different than the original procedure.
    Solved: command now works as expected when selecting containing procedures / methods.
  • Pascal: In some cases “Default sort all classes and module” would show an error “nothing to rearrange”, even though members where rearranged OK. Solved.
  • Pascal: The Delphi parser could enter an endless loop under some rare conditions. Solved.
  • Pascal: The Delphi parser would not accept reserved words in qualified names in type aliases such as A = System.Object; Solved.
  • CodeGear IDEs: Select Token + Copy/Cut with default keybindings Ctrl+C / Ctrl+X would not work in non-source files. Fixed.
  • Add local var, field, method, property etc. 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 – introduced in MMX6. Solved.
  • Settings defined on Properties | Excluded modules were not saved between sessions. Solved.
  • Properties|[Language]|Editing “Use IDE settings” would not always copy settings from IDE. Solved.
  • In some cases Entity Insight combos would be bad aligned. Solved.
  • Several minor fixes, such as text and alignment changes.