/* Adds this plug-in's menus. */ static AIErr AddMenu ( SPInterfaceMessage* message ) { AIErr error = kNoErr; g->aboutPluginMenu = nil; // Add a menu item to the About SDK Plug-ins menu group. SDKAboutPluginsHelper aboutPluginsHelper; error = aboutPluginsHelper.AddAboutPluginsMenuItem(message, kSDKDefAboutSDKCompanyPluginsGroupName, ai::UnicodeString(kSDKDefAboutSDKCompanyPluginsGroupNameString), "Tutorial...", &g->aboutPluginMenu); return error; }
ASErr Ai2VltPlugin::GoMenuItem(AIMenuMessage* message) { if (message->menuItem == this->m_aboutMenu) { SDKAboutPluginsHelper aboutPluginsHelper; aboutPluginsHelper.PopAboutBox(message, "Ai->Violet Export Plug-In", "Developed for the Violet engine of Building Forge, LLC"); } else if (message->menuItem == this->m_panelMenu) { m_panelController->LoadExtension(); } return kNoErr; }
/* Handles this plug-in's menus. */ static AIErr GoMenu ( AIMenuMessage* message ) { AIErr error = kNoErr; error = AcquireSuites( message->d.basic ); if (!error) { if (message->menuItem == g->aboutPluginMenu) { // Pop this plug-ins about box. SDKAboutPluginsHelper aboutPluginsHelper; aboutPluginsHelper.PopAboutBox(message, "About Tutorial", kSDKDefAboutSDKCompanyPluginsAlertString); } } ReleaseSuites( message->d.basic ); return error; }
extern AIErr goMenuItem( AIMenuMessage *message ) { AIErr error = kNoErr; // AIPlatformMenuItem pmenuThrowAway; error = acquireSuites( message->d.basic ); if ( error ) goto error; // Compare the menuItem selected (in the message) with our stored values to see if we do anything if (message->menuItem == g->aboutPluginMenu) { // Pop this plug-in's about box. SDKAboutPluginsHelper aboutPluginsHelper; aboutPluginsHelper.PopAboutBox(message, "About MenuPlay", kSDKDefAboutSDKCompanyPluginsAlertString); } else if ( message->menuItem == g->checkMeAIMenu ) { // Check Me menu item g->checkMeChecked = !g->checkMeChecked; sMenu->CheckItem( g->checkMeAIMenu, g->checkMeChecked ); } else if ( message->menuItem == g->multiDemoAIMenu ) { // Disable Check Me menu item if ( g->checkMeEnabled ) { error = sMenu->DisableItem( g->checkMeAIMenu ); // disable checkMeMenu sMenu->SetItemIcon( g->multiDemoAIMenu, 1 ); } else { error = sMenu->EnableItem( g->checkMeAIMenu ); // enable checkMeMenu sMenu->SetItemIcon( g->multiDemoAIMenu, 2 ); } g->checkMeEnabled = !g->checkMeEnabled; } error: releaseSuites( message->d.basic ); return error; }
ASErr Ai2VltPlugin::AddMenus(SPInterfaceMessage* message) { ASErr error; SDKAboutPluginsHelper aboutPluginsHelper; error = aboutPluginsHelper.AddAboutPluginsMenuItem(message, "AboutVioletPluginsGroupName", ai::UnicodeString("About Violet Plug-Ins"), "Ai->Violet...", &this->m_aboutMenu); if (error) return error; error = sAIMenu->AddMenuItemZString(message->d.self, "Violet Menu Item", kToolPalettesMenuGroup, ZREF("Violet"), kMenuItemWantsUpdateOption, &m_panelMenu); return error; }
extern AIErr goMenuItem( AIMenuMessage *message ) { AIErr error = kNoErr; if ( message->menuItem == g->showADMNonModalDialog ) { sADMDialog->Show( g->nonModalDialog, !( sADMDialog->IsVisible( g->nonModalDialog ) ) ); } else if (message->menuItem == g->aboutPluginMenu) { // Pop this plug-in's about box. SDKAboutPluginsHelper aboutPluginsHelper; aboutPluginsHelper.PopAboutBox(message, "About ADMNonModalDialog", kSDKDefAboutSDKCompanyPluginsAlertString); } if (error) goto error; error: return error; }
extern AIErr addMenu( SPInterfaceMessage *message ) { AIErr error = kNoErr; // Add a menu item to the About SDK Plug-ins menu group. SDKAboutPluginsHelper aboutPluginsHelper; aboutPluginsHelper.AddAboutPluginsMenuItem(message, kSDKDefAboutSDKCompanyPluginsGroupName, ai::UnicodeString(kSDKDefAboutSDKCompanyPluginsGroupNameString), "MenuPlay...", &g->aboutPluginMenu); // Add other menus. AIMenuItemHandle throwAwayAIMenu; AIPlatformAddMenuItemData throwAwayMenuData; AIMenuGroup throwAwayMenuGroup; char strBuffer[255]; #define kMenuPlayMenuGroup "Menu Play Group" #define kSDKMenuGroup "SDK Group" // First we create a normal plug-in menu to use a hierarchical root throwAwayMenuData.groupName = "Window Utilities"; error = sADMBasic->GetIndexString(message->d.self, kMenuStringResID, 1, strBuffer, sizeof(strBuffer)); if (error) goto error; throwAwayMenuData.itemText = SUctopstr ( strBuffer ); error = sMenu->AddMenuItem( message->d.self, kSDKMenuGroup, &throwAwayMenuData, 0, &throwAwayAIMenu ); if ( error ) goto error; // Now we declare the menu item a menu group sMenu->AddMenuGroupAsSubMenu( kSDKMenuGroup, 0, throwAwayAIMenu, &throwAwayMenuGroup ); // Now we can add menu items to it. throwAwayMenuData.groupName = kSDKMenuGroup; *strBuffer = '\0'; error = sADMBasic->GetIndexString(message->d.self, kMenuStringResID, 8, strBuffer, sizeof(strBuffer)); if (error) goto error; throwAwayMenuData.itemText = SUctopstr ( strBuffer ); error = sMenu->AddMenuItem( message->d.self, "Auto Update 1", &throwAwayMenuData, 0, &throwAwayAIMenu ); if ( error ) goto error; // enabled for paths and no masks in the selection error = sMenu->UpdateMenuItemAutomatically( throwAwayAIMenu, kAutoEnableMenuItemAction, kIfPath | kIfGuide, kIfMask, 0, 0, 0, 0 ); // don't care about other update options if ( error ) goto error; sMenu->AddMenuGroupAsSubMenu( kMenuPlayMenuGroup, 0, throwAwayAIMenu, &throwAwayMenuGroup ); throwAwayMenuData.groupName = kMenuPlayMenuGroup; *strBuffer = '\0'; error = sADMBasic->GetIndexString(message->d.self, kMenuStringResID, 2, strBuffer, sizeof(strBuffer)); if (error) goto error; throwAwayMenuData.itemText = SUctopstr ( strBuffer ); error = sMenu->AddMenuItem( message->d.self, "Menu Play", &throwAwayMenuData, 0, &throwAwayAIMenu ); if ( error ) goto error; error = sMenu->UpdateMenuItemAutomatically( throwAwayAIMenu, kAutoEnableMenuItemAction, 0, 0, // don't care about what's in artwork kIfGroup, // is selected and kIfTextPath, // are not selected 0, 0 ); // don't care about other update options if ( error ) goto error; // The second item just auto dims if the layer is locked or has locked objects. throwAwayMenuData.groupName = kMenuPlayMenuGroup; *strBuffer = '\0'; error = sADMBasic->GetIndexString(message->d.self, kMenuStringResID, 3, strBuffer, sizeof(strBuffer)); if (error) goto error; throwAwayMenuData.itemText = SUctopstr ( strBuffer ); error = sMenu->AddMenuItem( message->d.self, "Auto Update 2", &throwAwayMenuData, 0, &throwAwayAIMenu ); if ( error ) goto error; error = sMenu->UpdateMenuItemAutomatically( throwAwayAIMenu, kAutoEnableMenuItemAction, 0, 0, // don't care about what's in artwork 0, // is selected and 0, // are not selected kIfCurrentLayerIsEditable, // is true kIfAnyLockedObjects ); // is false if ( error ) goto error; // The third item doesn't auto dim, but requests the update selector. // The automatic update option is the best way to handle menu updates. throwAwayMenuData.groupName = kMenuPlayMenuGroup; *strBuffer = '\0'; error = sADMBasic->GetIndexString(message->d.self, kMenuStringResID, 4, strBuffer, sizeof(strBuffer)); if (error) goto error; throwAwayMenuData.itemText = SUctopstr ( strBuffer ); error = sMenu->AddMenuItem( message->d.self, "Manual Update 1", &throwAwayMenuData, kMenuItemWantsUpdateOption, &g->manualUpdateAIMenu ); if ( error ) goto error; // Seperators work just like std. mac menus throwAwayMenuData.groupName = kMenuPlayMenuGroup; *strBuffer = '\0'; error = sADMBasic->GetIndexString(message->d.self, kMenuStringResID, 5, strBuffer, sizeof(strBuffer)); if (error) goto error; throwAwayMenuData.itemText = SUctopstr ( strBuffer ); error = sMenu->AddMenuItem( message->d.self, "seperator", &throwAwayMenuData, kMenuItemWantsUpdateOption, &throwAwayAIMenu ); if ( error ) goto error; // These menus we'll actually make do something, in this case check and uncheck itself throwAwayMenuData.groupName = kMenuPlayMenuGroup; *strBuffer = '\0'; error = sADMBasic->GetIndexString(message->d.self, kMenuStringResID, 6, strBuffer, sizeof(strBuffer)); if (error) goto error; throwAwayMenuData.itemText = SUctopstr ( strBuffer ); // We keep the AIMenuItemHandle to figure out which menu was selected later error = sMenu->AddMenuItem( message->d.self, "Check me", &throwAwayMenuData, 0, &g->checkMeAIMenu ); if ( error ) goto error; //sMenu->SetItemCmd( g->checkMeAIMenu, 'u', kMenuItemCmdShiftModifier ); g->checkMeChecked = false; // This menu will dim the above menu and change it's own icon throwAwayMenuData.groupName = kMenuPlayMenuGroup; *strBuffer = '\0'; error = sADMBasic->GetIndexString(message->d.self, kMenuStringResID, 7, strBuffer, sizeof(strBuffer)); if (error) goto error; throwAwayMenuData.itemText = SUctopstr ( strBuffer ); error = sMenu->AddMenuItem( message->d.self, "Disable Check Me", &throwAwayMenuData, 0, &g->multiDemoAIMenu ); if ( error ) goto error; sMenu->SetItemIcon( g->multiDemoAIMenu, 2 ); g->checkMeEnabled = true; error: return error; }
extern AIErr addMenu( SPInterfaceMessage *message ) { AIErr error = kNoErr; // Add a menu item to the About SDK Plug-ins menu group. SDKAboutPluginsHelper aboutPluginsHelper; aboutPluginsHelper.AddAboutPluginsMenuItem(message, kSDKDefAboutSDKCompanyPluginsGroupName, ai::UnicodeString(kSDKDefAboutSDKCompanyPluginsGroupNameString), "Add Color...", &g->aboutPluginMenu); // Add other menus. AIPlatformAddMenuItemDataUS menuData; AIPlatformAddMenuItemDataUS pluginMenuData; const char *menuGroupCStr = "SDKEditGroup"; const char *menuCStr = "Modify Swatches"; const char *pluginCStr = "Add Color"; AIMenuGroup menuGroup; AIMenuGroup pluginMenuGroup; AIMenuGroup dummyGroup; AIMenuItemHandle dummyItem; bool sdkGroupAlreadyMade = false; bool admGroupAlreadyMade = false; //This line tells AI to put the new item in the Edit menu menuData.groupName = kEditMenuGroup; menuData.itemText = ai::UnicodeString(menuCStr); pluginMenuData.groupName = menuGroupCStr; pluginMenuData.itemText = ai::UnicodeString(pluginCStr); // search through the menus and // see if another SDK plug in has already set up the group long count; error = sAIMenu->CountMenuGroups( &count ); if ( error ) goto error; while (count > 0) { error = sAIMenu->GetNthMenuGroup( count-1, &dummyGroup ); if ( error ) goto error; char *name; error = sAIMenu->GetMenuGroupName( dummyGroup, (const char**)&name ); if ( error ) goto error; if ( std::strcmp(name, menuGroupCStr ) == 0 ) { sdkGroupAlreadyMade = true; count = -1; } if(std::strcmp(name,pluginCStr) == 0) { admGroupAlreadyMade = true; } count--; } if ( !sdkGroupAlreadyMade ) { error = sAIMenu->AddMenuItem( message->d.self, menuGroupCStr, &menuData, 0, &dummyItem ); if ( error ) goto error; error = sAIMenu->AddMenuGroupAsSubMenu( menuGroupCStr, kMenuGroupSortedAlphabeticallyOption, dummyItem, &menuGroup ); if ( error ) goto error; } if(!admGroupAlreadyMade) { error = sAIMenu->AddMenuItem( message->d.self, pluginCStr, &pluginMenuData, 0, &dummyItem ); if ( error ) goto error; error = sAIMenu->AddMenuGroupAsSubMenu( pluginCStr, 0, dummyItem, &pluginMenuGroup ); if ( error ) goto error; } pluginMenuData.groupName = pluginCStr; error = sAIMenu->AddMenuItem( message->d.self, pluginCStr, &pluginMenuData, kMenuItemWantsUpdateOption, &g->showADMNonModalDialog ); if ( error ) goto error; error: return error; }