|
- //------------------------------------------------------------------------
- // Project : VST SDK
- //
- // Category : Interfaces
- // Filename : pluginterfaces/vst/ivsteditcontroller.h
- // Created by : Steinberg, 09/2005
- // Description : VST Edit Controller Interfaces
- //
- //-----------------------------------------------------------------------------
- // This file is part of a Steinberg SDK. It is subject to the license terms
- // in the LICENSE file found in the top-level directory of this distribution
- // and at www.steinberg.net/sdklicenses.
- // No part of the SDK, including this file, may be copied, modified, propagated,
- // or distributed except according to the terms contained in the LICENSE file.
- //-----------------------------------------------------------------------------
-
- #pragma once
-
- #include "pluginterfaces/base/ipluginbase.h"
- #include "pluginterfaces/vst/vsttypes.h"
-
- //------------------------------------------------------------------------
- #include "pluginterfaces/base/falignpush.h"
- //------------------------------------------------------------------------
-
- //------------------------------------------------------------------------
- /** Class Category Name for Controller Component */
- //------------------------------------------------------------------------
- #ifndef kVstComponentControllerClass
- #define kVstComponentControllerClass "Component Controller Class"
- #endif
-
- //------------------------------------------------------------------------
- namespace Steinberg {
- class IPlugView;
- class IBStream;
-
- //------------------------------------------------------------------------
- namespace Vst {
-
- //------------------------------------------------------------------------
- /** Controller Parameter Info.
- * A parameter info describes a parameter of the controller.
- * The id must always be the same for a parameter as this uniquely identifies the parameter.
- */
- struct ParameterInfo
- {
- //------------------------------------------------------------------------
- ParamID id; ///< unique identifier of this parameter (named tag too)
- String128 title; ///< parameter title (e.g. "Volume")
- String128 shortTitle; ///< parameter shortTitle (e.g. "Vol")
- String128 units; ///< parameter unit (e.g. "dB")
- int32 stepCount; ///< number of discrete steps (0: continuous, 1: toggle, discrete value otherwise
- ///< (corresponding to max - min, for example: 127 for a min = 0 and a max = 127) - see \ref vst3ParameterIntro)
- ParamValue defaultNormalizedValue; ///< default normalized value [0,1] (in case of discrete value: defaultNormalizedValue = defDiscreteValue / stepCount)
- UnitID unitId; ///< id of unit this parameter belongs to (see \ref vst3Units)
-
- int32 flags; ///< ParameterFlags (see below)
- enum ParameterFlags
- {
- kNoFlags = 0, ///< no flags wanted
- kCanAutomate = 1 << 0, ///< parameter can be automated
- kIsReadOnly = 1 << 1, ///< parameter cannot be changed from outside the plug-in (implies that kCanAutomate is NOT set)
- kIsWrapAround = 1 << 2, ///< attempts to set the parameter value out of the limits will result in a wrap around [SDK 3.0.2]
- kIsList = 1 << 3, ///< parameter should be displayed as list in generic editor or automation editing [SDK 3.1.0]
- kIsHidden = 1 << 4, ///< parameter should be NOT displayed and cannot be changed from outside the plug-in
- ///< (implies that kCanAutomate is NOT set and kIsReadOnly is set) [SDK 3.7.0]
-
- kIsProgramChange = 1 << 15, ///< parameter is a program change (unitId gives info about associated unit
- ///< - see \ref vst3ProgramLists)
- kIsBypass = 1 << 16 ///< special bypass parameter (only one allowed): plug-in can handle bypass
- ///< (highly recommended to export a bypass parameter for effect plug-in)
- };
- //------------------------------------------------------------------------
- };
-
- //------------------------------------------------------------------------
- /** View Types used for IEditController::createView */
- //------------------------------------------------------------------------
- namespace ViewType {
- const CString kEditor = "editor";
- }
-
- //------------------------------------------------------------------------
- /** Flags used for IComponentHandler::restartComponent */
- enum RestartFlags
- {
- /** The Component should be reloaded
- * The host has to unload completely the plug-in (controller/processor) and reload it.
- * [SDK 3.0.0] */
- kReloadComponent = 1 << 0,
-
- /** Input / Output Bus configuration has changed
- * The plug-in informs the host that either the bus configuration or the bus count has changed.
- * The host has to deactivate the plug-in, asks the plug-in for its wanted new bus configurations,
- * adapts its processing graph and reactivate the plug-in.
- * [SDK 3.0.0] */
- kIoChanged = 1 << 1,
-
- /** Multiple parameter values have changed (as result of a program change for example)
- * The host invalidates all caches of parameter values and asks the edit controller for the current values.
- * [SDK 3.0.0] */
- kParamValuesChanged = 1 << 2,
-
- /** Latency has changed
- * The plug informs the host that its latency has changed, getLatencySamples should return the new latency after setActive (true) was called
- * The host has to deactivate and reactivate the plug-in, then afterwards the host could ask for the current latency (getLatencySamples)
- * see IAudioProcessor::getLatencySamples
- * [SDK 3.0.0] */
- kLatencyChanged = 1 << 3,
-
- /** Parameter titles, default values or flags (ParameterFlags) have changed
- * The host invalidates all caches of parameter infos and asks the edit controller for the current infos.
- * [SDK 3.0.0] */
- kParamTitlesChanged = 1 << 4,
-
- /** MIDI Controllers and/or Program Changes Assignments have changed
- * The plug-in informs the host that its MIDI-CC mapping has changed (for example after a MIDI learn or new loaded preset)
- * or if the stepCount or UnitID of a ProgramChange parameter has changed.
- * The host has to rebuild the MIDI-CC => parameter mapping (getMidiControllerAssignment)
- * and reread program changes parameters (stepCount and associated unitID)
- * [SDK 3.0.1] */
- kMidiCCAssignmentChanged = 1 << 5,
-
- /** Note Expression has changed (info, count, PhysicalUIMapping, ...)
- * Either the note expression type info, the count of note expressions or the physical UI mapping has changed.
- * The host invalidates all caches of note expression infos and asks the edit controller for the current ones.
- * See INoteExpressionController, NoteExpressionTypeInfo and INoteExpressionPhysicalUIMapping
- * [SDK 3.5.0] */
- kNoteExpressionChanged = 1 << 6,
-
- /** Input / Output bus titles have changed
- * The host invalidates all caches of bus titles and asks the edit controller for the current titles.
- * [SDK 3.5.0] */
- kIoTitlesChanged = 1 << 7,
-
- /** Prefetch support has changed
- * The plug-in informs the host that its PrefetchSupport has changed
- * The host has to deactivate the plug-in, calls IPrefetchableSupport::getPrefetchableSupport and reactivate the plug-in
- * see IPrefetchableSupport
- * [SDK 3.6.1] */
- kPrefetchableSupportChanged = 1 << 8,
-
- /** RoutingInfo has changed
- * The plug-in informs the host that its internal routing (relation of an event-input-channel to an audio-output-bus) has changed
- * The host ask the plug-in for the new routing with IComponent::getRoutingInfo, \ref vst3Routing
- * see IComponent
- * [SDK 3.6.6] */
- kRoutingInfoChanged = 1 << 9
- };
-
- //------------------------------------------------------------------------
- /** Host callback interface for an edit controller: Vst::IComponentHandler
- \ingroup vstIHost vst300
- - [host imp]
- - [released: 3.0.0]
- - [mandatory]
-
- Allow transfer of parameter editing to component (processor) via host and support automation.
- Cause the host to react on configuration changes (restartComponent).
-
- \see \ref IEditController
- */
- class IComponentHandler : public FUnknown
- {
- public:
- //------------------------------------------------------------------------
- /** To be called before calling a performEdit (e.g. on mouse-click-down event).
- This must be called in the UI-Thread context! */
- virtual tresult PLUGIN_API beginEdit (ParamID id) = 0;
-
- /** Called between beginEdit and endEdit to inform the handler that a given parameter has a new
- * value. This must be called in the UI-Thread context! */
- virtual tresult PLUGIN_API performEdit (ParamID id, ParamValue valueNormalized) = 0;
-
- /** To be called after calling a performEdit (e.g. on mouse-click-up event).
- This must be called in the UI-Thread context! */
- virtual tresult PLUGIN_API endEdit (ParamID id) = 0;
-
- /** Instructs host to restart the component. This must be called in the UI-Thread context!
- \param flags is a combination of RestartFlags */
- virtual tresult PLUGIN_API restartComponent (int32 flags) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IComponentHandler, 0x93A0BEA3, 0x0BD045DB, 0x8E890B0C, 0xC1E46AC6)
-
- //------------------------------------------------------------------------
- /** Extended host callback interface for an edit controller: Vst::IComponentHandler2
- \ingroup vstIHost vst310
- - [host imp]
- - [extends IComponentHandler]
- - [released: 3.1.0]
- - [optional]
-
- One part handles:
- - Setting dirty state of the plug-in
- - Requesting the host to open the editor
-
- The other part handles parameter group editing from the plug-in UI. It wraps a set of \ref IComponentHandler::beginEdit /
- \ref Steinberg::Vst::IComponentHandler::performEdit / \ref Steinberg::Vst::IComponentHandler::endEdit functions (see \ref IComponentHandler)
- which should use the same timestamp in the host when writing automation.
- This allows for better synchronizing of multiple parameter changes at once.
-
- \section IComponentHandler2Example Examples of different use cases
-
- \code{.cpp}
- //--------------------------------------
- // we are in the editcontroller...
- // in case of multiple switch buttons (with associated ParamID 1 and 3)
- // on mouse down :
- hostHandler2->startGroupEdit ();
- hostHandler->beginEdit (1);
- hostHandler->beginEdit (3);
- hostHandler->performEdit (1, 1.0);
- hostHandler->performEdit (3, 0.0); // the opposite of paramID 1 for example
- ....
- // on mouse up :
- hostHandler->endEdit (1);
- hostHandler->endEdit (3);
- hostHandler2->finishGroupEdit ();
- ....
- ....
- //--------------------------------------
- // in case of multiple faders (with associated ParamID 1 and 3)
- // on mouse down :
- hostHandler2->startGroupEdit ();
- hostHandler->beginEdit (1);
- hostHandler->beginEdit (3);
- hostHandler2->finishGroupEdit ();
- ....
- // on mouse move :
- hostHandler2->startGroupEdit ();
- hostHandler->performEdit (1, x); // x the wanted value
- hostHandler->performEdit (3, x);
- hostHandler2->finishGroupEdit ();
- ....
- // on mouse up :
- hostHandler2->startGroupEdit ();
- hostHandler->endEdit (1);
- hostHandler->endEdit (3);
- hostHandler2->finishGroupEdit ();
- \endcode
- \see \ref IComponentHandler, \ref IEditController
- */
- class IComponentHandler2 : public FUnknown
- {
- public:
- //------------------------------------------------------------------------
- /** Tells host that the plug-in is dirty (something besides parameters has changed since last save),
- if true the host should apply a save before quitting. */
- virtual tresult PLUGIN_API setDirty (TBool state) = 0;
-
- /** Tells host that it should open the plug-in editor the next time it's possible.
- You should use this instead of showing an alert and blocking the program flow (especially on loading projects). */
- virtual tresult PLUGIN_API requestOpenEditor (FIDString name = ViewType::kEditor) = 0;
-
- //------------------------------------------------------------------------
- /** Starts the group editing (call before a \ref IComponentHandler::beginEdit),
- the host will keep the current timestamp at this call and will use it for all \ref IComponentHandler::beginEdit
- / \ref IComponentHandler::performEdit / \ref IComponentHandler::endEdit calls until a \ref finishGroupEdit (). */
- virtual tresult PLUGIN_API startGroupEdit () = 0;
-
- /** Finishes the group editing started by a \ref startGroupEdit (call after a \ref IComponentHandler::endEdit). */
- virtual tresult PLUGIN_API finishGroupEdit () = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IComponentHandler2, 0xF040B4B3, 0xA36045EC, 0xABCDC045, 0xB4D5A2CC)
-
- //------------------------------------------------------------------------
- /** Extended host callback interface for an edit controller: Vst::IComponentHandlerBusActivation
- \ingroup vstIHost vst368
- - [host imp]
- - [extends IComponentHandler]
- - [released: 3.6.8]
- - [optional]
-
- Allows the plug-in to request the host to activate or deactivate a specific bus.
- If the host accepts this request, it will call later on \ref IComponent::activateBus.
- This is particularly useful for instruments with more than 1 outputs, where the user could request
- from the plug-in UI a given output bus activation.
-
- \code{.cpp}
- // somewhere in your code when you need to inform the host to enable a specific Bus.
- FUnknownPtr<IComponentHandlerBusActivation> busActivation (componentHandler);
- if (busActivation)
- {
- // here we want to activate our audio input sidechain (the 2cd input bus: index 1)
- busActivation->requestBusActivation (kAudio, kInput, 1, true);
- }
- \endcode
- \see \ref IComponentHandler
- */
- class IComponentHandlerBusActivation : public FUnknown
- {
- public:
- //------------------------------------------------------------------------
- /** request the host to activate or deactivate a specific bus. */
- virtual tresult PLUGIN_API requestBusActivation (MediaType type, BusDirection dir, int32 index,
- TBool state) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IComponentHandlerBusActivation, 0x067D02C1, 0x5B4E274D, 0xA92D90FD, 0x6EAF7240)
-
- //------------------------------------------------------------------------
- /** Extended host callback interface for an edit controller: Vst::IProgress
- \ingroup vstIHost vst370
- - [host imp]
- - [extends IComponentHandler]
- - [released: 3.7.0]
- - [optional]
-
- Allows the plug-in to request the host to create a progress for some specific tasks which take
- some time. The host can visualize the progress as read-only UI elements. For example,
- after loading a project where a plug-in needs to load extra
- data (e.g. samples) in a background thread, this enables the host to get and visualize the current status of the loading
- progress and to inform the user when the loading is finished.
- Note: During the progress, the host can unload the plug-in at any time. Make sure that the plug-in
- supports this use case.
-
- \section IProgressExample Example
-
- \code{.cpp}
- //--------------------------------------
- // we are in the editcontroller:
- // as member: IProgress::ID mProgressID;
-
- FUnknownPtr<IProgress> progress (componentHandler);
- if (progress)
- progress->start (IProgress::ProgressType::UIBackgroundTask, STR ("Load Samples..."), mProgressID);
-
- // ...
- myProgressValue += incProgressStep;
- FUnknownPtr<IProgress> progress (componentHandler);
- if (progress)
- progress->update (mProgressID, myProgressValue);
-
- // ...
- FUnknownPtr<IProgress> progress (componentHandler);
- if (progress)
- progress->finish (mProgressID);
- \endcode
-
- \see \ref IComponentHandler
- */
- class IProgress : public FUnknown
- {
- public:
- //------------------------------------------------------------------------
- enum ProgressType : uint32
- {
- AsyncStateRestoration = 0, ///< plug-in state is restored async (in a background Thread)
- UIBackgroundTask ///< a plug-in task triggered by a UI action
- };
-
- using ID = uint64;
-
- /** Start a new progress of a given type and optional Description. outID is as ID created by the
- * host to identify this newly created progress (for update and finish method) */
- virtual tresult PLUGIN_API start (ProgressType type, const tchar* optionalDescription,
- ID& outID) = 0;
- /** Update the progress value (normValue between [0, 1]) associated to the given id */
- virtual tresult PLUGIN_API update (ID id, ParamValue normValue) = 0;
- /** Finish the progress associated to the given id */
- virtual tresult PLUGIN_API finish (ID id) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IProgress, 0x00C9DC5B, 0x9D904254, 0x91A388C8, 0xB4E91B69)
-
- //------------------------------------------------------------------------
- /** Edit controller component interface: Vst::IEditController
- \ingroup vstIPlug vst300
- - [plug imp]
- - [released: 3.0.0]
- - [mandatory]
-
- The controller part of an effect or instrument with parameter handling (export, definition, conversion...).
- \see \ref IComponent::getControllerClassId, \ref IMidiMapping
- */
- class IEditController : public IPluginBase
- {
- public:
- //------------------------------------------------------------------------
- /** Receives the component state. */
- virtual tresult PLUGIN_API setComponentState (IBStream* state) = 0;
-
- /** Sets the controller state. */
- virtual tresult PLUGIN_API setState (IBStream* state) = 0;
-
- /** Gets the controller state. */
- virtual tresult PLUGIN_API getState (IBStream* state) = 0;
-
- // parameters -------------------------
- /** Returns the number of parameters exported. */
- virtual int32 PLUGIN_API getParameterCount () = 0;
- /** Gets for a given index the parameter information. */
- virtual tresult PLUGIN_API getParameterInfo (int32 paramIndex, ParameterInfo& info /*out*/) = 0;
-
- /** Gets for a given paramID and normalized value its associated string representation. */
- virtual tresult PLUGIN_API getParamStringByValue (ParamID id, ParamValue valueNormalized /*in*/, String128 string /*out*/) = 0;
- /** Gets for a given paramID and string its normalized value. */
- virtual tresult PLUGIN_API getParamValueByString (ParamID id, TChar* string /*in*/, ParamValue& valueNormalized /*out*/) = 0;
-
- /** Returns for a given paramID and a normalized value its plain representation
- (for example -6 for -6dB - see \ref vst3AutomationIntro). */
- virtual ParamValue PLUGIN_API normalizedParamToPlain (ParamID id, ParamValue valueNormalized) = 0;
- /** Returns for a given paramID and a plain value its normalized value. (see \ref vst3AutomationIntro) */
- virtual ParamValue PLUGIN_API plainParamToNormalized (ParamID id, ParamValue plainValue) = 0;
-
- /** Returns the normalized value of the parameter associated to the paramID. */
- virtual ParamValue PLUGIN_API getParamNormalized (ParamID id) = 0;
- /** Sets the normalized value to the parameter associated to the paramID. The controller must never
- pass this value-change back to the host via the IComponentHandler. It should update the according
- GUI element(s) only!*/
- virtual tresult PLUGIN_API setParamNormalized (ParamID id, ParamValue value) = 0;
-
- // handler ----------------------------
- /** Gets from host a handler which allows the Plugin-in to communicate with the host.
- Note: This is mandatory if the host is using the IEditController! */
- virtual tresult PLUGIN_API setComponentHandler (IComponentHandler* handler) = 0;
-
- // view -------------------------------
- /** Creates the editor view of the plug-in, currently only "editor" is supported, see \ref ViewType.
- The life time of the editor view will never exceed the life time of this controller instance. */
- virtual IPlugView* PLUGIN_API createView (FIDString name) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IEditController, 0xDCD7BBE3, 0x7742448D, 0xA874AACC, 0x979C759E)
-
- //------------------------------------------------------------------------
- /** Knob Mode */
- enum KnobModes
- {
- kCircularMode = 0, ///< Circular with jump to clicked position
- kRelativCircularMode, ///< Circular without jump to clicked position
- kLinearMode ///< Linear: depending on vertical movement
- };
-
- //------------------------------------------------------------------------
- /** \defgroup vst3typedef VST 3 Data Types */
- /*@{*/
- //------------------------------------------------------------------------
- /** Knob Mode Type */
- typedef int32 KnobMode;
- /*@}*/
-
- //------------------------------------------------------------------------
- /** Edit controller component interface extension: Vst::IEditController2
- \ingroup vstIPlug vst310
- - [plug imp]
- - [extends IEditController]
- - [released: 3.1.0]
- - [optional]
-
- Extension to allow the host to inform the plug-in about the host Knob Mode,
- and to open the plug-in about box or help documentation.
-
- \see \ref IEditController, \ref EditController
- */
- class IEditController2 : public FUnknown
- {
- public:
- /** Host could set the Knob Mode for the plug-in. Return kResultFalse means not supported mode. \see KnobModes. */
- virtual tresult PLUGIN_API setKnobMode (KnobMode mode) = 0;
-
- /** Host could ask to open the plug-in help (could be: opening a PDF document or link to a web page).
- The host could call it with onlyCheck set to true for testing support of open Help.
- Return kResultFalse means not supported function. */
- virtual tresult PLUGIN_API openHelp (TBool onlyCheck) = 0;
-
- /** Host could ask to open the plug-in about box.
- The host could call it with onlyCheck set to true for testing support of open AboutBox.
- Return kResultFalse means not supported function. */
- virtual tresult PLUGIN_API openAboutBox (TBool onlyCheck) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IEditController2, 0x7F4EFE59, 0xF3204967, 0xAC27A3AE, 0xAFB63038)
-
- //------------------------------------------------------------------------
- /** MIDI Mapping interface: Vst::IMidiMapping
- \ingroup vstIPlug vst301
- - [plug imp]
- - [extends IEditController]
- - [released: 3.0.1]
- - [optional]
-
- MIDI controllers are not transmitted directly to a VST component. MIDI as hardware protocol has
- restrictions that can be avoided in software. Controller data in particular come along with unclear
- and often ignored semantics. On top of this they can interfere with regular parameter automation and
- the host is unaware of what happens in the plug-in when passing MIDI controllers directly.
-
- So any functionality that is to be controlled by MIDI controllers must be exported as regular parameter.
- The host will transform incoming MIDI controller data using this interface and transmit them as regular
- parameter change. This allows the host to automate them in the same way as other parameters.
- CtrlNumber can be a typical MIDI controller value extended to some others values like pitchbend or
- aftertouch (see \ref ControllerNumbers).
- If the mapping has changed, the plug-in must call IComponentHandler::restartComponent (kMidiCCAssignmentChanged)
- to inform the host about this change.
-
- \section IMidiMappingExample Example
-
- \code{.cpp}
- //--------------------------------------
- // in myeditcontroller.h
- class MyEditController: public EditControllerEx1, public IMidiMapping
- {
- //...
- //---IMidiMapping---------------------------
- tresult PLUGIN_API getMidiControllerAssignment (int32 busIndex, int16 channel, CtrlNumber midiControllerNumber, ParamID& id) SMTG_OVERRIDE;
- //---Interface---------
- OBJ_METHODS (MyEditController, EditControllerEx1)
- DEFINE_INTERFACES
- DEF_INTERFACE (IMidiMapping)
- END_DEFINE_INTERFACES (MyEditController)
- REFCOUNT_METHODS (MyEditController)
- };
-
- //--------------------------------------
- // in myeditcontroller.cpp
- tresult PLUGIN_API MyEditController::getMidiControllerAssignment (int32 busIndex, int16 midiChannel, CtrlNumber midiControllerNumber, ParamID& tag)
- {
- // for my first Event bus and for MIDI channel 0 and for MIDI CC Volume only
- if (busIndex == 0 && midiChannel == 0 && midiControllerNumber == kCtrlVolume)
- {
- tag = kGainId;
- return kResultTrue;
- }
- return kResultFalse;
- }
- \endcode
-
- */
- class IMidiMapping : public FUnknown
- {
- public:
- /** Gets an (preferred) associated ParamID for a given Input Event Bus index, channel and MIDI Controller.
- * @param[in] busIndex - index of Input Event Bus
- * @param[in] channel - channel of the bus
- * @param[in] midiControllerNumber - see \ref ControllerNumbers for expected values (could be bigger than 127)
- * @param[in] id - return the associated ParamID to the given midiControllerNumber
- */
- virtual tresult PLUGIN_API getMidiControllerAssignment (int32 busIndex, int16 channel,
- CtrlNumber midiControllerNumber, ParamID& id/*out*/) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IMidiMapping, 0xDF0FF9F7, 0x49B74669, 0xB63AB732, 0x7ADBF5E5)
-
- //------------------------------------------------------------------------
- /** Parameter Editing from host: Vst::IEditControllerHostEditing
- \ingroup vstIPlug vst350
- - [plug imp]
- - [extends IEditController]
- - [released: 3.5.0]
- - [optional]
-
- If this interface is implemented by the edit controller, and when performing edits from outside
- the plug-in (host / remote) of a not automatable and not read-only, and not hidden flagged parameter (kind of helper parameter),
- the host will start with a beginEditFromHost before calling setParamNormalized and end with an endEditFromHost.
- Here the sequence that the host will call:
-
- \section IEditControllerExample Example
-
- \code{.cpp}
- //------------------------------------------------------------------------
- plugEditController->beginEditFromHost (id);
- plugEditController->setParamNormalized (id, value);
- plugEditController->setParamNormalized (id, value + 0.1);
- // ...
- plugEditController->endEditFromHost (id);
- \endcode
-
- \see \ref IEditController
- */
- class IEditControllerHostEditing : public FUnknown
- {
- public:
- /** Called before a setParamNormalized sequence, a endEditFromHost will be call at the end of the editing action. */
- virtual tresult PLUGIN_API beginEditFromHost (ParamID paramID) = 0;
-
- /** Called after a beginEditFromHost and a sequence of setParamNormalized. */
- virtual tresult PLUGIN_API endEditFromHost (ParamID paramID) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IEditControllerHostEditing, 0xC1271208, 0x70594098, 0xB9DD34B3, 0x6BB0195E)
-
- //------------------------------------------------------------------------
- } // namespace Vst
- } // namespace Steinberg
-
- //------------------------------------------------------------------------
- #include "pluginterfaces/base/falignpop.h"
- //------------------------------------------------------------------------
|