00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __DS_ParmReader__
00021 #define __DS_ParmReader__
00022
00023 #include "PRM_API.h"
00024 #include <UT/UT_PtrArray.h>
00025 #include <UT/UT_String.h>
00026 #include "PRM_Type.h"
00027 #include <CH/CH_ExprLanguage.h>
00028
00029 class UT_StringArray;
00030
00031 class PRM_Range;
00032
00033
00034
00035 class PRM_API DS_DefaultValue
00036 {
00037 public:
00038
00039 DS_DefaultValue( const float *fp, int size );
00040 DS_DefaultValue( const int *ip, int size );
00041 DS_DefaultValue( const char *sp[],
00042 const CH_StringMeaning *meanings,
00043 int size );
00044 DS_DefaultValue(const UT_FloatArray &values);
00045 DS_DefaultValue(const UT_IntArray &values);
00046 DS_DefaultValue(const UT_StringArray &values,
00047 const CH_StringMeaning *meaning);
00048
00049 ~DS_DefaultValue();
00050
00051 int copy( const float *fp, int size );
00052 int copy( const int *ip, int size );
00053 int copy( const char *sp[],
00054 const CH_StringMeaning *meanings,
00055 int size);
00056 int copy( const UT_IntArray &v);
00057 int copy( const UT_FloatArray &v);
00058 int copy( const UT_StringArray &v,
00059 const CH_StringMeaning *meanings);
00060
00061 float *getFloat() const { return myFloat; }
00062 int *getInteger() const { return myInteger; }
00063 const char *getString(int idx) const { return myStrings[idx]; }
00064 CH_StringMeaning getStringMeaning(int idx) const
00065 { return myStringMeanings[idx]; }
00066
00067 int getSize() const { return mySize; };
00068
00069 private:
00070 void initZero();
00071 void cleanup();
00072
00073 float *myFloat;
00074 int *myInteger;
00075 char **myStrings;
00076 CH_StringMeaning *myStringMeanings;
00077
00078 int mySize;
00079 };
00080
00081
00082
00083 class PRM_API DS_MenuChoice {
00084 public:
00085 DS_MenuChoice( const char *value, const char *label)
00086 : myValue( 0 ),
00087 myLabel( 0 )
00088 {
00089 if ( value ) myValue = ::strdup( value );
00090 if ( label ) myLabel = ::strdup( label );
00091 };
00092 ~DS_MenuChoice()
00093 {
00094 if ( myValue ) ::free( myValue );
00095 if ( myLabel ) ::free( myLabel );
00096 };
00097
00098 const char *getValue() const { return myValue; }
00099 const char *getLabel() const { return myLabel; }
00100
00101 private:
00102 char *myValue;
00103 char *myLabel;
00104 };
00105
00106 class PRM_API DS_AttributeValue {
00107 public:
00108 DS_AttributeValue(const char *token, const char *value)
00109 : myToken(0), myValue(0)
00110 {
00111 if (token) myToken = ::strdup(token);
00112 if (value) myValue = ::strdup(value);
00113 }
00114 ~DS_AttributeValue()
00115 {
00116 if (myToken) ::free(myToken);
00117 if (myValue) ::free(myValue);
00118 }
00119
00120 const char *getToken() const { return myToken; }
00121 const char *getValue() const { return myValue; }
00122
00123 private:
00124 char *myToken;
00125 char *myValue;
00126 };
00127
00128 class PRM_API DS_HandleBinding {
00129 public:
00130 DS_HandleBinding(const char *channelname, const char *type,
00131 const char *desc, const char *label,
00132 const char *default_settings)
00133 : myChannelName(0), myType(0), myDesc(0), myLabel(0)
00134 {
00135 if (channelname) myChannelName = ::strdup(channelname);
00136 if (type) myType = ::strdup(type);
00137 if (desc) myDesc = ::strdup(desc);
00138 if (label) myLabel = ::strdup(label);
00139 if (default_settings)
00140 myDefaultSettings = ::strdup(default_settings);
00141 }
00142 ~DS_HandleBinding()
00143 {
00144 if (myChannelName) ::free(myChannelName);
00145 if (myType) ::free(myType);
00146 if (myDesc) ::free(myDesc);
00147 if (myLabel) ::free(myLabel);
00148 if (myDefaultSettings) ::free(myDefaultSettings);
00149 }
00150
00151 const char *getChannelName() const { return myChannelName; }
00152 const char *getType() const { return myType; }
00153 const char *getDesc() const { return myDesc; }
00154 const char *getLabel() const { return myLabel; }
00155 const char *getDefaultSettings() const { return myDefaultSettings; }
00156
00157 private:
00158 char *myChannelName, *myType, *myDesc, *myLabel, *myDefaultSettings;
00159 };
00160
00161 class PRM_API DS_SelectorBinding {
00162 public:
00163 DS_SelectorBinding(const char *parm_name,
00164 const char *type, const char *prompt, const char *desc,
00165 const char *mask, int dragging,
00166 const char *menu, int asterisk,
00167 int input_index=-1, int input_required=0)
00168 : myParmName(0), myType(0), myDesc(0), myPrompt(0), myMask(0), myMenu(0)
00169 {
00170 myDragging = dragging;
00171 myAsterisk = asterisk;
00172 myInputIndex = input_index;
00173 myInputRequired = input_required;
00174 if (parm_name) myParmName = ::strdup(parm_name);
00175 if (type) myType = ::strdup(type);
00176 if (prompt) myPrompt = ::strdup(prompt);
00177 if (desc) myDesc = ::strdup(desc);
00178 if (mask) myMask = ::strdup(mask);
00179 if (menu) myMenu = ::strdup(menu);
00180 }
00181 ~DS_SelectorBinding()
00182 {
00183 if (myParmName) ::free(myParmName);
00184 if (myType) ::free(myType);
00185 if (myPrompt) ::free(myPrompt);
00186 if (myDesc) ::free(myDesc);
00187 if (myMenu) ::free(myMenu);
00188 if (myMask) ::free(myMask);
00189 }
00190
00191 const char *getParmName() const { return myParmName; }
00192 const char *getType() const { return myType; }
00193 const char *getPrompt() const { return myPrompt; }
00194 const char *getDesc() const { return myDesc; }
00195 const char *getPrimMask() const { return myMask; }
00196 int getDragging() const { return myDragging; }
00197 const char *getMenu() const { return myMenu; }
00198 int getAsterisk() const { return myAsterisk; }
00199 int getInputIndex() const { return myInputIndex; }
00200 int getInputRequired() const { return myInputRequired; }
00201
00202 private:
00203 char *myParmName, *myType, *myPrompt, *myDesc, *myMask, *myMenu;
00204 int myDragging, myAsterisk;
00205 int myInputIndex, myInputRequired;
00206 };
00207
00208 class PRM_API DS_DisableInfo
00209 {
00210 public:
00211 DS_DisableInfo() {}
00212 ~DS_DisableInfo();
00213
00214 void addInfo(char *parm, char *value)
00215 { myControlParm.append( ::strdup(parm) );
00216 myControlValue.append( ::strdup(value) ); }
00217
00218 UT_PtrArray<char *> myControlParm;
00219 UT_PtrArray<char *> myControlValue;
00220 };
00221
00222 typedef UT_PtrArray< DS_MenuChoice * > DS_Menu;
00223 typedef UT_PtrArray< DS_AttributeValue * > DS_AttributeList;
00224 typedef UT_PtrArray< DS_HandleBinding * > DS_HandleList;
00225 typedef UT_PtrArray< DS_SelectorBinding * > DS_SelectorList;
00226 typedef UT_PtrArray< DS_DisableInfo * > DS_DisableList;
00227
00228
00229
00230 class PRM_API DS_ParmInfo
00231 {
00232 public:
00233 DS_ParmInfo( const char *token );
00234 ~DS_ParmInfo();
00235
00236 void addHelpText(const char *text);
00237
00238 UT_String myToken;
00239 UT_String myLabel;
00240 UT_String myCallback;
00241 UT_String myHelpText;
00242 UT_String myRenderManType;
00243 UT_String myOpFilter;
00244 PRM_Type myType;
00245 PRM_MultiType myMultiType;
00246 unsigned myFlag;
00247 int myToolbox;
00248
00249 UT_String myGroup;
00250 UT_String myMenuScript;
00251 DS_Menu myMenu;
00252 int myMenuType;
00253 DS_AttributeList myAttributes;
00254 DS_HandleList myHandles;
00255 DS_SelectorBinding *mySelector;
00256
00257 unsigned int mySize;
00258 DS_DefaultValue *myDefault;
00259 PRM_Range *myRange;
00260
00261 DS_DisableList myDisableInfo;
00262 UT_String myDisableWhen;
00263
00264 bool setTypeByToken( const char *token );
00265 const char *getTypeToken() const;
00266 bool isInvisible() const;
00267
00268 void setLogarithmic(bool flag);
00269 bool isLogarithmic() const;
00270
00271
00272 bool getIsArray() const { return myIsArray; }
00273 void setIsArray(bool f) { myIsArray = f; }
00274
00275 void setFlag( unsigned flag ) { myFlag |= flag; }
00276 void clearFlag( unsigned flag = (unsigned)-1 ){ myFlag &= ~flag; }
00277 unsigned getFlag( unsigned flag ) const { return myFlag & flag; }
00278 private:
00279 bool myIsArray;
00280 };
00281
00282 typedef UT_PtrArray<DS_ParmInfo*> DS_ParmInfoList;
00283
00284
00285
00286 class PRM_API DS_ParmReader
00287 {
00288 public:
00289
00290
00291 DS_ParmReader( unsigned doGroups = 0,
00292 unsigned color = 0,
00293 unsigned lightChan = 1 );
00294 virtual ~DS_ParmReader();
00295
00296 virtual const char *getClassName() const;
00297
00298
00299
00300 virtual int open( const char *fileName ) = 0;
00301 virtual void close() = 0;
00302
00303
00304
00305
00306
00307 virtual int parse() = 0;
00308
00309
00310
00311
00312
00313 virtual const char *getScriptTypeName() = 0;
00314 virtual const char *getScriptName() = 0;
00315 virtual const char *getScriptLabel() = 0;
00316 virtual const char *getScriptHelp() = 0;
00317 virtual const char *getScriptInfo() = 0;
00318 virtual const char *getInputLabel(int ) { return ""; }
00319 virtual const char *getRenderMask() { return ""; }
00320
00321
00322 int numParms() { return myParms.entries(); }
00323
00324
00325
00326 virtual DS_ParmInfo *getParmInfo( const int index );
00327
00328
00329 int isDoingGroups() const { return myDoGroups; }
00330 void setGroupSize(int g) { myGroupSize = g; }
00331 int getGroupSize() const { return myGroupSize; }
00332 UT_StringList &getGroups() { return myGroups; }
00333 DS_SelectorList &getUnboundSelectors() { return myUnboundSelectors; }
00334 DS_SelectorList &getReservedSelectors() { return myReservedSelectors; }
00335 DS_HandleList &getReservedHandles() { return myReservedHandles; }
00336 DS_HandleList &getBoundHandles() { return myBoundHandles; }
00337
00338 protected:
00339 DS_ParmInfoList myParms;
00340 UT_StringList myGroups;
00341 DS_SelectorList myUnboundSelectors;
00342 DS_SelectorList myReservedSelectors;
00343 DS_HandleList myReservedHandles;
00344 DS_HandleList myBoundHandles;
00345
00346 short myDoGroups;
00347 short myGroupSize;
00348 short myColorFlag;
00349 short myLightChan;
00350 };
00351
00352 #endif
00353