Description
For dynamic menus, this callback is fired every time the menu is accessed. For static menus, this callback is fired the first time the menu is accessed after the plug-in is loaded.
This is where you add items and commands to a menu.
Applies To
Syntax
// C#
public class <menu_name>
{
public bool Init( Context in_ctxt )
{
...
}
}
// C++
CStatus <menu_name>_Init( CRef& in_context )
{
...
}
// JScript
function <menu_name>_Init( in_context )
{
...
}
# Python
def <menu_name>_Init( in_context ):
...
' VBScript
Function <menu_name>_Init( in_context )
...
End Function
# PerlScript
sub <menu_name>_Init
{
my $in_context = shift;
}
<menu_name> is the name specified in the call to RegisterMenu, with any spaces removed.
Parameters
|
Parameter |
Language |
Type |
Description |
|
in_context |
Scripting and C# |
Context.Source returns the Menu. |
|
|
C++ |
CRef & |
A reference to the Context object. Context::GetSource returns the Menu . |
Examples
JScript Example
// JScript code generated by the Command Wizard
// Shows the Init callbacks for a command and for a menu
function XSILoadPlugin( in_reg )
{
in_reg.Author = "sblair";
in_reg.Name = "MyCommandPlugin";
in_reg.Email = "";
in_reg.URL = "";
in_reg.Major = 1;
in_reg.Minor = 0;
in_reg.RegisterCommand("MyCommand","MyCommand");
in_reg.RegisterMenu(siMenuTbGetPropertyID,"MyCommand_Menu",false,false);
//RegistrationInsertionPoint - do not remove this line
return true;
}
function XSIUnloadPlugin( in_reg )
{
strPluginName = in_reg.Name;
Application.LogMessage(strPluginName + " has been unloaded.");
return true;
}
function MyCommand_Init( ctxt )
{
var oCmd;
oCmd = ctxt.Source;
oCmd.Description = "";
oCmd.ReturnValue = true;
var oArgs;
oArgs = oCmd.Arguments;
oArgs.Add("Arg0",siArgumentInput);
return true;
}
function MyCommand_Execute( Arg0 )
{
Application.LogMessage("MyCommand_Execute called");
//
// TODO: Put your command implementation here.
//
return true;
}
function MyCommand_Menu_Init( ctxt )
{
var oMenu;
oMenu = ctxt.Source;
oMenu.AddCommandItem("Run My Command","MyCommand");
return true;
}
C++ Example
// C++ code generated by the Command Wizard
// Shows the Init callbacks for a command and a menu
#include <xsi_application.h>
#include <xsi_context.h>
#include <xsi_pluginregistrar.h>
#include <xsi_status.h>
#include <xsi_argument.h>
#include <xsi_command.h>
#include <xsi_menu.h>
using namespace XSI;
XSIPLUGINCALLBACK CStatus XSILoadPlugin( PluginRegistrar& in_reg )
{
in_reg.PutAuthor(L"sblair");
in_reg.PutName(L"My_CppCommandPlugin");
in_reg.PutEmail(L"");
in_reg.PutURL(L"");
in_reg.PutVersion(1,0);
in_reg.RegisterCommand(L"My_CppCommand",L"My_CppCommand1");
in_reg.RegisterMenu(siMenuTbGetPropertyID,L"My_CppCommand_Menu",false,false);
//RegistrationInsertionPoint - do not remove this line
return CStatus::OK;
}
XSIPLUGINCALLBACK CStatus XSIUnloadPlugin( const PluginRegistrar& in_reg )
{
CString strPluginName = in_reg.GetName();
Application().LogMessage(strPluginName + L" has been unloaded.");
return CStatus::OK;
}
XSIPLUGINCALLBACK CStatus My_CppCommand_Init( CRef& in_ctxt )
{
Context ctxt( in_ctxt );
Command oCmd;
oCmd = ctxt.GetSource();
oCmd.PutDescription(L"");
oCmd.EnableReturnValue(true);
ArgumentArray oArgs;
oArgs = oCmd.GetArguments();
oArgs.Add(L"Arg0");
return CStatus::OK;
}
XSIPLUGINCALLBACK CStatus My_CppCommand_Execute( CRef& in_ctxt )
{
Context ctxt( in_ctxt );
CValueArray args = ctxt.GetAttribute(L"Arguments");
CValue Arg0 = args[0];
Application().LogMessage(L"My_CppCommand_Execute called");
//
// TODO: Put your command implementation here.
//
// Return a value by setting this attribute:
ctxt.PutAttribute( L"ReturnValue", true );
// Return CStatus::Fail if you want to raise a script error
return CStatus::OK;
}
XSIPLUGINCALLBACK CStatus My_CppCommand_Menu_Init( CRef& in_ctxt )
{
Context ctxt( in_ctxt );
Menu oMenu;
oMenu = ctxt.GetSource();
MenuItem oNewItem;
oMenu.AddCommandItem(L"My_CppCommand",L"My_CppCommand",oNewItem);
return CStatus::OK;
}
See Also
SOFTIMAGE|XSI v6.01