The Mindjet Labs

Hands-on MindManager
Welcome to The Mindjet Labs Sign in | Join | Help
in Search

The Organizational Irritant

MindManager 7 - Getting Over Ribbon Shock

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.

 

 

Published Tuesday, July 03, 2007 11:55 AM by dethomas
Filed under: , ,

Comments

No Comments
Anonymous comments are disabled

About dethomas

So who is this dethomas guy anyway? Here's a capsule bullet point summary:
  • Midwestern white boy, ex-busboy, stock-clerk, grinder, welder and English major, now laboring lo these many years in the fields of awkward stone that characterize software development.
  • 20+ years of software development experience - CPM/Apple/Unix/DOS during the Reagan years, embedded systems before the term was common, Windows development since the first Clinton administration.
  • Mechanical engineering undergrad degree, showing that early success in thermodynamics is not necessarily a good thing. But the Apollo workstations running UNIX were cool.
  • Engineering master's degree with a control systems emphasis, demonstrating that publishing in IEEE Transactions is cool, but not necessarily a good thing.
  • Employed by an industrial electronics company as a principal engineer. Distinguished by several innovation awards, several software patents, and for once having used the word "Byzantine" in a requirements specification.
  • Learned FORTRAN on punch cards, learned Pascal, BASIC and APL to do numerical analysis in several fields of engineering, learned assembly, C, C++ and Java to write software for several embedded systems, custom applications and shrink-wrapped software products.
  • Has considerable exposure to a variety of technologies, including networking, databases, graphics libraries, linear programming, compilers, non-linear control systems, real-time operating systems, fuzzy logic, neural networks, UML, .Net, XML, OPC, WSI, WSDL and WWF. (On that last one, WWF, dethomas is convinced he did time in high school with a guy who went on to success in the Mexican pro wrestling circuit under the name "el Queso Grande.")
  • Wide exposure to Microsoft Windows products and operating system editions as both user and developer, relative indifference to web technology and the dot com boom until the dust settled.
  • Has a cable modem, but no cable TV service. Which is a philosophical statement of sorts. Television is bad for you, the Internet is not. Or at least not yet.