|
- //------------------------------------------------------------------------
- // Project : VST SDK
- //
- // Category : Interfaces
- // Filename : pluginterfaces/vst/ivstunits.h
- // Created by : Steinberg, 2005
- // Description : VST Units 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/funknown.h"
- #include "pluginterfaces/vst/vsttypes.h"
-
- //------------------------------------------------------------------------
- #include "pluginterfaces/base/falignpush.h"
- //------------------------------------------------------------------------
-
- //------------------------------------------------------------------------
- namespace Steinberg {
- class IBStream;
- //------------------------------------------------------------------------
- namespace Vst {
- //------------------------------------------------------------------------
- /** Special UnitIDs for UnitInfo */
- static const UnitID kRootUnitId = 0; ///< identifier for the top level unit (root)
- static const UnitID kNoParentUnitId = -1; ///< used for the root unit which does not have a parent.
-
- //------------------------------------------------------------------------
- /** Special ProgramListIDs for UnitInfo */
- static const ProgramListID kNoProgramListId = -1; ///< no programs are used in the unit.
-
- //------------------------------------------------------------------------
- /** Basic Unit Description.
- \see IUnitInfo
- */
- struct UnitInfo
- {
- UnitID id; ///< unit identifier
- UnitID parentUnitId; ///< identifier of parent unit (kNoParentUnitId: does not apply, this unit is the root)
- String128 name; ///< name, optional for the root component, required otherwise
- ProgramListID programListId; ///< id of program list used in unit (kNoProgramListId = no programs used in this unit)
- };
-
- //------------------------------------------------------------------------
- /** Basic Program List Description.
- \see IUnitInfo
- */
- struct ProgramListInfo
- {
- ProgramListID id; ///< program list identifier
- String128 name; ///< name of program list
- int32 programCount; ///< number of programs in this list
- };
-
- //------------------------------------------------------------------------
- /** Special programIndex value for IUnitHandler::notifyProgramListChange */
- static const int32 kAllProgramInvalid = -1; ///< all program information is invalid
-
- //------------------------------------------------------------------------
- /** Host callback for unit support: Vst::IUnitHandler
- \ingroup vstIHost vst300
- - [host imp]
- - [extends IComponentHandler]
- - [released: 3.0.0]
- - [optional]
-
- Host callback interface, used with IUnitInfo.
- Retrieve via queryInterface from IComponentHandler.
-
- \see \ref vst3Units, IUnitInfo
- */
- class IUnitHandler : public FUnknown
- {
- public:
- //------------------------------------------------------------------------
- /** Notify host when a module is selected in plug-in GUI. */
- virtual tresult PLUGIN_API notifyUnitSelection (UnitID unitId) = 0;
-
- /** Tell host that the plug-in controller changed a program list (rename, load, PitchName changes).
- \param listId is the specified program list ID to inform.
- \param programIndex : when kAllProgramInvalid, all program information is invalid, otherwise only the program of given index. */
- virtual tresult PLUGIN_API notifyProgramListChange (ProgramListID listId, int32 programIndex) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IUnitHandler, 0x4B5147F8, 0x4654486B, 0x8DAB30BA, 0x163A3C56)
-
- //------------------------------------------------------------------------
- /** Host callback for extended unit support: Vst::IUnitHandler2
- \ingroup vstIHost vst365
- - [host imp]
- - [extends IUnitHandler]
- - [released: 3.6.5]
- - [optional]
-
- Host callback interface, used with IUnitInfo.
- Retrieve via queryInterface from IComponentHandler.
-
- The plug-in has the possibility to inform the host with notifyUnitByBusChange that something has
- changed in the bus - unit assignment, the host then has to recall IUnitInfo::getUnitByBus in order
- to get the new relations between busses and unit.
-
- \see \ref vst3Units, IUnitHandler
- */
- class IUnitHandler2 : public FUnknown
- {
- public:
- //------------------------------------------------------------------------
- /** Tell host that assignment Unit-Bus defined by IUnitInfo::getUnitByBus has changed. */
- virtual tresult PLUGIN_API notifyUnitByBusChange () = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IUnitHandler2, 0xF89F8CDF, 0x699E4BA5, 0x96AAC9A4, 0x81452B01)
-
- //------------------------------------------------------------------------
- /** Edit controller extension to describe the plug-in structure: Vst::IUnitInfo
- \ingroup vstIPlug vst300
- - [plug imp]
- - [extends IEditController]
- - [released: 3.0.0]
- - [optional]
-
- IUnitInfo describes the internal structure of the plug-in.
- - The root unit is the component itself, so getUnitCount must return 1 at least.
- - The root unit id has to be 0 (kRootUnitId).
- - Each unit can reference one program list - this reference must not change.
- - Each unit, using a program list, references one program of the list.
-
- \see \ref vst3Units, IUnitHandler
- */
- class IUnitInfo : public FUnknown
- {
- public:
- //------------------------------------------------------------------------
- /** Returns the flat count of units. */
- virtual int32 PLUGIN_API getUnitCount () = 0;
-
- /** Gets UnitInfo for a given index in the flat list of unit. */
- virtual tresult PLUGIN_API getUnitInfo (int32 unitIndex, UnitInfo& info /*out*/) = 0;
-
- /** Component intern program structure. */
- /** Gets the count of Program List. */
- virtual int32 PLUGIN_API getProgramListCount () = 0;
-
- /** Gets for a given index the Program List Info. */
- virtual tresult PLUGIN_API getProgramListInfo (int32 listIndex, ProgramListInfo& info /*out*/) = 0;
-
- /** Gets for a given program list ID and program index its program name. */
- virtual tresult PLUGIN_API getProgramName (ProgramListID listId, int32 programIndex, String128 name /*out*/) = 0;
-
- /** Gets for a given program list ID, program index and attributeId the associated attribute value. */
- virtual tresult PLUGIN_API getProgramInfo (ProgramListID listId, int32 programIndex,
- CString attributeId /*in*/, String128 attributeValue /*out*/) = 0;
-
- /** Returns kResultTrue if the given program index of a given program list ID supports PitchNames. */
- virtual tresult PLUGIN_API hasProgramPitchNames (ProgramListID listId, int32 programIndex) = 0;
-
- /** Gets the PitchName for a given program list ID, program index and pitch.
- If PitchNames are changed the plug-in should inform the host with IUnitHandler::notifyProgramListChange. */
- virtual tresult PLUGIN_API getProgramPitchName (ProgramListID listId, int32 programIndex,
- int16 midiPitch, String128 name /*out*/) = 0;
-
- // units selection --------------------
- /** Gets the current selected unit. */
- virtual UnitID PLUGIN_API getSelectedUnit () = 0;
-
- /** Sets a new selected unit. */
- virtual tresult PLUGIN_API selectUnit (UnitID unitId) = 0;
-
- /** Gets the according unit if there is an unambiguous relation between a channel or a bus and a unit.
- This method mainly is intended to find out which unit is related to a given MIDI input channel. */
- virtual tresult PLUGIN_API getUnitByBus (MediaType type, BusDirection dir, int32 busIndex,
- int32 channel, UnitID& unitId /*out*/) = 0;
-
- /** Receives a preset data stream.
- - If the component supports program list data (IProgramListData), the destination of the data
- stream is the program specified by list-Id and program index (first and second parameter)
- - If the component supports unit data (IUnitData), the destination is the unit specified by the first
- parameter - in this case parameter programIndex is < 0). */
- virtual tresult PLUGIN_API setUnitProgramData (int32 listOrUnitId, int32 programIndex, IBStream* data) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IUnitInfo, 0x3D4BD6B5, 0x913A4FD2, 0xA886E768, 0xA5EB92C1)
-
- //------------------------------------------------------------------------
- /** Component extension to access program list data: Vst::IProgramListData
- \ingroup vstIPlug vst300
- - [plug imp]
- - [extends IComponent]
- - [released: 3.0.0]
- - [optional]
-
- A component can support program list data via this interface or/and
- unit preset data (IUnitData).
-
- \see IUnitData, \ref vst3MultitimbralPrograms
- */
- class IProgramListData : public FUnknown
- {
- public:
- //------------------------------------------------------------------------
- /** Returns kResultTrue if the given Program List ID supports Program Data. */
- virtual tresult PLUGIN_API programDataSupported (ProgramListID listId) = 0;
-
- /** Gets for a given program list ID and program index the program Data. */
- virtual tresult PLUGIN_API getProgramData (ProgramListID listId, int32 programIndex, IBStream* data) = 0;
-
- /** Sets for a given program list ID and program index a program Data. */
- virtual tresult PLUGIN_API setProgramData (ProgramListID listId, int32 programIndex, IBStream* data) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IProgramListData, 0x8683B01F, 0x7B354F70, 0xA2651DEC, 0x353AF4FF)
-
- //------------------------------------------------------------------------
- /** Component extension to access unit data: Vst::IUnitData
- \ingroup vstIPlug vst300
- - [plug imp]
- - [extends IComponent]
- - [released: 3.0.0]
- - [optional]
-
- A component can support unit preset data via this interface or
- program list data (IProgramListData).
-
- \see \ref vst3ProgramLists
- */
- class IUnitData : public FUnknown
- {
- public:
- //------------------------------------------------------------------------
- /** Returns kResultTrue if the specified unit supports export and import of preset data. */
- virtual tresult PLUGIN_API unitDataSupported (UnitID unitID) = 0;
-
- /** Gets the preset data for the specified unit. */
- virtual tresult PLUGIN_API getUnitData (UnitID unitId, IBStream* data) = 0;
-
- /** Sets the preset data for the specified unit. */
- virtual tresult PLUGIN_API setUnitData (UnitID unitId, IBStream* data) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IUnitData, 0x6C389611, 0xD391455D, 0xB870B833, 0x94A0EFDD)
-
- //------------------------------------------------------------------------
- } // namespace Vst
- } // namespace Steinberg
-
- //------------------------------------------------------------------------
- #include "pluginterfaces/base/falignpop.h"
- //------------------------------------------------------------------------
|