vsteditcontroller.h

Go to the documentation of this file.
00001 //------------------------------------------------------------------------
00002 // Project     : VST SDK
00003 // Version     : 3.0
00004 //
00005 // Category    : Helpers
00006 // Filename    : vsteditcontroller.h
00007 // Created by  : Steinberg, 04/2005
00008 // Modified    : $Date: 2008/01/10 10:36:23 $
00009 // Description : VST Edit Controller Implementation
00010 //
00011 //-----------------------------------------------------------------------------
00012 // LICENSE
00013 // © 2008, Steinberg Media Technologies GmbH, All Rights Reserved
00014 //-----------------------------------------------------------------------------
00015 // This Software Development Kit may not be distributed in parts or its entirety  
00016 // without prior written agreement by Steinberg Media Technologies GmbH. 
00017 // This SDK must not be used to re-engineer or manipulate any technology used  
00018 // in any Steinberg or Third-party application or software module, 
00019 // unless permitted by law.
00020 // Neither the name of the Steinberg Media Technologies nor the names of its
00021 // contributors may be used to endorse or promote products derived from this 
00022 // software without specific prior written permission.
00023 // 
00024 // THIS SDK IS PROVIDED BY STEINBERG MEDIA TECHNOLOGIES GMBH "AS IS" AND
00025 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
00026 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
00027 // IN NO EVENT SHALL STEINBERG MEDIA TECHNOLOGIES GMBH BE LIABLE FOR ANY DIRECT, 
00028 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
00029 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
00030 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
00031 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
00032 // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
00033 // OF THE POSSIBILITY OF SUCH DAMAGE.
00034 //-----------------------------------------------------------------------------
00035 
00036 #ifndef __vsteditcontroller__
00037 #define __vsteditcontroller__
00038 
00039 #include "public.sdk/source/vst/vstcomponentbase.h"
00040 #include "public.sdk/source/common/pluginview.h"
00041 #include "public.sdk/source/common/array.h"
00042 
00043 #include "pluginterfaces/vst/ivsteditcontroller.h"
00044 
00045 //------------------------------------------------------------------------
00046 namespace Steinberg {
00047 namespace Vst {
00048 
00049 //------------------------------------------------------------------------
00050 // Parameter declaration
00051 //------------------------------------------------------------------------
00052 class Parameter: public CArrayElement
00053 {
00054 public:
00055 //------------------------------------------------------------------------
00056         Parameter ();
00057         Parameter (const ParameterInfo&);
00058         virtual ~Parameter ();
00059         
00061         const ParameterInfo& getInfo () const {return info;}
00062 
00064         ParamValue getNormalized () const { return valueNormalized; }
00066         bool setNormalized (ParamValue v);
00067 
00069         virtual void toString (ParamValue valueNormalized, String128 string) const;
00071         virtual bool fromString (const TChar* string, ParamValue& valueNormalized) const;
00072         
00074         virtual ParamValue toPlain (ParamValue valueNormalized) const;
00076         virtual ParamValue toNormalized (ParamValue plainValue) const;
00077 
00078 //------------------------------------------------------------------------
00079 protected:
00080         ParameterInfo info;
00081         ParamValue valueNormalized;
00082 };
00083 
00084 //------------------------------------------------------------------------
00085 // ParameterContainer declaration
00086 //------------------------------------------------------------------------
00087 class ParameterContainer
00088 {
00089 public:
00090 //------------------------------------------------------------------------
00091         ParameterContainer ();
00092 
00094         Parameter* addParameter (const ParameterInfo& info);
00095 
00097         Parameter* addParameter (const TChar* title, const TChar* units = 0, 
00098                                                          int32 stepCount = 0, 
00099                                                          ParamValue defaultValueNormalized = 0., 
00100                                                          int32 flags = ParameterInfo::kCanAutomate, 
00101                                                          int32 tag = -1);
00102         
00104         bool addParameter (Parameter* p) { return params.add (p); }
00105 
00107         int32 getParameterCount () const { return params.total (); }
00108         
00110         Parameter* getParameterByIndex (int32 index) { return (Parameter*)params.at (index); }
00111 
00113         void removeAll () { return params.removeAll (); }
00114 
00116         Parameter* getParameter (ParamID tag);
00117 
00118 //------------------------------------------------------------------------
00119 protected:
00120         CArray params;
00121 };
00122 
00123 //------------------------------------------------------------------------
00124 // EditController
00125 //------------------------------------------------------------------------
00126 class EditController: public ComponentBase,
00127                                           public IEditController
00128 {
00129 public:
00130 //------------------------------------------------------------------------
00131         EditController ();
00132 
00133         //---from IEditController-------
00134         tresult PLUGIN_API setComponentState (IBStream* state);
00135         tresult PLUGIN_API setState (IBStream* state);
00136         tresult PLUGIN_API getState (IBStream* state);
00137         int32 PLUGIN_API getParameterCount ();
00138         tresult PLUGIN_API getParameterInfo (int32 paramIndex, ParameterInfo& info);
00139         tresult PLUGIN_API getParamStringByValue (ParamID tag, ParamValue valueNormalized, String128 string);
00140         tresult PLUGIN_API getParamValueByString (ParamID tag, TChar* string, ParamValue& valueNormalized);
00141         ParamValue PLUGIN_API normalizedParamToPlain (ParamID tag, ParamValue valueNormalized);
00142         ParamValue PLUGIN_API plainParamToNormalized (ParamID tag, ParamValue plainValue);
00143         ParamValue PLUGIN_API getParamNormalized (ParamID tag);
00144         tresult PLUGIN_API setParamNormalized (ParamID tag, ParamValue value);
00145         tresult PLUGIN_API setComponentHandler (IComponentHandler* handler);
00146         IPlugView* PLUGIN_API createView (const char* name);
00147 
00148         //---from ComponentBase---------
00149         DELEGATE_REFCOUNT (ComponentBase)
00150         tresult PLUGIN_API queryInterface (const char* iid, void** obj);
00151         tresult PLUGIN_API initialize (FUnknown* context);
00152         tresult PLUGIN_API terminate  ();
00153 
00154         //---Internal Methods-------
00155         tresult beginEdit (ParamID tag);
00156         tresult performEdit (ParamID tag, ParamValue valueNormalized);
00157         tresult endEdit (ParamID tag);
00158 
00159 //------------------------------------------------------------------------
00160 protected:
00161         IComponentHandler* componentHandler;
00162         ParameterContainer parameters;
00163 };
00164 
00165 //------------------------------------------------------------------------
00166 // EditorView
00167 //------------------------------------------------------------------------
00168 class EditorView: public CPluginView
00169 {
00170 public:
00171 //------------------------------------------------------------------------
00172         EditorView (EditController* controller, ViewRect* size = 0);
00173         ~EditorView ();
00174 
00176         EditController* getController () { return controller; } 
00177 
00178 //------------------------------------------------------------------------
00179 protected:
00180         EditController* controller;
00181 };
00182 
00183 //------------------------------------------------------------------------
00184 } // namespace Vst
00185 } // namespace Steinberg
00186 
00187 #endif  // __vsteditcontroller__
Empty

Copyright ©2008 Steinberg Media Technologies. All Rights Reserved.