00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __OP_Parameters_h__
00022 #define __OP_Parameters_h__
00023
00024 #include "OP_API.h"
00025 #include <iostream.h>
00026 #include <SYS/SYS_Types.h>
00027 #include <UT/UT_Assert.h>
00028 #include <UT/UT_Defines.h>
00029 #include <UT/UT_LockedRawPtr.h>
00030 #include <UT/UT_String.h>
00031 #include <UT/UT_Thread.h>
00032 #include <EXPR/EX_Error.h>
00033 #include <CH/CH_ExprLanguage.h>
00034 #include <PRM/PRM_ChanState.h>
00035 #include <PRM/PRM_ParmList.h>
00036 #include <PRM/PRM_ParmOwner.h>
00037 #include "OP_Value.h"
00038 #include "OP_Error.h"
00039 #include "OP_Stat.h"
00040 #include "OP_Lock.h"
00041
00042 class UT_BitArray;
00043 class UT_Ramp;
00044 class PRM_Parm;
00045 class PRM_ParmList;
00046 class PRM_ScriptPage;
00047 class PRM_ScriptImports;
00048 class PRM_BatchList;
00049 class CH_LocalVariable;
00050 class CMD_Args;
00051 class OP_Channels;
00052 class OP_Context;
00053 class OP_Operator;
00054 class OP_ParmCache;
00055 class OP_PostIt;
00056 class OP_MultiparmInfo;
00057 class OP_PropertyLookupList;
00058 class OP_SpareParms;
00059
00060 enum OP_ScopeOp {
00061 OP_SCOPE_SET,
00062 OP_SCOPE_ADD,
00063 OP_SCOPE_REMOVE,
00064 OP_SCOPE_NUM_OPS
00065 };
00066
00067 class OP_API OP_ScopeOptions
00068 {
00069 public:
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083 OP_ScopeOptions(bool allow_nonchannels, bool exclude_animated,
00084 bool exclude_constant, bool include_only_nonint_keys) :
00085 myAllowNonChannels(allow_nonchannels),
00086 myExcludeAnimated(exclude_animated),
00087 myExcludeConstant(exclude_constant),
00088 myIncludeOnlyNonIntKeys(include_only_nonint_keys) { }
00089
00090 bool myAllowNonChannels;
00091 bool myExcludeAnimated;
00092 bool myExcludeConstant;
00093 bool myIncludeOnlyNonIntKeys;
00094 };
00095
00096 class OP_API OP_Parameters : public PRM_ParmOwner
00097 {
00098 public:
00099 const UT_String &getName() const { return myName; }
00100 OP_Operator *getOperator() const { return myTableEntry; }
00101
00102 virtual void getFullPath(UT_String &str) const;
00103
00104
00105
00106
00107
00108 unsigned disableParmsAndSpareParms();
00109
00110
00111
00112 unsigned checkDisableForParm(PRM_Parm &parm,
00113 const UT_StringArray *skipparms);
00114
00115
00116 virtual unsigned disableParms();
00117
00118
00119
00120 virtual unsigned referenceAllParameters(OP_Parameters *from);
00121
00122
00123 void animate(unsigned idx);
00124 void animate(const char *name);
00125 void deAnimate(unsigned idx);
00126 void deAnimate(const char *name);
00127 CH_Channel *addChannel(const char *name);
00128 CH_Channel *getChannel(const char *name);
00129 const CH_Channel *getChannel(const char *name) const;
00130 int destroyChannel(const char *name);
00131
00132 bool isObsoleteChannel(const char *name) const;
00133
00134 void takeActivateParm(uint idx, bool enable=true);
00135 void takeActivateParm(const char *name, bool enable=true);
00136 void takeActivateParm(PRM_Parm *parm, bool enable=true);
00137 void takeDeactivateParm(uint idx)
00138 { takeActivateParm(idx, false); }
00139 void takeDeactivateParm(const char *name)
00140 { takeActivateParm(name, false); }
00141 void takeDeactivateParm(PRM_Parm *parm)
00142 { takeActivateParm(parm, false); }
00143
00144 bool takeIsActiveParm(uint idx);
00145 bool takeIsActiveParm(const char *name);
00146 bool takeIsActiveParm(const PRM_Parm *parm);
00147
00148
00149
00150 virtual void takeAutoActivateParm(PRM_Parm *);
00151
00152 float findKey(double t, int direction) const;
00153
00154 PRM_ChanState getChanState(double t, bool scoped_only) const;
00155 PRM_ChanState isAtKey(double t) const
00156 { return getChanState(t, false); }
00157 void updatePending(double t);
00158 bool isPending( double t );
00159
00160 OP_Channels *getChannels(void) const { return myChannels; }
00161
00162
00163
00164 virtual void getVariableString(int index, UT_String &value,
00165 int thread);
00166 virtual float getVariableValue(int index, int thread);
00167
00168 PRM_Parm &getParm(int i)
00169 { return *myParmList->getParmPtr(i); }
00170 const PRM_Parm &getParm(int i) const
00171 { return *myParmList->getParmPtr(i); }
00172 PRM_Parm &getParm(const char *name)
00173 { return *myParmList->getParmPtr(name); }
00174 const PRM_Parm &getParm(const char *name) const
00175 { return *myParmList->getParmPtr(name); }
00176 bool hasParm(const char *name) const
00177 { return myParmList->getParmPtr(name) != 0; }
00178 PRM_Parm *getParmPtrInst(const char *name, const int *inst,
00179 int nestlevel = 1);
00180 const PRM_Parm *getParmPtrInst(const char *name, const int *inst,
00181 int nestlevel = 1) const;
00182
00183 virtual PRM_ParmList *getParmList()
00184 { return myParmList; }
00185 virtual const PRM_ParmList *getParmList() const
00186 { return myParmList; }
00187
00188
00189
00190
00191 virtual bool changeSpareParms(UT_IStream &ds, UT_String &errors);
00192
00193
00194
00195 bool getIsChangingSpareParms() const
00196 { return myChangingSpareParms; }
00197
00198
00199
00200 virtual PRM_ParmList *createObsoleteParmList();
00201 virtual void resolveAndDeleteObsoleteParmList(
00202 PRM_ParmList *&obsolete_parms);
00203
00204
00205
00206 virtual void resolveObsoleteParms(PRM_ParmList * ) { }
00207
00208
00209 virtual bool getParameterOrProperty(const char *name, fpreal now,
00210 OP_Node *&op,
00211 PRM_Parm *&parm,
00212 bool create_missing_multiparms,
00213 PRM_ParmList *obsolete=0);
00214 virtual bool getParameterOrPropertyByChannel(const char *chname,
00215 fpreal now,
00216 OP_Node *&op,
00217 PRM_Parm *&parm,
00218 int &vector_index,
00219 PRM_ParmList *obsolete=0);
00220
00221
00222
00223 bool getParameterOrPropertyOnNode(
00224 const char *name, fpreal now, OP_Node *&op,
00225 PRM_Parm *&parm, bool create_missing_multiparms,
00226 PRM_ParmList *obsolete);
00227
00228
00229
00230 bool getParameterOrPropertyOnNodeByChannel(
00231 const char *chname, fpreal now,
00232 OP_Node *&op, PRM_Parm *&parm,
00233 int &vector_index, PRM_ParmList *obsolete=0);
00234
00235
00236
00237
00238
00239 virtual int findParametersOrProperties(fpreal now,
00240 OP_PropertyLookupList &list);
00241
00242
00243
00244 static bool followChannelReferencesOneStep(double t,
00245 OP_Node *&newop,
00246 PRM_Parm *&newparm,
00247 int &newvecidx)
00248 {
00249 return followChannelReferencesOneStepT(
00250 t, newop, newparm, newvecidx,
00251 UTgetSTID());
00252 }
00253 static bool followChannelReferencesOneStepT(double t,
00254 OP_Node *&newop,
00255 PRM_Parm *&newparm,
00256 int &newvecidx,
00257 int thread);
00258 static void followChannelReferences(double t, OP_Node *&newop,
00259 PRM_Parm *&newparm,
00260 int &newvecidx)
00261 {
00262 followChannelReferencesT(
00263 t, newop, newparm, newvecidx,
00264 UTgetSTID());
00265 }
00266 static void followChannelReferencesT(double t, OP_Node *&newop,
00267 PRM_Parm *&newparm,
00268 int &newvecidx,
00269 int thread);
00270 static void followChannelReferences(double t, CH_ChannelRef &ref)
00271 {
00272 followChannelReferencesT(t, ref, UTgetSTID());
00273 }
00274 static void followChannelReferencesT(double t, CH_ChannelRef &ref,
00275 int thread);
00276
00277 static void getValueAsProcessedNodePaths(double t,
00278 UT_WorkBuffer &resultbuf,
00279 PRM_Parm *parm, int index,
00280 OP_Node *srcnode);
00281
00282 const OP_Stat &getStat() const { return myStats; }
00283 OP_Stat &getStat() { return myStats; }
00284
00285
00286
00287
00288 int enableParm(int pi, int state, int v = -1);
00289 int enableParm(const char *pn, int state, int v = -1);
00290 int enableParmInst(const char *name, const int *inst,
00291 int state, int nestlevel = 1,
00292 int v = -1);
00293 unsigned getEnableState(int pi, int v = -1);
00294 unsigned getEnableState(const char *pn, int v = -1);
00295 unsigned getEnableStateInst(const char *name, const int *inst,
00296 int nestlevel = 1, int v = -1);
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311 int evalInt(int pi, int vi, double t) const
00312 { return evalIntT(pi, vi, t, UTgetSTID()); }
00313 int evalIntT(int pi, int vi, double t, int thread) const;
00314 int evalInt(const char *pn, int vi, double t) const
00315 { return evalIntT(pn, vi, t, UTgetSTID()); }
00316 int evalIntT(const char *pn, int vi, double t,
00317 int thread) const;
00318 int evalInt(const char *pn, int *pi, int vi, double t) const
00319 { return evalIntT(pn, pi, vi, t, UTgetSTID()); }
00320 int evalIntT(const char *pn, int *pi, int vi, double t,
00321 int thread) const;
00322 int evalInt(PRM_Parm *parm, int vi, double t) const
00323 { return evalIntT(parm, vi, t, UTgetSTID()); }
00324 int evalIntT(PRM_Parm *parm, int vi, double t,
00325 int thread) const;
00326
00327 float evalFloat(int pi, int vi, double t) const
00328 { return evalFloatT(pi, vi, t, UTgetSTID()); }
00329 float evalFloatT(int pi, int vi, double t, int thread) const;
00330 float evalFloat(const char *pn, int vi, double t) const
00331 { return evalFloatT(pn, vi, t, UTgetSTID()); }
00332 float evalFloatT(const char *pn, int vi, double t,
00333 int thread) const;
00334 float evalFloat(const char *pn, int *pi, int vi,
00335 double t) const
00336 { return evalFloatT(pn, pi, vi, t, UTgetSTID()); }
00337 float evalFloatT(const char *pn, int *pi, int vi, double t,
00338 int thread) const;
00339 float evalFloat(PRM_Parm *parm, int vi, double t) const
00340 { return evalFloatT(parm, vi, t, UTgetSTID()); }
00341 float evalFloatT(PRM_Parm *parm, int vi, double t,
00342 int thread) const;
00343
00344
00345 void evalFloats(int pi, float *v, double t) const
00346 { return evalFloatsT(pi, v, t, UTgetSTID()); }
00347 void evalFloatsT(int pi, float *v, double t,
00348 int thread) const;
00349 void evalFloats(const char *pn, float *v, double t) const
00350 { return evalFloatsT(pn, v, t, UTgetSTID()); }
00351 void evalFloatsT(const char *pn, float *v, double t,
00352 int thread) const;
00353 void evalFloats(const char *pn, int *pi,float *v,
00354 double t) const
00355 { return evalFloatsT(pn, pi, v, t, UTgetSTID()); }
00356 void evalFloatsT(const char *pn, int *pi,float *v, double t,
00357 int thread) const;
00358 void evalFloats(PRM_Parm *parm, float *v, double t) const
00359 { return evalFloatsT(parm, v, t, UTgetSTID()); }
00360 void evalFloatsT(PRM_Parm *parm, float *v, double t,
00361 int thread) const;
00362
00363
00364
00365 void evalString(UT_String &val, int pi, int vi,
00366 double t) const
00367 { return evalStringT(val, pi, vi, t, UTgetSTID()); }
00368 void evalStringT(UT_String &val, int pi, int vi, double t,
00369 int thread) const;
00370 void evalString(UT_String &val, const char *pn, int vi,
00371 double t) const
00372 { return evalStringT(val, pn, vi, t, UTgetSTID()); }
00373 void evalStringT(UT_String &val, const char *pn, int vi,
00374 double t, int thread) const;
00375 void evalString(UT_String &val, const char *pn, int *pi,
00376 int vi, double t) const
00377 {
00378 return evalStringT(val, pn, pi, vi, t,
00379 UTgetSTID());
00380 }
00381 void evalStringT(UT_String &val, const char *pn, int *pi,
00382 int vi, double t, int thread) const;
00383 void evalString(UT_String &val, PRM_Parm *parm, int vi,
00384 double t) const
00385 {
00386 return evalStringT(val, parm, vi, t,
00387 UTgetSTID());
00388 }
00389 void evalStringT(UT_String &val, PRM_Parm *parm, int vi,
00390 double t, int thread) const;
00391
00392
00393 void evalStringRaw(UT_String &val, int pi, int vi,
00394 double t) const
00395 {
00396 return evalStringRawT(val, pi, vi, t,
00397 UTgetSTID());
00398 }
00399 void evalStringRawT(UT_String &val, int pi, int vi, double t,
00400 int thread) const;
00401 void evalStringRaw(UT_String &val, const char *pn, int vi,
00402 double t) const
00403 {
00404 return evalStringRawT(val, pn, vi, t,
00405 UTgetSTID());
00406 }
00407 void evalStringRawT(UT_String &val, const char *pn, int vi,
00408 double t, int thread) const;
00409 void evalStringRaw(UT_String &val, const char *pn, int *pi,
00410 int vi, double t) const
00411 {
00412 return evalStringRawT(val, pn, pi, vi, t,
00413 UTgetSTID());
00414 }
00415 void evalStringRawT(UT_String &val, const char *pn, int *pi,
00416 int vi, double t, int thread) const;
00417 void evalStringRaw(UT_String &val, PRM_Parm *parm, int vi,
00418 double t) const
00419 {
00420 return evalStringRawT(val, parm, vi, t,
00421 UTgetSTID());
00422 }
00423 void evalStringRawT(UT_String &val, PRM_Parm *parm, int vi,
00424 double t, int thread) const;
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436 int evalIntInst(const char *name, const int *inst, int vi,
00437 double t, int nestlevel = 1) const
00438 {
00439 return evalIntInstT(name, inst, vi, t,
00440 UTgetSTID(), nestlevel);
00441 }
00442 int evalIntInstT(const char *name, const int *inst, int vi,
00443 double t, int thread,
00444 int nestlevel = 1) const;
00445 float evalFloatInst(const char *name, const int *inst,
00446 int vi, double t, int nestlevel = 1) const
00447 {
00448 return evalFloatInstT(name, inst, vi, t,
00449 UTgetSTID(), nestlevel);
00450 }
00451 float evalFloatInstT(const char *name, const int *inst,
00452 int vi, double t, int thread,
00453 int nestlevel = 1) const;
00454 void evalFloatsInst(const char *name, const int *inst,
00455 float *v, double t,
00456 int nestlevel = 1) const
00457 {
00458 return evalFloatsInstT(name, inst, v, t,
00459 UTgetSTID(), nestlevel);
00460 }
00461 void evalFloatsInstT(const char *name, const int *inst,
00462 float *v, double t, int thread,
00463 int nestlevel = 1) const;
00464 void evalStringInst(const char *name, const int *inst,
00465 UT_String &val, int vi, double t,
00466 int nestlevel = 1) const
00467 {
00468 return evalStringInstT(name, inst, val, vi,
00469 t, UTgetSTID(), nestlevel);
00470 }
00471 void evalStringInstT(const char *name, const int *inst,
00472 UT_String &val, int vi, double t,
00473 int thread, int nestlevel = 1) const;
00474 void evalStringInstRaw(const char *name, const int *inst,
00475 UT_String &val, int vi, double t,
00476 int nestlevel = 1) const
00477 {
00478 return evalStringInstRawT(name, inst, val, vi,
00479 t, UTgetSTID(), nestlevel);
00480 }
00481 void evalStringInstRawT(const char *name, const int *inst,
00482 UT_String &val, int vi, double t,
00483 int thread,
00484 int nestlevel = 1) const;
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496 bool evalParameterOrProperty(const char *parm_name,
00497 int vec_index,
00498 double now,
00499 int &value)
00500 {
00501 return evalParameterOrPropertyT(parm_name,
00502 vec_index, now, value, UTgetSTID());
00503 }
00504 bool evalParameterOrPropertyT(const char *parm_name,
00505 int vec_index,
00506 double now,
00507 int &value,
00508 int thread);
00509 bool evalParameterOrProperty(const char *parm_name,
00510 int vec_index,
00511 double now,
00512 float &values)
00513 {
00514 return evalParameterOrPropertyT(parm_name,
00515 vec_index, now, values, UTgetSTID());
00516 }
00517 bool evalParameterOrPropertyT(const char *parm_name,
00518 int vec_index,
00519 double now,
00520 float &values, int thread);
00521 bool evalParameterOrProperty(const char *parm_name,
00522 int vec_index,
00523 double now,
00524 UT_String &value)
00525 {
00526 return evalParameterOrPropertyT(parm_name,
00527 vec_index, now, value, UTgetSTID());
00528 }
00529 bool evalParameterOrPropertyT(const char *parm_name,
00530 int vec_index,
00531 double now,
00532 UT_String &value,
00533 int thread);
00534 bool evalParameterOrPropertyRaw(const char *parm_name,
00535 int vec_index,
00536 double now,
00537 UT_String &value)
00538 {
00539 return evalParameterOrPropertyRawT(parm_name,
00540 vec_index, now, value, UTgetSTID());
00541 }
00542 bool evalParameterOrPropertyRawT(const char *parm_name,
00543 int vec_index,
00544 double now,
00545 UT_String &value,
00546 int thread);
00547 bool evalParameterOrPropertyExpr(const char *parm_name,
00548 int vec_index,
00549 double now,
00550 UT_String &value)
00551 {
00552 return evalParameterOrPropertyExprT(parm_name,
00553 vec_index, now, value, UTgetSTID());
00554 }
00555 bool evalParameterOrPropertyExprT(const char *parm_name,
00556 int vec_index,
00557 double now,
00558 UT_String &value,
00559 int thread);
00560
00561 bool evalVectorProperty(const char *parm_name,
00562 double now,
00563 int *values,
00564 int vec_size)
00565 {
00566 return evalVectorPropertyT(parm_name,
00567 now, values, vec_size, UTgetSTID());
00568 }
00569 bool evalVectorPropertyT(const char *parm_name,
00570 double now,
00571 int *values,
00572 int vec_size,
00573 int thread);
00574 bool evalVectorProperty(const char *parm_name,
00575 double now,
00576 float *values,
00577 int vec_size)
00578 {
00579 return evalVectorPropertyT(parm_name,
00580 now, values, vec_size, UTgetSTID());
00581 }
00582 bool evalVectorPropertyT(const char *parm_name,
00583 double now,
00584 float *values,
00585 int vec_size,
00586 int thread);
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602 void setInt(int pi, int vi, double t, int val);
00603 void setInt(const char *pn, int vi, double t, int val);
00604 void setInt(const char *pn, int &pi, int vi, double t,
00605 int val);
00606 void setFloat(int pi, int vi, double t, float val, int h=0);
00607 void setFloat(const char *pn, int vi, double t, float val,
00608 int h=0);
00609 void setFloat(const char *pn, int &pi, int vi,
00610 double t, float val, int h=0);
00611 void setString(const UT_String &val,
00612 CH_StringMeaning meaning,
00613 int pi, int vi,
00614 double t);
00615 void setString(const UT_String &val,
00616 CH_StringMeaning meaning,
00617 const char *pn, int vi, double t);
00618 void setString(const UT_String &val,
00619 CH_StringMeaning meaning,
00620 const char *pn,
00621 int &pi, int vi, double t);
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640 void setChRefInt(int pi, int vi, double t, int val,
00641 int harden=0, int propagate=1);
00642 void setChRefInt(const char *pn, int vi, double t, int val,
00643 int harden=0, int propagate=1);
00644 void setChRefFloat(int pi, int vi, double t, float val,
00645 int harden=0, int propagate=1);
00646 void setChRefFloat(const char *pn, int vi, double t,
00647 float val, int harden=0,
00648 int propagate=1);
00649 void setChRefString(const UT_String &val,
00650 CH_StringMeaning meaning,
00651 int pi, int vi,
00652 double t, int harden=0, int propagate=1);
00653 void setChRefString(int pi, int vi,
00654 double t,
00655 const UT_String &val,
00656 CH_StringMeaning meaning,
00657 int harden=0, int propagate=1)
00658 {
00659 setChRefString(val, meaning, pi, vi, t,
00660 harden, propagate);
00661 }
00662 void setChRefString(const UT_String &val,
00663 CH_StringMeaning meaning,
00664 const char *pn,
00665 int vi, double t,
00666 int harden=0, int propagate=1);
00667 void setChRefString(const char *pn,
00668 int vi, double t,
00669 const UT_String &val,
00670 CH_StringMeaning meaning,
00671 int harden=0, int propagate=1)
00672 {
00673 setChRefString(val, meaning, pn, vi, t,
00674 harden, propagate);
00675 }
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699 bool setParameterOrProperty(const char *parm_name,
00700 int vec_index,
00701 double now,
00702 int value,
00703 bool harden=false,
00704 bool propagate=true);
00705 bool setParameterOrProperty(const char *parm_name,
00706 int vec_index,
00707 double now,
00708 float value,
00709 bool harden=false,
00710 bool propagate=true);
00711 bool setParameterOrProperty(const char *parm_name,
00712 int vec_index,
00713 double now,
00714 const char *value,
00715 CH_StringMeaning meaning,
00716 bool harden=false,
00717 bool propagate=true);
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729 void setIntInst(int val, const char *name,
00730 const int *inst, int vi, double t,
00731 int nestlevel = 1);
00732 void setFloatInst(float val, const char *name,
00733 const int *inst, int vi, double t,
00734 int nestlevel = 1);
00735 void setStringInst(const UT_String &val,
00736 CH_StringMeaning meaning,
00737 const char *name,
00738 const int *inst, int vi, double t,
00739 int nestlevel = 1);
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753 void setSilentInt(int pi, int vi, double t, int val);
00754 void setSilentInt(const char *pn, int vi,
00755 double t, int val);
00756 void setSilentInt(const char *pn, int &pi,
00757 int vi, double t,int val);
00758
00759 void setSilentFloat(int pi, int vi, double t,
00760 float val, int h=0);
00761 void setSilentFloat(const char *pn, int vi,
00762 double t, float val, int h=0);
00763 void setSilentFloat(const char *pn, int &pi, int vi,
00764 double t, float val, int h=0);
00765
00766 void setSilentString(const UT_String &val,
00767 CH_StringMeaning meaning,
00768 int pi, int vi,
00769 double t);
00770 void setSilentString(const UT_String &val,
00771 CH_StringMeaning meaning,
00772 const char *pn,
00773 int vi, double t);
00774 void setSilentString(const UT_String &val,
00775 CH_StringMeaning meaning,
00776 const char *pn,
00777 int &pi, int vi, double t);
00778
00779 void setSilentIntInst(int val, const char *name,
00780 const int *inst, int vi, double t,
00781 int nestlevel = 1);
00782 void setSilentFloatInst(float val, const char *name,
00783 const int *inst, int vi, double t,
00784 int nestlevel = 1);
00785 void setSilentStringInst(const UT_String &val,
00786 CH_StringMeaning meaning,
00787 const char *name,
00788 const int *inst, int vi, double t,
00789 int nestlevel = 1);
00790
00791
00792
00793
00794 CH_StringMeaning getStringMeaning(int pi, int vi, double t);
00795 CH_StringMeaning getStringMeaning(const char *pn, int vi, double t);
00796 CH_StringMeaning getStringMeaningInst(const char *name, const int *inst,
00797 int vi, double t, int nest_level = 1);
00798
00799
00800
00801
00802
00803 static void setBatchParms(PRM_BatchList &list, double now,
00804 bool create_key=false,
00805 bool create_channels=false);
00806 static bool canSetBatchParms(PRM_BatchList &list, double now);
00807
00808
00809
00810 CH_ExprLanguage getExprLanguage() const;
00811 void setExprLanguage(CH_ExprLanguage language);
00812
00813
00814 void insertMultiParmItem(const char *pn, int i);
00815 void removeMultiParmItem(const char *pn, int i);
00816
00817
00818
00819 void updateMultiParmFromRamp(double t, const UT_Ramp &ramp,
00820 PRM_Parm &m, bool add_wrap,
00821 int harden=0);
00822 void updateRampFromMultiParm(double t, const PRM_Parm &m,
00823 UT_Ramp &ramp,
00824 bool *time_dep = NULL);
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835 bool convertObsAnimatedToStringExpression(
00836 PRM_ParmList *obsolete_parms,
00837 const char *pn, int vi, double t,
00838 UT_String &result, bool reset_obs);
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851 bool expandString(UT_String &val, double t, int thread,
00852 const char *channel_name = 0);
00853
00854 virtual int findString(const char *str, bool fullword,
00855 bool usewildcards) const;
00856 virtual int changeString(const char *from, const char *to,
00857 bool fullword);
00858
00859
00860
00861
00862
00863
00864 bool isParmDirty(int idx, double t);
00865 bool isParmDirty(const char *n, double t);
00866 bool isParmDirtyInst(const char *name, const int *inst,
00867 double t, int nestlevel=1);
00868 void cacheParmValues(const OP_Context &context);
00869 void clearParmCache();
00870
00871
00872 int getErrorMessages(UT_String &messages,
00873 UT_ErrorSeverity severity
00874 = UT_ERROR_NONE)
00875 {
00876 OP_Lock::Scope lock(myErrorManagerLock);
00877 stealGlobalErrors();
00878 return myErrorManager.getErrorMessages(messages,
00879 severity);
00880 }
00881
00882 int findError(const char *type, int code) const
00883 {
00884 OP_Lock::Scope lock(myErrorManagerLock);
00885 return myErrorManager.findError(type, code);
00886 }
00887
00888 int removeError(int idx)
00889 {
00890 OP_Lock::Scope lock(myErrorManagerLock);
00891 return myErrorManager.removeError(idx);
00892 }
00893
00894 void clearDuplicateErrors()
00895 {
00896 OP_Lock::Scope lock(myErrorManagerLock);
00897 myErrorManager.pruneDuplicates();
00898 }
00899
00900 void opMessage(int code, const char *m=0) const
00901 { UTaddMessage("OP",code,m);}
00902 void opWarning(int code, const char *m=0) const
00903 { UTaddWarning("OP",code,m);}
00904 void opError(int code, const char *m=0) const
00905 { UTaddError("OP", code, m);}
00906 void opFatal(int code, const char *m=0) const
00907 { UTaddFatal("OP", code, m);}
00908
00909 void opLocalError(int code, const char *m=0)
00910 {
00911 OP_Lock::Scope lock(myErrorManagerLock);
00912 myErrorManager.addError("OP", code, m);
00913 }
00914 void opLocalWarning(int code, const char *m=0)
00915 {
00916 OP_Lock::Scope lock(myErrorManagerLock);
00917 myErrorManager.addWarning("OP",code,m);
00918 }
00919 void opLocalDeadlockError()
00920 {
00921 OP_Lock::Scope lock(myErrorManagerLock);
00922 myErrorManager.addDeadlockError();
00923 }
00924
00925
00926
00927 void appendError(const char *type,
00928 int code, const char *m,
00929 UT_ErrorSeverity sev)
00930 {
00931 if (!UTgetErrorManager()->isDisabled())
00932 {
00933 OP_Lock::Scope lock(myErrorManagerLock);
00934 myErrorManager.addGeneric(type, code, m, sev);
00935 }
00936 }
00937
00938 void clearErrors()
00939 {
00940 OP_Lock::Scope lock(myErrorManagerLock);
00941 UTgetErrorManager()->clearAndDestroyErrors();
00942 myErrorManager.clearAndDestroyErrors();
00943 }
00944 virtual OP_ERROR getErrorSeverity()
00945 {
00946
00947 return myErrorManager.getSeverity();
00948 }
00949 bool hasDeadlockError() const
00950 {
00951
00952 return myErrorManager.hasDeadlockError();
00953 }
00954 virtual OP_ERROR error()
00955 {
00956 if (UTgetErrorManager()->getNumErrors() > 0)
00957 {
00958 stealGlobalErrors();
00959 }
00960 else
00961 {
00962
00963
00964
00965 myErrorManager.updateSeverity(
00966 UTgetErrorManager()->getSeverity());
00967 }
00968 return myErrorManager.getSeverity();
00969 }
00970 void stealErrors(UT_ErrorManager &src,
00971 bool borrow_only = false);
00972
00973
00974 void addChannelError(const char *type, int code,
00975 const char *msg = 0);
00976
00977 void chChanged(CH_Channel *ch, CH_CHANGE_TYPE reason);
00978
00979 virtual void saveParmsForUndo(bool scopedOnly = false,
00980 CH_Collection *collection = NULL);
00981 void saveSingleParmForUndo(PRM_Parm *parm);
00982 void saveParmForUndo(PRM_Parm *);
00983 virtual void saveKeyFrameForUndo(CH_Channel *chp, float gtime);
00984
00985
00986 virtual void clearUndoFlags();
00987 virtual void setAnyUndoFlag();
00988 int getAnyUndoPending() const { return myAnyUndoFlagSet; }
00989
00990 int canAccess(unsigned mask) const;
00991 bool canAccess(unsigned mask, const PRM_Parm *parm) const;
00992 bool canAccessChannel(uint mask,
00993 const CH_Channel *chp) const;
00994 void updateUserMask();
00995
00996 bool canModifyFromUI(const PRM_Parm *parm, int vi) const;
00997
00998
00999
01000
01001 virtual int reloadNewFiles(float time_now);
01002
01003 void parmChanged( int parm_index );
01004 void parmExprChanged(int parm_index);
01005
01006
01007 void operatorDeleted();
01008
01009
01010 void saveParmCommand(ostream &os, int values = 0,
01011 int defaultstoo = 1,
01012 bool spareparms = true) const;
01013 int loadParmCommand(int argc, char *argv[],
01014 int docallbacks, void *data,
01015 float now, bool followchrefs,
01016 CMD_Args *args);
01017 void commandParmCallback(void *data, float now,
01018 int argc, char *argv[],
01019 CMD_Args *args);
01020 void saveMultiParmInstanceCommand(
01021 ostream &os,
01022 const char *opname,
01023 bool spareparms) const;
01024
01025
01026
01027
01028 virtual bool triggerParmCallback(PRM_Parm *parmptr, float now,
01029 int value, void *data) = 0;
01030
01031 virtual int64 getMemUsage(UT_Bool onlythis) const;
01032
01033 void bumpTakeReference(int dir)
01034 { myTakeReferences += dir; }
01035 int getTakeReferences() const
01036 { return myTakeReferences; }
01037
01038
01039
01040
01041
01042
01043
01044 void createChannelGroupsFromFolders(CH_Group &parent_group,
01045 bool only_channels,
01046 bool leaf_channels_only = false);
01047
01048
01049 void getAutoScopedChannels(CH_ChannelRefList &chlist);
01050
01051
01052 void getChopScopeChannels(UT_WorkBuffer &chopscope_cmd);
01053
01054
01055
01056
01057 bool getParmIsVisible(const char *parmname);
01058
01059
01060
01061 const PRM_Template *getInterfaceParmTemplates() const;
01062
01063 const PRM_Template *getSpareParmTemplates() const;
01064 const PRM_ScriptImports *getSpareParmTemplateImports() const;
01065 const PRM_Template *getSpareParmLayoutTemplates() const;
01066 int getSpareParmTemplatesId() const;
01067
01068
01069 bool hasMultiparmInfo() const;
01070 OP_MultiparmInfo &getMultiparmInfo();
01071
01072
01073
01074
01075 int buildVexCommand(UT_String &result,
01076 const PRM_Template *templatelist,
01077 float now,
01078 int start_parm = 0,
01079 int end_parm = 10000);
01080
01081
01082
01083
01084 virtual void initMultiparmInstance(UT_PtrArray<PRM_Parm *> &parms);
01085
01086 virtual void addOrRemoveMultiparmInstance();
01087
01088 virtual bool savePresetContents(ostream &os);
01089 virtual bool loadPresetContents(const char *tok, UT_IStream &is);
01090
01091 static void buildMParmInst(const PRM_Template *templates,
01092 UT_StringArray &mparm_inst,
01093 UT_IntArray &mparm_lvl,
01094 int level);
01095 static bool isMParmInstance(const char *chname,
01096 const UT_StringArray &mparm_inst,
01097 const UT_IntArray &mparm_lvl);
01098
01099
01100
01101
01102
01103 virtual bool allowReservingParm(PRM_Parm* parm)
01104 { return true; }
01105
01106 protected:
01107 void saveMultiParmForUndo(int index);
01108
01109 void stealGlobalErrors();
01110 void stealErrors(OP_Parameters &src);
01111
01112
01113 UT_LockedRawPtr<UT_ErrorManager,OP_Lock>
01114 getLockedErrorManager()
01115 {
01116 return UT_LockedRawPtr<UT_ErrorManager,OP_Lock>(
01117 myErrorManager, myErrorManagerLock);
01118 }
01119
01120 virtual void permissionError(const char *chname = 0);
01121
01122
01123
01124
01125 SYS_FORCE_INLINE bool checkExpressionError(
01126 const PRM_Parm *parm, int thread) const
01127 {
01128 int err = ev_GetErrNo(thread);
01129 if (err == EV_NOERROR)
01130 return false;
01131 evaluationError(parm, err, thread);
01132 return true;
01133 }
01134
01135 void resetParmEventHandler();
01136
01137 int *allocIndirect(int size=64);
01138
01139 OP_Parameters(const char *name, OP_Operator *entry);
01140 OP_Parameters(const OP_Parameters &source, const char *name);
01141 virtual ~OP_Parameters();
01142
01143
01144
01145
01146
01147 void initializeParms(OP_Channels *channels);
01148
01149
01150 virtual void buildOpDependencies()
01151 { }
01152 virtual void checkChannelDependencies(CH_Channel * ,
01153 CH_CHANGE_TYPE )
01154 { }
01155
01156 int rename(const char *newname);
01157 virtual bool createSpareParameterFromChannel(const char *chname);
01158 virtual bool createSpareParametersFromChannels(
01159 UT_BitArray &selection,
01160 const CH_ChannelList &channels);
01161
01162 CH_LocalVariable *getVariable(int i) const;
01163 CH_LocalVariable *getVariable(const char *name) const;
01164
01165
01166
01167 OP_ERROR saveChannels(ostream &os, int binary, bool compiled,
01168 int selected);
01169 OP_ERROR saveParmChannels(int parm_index, ostream &os,
01170 int binary, bool compiled);
01171 OP_ERROR saveParameters(ostream &os, int binary, bool compiled);
01172 OP_ERROR saveChannelAliases(ostream &os, int binary);
01173
01174 bool loadChannels(UT_IStream &is, const char *path,
01175 CH_Collection *obsolete_channels);
01176 bool loadParameters(UT_IStream &is, const char *path,
01177 PRM_ParmList *obsolete_parms);
01178 bool loadChannelAliases(UT_IStream &is, const char *path=0);
01179 bool loadOldSpareParms(UT_IStream &is);
01180
01181
01182
01183
01184 virtual void opChanged(OP_EventType type, void *dataptr = 0) = 0;
01185
01186
01187
01188
01189 virtual void traverseScope(const char *pattern, OP_ScopeOp scope_op,
01190 const OP_ScopeOptions &scope_options);
01191
01192
01193
01194 virtual int getHasTakeData() const { return 0 ;}
01195
01196 PRM_ParmList *myParmList;
01197 OP_Channels *myChannels;
01198 OP_Stat myStats;
01199
01200 private:
01201
01202
01203 void evaluationError(const PRM_Parm *parm, int err,
01204 int thread) const;
01205
01206
01207
01208 void setFullInt(int pi, int vi, double t, int val, bool p);
01209 void setFullInt(const char *pn, int vi, double t, int val,
01210 bool p);
01211 void setFullInt(const char *pn, int &pi, int vi, double t,
01212 int val, bool p);
01213
01214
01215 void setFullFloat(int pi, int vi, double t, float val,
01216 int h, bool p);
01217 void setFullFloat(const char *pn, int vi, double t,
01218 float val, int h, bool p);
01219 void setFullFloat(const char *pn, int &pi, int vi,
01220 double t, float val, int h, bool p);
01221
01222 void setFullString(const UT_String &val,
01223 CH_StringMeaning meaning, int pi, int vi,
01224 double t, bool p);
01225 void setFullString(const UT_String &val,
01226 CH_StringMeaning meaning,
01227 const char *pn,
01228 int vi, double t, bool p);
01229 void setFullString(const UT_String &val,
01230 CH_StringMeaning meaning,
01231 const char *pn,
01232 int &pi, int vi, double t, bool p);
01233
01234 void setFullIntInst(int val, const char *name,
01235 const int *inst, int vi, double t,
01236 int nestlevel, bool p);
01237 void setFullFloatInst(float val, const char *name,
01238 const int *inst, int vi, double t,
01239 int nestlevel, bool p);
01240 void setFullStringInst(const UT_String &val,
01241 CH_StringMeaning meaning,
01242 const char *name,
01243 const int *inst, int vi, double t,
01244 int nestlevel, bool p);
01245
01246
01247
01248 bool setFull(PRM_Parm &parm, int vi, double now, int value,
01249 bool harden, bool propgate);
01250 bool setFull(PRM_Parm &parm, int vi, double now, float val,
01251 bool harden, bool propgate);
01252 bool setFull(PRM_Parm &parm, int vi, double now,
01253 const char *value,
01254 CH_StringMeaning meaning,
01255 bool harden, bool propgate);
01256
01257 bool determineParmVisibility(const char *parmname,
01258 const PRM_Template *prm,
01259 bool &visible);
01260
01261
01262 static void changeEvent(void *, CH_CHANGE_TYPE, int);
01263
01264 mutable OP_Lock myErrorManagerLock;
01265 UT_ErrorManager myErrorManager;
01266
01267 UT_String myName;
01268 OP_Operator *myTableEntry;
01269 uint myTakeReferences;
01270
01271 unsigned myUndoAllParmSavedFlag:1,
01272 myUndoScopedSavedFlag:1,
01273 myAnyUndoFlagSet:1;
01274
01275 OP_ParmCache *myParmCache;
01276
01277 OP_SpareParms *mySpareParms;
01278 bool myChangingSpareParms;
01279
01280 OP_MultiparmInfo *myMultiparmInfo;
01281
01282 friend class OP_TakeParm;
01283 friend class OP_UndoParm;
01284 friend class OP_UndoSpareParm;
01285 };
01286
01287
01288
01289 OP_API PRM_Parm *OPgetParameterFromChannel( CH_Channel *chp, int *vecidx );
01290 OP_API void OPsaveChannelForUndo( CH_Channel *chp );
01291 OP_API void OPsaveChannelsForUndo( const CH_ChannelList &channels );
01292 OP_API void OPtakeAutoActivateChannel( CH_Channel *chp );
01293
01294 #endif