00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __SIM_QueryArrays_h__
00015 #define __SIM_QueryArrays_h__
00016
00017 #include "SIM_API.h"
00018 #include <UT/UT_IntArray.h>
00019 #include <UT/UT_StringArray.h>
00020 #include "SIM_Query.h"
00021
00022 class UT_BitArray;
00023 class UT_FloatArray;
00024 class UT_Vector2Array;
00025 class UT_Vector3Array;
00026 class UT_Vector4Array;
00027
00028
00029
00030
00031 class SIM_API SIM_QueryArrays : public SIM_Query
00032 {
00033 public:
00034
00035 explicit SIM_QueryArrays(const SIM_Data *owner);
00036
00037 virtual ~SIM_QueryArrays();
00038
00039 void addArray(const char *recordtype,
00040 const char *fieldname,
00041 const UT_BitArray *array);
00042 void addArray(const char *recordtype,
00043 const char *fieldname,
00044 const UT_IntArray *array);
00045 void addArray(const char *recordtype,
00046 const char *fieldname,
00047 const UT_FloatArray *array);
00048 void addArray(const char *recordtype,
00049 const char *fieldname,
00050 const UT_StringArray *array);
00051 void addArray(const char *recordtype,
00052 const char *fieldname,
00053 const UT_Vector2Array *array);
00054 void addArray(const char *recordtype,
00055 const char *fieldname,
00056 const UT_Vector3Array *array);
00057 void addArray(const char *recordtype,
00058 const char *fieldname,
00059 const UT_Vector4Array *array);
00060
00061 protected:
00062 virtual int getNumRecordTypesSubclass() const;
00063 virtual const char *getRecordTypeNameSubclass(
00064 int recordtypenum) const;
00065
00066 virtual int getNumRecordsSubclass(
00067 const char *recordtype) const;
00068 virtual int getNumFieldsSubclass(
00069 const char *recordtype) const;
00070 virtual const char *getFieldNameSubclass(
00071 const char *recordtype,
00072 int fieldnum) const;
00073 virtual UT_OptionType getFieldTypeSubclass(
00074 const char *recordtype,
00075 int fieldnum) const;
00076 virtual bool getFieldRawSubclass(
00077 const char *recordtype,
00078 int recordnum,
00079 const char *fieldname,
00080 UT_OptionEntry *&result) const;
00081
00082 #if defined(SOLARIS)
00083 public:
00084 #else
00085 private:
00086 #endif
00087 class SIM_QueryArrayField
00088 {
00089 public:
00090 SIM_QueryArrayField(
00091 const UT_BitArray *array);
00092 SIM_QueryArrayField(
00093 const UT_IntArray *array);
00094 SIM_QueryArrayField(
00095 const UT_FloatArray *array);
00096 SIM_QueryArrayField(
00097 const UT_StringArray *array);
00098 SIM_QueryArrayField(
00099 const UT_Vector2Array *array);
00100 SIM_QueryArrayField(
00101 const UT_Vector3Array *array);
00102 SIM_QueryArrayField(
00103 const UT_Vector4Array *array);
00104 ~SIM_QueryArrayField();
00105
00106 UT_OptionType getFieldType() const;
00107 int getNumEntries() const;
00108 bool getValueRaw(int entrynum,
00109 UT_OptionEntry *&result) const;
00110
00111 private:
00112 void initialize();
00113
00114 UT_OptionType myFieldType;
00115 const UT_BitArray *myBitArray;
00116 const UT_IntArray *myIntArray;
00117 const UT_FloatArray *myFloatArray;
00118 const UT_StringArray *myStringArray;
00119 const UT_Vector2Array *myVector2Array;
00120 const UT_Vector3Array *myVector3Array;
00121 const UT_Vector4Array *myVector4Array;
00122 };
00123
00124 class SIM_QueryArrayRecord
00125 {
00126 public:
00127 SIM_QueryArrayRecord();
00128 ~SIM_QueryArrayRecord();
00129
00130 void addField(const char *fieldname,
00131 SIM_QueryArrayField *field);
00132 int getNumFields() const;
00133 const char *getFieldName(int fieldnum) const;
00134 UT_OptionType getFieldType(int fieldnum) const;
00135 const SIM_QueryArrayField *getField(int fieldnum) const;
00136 int getNumEntries() const;
00137 bool getValueRaw(const char *fieldname,
00138 int entrynum,
00139 UT_OptionEntry *&result) const;
00140
00141 private:
00142 UT_StringArray myFieldNames;
00143 UT_PtrArray<SIM_QueryArrayField *> myFields;
00144 };
00145 #if defined(SOLARIS)
00146 private:
00147 #endif
00148
00149 SIM_QueryArrayRecord *getRecord(const char *recordtype);
00150
00151 UT_StringArray myRecordNames;
00152 UT_PtrArray<SIM_QueryArrayRecord *> myRecords;
00153 };
00154
00155 #endif
00156