To make one or more custom commands available from a menu in Softimage, you first register a custom menu and then add the commands to that custom menu.
A custom menu is not a menu in the same sense as the standard File, Edit, and Help menus that you see in most applications. Rather, a custom menu is a set of commands that Softimage inserts into an existing menu.
This XSILoadPlugin function registers two custom menus that will be inserted in the Help menu on the main Softimage menubar:
function XSILoadPlugin( in_reg ) { in_reg.Author = "Me"; in_reg.Name = "MyCommands"; // Register commands in_reg.RegisterCommand("MyCommand1","MyCommand1"); in_reg.RegisterCommand("MyCommand2","MyCommand2"); // Register a custom menu in_reg.RegisterMenu( siMenuMainHelpID,// Anchor point for the Help menu on the main menubar "MyCommands_Menu", // Internal name for the Menu object false, // DisplayAsSubmenu false // Dynamic (if true, Init is called everytime menu opens) ); // Register another menu as a submenu in_reg.RegisterMenu( siMenuMainHelpID, "MyCommands_SubMenu", true, false ); return true; }
The first argument to RegisterMenu or RegisterMenu is the menu anchor point, which specifies where the custom menu is inserted. The anchor point siMenuMainHelpID is on the Help menu of the main menubar.
The second argument is name of the custom menu. You use this name to name the menu callback functions (for example, MyCommands_Menu_Init).
The third argument specifies whether to add commands directly to the Help menu or to put them on a submenu. For example, the following screen shot shows the two custom menus. Both menus have the same commands ("My Command 1 and My Command 2), but one menu was added with DisplayAsSubmenu= false, and the other with DisplayAsSubmenu=true.
The fourth argument specifies whether the menu is dynamic. Dynamic means that Softimage calls the menu Init callback every time the menu is displayed. This allows you to dynamically change the contents of the menu.
To add commands to a menu, you write an Init callback for the custom menu:
// Init callback for the menu named "MyCommands_Menu" function MyCommands_Menu_Init( ctxt ) { var oMenu; oMenu = ctxt.Source; // Add the commands to the menu oMenu.AddCommandItem( "My Command 1",// The text that appears on the menu "MyCommand1"// The command that is invoked by the menu item ); oMenu.AddCommandItem( "My Command 2", "MyCommand2" ); return true; }
This Init callback adds the commands to a submenu.
// Init callback for the menu named "MyCommands_SubMenu" function MyCommands_SubMenu_Init( ctxt ) { var oMenu; oMenu = ctxt.Source; // Set the text that appears on the Softimage menu for this submenu oMenu.name = "My Commands"; // Add the commands oMenu.AddCommandItem("My Command 1","MyCommand1"); oMenu.AddCommandItem("My Command 2","MyCommand2"); return true; }
Except where otherwise noted, this work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License