dependencies/xcfw/gmxmlelement.h
author jake
Tue, 13 Apr 2010 15:07:27 +0300
branchv5backport
changeset 56 7b5c31fac191
parent 17 c9bafd575d88
permissions -rw-r--r--
Many of the components were not compilingm,because bld.inf had undefined flag #ifdef RD_CUSTOMIZABLE_AI. All the flags removed now. Components do not compile right away. E.g. many icons are missing and need to be copied from Symbian3. See example from MCSPlugin. Shortcut plugin does not need to be compiled as MCSPlugin replaces it.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     1
// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     2
// All rights reserved.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     3
// This component and the accompanying materials are made available
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     5
// which accompanies this distribution, and is available
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     7
//
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     8
// Initial Contributors:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    10
//
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    11
// Contributors:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    12
//
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    13
// Description:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    14
// This file contains the declaration of the CMDXMLElement class.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    15
// 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    16
//
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    17
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    18
/**
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    19
 @file
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    20
*/
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    21
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    22
#ifndef __GMXMLELEMENT_H__
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    23
#define __GMXMLELEMENT_H__
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    24
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    25
#include <e32base.h>
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    26
#include <badesca.h>
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    27
#include <gmxmlnode.h>
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    28
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    29
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    30
// forward references
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    31
class CMDXMLEntityConverter;
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    32
class CMDXMLComposer;
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    33
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    34
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    35
// Constants for the initial and terminal states
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    36
const TInt KXMLMinJump = 5; // Don't do binary chop below this size.  Not a critical value.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    37
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    38
class CMDXMLElement : public CMDXMLNode
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    39
/** Generic XML element, and base class for particular XML element types.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    40
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    41
It provides access to the element tag name and its attribute list. Attributes are
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    42
stored as name-value pairs.  
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    43
@publishedPartner
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    44
@released
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    45
*/
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    46
{
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    47
public:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    48
	/** Allocates and constructs a new CMDXMLElement, leaving the object on the cleanup 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    49
	stack.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    50
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    51
	@param aCanHaveChildren Set to true if the element can have children
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    52
	@param aOwnerDocument Pointer to the document at the root of the DOM tree
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    53
	@param aTagName Name of the tag for the element
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    54
	@leave KErrNoMemory Out of memory
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    55
	@return The new CMDXMLElement */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    56
	IMPORT_C static CMDXMLElement* NewLC( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument, TPtrC aTagName );
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    57
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    58
	/** Allocates and constructs a new CMDXMLElement.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    59
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    60
	@param aCanHaveChildren Set to true if the element can have children
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    61
	@param aOwnerDocument Pointer to the document at the root of the DOM tree
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    62
	@param aTagName Name of the tag for the element
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    63
	@leave KErrNoMemory Out of memory
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    64
	@return The new CMDXMLElement */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    65
	IMPORT_C static CMDXMLElement* NewL( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument, TPtrC aTagName );
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    66
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    67
	/** Destructor. */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    68
	IMPORT_C virtual ~CMDXMLElement();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    69
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    70
	// Attribute handling routines.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    71
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    72
	/** Gets a specified attribute value.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    73
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    74
	@param aAttributeName Name of the attribute to get
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    75
	@param aAttributeValue On return, the value of the attribute
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    76
	@return KErrNone if successful, KErrNotFound if the named attribute is not set. */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    77
	IMPORT_C virtual TInt GetAttribute(const TDesC& aAttributeName, TPtrC& aAttributeValue ) const;
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    78
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    79
	/** Checks the validity of an attribute and adds it to the DOM if it's valid.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    80
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    81
	@param aAttributeName Name of the attribute to set
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    82
	@param aAttributeValue Value of the attribute
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    83
	@leave KErrNoMemory Out of memory
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    84
	@return KErrNone if successful, KErrNotSupported if an invalid attribute name 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    85
	or attribute value. */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    86
	IMPORT_C virtual TInt SetAttributeL(const TDesC& aAttributeName, const TDesC& aAttributeValue);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    87
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    88
	/** Checks the validity of an attribute and adds it to the DOM.  The aStoreInvalid 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    89
	parameter is used to control whether invalid attributes are added to the DOM.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    90
	@param aAttributeName Name of the attribute to set
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    91
	@param aAttributeValue Value of the attribute
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    92
	@param aStoreInvalid If set to EFalse only attributes that are found to be valid will be added to
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    93
	the DOM.  Set to ETrue to store all attributes in the DOM, even those that are invalid.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    94
	@leave KErrNoMemory Out of memory
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    95
	@return KErrNone if successful, KErrNotSupported if an invalid attribute name 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    96
	or attribute value. */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    97
	IMPORT_C TInt SetAttributeL(const TDesC& aAttributeName, const TDesC& aAttributeValue, TBool aStoreInvalid);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    98
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
    99
	/** Removes a specified attribute.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   100
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   101
	@param aAttributeName Name of the attribute to remove
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   102
	@return KErrNone if successful, KErrNotFound if the named attribute is not 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   103
	present. */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   104
	IMPORT_C virtual TInt RemoveAttribute(const TDesC& aAttributeName);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   105
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   106
	/** Tests if a specified attribute is set.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   107
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   108
	@param aAttributeName Name of the attribute to test
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   109
	@return True if the named attribute has a value set, false if not */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   110
	IMPORT_C virtual TBool IsAttributeSpecified(const TDesC& aAttributeName) const;
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   111
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   112
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   113
	/** Checks the children of this node for validity.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   114
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   115
	It checks that the list of child elements conforms to those allowed by the DTD. 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   116
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   117
	In a generic CMDXMLElement object, this is always true as it has no basis 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   118
	for a meaningful check. As well as checking the list of direct children, it 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   119
	calls CheckChildren() for each child element. It does not check child nodes 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   120
	that are not elements, as they cannot have children.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   121
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   122
	@return True if the node has valid children */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   123
	IMPORT_C virtual TBool CheckChildren();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   124
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   125
// maybe these should be node functions ?
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   126
	/** Gets a pointer to the first child of a given type if any, otherwise returns 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   127
	NULL.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   128
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   129
	@param aElementType Name of element type to return
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   130
	@return First child element */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   131
	IMPORT_C CMDXMLElement* FirstChildOfType(const TDesC& aElementType);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   132
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   133
	/** Gets a pointer to the last child of a given type if any, otherwise returns 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   134
	NULL.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   135
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   136
	@param aElementType Name of element type to return
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   137
	@return Last child element */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   138
	IMPORT_C CMDXMLElement* LastChildOfType(const TDesC& aElementType);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   139
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   140
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   141
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   142
protected: //construction
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   143
	/**
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   144
	 * Constructor
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   145
	 * @param aCanHaveChildren Flag to indicate if the node represents a node which is allowed children
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   146
	 * @param aOwnerDocument Pointer to the document at the root of the DOM tree - if NULL then assume this is the root
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   147
	 */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   148
	IMPORT_C CMDXMLElement( TBool aCanHaveChildren, CMDXMLDocument* aOwnerDocument );
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   149
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   150
	void ConstructL();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   151
protected:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   152
	/**
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   153
	 * Check the immediate children of this element - i.e. the first level of children only
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   154
	 * The default implementation returns true - derived classes can override with
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   155
	 * DTD-specific checks.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   156
	 * @return True if immediate children are valid
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   157
	 */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   158
	IMPORT_C virtual TBool CheckImmediateChildren();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   159
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   160
private:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   161
	 TBool DoCheckImmediateChildrenL();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   162
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   163
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   164
public: 
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   165
	/** Finds an attribute and returns the index of it.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   166
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   167
	@param aAttName The attribute to search for
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   168
	@return The index of the attribute if found, or KErrNotFound */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   169
	IMPORT_C TInt FindIndex(const TDesC &aAttName);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   170
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   171
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   172
	/** Gets the name and value of an attribute at a given index.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   173
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   174
	@param Index The array index of the element for which details are required
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   175
	@param aAttributeName The attribute name returned
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   176
	@param aAttributeValue The attribute value returned
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   177
	@return KErrNone if index is valid, else KErrNotFound */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   178
	IMPORT_C TInt AttributeDetails(TInt Index, TPtrC& aAttributeName, TPtrC& aAttributeValue);
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   179
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   180
	/** Gets the number of attributes that this element has.
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   181
	
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   182
	@return The number of attributes held by the element */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   183
	IMPORT_C TInt NumAttributes();
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   184
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   185
protected:
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   186
	/** Store attribute names */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   187
	CDesCArraySeg* iDescAttName;		// Store Attribute Names
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   188
	/** Store attribute values */
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   189
	CDesCArraySeg* iDescAttValue;		// Store Attribute Values
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   190
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   191
};
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   192
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   193
c9bafd575d88 xcfw component compiles now
jake
parents:
diff changeset
   194
#endif