00001 /* 00002 * Copyright 2006 Sony Computer Entertainment Inc. 00003 * 00004 * Licensed under the MIT Open Source License, for details please see license.txt or the website 00005 * http://www.opensource.org/licenses/mit-license.php 00006 * 00007 */ 00008 00009 #ifndef __DAE_META_ELEMENT_H__ 00010 #define __DAE_META_ELEMENT_H__ 00011 00012 #include <dae/daeTypes.h> 00013 #include <dae/daeArrayTypes.h> 00014 #include <dae/daeElement.h> 00015 #include <dae/daeMetaAttribute.h> 00016 #include <dae/daeRefCountedObj.h> 00017 00018 class DAE; 00019 class daeMetaCMPolicy; 00020 class daeMetaElementArrayAttribute; 00021 00022 typedef daeElementRef (*daeElementConstructFunctionPtr)(DAE& dae); 00023 00042 class daeMetaElement : public daeRefCountedObj 00043 { 00044 protected: 00045 daeStringRef _name; 00046 00047 daeElementConstructFunctionPtr _createFunc; 00048 daeInt _elementSize; 00049 00050 daeMetaAttributeRefArray _metaAttributes; 00051 daeMetaAttributeRef _metaValue; 00052 daeMetaElementArrayAttribute* _metaContents; 00053 daeMetaArrayAttribute* _metaContentsOrder; 00054 00055 daeMetaAttributeRef _metaID; 00056 00057 daeBool _isTrackableForQueries; 00058 daeBool _usesStringContents; 00059 00060 daeBool _isTransparent; 00061 daeBool _isAbstract; 00062 daeBool _allowsAny; 00063 daeBool _innerClass; 00064 00065 daeMetaCMPolicy* _contentModel; 00066 daeMetaArrayAttribute* _metaCMData; 00067 daeUInt _numMetaChoices; 00068 00069 DAE& dae; 00070 00071 public: 00075 DLLSPEC daeMetaElement(DAE& dae); 00076 00080 DLLSPEC ~daeMetaElement(); 00081 00082 public: // public accessors 00083 00088 DAE* getDAE(); 00089 00094 daeBool getIsInnerClass() { return _innerClass; } 00099 void setIsInnerClass( daeBool ic ) { _innerClass = ic; } 00104 daeBool getIsAbstract() { return _isAbstract; } 00109 daeBool getIsTransparent() { return _isTransparent; } 00114 void setIsAbstract( daeBool abstract ) { _isAbstract = abstract; } 00119 void setIsTransparent( daeBool transparent ) { _isTransparent = transparent; } 00120 00126 daeBool getIsTrackableForQueries() { return _isTrackableForQueries; } 00127 00135 void setIsTrackableForQueries(daeBool trackable) { 00136 _isTrackableForQueries = trackable; } 00137 00142 daeBool getAllowsAny() { return _allowsAny; } 00147 void setAllowsAny( daeBool allows ) { _allowsAny = allows; } 00148 00156 daeMetaAttribute* getValueAttribute() { return _metaValue; } 00157 00163 daeMetaAttribute* getIDAttribute() { return _metaID; } 00164 00169 daeStringRef getName() { return _name; } 00170 00175 void setName(daeString s) { _name = s; } 00176 00183 daeMetaAttributeRefArray& getMetaAttributes() { 00184 return _metaAttributes; } 00185 00191 DLLSPEC daeMetaAttribute* getMetaAttribute(daeString s); 00192 00198 void setElementSize(daeInt size) {_elementSize = size;} 00199 00205 daeInt getElementSize() { return _elementSize;} 00206 00207 public: 00214 DLLSPEC void addContents(daeInt offset); 00221 DLLSPEC void addContentsOrder( daeInt offset ); 00230 DLLSPEC void addCMDataArray( daeInt offset, daeUInt numChoices ); 00231 00237 daeMetaElementArrayAttribute* getContents() { return _metaContents; } 00243 daeMetaArrayAttribute* getMetaCMData() { return _metaCMData; } 00248 daeUInt getNumChoices() const { return _numMetaChoices; } 00249 00256 DLLSPEC void appendAttribute(daeMetaAttribute* attr); 00257 00264 void registerClass(daeElementConstructFunctionPtr func) { 00265 _createFunc = func; } 00266 00271 DLLSPEC void validate(); 00272 00280 DLLSPEC daeBool place(daeElement *parent, daeElement *child, daeUInt *ordinal = NULL); 00291 DLLSPEC daeBool placeAt( daeInt index, daeElement *parent, daeElement *child ); 00300 DLLSPEC daeBool placeBefore( daeElement* marker, daeElement *parent, daeElement *child, daeUInt *ordinal = NULL ); 00309 DLLSPEC daeBool placeAfter( daeElement* marker, daeElement *parent, daeElement *child, daeUInt *ordinal = NULL ); 00310 00317 DLLSPEC daeBool remove( daeElement *parent, daeElement *child ); 00323 DLLSPEC void getChildren( daeElement* parent, daeElementRefArray &array ); 00324 00331 DLLSPEC daeElementRef create(); 00332 00341 DLLSPEC daeElementRef create(daeString childElementTypeName); 00342 00347 daeMetaCMPolicy *getCMRoot() { return _contentModel; } 00352 DLLSPEC void setCMRoot( daeMetaCMPolicy *cm ); 00353 }; 00354 00355 typedef daeSmartRef<daeMetaElement> daeMetaElementRef; 00356 typedef daeTArray<daeMetaElementRef> daeMetaElementRefArray; 00357 00358 #endif //__DAE_META_ELEMENT_H__ 00359 00360 00361 00362 00363