diff -r 000000000000 -r f72a12da539e idlehomescreen/inc/xndomnode.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/inc/xndomnode.h Thu Dec 17 08:40:49 2009 +0200 @@ -0,0 +1,396 @@ +/* +* Copyright (c) 2005,2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Primary datatype for the entire Document Object Model. +* +*/ + + + +#ifndef XN_DOM_NODE_H +#define XN_DOM_NODE_H + +// INCLUDES +#include +#include +#include "mxndomlistitem.h" + +// FORWARD DECLARATIONS +enum TContentType + { + EEmpty = 0, + EAny, + EPCData + }; + +class CXnDomList; +class CXnDomStringPool; +class CXnNode; + +// CLASS DECLARATION + +/** +* @ingroup group_domdocument +* Class represents a single node in the document tree. +* +* @lib xndomdocument.lib +* @since Series 60 3.1 +*/ +class CXnDomNode : public CBase, public MXnDomListItem + { + + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CXnDomNode* NewL( + const TDesC8& aName, + const TDesC8& aNS, + CXnDomStringPool& aStringPool ); + + /** + * Two-phased stream constructor. + */ + static CXnDomNode* NewL( RReadStream& aStream, CXnDomStringPool& aStringPool ); + + /** + * Destructor. + */ + virtual ~CXnDomNode(); + + public: // New functions + /** + * Makes a clone from this node and it's child nodes. + * @since Series 60 3.1 + * @param aStringPool. A new string pool. + * @return Pointer to a clone node. Caller has the ownership. + */ + IMPORT_C CXnDomNode* CloneL( CXnDomStringPool& aStringPool ); + + /** + * Makes a clone only from this node. + * @since Series 60 3.1 + * @param aStringPool. A new string pool. + * @return Pointer to a clone node. Caller has the ownership. + */ + IMPORT_C CXnDomNode* CloneWithoutKidsL( CXnDomStringPool& aStringPool ); + + /** + * Contructs a ref node from this node and its child's. + * @since Series 60 3.1 + * @return Pointer to a ref node. Caller has the ownership. + */ + IMPORT_C CXnDomNode* CreateRefNodeL(); + + /** + * Get the namespace of this node. + * @since Series 60 3.1 + * @return Pointer to the namespace buffer + */ + IMPORT_C const TDesC8& Namespace(); + + /** + * Node's attributes exist in a list. + * @since Series 60 3.1 + * @return Reference to a attribute list. + */ + IMPORT_C CXnDomList& AttributeList()const; + + /** + * Node's properties exist in a list. + * @since Series 60 3.1 + * @return Reference to a property list. + */ + IMPORT_C CXnDomList& PropertyList(); + + /** + * Node need to know it's parent. + * @since Series 60 3.1 + * @param aParent Pointer to this node parent + */ + IMPORT_C void SetParent( CXnDomNode* aParent ); + + /** + * Node's parent is enquered e.g to traverse the document. + * @since Series 60 3.1 + * @return Pointer to a parent node + */ + IMPORT_C CXnDomNode* Parent() const; + + /** + * Node id is for a uiengine use. + * @since Series 60 3.1 + * @param aNodeId Unique identifier + */ + IMPORT_C void SetNodeId( const TInt aNodeId ); + + /** + * Get the node unique identifier. + * @since Series 60 3.1 + * @return Node unique identifier + */ + IMPORT_C TInt NodeId() const; + + /** + * Get the node unique identifier. + * @since Series 60 3.1 + * @return Node unique identifier + */ + IMPORT_C TInt ItemIndex( const MXnDomListItem& aItem )const; + + /** + * Access to child nodes. + * @since Series 60 3.1 + * @return Pointer to a list of child nodes + */ + IMPORT_C CXnDomList& ChildNodes(); + + /** + * Child nodes of this node are needed to be able to + * traverse the document. + * @since Series 60 3.1 + * @param aNode Node owns it's childs + */ + IMPORT_C void AddChildL( CXnDomNode* aNode ); + + /** + * Child nodes of this node are needed to be able to + * traverse the document. + * @since Series 60 3.1 + * @param aNode Node owns it's childs + * @param aIndex Index in list where the node is added + */ + IMPORT_C void AddChildL( CXnDomNode* aNode, TInt aIndex ); + + /** + * Removes node from the child list and frees memory allocated + * for a child node and it descendants. + * @since Series 60 3.1 + * @param aNode Node to be released + */ + IMPORT_C void DeleteChild( CXnDomNode* aNode ); + + /** + * Replaces a child node with the other node. Memory allocated for + * the node is freed. + * @since Series 60 3.1 + * @param aNode Node to be replaced + * @param aNewNode New node + */ + IMPORT_C void ReplaceChildL( CXnDomNode* aNode, CXnDomNode* aNewNode ); + + /** + * Get the character data + * @since Series 60 3.1 + * @return Reference to a buffer + */ + IMPORT_C const TDesC8& PCData(); + + /** + * Append PCData into node. Thus it is possible to have + * "a c e " PCData. + * @since Series 60 3.1 + * @param aPCData UTF-8 encoded parsed character data + */ + IMPORT_C void AppendPCDataL( const TDesC8& aPCData ); + + /** + * Set parsed character data. + * @since Series 60 3.1 + * @param aPCData UTF-8 encoded parsed character data + */ + IMPORT_C void SetPCDataL( const TDesC8& aPCData ); + + /** + * Set content type + * @since Series 60 3.1 + * @return content type + */ + IMPORT_C const TContentType& ContentType(); + + /** + * Get content type + * @since Series 60 3.1 + * @param aContentType content type + */ + IMPORT_C void SetContentType( const TContentType& aContentType ); + + /** + * Recursive function to count all child nodes belonging + * to this node. + * @since Series 60 3.1 + * @return This node and it's all childs count + */ + IMPORT_C TInt DescendantCount() const; + + /** + * Get reference to the dom's string pool. + * @since Series 60 3.1 + * @return Reference to string pool + */ + IMPORT_C CXnDomStringPool& StringPool() const; + + /** + * Mark this node as a reference node. + * @since Series 60 3.1 + * @param aRefNode ETrue if node is a reference node + */ + IMPORT_C void SetRefNode( TBool aRefNode=ETrue ); + + /** + * Check if this node is referring to some global node. + * @since Series 60 3.1 + * @return ETrue if this is a reference node. + */ + IMPORT_C TBool IsRefNode() const; + + /** + * Deletes attributes when they are not needed anymore. + * I.e. UIEngine has copied them into property list. + * @since Series 60 3.1 + */ + IMPORT_C void DeleteAttributeList(); + + /** + * Returns value of given attribute + * @param aAttribute Name of the attribute + * @since S60 3.1 + * @return Value of an attribute + */ + IMPORT_C const TDesC8& AttributeValue(const TDesC8& aAttribute) const; + + public: //From MXnDomListItem + + + /** + * Documented in CXnDomListItem::Size + */ + TInt Size() const; + + /** + * Documented in CXnDomListItem::ExternalizeL + * NOTE: This function is not implemented yet! + */ + void ExternalizeL( RWriteStream& aStream ) const; + + /** + * Documented in CXnDomListItem::InternalizeL + */ + void InternalizeL( RReadStream& aStream ); + + /** + * Similar to InternalizeL, but does not expect dedicated odt document + */ + void ReadL( RReadStream& aStream ); + + + /** + * Documented in CXnDomListItem::Name + */ + IMPORT_C const TDesC8& Name(); + + + public: + + /** + * Sets pointer to associated layout node + * @since S60 3.1 + * @param aNode Pointer to associated layout node + */ + IMPORT_C void SetLayoutNode(CXnNode* aNode); + + /** + * Returns pointer to associated layout node + * @since S60 3.1 + * @return Pointer to associated layout node + */ + IMPORT_C CXnNode* LayoutNode(); + + /** + * Set the namespace for this node. + * @since Series 60 3.1 + * @param aNS New namespace + */ + IMPORT_C void SetNamespaceL(const TDesC8& aNS); + + /** + * Makes a clone from this node and it's child nodes. Sets new namespace. + * @since Series 60 3.1 + * @param aStringPool. A new string pool. + * @param aNS. A new namespace. + * @return Pointer to a clone node. Caller has the ownership. + */ + IMPORT_C CXnDomNode* CloneL( CXnDomStringPool& aStringPool, const TDesC8& aNS ); + + /** + * Set ownership of node and its children + * @since Series 60 5.1 + * @param aNS. A new namespace. + * @return void + */ + IMPORT_C void SetOwnershipL( const TDesC8& aNS ); + + private: + /** + * C++ default constructor. + */ + CXnDomNode( CXnDomStringPool& aStringPool ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( const TDesC8& aName, const TDesC8& aNS ); + + private: // Data + + //iNameRef refers to a name string in a string pool + TInt iNameRef; + + //iNSRef refers to a namespace string in a string pool + TInt iNSRef; + + //iStringPool is used to resolve strings based on references + CXnDomStringPool& iStringPool; + + //Type of the elements content + TContentType iContentType; + + //Parsed character data + HBufC8* iPCData; + + //Node's parent pointer + CXnDomNode* iParentNode; + + //Node unique identifier + TInt iNodeId; + + //Node's childs are collected into a list. Childs are owned by node + CXnDomList* iChildList; + + //Node is the owner of the attributes + CXnDomList* iAttributeList; + + //Node is the owner of the properties + CXnDomList* iPropertyList; + + //Flag is set if this node is reference node + TBool iRefNode; + + // Not owned + CXnNode* iLayoutNode; + }; + +#endif // XN_DOM_NODE_H + +// End of File