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 #ifndef __IMG_FileOpt__
00035 #define __IMG_FileOpt__
00036
00037 #include "IMG_API.h"
00038 #include <UT/UT_PtrArray.h>
00039 #include <UT/UT_String.h>
00040
00041 class IMG_FileOptionList;
00042
00043
00044 enum IMG_FileOptionHint {
00045 IMG_OPTION_STRING,
00046 IMG_OPTION_INTEGER,
00047 IMG_OPTION_FLOAT,
00048
00049 IMG_OPTION_TERMINATOR
00050 };
00051
00052 enum IMG_FileOptionScope {
00053 IMG_FILE_SCOPE_IN = 0x1,
00054 IMG_FILE_SCOPE_OUT = 0x2,
00055 IMG_FILE_SCOPE_NORMAL_RASTER = 0x4
00056 };
00057
00058 #define IMG_FILE_SCOPE_INOUT \
00059 (IMG_FileOptionScope)((IMG_FILE_SCOPE_IN|IMG_FILE_SCOPE_OUT))
00060
00061
00062
00063 class IMG_API IMG_FileTag {
00064 public:
00065 IMG_FileTag(const char *token=0, const char *value=0)
00066 {
00067 myToken = token;
00068 myValue = value;
00069 }
00070 ~IMG_FileTag() {}
00071
00072 const char *getToken() const { return myToken; }
00073 const char *getValue() const { return myValue; }
00074
00075 void setToken(const char *t) { myToken = t; }
00076 void setValue(const char *v) { myValue = v; }
00077
00078 void harden()
00079 {
00080 myToken.harden();
00081 myValue.harden();
00082 }
00083 private:
00084 UT_String myToken;
00085 UT_String myValue;
00086 };
00087
00088 class IMG_API IMG_FileTagList {
00089 public:
00090 IMG_FileTagList();
00091 IMG_FileTagList(IMG_FileTag *list);
00092 ~IMG_FileTagList();
00093
00094 void setTag(const char *name, const char *value,
00095 const IMG_FileOptionList *options=0);
00096 void removeTag(const char *name);
00097
00098 const char *getTag(const char *name) const;
00099 const IMG_FileTag *getTag(int i) const { return myList(i); }
00100 int getTagIndex(const char *name) const;
00101 int entries() const { return myList.entries(); }
00102 void clear();
00103
00104 private:
00105 UT_PtrArray<IMG_FileTag *> myList;
00106 unsigned myOwnListFlag:1,
00107 mySortedFlag:1;
00108 };
00109
00110 class IMG_API IMG_FileOption {
00111 public:
00112 IMG_FileOption(IMG_FileOptionHint hint = IMG_OPTION_TERMINATOR,
00113 const char *name=0, const char *label=0,
00114 const char *defvalue = 0,
00115 IMG_FileTag *menu=0, fpreal min=1, fpreal max=0,
00116 IMG_FileOptionScope scope = IMG_FILE_SCOPE_OUT)
00117 : myName(name, label), myMenu(menu)
00118 {
00119 myHint = hint;
00120 myMin = min;
00121 myMax = max;
00122 myDefault = defvalue;
00123 myScope = scope;
00124 }
00125 ~IMG_FileOption();
00126
00127 const char *getToken() const { return myName.getToken(); }
00128 const char *getLabel() const { return myName.getValue(); }
00129
00130 const char *getDefault() const { return myDefault; }
00131 void setDefault(const char *str)
00132 {
00133 myDefault.harden(str);
00134 }
00135
00136 IMG_FileOptionHint getHint() const { return myHint; }
00137
00138 int hasMenu() const { return myMenu.entries(); }
00139 const IMG_FileTagList &getMenu() const { return myMenu; }
00140
00141
00142
00143 int hasRange() const { return myMin<myMax; }
00144 fpreal getMin() const { return myMin; }
00145 fpreal getMax() const { return myMax; }
00146
00147 IMG_FileOptionScope getScope() const { return myScope; }
00148
00149 private:
00150 IMG_FileTag myName;
00151 IMG_FileTagList myMenu;
00152 UT_String myDefault;
00153 fpreal myMin, myMax;
00154 IMG_FileOptionHint myHint;
00155 IMG_FileOptionScope myScope;
00156 };
00157
00158 class IMG_API IMG_FileOptionList {
00159 public:
00160 IMG_FileOptionList(IMG_FileOption *list);
00161 ~IMG_FileOptionList();
00162
00163 const IMG_FileOption *findOption(const char *token) const;
00164 const IMG_FileOption *getOption(int i) const { return myList(i); }
00165 int entries() const { return myList.entries(); }
00166
00167 private:
00168 UT_PtrArray<IMG_FileOption *> myList;
00169 };
00170
00171 #endif