1/*
2* Copyright 2006 Sony Computer Entertainment Inc.
3*
4* Licensed under the MIT Open Source License, for details please see license.txt or the website
5* http://www.opensource.org/licenses/mit-license.php
6*
7*/
8
9#ifndef __domExtra_h__
10#define __domExtra_h__
11
12#include <dae/daeDocument.h>
13#include <dom/domTypes.h>
14#include <dom/domElements.h>
15
16#include <dom/domAsset.h>
17#include <dom/domTechnique.h>
18class DAE;
19
20/**
21 * The extra element declares additional information regarding its parent
22 * element.
23 */
24class domExtra : public daeElement
25{
26public:
27	virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::EXTRA; }
28	static daeInt ID() { return 679; }
29	virtual daeInt typeID() const { return ID(); }
30protected:  // Attributes
31/**
32 *  The id attribute is a text string containing the unique identifier of
33 * this element. This value  must be unique within the instance document.
34 * Optional attribute.
35 */
36	xsID attrId;
37/**
38 *  The name attribute is the text string name of this element. Optional attribute.
39 */
40	xsNCName attrName;
41/**
42 *  The type attribute indicates the type of the value data. This text string
43 * must be understood by  the application. Optional attribute.
44 */
45	xsNMTOKEN attrType;
46
47protected:  // Elements
48/**
49 *  The extra element may contain an asset element.  @see domAsset
50 */
51	domAssetRef elemAsset;
52/**
53 *  This element must contain at least one non-common profile technique.
54 * @see domTechnique
55 */
56	domTechnique_Array elemTechnique_array;
57
58public:	//Accessors and Mutators
59	/**
60	 * Gets the id attribute.
61	 * @return Returns a xsID of the id attribute.
62	 */
63	xsID getId() const { return attrId; }
64	/**
65	 * Sets the id attribute.
66	 * @param atId The new value for the id attribute.
67	 */
68	void setId( xsID atId ) { *(daeStringRef*)&attrId = atId; _validAttributeArray[0] = true;
69		if( _document != NULL ) _document->changeElementID( this, attrId );
70	}
71
72	/**
73	 * Gets the name attribute.
74	 * @return Returns a xsNCName of the name attribute.
75	 */
76	xsNCName getName() const { return attrName; }
77	/**
78	 * Sets the name attribute.
79	 * @param atName The new value for the name attribute.
80	 */
81	void setName( xsNCName atName ) { *(daeStringRef*)&attrName = atName; _validAttributeArray[1] = true; }
82
83	/**
84	 * Gets the type attribute.
85	 * @return Returns a xsNMTOKEN of the type attribute.
86	 */
87	xsNMTOKEN getType() const { return attrType; }
88	/**
89	 * Sets the type attribute.
90	 * @param atType The new value for the type attribute.
91	 */
92	void setType( xsNMTOKEN atType ) { *(daeStringRef*)&attrType = atType; _validAttributeArray[2] = true; }
93
94	/**
95	 * Gets the asset element.
96	 * @return a daeSmartRef to the asset element.
97	 */
98	const domAssetRef getAsset() const { return elemAsset; }
99	/**
100	 * Gets the technique element array.
101	 * @return Returns a reference to the array of technique elements.
102	 */
103	domTechnique_Array &getTechnique_array() { return elemTechnique_array; }
104	/**
105	 * Gets the technique element array.
106	 * @return Returns a constant reference to the array of technique elements.
107	 */
108	const domTechnique_Array &getTechnique_array() const { return elemTechnique_array; }
109protected:
110	/**
111	 * Constructor
112	 */
113	domExtra(DAE& dae) : daeElement(dae), attrId(), attrName(), attrType(), elemAsset(), elemTechnique_array() {}
114	/**
115	 * Destructor
116	 */
117	virtual ~domExtra() {}
118	/**
119	 * Overloaded assignment operator
120	 */
121	virtual domExtra &operator=( const domExtra &cpy ) { (void)cpy; return *this; }
122
123public: // STATIC METHODS
124	/**
125	 * Creates an instance of this class and returns a daeElementRef referencing it.
126	 * @return a daeElementRef referencing an instance of this object.
127	 */
128	static DLLSPEC daeElementRef create(DAE& dae);
129	/**
130	 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
131	 * If a daeMetaElement already exists it will return that instead of creating a new one.
132	 * @return A daeMetaElement describing this COLLADA element.
133	 */
134	static DLLSPEC daeMetaElement* registerElement(DAE& dae);
135};
136
137
138#endif
139