williamr@2: // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // XmlElement.h williamr@2: // XML Element class williamr@2: // Derived from CTypedNode. Adds functionality williamr@2: // to make the use of the node simpler williamr@2: // williamr@2: // williamr@2: williamr@2: #ifndef __XMLELEMT_H williamr@2: #define __XMLELEMT_H williamr@2: williamr@2: // williamr@2: // INCLUDES williamr@2: // williamr@2: #include williamr@2: #include williamr@2: williamr@2: // williamr@2: // CONSTANTS williamr@2: // williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: _LIT(KXmlElementDataItemAttributeName, "__XML_DI"); williamr@2: williamr@2: // williamr@2: // DATA TYPES williamr@2: // williamr@2: enum TXmlElementPanic williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: { williamr@2: EXmlElPanicInvalidDataItem = 1 williamr@2: }; williamr@2: williamr@2: // Type of an attribute in a node williamr@2: typedef const TDesC* TXmlAttributeType; williamr@2: // Type of an element (type of node) williamr@2: typedef const TDesC* TXmlElementType; williamr@2: williamr@2: // williamr@2: // FUNCTION PROTOTYPES williamr@2: // williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: GLREF_C void Panic(TXmlElementPanic aPanic); williamr@2: williamr@2: // williamr@2: // FORWARD DECLARATIONS williamr@2: // williamr@2: class RFile; williamr@2: class CAttributeLookupTable; williamr@2: williamr@2: // williamr@2: // CLASS DEFINITIONS williamr@2: // williamr@2: //##ModelId=3B66798702FF williamr@2: class CXmlElement : public CTypedNode williamr@2: /** williamr@2: @publishedAll williamr@2: @deprecated williamr@2: */ williamr@2: { williamr@2: public: williamr@2: // Construction williamr@2: //##ModelId=3B6679870364 williamr@2: static inline CXmlElement* NewL(TXmlElementType aType,CNode* aParent); williamr@2: williamr@2: // Attributes williamr@2: // Return the value of a particular attribute williamr@2: //##ModelId=3B667987035D williamr@2: IMPORT_C const TDesC* Attribute(const TDesC& aAttributeName) const; williamr@2: // Return the value of an aIndexth attribute williamr@2: //##ModelId=3B6679870362 williamr@2: inline const TDesC* Attribute(TInt aIndex) const; williamr@2: williamr@2: // Set attribute value williamr@2: //##ModelId=3B6679870359 williamr@2: IMPORT_C void SetAttributeL(const TDesC& aAttributeName, const TDesC& aAttributeValue, CAttributeLookupTable& aAttributeLUT); williamr@2: williamr@2: // Store a unicode descriptor as data value. williamr@2: //##ModelId=3B6679870357 williamr@2: IMPORT_C void SetTextL(const TDesC& aData); williamr@2: // Get data value williamr@2: //##ModelId=3B6679870352 williamr@2: inline const TDesC* Text() const; williamr@2: williamr@2: // Children williamr@2: //##ModelId=3B6679870350 williamr@2: inline void AppendChildL(CXmlElement* aElement); williamr@2: williamr@2: //##ModelId=3B667987034D williamr@2: IMPORT_C void InsertChildL(TInt aIndexToInsertBefore, CXmlElement* aElement); williamr@2: williamr@2: //##ModelId=3B6679870347 williamr@2: inline TInt Count() const; williamr@2: williamr@2: //##ModelId=3B6679870345 williamr@2: inline CXmlElement* Child(TInt aIndex) const; williamr@2: williamr@2: // Find out the index of this child williamr@2: // INPUT: williamr@2: // aChild - Pointer to the child node williamr@2: // RETURN: williamr@2: // TInt - index to the child, -1 if no child found williamr@2: //##ModelId=3B6679870343 williamr@2: IMPORT_C TInt ChildIndex(CXmlElement* aChild) const; williamr@2: williamr@2: // Data item williamr@2: //##ModelId=3B667987033C williamr@2: IMPORT_C void SetDataItemL(CBase* aDataItem, CAttributeLookupTable& aAttributeLUT); // takes ownership of aDataItem williamr@2: //##ModelId=3B667987033B williamr@2: IMPORT_C CBase* DataItem() const; williamr@2: //##ModelId=3B6679870339 williamr@2: IMPORT_C void DeleteDataItem(CAttributeLookupTable& aAttributeLUT); williamr@2: williamr@2: private: williamr@2: // Data Item handling williamr@2: class CDataItemAttribute : public CBase williamr@2: { williamr@2: public: williamr@2: ~CDataItemAttribute() { delete iDataItem; }; williamr@2: CBase* iDataItem; williamr@2: }; williamr@2: williamr@2: //##ModelId=3B6679870335 williamr@2: CXmlElement() : CTypedNode(NULL, NULL) {}; williamr@2: williamr@2: // Debug stuff williamr@2: //#ifdef _DEBUG williamr@2: public: williamr@2: //##ModelId=3B6679870334 williamr@2: IMPORT_C void WriteIntoFileL(); williamr@2: //##ModelId=3B6679870331 williamr@2: void StartWriteL(RFile& aFile, TInt aIndentation); williamr@2: private: williamr@2: //##ModelId=3B6679870327 williamr@2: void WriteNameL(RFile& aFile, TInt aIndentation); williamr@2: //#endif williamr@2: }; williamr@2: williamr@2: // williamr@2: // INLINE METHODS williamr@2: // williamr@2: inline CXmlElement* CXmlElement::NewL(TXmlElementType aType,CNode* aParent) williamr@2: { williamr@2: return (CXmlElement*)CTypedNode::NewL(aType, aParent); williamr@2: } williamr@2: williamr@2: inline const TDesC* CXmlElement::Attribute(TInt aIndex) const williamr@2: { williamr@2: return (TDesC*)((CDataDelete*)AttributeByIndex(aIndex))->Data(); williamr@2: } williamr@2: williamr@2: inline const TDesC* CXmlElement::Text() const williamr@2: { williamr@2: return (const TDesC*)CTypedNode::Data(); williamr@2: } williamr@2: williamr@2: inline void CXmlElement::AppendChildL(CXmlElement* aElement) williamr@2: { williamr@2: CTypedNode::AppendNodeToThisNodeL(aElement); williamr@2: } williamr@2: williamr@2: inline TInt CXmlElement::Count() const williamr@2: { williamr@2: return NumberImmediateChildren(); williamr@2: } williamr@2: williamr@2: inline CXmlElement* CXmlElement::Child(TInt aIndex) const williamr@2: { williamr@2: return (CXmlElement*)CTypedNode::Child(aIndex); williamr@2: } williamr@2: williamr@2: #endif //__XMLELEMT_H