svgtopt/SVG/SVGImpl/inc/SVGDocumentImpl.h
changeset 0 d46562c3d99d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/SVG/SVGImpl/inc/SVGDocumentImpl.h	Thu Jan 07 16:19:02 2010 +0200
@@ -0,0 +1,1113 @@
+/*
+* Copyright (c) 2003 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:  SVG Implementation header file
+ *
+*/
+
+
+#ifndef SVGDOCUMENTIMPL_H
+#define SVGDOCUMENTIMPL_H
+
+
+#if !defined(__E32BASE_H__)
+#include <e32base.h>
+#endif
+
+#include <gdi.h>
+class CSvgEngineImpl;
+class   CSvgEventHandler;
+class CSvgErrorImpl;
+class CSvgElementImpl;
+class MSvgEventReceiver;
+#include "SVGXmlDocument.h"
+#include "SVGEvent.h"
+
+#include "SVGEngineInterfaceImpl.h"
+#include "SVGImageLoadingObserver.h" // MSVGImageLoadingObserver
+#include "SVGErrorImpl.h"
+#include "Gfx2dGcOpenVG.h"
+
+//#include "SVGImageHashMap.h"
+#include "SVGFontHashMap.h"
+#include "SVGMemoryManager.h"
+#include "SVGTimedEntityInterface.h"
+
+#include "SvgBitmapFontProvider.h"
+class   MXmlElement;
+class   CSvgSchemaData;
+class   CSvgContentHandler;
+
+class CSvgAnimationBase;
+class CSvgTimeContainer;
+
+/**
+ * Enumeration to define search query constraints for FindAllElements
+ */
+enum TSvgSearchFlags
+    {
+    ESvgSearchAllElements           = 0,
+    ESvgSearchExcludeUseSubtree     = 0x2,
+    };
+/**
+ * An SVG document that represents a SVG element tree..
+ */
+class CSvgDocumentImpl : public CBase,
+                         public MXmlDocument,
+                         public MSVGImageLoadingObserver,
+                         public MSvgTimedEntityInterface
+    {
+    public:
+        /**
+         * Two Phase constructor for SVG document
+         * @since 1.0
+         * @param aHasParent - Indicates whether document has a 
+         *                              parent document or not
+         *        aSyncBehavDefault - Indicates default synchronised behaviour
+         *                            for runtime synchronisation.
+         *        aSyncTolDefault - Indicates the synchronised tolerance in 
+         *                          msecs for runtime synchronisation.
+         * @return CSvgDocumentImpl* 
+         */
+        void Reset(MSvgEvent* aEvent);
+
+        static CSvgDocumentImpl* NewL(CSvgBitmapFontProvider* aSvgBitmapFontProvider, 
+            const TBool aHasParent = EFalse,
+            const TSvgSyncBehaviour aSyncBehavDefault = KSvgDefaultSyncBehaviour,
+            const TInt32 aSyncTolDefault = KSvgDefaultSyncTolerance );
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param aHasParent - Indicates whether document has a 
+         *                              parent document or not
+         *        aSyncBehavDefault - Indicates default synchronised behaviour
+         *                            for runtime synchronisation.
+         *        aSyncTolDefault - Indicates the synchronised tolerance in 
+         *                          msecs for runtime synchronisation.
+         * @return
+         */
+        static CSvgDocumentImpl* NewLC(CSvgBitmapFontProvider* aSvgBitmapFontProvider, 
+            const TBool aHasParent = EFalse,
+            const TSvgSyncBehaviour aSyncBehavDefault = KSvgDefaultSyncBehaviour,
+            const TInt32 aSyncTolDefault = KSvgDefaultSyncTolerance );
+            
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        virtual                 ~CSvgDocumentImpl();
+
+    public:
+        /**
+         * ImageLoadingObserver interface method.
+         * Called from Image loading class to notify image loading
+         * completion.
+         *
+         * @since 1.0
+         * @param : aErrorStatus -- error status, if any
+         * @return : none
+         */
+        virtual void ImageLoadingCompleted( TInt aErrorStatus );
+
+        // Pointer/Hyperlink related
+        void FindAllElements( CSvgElementImpl* aStartElement, TInt aElementId,
+                              RPointerArray<CSvgElementImpl>& aList,
+                              TSvgSearchFlags aFlags = ESvgSearchAllElements );
+
+        TBool SvgElementPresent(CSvgElementImpl* aElement);
+        TBool SearchByPointer(CSvgElementImpl* aParent, CSvgElementImpl* aElement);
+        CXmlElementImpl* GetFocusElement();
+        void SetFocusElement(CXmlElementImpl* aElement );
+        // From MXmlDocument
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        MXmlElement*            CreateElementL( const TDesC& aTagName );
+
+        MXmlElement*            CreateElementL( const TUint8 aTagName );
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        TInt                    CreateAttribute( const TDesC& aName );
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        MXmlElement*            GetElementById( const TDesC& aElementId );
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        TInt           GetNumberOfIds(MXmlElement* aElement);
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        TDesC*            GetId( TInt index );
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        void            FindAllIds( CSvgElementImpl* aStartElement, RPointerArray<TDesC>& aList );
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        MXmlElement*            AppendChildL( MXmlElement* aAppendChild );
+
+        // From MSvgDocument
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+
+        /**
+         * Get URL
+         */
+        TDesC&         GetUrl();       // method of CSvgDocumentImpl
+
+        /**
+         * get root element
+         */
+        IMPORT_C MXmlElement*   RootElement();  // method of CSvgDocumentImpl
+
+        // Class functions
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        CSvgSchemaData*         SchemaData();
+
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        void                    SetUri( const TDesC& aUri );
+
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        void                    GetUri( TDes& aUri );
+
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        void                    SetEngine( CSvgEngineImpl* aEngine );
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+        CSvgEngineImpl*         Engine();
+
+        /**
+         * Add an object to the list of objects that are notified of an event
+         *
+         * @since 1.0
+         * @param aElement - An SVG element that wants to be registered for an event (implements MSvgEventReceiver interface)
+         * @param aEventMask - A bit mask that indicates the types of events an object listens for
+         * @return None
+         */
+        void                    AddToEventReceiverListL( MSvgEventReceiver* aElement,
+                                                        TUint8 aEventMask );
+
+        /**
+         * Add an object to the list of objects that are notified of an event
+         * Has an additional parameter aEvent which is used to check for interactive events 
+         *
+         * @since v3.2
+         * @param aElement - An SVG element that wants to be registered for an event (implements MSvgEventReceiver interface)
+         * @param aEvent - An SVG Event that the target element needs to generate 
+         * @param aEventMask - A bit mask that indicates the types of events an object listens for
+         * @return None
+         */
+        void                    AddToEventReceiverListL( MSvgEventReceiver* aElement,
+                                                         TSvgEvent aEvent,
+                                                        TUint8 aEventMask );
+
+         /**
+         * Removed an object to the list of objects that are notified of an event
+         *
+         * @since 1.0
+         * @param aElement - An SVG element that wants to be registered for an event (implements MSvgEventReceiver interface)
+         * @return None
+         */
+        void                    RemoveFromEventReceiverList( MSvgEventReceiver* aElement );
+
+          /**
+         * Provide the event end time information to the Event Handler
+         *
+         * @since 1.0
+         * @param aElement - An element that, ultimately, processes the event (eg. an animation element)
+         * @param aTime - The end time for an event on the target element
+         * @param aTargetElement - The element for which the event is processed
+         * @return
+         */
+        void                    AddEventBeginTime(MSvgEventReceiver* aElement, TUint32 aTime, MSvgEventReceiver* aTargetElement );
+
+
+
+        /**
+         * An internal method that sorts the events in a time scale
+         *
+         * @since 1.0
+         * @param None
+         * @return None
+         */
+        void                    SortEventList();
+
+         /**
+         * returns the next (or prev) focussable object starting with a given index
+         *
+         * @since 1.0
+         * @param aIndex - search for a focussable object with this index
+         * @param aNext - Etrue (next) EFalse (prev) (go forward or backward for search)
+         * @param aEventMask - Event mask for event types the client is interested in
+         * @param aNewIndex - Return the actual index where the object was found
+         * @return The focussable object or NULL if not found
+         */
+        CSvgElementImpl*        GetEventReceiverElement(TInt32 aIndex, TBool aNext, TUint8 aEventMask, TInt32& aNewIndex);
+
+             /**
+         * Checks whether the current loaded file is animatable or static
+         *
+         *
+         *
+         * @param : None
+         * @return: TBool boolean
+         */
+
+        TBool IsAnimationFile();
+        
+         /**
+         * Checks whether the aSubEventMask is has a valid value set
+         * @since v3.2
+         * @param : aSubEventMask - The bitmap mask which contains the list
+         *                          of interactive events if any with the element.  
+         * @return: Etrue - if aSubEventMask has some valid bits set else EFalsee
+         */
+        TBool IsValidSubEventMask(TUint16 aSubEventMask);
+
+           /**
+         * Sets DRM Check Enable/Disable
+         *
+         *
+         * @param : TBool : aEnable Boolean
+         * @return: None
+         */
+        void SetDRMMode(TBool aEnable);
+
+        void ReInitialize();
+
+        /**
+         * Load a svg content from the given filename
+         *
+         * @param : aFileName : filename of content (binary or text content)
+         * @param : aError : error object to store error-info
+         * @return: None
+         */
+        void Load( const TDesC& aFileName, CSvgErrorImpl& aError );
+
+        /**
+         * Load a svg content from the given byte-array
+         *
+         * @param : aByteData : byte-array content (binary or text content)
+         * @param : aError : error object to store error-info
+         * @return: None
+         */
+        void Load( const TDesC8& aByteData, CSvgErrorImpl& aError, TBool aRemoveFalseSwitchElements = ETrue );
+
+		/**
+         * Load a svg content from JSR226 that is already TDesc16
+         *
+         * @param : aSvgString
+         * @param : aError : error object to store error-info
+         * @return: None
+         */
+        void Load16BitString( const TDesC16& aSvgString, CSvgErrorImpl& aError, TBool aRemoveFalseSwitchElements = ETrue );
+
+        /**
+         * Load a svg content from the given file-handle
+         *
+         * @param : aFileHandle : file-handle content (binary or text content)
+         * @param : aError : error object to store error-info
+         * @return: None
+         */
+        void Load( RFile& aFileHandle, CSvgErrorImpl& aError );
+
+        /**
+         * Set the document to be in thumbnailmode, which will not consume the DRM right
+         * if the Svg content is DRM encrypted.
+         *
+         * @param : aThumbNailMode : thumbnail mode flag.
+         * @return:
+         */
+        void SetThumbNailMode( TBool aThumbNailMode );
+
+
+        /**
+        * Set the document to disable/enable consuming drm rights
+        * @param aEnable: ETrue for disabling consumption of drm rights
+        * @return : none
+        */
+        void SetDRMRights(TBool aEnable);
+        /**
+         * Return whether the loaded document is a thumbnail only.  ETrue is returned only
+         * when the loaded content is DRM protected AND SetThumbNailMode is called with ETrue.
+         *
+         * @return:
+         */
+        TBool IsThumbNailOnly();
+
+        /**
+         * Set the flag to indicate this document was prepared (PrepareDom) or loaded (Load).
+         *
+         * @return: None
+         */
+        void SetWasPrepared( TBool aBool );
+
+        /**
+         * Return whether this document was prepared (PrepareDom) or loaded (Load).
+         *
+         * @return: Prepared or Loaded.
+         */
+        TBool WasPrepared();
+
+        /**
+         * Set the list of MSvgLoadingListener for this document to send
+         * back notification of parsing progress.  NULL is also valid.
+         * @param : aList : Pointer to list
+         * @return : none
+         */
+        void SetLoadingListeners( const RPointerArray<MSvgLoadingListener>* aList );
+
+        /**
+         * Set the list of MSvgLoadingListener for this document to send
+         * back notification of parsing progress.  NULL is also valid.
+         * @param : aList : Pointer to list
+         * @return : none
+         */
+        const RPointerArray<MSvgLoadingListener>* GetLoadingListeners();
+
+        /**
+         * Add a MSvgMouseListener to this SvgEngine
+         *
+         * @param : aListener -- listener to add to listener list
+         * @return: None
+         */
+        void AddInternalMouseListener( const MSvgMouseListener* aListener );
+
+        /**
+         * Remove a MSvgMouseListener to this SvgEngine
+         *
+         * @param : aListener -- listener to remove from listener list
+         * @return: None
+         */
+        void RemoveInternalMouseListener( const MSvgMouseListener* aListener );
+
+        /**
+         * Return number of mouselisteners.
+         *
+         * @return: mouse-listener count
+         */
+        TInt MouseInternalListenerCount();
+
+        /**
+         * Send to mouse listeners of a mouse-pressed event.
+         *
+         * @param : aElements -- elements affected by mouse-event.
+         * @param : aX -- X-cooordinate of mouse-event.
+         * @param : aY -- X-cooordinate of mouse-event.
+         * @return: None
+         */
+        void NotifyInternalMousePressed( RPointerArray<CSvgElementImpl>& aElements,
+                                 TInt aX, TInt aY );
+
+        /**
+         * Send to mouse listeners of a mouse-released event.
+         *
+         * @param : aElements -- elements affected by mouse-event.
+         * @param : aX -- X-cooordinate of mouse-event.
+         * @param : aY -- X-cooordinate of mouse-event.
+         * @return: None
+         */
+        void NotifyInternalMouseReleased( RPointerArray<CSvgElementImpl>& aElements,
+                                  TInt aX, TInt aY );
+
+        /**
+         * Send to mouse listeners of a mouse-entered event.
+         *
+         * @param : aElements -- elements affected by mouse-event.
+         * @param : aX -- X-cooordinate of mouse-event.
+         * @param : aY -- X-cooordinate of mouse-event.
+         * @return: None
+         */
+        void NotifyInternalMouseEntered( RPointerArray<CSvgElementImpl>& aElements,
+                                 TInt aX, TInt aY );
+        /**
+         * Send to mouse listeners of a mouse-exited event.
+         *
+         * @param : aElements -- elements affected by mouse-event.
+         * @param : aX -- X-cooordinate of mouse-event.
+         * @param : aY -- X-cooordinate of mouse-event.
+         * @return: None
+         */
+        void NotifyInternalMouseExited( RPointerArray<CSvgElementImpl>& aElements,
+                                TInt aX, TInt aY );
+
+
+        /**
+         * Send to mouse listeners of a mouse-moved event.
+         *
+         * @param : aElements -- elements affected by mouse-event.
+         * @param : aX -- X-cooordinate of mouse-event.
+         * @param : aY -- X-cooordinate of mouse-event.
+         * @return: None
+         */
+        void NotifyInternalMouseMoved( RPointerArray<CSvgElementImpl>& aElements,
+                                       TInt aX, TInt aY );
+
+        // LoadingListeners notification
+        /**
+         * Send to loading listeners of a document start event.
+         *
+         * @return: None
+         */
+        void NotifyDocumentStart();
+
+        /**
+         * Send to loading listeners of a document end event.
+         *
+         * @return: None
+         */
+        void NotifyDocumentEnd();
+
+        /**
+         * Send to loading listeners of an element start event.
+         *
+         * @param : aTagName -- name of element tag.
+         * @param : aIsSvgChild -- flag to indicate element is <svg> or child
+         * of <svg> tag.
+         * @return: None
+         */
+        void NotifyElementStart( const TDesC& aTagName,
+                                 MSvgAttributeList& aAttributeList,
+                                 TBool aIsSvgChild );
+
+        /**
+         * Send to loading listeners of an element end event.
+         *
+         * @param : aTagName -- name of element tag.
+         * @param : aIsSvgChild -- flag to indicate element is <svg> or child
+         * of <svg> tag.
+         * @return: None
+         */
+        void NotifyElementEnd( const TDesC& aTagName, TBool aIsSvgChild );
+
+        /**
+         * Send to loading listeners of an unsupported element event.
+         *
+         * @param : aTagName -- name of element tag.
+         * @return: None
+         */
+        void NotifyUnsupportedElement( const TDesC& aTagName,
+                                       MSvgAttributeList& aAttributeList );
+
+        /**
+         * Send to loading listeners of an external data request.
+         *
+         * @param : aUri -- URI of data request.
+         * @return: None
+         */
+        void NotifyExternalDataRequested( const TDesC& aUri );
+
+        /**
+         * Send to loading listeners of a succesfful external data reception.
+         *
+         * @param : aUri -- URI of data request.
+         * @return: None
+         */
+        void NotifyExternalDataReceived( const TDesC& aUri );
+
+        /**
+         * Send to loading listeners of a failed external data request.
+         *
+         * @param : aUri -- URI of data request.
+         * @return: None
+         */
+        void NotifyExternalDataRequestFailed( const TDesC& aUri );
+
+
+        /**
+         * return the animation duration in milliseconds.
+         * @return : duration of animation
+         */
+        TUint32 AnimationDuration();
+
+        /**
+         * return wether animation is indefinite.
+         */
+        TUint32 IsIndefiniteAnimation();
+
+        /**
+         * Called by AppendChild/RemoveChild to notify owner document
+         * of changes.
+         */
+        void ElementAppendedOrRemoved();
+
+        /**
+         * Cancel loading of document if it is currently parsing.
+         */
+        void CancelParsing();
+
+        /**
+         * Return whether document is currently parsing.
+         */
+        TBool IsParsing();
+
+        /**
+         * return whether this document has an error set.
+         */
+        TBool HasError();
+
+        /**
+         * return the error reference.  May be NULL.  Call HasError first.
+         */
+        MSvgError* GetError();
+
+        /**
+         * Set the error type and error message for this document.
+         * Will note override existing error.
+         */
+        void SetError( TInt aErrorType, const TDesC& aMsg1, const TDesC& aMsg2 );
+
+		void SetIsWarning( TBool aIsWarning = ETrue );
+    //-------------------------------------------------------------------
+    // Utility Functions
+    //-------------------------------------------------------------------
+        /**
+         * Fill the given error object with the appropriate error codes, messages.
+         *
+         * @param : aError : Error object to fill code/message.
+         * @param : aSvgErrorCode : Svg related error code.
+         * @param : aSystemError : Symbian error code.
+         * @param : aMsg1 : Message string
+         * @param : aMsg2 : Second message string, if needed, appended to first string.
+         * @return: None
+         */
+    static void PrepareError( CSvgErrorImpl& aError,
+                              TSvgErrorCode aSvgErrorCode, TInt aSystemError,
+                              const TDesC& aMsg1, const TDesC& aMsg2 );
+
+    static void OpenSession( RFs& aSession, CSvgErrorImpl& aError );
+
+	// ------------------------------------------------------------------
+	// Opacity
+	// ------------------------------------------------------------------
+    TBool isGroupOpacity( CSvgElementImpl* aElement );
+
+	void	PrintAllElements( CSvgElementImpl* aStartElement);
+
+	void QueueFontReleaseReq(CFont* aFont);
+
+
+        /**
+         * Accessor funciton for SyncBehaviorDefault value
+         * @since S60 3.2
+         * @param none
+         * @return TSvgSyncBehavior indicating default value.
+         */
+        TSvgSyncBehaviour SyncBehaviorDefault();
+
+        /**
+         * Accessor funciton for SyncToleranceDefault value
+         * @since S60 3.2
+         * @param none
+         * @return TUint32 indicating default value in msecs.
+         */
+        TUint32 SyncToleranceDefault();
+
+        /**
+        * Set Function for the document's current time
+        * @since S60 3.2
+        * @param aCurTime Current Time to be set in msecs
+        * @return none.
+        */
+        void SetCurrentTime( const TInt32 aCurTime );
+
+        /**
+        * Accessor Function for the document's current time
+        * @since S60 3.2
+        * @param none.
+        * @return TInt32 Current Time to be set in msecs.
+        */
+        TInt32 CurrentTime();
+
+        void DocumentTransform(TGfxAffineTransform& aTr);
+        TGfxAffineTransform GetDocumentTransform();
+
+        /**
+        * Set the Synchronised behaviour for the time container
+        * @since S60 3.2
+        * @param aValue canSlip | locked | independent 
+        * @return none.
+        */
+        void SetTCSyncBehavior( const TSvgSyncBehaviour aValue );
+        
+        /**
+        * Set the Synchronised Tolerance for the time container
+        * @since S60 3.2
+        * @param aValue Clock-value 
+        * @return none.
+        */        
+        void SetTCSyncTolerance( const TUint32 aValue );
+        
+        /**
+        * Set the time container as Synchronised Master
+        * @since S60 3.2
+        * @param aValue true | false
+        * @return none.
+        */        
+        void SetTCSyncMaster( const TBool aValue );
+        
+        /**
+        * Accessor for the time container.
+        * @since Series 3.2
+        * @param none.
+        * @return CSvgTimeContainer* 
+        */        
+        CSvgTimeContainer* TimeContainer();
+        
+        
+		//Get function(s)
+		CSvgBitmapFontProvider* GetBitmapFontProvider() ;
+    
+        void SetImageElementsCount(TInt aCnt);
+        
+        TInt GetImageElementsCount();
+
+    /* Return the value of the current focus index.
+		@return: current focus index    
+    */
+    TInt32 GetCurFocusIndex();
+    
+    /* Set the value fo the current focus index
+    	@param: aVal : Value that has to be set as the focus index.
+    	@return: none.
+    */
+    void SetCurFocusIndex(TInt32 aVal);
+    
+    /* Decrement the value of the current focus index
+    	@return: decremented focus index value.
+    */
+    TInt32 DecCurFocusIndex();
+    
+    /* Increment the value of the current focus index
+    	@return: Incremented focus index value.
+    */
+    TInt32 IncCurFocusIndex();
+
+    /* Return the pointer to the current focus element
+		@return: current focus element    
+    */
+    CSvgElementImpl* GetCurFocusObject();
+    
+    /* Set the value of the current focus element to aElement.
+    	@param: aElement : Element that has to be set as the focus element
+    	@return: none.
+    */
+    void SetCurFocusObject(CSvgElementImpl* aElement);
+
+        /*
+        From MSvgTimedEntityInterface
+        Would return the type of object
+        @param none
+        @return type of object
+        */
+        TSvgObjectType ObjectType();
+        
+        
+        
+        /**
+        * Prepare a list of media elements in DOM tree in 
+        * postorder
+        * @since Series 3.2
+        * @param aRoot Root Node of tree
+        * @param aPostOrderList List of nodes which 
+        *         will contain the elements.
+        * @return None. 
+        */        
+        void ParsePostOrderMediaElements( CSvgElementImpl* aRoot, 
+            RPointerArray<CSvgElementImpl>& aPostOrderList);
+        
+        /**
+        * Finds if Animation element is there.
+        * 
+        * @since Series 3.2
+        * @param none
+        * @return True if animation element is present. 
+        */        
+        TBool SvgHasAnimationElement();
+        
+          /**
+        * Finds if Document content is Interactive
+        * 
+        * @since Series 3.2
+        * @param none
+        * @return True if Document content is Interactive
+        */ 
+        TBool IsDocumentContentInteractive();
+        
+    private:
+        /**
+         * Constructor
+         * @param aHasParent - Indicates whether document has a parent or not
+         *        aSyncBehavDefault - Indicates default synchronised behaviour
+         *                            for runtime synchronisation.
+         *        aSyncTolDefault - Indicates the synchronised tolerance in 
+         *                          msecs for runtime synchronisation.
+         */
+         CSvgDocumentImpl( CSvgBitmapFontProvider* aSvgBitmapFontProvider, const TBool aHasParent,
+                           const TSvgSyncBehaviour aSyncBehavDefault,
+                           const TInt32 aSyncTolDefault );
+
+        /**
+         * 2-phase construction
+         */
+        void                    ConstructL();
+
+        /**
+         * search element by ID
+         */
+        MXmlElement*            SearchElementById( MXmlElement* aElement,
+                                                   const TDesC& aId );
+
+    public:
+        TBool                   iInitSortList;
+        TBool                   iReqExReqFtrSysLTested;
+        TBool                   iInitialDrawFlag;
+        CSvgEventHandler        *iEventHandler;
+        TBool                   iIsInteractive;
+        TBool                   iFinishedParsing;
+        TBool                   iHasGroupOpacity;
+        //for debugging and performance checking
+        CSvgElementImpl*                    iPerfText;
+
+				TUint32 								iTimeForJSR226;
+
+//		CSvgImageHashMap* iImageHashMap;
+		CSvgFontHashMap* iFontHashMap;
+		CSvgMemoryManager* iMemoryManager;
+
+		RPointerArray<CSvgAnimationBase>    iSvgAnimations;
+
+        TInt          iImageElementCnt;
+
+    private: // From MSvgTimedEntityInterface
+        /**
+        * From MSvgTimedEntityInterface
+        * The parent time container provides the timing clock to 
+        * the timed entity (audio, video, animation, document) 
+        * using this routine.
+        * @since Series 3.2
+        * @param aTick Current tick information 
+        * @return none.
+        */
+        void ParentTimeContainerTick( TSvgTick aTick );
+
+        /**
+        * From MSvgTimedEntityInterface
+        * Returns the sync behavior of the entity.
+        * @since Series 3.2
+        * @param none. 
+        * @return TSvgSyncBehaviour Element's Sync Behaviour.
+        */
+        TSvgSyncBehaviour GetEntitySyncBehavior();
+        
+        /**
+        * From MSvgTimedEntityInterface
+        * When the timed entity acts as timing master in the time container, 
+        * the time container gets the timed entity clock using this method 
+        * and feeds to rest of timed entities.
+        * @since Series 3.2
+        * @param aEntityCurTime Current Entity Time in msecs. 
+        * @return none.
+        */
+        void GetEntityCurrentTime( TUint32& aEntityCurTime );
+
+        /**
+        * From MSvgTimedEntityInterface
+        * Returns the configured sync master value(as per DOM tree) as specified 
+        * in the SVG content.
+        * @since Series 3.2
+        * @param aIsSyncMaster Indicates whether the element is configured as 
+        *                      Sync Master. 
+        * @return none.
+        */
+        void GetCnfSyncMasterStatus( TBool& aIsSyncMaster );
+
+        /**
+        * From MSvgTimedEntityInterface
+        * Check if timed entity is going to act as timing master in the 
+        * time container. This behavior could change dynamically.
+        * @since Series 3.2
+        * @param aIsSyncMaster Indicates whether the element is currrently Sync Master. 
+        * @return none.
+        */
+        void GetCurSyncMasterStatus( TBool& isSyncMaster );
+
+        /**
+        * From MSvgTimedEntityInterface
+        * If some other element is resolved as syncMaster in the time container group, 
+        * this element can not act as sync master. 
+        * @since Series 3.2
+        * @param aSyncMasterStatus Indicates whether the element is currrently 
+        *                          Sync Master. 
+        * @return none.
+        */
+        void SetCurSyncMasterStatus( TBool aSyncMasterStatus );
+
+        /**
+        * From MSvgTimedEntityInterface
+        * Check if timed entity can provide timing ticks to rest of time 
+        * container elements. This behavior could change dynamically. 
+        * For example, if audio clip is over, the audio element can't generate 
+        * ticks for others.
+        * @since Series 3.2
+        * @param none.
+        * @return TBool True if can generate timing tick.
+        */
+        TBool CanGenerateTick();
+
+        /**
+        * Check if timed entity can use its parent's tick. Usually only the
+        * parent document should return true for this function.
+        * All other elements return false
+        * @since Series 3.2
+        * @param none.
+        * @return TBool True if can use parent's timing tick.
+        */
+        TBool CanUseParentTick();
+
+        /**
+        * From MSvgTimedEntityInterface
+        * If the timed entity needs to be in sync with the time container and 
+        * it has slipped beyond the sync tolerance limit, the method is called to 
+        * bring the element in sync with the time container.
+        * @since Series 3.2
+        * @param aSynctime Time for resync in msecs.
+        * @return none.
+        */
+        void ResyncTimedEntity( TUint32 aSynctime );
+
+        /**
+        * From MSvgTimedEntityInterface
+        * This would be used for pausing the timed entity while other locked
+        * timed entities get loaded.
+        * @since S60 3.2
+        * @param none.
+        * @return none.
+        */
+        void PauseTimedEntity();
+
+        /**
+        * From MSvgTimedEntityInterface
+        * This would be used for resuming the timed entity once all locked
+        * timed entities get loaded.
+        * @since S60 3.2
+        * @param none.
+        * @return none.
+        */
+        void ResumeTimedEntity();
+        
+        /**
+        * From MSvgTimedEntityInterface
+        * This would be used for stopping the timed entity.
+        * @since S60 3.2
+        * @param none.
+        * @return none.
+        */
+        void StopTimedEntity();
+        
+        
+       CSvgTimeContainer* GetChildTimeContainer();
+       
+       
+    private:
+        void Load( RFs& aSession, RFile& aFileHandle, CSvgErrorImpl& aError );
+
+        void ProcessDRMError( TInt errorCode, CSvgErrorImpl& aError );
+
+        TBool IsGzipContent( RFile& aFile );
+        TBool IsGzipContent( const TDesC8& aByteArray );
+
+        TBool IsDRMContent( RFile& aFileHandle );
+        TBool IsDRMContent( const TDesC8& aByteData );
+
+        TBool IsBinarySvg( const TDesC8& aByteArray );
+
+        TBool ProcessGZipContent( RFs& aSession,
+                                  RFile& aFileHandle,
+                                  TFileName& aFileName,
+                                  CSvgErrorImpl& aError );
+
+        TBool ProcessGZipContent( RFs& aSession,
+                                  TFileName& aZippedFileName,
+                                  TFileName& aUnzippedFileName ,
+                                  CSvgErrorImpl& aError );
+
+        HBufC8* ProcessDRMContentL( RFile& aFileHandle, CSvgErrorImpl& aError );
+
+        void ProcessSvgContentL( const TDesC8& aByteArray, CSvgErrorImpl& aError, TBool aRemoveFalseSwitchElements = ETrue );
+
+		void Process16BitSvgContentL( const TDesC16& aByteArray, CSvgErrorImpl& aError, TBool aRemoveFalseSwitchElements = ETrue );
+
+        TInt GetProcessPrivatePath( RFs& aSession, TFileName& aPath );
+
+        TInt CreateProcessPrivateDirectory( RFs& aSession, TFileName& aPath );
+
+        TInt WriteToTempFile( RFs& aSession, const TDesC8& aByteArray,
+                              TFileName& aFilename, CSvgErrorImpl& aError );
+
+        TInt WriteToTempFile( RFs& aSession, RFile& aFileHandle,
+                              TFileName& aFilename, CSvgErrorImpl& aError );
+
+        void LoadingCompleted();
+
+        TUint32 SubtreeDuration( CSvgElementImpl* aRootElement );
+
+    public:
+        TBool iAnimationResetNeeded;
+
+        // Flag set to ETrue when content-handler is removing false switch statements
+        TBool                   iIsPruningTree;
+        TBool                   iIsRendering;
+
+    private:
+        CSvgEngineImpl*         iEngine;
+
+        TBuf<256>              iUri;
+        CSvgElementImpl*       iRootElement;
+
+        CSvgSchemaData*         iSchemaData;
+
+        TBool                   iDrmEnable;
+
+         //flag used for DOM_Reuse
+        TBool                   iMultipleRendering;
+
+        TBool                   iHasGradientElement;
+
+        TBool                   iIsThumbNailMode;
+        TBool                   iIsDRMProtected;
+        //The value that holds the index of the current focus element.
+	    TInt32                  iCurObjIdx;
+	    // pointer to the current focus element object.
+        CSvgElementImpl*        iCurrentFocusObject;
+         // DRM Rights consumption
+        TBool         iDrmRightsConsumptionEnabled;
+
+        // Flag to indicate this dom was Loaded or Prepared.
+        TBool                   iWasPrepared;
+
+        const RPointerArray<MSvgLoadingListener>* iLoadingListeners;
+
+        // MSvgMouseListener list
+        RPointerArray<MSvgMouseListener>    iSvgMouseListeners;
+
+        TBool                   iCheckedAnimationDuration;
+        TUint                   iAnimationDuration;
+
+        CSvgContentHandler*     iXmlHandler;
+
+        CSvgErrorImpl*          iError;
+        
+        // Time container for document for run time sync
+        CSvgTimeContainer*      iTimeContainer;
+        // Indicates if this document a top-level document
+        TBool iHasParent;
+
+        // Default run time sync behaviour 
+        TSvgSyncBehaviour           iSyncBehaviorDefault;
+        
+        // Default synchronised tolerance value in msecs
+        TUint32                     iSyncToleranceDefault;
+        
+        
+        static const TInt KIndefiniteAnimationDuration = 2147483647;
+        TGfxAffineTransform iTransformMatrix;
+        
+        //Stores Font Type information as passed by CSvgEngineInterfaceImpl
+        CSvgBitmapFontProvider *iSvgBitmapFontProvider;
+    };
+
+#endif      // SVGDOCUMENTIMPL_H