Howdy.
I'd apologize for the lengthy silence on this blog, except I don't have a good reason beyond the stress of modern life. That and the release of MindManager 7.
I was getting ready to post an Add-in sample written in C# for MindManager 6 when the first MM7 ripples started to lap at my toes. I decided to hold off posting something new since the environment was changing. While I was holding off, MM7 launched and other threads of my life snarled up.
But things settled down, I untangled the strands of family/work/health/purpose/goals and other basic life stuff, and finally got around to installing MM7. I wanted to see how much work it would be to port the various add- ins and macros I use to the MM7 platform. But I need to keep MM6 around until my employer upgrades.
So I fired up MM7, and immediately succumbed to serious ribbon shock. The UI looks way different. Since I haven't been using Office 2007, the new Fluent UI meant climbing a new learning curve. On an application I thought I knew, thank you very much. And this is just a preview for when my employer gets around to upgrading to Office 2007, sometime after the second Cheney presidency.
But after some curmudgeonly snarling, I found this nice set of MM7 setup hints. Bringing back the task pane and workbook tabs made it easier to orient myself in the application. Hooray for Google, and hooray for the Activity Owner Wiki.
So what else is there to like in MM7? The application seems faster overall, especially on startup. Shortcut keys still work. We can save Power Filters settings as "Queries" in a map, but not outside a map for easy use in many maps. Old maps load without error or conversion. Copy my macros into the "C:\Documents and Settings\dethomas\Local Settings\Application Data\Mindjet\MindManager\7\macros" directory, and they work. Update the File Explorer with my modified version, and it works. And the UI customizations made by my MM6 add-ins - menus, menu items, toolbars and toolbar buttons - are assigned to an Add-in ribbon tab with Menu Commands and Toolbar Command groups without source code change. All I had to do was reference the MindManager 7 Type Library, change a "6" to a "7" in the registry key ( HKEY_LOCAL_MACHINE\SOFTWARE\Mindjet\MindManager\7\AddIns) MM uses to find the Add-in components, and rebuild/register the Add-ins to get them running.
I do have some annoying MM7-and-Windows Installer interactions. Upon loading some maps, but not all, the Windows Installer asks for my Office 2003 CD. I haven't figured that one out, but uninstalling MM6 will probably make it stop.
The Fluent UI has a footprint in the MindManager object model, so it appears an Add-in can add a new Ribbon Tab with one or more custom Ribbon Tab Groups, then add commands to that group. Or the Add-in could retrieve an existing Ribbon Tab and add a Group to it, or even add new commands to an existing Ribbon Tab group. In pseudo code, making a new tab goes like this:
- Get the Ribbon object from the Application object
- Get the RibbonTabs collection from the Ribbon
- Call RibbonTabs.Add() to create a new ribbonTab object, passing a caption and a URI as an identifier. Use a URI like "URI://SomeAddInName/2007/Tabs" or something.
- Get the ribbonTab.Groups collection from the new ribbonTab instance
- Call RibbonGroups.Add() to create a new RibbonGroup, passing a caption and a URI like "URI://SomeAddInName/2007/Tabs/SomeGroupName"
- Having the new RibbonGroup, get its Controls collection, and add your commands to that collection. This appears to be the same Controls collection type as in MM6, so the DevZone MM6 UI customization material regarding Commands and Controls applies. The basic idea is to create a Command object, which carries Click, UpdateState and UpdateCommand handlers to be called by the host, then add that Command instance to a Controls collection by way of Controls.AddButton().
But I haven't figured out how to get Fluent KeyTips to work on individual commands. Using "Tab&Name" as a Tab caption makes ALT+N the KeyTip for a ribbonTab instance, but using the '&' character in a command caption doesn't seem to make the following character a KeyTip for the command. And KeyTips don't appear in the VisualStudio Object Browser when you point it at the MM7 metadata.
All this is nice, but if an Add-in was adding commands to the MM6 menus using the mmDynamicMenu enumeration, things have changed. There are a bunch more enumeration values and the MM6 values are deprecated. You can get a grip on this by looking at the Tools- >Macro- >OrganizeMacros dialog, (Alt+F8) clicking Modify on a macro, and looking at the Menu list box. The familiar menus from MM6 are there, but they carry a "No longer used" note. Passing one of these deprecated values when creating a menu control results in an entry in the MenuCommands group on the Add-in tab I mentioned above.
There's a number of other things to explore in the MM7 object model. What does the ICustomMdiWindow interface do? How about IBrowserDialog? Or IDocumentBar?
Recalling the amount of whining I did about the MM6 object model docs, and how little good it did, I'm assuming there won't be an DevZone MM7 Object Model update for a while. But maybe I'll be pleasantly surprised.
Right now, the plan is to get my sample Add-in stable on MM7, post the source and go from there.
So I'll be spelunking both the new Ribbon UI and the MM7 object model at the same time. Bummer, but I could be flying Jet Blue.