00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "againcontroller.h"
00036 #include "againparamids.h"
00037 #include "againeditor.h"
00038
00039 #include "pluginterfaces/base/ibstream.h"
00040
00041 #include <stdio.h>
00042 #include <math.h>
00043
00044
00045
00046
00047 class EditorViewElement : public CArrayElement
00048 {
00049 public:
00050 EditorViewElement (AGainEditorView* view) : view (view) { if (view) view->addRef (); }
00051 ~EditorViewElement () { if (view) view->release (); }
00052
00053 AGainEditorView* getView () { return view; }
00054
00055 protected:
00056 AGainEditorView* view;
00057 };
00058
00059
00060
00061
00062
00063 class GainParameter : public Parameter
00064 {
00065 public:
00066 GainParameter (int32 flags, int32 id);
00067
00068 virtual void toString (ParamValue normValue, String128 string) const;
00069 virtual bool fromString (const TChar* string, ParamValue& normValue) const;
00070 };
00071
00072
00073
00074
00075 GainParameter::GainParameter (int32 flags, int32 id)
00076 {
00077 Steinberg::UString (info.title, USTRINGSIZE (info.title)).assign (USTRING ("Gain"));
00078 Steinberg::UString (info.units, USTRINGSIZE (info.units)).assign (USTRING ("dB"));
00079
00080 info.flags = flags;
00081 info.id = id;
00082 info.stepCount = 0;
00083 info.defaultNormalizedValue = 0.5f;
00084 info.unitId = -1;
00085
00086 setNormalized (1.f);
00087 }
00088
00089
00090 void GainParameter::toString (ParamValue normValue, String128 string) const
00091 {
00092 char text[32];
00093 if (normValue > 0.0001)
00094 sprintf (text, "%.2f", 20 * log10f ((float)normValue));
00095 else
00096 strcpy (text, "-oo");
00097
00098 Steinberg::UString (string, 128).fromAscii (text);
00099 }
00100
00101
00102 bool GainParameter::fromString (const TChar* string, ParamValue& normValue) const
00103 {
00104 Steinberg::UString wrapper ((TChar*)string, -1);
00105 double tmp = 0.0;
00106 if (wrapper.scanFloat (tmp))
00107 {
00108
00109 if (tmp > 0.0)
00110 tmp = -tmp;
00111
00112 normValue = expf (logf (10.f) * (float)tmp / 20.f);
00113 return true;
00114 }
00115 return false;
00116 }
00117
00118
00119
00120
00121
00122 tresult PLUGIN_API AGainController::initialize (FUnknown* context)
00123 {
00124 tresult result = EditController::initialize (context);
00125 if (result != kResultOk)
00126 return result;
00127
00128
00129
00130
00131 GainParameter* gainParam = new GainParameter (ParameterInfo::kCanAutomate, kGainId);
00132 parameters.addParameter (gainParam);
00133
00134
00135 int32 stepCount = 0;
00136 ParamValue defaultVal = 0;
00137 int32 flags = ParameterInfo::kIsReadOnly;
00138 int32 tag = kVuPPMId;
00139 parameters.addParameter (USTRING ("VuPPM"), 0, stepCount, defaultVal, flags, tag);
00140
00141
00142 stepCount = 1;
00143 defaultVal = 0;
00144 flags = ParameterInfo::kCanAutomate|ParameterInfo::kIsBypass;
00145 tag = kBypassId;
00146 parameters.addParameter (USTRING ("Bypass"), 0, stepCount, defaultVal, flags, tag);
00147
00148
00149
00150 UString str (defaultMessageText, 128);
00151 str.fromAscii ("Hello World!");
00152
00153 return result;
00154 }
00155
00156
00157 tresult PLUGIN_API AGainController::terminate ()
00158 {
00159 viewsArray.removeAll ();
00160
00161 return EditController::terminate ();
00162 }
00163
00164
00165 tresult PLUGIN_API AGainController::setComponentState (IBStream* state)
00166 {
00167
00168 if (state)
00169 {
00170 float savedGain = 0.f;
00171 if (state->read (&savedGain, 4) != kResultOk)
00172 return kResultFalse;
00173
00174 setParamNormalized (kGainId, savedGain);
00175 }
00176
00177 return kResultOk;
00178 }
00179
00180
00181 IPlugView* PLUGIN_API AGainController::createView (const char* name)
00182 {
00183
00184 if (name && strcmp (name, "editor") == 0)
00185 return new AGainEditorView (this);
00186 return 0;
00187 }
00188
00189
00190 tresult PLUGIN_API AGainController::setState (IBStream* state)
00191 {
00192 tresult result = kResultFalse;
00193
00194 int8 byteOrder;
00195 if ((result = state->read (&byteOrder, sizeof (int8))) != kResultTrue)
00196 return result;
00197 if ((result = state->read (defaultMessageText, 128 * sizeof (TChar))) != kResultTrue)
00198 return result;
00199
00200
00201 if (byteOrder != BYTEORDER)
00202 {
00203 for (int32 i = 0; i < 128; i++)
00204 SWAP_16 (defaultMessageText[i])
00205 }
00206
00207
00208 for (int32 i = 0; i < viewsArray.total (); i++)
00209 {
00210 EditorViewElement* elt = (EditorViewElement*)viewsArray.at (i);
00211 if (elt)
00212 elt->getView ()->messageTextChanged ();
00213 }
00214
00215 return result;
00216 }
00217
00218
00219 tresult PLUGIN_API AGainController::getState (IBStream* state)
00220 {
00221
00222
00223
00224 int8 byteOrder = BYTEORDER;
00225 if (state->write (&byteOrder, sizeof (int8)) == kResultTrue)
00226 return state->write (defaultMessageText, 128 * sizeof (TChar));
00227 return kResultFalse;
00228 }
00229
00230
00231 tresult AGainController::receiveText (const char* text)
00232 {
00233
00234 if (text)
00235 {
00236 fprintf (stderr, "[AGainController] received: ");
00237 fprintf (stderr, text);
00238 fprintf (stderr, "\n");
00239 }
00240 return kResultOk;
00241 }
00242
00243
00244 tresult PLUGIN_API AGainController::setParamNormalized (ParamID tag, ParamValue value)
00245 {
00246
00247 tresult result = EditController::setParamNormalized (tag, value);
00248
00249 for (int32 i = 0; i < viewsArray.total (); i++)
00250 {
00251 EditorViewElement* elt = (EditorViewElement*)viewsArray.at (i);
00252 if (elt && elt->getView ())
00253 {
00254 elt->getView ()->update (tag, value);
00255 }
00256 }
00257
00258 return result;
00259 }
00260
00261
00262 tresult PLUGIN_API AGainController::getParamStringByValue (ParamID tag, ParamValue valueNormalized, String128 string)
00263 {
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282 return EditController::getParamStringByValue (tag, valueNormalized, string);
00283 }
00284
00285
00286 tresult PLUGIN_API AGainController::getParamValueByString (ParamID tag, TChar* string, ParamValue& valueNormalized)
00287 {
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303 return EditController::getParamValueByString (tag, string, valueNormalized);
00304 }
00305
00306
00307 void AGainController::addDependentView (AGainEditorView* view)
00308 {
00309 EditorViewElement* elt = new EditorViewElement (view);
00310 viewsArray.add (elt);
00311 }
00312
00313
00314 void AGainController::removeDependentView (AGainEditorView* view)
00315 {
00316 for (int32 i = 0; i < viewsArray.total (); i++)
00317 {
00318 EditorViewElement* elt = (EditorViewElement*)viewsArray.at (i);
00319 if (elt)
00320 {
00321 if (elt->getView () == view)
00322 {
00323 viewsArray.removeAt (i);
00324 break;
00325 }
00326 }
00327 }
00328 }
00329
00330
00331 void AGainController::setDefaultMessageText (String128 text)
00332 {
00333 UString str (defaultMessageText, 128);
00334 str.assign (text, -1);
00335 }
00336
00337
00338 TChar* AGainController::getDefaultMessageText ()
00339 {
00340 return defaultMessageText;
00341 }