IComponentHandler3 Class Reference
[VST 3 Interfaces to be implemented by HostVST 3 Interfaces defined in version 3.5.0]

Extended Host callback interface IComponentHandler3 for an edit controller. More...

#include <ivstcontextmenu.h>

Inheritance diagram for IComponentHandler3:
Inheritance graph
[legend]

Public Member Functions

virtual IContextMenucreateContextMenu (IPlugView *plugView, const ParamID *paramID)=0
 Creates a host context menu for a Plug-in:

  • If paramID is zero, the host may create a generic context menu.

Static Public Attributes

static const FUID iid

Detailed Description

Extended Host callback interface IComponentHandler3 for an edit controller.

A Plug-in can ask the host to create a context menu for a given exported Parameter ID or a generic context menu.

The host may pre-fill this context menu with specific items regarding the parameter ID like "Show automation for parameter", "MIDI learn" etc...

The Plug-in can use the context menu in two ways :

Note: You can and should use this even if you don't add your own items to the menu as this is considered to be a big user value.

See also:
IContextMenu
IContextMenuTarget

Example

Adding Plug-in specific items to the context menu

class PluginContextMenuTarget : public IContextMenuTarget, public FObject
{
public:
   PluginContextMenuTarget () {}

   virtual tresult PLUGIN_API executeMenuItem (int32 tag)
   {
      // this will be called if the user has executed one of the menu items of the Plug-in.
      // It won't be called for items of the host.
      switch (tag)
      {
         case 1: break;
         case 2: break;
      }
      return kResultTrue;
   }

   OBJ_METHODS(PluginContextMenuTarget, FObject)
   DEFINE_INTERFACES
      DEF_INTERFACE (IContextMenuTarget)
   END_DEFINE_INTERFACES (FObject)
   REFCOUNT_METHODS(FObject)
};

// The following is the code to create the context menu
void popupContextMenu (IComponentHandler* componentHandler, IPlugView* view, const ParamID* paramID, UCoord x, UCoord y)
{
   if (componentHandler == 0 || view == 0)
      return;
   FUnknownPtr<IComponentHandler3> handler (componentHandler);
   if (handler == 0)
      return;
   IContextMenu* menu = handler->createContextMenu (view, paramID);
   if (menu)
   {
      // here you can add your entries (optional)
      PluginContextMenuTarget* target = new PluginContextMenuTarget ();
      
      IContextMenu::Item item = {0};
      UString128 ("My Item 1").copyTo (item.name, 128);
      item.tag = 1;
      menu->addItem (item, target);

      UString128 ("My Item 2").copyTo (item.name, 128);
      item.tag = 2;
      menu->addItem (item, target);
      target->release ();
      //--end of adding new entries
      
      // here the the context menu will be pop-up (and it waits a user interaction)
      menu->popup (x, y);
      menu->release ();
   }
}

Member Function Documentation

virtual IContextMenu* createContextMenu ( IPlugView plugView,
const ParamID paramID 
) [pure virtual]

Creates a host context menu for a Plug-in:

  • If paramID is zero, the host may create a generic context menu.

  • The IPlugView object must be valid.
  • The return IContextMenu object needs to be released afterwards by the Plug-in.

Field Documentation

const FUID iid [static]

Reimplemented from FUnknown.

 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Defines
Empty

Copyright ©2013 Steinberg Media Technologies GmbH. All Rights Reserved.