ManagePlugins
From X-Plane SDK
Revision as of 18:59, 13 December 2012 by Sbarbour (Talk | contribs) (Code updated for 64 bit compatibility)
- Download ManagePlugins as project for X-Code 3.2 or newer, 32 and 64-bit Intel
- Download ManagePlugins as project for Microsoft Visual Studio 2010 (32 and 64-bit)
- Download ManagePlugins as makefile for GCC 4.x/Linux (32 and 64-bit)
/* * ManagePlugins.c * * This plugin demonstrates how to manage other plugins. Most of the time you * won't have to do this. In this plugin we either enable or disable all other * plugins. * */ #include <stdio.h> #include <string.h> #include "XPLMPlugin.h" #include "XPLMMenus.h" #include "XPLMUtilities.h" static void MyMenuHandlerCallback( void * inMenuRef, void * inItemRef); PLUGIN_API int XPluginStart( char * outName, char * outSig, char * outDesc) { XPLMMenuID myMenu; int mySubMenuItem; strcpy(outName, "ManagePlugins"); strcpy(outSig, "xplanesdk.examples.manageplugins"); strcpy(outDesc, "A plugin that manages other plugins."); /* Add menbu items to disable and enable plugins. The refcon * will distinguish which command we are doing. */ mySubMenuItem = XPLMAppendMenuItem( XPLMFindPluginsMenu(), /* Put in plugins menu */ "Manage Plugins", /* Item Title */ 0, /* Item Ref */ 1); /* Force English */ myMenu = XPLMCreateMenu( "Manage Plugins", XPLMFindPluginsMenu(), mySubMenuItem, /* Menu Item to attach to. */ MyMenuHandlerCallback, /* The handler */ 0); /* Handler Ref */ XPLMAppendMenuItem(myMenu, "Disable Others", (void *) 0, 1); XPLMAppendMenuItem(myMenu, "Enable All", (void *) 1, 1); return 1; } PLUGIN_API void XPluginStop(void) { } PLUGIN_API void XPluginDisable(void) { } PLUGIN_API int XPluginEnable(void) { return 1; } PLUGIN_API void XPluginReceiveMessage( XPLMPluginID inFromWho, int inMessage, void * inParam) { } void MyMenuHandlerCallback( void * inMenuRef, void * inItemRef) { /* This is the menu handler. We will go through each plugin. */ int n; for (n = 0; n < XPLMCountPlugins(); ++n) { char str[128]; XPLMPluginID plugin = XPLMGetNthPlugin(n); XPLMPluginID me = XPLMGetMyID(); /* Check to see if the plugin is us. If so, don't * disable ourselves! */ sprintf(str,"plugin=%d,me=%d\n",plugin, me); XPLMDebugString(str); if (plugin != me) { /* Disable based on the item ref for the menu. */ if (inItemRef == NULL) { XPLMDisablePlugin(plugin); } else { XPLMEnablePlugin(plugin); } } } }