vsteditcontroller.cpp

Go to the documentation of this file.
00001 //-----------------------------------------------------------------------------
00002 // Project     : VST SDK
00003 // Version     : 3.0
00004 //
00005 // Category    : Helpers
00006 // Filename    : vsteditcontroller.cpp
00007 // Created by  : Steinberg, 04/2005
00008 // Modified    : $Date: 2008/01/09 12:51:07 $
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 #include "vsteditcontroller.h"
00037 
00038 #include <stdio.h>
00039 
00040 namespace Steinberg {
00041 namespace Vst {
00042 
00043 //------------------------------------------------------------------------
00044 // Parameter Implementation
00045 //------------------------------------------------------------------------
00046 Parameter::Parameter ()
00047 : valueNormalized (0.)
00048 {
00049         memset (&info, 0, sizeof (ParameterInfo));
00050 }
00051 
00052 //------------------------------------------------------------------------
00053 Parameter::Parameter (const ParameterInfo& info)
00054 : info (info)
00055 , valueNormalized (info.defaultNormalizedValue)
00056 {}
00057 
00058 //------------------------------------------------------------------------
00059 Parameter::~Parameter ()
00060 {}
00061         
00062 //------------------------------------------------------------------------
00063 bool Parameter::setNormalized (ParamValue normValue)
00064 {
00065         if (normValue > 1.0)
00066                 normValue = 1.0;
00067         else if (normValue < 0.)
00068                 normValue = 0.;
00069         
00070         if (normValue != valueNormalized)
00071         {
00072                 valueNormalized = normValue;
00073                 return true;    
00074         }
00075         return false;
00076 }
00077 
00078 //------------------------------------------------------------------------
00079 void Parameter::toString (ParamValue normValue, String128 string) const
00080 {
00081         Steinberg::UString wrapper (string, USTRINGSIZE (String128));
00082         if (info.stepCount == 1)
00083         {
00084                 if (valueNormalized > 0.5)
00085                         wrapper.fromAscii ("On");
00086                 else
00087                         wrapper.fromAscii ("Off");
00088         }
00089         else
00090                 wrapper.printFloat (normValue);
00091 }
00092 
00093 //------------------------------------------------------------------------
00094 bool Parameter::fromString (const TChar* string, ParamValue& normValue) const
00095 {
00096         Steinberg::UString wrapper ((TChar*)string, -1); // don't know buffer size here!
00097         return wrapper.scanFloat (normValue);
00098 }
00099 
00100 //------------------------------------------------------------------------
00101 ParamValue Parameter::toPlain (ParamValue normValue) const
00102 {
00103         return normValue;
00104 }
00105 
00106 //------------------------------------------------------------------------
00107 ParamValue Parameter::toNormalized (ParamValue plainValue) const
00108 {
00109         return plainValue;
00110 }
00111 
00112 //------------------------------------------------------------------------
00113 // ParameterContainer Implementation
00114 //------------------------------------------------------------------------
00115 ParameterContainer::ParameterContainer ()
00116 : params (10)
00117 {}
00118 
00119 //------------------------------------------------------------------------
00120 Parameter* ParameterContainer::addParameter (const ParameterInfo& info)
00121 {
00122         Parameter* p = new Parameter (info);
00123         params.add (p);
00124         return p;
00125 }
00126 
00127 //------------------------------------------------------------------------
00128 Parameter* ParameterContainer::getParameter (ParamID tag)
00129 {
00130         for (int32 i = 0; i < params.total (); i++)
00131         {
00132                 Parameter* param = (Parameter*)params.at (i);
00133                 if (param)
00134                 {
00135                         ParameterInfo info = param->getInfo ();
00136                         if (info.id == tag)
00137                                 return param;
00138                 }
00139         }
00140         return 0;
00141 }
00142 
00143 //------------------------------------------------------------------------
00144 Parameter* ParameterContainer::addParameter (const TChar* title, const TChar* units, int32 stepCount, ParamValue defaultNormalizedValue, int32 flags, int32 tag)
00145 {
00146         if (!title)
00147                 return 0;
00148 
00149         ParameterInfo info = {0};
00150 
00151         Steinberg::UString (info.title, USTRINGSIZE (info.title)).assign (title);
00152         Steinberg::UString uUnits (info.units, USTRINGSIZE (info.units));
00153         if (units)
00154                 uUnits.assign (units);
00155 
00156         info.stepCount = stepCount;
00157         info.defaultNormalizedValue = defaultNormalizedValue;
00158         info.flags = flags;
00159         info.id = (tag >= 0) ? tag : getParameterCount ();
00160         info.unitId = -1;
00161         
00162         return addParameter (info);
00163 }
00164 
00165 
00166 //------------------------------------------------------------------------
00167 // EditController Implementation
00168 //------------------------------------------------------------------------
00169 EditController::EditController ()
00170 : componentHandler (0)
00171 {}
00172 
00173 //------------------------------------------------------------------------
00174 tresult PLUGIN_API EditController::queryInterface (const char* iid, void** obj)
00175 {
00176         QUERY_INTERFACE (iid, obj, IEditController::iid, IEditController)
00177         return ComponentBase::queryInterface (iid, obj);
00178 }
00179 
00180 //------------------------------------------------------------------------
00181 tresult PLUGIN_API EditController::initialize (FUnknown* context)
00182 {
00183         return ComponentBase::initialize (context);
00184 }
00185 
00186 //------------------------------------------------------------------------
00187 tresult PLUGIN_API EditController::terminate ()
00188 {
00189         parameters.removeAll ();
00190 
00191         if (componentHandler)
00192         {
00193                 componentHandler->release ();
00194                 componentHandler = 0;
00195         }
00196 
00197         return ComponentBase::terminate ();
00198 }
00199 
00200 //------------------------------------------------------------------------
00201 tresult PLUGIN_API EditController::setComponentState (IBStream* state)
00202 {
00203         return kNotImplemented;
00204 }
00205 
00206 //------------------------------------------------------------------------
00207 tresult PLUGIN_API EditController::setState (IBStream* state)
00208 {
00209         return kNotImplemented;
00210 }
00211 
00212 //------------------------------------------------------------------------
00213 tresult PLUGIN_API EditController::getState (IBStream* state)
00214 {
00215         return kNotImplemented;
00216 }
00217 
00218 //------------------------------------------------------------------------
00219 int32 PLUGIN_API EditController::getParameterCount ()
00220 {
00221         return parameters.getParameterCount ();
00222 }
00223 
00224 //------------------------------------------------------------------------
00225 tresult PLUGIN_API EditController::getParameterInfo (int32 paramIndex, ParameterInfo& info)
00226 {
00227         Parameter* parameter = parameters.getParameterByIndex (paramIndex);
00228         if (parameter)
00229         {
00230                 info = parameter->getInfo ();
00231                 return kResultTrue;
00232         }
00233         return kResultFalse;
00234 }
00235 
00236 //------------------------------------------------------------------------
00237 tresult PLUGIN_API EditController::getParamStringByValue (ParamID tag, ParamValue valueNormalized, String128 string)
00238 {
00239         Parameter* parameter = parameters.getParameter (tag);
00240         if (parameter)
00241         {
00242                 parameter->toString (valueNormalized, string);
00243                 return kResultTrue;
00244         }
00245         return kResultFalse;
00246 }
00247 
00248 //------------------------------------------------------------------------
00249 tresult PLUGIN_API EditController::getParamValueByString (ParamID tag, TChar* string, ParamValue& valueNormalized)
00250 {
00251         Parameter* parameter = parameters.getParameter (tag);
00252         if (parameter)
00253         {
00254                 if (parameter->fromString (string, valueNormalized))
00255                         return kResultTrue;
00256         }
00257         return kResultFalse;
00258 }
00259 
00260 //------------------------------------------------------------------------
00261 ParamValue PLUGIN_API EditController::normalizedParamToPlain (ParamID tag, ParamValue valueNormalized)
00262 {
00263         Parameter* parameter = parameters.getParameter (tag);
00264         if (parameter)
00265                 return parameter->toPlain (valueNormalized);
00266         return valueNormalized;
00267 }
00268 
00269 //------------------------------------------------------------------------
00270 ParamValue PLUGIN_API EditController::plainParamToNormalized (ParamID tag, ParamValue plainValue)
00271 {
00272         Parameter* parameter = parameters.getParameter (tag);
00273         if (parameter)
00274                 return parameter->toNormalized (plainValue);
00275         return plainValue;
00276 }
00277 
00278 //------------------------------------------------------------------------
00279 ParamValue PLUGIN_API EditController::getParamNormalized (ParamID tag)
00280 {
00281         Parameter* parameter = parameters.getParameter (tag);
00282         if (parameter)
00283                 return parameter->getNormalized ();
00284         return 0.0;
00285 }
00286 
00287 //------------------------------------------------------------------------
00288 tresult PLUGIN_API EditController::setParamNormalized (ParamID tag, ParamValue value)
00289 {
00290         Parameter* parameter = parameters.getParameter (tag);
00291         if (parameter)
00292         {
00293                 parameter->setNormalized (value);
00294                 return kResultTrue;
00295         }
00296         return kResultFalse;
00297 }
00298 
00299 //------------------------------------------------------------------------
00300 tresult PLUGIN_API EditController::setComponentHandler (IComponentHandler* newHandler)
00301 {
00302         if (componentHandler == newHandler)
00303                 return kResultTrue;
00304 
00305         if (componentHandler)
00306                 componentHandler->release ();
00307 
00308         componentHandler = newHandler;
00309         if (componentHandler)
00310                 componentHandler->addRef ();
00311                 
00312         return kResultTrue;
00313 }
00314 
00315 
00316 //------------------------------------------------------------------------
00317 IPlugView* PLUGIN_API EditController::createView (const char* name)
00318 {
00319         return 0;
00320 }
00321 
00322 //------------------------------------------------------------------------
00323 tresult EditController::beginEdit (ParamID tag)
00324 {
00325         if (componentHandler)
00326                 return componentHandler->beginEdit (tag);
00327         return kResultFalse;
00328 }
00329 
00330 //------------------------------------------------------------------------
00331 tresult EditController::performEdit (ParamID tag, ParamValue valueNormalized)
00332 {
00333         if (componentHandler)
00334                 return componentHandler->performEdit (tag, valueNormalized);
00335         return kResultFalse;
00336 }
00337 
00338 //------------------------------------------------------------------------
00339 tresult EditController::endEdit (ParamID tag)
00340 {
00341         if (componentHandler)
00342                 return componentHandler->endEdit (tag);
00343         return kResultFalse;
00344 }
00345 
00346 
00347 //------------------------------------------------------------------------
00348 // EditorView Implementation
00349 //------------------------------------------------------------------------
00350 EditorView::EditorView (EditController* controller, ViewRect* size)
00351 : CPluginView (size)
00352 , controller (controller)
00353 {
00354 }
00355 
00356 //------------------------------------------------------------------------
00357 EditorView::~EditorView ()
00358 {
00359 }
00360 
00361 }} // namespace
Empty

Copyright ©2008 Steinberg Media Technologies. All Rights Reserved.