154 lines
5.6 KiB
C++
154 lines
5.6 KiB
C++
//------------------------------------------------------------------------
|
|
// Project : VST SDK
|
|
//
|
|
// Category : Helpers
|
|
// Filename : public.sdk/source/vst/vstrepresentation.h
|
|
// Created by : Steinberg, 08/2010
|
|
// Description : VST Representation Helper
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
// 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/vst/ivsteditcontroller.h"
|
|
#include "pluginterfaces/vst/ivstrepresentation.h"
|
|
|
|
//------------------------------------------------------------------------
|
|
namespace Steinberg {
|
|
class IBStreamer;
|
|
|
|
namespace Vst {
|
|
|
|
//------------------------------------------------------------------------
|
|
/** Helper for XML Representation creation.
|
|
\ingroup vstClasses
|
|
|
|
Here an example of how to use this helper:
|
|
\n
|
|
\code{.cpp}
|
|
//------------------------------------------------------------------------
|
|
// here the parameter ids used by this example
|
|
enum {
|
|
kGain = 129,
|
|
kSize,
|
|
kCutoff,
|
|
kResonance,
|
|
kMaster,
|
|
kEnable1,
|
|
kEnable2,
|
|
kFrequency1,
|
|
kFrequency2,
|
|
kGain1,
|
|
kGain2,
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
tresult PLUGIN_API MyPlugInController::getXmlRepresentationStream (Vst::RepresentationInfo& info,
|
|
IBStream* stream)
|
|
{
|
|
String name (info.name);
|
|
if (name == GENERIC_8_CELLS)
|
|
{
|
|
Vst::XmlRepresentationHelper helper (info, "My Company Name", "My Product Name", gPlugProcessorClassID, stream);
|
|
|
|
helper.startPage ("Main Page");
|
|
helper.startEndCellOneLayer (Vst::LayerType::kKnob, kGain);
|
|
helper.startEndCellOneLayer (Vst::LayerType::kKnob, kSize);
|
|
helper.startEndCellOneLayer (Vst::LayerType::kKnob, kMaster);
|
|
helper.startEndCell (); // empty cell
|
|
helper.startEndCellOneLayer (Vst::LayerType::kKnob, kCutoff);
|
|
helper.startEndCellOneLayer (Vst::LayerType::kKnob, kResonance);
|
|
helper.startEndCell (); // empty cell
|
|
helper.startEndCell (); // empty cell
|
|
helper.endPage ();
|
|
|
|
helper.startPage ("Page 2");
|
|
helper.startEndCellOneLayer (Vst::LayerType::kSwitch, kEnable1);
|
|
helper.startEndCellOneLayer (Vst::LayerType::kKnob, kFrequency1);
|
|
helper.startEndCellOneLayer (Vst::LayerType::kKnob, kGain1);
|
|
helper.startEndCell (); // empty
|
|
helper.startEndCellOneLayer (Vst::LayerType::kSwitch, kEnable2);
|
|
helper.startEndCellOneLayer (Vst::LayerType::kKnob, kFrequency2);
|
|
helper.startEndCellOneLayer (Vst::LayerType::kKnob, kGain2);
|
|
helper.startEndCell (); // empty
|
|
helper.endPage ();
|
|
|
|
return kResultTrue;
|
|
}
|
|
return kResultFalse;
|
|
}
|
|
\endcode
|
|
*/
|
|
class XmlRepresentationHelper
|
|
{
|
|
public:
|
|
XmlRepresentationHelper (const RepresentationInfo& info, const FIDString companyName,
|
|
const FIDString pluginName, const TUID& pluginUID, IBStream* stream);
|
|
virtual ~XmlRepresentationHelper ();
|
|
|
|
bool startPage (FIDString name, int32 unitID = -1); ///< Starts a Page before adding a Cell.
|
|
bool endPage (); ///< Ends a Page before opening a new one.
|
|
bool startCell (); ///< Starts a Cell before adding a Layer.
|
|
bool endCell (); ///< Ends a Cell when no more layer needed.
|
|
bool startEndCell (); ///< Creates an empty cell (alignment for example).
|
|
|
|
/** Starts a layer for a given type (Vst::LayerType), a parameter id, optionally a function
|
|
(Vst::AttributesFunction) and a style (Vst::AttributesStyle). */
|
|
bool startLayer (int32 type, int32 id, FIDString _function = nullptr, FIDString style = nullptr);
|
|
|
|
/** Ends a layer before adding new one */
|
|
bool endLayer ();
|
|
|
|
/** Same than startLayer except that the layer will be ended automatically (no need to call
|
|
* endLayer). */
|
|
bool startEndLayer (int32 type, int32 id, FIDString _function = nullptr, FIDString style = nullptr);
|
|
|
|
/** Creates a Cell with 1 Layer and end it, could be only call after a call to startPage */
|
|
bool startEndCellOneLayer (int32 type, int32 id, FIDString _function = nullptr, FIDString style = nullptr);
|
|
|
|
/** Starts a layer for a given parameter info and an optional function
|
|
* (Vst::AttributesFunction). */
|
|
bool startLayer (Vst::ParameterInfo& info, FIDString _function = nullptr);
|
|
|
|
/** Same than startLayer with end created automatically. */
|
|
bool startEndLayer (Vst::ParameterInfo& info, FIDString _function = nullptr);
|
|
|
|
/** Creates a Cell with 1 Layer and end it, could be only call after a call to startPage. */
|
|
bool startEndCellOneLayer (Vst::ParameterInfo& info, FIDString _function = nullptr);
|
|
|
|
/** Creates a Cell with 1 Layer (with name) and end it, could be only call after a call to
|
|
* startPage. */
|
|
bool startEndCellOneLayerWithParamName (Vst::ParameterInfo& info, FIDString _function = nullptr);
|
|
|
|
protected:
|
|
enum
|
|
{
|
|
kInRepresentation = 0,
|
|
kInPage,
|
|
kInCell,
|
|
kInLayer,
|
|
kInTitleDisplay,
|
|
kInName
|
|
};
|
|
|
|
bool startLayer (int32 type, int32 id, FIDString _function, FIDString style, bool ended);
|
|
bool startLayer (Vst::ParameterInfo& info, FIDString _function, bool ended);
|
|
|
|
bool startEndTitleDisplay (Vst::ParameterInfo& info);
|
|
|
|
bool checkState (int32 newState);
|
|
|
|
IPtr<IBStream> stream;
|
|
int32 state;
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
} // namespace Vst
|
|
} // namespace Steinberg
|