Subscribe Bookmark
arati_mejdal

Staff

Joined:

May 21, 2014

Menu Customization in JMP 7 - Part 1

JMP has supported customizing your main menu and toolbars for quite some time. However, the way in which menu customization was implemented had various shortcomings, which our users pointed out to us. In response to their feedback, we have made dramatic changes to menu/toolbar customization in version 7.


In the past, if you installed a new version of JMP and wanted to recover your previous customizations, you had two choices, neither of which was very attractive. (1) You could point JMP to your old JMPCMD file and tell JMP to apply that set of definitions. Sure enough, that would reset JMP’s entire main menu to reflect your old customizations. But in the process, any of JMP’s new menus and/or commands would disappear (since they weren’t contained in your old JMPCMD file). (2) You could get into the menu editor and painstakingly copy over, one by one, the custom commands contained in your old JMPCMD file into the current main menu.


JMP 7 eliminates this dilemma by providing a new menu merge feature. JMP 7 allows you to merge the customizations you made to your menus and toolbars in JMP 6. In fact, when you first launch JMP 7, it will automatically prompt you to merge your customizations from JMP 6 (if there were any).



(Click to view full size image)



Note that the merge process won’t wipe out JMP 7’s new menus – it will simply insert into JMP 7’s main menu and toolbars whatever commands, menus and/or toolbars were unique to your customization of JMP 6. This is a huge improvement over previous versions of JMP, which did not support any kind of merge feature.


In previous versions of JMP, menu customization was an “all or nothing” affair – if you wanted to add a single new command, let’s say, to the File menu, you had to add the command in the menu editor and then save it to a JMPCMD file. That file contained the definition of your entire main menu; hence, if you gave that JMPCMD file to someone else and they applied it to their JMP session, it would replace their entire main menu.


However, with JMP 7 you can create a definition of a single menu (or toolbar) as well as a single command, which can then be exported to an archive file with the new “JMPMENU” file extension. If someone else imports your JMPMENU file, their main menu will not be replaced – only your new command will be added to their menus. When you export your menu definition, you can even specify whether or not JMP should preserve its context so that whenever someone else imports your JMPMENU file, your command will be inserted into their main menu in the same location as in your main menu.


Perhaps the biggest drawback to the old menu customization scheme was the fact that your menu definitions and the JSL scripts upon which they depended (if any) were disconnected. This made it extremely difficult to share your menu customizations with others. For example, suppose you were using JMP 6 and you added a new menu to the main menu called “NTheory” which contained two commands: “Euler Phi” and “Fibonacci,” each of which was defined to run a specific JSL script whenever the command was selected. Thus, the path to the script to be executed was hard-coded into the definition of the command itself in each case. If you wanted to share your new menu with a friend, it wasn’t sufficient to merely give them your JMPCMD file – you also had to remember to supply them with the JSL files upon which the commands depended. And to make matters worse, even if you gave your friend both the JMPCMD file and the script files required, it was still highly unlikely that your menu would function properly for your friend. For the paths to your friend’s copies of the JSL files would almost certainly not match the paths as defined in the JMPCMD file. Hence, your friend would have to get into JMP’s menu editor and fix the paths to the JSL files for each of your commands.



(Click to view full size image)

Example of customized popup menu


JMP 7 eliminates all these problems with the new JMPMENU file. When you Export your menu (or toolbar or command), you are prompted whether you want JMP to archive the JSL files that your menu commands depend upon. If you answer affirmatively, then the JSL scripts associated with your commands are archived into the JMPMENU file along with the definition of your menu. And when your friend Imports your JMPMENU file, JMP will extract the JSL scripts contained in the archive into a special “Dependencies” directory, and JMP will modify the definitions of the commands themselves to point to the JSL files that were extracted. Similarly, if you associated a bitmap with one of your menu commands, then it, too, will be archived along with your JSL file and extracted when the JMPMENU file is imported. Thus everything your friend needs is contained in just one file and they don’t need to do anything else to get the command to work after importing your JMPMENU file.


The JMPMENU file is really a Zip file -- hence, if you're curious about what's inside your menu file, you can always examine it outside of JMP by using a tool such as WinZip. By default, if you are running the Windows operating system in an English locale, your JMPMENU files are stored in your C:Documents and Settingsuser-nameLocal SettingsApplication DataJMP7 DataEnglish directory.



(Click to view full size image)

A glimpse inside the JMPMENU file


For example, on my computer, my JMPMENU files are located in:

C:\Documents and Settings\potter\Local Settings\Application Data\JMP7 Data\English directory.


Lastly, JMP 7 will automatically import your menu customizations if you locate your JMPMENU files in a special subdirectory of your installation directory. For example, if you’re running under Windows with your locale set to English and you’ve installed JMP in the default location, then the following path takes you to the English support files that JMP depends upon:


C:\Program Files\SAS\JMP7\Support Files English


All you have to do is create a subdirectory called “Factory Default Menus” and copy your JMPMENU files into that location (you are allowed to have as many such files as you like in that directory). Then, whenever JMP launches, it will import each JMPMENU file in the “Factory Default Menus” subdirectory into the main menu and toolbar list automatically. (If any of the commands in your customized menus depend on JSL scripts, make sure they were archived when you exported your menus.) When JMP imports the menu, it will extract the JSL files from the archive and place them in a “Dependencies” directory within the “Factory Default Menus” subdirectory.


1 Comment
Community Member

Mike Wodarczyk wrote:

When a user has already defined menu items themselves or has done so by importing a jmpmenu package for another product, then the "Factory Default Menus" folder is no longer read. This makes it difficult to deploy a new menu to a user base that already has other menus installed. It would be nice if there were a user level folder like this that individual package owners could put their own menus and have them play well with other packages.

Article Tags