00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __PRM_ScriptParm__
00022 #define __PRM_ScriptParm__
00023
00024 #include "PRM_API.h"
00025 #include "PRM_DisableList.h"
00026 #include "PRM_Template.h"
00027 #include "PRM_Default.h"
00028 #include <UT/UT_RefArray.h>
00029
00030 class DS_Stream;
00031 class PRM_SpareData;
00032 class PRM_ScriptPage;
00033 class PRM_ScriptParm;
00034 class PRM_Default;
00035 class PRM_Range;
00036 class PRM_ChoiceList;
00037 class PRM_ScriptImports;
00038
00039 class PRM_API PRM_ScriptGroup {
00040 public:
00041 PRM_ScriptGroup(PRM_ScriptParm *owner,
00042 bool asmultiparm = false);
00043 virtual ~PRM_ScriptGroup();
00044
00045 void addPage(PRM_ScriptPage *page)
00046 { myPages.append(page); }
00047
00048 int getPageCount() const
00049 { return myPages.entries(); }
00050 PRM_ScriptPage *getPage(int idx)
00051 { return myPages(idx); }
00052
00053 PRM_Default *getDefaults()
00054 {
00055 if (!mySizes) buildSizes();
00056 return mySizes;
00057 }
00058
00059 bool isMultiParm() const
00060 { return myMultiParmFlag; }
00061
00062 PRM_MultiType getMultiType() const
00063 { return myMultiType; }
00064 void setMultiType(PRM_MultiType multitype)
00065 { myMultiType = multitype; }
00066
00067 int computeTemplateSize();
00068 void fillTemplate(PRM_Template *array, int &idx,
00069 PRM_ScriptImports *&imports,
00070 int nest_level);
00071
00072 protected:
00073
00074
00075 virtual void buildSizes();
00076
00077 UT_PtrArray<PRM_ScriptPage *> myPages;
00078 PRM_ScriptParm *myOwner;
00079 PRM_Default *mySizes;
00080 PRM_MultiType myMultiType;
00081 bool myMultiParmFlag;
00082 };
00083
00084 class PRM_API PRM_ScriptParm {
00085 public:
00086 PRM_ScriptParm();
00087 virtual ~PRM_ScriptParm();
00088
00089 enum {
00090 PRM_SPARM_REQUIRED = 0x001,
00091 PRM_SPARM_DIRECTION = 0x002,
00092 PRM_SPARM_COLOR = 0x004,
00093 PRM_SPARM_OBJECT = 0x008,
00094 PRM_SPARM_RENDERER = 0x010,
00095 PRM_SPARM_ANIMSTRING = 0x020,
00096 PRM_SPARM_OBJECTLIST = 0x040,
00097 PRM_SPARM_EMBED = 0x080,
00098 PRM_SPARM_LOGARITHMIC = 0x100,
00099 PRM_SPARM_ALLFLAGS = 0x1FF
00100 };
00101
00102 int parse(DS_Stream &is);
00103 int parseGroup(DS_Stream &is,
00104 PRM_ScriptPage *page,
00105 const char *grouptype);
00106 bool parseMultiParm(DS_Stream &is,
00107 PRM_MultiType multitype,
00108 PRM_ScriptPage *page);
00109 int parseGroupAttribute(DS_Stream &is);
00110
00111 void appendScriptParms(
00112 UT_PtrArray<PRM_ScriptParm *> &parms);
00113
00114 void setFlag(unsigned flag) { myFlag |= flag; }
00115 void clearFlag(unsigned flag) { myFlag &= ~flag; }
00116 unsigned getFlag(unsigned bit) const { return myFlag & bit;}
00117
00118 PRM_ScriptGroup *getGroup() const { return myGroup; }
00119 PRM_Name &getName() { return myName; }
00120 const PRM_Name &getName() const { return myName; }
00121 const PRM_Type &getType() const { return myType; }
00122 PRM_TypeExtended getTypeExtended() const{ return myTypeExtended; }
00123 PRM_MultiType getMultiType() const { return myMultiType; }
00124 const PRM_Default *getDefaults() const
00125 { return myDefaults.entries() ? &myDefaults(0)
00126 : (const PRM_Default*)NULL; }
00127 PRM_Default *getDefaults()
00128 { return myDefaults.entries() ? &myDefaults(0)
00129 : (PRM_Default*)NULL; }
00130 PRM_Range *getRange() const { return myRange; }
00131 int getSize() const { return myVectorSize; }
00132 PRM_ChoiceList *getMenu() const { return myMenu; }
00133 const UT_String &getOption() const { return myOption; }
00134 const UT_String &getHelpText() const { return myHelpText; }
00135 PRM_DisableList &getDisableList() { return myDisableList; }
00136 PRM_Template *getMultiTemplate();
00137 bool getBaseParm() const { return myBaseParm; }
00138
00139 PRM_SpareData *getSpareData(bool create=false);
00140
00141
00142 void enforceOptions();
00143
00144
00145 static const char *protectString(const char *s, int handlenull = 0);
00146 static void protectStrcat(UT_WorkBuffer &dest, const char *s,
00147 int handlenull = 0);
00148
00149 int computeTemplateSize();
00150 void fillTemplate(PRM_Template *array, int &idx,
00151 PRM_ScriptImports *&imports,
00152 int nest_level);
00153 protected:
00154 virtual PRM_ScriptGroup *newGroup(bool asmultiparm = false);
00155 virtual PRM_ScriptPage *newPage();
00156
00157 virtual int handleUnknown(DS_Stream &is, UT_String &token);
00158 virtual PRM_Callback getScriptParmCallback() const;
00159 virtual bool wantsParametersAnimatable() const;
00160 int buildMultiParmTemplate(
00161 PRM_ScriptImports *&imports,
00162 int nest_level);
00163
00164 int parseMenu(DS_Stream &is);
00165 int parseAttribute(DS_Stream &is);
00166 int parseDefaults(DS_Stream &is, int isstring);
00167 int parseRange(DS_Stream &is);
00168 int parseDisableInfo(DS_Stream &is);
00169 void clearMenu();
00170 void clearDefaults();
00171
00172 PRM_ScriptGroup *myGroup;
00173 PRM_ChoiceList *myMenu;
00174 PRM_Name *myMenuNames;
00175 PRM_Template *myMultiTemplate;
00176 int myMenuType;
00177 PRM_Name myName;
00178 PRM_Type myType;
00179 PRM_TypeExtended myTypeExtended;
00180 PRM_MultiType myMultiType;
00181 int myVectorSize;
00182 UT_RefArray<PRM_Default> myDefaults;
00183 UT_StringArray myDefaultStrings;
00184 PRM_Range *myRange;
00185 PRM_SpareData *mySpareData;
00186 PRM_DisableList myDisableList;
00187 unsigned myFlag;
00188 UT_String myHelpText;
00189 int myToolboxLevel;
00190 bool myBaseParm;
00191
00192
00193 UT_String myOption;
00194
00195 static const char *theTokens[];
00196 static int theNumParms[];
00197 };
00198
00199 #endif
00200