122 lines
4.7 KiB
C
122 lines
4.7 KiB
C
|
//************************************************************************************************
|
||
|
//
|
||
|
// PreSonus Plug-In Extensions
|
||
|
// Written and placed in the PUBLIC DOMAIN by PreSonus Software Ltd.
|
||
|
//
|
||
|
// Filename : ipslhostcommands.h
|
||
|
// Created by : PreSonus Software Ltd., 11/2009
|
||
|
// Description : Host Command Interface
|
||
|
//
|
||
|
//************************************************************************************************
|
||
|
/*
|
||
|
DISCLAIMER:
|
||
|
The PreSonus Plug-In Extensions are host-specific extensions of existing proprietary technologies,
|
||
|
provided to the community on an AS IS basis. They are not part of any official 3rd party SDK and
|
||
|
PreSonus is not affiliated with the owner of the underlying technology in any way.
|
||
|
*/
|
||
|
//************************************************************************************************
|
||
|
|
||
|
#ifndef _ipslhostcommands_h
|
||
|
#define _ipslhostcommands_h
|
||
|
|
||
|
#include "pluginterfaces/vst/vsttypes.h"
|
||
|
#include "pluginterfaces/base/funknown.h"
|
||
|
#include "pluginterfaces/base/falignpush.h"
|
||
|
|
||
|
namespace Steinberg {
|
||
|
class IPlugView; }
|
||
|
|
||
|
namespace Presonus {
|
||
|
|
||
|
struct ICommandList;
|
||
|
|
||
|
//************************************************************************************************
|
||
|
// IHostCommandHandler
|
||
|
/** Callback interface to access host-specific parameter commands to be integrated
|
||
|
into a context menu inside the plug-in editor. Implemented as extension of
|
||
|
Steinberg::Vst::IComponentHandler.
|
||
|
|
||
|
Please note that the intention of this set of interfaces is not to allow a generic menu
|
||
|
implementation. This is the responsibility of a GUI toolkit. It basically provides
|
||
|
a way to enumerate and execute commands anonymously, i.e. the plug-in does not have to
|
||
|
know the exact sematics of the commands and the host does not break the consistency of
|
||
|
the plug-in GUI.
|
||
|
|
||
|
Usage Example:
|
||
|
|
||
|
IComponentHandler* handler;
|
||
|
FUnknownPtr<IHostCommandHandler> commandHandler (handler);
|
||
|
if(commandHandler)
|
||
|
if(ICommandList* commandList = commandHandler->createParamCommands (kMyParamId))
|
||
|
{
|
||
|
FReleaser commandListReleaser (commandList);
|
||
|
commandHandler->popupCommandMenu (commandList, xPos, yPos);
|
||
|
}
|
||
|
*/
|
||
|
//************************************************************************************************
|
||
|
|
||
|
struct IHostCommandHandler: Steinberg::FUnknown
|
||
|
{
|
||
|
/** Create list of currently available host commands for given parameter.
|
||
|
The command list has a short lifecycle, it is recreated whenever
|
||
|
a context menu should appear. The returned pointer can be null, otherwise
|
||
|
it has to be released. */
|
||
|
virtual ICommandList* PLUGIN_API createParamCommands (Steinberg::Vst::ParamID tag) = 0;
|
||
|
|
||
|
/** Helper to popup a command menu at given position.
|
||
|
Coordinates are relative to view or in screen coordintes if view is null.
|
||
|
Can be used for testing purpose, if the plug-in does not have its own context menu implementation
|
||
|
or if it wants to use the look & feel of the host menu. This method is not supposed
|
||
|
to support command lists implemented by the plug-in. */
|
||
|
virtual Steinberg::tresult PLUGIN_API popupCommandMenu (ICommandList* commandList, Steinberg::int32 xPos, Steinberg::int32 yPos, Steinberg::IPlugView* view = 0) = 0;
|
||
|
|
||
|
static const Steinberg::FUID iid;
|
||
|
};
|
||
|
|
||
|
DECLARE_CLASS_IID (IHostCommandHandler, 0xF92032CD, 0x7A84407C, 0xABE6F863, 0x058EA6C2)
|
||
|
|
||
|
//************************************************************************************************
|
||
|
// CommandInfo
|
||
|
/** Describes a single command. */
|
||
|
//************************************************************************************************
|
||
|
|
||
|
struct CommandInfo
|
||
|
{
|
||
|
Steinberg::Vst::String128 title; ///< command title (possibly localized into active host language)
|
||
|
Steinberg::int32 flags; ///< command flags
|
||
|
|
||
|
enum CommandFlags
|
||
|
{
|
||
|
kCanExecute = 1<<0, ///< used to display command enabled/disabled
|
||
|
kIsSeparator = 1<<1, ///< not a command, it's a separator
|
||
|
kIsChecked = 1<<2 ///< used to display command with a check mark
|
||
|
};
|
||
|
};
|
||
|
|
||
|
//************************************************************************************************
|
||
|
// ICommandList
|
||
|
/** Describes a list of commands. */
|
||
|
//************************************************************************************************
|
||
|
|
||
|
struct ICommandList: Steinberg::FUnknown
|
||
|
{
|
||
|
/** Returns the number of commands. */
|
||
|
virtual Steinberg::int32 PLUGIN_API getCommandCount () = 0;
|
||
|
|
||
|
/** Get command information for a given index. */
|
||
|
virtual Steinberg::tresult PLUGIN_API getCommandInfo (Steinberg::int32 index, CommandInfo& info) = 0;
|
||
|
|
||
|
/** Execute command at given index. */
|
||
|
virtual Steinberg::tresult PLUGIN_API executeCommand (Steinberg::int32 index) = 0;
|
||
|
|
||
|
static const Steinberg::FUID iid;
|
||
|
};
|
||
|
|
||
|
DECLARE_CLASS_IID (ICommandList, 0xC5A687DB, 0x82F344E9, 0xB378254A, 0x47C4D712)
|
||
|
|
||
|
} // namespace Presonus
|
||
|
|
||
|
#include "pluginterfaces/base/falignpop.h"
|
||
|
|
||
|
#endif // _ipslhostcommands_h
|