Revision: 200949
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:16 +0200
changeset 0 632761c941a7
child 1 ec62f27282ac
Revision: 200949 Kit: 200951
graphicsuis_plat/group/bld.inf
graphicsuis_plat/svg_application_observer_utility_api/group/bld.inf
graphicsuis_plat/svg_application_observer_utility_api/inc/SVGTAppObserverUtil.h
graphicsuis_plat/svg_application_observer_utility_api/inc/SVGTFileManager.h
graphicsuis_plat/svg_application_observer_utility_api/inc/SVGTUISaveListener.h
graphicsuis_plat/svg_application_observer_utility_api/svg_application_observer_utility_api.metaxml
graphicsuis_plat/svgt_file_view_details_dialog_api/group/bld.inf
graphicsuis_plat/svgt_file_view_details_dialog_api/inc/SVGTDrmHelper.h
graphicsuis_plat/svgt_file_view_details_dialog_api/inc/svgtfileviewdetails.h
graphicsuis_plat/svgt_file_view_details_dialog_api/svgt_file_view_details_dialog_api.metaxml
graphicsuis_plat/svgt_viewer_ui_api/group/bld.inf
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTAppObserver.h
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTCustControl.h
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTCustControl.rh
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTPointerHideTimer.h
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTProgressBarTimer.h
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTThumbnailUtil.h
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTUIControlDbgFlags.hrh
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTUIDialog.h
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTUIDialog.hrh
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTViewerAppDbgFlags.hrh
graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTViewerAppDownloads.h
graphicsuis_plat/svgt_viewer_ui_api/inc/SvgCodecImageConstants.hrh
graphicsuis_plat/svgt_viewer_ui_api/inc/SvgtApplicationExitObserver.h
graphicsuis_plat/svgt_viewer_ui_api/svgt_viewer_ui_api.metaxml
group/bld.inf
layers.sysdef.xml
package_definition.xml
svgtviewer/SvgtViewerPlugin/AppInc/SVGTViewerApp.hrh
svgtviewer/SvgtViewerPlugin/AppInc/SVGTViewerApp.pan
svgtviewer/SvgtViewerPlugin/AppInc/SVGTViewerAppAppUi.h
svgtviewer/SvgtViewerPlugin/AppInc/SVGTViewerAppApplication.h
svgtviewer/SvgtViewerPlugin/AppInc/SVGTViewerAppDocument.h
svgtviewer/SvgtViewerPlugin/AppInc/SvgtViewerAppView.h
svgtviewer/SvgtViewerPlugin/AppObserverUtilSrc/SVGTAppObserverUtil.cpp
svgtviewer/SvgtViewerPlugin/AppObserverUtilSrc/SVGTFileManager.cpp
svgtviewer/SvgtViewerPlugin/AppObserverUtilSrc/SVGTViewerAppDownloads.cpp
svgtviewer/SvgtViewerPlugin/AppSrc/SVGTViewerApp.cpp
svgtviewer/SvgtViewerPlugin/AppSrc/SVGTViewerAppAppUi.cpp
svgtviewer/SvgtViewerPlugin/AppSrc/SVGTViewerAppApplication.cpp
svgtviewer/SvgtViewerPlugin/AppSrc/SVGTViewerAppDocument.cpp
svgtviewer/SvgtViewerPlugin/AppSrc/SvgtViewerAppView.cpp
svgtviewer/SvgtViewerPlugin/BWINSCW/SVGTAppObserverUtilU.DEF
svgtviewer/SvgtViewerPlugin/BWINSCW/SVGTScreenSaverPluginU.DEF
svgtviewer/SvgtViewerPlugin/BWINSCW/SVGTUICONTROLU.def
svgtviewer/SvgtViewerPlugin/BWINSCW/svgtfileviewdetails.def
svgtviewer/SvgtViewerPlugin/EABI/SVGTAppObserverUtilU.DEF
svgtviewer/SvgtViewerPlugin/EABI/SVGTScreenSaverPluginU.DEF
svgtviewer/SvgtViewerPlugin/EABI/SVGTUICONTROLU.def
svgtviewer/SvgtViewerPlugin/EABI/svgtfileviewdetails.def
svgtviewer/SvgtViewerPlugin/Group/SVGCodec.mmp
svgtviewer/SvgtViewerPlugin/Group/SVGTAppObserverUtil.mmp
svgtviewer/SvgtViewerPlugin/Group/SVGTScreenSaverPlugin.mmp
svgtviewer/SvgtViewerPlugin/Group/SVGTUIControl.mmp
svgtviewer/SvgtViewerPlugin/Group/SVGTViewerApp.mmp
svgtviewer/SvgtViewerPlugin/Group/SVGTViewerApp.pkg
svgtviewer/SvgtViewerPlugin/Group/bld.inf
svgtviewer/SvgtViewerPlugin/Group/icons_aif_bitmaps_dc.mk
svgtviewer/SvgtViewerPlugin/Group/icons_aif_scalable_dc.mk
svgtviewer/SvgtViewerPlugin/Group/icons_dc.mk
svgtviewer/SvgtViewerPlugin/Group/svgtfileviewdetails.mmp
svgtviewer/SvgtViewerPlugin/SVGCodecInc/SVGCodec.h
svgtviewer/SvgtViewerPlugin/SVGCodecInc/SVGConvert.h
svgtviewer/SvgtViewerPlugin/SVGCodecInc/SVGImageCodecUIDs.hrh
svgtviewer/SvgtViewerPlugin/SVGCodecInc/SVGProxy.h
svgtviewer/SvgtViewerPlugin/SVGCodecSrc/SVGCodec.cpp
svgtviewer/SvgtViewerPlugin/SVGCodecSrc/SVGConvert.cpp
svgtviewer/SvgtViewerPlugin/SVGCodecSrc/SVGProxy.cpp
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginInc/SvgRenderFrameControl.h
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginInc/SvgRenderFrameTimer.h
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginInc/SvgScreenSaver.h
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginInc/SvgScreenSaverImplementationUid.hrh
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginInc/Svgtplugin.h
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/SvgRenderFrameControl.cpp
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/SvgRenderFrameTimer.cpp
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/SvgScreenSaver.cpp
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/SvgScreenSaverProxy.cpp
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/Svgtplugin.cpp
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/Svgtplugindllapi.cpp
svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/Svgtpluginmain.cpp
svgtviewer/SvgtViewerPlugin/SvgtFileViewDetailsSrc/SVGTDrmHelper.cpp
svgtviewer/SvgtViewerPlugin/SvgtFileViewDetailsSrc/svgtfileviewdetails.cpp
svgtviewer/SvgtViewerPlugin/UIControlInc/SVGTDrmHelper.h
svgtviewer/SvgtViewerPlugin/UIControlInc/SvgtController.h
svgtviewer/SvgtViewerPlugin/UIControlInc/SvgtDecoratorControl.h
svgtviewer/SvgtViewerPlugin/UIControlInc/SvgtEvent.h
svgtviewer/SvgtViewerPlugin/UIControlInc/SvgtEventHandlerAO.h
svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTCustControl.cpp
svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTDrmHelper.cpp
svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTPointerHideTimer.cpp
svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTProgressBarTimer.cpp
svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTThumbnailUtil.cpp
svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTUIDialog.cpp
svgtviewer/SvgtViewerPlugin/UIControlSrc/SvgtController.cpp
svgtviewer/SvgtViewerPlugin/UIControlSrc/SvgtDecoratorControl.cpp
svgtviewer/SvgtViewerPlugin/UIControlSrc/SvgtEvent.cpp
svgtviewer/SvgtViewerPlugin/UIControlSrc/SvgtEventHandlerAO.cpp
svgtviewer/SvgtViewerPlugin/data/102071E7.rss
svgtviewer/SvgtViewerPlugin/data/102073D7.rss
svgtviewer/SvgtViewerPlugin/data/102073D7_extra.rss
svgtviewer/SvgtViewerPlugin/data/SVGTAppObserverUtil.rss
svgtviewer/SvgtViewerPlugin/data/SVGTScreenSaverPlugin.rss
svgtviewer/SvgtViewerPlugin/data/SVGTUIControl.rss
svgtviewer/SvgtViewerPlugin/data/SVGTViewerApp.rss
svgtviewer/SvgtViewerPlugin/data/SVGTViewerApp_reg.rss
svgtviewer/SvgtViewerPlugin/data/svgtfileviewdetails.rss
svgtviewer/SvgtViewerPlugin/help/data/xhtml.zip
svgtviewer/SvgtViewerPlugin/help/group/bld.inf
svgtviewer/SvgtViewerPlugin/help/inc/svgt.hlp.hrh
svgtviewer/SvgtViewerPlugin/help/rom/svgtviewerpluginhelps_variant.iby
svgtviewer/SvgtViewerPlugin/loc/svgtfileviewdetails.loc
svgtviewer/SvgtViewerPlugin/loc/svgtuicontrol.loc
svgtviewer/SvgtViewerPlugin/rom/SVGCodec.iby
svgtviewer/SvgtViewerPlugin/rom/SVGScreenSaverPlugin.iby
svgtviewer/SvgtViewerPlugin/rom/SVGTAppObserverUtil.iby
svgtviewer/SvgtViewerPlugin/rom/SVGTAppObserverUtilResources.iby
svgtviewer/SvgtViewerPlugin/rom/SVGTFileViewDetails.iby
svgtviewer/SvgtViewerPlugin/rom/SVGTFileViewDetailsResources.iby
svgtviewer/SvgtViewerPlugin/rom/SVGTUIControl.iby
svgtviewer/SvgtViewerPlugin/rom/SVGTUIControlResources.iby
svgtviewer/SvgtViewerPlugin/rom/SVGTViewerApp.iby
svgtviewer/SvgtViewerPlugin/rom/SVGTViewerAppResources.iby
svgtviewer/group/bld.inf
sysdef_1_4_0.dtd
systemDefinition.xml
systemDefinitionLayer.xml
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/group/bld.inf	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 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:  Includes all the Domain API specific bld.inf files, which 
+*                export files.
+*
+*/
+
+
+
+#include "../svgt_viewer_ui_api/group/bld.inf"
+#include "../svg_application_observer_utility_api/group/bld.inf"
+#include "../svgt_file_view_details_dialog_api/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svg_application_observer_utility_api/group/bld.inf	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 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:  File that exports the files belonging to 
+:                SVG Application Observer Utility API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/SVGTAppObserverUtil.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTAppObserverUtil.h)
+../inc/SVGTUISaveListener.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTUISaveListener.h)
+../inc/SVGTFileManager.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTFileManager.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svg_application_observer_utility_api/inc/SVGTAppObserverUtil.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,581 @@
+/*
+* Copyright (c) 2004,2005 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:  This class provides a reference implementation for the SVGT 
+*                UI Control Application Observer. 
+*
+*/
+
+
+#ifndef SVGTAPPOBSERVERUTIL_H
+#define SVGTAPPOBSERVERUTIL_H
+
+#include <e32base.h>
+#include <e32std.h>
+#include <aknprogressdialog.h>
+#include <CDownloadMgrUiUserInteractions.h>
+#include <CDownloadMgrUiDownloadsList.h>
+#include <CDownloadMgrUiLibRegistry.h>
+
+#include <SVGTAppObserver.h>
+#include <DownloadMgrClient.h>
+#include <SVGTUISaveListener.h>
+#include <SVGTFileManager.h>
+#include <SVGTViewerAppDownloads.h>
+#include <SVGTViewerAppDbgFlags.hrh>
+
+    
+// Forward Declarations
+class CSVGTUIDialog;
+class CEikProgressInfo;
+class CDocumentHandler;
+
+// CLASS DECLARATION
+
+/**
+*  This class is used as a utility class for implementing observer for the 
+*  SVGT UI Control.
+*  It provides helper function/reference implementation for following 
+*  functionality: 
+*           a. Hyperlink handling 
+*           b. Download manager + UI Usage
+*           c. Save Option Implementation
+*           d. Misc (GetSmilFitValue)
+*  @lib SVGTAppObserverUtil
+*  @since 3.0
+*/
+
+class CSVGTAppObserverUtil : public CBase,
+                             public MSvgtAppObserver,
+                             public MHttpDownloadMgrObserver,
+                             public MSVGTUISaveListener,
+                             public MProgressDialogCallback
+    {
+    
+    public:
+    
+    enum TDownloadNeeded 
+        {
+        // The uri refers to a local image file
+        ELocalImageFile,
+        // The uri refers to a remote image file
+        ERemoteImageFile,
+        // The uri doesnt refer to an image file
+        ENotAnImageFile
+        };
+    
+    enum TWaitNoteState
+        {
+        // WaitNote is used for file saving
+        ESaveFileWait = 1,
+        // WaitNote is used for downloading image synchronously
+        EDownloadImageWait
+        };
+        
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * aAppDialog: Pointer to the SVGT Dialog
+        * RFile* aFileHdlPtr: File handle to the content.
+        * const TDesC& filename: Filepath.
+        * TBool aIsFileFullPathAvailable: Flag to indicate if content's 
+        *   fullpath is available.
+        * TBool aCanSaveContent,
+        * TBool aShouldMoveContent.
+        */
+        IMPORT_C static CSVGTAppObserverUtil* NewL( CSVGTUIDialog* aAppDialog,
+                        RFile* aFileHdlPtr,
+                        const TDesC& aFilename, 
+                        TBool aIsFileFullPathAvailable,
+                        TBool aCanSaveContent,
+                        TBool aShouldMoveContent );
+
+        /**
+        * Two-phased constructor.
+        * aAppDialog: Pointer to the SVGT Dialog
+        * RFile* aFileHdlPtr: File handle to the content.
+        * const TDesC& aFilename: Filepath.
+        * TBool aIsFileFullPathAvailable: Flag to indicate if content's 
+        *   fullpath is available.
+        * TBool aCanSaveContent,
+        * TBool aShouldMoveContent.
+        */
+        static CSVGTAppObserverUtil* NewLC( CSVGTUIDialog* aAppDialog,
+                        RFile* aFileHdlPtr,
+                        const TDesC& aFilename, 
+                        TBool aIsFileFullPathAvailable,
+                        TBool aCanSaveContent,
+                        TBool aShouldMoveContent); 
+
+        /**
+        * Two-phased constructor.
+        * aAppDialog: Pointer to the SVGT Dialog
+        * RFile* aFileHdlPtr: File handle to the content.
+        * @since 3.0
+        */
+        IMPORT_C static CSVGTAppObserverUtil* NewL( CSVGTUIDialog* aAppDialog,
+                        RFile* aFileHdlPtr );
+
+        /**
+        * Two-phased constructor.
+        * aAppDialog: Pointer to the SVGT Dialog
+        * RFile* aFileHdlPtr: File handle to the content.
+        * @since 3.0
+        */
+        static CSVGTAppObserverUtil* NewLC( CSVGTUIDialog* aAppDialog,
+                        RFile* aFileHdlPtr ); 
+        /**
+        * Destructor.
+        */
+        IMPORT_C virtual ~CSVGTAppObserverUtil();
+        
+        
+        /**
+        * This method is called by the svg engine when there is an image tag        
+        * encountered in the svg file. This function parses the uri, checks
+        * whether the uri is a local file or a remote file. If the file is 
+        * a remote file, the file is downloaded. Fetched file is then opened
+        * and the file handle returned to the engine.       
+        * @since 3.0
+        * @see MSvgRequestObserver::FetchImage
+        */                                       
+        IMPORT_C virtual TInt FetchImage( const TDesC& aUri, 
+             RFs& aSession, RFile& aFileHandle );                                  
+ 
+        TInt FetchFont( const TDesC& /* aUri */, 
+                                    RFs& /* aSession */, RFile& /* aFileHandle */ );
+	   
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::LinkActivated
+        */
+        IMPORT_C virtual TBool LinkActivated( const TDesC& aUri );
+
+        
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::LinkActivatedWithShow
+        */
+        IMPORT_C virtual TBool LinkActivatedWithShow( const TDesC& aUri, 
+                                             const TDesC& aShow );
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::GetSmilFitValue
+        */
+        IMPORT_C virtual void GetSmilFitValue( TDes& aSmilValue );
+        
+        /**
+        * This function is called by the application to enable/disable the
+        * downloads menu in the options menu
+        * @since 3.0
+        * @param aAddDownloadMenu enable/disable the downloads menu  
+        */   
+                                 
+        IMPORT_C void SetDownloadMenu( TBool aAddDownloadMenu );
+        
+        /**
+        * This function is called by the Ui Dialog to enable/disable the
+        * downloads menu in the options menu
+        * @since 3.0
+        * @return iDownloadMenuEnabled enable/disable the downloads menu  
+        */   
+        IMPORT_C virtual TBool CanShowDownload() const;
+        
+
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::DisplayDownloadMenuL
+        */ 
+        IMPORT_C virtual void DisplayDownloadMenuL();   
+                                                           
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::CanShowSave
+        */
+        IMPORT_C virtual TBool CanShowSave();
+        
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::IsSavingDone
+        */
+        IMPORT_C virtual TBool IsSavingDone();
+
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::DoSaveL
+        */ 
+        IMPORT_C virtual void DoSaveL( TInt aCommandId ); 
+        
+        IMPORT_C TInt NewFetchImageData( const TDesC& aUri );
+        IMPORT_C void AssignEmbededDataL( const TDesC& aUri );
+		TBool ExitWhenOrientationChange( );
+        
+        /**
+        * Helper function for DoSaveL
+        */
+        void SaveContentL(  RFile& aSrcFileHandle, const TDesC& aSrcFileName,
+                            TDes& aDstFileName, TBool aMoveFlag );
+        /**
+        * This function generates a unique file name in the private directory
+        * @param aName On return contains the full path on return.
+        */    
+        void GetUniqueFileName( TDes& aName ) const;
+        
+        /**
+        * Checks whether the file is a GZipped content
+        * @param aFileHandle File handle to the SVG content
+        */
+        TBool IsGzipContent( const RFile& aFileHandle ) const;
+                                    
+        /**
+        * This function saves the SVG content into the private directory
+        */           
+        void SaveSvgTextContentL( const RFile& aSrcFileHandle, 
+            TDes& aTempFileName );
+                                  
+    public: // Callback from the MHttpDownloadMgrObserver                                    
+        /**
+        * This method is a call back function used by the download manager
+        * to indicate the completion/failure of the download started.
+        * LinkActivatedWithShow function
+        * @since 3.0
+        * @param : aDownload -- handle of the download
+        * @param : aEvent -- download event      
+        */
+        IMPORT_C void HandleDMgrEventL( RHttpDownload& aDownload,
+                                       THttpDownloadEvent aEvent );                                                
+    public: // Callback from the MSVGTUISaveListener         
+       /**
+        * From MSVGTUISaveListener. This function is called 
+        * when buffering or saving position is changed.
+        * @since 3.0
+        * @param  aPosition, New buffering/saving position (0-100)
+        */
+        IMPORT_C virtual void SVGTPositionChanged( TInt aPosition );
+
+        /**
+        * From MSVGTUISaveListener. Called when saving is finished.
+        * @since 3.0
+        * @param  aError, KErrNone or one of the system wide error codes.
+        * @return void
+        */
+        IMPORT_C virtual void SVGTSavingDoneL( TInt aError ); 
+         
+    public: // Functions from MProgressDialogCallback
+        
+        /** @see MProgressDialogCallback::DialogDismissedL */
+        IMPORT_C void DialogDismissedL( TInt aButtonId );
+
+    public: // Leaving variants of linkActivated and linkActivatedWithShow
+        
+        /**
+        * This method is called by LinkActivated.
+        * If this function leaves, it is trapped by the linkActivated function
+        * @since 3.0        
+        * @param : aUri -- URI string of hyperlink        
+        */
+        IMPORT_C void LinkActivatedL( const TDesC& aUri );
+
+        /**
+        * This method is called by LinkActivatedWithShow.
+        * If this function leaves, it is trapped by the
+        * LinkActivatedWithShow function
+        * @since 3.0        
+        * @param : aUri -- URI string of hyperlink
+        * @param : aShow -- xlink:show value        
+        */
+        IMPORT_C void LinkActivatedWithShowL( const TDesC& aUri , 
+                                              const TDesC& aShow ); 
+    public:                                        
+        
+        /**
+        * This method is called by LinkActivated(WithShow), FetchImage
+        * This checks whether the uri passed is a local image file or
+        * a remote image file or not an image file.
+        * @since 3.0
+        * @param : aUri -- URI string of hyperlink                 
+        * @return : TDownloadNeeded 
+        *           ELocalImageFile - if the uri is a local file
+        *           ENotAnImageFile - If the uri is not an image file
+        *           ERemoteImageFile - If the uri is remote image file.
+        */
+        IMPORT_C static TDownloadNeeded IsDownloadNeededL( 
+                                           const TDesC& aUri );
+        
+        /**
+        * This method is called by LinkActivated(WithShow), FetchImage
+        * This gets the filename from the uri and the 
+        * @since 3.0
+        * @param : aUri -- URI string of hyperlink                 
+        * @return : ETrue if the local file name is retrieved
+        *           EFalse if the file could not be retrieved
+        */        
+        IMPORT_C TBool GetFileNameFromUri( const TDesC& aUri, 
+                                  TDes& aFileName ) const;
+                                  
+        /**
+        * This method is called by LinkActivated(WithShow), FetchImage
+        * This gets the filename with full path from the uri and the 
+        * @since 3.0
+        * @param : aUri -- URI string of hyperlink                 
+        * @return : ETrue if the local file name is retrieved
+        *           EFalse if the file could not be retrieved
+        */
+        IMPORT_C static TBool GetLocalFile( const TDesC& aUri,  
+                                            TDes& aFileName,
+                                            const TDesC& aSvgFileName );
+                
+        
+    protected: //helper functions for fetchImage function    
+           
+        /**
+        * This method is called by LinkActivated(WithShow),FetchImage functions
+        * If this function leaves, it is trapped by the
+        * Called function
+        * @since 3.0        
+        * @param : aUri -- URI string of hyperlink
+        * @param : aSession - File server session in which the file is opened
+        * @param : aFileHandle - handle of the file downloaded.   
+        * @param : aIsSynchronous - Flag to indicate synchronous/asynchronous 
+        *                           download
+        * @param : aIsEmbedded - Flag to indicate whether the downloaded 
+        *           file needs to be opened in embedded mode or not.
+        * @return : KErrNone if successful
+        *           KErrNotFound if not
+        */
+        TInt StartDownloadingImageL(                    
+                    const TDesC& aUri, 
+                    RFs& aSession, 
+                    RFile& aFileHandle,     
+                    TBool aIsSynchronous,
+                    TBool aLinkFlag,
+                    TBool aIsEmbedded = ETrue );                
+                            
+   
+        /**
+        * This method is called by the Fetch Image
+        * before starting the download to get Access point id.
+        * @since 3.0
+        * @param : aIapId -- Access point id Found         
+        * @return : True if Iap found else returns false.
+        */
+        IMPORT_C TBool GetDefaultInetAccessPointL
+                              ( TUint32& aIapId ) const;
+                              
+        /**
+        * This method is called by HandleDMgrEventL
+        * This makes use of Document Handler to launch the file.
+        * @since 3.0
+        * @param : aFileName -- Name of the file to be launched. 
+        * @param : aIsEmbedded -- Flag to indicate whether file has to 
+        *          be opened in embedded mode or independent mode        
+        */                     
+        IMPORT_C void LaunchDownloadedFileL( const TDesC& aFileName, 
+                                        TBool aIsEmbedded,  
+                                        TBool aAllowSave ) const;  
+                                        
+   
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED   
+        /**
+        * This method is called by HandleDMgrEventL
+        * This iterates through the linked list and return the link 
+        * corresponding to the given http download handle
+        * @since 3.0
+        * @param : aHttpDownload -- handle of hyperlink         
+        * @return : CSVGTViewerAppDownloads * the link corresponding to 
+        * the given httpDownload handle.
+        */
+        CSVGTViewerAppDownloads* FindDownload( 
+                                 const RHttpDownload* aHttpDownload ); 
+#endif     
+        /**
+        * This method is used to get back the filename of the currently
+        * playing svg content in filname.ext format.
+        * @since 3.0
+        * @param : TDes& filename: Parameter where filename needs to be
+        *   returned.
+        * @return : void.
+        */
+        IMPORT_C void GetFileNameAndExt(TDes& filename) const;
+
+        /**
+        * This method is used in Save operation to decide whether
+        * move action should be performed.
+        * @since 3.0
+        * @param : None.
+        * @return : ETrue: Content needs to be moved. EFalse: Content
+        *   shouldn't be moved.
+        */
+        IMPORT_C TBool IsAllowMove() const;
+
+        /**
+        * This method is used to launch wait dialog while save operation
+        * is going on.
+        * @since 3.0
+        * @param : aResourceId: Resource to be used for wait-note.
+        *   aVisibilityDelayOff: Parameter to the wait note.
+        *   aFileName FileName to be displayed in WaitNote
+        * @return : none.
+        */
+        void LaunchWaitNoteL(TInt aResourceId, 
+                             TBool aVisibilityDelayOff, 
+                             const TDesC& aFileName );
+
+        /**
+        * This method is used check whether content file's full-path
+        * is available.
+        * @since 3.0
+        * @return : ETrue: Fullpath available, EFalse: Fullpath
+        *   not available.
+        */
+        IMPORT_C TBool IsFileFullPathAvailable() const;
+    
+    protected:
+
+        /**
+        * C++ default constructor.
+        * aAppDialog: Pointer to the SVGT Dialog
+        */
+        IMPORT_C CSVGTAppObserverUtil( CSVGTUIDialog* aAppDialog ); 
+
+        /**
+        * Default Symbian 2nd phase constructor.
+        */
+        IMPORT_C void ConstructL();
+
+        /**
+        * Default Symbian 2nd phase constructor.
+        * RFile* aFileHdlPtr: File handle to the content.
+        * const TDesC& filename: Filepath.
+        * TBool aIsFileFullPathAvailable: Flag to indicate if content's 
+        *   fullpath is available.
+        * TBool aCanSaveContent,
+        * TBool aShouldMoveContent.
+        */
+        IMPORT_C void ConstructL( RFile* aFileHdlPtr,
+                        const TDesC& aFilename, 
+                        TBool aIsFileFullPathAvailable,
+                        TBool aCanSaveContent,
+                        TBool aShouldMoveContent );  
+        
+        /**
+        * Default Symbian 2nd phase constructor.
+        * RFile* aFileHdlPtr: File handle to the content.
+        */
+        IMPORT_C void ConstructL( RFile* aFileHdlPtr );  
+
+#ifdef SVGTVIEWERAPP_DBG_FLAG        
+        void PrintDebugMsg( const TDesC&  aMsg );
+#endif        
+
+    private: //User methods
+        /**
+        * Reads the downloaded file & assign to the svg engine.
+        * @since 3.1
+        * @param CSVGTViewerAppDownloads aDownloadItem
+        * @param RHttpDownload aDownload
+        */
+        void DoAssignImageDataL(const CSVGTViewerAppDownloads* aDownloadItem,
+                                                RHttpDownload& aDownload);
+        
+        void DoAssignLocalFileDataL( const TDesC& aOriginalUri,  const TDesC& aNewUri ) const;
+        HBufC8* DoGetProcessedEmbededDataL( const TDesC& aXlinkHrefValue ) const;
+        
+    private:    // Data            
+  
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED   
+        // To start a wait loop after initiating download
+        CActiveSchedulerWait iWait; 
+         
+        // client side handle for the download manager        
+        RHttpDownloadMgr iDownloadMgr;
+        
+        // Handle for download manager ui user interactions
+        CDownloadMgrUiUserInteractions* iDMgrUserInteractions;
+        
+        // Handle for download manager ui downloads list
+        CDownloadMgrUiDownloadsList* iDMgrDownloadsList;                        
+        
+        // Handle to register download manager UI
+        CDownloadMgrUiLibRegistry* iDMgrUiReg;
+
+        // Head of Doubly linked list of Downloads
+        TDblQue<CSVGTViewerAppDownloads>  iDownloads;
+        
+        // Iterator for the doubly linked list
+        TDblQueIter<CSVGTViewerAppDownloads>   iDownloadIter;
+        
+        // Flag to check whether downloads menu is enabled or not
+        TBool iDownloadMenuEnabled;
+        
+        // Flag to check whether synchronous download is stopped
+        TBool iSynchronousDownloadStopped;
+#endif 
+        // Pointer to the SVGT Dialog
+        CSVGTUIDialog* iAppDialog;   
+        
+        //File Manager used for file save operations.
+        CSVGTFileManager* iFileManager;
+
+        TBool  iIsFullFilePathValid;
+        TBool  iCanSaveContent;
+        TBool  iShouldMoveContent;
+        HBufC* iSvgFileName;
+        HBufC* iSvgDstFileName;
+        RFile* iSvgFileId;
+        CAknProgressDialog* iWaitNote;
+        
+        // enumeration to store the state in which the wait note is used.
+        TWaitNoteState iWaitNoteState;        
+               
+        CEikProgressInfo* iProgressInfo;  
+                   
+        // Integer storing resource offset to DLL resource file
+        TInt iResourceOffset;
+        
+        // Boolean indicating save done
+        TBool iSavingDone;
+        
+        // Integer to store the command id in context while saving
+        TInt iCommandId;
+        
+        // DocHandler pointer to Open embedded files
+        CDocumentHandler* iDocHandler;
+
+        // pointer to  CEikonEnv
+        CEikonEnv* iEikEnv;
+        //TBool iIsFetchImageCall;
+        
+        // Boolean to remember whether original file is to be 
+        // deleted after save
+        TBool iDeleteOrigFile;
+
+        // Boolean to remember whether temp file was used 
+        // to perform cleanup
+        TBool iTempFileUsed;
+
+        // Used for storing the temporary file name for deletion
+        HBufC* iTempFileName;
+        // Used to indicate whether we are attempting to overwrite existing
+        // file
+        TBool iIsOverwriteCase;
+        TBool iDownloadDone;
+        
+        // This variable tracks whether the download manager was initialised or not 
+        TBool iDownloadInProgress;
+        
+    };
+
+#endif // SVGTAPPOBSERVERUTIL_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svg_application_observer_utility_api/inc/SVGTFileManager.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2004, 2005 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:  File handling utility. 
+*
+*/
+
+
+
+#ifndef SVGTFILEMANGER_H
+#define SVGTFILEMANGER_H
+
+//  INCLUDES
+#include <f32file.h>
+#include <e32base.h>
+#include <SVGTUiSaveListener.h>
+
+// CONSTANTS
+const TInt KSVGTOneSecond(1000000);
+const TInt KSVGTOneMinute(60*KSVGTOneSecond);
+const TInt KOneHourInSeconds(3600);
+const TInt KSVGTPercent(100);
+
+// CLASS DECLARATION
+
+/**
+*  CSVGTFileManager
+*  File operations
+*
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+NONSHARABLE_CLASS(CSVGTFileManager) : public CActive, 
+                                      public MFileManObserver
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CSVGTFileManager* NewL();
+                 
+        /**
+        * Destructor.
+        */
+        IMPORT_C virtual ~CSVGTFileManager();
+
+    public: // New functions
+        
+        /**
+        * Starts async copy operation
+        * @since 3.0
+        * @param aCallback Callback to UI side
+        * @param anOld source
+        * @param aNew target
+        * @return KErrDiskFull if mmc full, KErrNone if succesful.
+        */
+        IMPORT_C TInt StartCopyOperationL( MSVGTUISaveListener* aCallback,  
+                                        const TDesC& anOld,const TDesC& aNew );
+        
+        /**
+        * Starts async copy operation
+        * @since 3.0
+        * @param aCallback Callback to UI side
+        * @param aFileHandle source
+        * @param aNew target
+        * @return KErrDiskFull if mmc full, KErrNone if succesful.
+        */
+        IMPORT_C TInt StartCopyOperationL( MSVGTUISaveListener* aCallback,  
+                                       RFile& aFileHandle, const TDesC& aNew );
+
+        /**
+        * Cancels async copy operation
+        * @since 3.0
+        * @return void
+        */
+        IMPORT_C void CancelCopy();
+
+        /**
+        * Sets iMove if moving is preferred instead of copy.
+        * @param Document handler EGenericParamAllowMove parameter value.
+        * @since 2.8
+        */ 
+        IMPORT_C void SetAllowMove( TInt32 aValue ); 
+
+   public: // Functions from MFileManObserver
+
+       /** @see MFileManObserver::NotifyFileManOperation */
+       MFileManObserver::TControl NotifyFileManOperation();
+
+   private: // Constructors
+
+        /**
+        * C++ default constructor.
+        */
+        CSVGTFileManager();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private: // From CActive    
+        
+        /** @see CActive::RunL() */
+        void RunL();
+        
+        /** @see CActive::DoCancel() */
+        void DoCancel();
+
+    private: // New fuctions
+
+        /** 
+        * Timer callback for UI progress update
+        * @since 3.0
+        * @param aPtr Pointer to callback class
+        * @return KErrNone
+        */
+        static TInt ProgressUpdate(TAny* aPtr);
+
+        /**
+        * Do progress update 
+        * @since 3.0
+        * @return void
+        */
+        void DoProgressUpdate();
+        
+#ifdef SVGTVIEWERAPP_DBG_FLAG        
+        void PrintDebugMsg( const TDesC&  aMsg );
+#endif        
+        
+
+    private:    // Data
+        TInt iFileSize;
+        TInt iPosition;
+        TBool iCancel;
+        CFileMan* iFileMan;        
+        MSVGTUISaveListener* iCallback; // not owned
+        CPeriodic* iProgressUpdater;
+        CEikonEnv* iEikEnv;
+        TBool iMove; 
+    };
+
+#endif      // SVGTFILEMANGER_H 
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svg_application_observer_utility_api/inc/SVGTUISaveListener.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2004, 2005 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:  Callback class for UI save methods 
+*
+*/
+
+
+#ifndef SVGTUISAVELISTENER_H
+#define SVGTUISAVELISTENER_H
+        
+// CLASS DECLARATION
+
+/**
+*  MSVGTUISaveListener 
+*  Callback class for UI save methods. File Manager will
+*  use this callback to indicate the save status to the
+*  SVGT Dialog. 
+*
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+NONSHARABLE_CLASS(MSVGTUISaveListener) 
+    {
+
+    public: // New functions
+        
+         /**
+        * Called when buffering or saving position is changed
+        * @since 3.0
+        * @param  aPosition, New buffering/saving position (0-100)
+        * @return void
+        */
+        virtual void SVGTPositionChanged( TInt aPosition ) = 0;
+ 
+        /**
+        * Called when saving is finished.
+        * @since 3.0
+        * @param  aError, KErrNone or one of the system wide error codes.
+        * @return void
+        */
+        virtual void SVGTSavingDoneL( TInt aError ) = 0;
+    
+    };
+
+#endif      // SVGTUISAVELISTENER_H  
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svg_application_observer_utility_api/svg_application_observer_utility_api.metaxml	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<api id="86ddeae7eca3f120584f7a514adfd38b" dataversion="2.0">
+  <name>SVG Application Observer Utility API</name>
+  <description>Provides utility APIs for handling the callbacks from the SVG-T UI control. The APIs are used by SVG-T viewer and MMS viewer applications.</description>
+  <type>c++</type>
+  <collection>domain</collection>
+  <libs>
+    <lib name="SVGTAppObserverUtil.lib" />
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_file_view_details_dialog_api/group/bld.inf	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 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:  File that exports the files belonging to 
+:                SVGT File View 
+Details Dialog API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/SVGTDrmHelper.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTDrmHelper.h)
+../inc/svgtfileviewdetails.h     APP_LAYER_PLATFORM_EXPORT_PATH(svgtfileviewdetails.h)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_file_view_details_dialog_api/inc/SVGTDrmHelper.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,259 @@
+/*
+* Copyright (c) 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:  DRM helper for svg files.
+*
+*/
+
+
+
+#ifndef SVGTDRMHELPER_H
+#define SVGTDRMHELPER_H
+
+// INCLUDES
+#include <e32std.h>
+
+// DATA TYPES
+enum TSVGTRightsStatus
+    {
+    ESVGTFull,
+    ESVGTMissing,
+    ESVGTRestricted,
+    ESVGTExpired,
+    ESVGTPreview
+    };
+
+enum TSVGTExpireConstraint
+    {
+    ESVGTNone,
+    ESVGTCount,
+    ESVGTTime,
+    ESVGTCountAndTime
+    };
+
+// CONSTANTS
+const TInt KSVGTRightsAboutToExpire = -40000;
+
+// FORWARD DECLARATIONS
+class CDRMHelper;
+class CDRMHelperRightsConstraints;
+class MDesCArray;
+class CCoeEnv;
+
+// CLASS DECLARATION
+
+/**
+*  DRM helper for SVG files.
+*
+*  @lib SVGTUIControl.dll
+*  @since 3.0
+*/
+class CSVGTDrmHelper : public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.       
+        */
+        static CSVGTDrmHelper* NewL();
+        
+        /**
+        * Two-phased constructor.       
+        */
+        static CSVGTDrmHelper* NewLC();   
+                
+        /**
+        * Destructor.
+        */
+        virtual ~CSVGTDrmHelper();
+
+    public: // New functions
+    
+
+        /**
+        * This Function checks whether the file has preview rights.
+        * @since 3.0
+        * @param aFileHandle File handle for which usage rights info is loaded.
+        * @return True if the file has only preview rights
+        *         False if not.
+        */
+        TBool IsPreviewL( RFile& aFileHandle );
+       
+        /**
+        * This Function checks the rights associated with the file.
+        * @since 3.0
+        * @param aFileHandle File handle for which usage rights is checked.
+        * @return Button code
+        */
+        TInt CheckRightsAmountL( RFile& aFileHandle );
+        
+
+        /**
+        * This Function gets the drm details needed for thumbnail generation.
+        * @since 3.0
+        * @param aFileHandle File handle for which usage rights info is loaded.
+        * @param aRightsValid True if the rights are valid
+        * @param aIsSeparateDeliveryNS True if the file is a separate delivery 
+        *               drm file non-supersitributable
+        * @param aIsProtected True if the file is protected
+        */
+        void GetDrmDetailsL( RFile& aFileHandle,
+                             TBool& aRightsValid,
+                             TBool& aIsSeparateDeliveryNS, 
+                             TBool& aIsProtected );
+                 
+    
+        /**
+        * Loads usage rights information for a svg file using 
+        * CDRMHelper. The loaded constraint is CContentAccess::EPlay.
+        * @since 3.0
+        * @param aFileHandle File handle for which usage rights info is loaded.
+        */
+        void LoadUsageRigthsInfoL( RFile& aFileHandle );
+
+
+        /**
+        * Gets usage rigths status.
+        * @since 3.0
+        * @param aStatus:
+        *           ESVGTFull:        Full rights
+        *           ESVGTMissing:     Rights missing
+        *           ESVGTRestricted:  Restricted rights
+        *           ESVGTExpired:     Expired rights (could be also future rights)
+        *           ESVGTPreview:     Preview rights
+        */
+        void GetUsageRightsStatus( TSVGTRightsStatus& aStatus );
+
+        /**
+        * Checks if the usage rigths are about to expire. If they are, returns 
+        * info about the rights contraints that are about to expire.
+        * @since 3.0
+        * @param aAboutToExpire Boolean telling if the rigths are about to
+        *                       expire or not.
+        * @param aConstraint Constraint that is about to expire:
+        *                    ESVGTCount:          Usage count about to expire
+        *                    ESVGTTime:           Usage time about to expire
+        *                    ESVGTCountAndTime:   Usage count and time about to
+        *                                       expire
+        * @param aCountLeft Usage counts left (only if count is about to expire)
+        * @param aDaysLeft Usage days left (only if time is about to expire)
+        */
+        void GetExpireStatus( TBool& aAboutToExpire,
+                                      TSVGTExpireConstraint& aConstraint,
+                                      TInt& aCountLeft,
+                                      TInt& aDaysLeft );
+
+        /**
+        * Checks if sending of the file is allowed.
+        * @since 3.0
+        * @return ETrue:    Sending is allowed.
+        *         EFalse:   Sending is not allowed.
+        */
+        TBool SendingAllowed() const;
+
+        /**
+        * Gets usage count.
+        * @since 3.0
+        * @param aCount Counts left.
+        * @return Error code:
+        *           KErrNone:       Count returned.
+        *           KErrNotFound:   Object doesn't have count based rights.
+        *           KErrNotReady:   Usage rights info not loaded.
+        */
+        TInt GetCount( TUint32& aCount );
+
+        /**
+        * Gets start time of time based rights.
+        * @since 3.0
+        * @param aStartTime Start time.
+        * @return Error code:
+        *           KErrNone:       Start time returned.
+        *           KErrNotFound:   Object doesn't have time based rights.
+        *           KErrNotReady:   Usage rights info not loaded.
+        */
+        TInt GetStartTime( TTime& aStartTime );
+
+        /**
+        * Gets end time of time based rights.
+        * @since 3.0
+        * @param aEndTime End time.
+        * @return Error code:
+        *           KErrNone:       End time returned.
+        *           KErrNotFound:   Object doesn't have time based rights.
+        *           KErrNotReady:   Usage rights info not loaded.
+        */
+        TInt GetEndTime( TTime& aEndTime );
+
+        /**
+        * Gets interval time constraint.
+        * @since 3.0
+        * @param aInterval Interval.
+        * @return Error code:
+        *           KErrNone:       Interval returned.
+        *           KErrNotFound:   Object doesn't have interval constraint.
+        *           KErrNotReady:   Usage rights info not loaded.
+        */
+        TInt GetInterval( TTimeIntervalSeconds& aInterval );
+
+        /**
+        * Gets start time of activated interval constraint.
+        * @since 3.0
+        * @param aStartTime Start time.
+        * @return Error code:
+        *           KErrNone:       Start time returned.
+        *           KErrNotFound:   Interval has not been started yet.
+        *           KErrNotReady:   Usage rights info not loaded.
+        */
+        TInt GetIntervalStart( TTime& aStartTime );
+                
+        /**
+        * Provides info about files DRM protection status.
+        * @since 3.0
+        * @return ETrue:  The file is DRM protected.
+        *         EFalse: The file is not DRM protected.
+        */
+        TBool IsProtected() const;
+
+        /**
+        * Checks if given content can be set as an automated content.
+        * @since 3.0
+        * @return  Boolean.
+        */
+        TBool CanSetAutomated() const;
+
+    private: // Private contructors
+
+        /**
+        * C++ default constructor.
+        */
+        CSVGTDrmHelper();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();        
+
+    private:    // Data
+        CDRMHelper* iDrmHelper;
+        CDRMHelperRightsConstraints* iRightsConstraints;
+        CCoeEnv* iEnv;
+        
+        TBool iProtected;
+        TBool iExpired;
+        TBool iSendingAllowed;
+        TBool iCanSetAutomated;       
+    };
+
+#endif      // SVGTDRMHELPER_H  
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_file_view_details_dialog_api/inc/svgtfileviewdetails.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 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:  Declares svg file details dialog
+*
+*/
+
+
+
+#ifndef SVGTFILEVIEWDETAILSDIALOG_H
+#define SVGTFILEVIEWDETAILSDIALOG_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <aknpopup.h>
+#include <SVGTDrmHelper.h>
+
+// FORWARD DECLARATIONS
+
+class CAknDoublePopupMenuStyleListBox;
+class CEikonEnv;
+
+
+// CLASS DECLARATIONS
+
+/**
+*  CSvgtFileDetails 
+*  Container class for file details
+*/
+class CSvgtFileDetails : public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * C++ default constructor.
+        */
+        CSvgtFileDetails();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CSvgtFileDetails();
+
+    public:    // Data
+
+        HBufC* iUrl;
+        HBufC* iFormat;
+        
+        TInt   iSize;
+        TTime  iTime;
+   
+
+        // Drm stuff
+        TBool   iDrmProtected;
+        TSVGTRightsStatus iDRMRightsStatus;
+        TSVGTExpireConstraint iDRMExpireConstraint;
+        TBool   iDRMForwardLocked;
+        TUint32 iDRMCountsLeft;
+
+        TBool   iDRMFileHasInterval;
+        TBool   iDRMIntervalActive;
+        TTimeIntervalSeconds iDRMInterval;
+
+        TTime   iDRMValidFrom;
+        TTime   iDRMValidUntil;
+        
+    };
+
+
+
+/**
+*  CSvgtFileViewDetailsDialog
+*  Used to display "View Details" option
+*  Makes use of SVGTdrmhelper to display the drm details
+*  
+*  @lib SVGTFileDetailsDialog.lib
+*  @since 2.0
+*/
+class CSvgtFileViewDetailsDialog : public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CSvgtFileViewDetailsDialog* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CSvgtFileViewDetailsDialog();
+
+    public: // New functions
+
+    
+        /**
+        * Shows file details to user in dialog. 
+        * @since 3.0
+        * @param aFileHandle File handle for which usage rights info is loaded.
+        * @leaves Leaves with KErrNotSupported if file is not valid media file.
+        * @return void
+        */
+        IMPORT_C void ExecuteLD( RFile& aFileHandle );        
+  
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CSvgtFileViewDetailsDialog();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private: // New functions
+        
+        /**
+        * Sets title for CAknPopupList.
+        * @since 3.0
+        * @param aPopupList CAknPopupList which title is modified
+        * @return void
+        */
+        void SetTitleL( CAknPopupList* aPopupList ) const;
+
+        /**
+        * Fills listbox with file details information.
+        * @since 3.0
+        * @param aFileDetails File details
+        * @return void
+        */
+        void FillListBoxL( const CSvgtFileDetails* aFileDetails );
+
+        /**
+        * Adds header and value to list.
+        * @since 3.0
+        * @param aHeading Heading
+        * @param aValue Value
+        * @param aItemArray Array where value and header are added.
+        * @return void
+        */
+        void AddItemToListBoxL( const TDesC& aHeading, const TDesC& aValue,
+                CDesCArray* aItemArray ) const;
+
+        
+        /**
+        * Constructs clip url item. 
+        * @since 3.0
+        * @param aItemArray Array where constructed item is put.
+        * @param aFileDetails File details.
+        * @return void
+        */
+        void MakeUrlItemL( CDesCArray* aItemArray, 
+                const CSvgtFileDetails* aFileDetails ) const;
+        
+        /**
+        * Constructs media format item. 
+        * @since 3.0
+        * @param aItemArray Array where constructed item is put.
+        * @param aFileDetails File details.
+        * @return void
+        */
+        void MakeFormatItemL( CDesCArray* aItemArray, 
+               const CSvgtFileDetails* aFileDetails ) const;
+
+
+        /**
+        * Constructs file size item. 
+        * @since 3.0
+        * @param aItemArray Array where constructed item is put.
+        * @param aFileDetails File details.
+        * @return void
+        */
+        void MakeSizeItemL( CDesCArray* aItemArray, 
+               const CSvgtFileDetails* aFileDetails ) const;
+
+        /**
+        * Constructs date item. 
+        * @since 3.0
+        * @param aItemArray Array where constructed item is put.
+        * @param aFileDetails File details.
+        * @return void
+        */
+        void MakeDateItemL( CDesCArray* aItemArray, 
+           const CSvgtFileDetails* aFileDetails ) const;
+
+        /**
+        * Constructs time item. 
+        * @since 3.0
+        * @param aItemArray Array where constructed item is put.
+        * @param aFileDetails File details.
+        * @return void
+        */
+        void MakeTimeItemL( CDesCArray* aItemArray, 
+             const CSvgtFileDetails* aFileDetails ) const;
+        /**
+        * Converts between arabic-indic digits and european digits.
+        * @since 3.0
+        * @param aText numbers to be converted.
+        * @return void
+        */
+        void LanguageSpecificNumberConversion( TDes& aText) const;
+
+        /**
+        * Fetches drm file details.
+        * @since 3.0
+        * @param aFileHandle File handle for which usage rights info is loaded.
+        * @param aFileDetails Pointer to the details to be fetched.
+        * @return void
+        */
+        void FetchDrmDataL( RFile& aFileHandle, 
+              CSvgtFileDetails* aFileDetails ) const;
+         
+
+        /**
+        * Constructs DRM items. 
+        * @since 3.0
+        * @param aItemArray Array where constructed item is put.
+        * @param aFileDetails File details.
+        * @return void
+        */
+        void MakeDrmItemsL( CDesCArray* aItemArray, 
+         const CSvgtFileDetails* aFileDetails ) const;
+
+        /**
+        * Constructs restricted drm items. E.g. count, interval 
+        * @since 3.0
+        * @param aRights Drm right type "Play"
+        * @param aItemArray Array where constructed item is put.
+        * @param aFileDetails File details.
+        * @return void
+        */
+        void MakeRestrictedDrmItemsL( const HBufC* aRights, 
+                CDesCArray* aItemArray,
+                const CSvgtFileDetails* aFileDetails ) const;
+        
+        /**
+        * Add a single element of time to the string array
+        * @param aNumOfElements         Number of elements of the interval
+        * @param aResourceIdSingle      Resource id to be used in case of 
+        *                               single unit
+        * @param aResourceIdOneFinal    Resource id to be used in case of 
+        *                               units ending with 1, from 21
+        *                               (requested by Slavic languages)
+        * @param aResourceIdTwoFour     Resource id to be used in case of 
+        *                               units included from two to four, except
+        *                               12-14 (requested by Slavic languages)
+        * @param aResourceIdFiveZero    Resource id to be used in case of 
+        *                               units ending from 5 to 9, plus range
+        *                               from 11 to 14 (requested by Slavic 
+        *                               languages)
+        * @param aStrings               Buffer where to add the element
+        */
+        void AddSinglePartOfTimeL( TInt   aNumOfElements, 
+                                   TInt   aResourceIdSingle, 
+                                   TInt   aResourceIdOneFinal, 
+                                   TInt   aResourceIdTwoFour,
+                                   TInt   aResourceIdFiveZero, 
+                                   HBufC*& aStrings ) const;
+        
+        void AddResourceFileToEnvL();
+                                           
+        /**
+        * Shows file details to user in dialog. 
+        * @since 3.0
+        * @param aFileDetails File details which are shown to user.
+        * @return void
+        */
+//        void ExecuteLD( const CSvgtFileDetails* aFileDetails );
+        void DoLaunchDialogL(const CSvgtFileDetails* aFileDetails );
+        
+    private:    // Data
+        CAknDoublePopupMenuStyleListBox* iListBox;
+        CEikonEnv* iEnv;
+        TInt iResOffset;
+    };
+
+#endif //SVGTFILEVIEWDETAILSDIALOG_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_file_view_details_dialog_api/svgt_file_view_details_dialog_api.metaxml	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<api id="58cea3f8c09d305d4cc41fd004394af0" dataversion="2.0">
+  <name>SVGT File View Details Dialog API</name>
+  <description>Provides the interface to display svgt file details.</description>
+  <type>c++</type>
+  <collection>domain</collection>
+  <libs>
+    <lib name="svgtfileviewdetails.lib" />
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/group/bld.inf	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 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:  File that exports the files belonging to 
+:                SVG-T Viewer UI API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/SVGTProgressBarTimer.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTProgressBarTimer.h)
+../inc/SVGTPointerHideTimer.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTPointerHideTimer.h)
+../inc/SVGTAppObserver.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTAppObserver.h)
+../inc/SvgCodecImageConstants.hrh     APP_LAYER_PLATFORM_EXPORT_PATH(SvgCodecImageConstants.hrh)
+../inc/SVGTUIDialog.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTUIDialog.h)
+../inc/SVGTCustControl.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTCustControl.h)
+../inc/SvgtApplicationExitObserver.h     APP_LAYER_PLATFORM_EXPORT_PATH(SvgtApplicationExitObserver.h)
+../inc/SVGTUIControlDbgFlags.hrh     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTUIControlDbgFlags.hrh)
+../inc/SVGTThumbnailUtil.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTThumbnailUtil.h)
+../inc/SVGTViewerAppDbgFlags.hrh     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTViewerAppDbgFlags.hrh)
+../inc/SVGTViewerAppDownloads.h     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTViewerAppDownloads.h)
+../inc/SVGTCustControl.rh     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTCustControl.rh)
+../inc/SVGTUIDialog.hrh     APP_LAYER_PLATFORM_EXPORT_PATH(SVGTUIDialog.hrh)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTAppObserver.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2004,2005 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:  Mixin Class that defines the call back interface used
+*                by application using the SVGT Control.
+*
+*/
+
+
+#ifndef SVGTAPPOBSERVER_H
+#define SVGTAPPOBSERVER_H
+
+/**
+*  MSvgtAppObserver is an interface class used by SVGT control to callback to
+*   the application.
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+
+class MSvgtAppObserver
+{
+    public: 
+
+           
+        /**
+        * This method is called to retrieve the absolute path of an image gvien
+        * the uri. The SVGT control requests the absolute path to provide the     
+        * client with control of the location of the images.
+        * @since 3.0
+        * see MSvgRequestObserver::FetchImage
+        */                                       
+        virtual TInt  FetchImage( const TDesC& aUri, 
+             RFs& aSession, RFile& aFileHandle ) = 0;                                  
+                                  
+        /**
+        * This method is called to notify the client that a link has been
+        * activated.
+        *
+        * @since 3.0
+        * @param : aUri -- URI string of hyperlink
+        * @return : For future use.  Value is ignored.
+        */
+        virtual TBool LinkActivated( const TDesC& aUri ) = 0 ;
+
+         /**
+         * This method is called to notify the client that a link has been
+         * activated.  When Show is also present .
+         *
+         * @since 3.0
+         * @param : aUri -- URI string of hyperlink
+         * @param : aShow -- xlink:show value
+         * @return : For future use.  Value is ignored.
+         */
+        virtual TBool LinkActivatedWithShow( const TDesC& aUri, 
+                                             const TDesC& aShow ) = 0;
+                                             
+        /**
+        * This method is called to notify the client that download menu has 
+        * been selected in the UI dialog
+        * @since 3.0     
+        */                                             
+        virtual void DisplayDownloadMenuL( void ) = 0;
+
+        /**
+        * This method is called to get the SMIL fit value to be used by the
+        * engine.
+        * @since 3.0     
+        */                                             
+        virtual void GetSmilFitValue( TDes& aSmilValue ) = 0;
+                                                     
+        /**
+        * This method is called to check from the client if Save option
+        * should be displayed.
+        *
+        * @since 3.0
+        * @return : ETrue: Save can be shown. EFalse: Save can't be shown.
+        */
+        virtual TBool CanShowSave() = 0;
+
+        /**
+        * This method is called to check from the client if Saving 
+        * is done already
+        *
+        * @since 3.0
+        * @return : ETrue: The content is saved
+        *           EFalse: content is not saved
+        */
+        virtual TBool IsSavingDone() = 0;
+        
+        /**
+        * This method is called to check from the client if Downloads option
+        * should be displayed.
+        *
+        * @since 3.0
+        * @return : ETrue: Downloads can be shown. 
+        *           EFalse: Downloads can't be shown.
+        */
+        virtual TBool CanShowDownload() const = 0;
+
+
+        /**
+        * This method is called to perform the save operation. 
+        * Note the Save functionality depends on the client invoking
+        * the dialog. E.g. Browser->SVGT-Viewer->Dialog then save
+        * results in Move operation to save memory.
+        * param aButtonId context in which save is called
+        * @since 3.0
+        * @return : void.
+        */
+
+        virtual void DoSaveL( TInt aButtonid ) = 0;
+
+        /**
+        * This method is called to retrieve the absolute path of an image given
+        * the uri. The SVGT control requests the absolute path to provide the     
+        * client with control of the location of the images. This function should
+        * be an asynchronous, i.e. it should not block.
+        * On completion of fetching of the file, it should notify the control
+        * using AssignImageData() function
+        * @since 3.1
+        * see MSvgRequestObserver::ImageDataReference
+        */                                       
+        virtual TInt NewFetchImageData( const TDesC& aUri ) = 0;
+
+        /**
+        * This method is called instead of NewFetchImageData in case the image 
+        * is defined as part of the SVG content itself i.e. inline using base-64
+        * encoding for eg.
+        * @since 3.1
+        * see MSvgRequestObserver::ImageDataReference
+        */                                       
+        virtual void AssignEmbededDataL( const TDesC& aUri ) = 0;
+        virtual TBool ExitWhenOrientationChange() = 0 ; 
+};
+#endif
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTCustControl.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,1490 @@
+/*
+* Copyright (c) 2004,2005 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:  SVGT Custom Control Class implements the custom control used
+*                to display SVGT content.
+*
+*/
+
+
+
+#ifndef __SVGTCUSTCONTROL_H__
+#define __SVGTCUSTCONTROL_H__
+
+// INCLUDES
+
+#include <e32property.h> 
+#include <SVGAnimationListener.h>
+#include <SVGEngineInterfaceImpl.h>
+#include <SvgRequestObserver.h>
+#include <aknutils.h>
+
+#include <SvgListener.h>
+#include <SVGHyperlinkListener.h>
+
+#include <SVGTUIControlDbgFlags.hrh>
+#include <SVGTProgressBarTimer.h>
+#include <SVGTPointerHideTimer.h>
+#include <e32std.h>
+
+#ifdef RD_SVGT_AUDIO_SUPPORT
+#include<RemConCoreApiTargetObserver.h>    //for MRemConCoreApiTargetObserver
+#endif //RD_SVGT_AUDIO_SUPPORT
+
+// CONSTANTS
+const TInt KFindTextQueryMaxLen = 50;
+// MACROS
+
+// DATA TYPES
+
+// Enumeration for indicating animation Status of current SVGT Content
+enum TSvgtAnimStatus {
+        ESvgNoAnimationsPresent,
+        ESvgAllAnimationsComplete,
+        ESvgAnimationsNotComplete };
+
+// Enumeration for indicating Animation State of the viewer
+enum TSvgtViewerAnimStatus
+        {
+        ESvgAnimPausedState,
+        ESvgAnimPlayingState,
+        ESvgAnimStoppedState
+        };
+
+// Enumeration for indicating pointer types in the viewer
+enum TSvgtViewerPointerTypes
+            {
+            ESvgPointerDefault,
+            ESvgPointerHand,
+            ESvgPointerText
+            };        
+            
+        
+enum TSvgCustomControlFlag
+        {
+        ESvgDisplayWaitNote   = 0x01,    // need to draw initial wait note
+        ESvgDisplayErrorNotes = 0x02,    // Display Error Notes
+        ESvgDisplayIcons      = 0x04,    // Display Icons
+        ESvgWindowOwning      = 0x08,    // Window Owning Control
+        ESvgDrawPointer       = 0x10,    // Pointer is drawn
+        ESvgDrawPanIndicator  = 0x20,	 // Panning Indicator is drawn
+        ESvgDrawPauseIndicator = 0x40,   // Pause Indicator is drawn
+        ESvgDrawProgressBar    = 0x80,    // ProgressBar drawn
+        ESvgUseBackLight       = 0x100    // Keep Backlight on while animating
+        };        
+
+enum TSvgCustomControlSelectCause
+    {
+    ESvgInvalidSelectCause,
+    ESvgHyperLinkSelectCause,
+    ESvgTextSelectCause,
+    ESvgTextAreaSelectCause    
+    };
+        
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class   CSvgEngineInterfaceImpl;
+class   CSVGTHyperlinkHandler;
+class   CCoeControl;
+class   CSVGTProgressBarTimer;
+class   MSvgtAppObserver;
+class   CAknWaitDialog;
+class   CSVGTDrmHelper;
+class   CSvgtThreadController;
+class   CAknInformationNote;
+class   MSvgtApplicationExitObserver;
+class   CSvgtEventHandlerAO;
+class   CAknNavigationControlContainer;
+class   CAknNavigationDecorator;
+
+#ifdef RD_SVGT_AUDIO_SUPPORT
+class   CAknVolumePopup;
+class CRemConCoreApiTarget;
+class CRemConInterfaceSelector;
+#endif //RD_SVGT_AUDIO_SUPPORT
+
+// CLASS DECLARATION
+
+/**
+*  Interface for the progress timer event listener.
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+
+class MSVGTProgressBarDrawImpl 
+    {
+    public:
+    
+        /**
+        * This function is called in order to render the progress indicator.
+        * @since 3.0
+        * @param aTimeElapsed - Contains the time elapsed in seconds.
+        * @param aTotalTime - Contains the total time in seconds
+        */
+        virtual void DrawProgressBarL( TUint aTimeElapsed, 
+            TUint aTotalTime ) = 0;
+    };
+
+/**
+*  Interface for MSK labelling   
+*  @lib SVGTUIControl.lib
+*  @since 3.2
+*/
+
+class MSVGTMSKImpl
+{
+	public:
+	
+	/**
+	* This function is called to draw the MSK label by pushing the command to
+	* position button's stack
+	* @since 3.2
+	* @param aResourceID - The MSK label resourceID
+	* @param aCommandID	- The command associated with that label
+	*/ 							
+	virtual void DrawMSKLabelL(TInt aResourceID,TInt aCommandID)=0;
+    	
+    /**
+    * This function is called to remove MSK label from button group's stack
+	* @since 3.2
+	*/
+	virtual void RemoveMSKLabel()=0;
+	
+};
+
+
+class MCustControlPointerEventHandler
+    {
+public:
+    virtual TBool HandleCustControlPointerEventL(const TPointerEvent& aPointerEvent) = 0;    
+    };
+
+
+class MSvgCustControlListener
+{
+};
+
+enum TCustControlListener
+	{
+	EAudioListener = 0	
+	};
+#ifdef RD_SVGT_AUDIO_SUPPORT
+class MSvgAudioMuteListener : public MSvgCustControlListener
+{
+	public:
+	virtual void VolumeMuted(TBool aIsVolumeMuted) = 0;
+};
+#endif
+/**
+*  CSVGTCustControl is a CCoeControl used to display SVGT content.
+*  It can be used independently or through dialog provided by
+*  CSVGTUIDialog.
+*
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+
+class CSVGTCustControl : public CCoeControl,
+                         public MSvgRequestObserver,
+                         public MSvgAnimationListener,
+                         public MSVGTProgressBarListener,
+                         public MSVGTPointerInactivityListener,
+                         public MSvgHyperlinkListener
+#ifdef SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE
+                         , public MSvgTextAreaListener,
+                         public MSvgTextListener
+#endif // SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE                         
+                         , public MSvgLoadingListener
+                         
+#ifdef RD_SVGT_AUDIO_SUPPORT
+                         , public MCoeControlObserver
+                         , public MRemConCoreApiTargetObserver
+#endif //RD_SVGT_AUDIO_SUPPORT
+                         , public MSvgInteractiveElementListener
+                         ,public MSvgViewPortListener
+    {
+    public:
+        enum TFileType
+            {
+            // The uri refers to a local image file
+            ELocalImageFile,
+            // The uri refers to a remote image file
+            ERemoteImageFile,
+            // The uri doesnt refer to an image file
+            ENotAnImageFile,
+            // The uri is not well formed(parsing error)
+            EInvalidFilePath
+            };
+    public: // Constructors and destructor
+
+    MCustControlPointerEventHandler* iPntrObserver;
+    void SetPointerObserver(MCustControlPointerEventHandler* aPntrObserver)
+        {
+        iPntrObserver = aPntrObserver;
+        }
+            
+    
+//TOUCH SUPPORT START    
+#ifdef RD_SCALABLE_UI_V2
+        //From CCoeControl
+		void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+        void SetContainerWindowL(const CCoeControl &aContainer);
+        
+		enum TIndicatorType
+		    {
+		    ELeftIndicator,
+		    ERightIndicator,
+		    EUpIndicator,
+		    EDownIndicator,
+		    EPauseIndicator, //for future use
+		    ENoIndicator
+		    };
+		    
+		TIndicatorType ActiveIndicator(const TPoint aPosition ) const;
+		TRect ActiveIndicatorRect( TIndicatorType aIndicator) const;
+		
+		void PanPresentation(const CSVGTCustControl::TIndicatorType aIndicatorType );
+		
+#endif  //RD_SCALABLE_UI_V2
+		
+#ifdef RD_SVGT_AUDIO_SUPPORT
+        //From MCoeControlObserver
+        virtual void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+        
+		void SetPresentationVolume( TInt aVolumeLevel );
+		TInt PresentationVolume() const;
+		
+		TInt GetPrevVolume() const;
+        void MrccatoCommand(TRemConCoreApiOperationId aOperationId, 
+                             TRemConCoreApiButtonAction aButtonAct );
+                             
+        void FilterAndSendCommand(TInt aCommandId);
+        
+#endif	//RD_SVGT_AUDIO_SUPPORT
+//TOUCH SUPPORT END
+
+        /**
+        * Two-phased constructor.
+        * @since 3.0
+        * @param aFileHandle RFile that indicates the SVGT content filehandle
+        * @param aAppObs Implementation Class provided by application that
+        *   uses this control
+        * @param aPBDrawImpl Implementation for rendering progress Indicator
+        * @param aMSKImpl Implementation for drawing MSK label 
+        * Note: The ownership of the file handle is not transferred. 
+        *       It is the responsibility of the caller to close this file 
+        *       after deleting this control.
+        * @return CSVGTCustControl*
+        */
+
+        IMPORT_C static CSVGTCustControl* NewL( RFile& aFileHandle,
+                                       MSvgtAppObserver* aAppObs, 
+                                       MSVGTProgressBarDrawImpl* aPBDrawImpl,
+                                       MSVGTMSKImpl* aMSKImpl,
+                                       MSvgtApplicationExitObserver* 
+                                            aExitObserver = NULL,
+                                       TBool aProgressiveRendering = EFalse,
+                                       const CCoeControl* aParent = NULL,
+                                       TInt aDisplayFlag = 
+                                       ESvgDisplayWaitNote|
+                                       ESvgDisplayErrorNotes|
+                                       ESvgDisplayIcons|
+                                       ESvgDrawPanIndicator|
+                                       ESvgDrawPointer|
+                                       ESvgDrawPauseIndicator|
+                                       ESvgDrawProgressBar|
+                                       ESvgUseBackLight
+                                        );
+
+        /**
+        * Two-phased constructor which pushes created object onto
+        * Cleanup Stack.
+        * @since 3.0
+        * @param aFileHandle RFile that indicates the SVGT content filehandle
+        * @param aAppObs Implementation Class provided by application that
+        *   uses this control
+        * @param aPBDrawImpl Implementation for rendering progress Indicator
+        * @param aMSKImpl Implementation for drawing MSK label 
+        * Note: The ownership of the file handle is not transferred. 
+        *       It is the responsibility of the caller to close this file 
+        *       after deleting this control.
+        * @return CSVGTCustControl*
+        */
+
+        static CSVGTCustControl* NewLC( RFile& aFileHandle,
+                                        MSvgtAppObserver* aAppObs,
+                                        MSVGTProgressBarDrawImpl* aPBDrawImpl,
+                                        MSVGTMSKImpl* aMSKImpl,
+                                        MSvgtApplicationExitObserver* 
+                                            aExitObserver = NULL,
+                                        TBool aProgressiveRendering = EFalse,
+                                        const CCoeControl* aParent = NULL,
+                                        TInt aDisplayFlag = 
+                                        ESvgDisplayWaitNote|
+                                        ESvgDisplayErrorNotes|
+                                        ESvgDisplayIcons|
+                                        ESvgDrawPanIndicator|
+                                        ESvgDrawPointer|
+                                        ESvgDrawPauseIndicator|
+                                        ESvgDrawProgressBar|
+                                        ESvgUseBackLight );
+        /**
+        * Destructor.
+        */
+
+        virtual ~CSVGTCustControl();
+
+    public: // New functions
+              	       	
+   	       	
+      	/**
+      	* Sets the MSK Labels under various circumstances. 
+      	* @since 3.2
+      	*/
+       	void SetMSKLabelL();
+      	
+      	/**
+      	* Indicates whether the context menu is opened or not
+      	* @since 3.2
+      	* @param aButtonID -EAknSoftkeyContextOptions indicates context menu icon is pressed
+      	*				   -EAknSoftkeySelect animation on mousedown/mouseup event.
+      	* @return TBool-ETrue Indicates context menu icon is pressed
+      	*				EFalse otherwise.
+      	*/
+      	TBool GetMSKLabelFlag(TInt aButtonId) const;
+      	
+      		
+      	/**
+      	* Sets either the iPlayMSKLabel and iContextMenuActivated flag.
+      	* @since 3.2
+      	* @param aButtonID -EAknSoftkeyContextOptions indicates context menu icon is pressed
+      	*				   -EAknSoftkeySelect animation on mousedown/mouseup event.
+      	*/
+      	void ChangeMSKLabelFlag(TInt aButtonId);
+        
+        /**
+        * Process commands for handling SVGT content.
+        * @since 3.0
+        * @param aCommandId Integer indicating command that was activated.
+        */
+        virtual void ProcessViewerCommandL( TInt aCommandId );
+
+        /**
+        * Get function for current zoom level.
+        * @since 3.0
+        * @param aZoomLevel Integer indicating the number of times the
+        *  user has zoomed in(Zero indicates original view or no Zoom)
+        */
+        void GetCurrentZoomLevel( TInt& aZoomLevel ) const;
+
+        /**
+        * Get function for current play status.
+        * @since 3.0
+        * @param aIsPlaying Boolean indicating whether Content is
+        *  Playing/Paused.
+        */
+        void GetCurrentAnimState( TSvgtViewerAnimStatus& aAnimState ) const;
+
+        /**
+        * Indicates whether the Control in Full Screen Mode.
+        * @since 3.0
+        * @param aIsFullScreenOn Boolean indicating whether Content is
+        *  in Full Screen Mode.
+        */
+        void GetCurrentFullScreenStatus( TBool& aIsFullScreenOn ) const;
+        
+        /**
+        * Indicates whether the Loop feature is enabled for the Control
+        * @since 3.0
+        * @param aIsLoopOn Boolean indicating whether Content is
+        *  in Loop Mode.
+        */
+        void GetCurrentLoopStatus( TBool& aIsLoopOn ) const;
+
+        /**
+        * Gets the normal screen layout rectangle for control from LAF
+        * @since 3.0
+        * @param aRect TRect indicating the rectangle extent of the control
+        */
+        void GetNormalScreenLayoutRect( TRect& aRect ) const;
+
+        /**
+        * Indicates whether the Loop feature is allowed for the Control
+        * Note: Loop Feature is allowed only for Non-Interactive content
+        * which has finite duration animations.
+        * @since 3.0
+        * @return TBool - ETrue Indicates Loop is allowed
+        *                 EFalse Otherwise.
+        */
+        TBool IsLoopAllowed() const;
+
+        /**
+        * Finds whether the content contains animations
+        * @return TBool -  ETrue indicates content contains animations,
+        *                  EFalse otherwise
+        * @since 3.0
+        */
+        TBool  IsAnimationPresent() const;
+
+        /**
+        * Finds whether the content contains any infinite duration animation
+        * @return TBool -  ETrue indicates Finite duration,
+        *                  EFalse otherwise
+        * @since 3.0
+        */
+        TBool  IsContentFinite() const;
+
+        /**
+        * Indicates whether the SVG content is loaded 
+        * @return TBool -  ETrue indicates content loading complete,
+        *                  EFalse otherwise
+        * @since 3.0
+        */        
+        TBool  IsProcessDone() const;
+        
+        /**
+        * Sets the screen mode of the Control State Variable.
+        * Note: This does not change the size of the framebuffer - 
+        * This is done in the SizeChanged().
+        * @since 3.0
+        * @param aIsFullScreenOn Boolean indicating whether Content is
+        *  in Full Screen Mode.
+        */
+        virtual void SetCurrentFullScreenStatus( TBool aIsFullScreenOn );
+
+        /**
+        * Function used by the application to handle background/foreground
+        * events. When the application goes to background the presentation
+        * needs to be paused. When application comes back to foreground,
+        * the user would need to start the paused presentation. 
+        * @param aForeground: ETrue: Foreground event, 
+        *                     EFalse: Background event.
+        * @since 3.0
+        */
+        void HandleApplicationForegroundEvent( TBool aForeground );
+        
+        /**
+        * Indicates whether the "Select Text" menu item be displayed
+        * @since 3.1
+        * @return TBool - ETrue Indicates menu item is displayed
+        *                 EFalse Otherwise.
+        */
+        TBool IsTextSelectOn() const;
+        
+        /**
+        * Indicates whether the "Edit Text" menu item be displayed
+        * @since 3.1
+        * @return TBool - ETrue Indicates menu item is displayed
+        *                 EFalse Otherwise.
+        */
+        TBool IsTextEditOn() const;
+
+        /**
+        * Indicates whether the text content has changed since
+        * last Save.
+        * @since 3.1
+        * @return TBool - ETrue Indicates text has changed
+        *                 EFalse Otherwise.
+        */
+        TBool IsTextContentChanged() const;
+
+        /**
+        * Used to notify custom control that save is complete and
+        * any cleanup operation can be performed.
+        * @since 3.1
+        */
+        void SaveComplete( const TInt aError );
+        TInt DoHandleLoadingThreadError();
+        void DoExitFromDialogL();
+        
+        void AssignImageData( const TDesC& aUri, HBufC8* aData );
+        TFileType ImageFileType( const TDesC& aUri ) const;
+        void SetThreadRunning(TBool aState);
+        TBool IsThreadRunning() const;
+        void PerformEngineRedraw();
+        
+        /**
+        * Used to reset the backlight time for finite content
+        * any cleanup operation can be performed.
+        * @since 3.1
+        */
+        void ResetBacklightTime();
+
+        void StopEventHandler();
+        
+        /**
+        * This is a utility function is used for performing functionality 
+        * once the engine load is complete
+        * @since 3.1
+        */
+        void DoPostLoadFuncL();
+        
+        /**
+        * This is a utility function for saving the SVG content to 
+        * a file
+        * @since 3.1
+        */
+        TInt SaveSvgDom( const TDesC& aFileName );
+        
+        void GetViewPort(TInt getWidth, TInt getHeight, TBool isWidthInPercentage, TBool isHeightInPercentage, TInt& setWidth, TInt& setHeight);
+        
+    public: // Functions from base classes
+        /**
+        * From MSvgRequestObserver Method called by SVG Engine
+        *  after it has rendered a frame.
+        * @since 3.0
+        */
+        void UpdateScreen();
+
+        /**
+        * From MSvgRequestObserver This method is for future extension,
+        *  in which an external script engine could be used to evaluate
+        *  a script description.
+        * @since 3.0
+        * @param aScript Descriptor containing script
+        * @param aCallerElement SVG Element that calls the script by a
+        *  an event of the "on" attribute.
+        * @return TBool.
+        */
+        TBool ScriptCall( const TDesC& aScript,
+                          CSvgElementImpl* aCallerElement );
+
+        /**
+        * From MSvgRequestObserver This method is called by the SVG engine
+        *  to retrieve the absolute path of the image file.
+        * @since 3.0
+        * @param aUri Descriptor containing the relative path of the image.
+        * @param aFilePath Descriptor which contains absolute path that is
+        *  to be used by the Engine to retrieve the image.
+        * @return TBool -
+        *  ETrue indicates absolute path is present in aFilePath.
+        *  EFalse otherwise.
+        */        
+        TInt FetchImage( const TDesC& aUri, 
+                          RFs& aSession, RFile& aFileHandle ) ;
+
+        TInt FetchFont( const TDesC& /* aUri */, 
+                                    RFs& /* aSession */, RFile& /* aFileHandle */ );
+
+        /**
+        * From MSvgRequestObserver This method is called by the SVG engine
+        *  to get the SMIL Fit attribute value.
+        * @since 3.0
+        * @param aSmilValue Descriptor containing the SMIL Fit attribute.
+        */
+        void GetSmilFitValue( TDes& aSmilValue );
+
+        /**
+        * From MSvgRequestObserver This method is called by the SVG engine
+        *  to update the presentation status.
+        * @since 3.0
+        * @param aNoOfAnimation Integer. When called for the first time
+        *  it indicates total number of animations.
+        *  Subsequently it contains number of animations that were completed.
+        */
+        void UpdatePresentation( const TInt32&  aNoOfAnimation );
+
+        /**
+        * From CCoeControl Key Handling Method for control.
+        * @since 3.0
+        * @param aKeyEvent Key Event.
+        * @param aType Type of Key Event.
+        * @return TKeyResponse - EKeyWasConsumed/EKeyWasNotConsumed.
+        */
+        TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+                                     TEventCode aType );
+        /**
+        * From CCoeControl 
+        * @see CCoeControl::HandleResourceChange
+        */
+        void HandleResourceChange( TInt aType );
+        
+                                             
+    public: //From MSvgHyperlinkListener
+
+        /**
+        * From MSvgHyperlinkListener
+        * @see MSvgHyperlinkListener::LinkEntered
+        */ 
+        virtual TBool LinkEntered( const TDesC& aUri );
+
+        /**
+        * From MSvgHyperlinkListener
+        * @see MSvgHyperlinkListener::LinkExited
+        */ 
+        virtual TBool LinkExited( const TDesC& aUri ) ;
+        
+ 
+
+        /**
+        * From MSvgHyperlinkListener
+        * @see MSvgHyperlinkListener::LinkActivated
+        */ 
+        virtual TBool LinkActivated( const TDesC& aUri ) ;
+
+        /**
+        * From MSvgHyperlinkListener
+        * @see MSvgHyperlinkListener::LinkActivatedWithShow
+        */ 
+        virtual TBool LinkActivatedWithShow( const TDesC& aUri, 
+                                             const TDesC& aShow ) ;
+                                            
+
+    public: 
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::ReportAllElements
+        */ 
+        virtual TBool ReportAllElements() ;
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::WillAssignImageData
+        */ 
+        virtual TBool WillAssignImageData() ;
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::ImageDataReference
+        */ 
+        virtual void ImageDataReference( const TDesC& aUri );
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::DocumentStart
+        */ 
+        virtual TBool DocumentStart() ;
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::DocumentEnd
+        */ 
+        virtual TBool DocumentEnd() ;
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::ElementStart
+        */ 
+        virtual TBool ElementStart( const TDesC& aTagName , 
+                        MSvgAttributeList& aAttributeList );
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::ElementEnd
+        */ 
+        virtual TBool ElementEnd( const TDesC& aTagName ) ;
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::ExternalDataRequested
+        */ 
+        virtual TBool ExternalDataRequested( const TDesC& aUri ) ;
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::ExternalDataReceived
+        */ 
+        virtual TBool ExternalDataReceived( const TDesC& aUri ) ;
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::ExternalDataRequestFailed
+        */ 
+        virtual TBool ExternalDataRequestFailed( const TDesC& aUri ) ;
+
+        /**
+        * From MSvgLoadingListener
+        * @see MSvgLoadingListener::UnsupportedElement
+        */ 
+        virtual TBool UnsupportedElement( const TDesC& aTagName , 
+                        MSvgAttributeList& aAttributeList );
+                        
+        virtual void ImagesLoaded(TInt aError);
+		
+		public: // From MSvgAudioMuteListener
+				/**
+        * This function is called to add a observer that will want a 
+        * callback from custcontrol
+        * @param 	aListener object which needs the callback
+        * 				aType represents the type of listener
+        * @since 5.0
+        */
+        IMPORT_C void AddListener(MSvgCustControlListener *aListener, TCustControlListener aType);
+		
+    protected:  // New functions - Startup Helper Functions
+        /**
+        * This function is called to create the bitmaps used by the SVG
+        * engine for rendering.
+        * @param aBitmapSize Size of Bitmap used for Framebuffer
+        * @since 3.0
+        */
+        void CreateBitmapsL( const TSize& aBitmapSize );
+        
+        /**
+        * This function is called to create the icons used by the control
+        * for panning/pointer display etc.
+        * @since 3.0
+        */        
+        void CreateIconsL();
+        /**
+        * This function is called to initialize the SVGT-Engine interface.
+        * @since 3.0
+        */
+        void InitializeEngineL();
+
+        /**
+        * This function uses the SVG Engine to load the SVGT content.
+        * @since 3.0
+        * @param aFileHandle file handle to the SVGT content
+        *  SVGT content.
+        */
+        void LoadContentL( RFile& aFileHandle );
+
+        /**
+        * This function is used for the loading of SVG content in case
+        * of progressive rendering
+        * @since 3.1
+        * @param TAny* Pointer to the custom control 
+        */
+        static TInt LoadSvgContent( TAny* aAny );
+        
+        /**
+        * This function is used for initialising the SVG engine in case
+        * of progressive rendering
+        * @since 3.1
+        */
+        void InitSvgContentL();
+        
+        /**
+        * This is a utility function is used for displaying the 
+        * information notes 
+        * @since 3.1
+        */
+        void DisplayInfoNoteL( TInt aResourceId, TBool aIsWaitingDialog );
+        
+    protected:  // New functions - Pointer Helper Functions
+        /**
+        * Draws the Pointer on the screen.
+        * @since 3.0
+        */
+        void DrawPointer() const;
+
+        /**
+        * This function is called when pointer needs to be redrawn.
+        * @since 3.0
+        */
+        void UpdatePointer();
+
+    protected:  // New functions - Full/Normal Screen Helper Functions
+        /**
+        * This function is called to change the framebuffer to new size 
+        * in the SizeChanged function
+        * @since 3.0
+        */
+        void SwitchScreenModeL();
+
+    protected:  // New functions - Find Text Helper Functions
+
+        /**
+        * This function is called to calculate the find text bounding boxes.
+        * @since 3.0
+        * @return Bool Indicating Text was found or not
+        */
+        TBool CalcFindTextBBox();
+
+        /**
+        * This function is called to pan the content in order that the
+        * current bounding box is visible. The reference point is taken as the
+        * center of the screen.
+        * @since 3.0
+        */
+        void PanToCurBBox();
+
+        /**
+        * This function is called to perform the necessary procesing for
+        * Find Text.
+        * @since 3.0
+        */
+        void ProcessFindTextCmdL();
+
+        /**
+        * Draws the Bounding box for the current match on the screen.
+        * @since 3.0
+        *
+        */
+        void DrawFindTextBBox( const TRect& aRect ) const;
+        
+        /**
+        * This function is called to perform the necessary procesing when
+        * text being searched using Find Text command is not found.
+        * @since 3.0
+        */
+        void ProcessNoTextFoundL();
+
+
+    protected:  // New functions - Panning Indicator Helper Functions
+        /**
+        * Draws the Pan Indicators on the screen.
+        * @since 3.0
+        */
+        void DrawPanInd() const;
+
+    protected:  // New functions - Related to Progress Bar/Loop
+        /**
+        * Counts the number of animations started in the SVGT content.
+        * @since 3.0
+        */
+        void CountAnimStarted();
+
+        /**
+        * Counts the number of animations paused in the SVGT content.
+        * @since 3.0
+        */
+        void CountAnimPaused();
+        
+        /**
+        * Counts the number of animations stopped in the SVGT content.
+        * @since 3.0
+        */
+        void CountAnimStopped();
+
+        
+        /**
+        * Function indicates whether the animation currently in 
+        * progress is first one.
+        * @return TBool - ETrue - First one
+        *                 EFalse Otherwise.
+        * @since 3.0
+        */
+        TBool IsAnimFirst() const;
+        
+        /**
+        * Function indicates whether the animation currently in 
+        * progress is first one.
+        * @return TBool - ETrue - First one
+        *                 EFalse Otherwise.
+        * @since 3.0
+        */
+        TBool IsAnimLast() const;
+
+    protected:  // New functions for Pointer handling
+        /**
+        * Function sets the Pointer display status and redraws the whole
+        * control inorder to update display status
+        * @since 3.0
+        */
+        void SetPointerDisplayStatusAndRedraw( TBool aIsPointerDisplayed );
+    protected:  // New functions for pause icon blink support
+        /**
+        * Function sets the Pause display status and starts the periodic
+        * timer to draw the Pause Indicator
+        * @param TBool ETrue Indicates that Pause should be displayed
+        * @since 3.0
+        */
+        void ShowPauseIcon( TBool aPauseIconVisible );
+        
+        /**
+        * Callback Function for periodic timer for blinking the pause indicator 
+        * @see TCallBack 
+        * @since 3.0
+        */
+        static TInt BlinkPauseIcon( TAny* aPtr );
+
+        /**
+        * Function which does the actual work of toggling pause indicator
+        * @since 3.0
+        */
+        void DoBlinkPauseIcon();
+    protected:  // New functions for cleanup 
+        /**
+        * Function which frees the icons created by CreateIconsL().
+        * @since 3.0
+        */
+        void FreeIcons();
+
+    protected:  // New functions for wait-note processing
+        /**
+        * Launch wait note.
+        * @since 3.0
+        * @param aResourceId Resource id for note text.
+        */
+        void LaunchWaitNoteL( TInt aResourceId );
+
+        /**
+        * Dismiss wait dialog.
+        * @since 3.0
+        */
+        void DismissWaitNote();
+    protected:  // New functions for progress bar timer handling
+
+        /**
+        * Start progress indicator timer.
+        * @since 3.0
+        * @param aAfter Time period in microseconds after which the timer ticks.
+        */
+        void StartProgIndTimer( TInt aAfter );
+
+        /**
+        * Stop the progress indicator timer.
+        * @since 3.0
+        */
+        void StopProgIndTimer();
+
+    protected:   // New functions for handling animation controls 
+                 // play/pause/stop
+        /**
+        * This function is called to perform the necessary procesing for
+        * the Play Command.
+        * @since 3.0
+        */
+        void ProcessPlayCmd();
+        
+        /**
+        * This function is called to perform the necessary procesing for
+        * the Pause Command.
+        * @since 3.0
+        */
+        void ProcessPauseCmd();
+        
+        /**
+        * This function is called to perform the necessary procesing for
+        * the Stop Command.
+        * @since 3.0
+        */
+        void ProcessStopCmd();
+   
+   private: // Functions for voice call check        
+        /**
+        * This function checks whether a voice call is in progress        
+        * and in connected state. 
+        * @return TBool - ETrue - If voice call is in connected state
+        *                 EFalse Otherwise.
+        * @since 3.0
+        */
+        TBool IsVoiceCallActive();        
+
+   private: // New Function for Note remover timer
+        /**
+        * Callback Function for timer for removing the note that is not 
+        * removed in the UI.
+        * @see TCallBack 
+        * @since 3.0
+        */
+        static TInt RemoveInfoNote( TAny* aPtr );
+
+   private: // New Functions for rotation
+        /**
+        * This function rotates the presentation with given angle 
+        * about bitmap center. 
+        * @param aAngle in Degrees
+        */
+        void DoRotation(const TInt aAngle);
+    
+   private: // New Functions for Text Editing/Selection
+#ifdef SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE   
+        /**
+        * This function displays the existing text in the text/textArea 
+        * in a read-only dialog so that the user can copy text from it to
+        * the system clipboard.
+        * @param aText Text content Descriptor
+        */
+        void DoTextSelectionL( TDes& aText ) const;
+
+        /**
+        * This function displays the existing text in the text/textArea
+        * element which is editable and returns the modified text in the
+        * same descriptor.
+        * @param aIsTextElement Bool indicating whether elem is text/textArea
+        * @param aElemHandle TInt Handle for the elem from engine
+        * @param aText Text content Descriptor modified on return
+        */
+        void DoTextEditingL( TBool aIsTextElement, TInt aElemHandle, 
+            TDes& aText );
+#endif // SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE
+    private: // New functions for Four Point Rects
+        /**
+        * This function calculates the center of the 4-point rect
+        * @param aBBoxRect the Four point Rect whose center is to be found
+        * @return TPoint - Center coordinates
+        */
+        TPoint FPRCenter( const MRect* aBBoxRect ) const;
+        
+        /**
+        * This function checks whether the FPR intersects with the rectangle
+        * @param aBBoxRect the Four point Rect 
+        * @param aRect Rectangle with which intersection is to be found
+        * @return TBool - Whether Intersects(ETrue) or not.
+        */
+        TBool FPRIntersects( const MRect* aBBoxRect, const TRect& aRect ) const;
+
+        /**
+        * This function converts a four point rectangle to an array of points
+        * @param aBBoxRect the Four point Rect 
+        * @param aArrayPtr Array of TPoints
+        */
+        void FPR2PointArrayL( const MRect* aBBoxRect, 
+            CArrayFix<TPoint>*& aArrayPtr ) const;
+        
+    protected:  // Functions from base classes
+        /**
+        * From CCoeControl Draws the SVGT frame on the screen.
+        * @since 3.0
+        * @param aRect Rectangle which needs to be redrawn.
+        */
+        virtual void Draw( const TRect& aRect ) const;
+
+        /**
+        * From CCoeControl Constructs the control from resource.
+        * @since 3.0
+        * @param aReader Resource Reader with which to access the
+        *  control's resource.
+        */
+        virtual void ConstructFromResourceL( TResourceReader& aReader );
+
+        /**
+        * From CCoeControl Handles control resizing.
+        * @since 3.0
+        */
+        virtual void SizeChanged();
+        
+        /**
+        * From MSvgAnimationListener Callback called by SVG 
+        * engine when animation starts
+        * @since 3.0
+        */
+        TBool AnimationStarted( TBool aIsAnimationIndefinite );
+        
+        /**
+        * From MSvgAnimationListener Callback called by SVG 
+        * engine when animation ends.
+        * @since 3.0
+        */
+        TBool AnimationEnded();
+        
+        /**
+        * From MSvgAnimationListener Callback called by SVG 
+        * engine when animation is paused.
+        * @since 3.0
+        */
+        TBool AnimationPaused();
+
+        /**
+        * From MSVGTProgressBarListener. This function 
+        * updates the progress bar in the navi pane. It is called 
+        * back by the progress bar timer.
+        * @since 3.0
+        */
+        void UpdateProgressBar();
+
+        /**
+        * From MSVGTPointerInactivityListener. This function 
+        * updates the display status for the pointer. It is called 
+        * back by the Pointer Hide Timer after a period of 
+        * inactivity.
+        * @since 3.0
+        */
+        void PointerInactivityTimeout();
+#ifdef SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE
+        /**
+        * From MSvgTextAreaListener. This callback is called to notify
+        * when a pointer enters a textbox element.
+        * @since 3.1
+        * @see MSvgTextAreaListener
+        */
+        virtual TBool TextAreaEntered( TInt aTextAreaHandle );
+
+        /**
+        * From MSvgTextAreaListener. This callback is called to notify 
+        * when a pointer exits a textbox element.
+        *
+        * @since 3.1
+        * @see MSvgTextAreaListener
+        */
+        virtual TBool TextAreaExited( TInt aTextAreaHandle );
+
+        /**
+        * From MSvgTextAreaListener. This callback is called to notify 
+        * the client that a link has been activated.
+        *
+        * @since 3.1
+        * @see MSvgTextAreaListener
+        */
+        virtual TBool TextAreaActivated( TInt aTextAreaHandle );
+        
+        /**
+        * From MSvgTextListener - Notified when a pointer enters a 
+        * text element.
+        *
+        * @since 3.1 
+        * @see MSvgTextListener
+        */
+        virtual TBool TextEntered( TInt aTextHandle );
+
+        /**
+        * From MSvgTextListener - Notified when a pointer exits a 
+        * text element.
+        *
+        * @since 3.1 
+        * @see MSvgTextListener
+        */
+        virtual TBool TextExited( TInt aTextHandle );
+
+        /**
+        * From MSvgTextListener - Notified when a pointer selects a 
+        * text element.
+        *
+        * @since 3.1 
+        * @see MSvgTextListener
+        */
+        virtual TBool TextActivated( TInt aTextHandle );
+#endif // SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE
+
+        /**
+        * From MSvgInteractiveElementListener. This callback is called to notify 
+        * the client that an interactive element has been entered.
+        *
+        * @since 3.2
+        * @see MSvgInteractiveElementListener
+        */
+        virtual TBool InteractiveElementEntered(TPtrC aElementIdPtr, TUint16 aInteractonTypeList );
+        
+        /**
+        * From MSvgInteractiveElementListener - Notified when a pointer exits an 
+        * interactive element.
+        *
+        * @since 3.2 
+        * @see MSvgInteractiveElementListener
+        */
+        virtual TBool InteractiveElementExited(TPtrC aElementIdPtr);
+        
+    private:
+
+        /**
+        * C++ default constructor.
+        * @param RFile File Handle - File handle of SVGT content
+        */
+        CSVGTCustControl( RFile& aFileHandle , 
+                          TBool aProgressiveRendering, 
+                          TInt aDisplayFlag = 
+                             ESvgDisplayWaitNote|
+                             ESvgDisplayErrorNotes|
+                             ESvgDisplayIcons|
+                             ESvgDrawPanIndicator|
+                             ESvgDrawPointer|
+                             ESvgDrawPauseIndicator|
+                             ESvgDrawProgressBar|
+                             ESvgUseBackLight );
+
+        /**
+        * Second Phase constructor.
+        * @param aAppObs Implementation Class provided by application that
+        *   uses this control
+        * @param aPBDrawImpl Implementation for rendering progress Indicator
+        * @param aMSKImpl Implementation for drawing MSK label 
+        */
+        void ConstructL( MSvgtAppObserver* aAppObs,
+                         MSVGTProgressBarDrawImpl* aPBDrawImpl,
+                         MSVGTMSKImpl* aMSKImpl,
+                         MSvgtApplicationExitObserver* aExitObserver,
+                         const CCoeControl* aParent );
+    private:    // Data
+        // Stores the Application's implementation of the Callbacks.
+        MSvgtAppObserver* iAppObserver;
+        // Stores the Application's Exit callback implementation pointer
+        MSvgtApplicationExitObserver* iExitObserver;
+        // Bitmap used by SVG Engine to render content.
+        CFbsBitmap*  iSVGTBitMap;
+        
+        // Mask for the bitmap.
+        CFbsBitmap*  iSVGTBitMapMask;
+
+        // Icons
+        // Pointer Icons - owned 
+        CGulIcon* iPointerIcon; 
+        CGulIcon* iHandIcon;
+        CGulIcon* iTextIcon;
+                
+        // Panning Indicator Icons - owned 
+        CGulIcon* iPanIndLeftIcon;
+        CGulIcon* iPanIndRightIcon;
+        CGulIcon* iPanIndUpIcon;
+        CGulIcon* iPanIndDownIcon;
+        
+        // Pause Indicator Icons - owned
+        CGulIcon* iPauseIcon;
+        
+        // SVG Engine Interface Implementation pointer
+        CSvgEngineInterfaceImpl*     iSvgModule;
+
+        // Stores the total number of animation in content.
+        TInt32 iTotalNumerOfAnimation;
+
+        // Stores the current animation status.
+        TSvgtAnimStatus iAnimationStatus;
+        
+        // Stores the viewer animation state.
+        TSvgtViewerAnimStatus iAnimState;
+
+        // SVGT content filehandle
+        RFile& iContentFileHandle;
+
+        // Boolean to keep track of whether the loading of content is done.
+        TBool iIsLoadingDone;
+        
+        // Integer variable which stores the FetchImage error
+        TInt iFetchImageError;
+
+        // Zoom Level is the number of times content has been zoomed-in.
+        TInt iZoomLevel;
+
+        // Boolean indicating whether Loop Mode is enabled.
+        TBool iIsLoopOn;
+
+        // Boolean indicating whether Full Screen mode is enabled.
+        TBool iIsFullScreenOn;
+
+        // Pointer State Variable - Delta Change in X in pixels.
+        TInt iPointerDx;
+
+        // Pointer State Variable - Delta Change in Y in pixels.
+        TInt iPointerDy;
+
+        // Pointer State Variable - Current X pixel coordinate.
+        TInt iPointerX;
+
+        // Pointer State Variable - Current Y pixel coordinate.
+        TInt iPointerY;
+
+        // Last Searched Text for use with Find Text
+        TBuf<KFindTextQueryMaxLen> iLastSearchText;
+
+        // Array to store the Bounding boxes for found text
+        RPointerArray <MRect> iBoundBoxArray;
+
+        // Array to store the text found
+        RArray <TPtrC> iFoundTextArray;
+
+        // Array to store the text element ids found - for use in animation case.
+        RArray <TInt> iTextElemIdArray;
+
+        // Bool that keeps track whether current search string(iLastSearchText)
+        // is valid
+        TBool iIsSearchStrValid;
+
+        // Current Match Index
+        TInt iCurSearchMatchId;
+        
+        //Flag to check whether the svg file has only Preview rights
+        TBool iPreviewMode;
+
+        // Number of animations in progress (whose repeatCount != Infinite)
+        TInt iNumAnimInProgress;
+        
+        // Progress Indicator Timer
+        CSVGTProgressBarTimer* iProgressBarTimer;
+        
+        // Duration of SVG Content
+        TUint iDuration;
+        
+        // Interface for Progress Bar Draw Implementation
+        MSVGTProgressBarDrawImpl* iProgressBarDrawImpl;
+        
+         //Interface for MSK label implementation
+         MSVGTMSKImpl* iMSKImpl;
+        
+        // Pointer Hide Timer
+        CSVGTPointerHideTimer* iInactivityTimer;
+        
+        // Bool that keeps track whether pointer should be drawn or not.
+        TBool iIsPointerDisplayed;
+        
+        // Timer for blinking pause icon
+        CPeriodic* iBlinker;
+
+        // Bool that keeps track whether paused icon is drawn or not.
+        TBool iPauseIconVisible;
+       
+             
+        // Number of continous key presses since last key down
+        TInt iKeyRepeatCount;
+        // Main Viewer Pane Layout
+        TAknLayoutRect iViewerPaneRect;
+        // Layout Rectangles for Pan Indicators
+        TAknLayoutRect iPanIndLeftRect;
+        TAknLayoutRect iPanIndRightRect;
+        TAknLayoutRect iPanIndUpRect;
+        TAknLayoutRect iPanIndDownRect;
+        TAknLayoutRect iPauseRect;
+        
+        // Layout Touch Area Rectangles of Pan Indicators
+        TAknLayoutRect iPanIndLeftAidRect;
+        TAknLayoutRect iPanIndRightAidRect;
+        TAknLayoutRect iPanIndUpAidRect;
+        TAknLayoutRect iPanIndDownAidRect;
+        
+        // Layout Rectangle for Pointer
+        TAknLayoutRect iPointerRect;
+        TAknLayoutRect iHandRect;
+        TAknLayoutRect iTextRect;
+        
+        // Layout Rectangle for aid of placement of pointer
+        TAknLayoutRect iPointerAidRect;
+        TAknLayoutRect iHandAidRect;
+        TAknLayoutRect iTextAidRect;
+        
+        // Framebuffer Bitmap
+        CFbsBitmap*  iSVGTFrameBufBitMap;
+                
+        // Bitmap Device
+        CFbsBitmapDevice* iSVGTFrameBufDevice;
+        
+        // Bitmap Context
+        CFbsBitGc* iSVGTFrameBufContext; 
+
+        // Current Layout - To check whether layout changed in SizeChanged()
+        TRect iCurrentLayout;
+        
+        // Find Text Highlight Colour
+        TRgb iFindTextHiColor;        
+        
+        // Number of microseconds elapsed since content started.
+        TUint iProgIndTimeElap;
+        
+        // Number of milliseconds elapsed since last progress indicator update
+        TUint iProgIndResidueTime;
+        
+        // Last update of progress indicator tick in millisec
+        TUint iProgIndLastTickTime;
+        // Wait note dialog pointer
+        CAknWaitDialog* iWaitDialog;
+        
+        // DrmHelper to display save related query
+        CSVGTDrmHelper*   iSvgDrmHelper;
+        
+        // To get the type and the state of the phone call
+        RProperty iSystemState;
+        
+        // Used to keep track of whether key events are ignored 
+        // when pointer is unhidden
+        TBool iIgnorePointerKeyEvent;        
+        
+        // Information Note for displaying the "text not found" note
+        CAknInformationNote* iInfoNote;
+        
+        // Timer for removing the "text not found" wait note
+        CPeriodic* iNoteRemoverTimer; 
+        
+        // Indicates what type of pointer is to be drawn
+        TSvgtViewerPointerTypes iPointerType;
+        
+        // Enable/Disable Control for text operations(Editing/selection)
+        TBool iEnableTextOps;
+        
+        // Boolean indicating whether text edit menu is to be displayed
+        TBool iIsTextEditOn;
+        
+        // Boolean indicating whether text select menu is to be displayed
+        TBool iIsTextSelectOn;
+        
+        // Text (text/textArea) element currently under the cursor
+        TInt iCurrentTextElementId;
+        
+        // Boolean indicating whether current element is text(ETrue) or
+        // a textArea (EFalse) element
+        TBool iIsCurrentTextElement;
+
+        TBool iProgressiveRendering;
+        TInt iDisplayFlags;
+        
+        CSvgtEventHandlerAO* iEventHandlerAO;
+        CSvgtThreadController* iThreadController;
+        RThread iMainThread;
+        MSvgError* iLoadingThreadError;
+        TFileType iImageFileType;
+        TTime iPreviousBackLightTimeStamp;
+        TBool iIsThreadRunning;
+        TBool iIsWaitNoteDisplayed;
+//TOUCH SUPPORT START    
+#ifdef RD_SVGT_AUDIO_SUPPORT
+       CAknVolumePopup* iVolumePopup;
+       TInt iPrevVolume;
+       TInt iVolumeLevel;
+
+    CRemConCoreApiTarget* iInterfaceSelector;
+    CRemConInterfaceSelector* iSelector;
+#endif //RD_SVGT_AUDIO_SUPPORT
+//TOUCH SUPPORT END
+        // The cause for select operation - Hyperlink/text/textArea activate
+        TSvgCustomControlSelectCause iSelectCause;        
+        // Boolean indicating whether the cursor is inside a textArea element
+        TBool iTextAreaEntered;
+        
+        // Boolean indicating whether text is modified in content
+        // since last save
+        TBool iIsTextChanged;
+        // Booleans that are updated every time a frame is rendered
+        // in order to avoid overhead of calling IsPanPossibleFourWay
+        // API all the time.
+        // Pan Left Possible
+        TBool iPanLt;
+        // Pan Right Possible
+        TBool iPanRt;
+        // Pan Up Possible
+        TBool iPanUp;
+        // Pan Down Possible
+        TBool iPanDn;
+        
+        //Bool that checks whether the select key is pressed for options or a normal seletion
+        TBool iViewerCommand;
+        
+        //Flag to check whether play msk is visible
+		TBool  iPlayMSKLabel;
+					
+		//Flag that indicates MSK is not visible	
+		TBool iContextMenuActivated;
+        
+ 		// Flag to indicate whether the element is "a" element or not
+ 		TBool iAElement;
+ 		
+ 		//Flag to check whether scrolling is done when the pointer is hidden
+ 		TBool iScrollKey;
+ 		
+ 		
+ 		//Flag to indicate that pointer-down animation is possible with the element 
+ 		TBool iPointerDownAnimation; 
+ 		
+ 		// Count maintained to get a list of interactive elements entered
+ 		TInt iInteractiveElementEnteredCnt;
+#ifdef _DEBUG
+        TInt iDbgNumAnimStarted;
+        TInt iDbgNumAnimStopped;
+        TInt iDbgNumAnimPaused;
+#endif        
+        
+       TBool iEngineInitialized;
+       
+       TBool iDownKeyOccurred;
+       
+       //indicates if volume is currently muted or not
+       TBool iIsVolumeMuted;
+       TBool iIsForeground;
+			
+			 //AudioListener to indicate to UIdialog that volume is muted
+       MSvgAudioMuteListener* iAudioMuteListener;
+    };
+
+#endif  // __SVGTCUSTCONTROL_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTCustControl.rh	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2004,2005 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:  Resource Header for SVGT Custom Control Structure
+*
+*/
+
+
+#ifndef SVGTCUSTCONTROL_RH
+#define SVGTCUSTCONTROL_RH
+//  INCLUDES
+
+//  MACROS
+
+//  STRUCTURE DEFINITIONS
+
+// -----------------------------------------------------------------------------
+// SVGT_CUST_CONTROL
+// Defines the resource structure for SVGT Custom Control.
+// -----------------------------------------------------------------------------
+//
+
+STRUCT SVGT_CUST_CONTROL
+	{
+	}
+#endif // SVGTCUSTCONTROL_RH
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTPointerHideTimer.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2004, 2005 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:  This header defines the CSVGTPointerHideTimer Class
+*
+*/
+
+#ifndef SVGTPOINTERHIDETIMER_H
+#define SVGTPOINTERHIDETIMER_H
+
+// Includes 
+#if !defined(__E32BASE_H__)
+#include <e32base.h>
+#endif
+
+/**
+*  Interface for the pointer inactivity event listener.
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+
+class MSVGTPointerInactivityListener 
+    {
+    public:
+    
+        /**
+        * This function is called when the pointer inactivity occurs.
+        * @since 3.0
+        */
+        virtual void PointerInactivityTimeout( ) = 0;
+    };
+
+/**
+*  Provides the timer functionality for hiding the pointer after period of
+*  inactivity
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+
+class CSVGTPointerHideTimer : public CTimer
+    {
+    public: // Constructors and Destructor
+        /**
+        * Two-phased constructor.
+        */
+        static CSVGTPointerHideTimer* NewLC( MSVGTPointerInactivityListener* 
+                aListener );
+
+        /**
+        * Two-phased constructor.
+        */
+        static CSVGTPointerHideTimer* NewL( MSVGTPointerInactivityListener* 
+                aListener );
+
+        // Destructor
+        virtual ~CSVGTPointerHideTimer();
+
+    public: // New functions
+
+    public: // Functions from base classes
+
+        /**
+        * From CActive Implements cancellation of an outstanding request.
+        * @since 3.0
+        */
+        void DoCancel();
+
+        /**
+        * From CActive Handles the timer's request completion event.
+        * @since 3.0
+        */
+        void RunL();
+
+    protected: // New functions
+    protected: // Functions from base classes
+
+    private:
+        /**
+        * C++ default constructor.
+        */
+        CSVGTPointerHideTimer( MSVGTPointerInactivityListener* 
+                aListener );
+        
+        /**
+        * Second Phase constructor.
+        */
+        void ConstructL();
+
+    private:    // Data
+        MSVGTPointerInactivityListener *iInactivityListener;
+    };
+#endif // __SVGTBACKLIGHTTIMER_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTProgressBarTimer.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2004,2005 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:  This header defines the CSVGTProgressBarTimer Class
+*
+*/
+
+#ifndef __SVGTPROGRESSBARTIMER_H__
+#define __SVGTPROGRESSBARTIMER_H__
+
+// Includes 
+#if !defined(__E32BASE_H__)
+#include <e32base.h>
+#endif
+
+
+/**
+*  Interface for the progress timer event listener.
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+
+class MSVGTProgressBarListener 
+    {
+    public:
+    
+        /**
+        * This function is called when the progress timer event occurs. The
+        * user of this interface will be notified after the amount of time elapsed
+        * configured in KSccProgressBarTimerYieldDur.
+        * @since 3.0
+        */
+        virtual void UpdateProgressBar( ) = 0;
+    };
+
+/**
+*  Provides the timer functionality for progress time display for the 
+*  dialog.
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+
+class CSVGTProgressBarTimer : public CTimer
+    {
+    public: // Constructors and Destructor
+        /**
+        * Two-phased constructor.
+        */
+        static CSVGTProgressBarTimer* NewLC( MSVGTProgressBarListener* 
+            aListener ,
+            TBool aResetInactivityTime  );
+
+        /**
+        * Two-phased constructor.
+        */
+        static CSVGTProgressBarTimer* NewL( MSVGTProgressBarListener* 
+            aListener,
+            TBool aResetInactivityTime );
+
+        // Destructor
+        virtual ~CSVGTProgressBarTimer();
+
+    public: // New functions
+    public: // Functions from base classes
+
+        /**
+        * From CActive Implements cancellation of an outstanding request.
+        * @since 3.0
+        */
+        void DoCancel();
+
+        /**
+        * From CActive Handles the timer's request completion event.
+        * @since 3.0
+        */
+        void RunL();
+
+    protected: // New functions
+    protected: // Functions from base classes
+
+    private:
+        /**
+        * C++ default constructor.
+        */
+        CSVGTProgressBarTimer( MSVGTProgressBarListener* 
+            aListener , TBool aResetInactivityTime  );
+        
+        /**
+        * Second Phase constructor.
+        */
+        void ConstructL();
+
+    private:    // Data
+        
+        // Listener for progress bar timer event
+        MSVGTProgressBarListener* iListener;
+        
+        // Reset Inactivity time
+        TBool iUseInactivityTime;
+    };
+#endif // __SVGTPROGRESSBARTIMER_H__
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTThumbnailUtil.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,214 @@
+/*
+* Copyright (c) 2004,2005 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:  SVGT Thumbnail Utility Class implements the thumbnail
+*                used to display SVGT content.
+*
+*/
+
+
+
+#ifndef __SVGTTHUMBNAILUTIL_H__
+#define __SVGTTHUMBNAILUTIL_H__
+
+// INCLUDES
+
+#include <SvgRequestObserver.h>
+
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class   CSvgEngineInterfaceImpl;
+class   CFbsBitmap;
+// CLASS DECLARATION
+
+/**
+*  CSVGTThumbnailUtil is a utility class used to generate thumbnails.
+*  It is used through dialog provided by CSVGTUIDialog.
+*
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+
+class CSVGTThumbnailUtil : public CBase,
+                           public MSvgRequestObserver
+    {
+    public: // Constructors and destructor
+        /**
+        * Generate thumbnails for SVGT content.
+        * @since 3.0
+        * @param aFileHandle File Handle to the SVGT file.
+        * @param aThumbnailBitmap Bitmap - Client provided bitmap to render 
+        *   the SVGT contents opening screen.
+        * @param aThumbnailBitmap Bitmap - Client provided bitmap mask.
+        * @return Boolean ETrue indicates thumbnail generated successfully,
+        *                 EFalse otherwise.
+        */
+        IMPORT_C static TBool GenerateThumbnailLD( RFile& aFileHandle,
+                                           CFbsBitmap& aThumbnailBitmap,
+                                           CFbsBitmap& aThumbnailBitmapMask );
+
+    public: // New functions
+
+    public: // Functions from base classes
+
+  
+        /**
+        * This function is called to initialize the SVGT-Engine interface.
+        * @since 3.0
+        */
+        void InitializeEngineL();
+
+        /**
+        * Generates Thumbnail of initial screen of SVG content.
+        * @since 3.0     
+        * @return Boolean ETrue indicates thumbnail generated successfully,
+        *                 EFalse otherwise.
+        */
+
+        TBool GenerateThumbnail();
+        
+     
+    protected:  // Functions from base classes
+        
+        /**
+        * From MSvgRequestObserver Method called by SVG Engine
+        *  after it has rendered a frame.
+        * @since 3.0
+        */
+        void UpdateScreen();
+
+        /**
+        * From MSvgRequestObserver This method is for future extension,
+        *  in which an external script engine could be used to evaluate
+        *  a script description.
+        * @since 3.0
+        * @param aScript Descriptor containing script
+        * @param aCallerElement SVG Element that calls the script by a
+        *  an event of the "on" attribute.
+        * @return TBool.
+        */
+        TBool ScriptCall( const TDesC& aScript,
+                          CSvgElementImpl* aCallerElement );
+
+        /**
+        * From MSvgRequestObserver This method is called by the SVG engine
+        *  to retrieve the absolute path of the image file.
+        * @since 3.0
+        * @param aUri Descriptor containing the relative path of the image.
+        * @param aFilePath Descriptor which contains absolute path that is
+        *  to be used by the Engine to retrieve the image.
+        * @return TBool -
+        *  ETrue indicates absolute path is present in aFilePath.
+        *  EFalse otherwise.
+        */  
+        TInt FetchImage( const TDesC& aUri, 
+                          RFs& aSession, RFile& aFileHandle ) ;
+
+        TInt FetchFont( const TDesC& /* aUri */, 
+                                    RFs& /* aSession */, RFile& /* aFileHandle */ );
+
+        /**
+        * From MSvgRequestObserver This method is called by the SVG engine
+        *  to get the SMIL Fit attribute value.
+        * @since 3.0
+        * @param aSmilValue Descriptor containing the SMIL Fit attribute.
+        */
+        void GetSmilFitValue( TDes& aSmilValue );
+
+        /**
+        * From MSvgRequestObserver This method is called by the SVG engine
+        *  to update the presentation status.
+        * @since 3.0
+        * @param aNoOfAnimation Integer. When called for the first time
+        *  it indicates total number of animations.
+        *  Subsequently it contains number of animations that were completed.
+        */
+        void UpdatePresentation( const TInt32&  aNoOfAnimation );        
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CSVGTThumbnailUtil( RFile& aFileHandle );
+
+        /**
+        * Second Phase constructor.
+        * @param aThumbnailBitmap Client provided bitmap to render the SVGT
+        *   contents opening screen.
+        * @param aThumbnailBitmapMask Bitmap - Client provided bitmap for SVGT
+        *   bitmap mask.
+        */
+        void ConstructL( CFbsBitmap& aThumbnailBitmap,
+                         CFbsBitmap& aThumbnailBitmapMask );
+
+        /**
+        * Two-phased constructor for thumbnail creation.
+        * @since 3.0
+        * @param aFileHandle file handle to the SVGT file.
+        * @param aThumbnailBitmap Bitmap - Client provided bitmap to render
+        *   the SVGT contents opening screen.
+        * @param aThumbnailBitmapMask Bitmap - Client provided bitmap for SVGT
+        *   bitmap mask.
+        * @return CSVGTThumbnailUtil*
+        */
+
+        static CSVGTThumbnailUtil* NewL( RFile& aFileHandle,
+                                       CFbsBitmap& aThumbnailBitmap,
+                                       CFbsBitmap& aThumbnailBitmapMask );
+
+        /**
+        * Two-phased constructor for thumbnail creation that pushes the
+        * object on the cleanup stack.
+        * @since 3.0
+        * @param aFileHandle file handle to the SVGT file.
+        * @param aThumbnailBitmap Client provided bitmap to render the SVGT
+        *                         contents opening screen.
+        * @param aThumbnailBitmapMask Bitmap - Client provided bitmap for SVGT
+        *   bitmap mask.
+        * @return CSVGTThumbnailUtil*
+        */
+
+        static CSVGTThumbnailUtil* NewLC( RFile& aFileHandle,
+                                        CFbsBitmap& aThumbnailBitmap,
+                                        CFbsBitmap& aThumbnailBitmapMask );
+        /**
+        * Destructor.
+        */
+
+        virtual ~CSVGTThumbnailUtil();
+
+    private:    // Data
+        // Dummy Bitmap used by SVG Engine to render content.
+        CFbsBitmap*  iSVGTBitMapDummy;
+
+        // SVG Engine Interface Implementation pointer
+        CSvgEngineInterfaceImpl*     iSvgModule;
+
+        // Thumbnail bitmap used by SVG Engine to render content.
+        CFbsBitmap*  iThumbnailBitmap;
+
+        // Thumbnail bitmap mask used by SVG Engine to render content mask.
+        CFbsBitmap*  iThumbnailBitmapMask;
+
+        // SVG Thumbnail Handle
+        TInt iThumbnailHandle;
+          
+        // SVGT content filename descriptor
+        RFile& iContentFileHandle;
+    };
+
+#endif  // __SVGTTHUMBNAILUTIL_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTUIControlDbgFlags.hrh	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2004,2005 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:  This header file enlists the debug flags in use by the SVGT
+*                UI Control.
+*
+*/
+
+#ifndef SVGTUICONTROLDBGFLAGS_HRH
+#define SVGTUICONTROLDBGFLAGS_HRH
+// $Flagname
+// Purpose:
+// Target Value:
+
+// SVGTUICONTROL_DBG_LOADING_WAITNOTE_ENABLED
+// Purpose: If defined, this flag enables the display of waitnote while  
+//          loading svg content. 
+// Target Value: Defined
+#define SVGTUICONTROL_DBG_LOADING_WAITNOTE_ENABLED
+
+// SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE
+// Purpose: If defined, this flag enables the portion of the code where the 
+// DRM Thumbnail API is set.
+// Target Value: defined
+#define SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE
+
+// SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE
+// Purpose: If defined, this flag enables the portion of the code where the 
+// DRM Thumbnail API is set.
+// Target Value: defined
+#define SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE
+
+// SVGTUICONTROL_DBG_OPENVG_TESTING_ENABLE
+// Purpose: If defined, this flag enables the use of OpenVG in the SVG Engine
+// Target Value: undefined
+#undef SVGTUICONTROL_DBG_OPENVG_TESTING_ENABLE
+
+#endif // SVGTUICONTROLDBGFLAGS_HRH
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTUIDialog.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,337 @@
+/*
+* Copyright (c) 2004,2005 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:  SVGT UI Dialog implements a custom dialog used to display
+*                SVGT content.
+*
+*/
+
+
+#ifndef __SVGTUIDIALOG_H__
+#define __SVGTUIDIALOG_H__
+#include <akndialog.h>
+#include <aknnavide.h> 
+#include <SVGTCustControl.h> 
+#include <SvgtApplicationExitObserver.h>
+
+// FORWARD DECLARATIONS
+class CSVGTCustControl;
+class MSvgtAppObserver;
+class MSVGTProgressBarDrawImpl;
+class TCoeHelpContext;
+
+/**
+*  Provides the dialog functionality for viewing SVGT files.
+*  @lib SVGTUIControl.lib
+*  @since 3.0
+*/
+ 
+class CSVGTUIDialog : public CAknDialog, 
+                      public MSVGTProgressBarDrawImpl,
+                      public MSVGTMSKImpl,		//Added since 3.2 interface for MSK label impl
+                      public MSvgtApplicationExitObserver,
+                      public MSvgAudioMuteListener,
+                      public MCustControlPointerEventHandler
+    {
+    public:  // Constructors and destructor
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CSVGTUIDialog* NewL();
+
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CSVGTUIDialog* NewLC();
+        
+        
+
+        // Destructor
+        virtual ~CSVGTUIDialog();
+    public: // New functions
+    public: // Functions from base classes
+        /**
+        * From CAknDialog Executes the dialog and deletes the dialog on exit.
+        * @since 3.0
+        * @param aFileHandle File handle to the SVGT content.
+        * @param aAppObs Implementation Class provided by application that
+        *   uses this dialog
+        * Note: The ownership of the file handle is not transferred. 
+        *       It is the responsibility of the caller to close this file 
+        *       after deleting this dialog.        
+        * @return Integer - Indicates Exit Reason.
+        */
+        virtual TInt ExecuteLD( RFile& aFileHandle,
+                                MSvgtAppObserver  *ptr );
+                                
+        /**
+        * From CAknDialog - Called by framework to process commands invoked by
+        *  the user.
+        */
+        virtual void ProcessCommandL( TInt aCommandId );
+                                
+    public: //From MSvgtApplicationExitObserver
+        void HandleApplicationExitL( TInt aExitCommand );
+        IMPORT_C void AssignImageData( const TDesC& aUri, HBufC8* aData );
+        
+    public:// From MSvgAudioMuteListener
+    		/**
+        *  This method is to remove the muted icon
+        * @since 5.0
+        * @param aIsVolumeMuted: indicates if volume is to be muted
+        * @return none.
+        */
+        void VolumeMuted(TBool aIsVolumeMuted);
+    public:                                           
+               
+        
+        /**
+        * This function is called by the application to check whether the
+        * loading of the svg content is done.
+        * @since 3.0
+        * @return TBool iIsLoadingDone
+        */                                       
+        virtual TBool IsLoadingDone();   
+        /**
+        * Function used by the application to handle background/foreground
+        * events. When the application goes to background the presentation
+        * needs to be paused. When application comes back to foreground,
+        * the user would need to start the paused presentation. 
+        * @param aForeground: ETrue: Foreground event, 
+        *                     EFalse: Background event.
+        * @since 3.0
+        */
+        virtual void HandleApplicationForegroundEvent( TBool aForeground );
+
+        /**
+        * Function used by the client to indicate the filehandle is
+        * no longer going to be valid. e.g. In Move operation of the
+        * file, client could close old file and open new one after
+        * move is over.
+        * @since 3.0
+        */
+        virtual void StopUsingContentFileHandle();
+        /**
+        * Function used by the client to indicate the filehandle is
+        * going to be valid now. e.g. In Move operation of the
+        * file, client could close old file and open new one after
+        * move is over.
+        * @since 3.0
+        */
+        virtual void StartUsingContentFileHandle();
+
+        /**
+        * Function used by the client to check if text in the content
+        * was modified, to check if save is needed.
+        * @since 3.1
+        */
+        virtual TBool IsTextContentChanged();
+        
+        /**
+        * Function used by the client to save the modified svg content
+        * @since 3.1
+        */
+        virtual TInt SaveSvgDom( const TDesC& aFileName );
+
+        /**
+        * Function used by the client to notify dialog that save is complete
+        * @since 3.1
+        */
+        virtual void SaveComplete( TInt aError );
+
+    protected: // New functions
+        /**
+        * Convert a time given in milliseconds to a descriptor.
+        * The format depends on how big the given duration is.
+        * Durations of less than an hour are formatted using
+        * the short format (02:24). Longer durations are formatted
+        * using the long format (1:02:04). Maximum duration is 10 hours.
+        *
+        * @since 3.0
+        * @param aDuration duration in seconds
+        * @param aBuf      descriptor to hold the converted string
+        *
+        */
+        void FormatTimeL( const TUint& aDuration,
+                          TDes& aBuf ) const;
+        
+        /**
+        * This function is called when the user presses back or Exit.
+        * prompts a confirmation query to the user and then calls DoSaveL
+        * @param aButtonId  
+        * @since 3.0
+        */                          
+        TBool SaveNeededL( TInt aButtonId );
+        
+        /**
+        * This function prompts a save confirmation query to the user     
+        * @since 3.0
+        */  
+        TBool LaunchSaveQueryDialogL() const;        
+        
+        /**
+        * This function changes the layout of the dialog to full screen mode     
+        * @since 3.0
+        */  
+        void SwitchDialogLayoutL( TBool aIsFullScreen );        
+        
+    protected: // Functions from base classes
+        // From CEikDialog
+        // From CAknDialog
+
+        /**
+        * From CAknDialog - Called by framework to dynamically manipulate
+        *  the menu for the dialog.
+        */
+        void  DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+        
+        /**
+        * From CAknDialog - Framework method to determine if it OK
+        *  to exit the dialog.
+        */
+        TBool OkToExitL( TInt aButtonId );
+        
+        /**
+        * From CAknDialog - Called by framework to add custom control to the
+        *  dialog when specified in resource.
+        */
+        SEikControlInfo CreateCustomControlL( TInt aControlType );
+       
+        /**
+        * From CAknDialog - Called by framework to notify resize of dialog.
+        */
+        void SizeChanged();
+
+        /**
+        * From CCoeControl Key Handling Method for control.
+        * @since 3.0
+        * @param aKeyEvent Key Event.
+        * @param aType Type of Key Event.
+        * @return TKeyResponse - EKeyWasConsumed/EKeyWasNotConsumed.
+        */
+        TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+                                     TEventCode aType );
+      
+#ifdef __SERIES60_HELP        
+        /**
+        * From CCoeControl Context Sensitive Help ID retrieving function.
+        * @since 3.0
+        * @see CCoeControl
+        */
+        void GetHelpContext( TCoeHelpContext& aContext ) const;
+#endif        
+        /**
+        * From CCoeControl 
+        * @see CCoeControl::HandleResourceChange
+        */
+        void HandleResourceChange( TInt aType );
+        
+        /**
+        * From MSVGTProgressBarDrawImpl. This function is called in 
+        * order to render the progress indicator.
+        * @since 3.0
+        * @param aTimeElapsed - Contains the time elapsed in seconds.
+        * @param aTotalTime - Contains the total time in seconds
+        */
+        void DrawProgressBarL( TUint aTimeElapsed, TUint aTotalTime );
+        
+        /**
+        * Sets the mute icon & text to the navi pane .
+        * @since 3.2
+        * @param aIsVolumeMuted whether to show the the mute icon.
+        * @param aText The text show the progress info.
+        */
+        void SetNaviPaneInfoL(TBool aIsVolumeMuted, const TDesC& aText);
+        
+    private:
+    	
+    	static TInt ButtonContainerTimerCallBack(TAny* aAny);
+        virtual TBool HandleCustControlPointerEventL(const TPointerEvent& aPointerEvent);
+
+    	/**
+    	* From MSVGTMSKImpl. This function is called to draw the MSK label by
+    	* pushing the command to position button's stack.
+	    * @since 3.2
+	    * @param aResourceID - The MSK label resourceID
+	    * @param aCommandID	- The command associated with that label
+	    */
+    	void DrawMSKLabelL(TInt aResourceID,TInt aCommandID);
+    	
+    	/**
+    	* From MSVGTMSKImpl. This function is called to remove MSK label from
+    	* button group's stack
+		* @since 3.2
+		*/
+    	void RemoveMSKLabel();
+    	
+        /**
+        * C++ default constructor.
+        */
+        CSVGTUIDialog();
+
+        /**
+        * Second Phase constructor.
+        */
+        void ConstructL();
+
+    private:    // Data
+        CPeriodic* iBtnCntrTimer;
+        
+        TBool iIsButtonContainerVisible;
+         
+        TSize iBtnGrpSize;
+        TPoint iBtnGrpPos;
+        // Descriptor that contains the path to the SVGT file.
+        RFile* iFileHandlePtr;
+
+        // Is the Content file handle valid.
+        TBool iIsFileHandleValid;
+
+        // Integer storing resource offset to DLL resource file
+        TInt iResourceOffset;
+
+        // Pointer to Custom CCoeControl.
+        CSVGTCustControl *iCustControl;
+
+        // Pointer to application implementation of callbacks.
+        MSvgtAppObserver *iAppObserver;
+
+        // Boolean Indicating whether Save functionality is required.
+        TBool iSaveEnable;
+        
+        // Boolean to store whether the content is preview or not
+        TBool iPreview;
+        
+        // Navigation Pane - for progress indicator display
+        CAknNavigationDecorator* iNaviDecorator;
+        // Application Title Text
+        HBufC* iAppTitleText;
+
+        // Short Time format - initialised from resource
+        HBufC* iTimeFormatShort;
+
+        // Long Time format string - initialised from resource
+        HBufC* iTimeFormatLong;        
+        //Button group container - for MSK label updation 
+        CEikButtonGroupContainer* iCbaGroup;
+        
+        HBufC* iProgressText;
+        
+        TBool iIsVolumeMuted;
+
+        TInt iLastCommandID;
+        TBool iQuietExitWhenOrientationChange;
+    };
+
+#endif // __SVGTUIDIALOG_H__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTUIDialog.hrh	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2004,2005 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:  Resource Header for SVGT Dialog.
+*
+*/
+
+#ifndef SVGTUIDIALOG_HRH
+#define SVGTUIDIALOG_HRH
+
+    
+// DATA TYPES
+
+enum TSVGTNotes         // UI Note type enumerations
+    {
+    ESvgtWaitNote = 1
+    };
+
+enum TSVGTUIDialogIds   // SVGTUIDialog enumerate command codes
+    {
+    ESvgtDlgCommand1 = 0x6000,  // start value must not be 0
+    ESvgtDlgSaveCommand,
+    ESvgtDlgZoomInCommand,
+    ESvgtDlgZoomOutCommand,
+    ESvgtDlgSelectTextCommand,
+    ESvgtDlgEditTextCommand,
+    ESvgtDlgPlayCommand,
+    ESvgtDlgPauseCommand,
+    ESvgtDlgStopCommand,
+    ESvgtDlgLoopCascadeCommand,
+//Audio commands
+#ifdef RD_SVGT_AUDIO_SUPPORT
+    ESvgtDlgSetVolumeCommand,
+    ESvgtDlgMuteCommand,
+    ESvgtDlgUnmuteCommand,
+#endif //RD_SVGT_AUDIO_SUPPORT    
+//end    
+    ESvgtDlgLoopOnCommand,
+    ESvgtDlgLoopOffCommand,
+    ESvgtDlgFindTextCommand,
+    ESvgtDlgFullScreenCommand,
+    ESvgtDlgNormalScreenCommand,
+    ESvgtDlgViewDetailsCommand,
+    ESvgtDlgListDownloadCommand,
+    ESvgtDlgListRotateCascadeCommand,
+    ESvgtDlgAngle90,
+    ESvgtDlgAngle180,
+    ESvgtDlgAngle270,
+    ESvgtDlgAngle360,
+    ESvgtDlgHelpCommand,
+    ESvgtDlgZoomOptimalCommand
+    };
+
+enum {ESVGTDialogCustControlIdData = 1};
+enum {ESVGTCustControl = 1000};
+
+enum TSVGTStandardRotationAngles
+	{
+	ERotationAngle45 = 45,
+	ERotationAngle90 = 90,
+	ERotationAngle180 = 180,
+	ERotationAngle270 = 270
+	};
+	
+enum TSVGTNumericKeys
+	{
+	ENumberKey0 = 48,
+	ENumberKey1,
+	ENumberKey2,
+	ENumberKey3,
+	ENumberKey4,
+	ENumberKey5,
+	ENumberKey6,
+	ENumberKey7,
+	ENumberKey8,
+	ENumberKey9
+	};
+	
+#endif // SVGTUIDIALOG_HRH
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTViewerAppDbgFlags.hrh	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2004,2005 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:  This header file enlists the Debug flags in use for the SVGT
+*                viewer
+*
+*/
+
+#ifndef SVGTVIEWERAPPDBGFLAGS_HRH
+#define SVGTVIEWERAPPDBGFLAGS_HRH
+// $Flagname
+// Purpose:
+// Target Value:
+
+
+// SVGTVIEWERAPP_DBG_OPEN_HARDCODE_FILE
+// Purpose: If defined, this flag enables opening of a hardcoded file content
+//          for testing from Application Grid.
+// Target Value: Undefined 
+#undef SVGTVIEWERAPP_DBG_OPEN_HARDCODE_FILE
+
+// SVGTVIEWERAPP_DOWNLOADMGR_ENABLED
+// Purpose: If defined, this flag enables the download manager functionality 
+//          for fetching remote images
+// Target Value: defined
+#define SVGTVIEWERAPP_DOWNLOADMGR_ENABLED
+
+// SVGTVIEWERAPP_SAVE_TESTING
+// Purpose: If defined, this flag enables the save option to be enabled 
+//          in filemanager and doctest
+// Target Value: undefined
+#undef SVGTVIEWERAPP_SAVE_TESTING
+
+// SVGTVIEWERAPP_DBG_FLAG
+// Purpose: If defined, this flag enables the save option to be enabled 
+//          in filemanager and doctest
+// Target Value: undefined
+#undef SVGTVIEWERAPP_DBG_FLAG
+
+#endif // SVGTVIEWERAPPDBGFLAGS_HRH
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTViewerAppDownloads.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2004,2005 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:  This class defines the downloads and the required attributes.
+*
+*/
+
+
+
+#ifndef SVGTVIEWERAPPDOWNLOADS_H
+#define SVGTVIEWERAPPDOWNLOADS_H
+
+//  INCLUDES
+#include <DownloadMgrClient.h>                        //RHttpDownload
+#include <e32base.h>                                  //CBase
+
+
+// CLASS DECLARATION
+
+/**
+*  This class declares the Downloads and the associated attributes.
+*
+*  @since 3.0
+*/
+class CSVGTViewerAppDownloads : public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * @param aLinkFlag Image flag to distinguish the Embeded & hyperlink.
+        */
+        static CSVGTViewerAppDownloads* NewL( TBool aIsEmbedded, 
+                                              TBool aIsSynchronous,
+                                              TBool aLinkFlag );
+
+        /**
+        * Two-phased constructor.
+        * @param aLinkFlag Image flag to distinguish the Embeded & hyperlink.
+        */
+        static CSVGTViewerAppDownloads* NewLC( TBool aIsEmbedded, 
+                    TBool aIsSynchronous, TBool aLinkFlag );
+
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CSVGTViewerAppDownloads();
+        
+        /**
+        * returns link offset.
+        */
+        static TInt LinkOffset();
+
+    public: // New functions
+        
+        /**
+        * This Function returns the filename associated with the download
+        * @return FileName
+        */
+        TFileName FileName() const;
+
+        /**
+        * This Function returns the flag iEmbeddedMode
+        * associated with the download
+        * @return TBool
+        */
+        TBool EmbeddedMode() const;
+
+        /**
+        * This Function returns the flag iSynchronousMode
+        * associated with the download
+        * @return TBool
+        */
+        TBool SynchronousMode() const;
+
+        /**
+        * This Function returns the flag iDownloadCompleted
+        * associated with the download
+        * @return TBool
+        */
+        TBool DownloadCompleted() const;
+        
+        /**
+        * This Function returns the Link in the doubly linked list
+        * associated with the download
+        * @return TBool
+        */
+        TDblQueLink QueLink() const;
+
+        /**
+        * This Function returns the download handle
+        * associated with the download
+        * @return RHttpDownload
+        */
+        RHttpDownload* DownloadHandle();
+
+        /**
+        * This Function returns the Image Link flag status
+        * associated with the download
+        * @return TBool
+        */
+        TBool ImageLinkFlag() const;
+        
+        /**
+        * This Function Sets the filename
+        * associated with the download
+        */
+        void SetFileName( const TDesC& aFileName );
+
+        /**
+        * This Function Sets the flag EmbeddedMode
+        * associated with the download
+        */
+        void SetEmbeddedMode( TBool aEmbeddedMode );
+
+
+        /**
+        * This Function Sets the flag SynchronousMode
+        * associated with the download
+        */
+        void SetSynchronousMode( TBool aSynchronousMode );
+
+        /**
+        * This Function Sets the flag iDownloadCompleted
+        * associated with the download
+        */
+        void SetDownloadCompleted( TBool aDownloadCompleted );
+        
+        /**
+        * This Function Sets the Download Handle
+        * associated with the download
+        */
+        void SetDownloadHandle( RHttpDownload* aDownloadHandle ); 
+
+        /**
+        * This function sets the image link flag.
+        * @param aLinkFlag Image flag to distinguish the Embeded & hyperlink.
+        */
+        void SetImageLinkFlag(TBool aLinkFlag);
+        
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CSVGTViewerAppDownloads( 
+                                    TBool aIsEmbedded, 
+                                    TBool aIsSynchronous,
+                                    TBool aLinkFlag );
+
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private:    // Data
+
+        // Pointer to Download handle
+        RHttpDownload* iHttpDownload;
+
+        // Downloaded fileName
+        TFileName iFileName;
+
+        // Boolean variable to indicate whether the downloaded file 
+        // has to be opened in embedded mode or independent mode.
+        TBool iEmbeddedMode;
+
+        // Boolean variable to indicate whether the download
+        // has to be performed in a synchronous mode or asynchronous mode
+        TBool iSynchronousMode;
+
+        // Flag to indicate successful download completion
+        TBool iDownloadCompleted;
+        
+        // Doubly linked list link
+        TDblQueLink iLink;       
+
+        //Image flag to distinguish the Embeded & hyperlink.
+        //EFalse for FetchImage
+        //ETrue for HyperLink.
+        TBool iImageLinkFlag;    
+    };
+
+#endif      // SVGTVIEWERAPPDOWNLOADS_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SvgCodecImageConstants.hrh	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2005 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:  Image type UID for the SVG presentation.
+*
+*/
+
+
+#ifndef SVGCODECIMAGECONSTANTS_HRH
+#define SVGCODECIMAGECONSTANTS_HRH
+
+const TUid KImageTypeSVGUid = { 0x102073E7 };
+
+#endif //SVGCODECIMAGECONSTANTS_HRH
+//End of file
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SvgtApplicationExitObserver.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+
+#ifndef SVGTAPPLICATIONEXITOBSERVER_H
+#define SVGTAPPLICATIONEXITOBSERVER_H
+
+class MSvgtApplicationExitObserver
+    {
+    public:
+    virtual void HandleApplicationExitL(TInt aExitCommand) = 0;
+    };
+    
+#endif  //SVGTAPPLICATIONEXITOBSERVER_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsuis_plat/svgt_viewer_ui_api/svgt_viewer_ui_api.metaxml	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<api id="1e890b2e23f47a2b630e4b1f18e82c22" dataversion="2.0">
+  <name>SVG-T Viewer UI API</name>
+  <description>Provides SVG-T UI control and Dialog APIs.</description>
+  <type>c++</type>
+  <collection>domain</collection>
+  <libs>
+    <lib name="SVGTUIControl.lib" />
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/group/bld.inf	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 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:  Highlevel bld.inf
+*
+*/
+
+
+#include "../graphicsuis_plat/group/bld.inf"
+
+
+/*
+*   Order is important
+*/
+#include "../svgtviewer/group/bld.inf"
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/layers.sysdef.xml	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+  <!ENTITY layer_real_source_path "sf/app/graphicsuis" >
+]>
+
+<SystemDefinition name="graphicsuis" schema="1.4.0">
+  <systemModel>
+    <layer name="app_layer">
+      <module name="graphicsuis">
+        <unit unitID="abs.graphicsuis" mrp="" bldFile="&layer_real_source_path;/group" name="graphicsuis" />
+      </module>
+    </layer>
+  </systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition.xml	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemDefinition schema="3.0.0">
+  <package id="graphicsuis" name="Graphics UIs" levels="util ui">
+    <collection id="graphicsuis_info" name="Graphics UIs Info" level="ui">
+      <component id="graphicsuis_plat" filter="s60" name="Graphics UIs Platform Interfaces" class="api">
+        <unit bldFile="graphicsuis_plat/group"/>
+      </component>
+    </collection>
+    <collection id="svgtviewer" name="SVG-T Viewer" level="ui">
+      <component id="svgtviewerplugin" filter="s60" name="SVG-T Viewer Plugin">
+        <unit bldFile="svgtviewer/svgtviewerplugin/group"/>
+      </component>
+    </collection>
+  </package>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppInc/SVGTViewerApp.hrh	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2004,2005 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:  Resource Header for SVGT Viewer.
+*
+*/
+
+#ifndef SVGTVIEWERAPP_HRH
+#define SVGTVIEWERAPP_HRH
+
+// DATA TYPES
+enum TSVGTViewerAppIds // SVGTViewerApp enumerate command codes
+    {
+    ESVGTViewerAppCommand1 = 1  // start value must not be 0
+    };
+
+
+#endif // SVGTVIEWERAPP_HRH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppInc/SVGTViewerApp.pan	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2004,2005 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:  Panic Function and Panic codes for SVGT Viewer
+*
+*/
+
+
+#ifndef __SVGTVIEWERAPP_PAN__
+#define __SVGTVIEWERAPP_PAN__
+
+/** SVGTViewerApp application panic codes */
+enum TSVGTViewerAppPanics
+    {
+    ESVGTViewerAppUi = 1
+    // add further panics here
+    };
+    
+ _LIT( applicationName, "SVGTViewerApp" );    
+
+inline void Panic( TSVGTViewerAppPanics aReason )
+    {   
+    User::Panic( applicationName, aReason );
+    }
+
+#endif // __SVGTVIEWERAPP_PAN__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppInc/SVGTViewerAppAppUi.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2004,2005 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:  AppUI class for the SVGT Viewer.
+*
+*/
+
+
+#ifndef SVGTVIEWERAPPAPPUI_H
+#define SVGTVIEWERAPPAPPUI_H
+
+#include <SVGTAppObserver.h>
+#include <DownloadMgrClient.h>
+
+// FORWARD DECLARATIONS
+class CAknAppUi;
+class CSVGTViewerAppAppView;
+class CSVGTUIDialog;
+class CDownloadMgrUiUserInteractions;       
+class CDownloadMgrUiDownloadsList;      
+class CDownloadMgrUiLibRegistry;
+class CSVGTViewerAppDownloads;
+class CSVGTAppObserverUtil;
+
+        
+class CSvgtViewerAppView;
+// CLASS DECLARATION
+
+/**
+*  CSVGTViewerAppAppUi is the AppUI class for the SVGT Viewer
+*  @since 3.0
+*/
+class CSVGTViewerAppAppUi : public CAknAppUi
+    {
+    public: // Constructors and destructor
+        /**
+        * C++ default constructor.
+        */
+        CSVGTViewerAppAppUi();
+
+        /**
+        * Second Phase constructor.
+        */
+        void ConstructL();
+
+        // Destructor
+        virtual ~CSVGTViewerAppAppUi();
+
+    public: // New functions
+        /**
+        * Handle open command from document class.
+        * @since 3.0
+        * @param  aFileHandle - File Fandle to the SVGT file.
+        */
+        virtual void OpenFileL( RFile& aFileHandle );
+
+        /**
+        * This function is used to set the move option, the
+        * Move allowed or not decision is done by the document
+        * class and it calls this function to inform the UI class
+        * about the decision.
+        * @param: aMoveAllowed, ETrue: Move allowed, EFalse: 
+        *   Move Not allowed.
+        * @since 3.0
+        */
+        void SetAllowMove(TInt32 aMoveAllowed);
+
+    public: // Functions from base classes
+        /**
+        * From CAknAppUi
+        * @see CAknAppUi::HandleCommandL
+        */
+        virtual void HandleCommandL( TInt aCommand );
+        
+        /**
+        * From CAknAppUi
+        * @see CAknAppUi::OpenFileL
+        */
+        virtual void OpenFileL( const TDesC& aFilename );
+        
+        /**
+        * From CAknAppUi
+        * @see CAknAppUi::ProcessCommandParametersL
+        */
+        virtual TBool ProcessCommandParametersL(TApaCommand aCommand,
+            TFileName& aDocumentName, const TDesC8& aTail );
+        
+        /**
+        * From CAknAppUi
+        * @see CAknAppUi::HandleScreenDeviceChangedL
+        */
+        void HandleScreenDeviceChangedL();
+        
+        /**
+        * From CAknAppUi
+        * @see CAknAppUi::HandleResourceChangeL
+        */
+        void HandleResourceChangeL( TInt aType );
+    private: 
+        /**
+        * From CEikAppUi, called when event occurs of type EEventFocusLost
+        * or EEventFocusGained.
+        * @param aForeground ETrue if the application is in the foreground,
+        * otherwise EFalse
+        */
+        void HandleForegroundEventL(TBool aForeground);                           
+    
+        /**
+        * Used to find out if video call is going on.
+        * @since 3.0
+        */   
+        TBool IsVideoCall() const;
+        /**
+        * Used to check if the application has started any embedded app.
+        * @since 3.0
+        * return: ETrue: If there is an embedded app, EFalse otherwise.
+        */ 
+        TBool IsEmbeddedAppRunning() const;
+        /**
+        * Used to set internal state if the application has started 
+        * any embedded app.
+        * @since 3.0
+        */
+        void SetEmbeddedAppRunning();
+        /**
+        * Used to set internal state if the embedded app started 
+        * previously gets closed.
+        * @since 3.0
+        */
+        void ResetEmbeddedAppRunning();
+        
+        /**
+        * Used to callback by the idle timer in order to launch the dialog
+        * @since 3.0
+        */
+        static TInt CallBackFuncL(TAny *aPtr);
+        
+        /**
+        * This function accesses the document and launches the content
+        * using the UI Dialog.
+        * return: ETrue When file handle is not valid
+        *         EFalse When file handle is valid
+        * @since 3.0
+        */
+        TBool LaunchDialogL();
+
+        /**
+        * This function is used to detect how we are launched. 
+        * Embedded or Standalone.
+        * return: ETrue: Embedded mode, EFalse: Standalone mode.
+        * @since 3.0
+        */
+        TBool WeAreEmbedded() const;
+
+        /**
+        * This function is used to decide if the "save" option
+        * should be shown in the UI. "Save" is shown if we
+        * are launched from messaging/mms/mail/browser.
+        * return: ETrue: Show save, EFalse: Do not show save.
+        * @since 3.0
+        */
+        TBool CanShowSave() const;
+
+        /**
+        * This function is used to decide if the Save operation
+        * should actually do a move. This is required if we
+        * are launched from browser/downloadmgr and file
+        * needs to be moved instead of copying to save disk
+        * space. 
+        * @since 3.0
+        */
+        TBool ShouldMoveContent() const;
+
+        /**
+        * This function checks whether the file is local or remote
+        * @since 3.1
+        */
+        TBool IsLocalFile() const;
+        
+        /**
+        * This function checks whether the filepath of the content 
+        * opened is in the PHONE_MEMORY_IMAGES_PATH or 
+        * MEMORYCARD_IMAGES_PATH
+        * @param aFileHandle  Filehandle to check the path
+        * @since 3.1
+        */
+        TBool IsLocalFileL( RFile& aFileHandle ) const;
+
+    private:    // Data
+
+        CSvgtViewerAppView* iContainer;
+        
+        // Pointer to the SVGT Dialog
+        CSVGTUIDialog* iAppDialog;        
+        
+        // Pointer to Hyperlink Handler
+        CSVGTAppObserverUtil*  iAppObserver;    
+
+        TBool iEmbeddedAppRunning;
+        CPeriodic* iIdleTimer;
+        TBool iMoveAllowed;
+    };
+
+
+#endif // __SVGTVIEWERAPPAPPUI_H__
+
+//End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppInc/SVGTViewerAppApplication.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2004,2005 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:  This header file enlists the application class interface of
+*                the SVGT Viewer App
+*
+*/
+
+
+
+#ifndef __SVGTVIEWERAPPAPPLICATION_H__
+#define __SVGTVIEWERAPPAPPLICATION_H__
+
+//  INCLUDES
+#include <aknapp.h>
+
+// CLASS DECLARATION
+
+/**
+*  Application Class for SVGT Viewer.
+*  An instance of CSVGTViewerAppApplication is the Application object
+*   for the SVGTViewerApp application.
+*  @since 3.0
+*/
+
+class CSVGTViewerAppApplication : public CAknApplication
+    {
+    public: // Functions from base classes
+        /**
+        * From CAknApplication Return the application DLL UID value.
+        * @since 3.0
+        * @return TUid The UID of this Application/Dll
+        */
+        TUid AppDllUid() const;
+
+    protected:  // Functions from base classes
+        /**
+        * From CAknApplication Create a CApaDocument object and return a
+        *  pointer to it.
+        * @since 3.0
+        * @return CApaDocument* - A pointer to the created document
+        */
+        CApaDocument* CreateDocumentL();
+    private:
+};
+#endif // __SVGTVIEWERAPPAPPLICATION_H__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppInc/SVGTViewerAppDocument.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,160 @@
+/*
+* Copyright (c) 2004,2005 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:  This header file enlists the Document class interface of
+*                the SVGT Viewer App
+*
+*/
+
+
+
+#ifndef __SVGTVIEWERAPPDOCUMENT_H__
+#define __SVGTVIEWERAPPDOCUMENT_H__
+
+// INCLUDES
+#include <AknDoc.h>
+#include <GenericParamConsumer.h>
+
+// FORWARD DECLARATIONS
+class CSVGTViewerAppAppUi;
+class CEikApplication;
+
+// CLASS DECLARATION
+
+/**
+*  Document Class for SVGT Viewer
+*  An instance of class CSVGTViewerAppDocument is the Document part of the
+*  SVGT Viewer.
+*  @since 3.0
+*/
+class CSVGTViewerAppDocument : public CAiwGenericParamConsumer
+    {
+    public:  // Constructors and destructor
+        /**
+        * Two-phased constructor.
+        * @param aApp Reference to application object
+        * @return CSVGTViewerAppDocument*.
+        */
+        static CSVGTViewerAppDocument* NewL( CEikApplication& aApp );
+
+        /**
+        * Two-phased constructor.
+        * @param aApp Reference to application object
+        * @return CSVGTViewerAppDocument*.        
+        */
+        static CSVGTViewerAppDocument* NewLC( CEikApplication& aApp );
+
+        // Destructor
+        virtual ~CSVGTViewerAppDocument();
+    public: // New functions
+        /**
+        * GetSvgtContentFileHandle() This function is a get function to 
+        * get the file-handle of the file content. This is used by AppUI
+        * @since 3.0
+        */
+        RFile& GetSvgtContentFileHandle();
+        
+        /**
+        * IsFileHandleValid() This function is a get function to 
+        * get the flag whether File's handle is valid
+        * AppUi uses this method.
+        * @since 3.0
+        */
+        TBool IsFileHandleValid() const;
+
+        /**
+        * IsFileFullPathAvailable() This function is a get function to 
+        * get the flag whether File's fullpath is available. I.e.
+        * file is public. AppUi uses this method.
+        * @since 3.0
+        */
+        TBool IsFileFullPathAvailable() const;
+
+        /**
+        * GetFileFullPath() This function is a get function to 
+        * get the File's fullpath. AppUi uses this method.
+        * @since 3.0
+        */
+        void GetFileFullPath(TFileName& filename); 
+        
+        /**
+        * GetParentAppUid() This function is a get function to 
+        * get the Parent Application's Uid. AppUi uses this method.
+        * @since 3.0
+        */
+        TUid GetParentAppUid() const; 
+        
+
+    public:  // Functions from base classes
+        /**
+        * From CAknDocument This function is used by the Doc Handler to open
+        *  SVGT content.
+        * @since 3.0
+        * @param aDoOpen Boolean indicates whether Document is to be
+        *  opened/Created.
+        * @param aFilename Descriptor indicates SVGT File path
+        * @param aFs File Server Session handle
+        * @return CFileStore *.
+        */
+        virtual CFileStore* OpenFileL( TBool aDoOpen, const TDesC& aFilename,
+                                         RFs& aFs );
+
+        /**
+        * From CAknDocument This function is used by the Doc Handler to open
+        *  the document passed by the framework as a file-handle.
+        * @since 3.0
+        * @see CAknDocument::OpenFileL
+        *         */
+        virtual void OpenFileL( CFileStore*& aFileStore, RFile& aFile);
+        
+        /**
+        * From CAknDocument This function is called by the framework to
+        *  create the AppUI for SVGT Viewer.
+        * @since 3.0
+        * @return A pointer to the created instance of the AppUi created
+        */
+        CEikAppUi* CreateAppUiL();
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CSVGTViewerAppDocument( CEikApplication& aApp );
+
+        /**
+        * Second phase construction of a CSVGTViewerAppDocument object.
+        */
+        void ConstructL();
+     
+     private:   
+              
+        // File handle to the SVGT content
+        RFile iSvgtContentFileHandle;
+
+        //File Path if the file launched with full filepath.
+        HBufC* iFileFullPath;
+
+        //Was file launched with full-path.
+        TBool iIsFileFullPathValid;
+        
+        //OpenFileL updates this flag after getting the file handle.
+        TBool iIsFileHandleValid;
+        
+        //Uid of the parent application
+        TUid iParentUid;
+
+    };
+
+
+#endif // __SVGTVIEWERAPPDOCUMENT_H__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppInc/SvgtViewerAppView.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2007 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:  Application viewer for SVGT Viewer App.
+*
+*/
+
+
+
+#ifndef __SVGTVIEWERAPPVIEW_H__
+#define __SVGTVIEWERAPPVIEW_H__
+
+#include <AknControl.h>
+
+//
+// class CSvgtViewerAppView
+//
+
+class CSvgtViewerAppView : public CAknControl
+    {
+    public:
+        void ConstructL(const TRect& aRect);
+        ~CSvgtViewerAppView();
+    
+    private: // from CCoeControl
+        void Draw(const TRect& /*aRect*/) const;
+        TInt CountComponentControls() const;
+        CCoeControl* ComponentControl(TInt aIndex) const;
+        void HandleResourceChange (TInt aType);
+    };
+
+
+#endif //__SVGTVIEWERAPPVIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppObserverUtilSrc/SVGTAppObserverUtil.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,2441 @@
+/*
+* Copyright (c) 2004,2005 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:  This class provides helper functions and a reference 
+*                implementation for hyperlink handling, image fetching
+*                and saving of the svg content. 
+*
+*/
+
+
+#include <BrowserLauncher.h>
+#include <DocumentHandler.h>
+#include <uri16.h>
+#include <uriutils.h>
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdef.h>
+#include <flogger.h>
+#include <CDownloadMgrUiUserInteractions.h>
+#include <CDownloadMgrUiDownloadsList.h>
+#include <CDownloadMgrUiLibRegistry.h>
+#include <BrowserOverriddenSettings.h>
+
+#ifdef __SERIES60_NATIVE_BROWSER
+#include <BrowserUiSDKCRKeys.h>    // Include only if s60 native 
+                                   // browser available
+#endif
+
+#include <centralrepository.h> 
+#include <apgtask.h>                                      // TApaTaskList
+#include <apmstd.h>                                       // RApaLsSession
+#include <commdb.h>
+#include <ApDataHandler.h>                                // CApDataHandler
+#include <ApAccessPointItem.h>                            // CApAccessPointItem
+#include <ApUtils.h>                                      // CApUtils
+#include <ApSelect.h>                                     // CApSelect 
+#include <aknnotewrappers.h>
+#include <AknGlobalNote.h>
+#include <AknWaitDialog.h>
+#include <AknCommonDialogs.h>
+#include <AknProgressDialog.h>
+#include <StringLoader.h>
+#include <data_caging_path_literals.hrh>
+#include <bautils.h>
+#include <eikprogi.h>
+#include <e32svr.h>
+#include <SVGTAppObserverUtil.rsg>
+#include <SVGTAppObserverUtil.h>
+#include <pathinfo.h>
+#include <sysutil.h>
+#include <imcvcodc.h>   //TImCodecB64
+#include <AiwGenericParam.h>
+
+#include "SVGTViewerAppDbgFlags.hrh"
+#include "SVGTViewerAppDownloads.h"
+#include "SVGTAppObserver.h"                              // temp
+#include "SVGTUIDialog.h"                                 // AppDialog
+#include "SVGTUIDialog.hrh"
+
+#ifdef RD_MULTIPLE_DRIVE    
+#include <AknCommonDialogsDynMem.h>
+#endif
+// CONSTANTS 
+
+_LIT( KBrowserParameter, "4" ); // magic number for browser to open the URL
+_LIT( KSpace, " " );
+
+_LIT(KJpg,   ".jpg" );
+_LIT(KJpeg,  ".jpeg" );
+_LIT(KPng,   ".png" );
+_LIT(KBmp,   ".bmp" );
+_LIT(KSvg,   ".svg" );
+_LIT(KSvgz,  ".svgz" );
+
+#ifndef __SERIES60_NATIVE_BROWSER
+    // Below constants need to be used if s60 native browser is not used.
+    const TUid KCRUidBrowser   = {0x10008D39};
+    const TUint32 KBrowserDefaultAccessPoint =  0x0000000E;
+#endif // __S60_REMOVE_BROWSER
+
+// SMIL Fit Value
+_LIT( KSvgtDefSmilFitValue,"meet" );
+// Resource file for App Observer Util
+_LIT( KResourceFileName, "Z:SVGTAppObserverUtil.rsc" );
+
+_LIT( KEmptyString, "" );
+_LIT( KWww, "www" );
+_LIT( KHttp, "http://");
+_LIT( KDotDot, ".." );
+_LIT( KBSlashStr, "/" );
+_LIT( KSlashStr, "\\" );
+_LIT( KDotSlashStr, ".\\" );
+_LIT( KColonStr, ":" );
+_LIT( KNewLineStr, "\n" );
+
+#ifdef SVGTVIEWERAPP_DBG_FLAG
+_LIT( KFileLoggingDir, "SVGTViewer" );
+_LIT( KFileLog, "SaveLog.txt" );
+#endif
+
+// Maximum length of thread Id in Characters
+const TInt KSvgMaxThreadIdStr = 10;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSVGTAppObserverUtil* CSVGTAppObserverUtil::NewL( 
+                        CSVGTUIDialog* aAppDialog,
+                        RFile* aFileHdlPtr,
+                        const TDesC& aFilename, 
+                        TBool aIsFileFullPathAvailable,
+                        TBool aCanSaveContent,
+                        TBool aShouldMoveContent)
+    {
+    CSVGTAppObserverUtil* self = 
+                             CSVGTAppObserverUtil::NewLC( aAppDialog,
+                                        aFileHdlPtr,
+                                        aFilename, 
+                                        aIsFileFullPathAvailable,
+                                        aCanSaveContent,
+                                        aShouldMoveContent );
+    CleanupStack::Pop( self );
+    return self;   
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSVGTAppObserverUtil* CSVGTAppObserverUtil::NewLC( CSVGTUIDialog* aAppDialog,
+                                            RFile* aFileHdlPtr,
+                                            const TDesC& aFilename, 
+                                            TBool aIsFileFullPathAvailable,
+                                            TBool aCanSaveContent,
+                                            TBool aShouldMoveContent)
+    {
+    CSVGTAppObserverUtil* self = 
+                          new( ELeave ) CSVGTAppObserverUtil( aAppDialog );
+    CleanupStack::PushL( self );
+    self->ConstructL( aFileHdlPtr, aFilename, aIsFileFullPathAvailable, 
+            aCanSaveContent, aShouldMoveContent );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSVGTAppObserverUtil* CSVGTAppObserverUtil::NewL( 
+                        CSVGTUIDialog* aAppDialog,
+                        RFile* aFileHdlPtr )
+    {
+    CSVGTAppObserverUtil* self = 
+                             CSVGTAppObserverUtil::NewLC( aAppDialog,
+                                        aFileHdlPtr );
+    CleanupStack::Pop( self );
+    return self;   
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSVGTAppObserverUtil* CSVGTAppObserverUtil::NewLC( 
+                                            CSVGTUIDialog* aAppDialog,
+                                            RFile* aFileHdlPtr )
+    {
+    CSVGTAppObserverUtil* self = 
+                          new( ELeave ) CSVGTAppObserverUtil( aAppDialog );
+    CleanupStack::PushL( self );
+    
+    self->ConstructL( aFileHdlPtr );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------    
+// Destructor
+// -----------------------------------------------------------------------------
+EXPORT_C CSVGTAppObserverUtil::~CSVGTAppObserverUtil()
+    {  
+    
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED         
+
+    CSVGTViewerAppDownloads* downloads;
+    
+    iDownloadIter.SetToFirst();
+    while ((downloads = iDownloadIter++) != NULL)
+        {
+        downloads->QueLink().Deque();
+        delete downloads;
+        iDownloadIter.SetToFirst();
+        }
+    
+    // Close the DMgr UI Library first, as it uses the same 
+    // Download Manager session that the Viewer uses
+    delete iDMgrUiReg;
+    
+    // Close the Download Manager connection
+    iDownloadMgr.Close();
+
+    iDMgrDownloadsList = NULL;
+    iDMgrUserInteractions = NULL;  
+#endif     
+    // Reset the app dialog, it is already freed in OpenFileL
+    iAppDialog = NULL;     
+
+    delete iFileManager;
+    delete iSvgFileName;
+    delete iSvgDstFileName;
+    delete iDocHandler;
+    
+    delete iWaitNote;
+    delete iTempFileName;
+    if ( iResourceOffset != 0 )
+        {
+        iEikEnv->DeleteResourceFile( iResourceOffset );
+        }
+        
+    // Reset the SVG File Handle as it is owned by the caller
+    iSvgFileId = NULL;
+    // Reset the Progress Info implementor pointer
+    iProgressInfo = NULL;
+    // Reset Environment pointer
+    iEikEnv = NULL;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::FetchImage
+// Called by Svg engine when there is an image tag encountered in the svg file
+// parameters:
+// aUri: the uri that needs to be downloaded or fetched locally
+// aSession: File Session in which the file is opened.
+// aFileHandle: handle of the downloaded file or locally fetched file.
+// return value:
+// KErrNone if the file is fetched successfully
+// KErrNotFound if the file could not be fetched.
+// -----------------------------------------------------------------------------
+//   
+EXPORT_C TInt CSVGTAppObserverUtil::FetchImage( 
+                          const TDesC&  aUri , RFs&  aSession , 
+                          RFile&  aFileHandle  )
+    {
+    TInt ret = KErrNone;
+    
+    TDownloadNeeded downloadNeeded = ELocalImageFile;
+    TRAPD( error, downloadNeeded = IsDownloadNeededL( aUri ) );
+    
+    if ( error != KErrNone )
+        {
+        return KErrNotFound;
+        }
+    
+    if ( downloadNeeded == ELocalImageFile )
+        {
+        TFileName fileName;
+        if ( GetLocalFile( aUri, fileName, *iSvgFileName ) )
+            {
+            return aFileHandle.Open( aSession, fileName, EFileShareAny );            
+            }
+        else
+            {
+            return KErrNotFound;
+            }        
+        }
+    else if ( downloadNeeded == ERemoteImageFile )
+        {
+        TRAPD( err,ret = StartDownloadingImageL( aUri, 
+                                               aSession,
+                                               aFileHandle,
+                                               EFalse,
+                                               EFalse /* Asynchronous mode */) ); 
+        if ( err != KErrNone )
+            {
+            return KErrNotFound;
+            }
+        else
+            {
+            return ret;         
+            }
+        
+        }
+    else
+        {
+        return KErrNotFound;
+        }   
+    
+    }
+
+TInt CSVGTAppObserverUtil::FetchFont( const TDesC& /* aUri */, 
+                                    RFs& /* aSession */, RFile& /* aFileHandle */ )
+    {
+    return KErrNotSupported;
+    }
+
+// ---------------------------------------------------------------------------
+// CSVGTAppObserverUtil::LinkActivated
+// Callback Function called by svg engine when a hyperlink is activated
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C TBool CSVGTAppObserverUtil::LinkActivated( const TDesC& aUri )
+    {  
+    if( aUri.Length() == 0 )
+        {
+        return KErrNone;
+        }
+    TRAPD( error, LinkActivatedL( aUri ) );
+    return ( error == KErrNone );
+    }
+
+
+// --------------------------------------------------------------------
+// CSVGTAppObserverUtil::LinkActivatedWithShow
+// Callback Function called by the svg engine when a hyperlink with show 
+// attribute is activated 
+// --------------------------------------------------------------------
+//
+EXPORT_C TBool CSVGTAppObserverUtil::LinkActivatedWithShow( 
+    const TDesC& aUri ,
+    const TDesC& aShow )
+    {
+    if( aUri.Length() == 0 )
+        {
+        return KErrNone;
+        }
+    TRAPD( error, LinkActivatedWithShowL( aUri, aShow ) );
+    return ( error == KErrNone );
+    }    
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::GetSmilFitValue
+// Default implementation for observer function to get SMIL fit value.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::GetSmilFitValue( TDes& aSmilValue )
+    {
+    aSmilValue.Copy( KSvgtDefSmilFitValue );
+    }   
+     
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::SetDownloadMenu
+// Sets/Unsets the iDownloadMenuEnabled
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void CSVGTAppObserverUtil::SetDownloadMenu( TBool aAddDownloadMenu ) 
+    {
+    iDownloadMenuEnabled = aAddDownloadMenu;    
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::SetDownloadMenu
+// Sets/Unsets the iDownloadMenuEnabled
+// -----------------------------------------------------------------------------
+//    
+EXPORT_C TBool CSVGTAppObserverUtil::CanShowDownload() const
+    {
+        if(iDownloadInProgress || iDownloadDone)
+            {
+            const CDownloadArray& array = iDownloadMgr.CurrentDownloads();
+            return ( array.Count() ? ETrue : EFalse ); 
+            }
+            
+        return EFalse;            
+    }       
+
+// --------------------------------------------------------------------
+// void CSVGTAppObserverUtil::DisplayDownloadMenuL()
+// Call back called by the UI dialog when the downloads menu is 
+// selected. This function calls the DisplayDownloadsListL function
+// provided by the download manager ui lib.
+// --------------------------------------------------------------------
+//    
+EXPORT_C void CSVGTAppObserverUtil::DisplayDownloadMenuL()
+    {   
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED          
+    if ( iDMgrDownloadsList )
+        {
+        TRAPD( error, iDMgrDownloadsList->DisplayDownloadsListL() );        
+            {
+            if ( error != KErrNone )
+                {
+#ifdef _DEBUG                        
+                TBuf<64> buffer;
+                _LIT(msg, "AP error : %d" );
+                buffer.Format( msg, error );
+                iEikEnv->InfoMsg( buffer );              
+#endif                
+                }
+            }
+        }   
+#endif
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::HandleDMgrEventL
+// Called by Download manager when the image is being downloaded. 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::HandleDMgrEventL( RHttpDownload& aDownload,
+                                       THttpDownloadEvent aEvent ) 
+    {
+    
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED       
+           
+#ifdef _DEBUG        
+        TBuf<64> buffer;
+        _LIT(msg, "download progressing : %d, %d" );
+        buffer.Format( msg, aEvent.iDownloadState, aEvent.iProgressState );
+        iEikEnv->InfoMsg( buffer );        
+#endif        
+        {
+        
+        if ( EHttpDlInprogress == aEvent.iDownloadState ) 
+            {
+            iDownloadInProgress = ETrue;
+            iDownloadDone = EFalse;
+            }
+            
+        if ( EHttpDlCompleted == aEvent.iDownloadState )
+            {  
+             
+             iDownloadInProgress = EFalse;
+             iDownloadDone = ETrue; 
+                               
+            // Get the download item from the list
+            CSVGTViewerAppDownloads* downloadItem;   
+            downloadItem = FindDownload( &aDownload );
+            
+#ifdef _DEBUG                    
+                
+           
+            _LIT(downloadMsg, "download found" );
+            iEikEnv->InfoMsg( downloadMsg );
+#endif            
+                    
+                       
+            if ( downloadItem )
+                {
+                // Get the file Name of the downloaded file
+                TFileName fileName;
+                aDownload.GetStringAttribute( EDlAttrDestFilename, fileName );                
+#ifdef _DEBUG                       
+                   
+                _LIT(fileNameMsg, "got file name " );
+                iEikEnv->InfoMsg( fileNameMsg );
+#endif            
+
+//##############################################
+// For AssignImageData
+                DoAssignImageDataL(downloadItem, aDownload);
+//##############################################
+                downloadItem->SetFileName( fileName );
+        
+                // Check whether the download happened in a synchronous way
+                if ( downloadItem->SynchronousMode() )
+                    {                    
+                    downloadItem->SetDownloadCompleted( ETrue );
+                    
+                    // If wait note is being displayed, delete it
+                    if ( iWaitNote )
+                        {
+                        // Delete the download wait note
+                        TRAPD( err, iWaitNote->ProcessFinishedL() );
+                        if ( err != KErrNone )
+                            {
+                            delete iWaitNote;
+                            iWaitNote = NULL;    
+                            }                        
+                        }                 
+
+                    // If synchronous stop the scheduler 
+                    iWait.AsyncStop();  
+                    }
+                else    
+                    {
+                    // Otherwise check the embedded mode and open the file 
+                    // using DocHandler
+                    downloadItem->QueLink().Deque();
+                    delete downloadItem;
+                    }
+                }
+            }
+        else 
+            {
+            // added for if user cancels the download.
+             if ( EHttpDlDeleting == aEvent.iDownloadState && !iDownloadDone)   
+                {
+                 aDownload.Pause();
+                aEvent.iDownloadState = EHttpDlFailed;
+                }
+                
+            if ( EHttpDlFailed == aEvent.iDownloadState )
+                {       
+#ifdef _DEBUG                              
+              
+                _LIT(failMsg, " downloading failed" );
+                iEikEnv->InfoMsg( failMsg );    
+#endif               
+                                
+                TInt32 error = 0;
+                TInt32 globalError = 0;
+                aDownload.GetIntAttribute( EDlAttrErrorId, error );
+                aDownload.GetIntAttribute( EDlAttrGlobalErrorId, globalError );
+                
+#ifdef _DEBUG                  
+                TBuf<64> errorBuffer;
+                _LIT(failedMsg, "downloading failed : %d, %d" );
+                buffer.Format( failedMsg, error, globalError );
+                iEikEnv->InfoMsg( errorBuffer );
+#endif               
+             
+                // Get the download item from the list             
+                CSVGTViewerAppDownloads* downloadItem;      
+                downloadItem = FindDownload( &aDownload );
+                // Check whether the download was started synchronously
+               // if( !downloadItem->ImageLinkFlag())
+                    {
+                    HBufC* lUriBuf = HBufC::NewLC( KMaxUrlLength );
+                    TPtr lUriPtr(lUriBuf->Des());
+                    aDownload.GetStringAttribute( EDlAttrReqUrl, lUriPtr ); 
+                    iAppDialog->AssignImageData(lUriPtr , NULL );
+                    CleanupStack::PopAndDestroy( lUriBuf );
+                    }
+                    
+                if ( downloadItem )
+                    {
+                    if ( downloadItem->SynchronousMode() )
+                        {
+                        
+                        downloadItem->SetDownloadCompleted( EFalse );
+                        if ( iWaitNote )
+                            {
+                            // Delete the download wait note
+                            TRAPD( err, iWaitNote->ProcessFinishedL() );
+                            if ( err != KErrNone )
+                                {
+                                delete iWaitNote;
+                                iWaitNote = NULL;    
+                                }
+                            }                 
+
+                        // If synchronous, stop the scheduler started.
+                        iWait.AsyncStop();
+                        }   
+                    else
+                        {
+                        // Otherwise delete the download item from the list
+                        downloadItem->QueLink().Deque();
+                        delete downloadItem;
+                        }
+                    }
+                }
+            } 
+        }
+#endif        
+    }    
+    
+// ---------------------------------------------------------------------------
+// CSVGTAppObserverUtil::LinkActivatedL
+// Leave variant of LinkActivated
+// Launches the browser in embedded mode and passes the uri to the browser
+// if the uri is a web page, if the uri refers to a local image file, or a 
+// remote image file, launches the file using doc handler.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::LinkActivatedL( const TDesC& aUri )
+    {
+    
+    TDownloadNeeded dnloadNeeded = IsDownloadNeededL( aUri );
+    
+    if ( dnloadNeeded == ENotAnImageFile )
+        {           
+
+        // (2 = length of the first parameter + space)            
+        HBufC* parameters = NULL;
+        parameters = HBufC::NewLC( aUri.Length() + 2 );
+    
+        TPtr parametersPtr = parameters->Des();
+        parametersPtr.Copy( KBrowserParameter );
+        parametersPtr.Append( KSpace );
+        parametersPtr.Append( aUri );             
+       
+        // Create BrowserLauncher
+        CBrowserLauncher* launcher = NULL;
+    
+        launcher = CBrowserLauncher::NewLC();        
+        
+        TBrowserOverriddenSettings overriddenSettings;
+        launcher->LaunchBrowserSyncEmbeddedL( *parameters, NULL, &overriddenSettings );     
+        
+        //launcher, parameters   
+        CleanupStack::PopAndDestroy( 2, parameters );
+        }
+    else
+        {
+        if ( dnloadNeeded == ERemoteImageFile )
+            {
+            RFile fileHandle; // param not going to be used
+            RFs fileSession;  // param not going to be used
+            StartDownloadingImageL( aUri,
+                                    fileSession, 
+                                    fileHandle,
+                                    EFalse, /* aSynchronous mode */
+                                    ETrue,
+                                    ETrue /* Embedded mode */ );                                     
+            }
+        else if ( dnloadNeeded == ELocalImageFile )
+            {
+            
+            TFileName fileName;
+            TInt error = KErrNone;            
+            
+            if ( GetLocalFile( aUri, fileName, *iSvgFileName ) )
+                {
+                TRAP( error, LaunchDownloadedFileL( fileName, ETrue, EFalse ) );
+                } 
+            else
+                {
+                error = KErrNotFound;               
+                }
+                
+            if ( error != KErrNone )
+                {
+                TInt resourceId;
+                resourceId = R_SVGT_FILE_NOT_FOUND;
+                // Show information note
+                HBufC* prompt = StringLoader::LoadLC( resourceId );
+                CAknInformationNote* note = 
+                        new ( ELeave ) CAknInformationNote( ETrue );
+                note->ExecuteLD( *prompt );
+
+                CleanupStack::PopAndDestroy( prompt );
+                }
+            }
+        else        
+            {           
+            return;
+            }
+        }  
+    }
+      
+    
+// --------------------------------------------------------------------
+// CSVGTAppObserverUtil::LinkActivatedWithShowL
+// Called by LinkActivatedWithShow 
+// Calls LinkActivatedL
+// --------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::LinkActivatedWithShowL( 
+    const TDesC& aUri ,
+    const TDesC& /*aShow*/ )
+    {
+    LinkActivatedL( aUri );
+    }  
+// ---------------------------------------------------------------------------
+// CSVGTAppObserverUtil::StartDownloadingImageL    
+// Called by FetchImage, LinkActivated, LinkActivatedWithShow to download the
+// image. This function calls the download manager client Api's to start the 
+// download. The download completion will be indicated by the call back 
+// HandleDownloadMgrEventL. As FetchImage is a synchronous function
+// a CActiveSchedulerWait loop is started, after starting the http download.
+// the wait loop is stopped when the call back HandleDownloadMgrEventL is 
+// called. 
+// 1. CreateDownloadAndSetAttributes
+// 2. check result
+//    If result no
+//          check the status of the download
+//          if Completed 
+//               return the filehandle
+//          if in progress 
+//               continue downloading
+//          if failed
+//               return 
+//    else
+//        Start Download
+// 3. If Synchronous
+//        Start DownloadWaitNote
+//        Start ActiveSchedulerWait.
+// 4. Return
+//              
+// parameters:
+// aUri: the hyperlink that needs to be downloaded.
+// aSession: File session in which the file handle is opened.
+// aFileHandle: Handle of the downloaded file
+// aIsSynchronous: flag indicating whether download is synchronous or not
+// aLinkFlag: Image flag to distinguish the Embeded & hyperlink.
+// aIsEmbedded: flag indicating whether downloaded file has to opened in 
+//              stand alone mode or embedded mode.
+// ---------------------------------------------------------------------------
+//
+TInt CSVGTAppObserverUtil::StartDownloadingImageL(
+                    const TDesC& aUri, 
+                    RFs& aSession, 
+                    RFile& aFileHandle,     
+                    TBool aIsSynchronous,
+                    TBool aLinkFlag,
+                    TBool aIsEmbedded )        
+    {  
+                                  
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED           
+
+     
+#if defined(__WINS__) || defined(__WINSCW__)
+    //do nothing, hard code later on
+#else
+
+    
+    TUint32 Iapid( 0 );
+    if ( !GetDefaultInetAccessPointL( Iapid ) )       
+        {            
+        return KErrNotFound;    
+        }
+        
+    
+    iDownloadMgr.SetIntAttribute( EDlMgrIap, (TInt32)Iapid );
+#endif // __wins__|| __winscw__
+
+
+#ifdef _DEBUG     
+    _LIT( setAP, "Access point set" );
+    iEikEnv->InfoMsg( setAP ); 
+#endif
+
+   
+    TInt result = ETrue;     
+    // Add lDownload to cleanup stack and pop it after CreateDownloadL.
+    CSVGTViewerAppDownloads *lDownload = CSVGTViewerAppDownloads::NewLC( 
+            aIsEmbedded, aIsSynchronous, aLinkFlag );  
+            
+    HBufC8* url8 = NULL;     
+    url8 = HBufC8::NewLC( aUri.Length() );    
+    url8->Des().Copy( aUri );                      
+              
+    lDownload->SetDownloadHandle( 
+                    &iDownloadMgr.CreateDownloadL( *url8 , result ) );
+                    
+    CleanupStack::PopAndDestroy( url8 ); // url8                                                                            
+        
+#ifdef _DEBUG    
+    _LIT(dlCreated, "download created" );
+    iEikEnv->InfoMsg( dlCreated ); 
+#endif    
+    
+            
+    // Add Downloads to the Menu Option
+    if ( !iDownloadMenuEnabled && !aIsSynchronous )
+        {
+        SetDownloadMenu( ETrue );        
+        }
+            
+    if ( !result )                           
+        {  
+          
+        // url is already being downloaded or completed
+        // Get the download State
+        TInt32 downloadState = 0;
+        TInt retval = KErrNone;
+        lDownload->DownloadHandle()->GetIntAttribute( EDlAttrState,
+                        downloadState );       
+       
+        if ( downloadState == EHttpDlCompleted )
+            {
+            TFileName fileName;
+            lDownload->DownloadHandle()->GetStringAttribute( EDlAttrDestFilename
+                            , fileName );
+            if ( aIsSynchronous )
+                {
+                retval = aFileHandle.Open( aSession, fileName, EFileShareAny );
+                }            
+            else    
+                {
+                if(aLinkFlag)
+                    {
+                    // Handle Launching downloaded file in asynchronous mode                   
+                    LaunchDownloadedFileL( fileName, aIsEmbedded , ETrue);    
+                    }
+                else
+                    {
+                    DoAssignImageDataL(lDownload, *(lDownload->DownloadHandle()));
+                    }
+                       
+                }                     
+            
+            CleanupStack::PopAndDestroy( lDownload ); // lDownload     
+            return retval;
+            }               
+        else
+            {
+            if ( downloadState == EHttpDlFailed )
+                { 
+                // Retry
+                // Add to the linked list 
+                iDownloads.AddFirst( *lDownload );               
+                CleanupStack::Pop( lDownload ); // lDownload                     
+                lDownload->DownloadHandle()->SetBoolAttribute( 
+                                   EDlAttrNoContentTypeCheck, ETrue );              
+                // Start the download       
+                lDownload->DownloadHandle()->Start();
+                
+                return KErrNone;
+                }
+            else 
+                {                             
+                                                                                  
+                if ( !FindDownload( lDownload->DownloadHandle() ) )
+                    {
+                    // Add to the linked list 
+                    iDownloads.AddFirst( *lDownload );  
+                    CleanupStack::Pop( lDownload ); // lDownload 
+                    }
+                else
+                    {
+                    CleanupStack::PopAndDestroy( lDownload ); // lDownload 
+                    }
+                }                   
+            }
+        }
+    else
+        { 
+        if ( aIsSynchronous )
+            {            
+            TFileName fileName( KEmptyString );
+            GetFileNameFromUri( aUri, fileName );               
+            LaunchWaitNoteL( R_SVGT_DOWNLOAD_WAIT_NOTE, ETrue, fileName );                        
+            }
+       if ( !aIsSynchronous )
+            {            
+            lDownload->DownloadHandle()->SetIntAttribute( EDlAttrAction, 
+                            lDownload->ImageLinkFlag() ? ELaunch : EDoNothing );             
+//                iIsFetchImageCall ? EDoNothing : ELaunch );           
+            }
+       else
+            {
+            lDownload->DownloadHandle()->SetIntAttribute( EDlAttrAction,
+                                                          EDoNothing );
+            lDownload->DownloadHandle()->SetBoolAttribute( EDlAttrSilent, 
+                                          ETrue );
+            }
+            
+       lDownload->DownloadHandle()->SetBoolAttribute( 
+                                   EDlAttrNoContentTypeCheck, ETrue );
+            
+                
+#ifdef _DEBUG                 
+        _LIT(dlCreateMsg, "result true dl created" );
+        iEikEnv->InfoMsg( dlCreateMsg ); 
+#endif        
+       
+       // Add to the linked list 
+       iDownloads.AddFirst( *lDownload ); 
+              
+       CleanupStack::Pop( lDownload ); // lDownload     
+              
+       // Start the download       
+       lDownload->DownloadHandle()->Start();
+       }
+        
+    if ( aIsSynchronous )
+        {  
+        // Start the Scheduler Wait
+        if ( !iWait.IsStarted() )
+            {
+            iWait.Start();
+            }        
+        
+#ifdef _DEBUG                         
+        _LIT(waitLoopMsg, "out of wait loop" );        
+        iEikEnv->InfoMsg( waitLoopMsg ); 
+#endif        
+        if ( iSynchronousDownloadStopped )
+            {
+            // Download dismissed
+            // Cancel the download
+            lDownload->DownloadHandle()->Delete();                    
+            return KErrCancel;     
+            }      
+
+        CSVGTViewerAppDownloads* downloadItem = NULL;
+        downloadItem = FindDownload( lDownload->DownloadHandle() );
+       
+        if ( downloadItem )
+            {
+            TInt retval = KErrNone;
+            TBool downloadCompleted = downloadItem->DownloadCompleted();                       
+            
+            if ( downloadCompleted )
+                {                
+                retval = aFileHandle.Open( aSession, 
+                                           downloadItem->FileName(), 
+                                           EFileShareAny );
+                }
+            else
+                {
+                retval = KErrNotFound;
+                }
+            
+            downloadItem->QueLink().Deque();                    
+            delete downloadItem;
+            return retval;      
+            }
+        else
+            {
+            return KErrNotFound;     
+            }
+        }
+    else
+        {      
+        return KErrNone;           
+        }
+        
+#else
+        return KErrNotFound;
+#endif      
+        
+    }   
+
+// ---------------------------------------------------------------------------
+// CSVGTAppObserverUtil::GetDefaultInetAccessPointL
+// if the return value is true, aIapId has the default Iap id.
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CSVGTAppObserverUtil::GetDefaultInetAccessPointL
+                              ( TUint32& aIapId ) const
+    {
+
+    // Try to find the default AP.
+    // The Browser may stores the default AP in the shared data.
+    CRepository* repository = CRepository::NewL( KCRUidBrowser );
+    CleanupStack::PushL( repository );
+
+    TInt wapApId = 0;
+    TRAPD( error, repository->Get( KBrowserDefaultAccessPoint, wapApId ) );
+    if ( error != KErrNone )
+        {
+#ifdef _DEBUG                         
+        TBuf<64> buffer;
+        _LIT(msg, "AP error : %d" );
+        buffer.Format( msg, error );
+        iEikEnv->InfoMsg( buffer );
+        User::After(1000000);
+#endif      
+        return EFalse;   
+        }
+    TUint32 wapApId32( wapApId );
+    TUint32 iapId32( 0 );
+    
+    CleanupStack::PopAndDestroy( repository );
+
+    CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP );
+    CleanupStack::PushL( commsDb );
+    CApDataHandler* apDataHandler = CApDataHandler::NewLC( *commsDb );
+    CApAccessPointItem* apItem = CApAccessPointItem::NewLC();
+    TRAPD( err, apDataHandler->AccessPointDataL( wapApId32, *apItem ) );
+    CApUtils* apUtils = CApUtils::NewLC( *commsDb );
+
+    TBool wapApFound( EFalse );
+    TBool iapFound( EFalse );
+    
+    if ( err == KErrNone )
+        {
+        wapApFound = ETrue;
+        }
+    else 
+        {
+        // The first valid access point has to be selected if exists
+        CApSelect* apSelect = CApSelect::NewLC
+            (
+                *commsDb, 
+                KEApIspTypeAll, 
+                EApBearerTypeAll, 
+                KEApSortNameAscending
+            );
+        if ( apSelect->MoveToFirst() )
+            {
+            wapApFound = ETrue;
+            wapApId32 = apSelect->Uid();
+            }
+        CleanupStack::PopAndDestroy( apSelect ); // apSelect
+        }
+
+    if ( wapApFound )
+        {
+        // Get the IAP ID from the WAP AP ID.
+#ifndef __SERIES60_WSP
+        iapId32 = 0;
+        TRAPD( errTransl, iapId32 = apUtils->IapIdFromWapIdL( wapApId32 ) );
+       
+        if ( errTransl == KErrNone )
+            {
+            iapFound = ETrue;
+            }
+#else
+        iapId32 = wapApId32;
+        iapFound = ETrue;
+#endif // __SERIES60_WSP
+        }
+
+    CleanupStack::PopAndDestroy( 4 ); // apUtils, apItem, 
+                                      // apDataHandler, commsDb
+
+    if ( iapFound )
+        {
+        aIapId = iapId32;
+        }
+    return iapFound;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::LaunchDownloadedFileL
+// Called by Download manager when the image is downloaded.
+// This function uses the document handler to launch the downloaded file.
+// -----------------------------------------------------------------------------
+//   
+EXPORT_C void CSVGTAppObserverUtil::LaunchDownloadedFileL( const TDesC& aFileName, 
+                                        TBool /* aIsEmbedded */,  
+                                        TBool aAllowSave ) const
+    {            
+   
+    TDataType dataType = TDataType();
+    RFile fileHandle;          
+    // Creates a sharable file handle
+    iDocHandler->OpenTempFileL( aFileName, fileHandle );                
+    CleanupClosePushL( fileHandle );        
+    if ( aAllowSave )
+        {      
+        CAiwGenericParamList& paramList = iDocHandler->InParamListL();                
+        // To show/hide save confirmation dlg
+        TAiwVariant allowSaveVariant(aAllowSave);
+        TAiwGenericParam genericParamAllowSave( EGenericParamAllowSave, 
+                                                allowSaveVariant );
+        paramList.AppendL( genericParamAllowSave );
+        
+        iDocHandler->OpenFileEmbeddedL( fileHandle, dataType, paramList );    
+        }
+    else
+        {
+        _LIT( KSvgFile, ".svg");
+        _LIT( KSvgzFile, ".svgz");
+        _LIT( KSvgbFile, ".svgb");
+        if(aFileName.Right(4) == KSvgFile || aFileName.Right(5) == KSvgzFile || aFileName.Right(5) == KSvgbFile)
+            {
+            iDocHandler->OpenFileEmbeddedL( fileHandle, dataType );  
+            }
+        else
+            {
+            iDocHandler->OpenFileL( fileHandle, dataType );           
+            }
+        }
+    CleanupStack::PopAndDestroy( &fileHandle ); // fileHandle        
+    } 
+    
+// ---------------------------------------------------------------------------
+// CSVGTAppObserverUtil::IsDownloadNeededL
+// Called by link activated(WithShow), FetchImage 
+// to check whether the uri needs a download
+// If the filename is present in the uri and if it is a html, 
+// returns ENotAnImageFile
+// If the host is present & filename is not present, 
+// returns ENotAnImageFile
+// If the host is present & filename is present, 
+// returns ERemoteImageFile
+// If the uri doesnt need a download and if it is locally available, 
+// returns ELocalImageFile 
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C CSVGTAppObserverUtil::TDownloadNeeded 
+      CSVGTAppObserverUtil::IsDownloadNeededL( 
+        const TDesC& aUri )
+    {
+
+    TUriParser UriParser;
+    
+    TBuf<KMaxFileName> localUri;
+    // url starts with www so append http://
+    if ( !aUri.Left( 4 ).Compare( KWww ) )     
+        {
+        localUri.Append( KHttp );
+        localUri.Append( aUri );
+        User::LeaveIfError( UriParser.Parse( localUri ) );   
+        }
+    else
+        {
+        User::LeaveIfError( UriParser.Parse( aUri ) );   
+        }
+    
+    if ( UriParser.IsPresent( EUriHost ) )
+        {
+        // Extract the Path, filename and extension from the uri
+        TFileName filename = UriParser.Extract( EUriPath ); 
+        TParsePtrC fileParser( filename );
+    
+        if ( fileParser.NamePresent() && fileParser.ExtPresent() )
+            {                        
+            if ( fileParser.Ext().Compare( KJpg ) == 0  ||  
+                 fileParser.Ext().Compare( KJpeg ) == 0 ||
+                 fileParser.Ext().Compare( KBmp ) == 0  ||
+                 fileParser.Ext().Compare( KPng ) == 0  ||
+                 fileParser.Ext().Compare( KSvg ) == 0  ||
+                 fileParser.Ext().Compare( KSvgz ) == 0 )
+                {
+                // file name and ext present and 
+                // it is amy of the supported image types
+                return ERemoteImageFile;         
+                }
+            else
+                {
+                //file Extension present but not a supported image ext,
+                //may be some html file
+                return ENotAnImageFile;
+                }
+            } 
+        else
+            {
+            //Should be a domain name so return ENotAnImageFile
+            return ENotAnImageFile;
+            }
+        }
+    else
+        {     
+        return ELocalImageFile;
+        }                        
+    }
+
+// ---------------------------------------------------------------------------
+// CSVGTAppObserverUtil::GetFileNameFromUri
+// This function gets the filename from the uri, 
+// Returns true if the file name is retrieved
+// Returns False if the file name could not be retrieved.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CSVGTAppObserverUtil::GetFileNameFromUri( const TDesC& aUri, 
+        TDes& aFileName ) const
+    {
+    
+    const TChar KBSlash = '/';
+    TUriParser UriParser;
+    if ( UriParser.Parse( aUri ) != KErrNone )
+        {
+        return EFalse;
+        }
+    
+    if ( UriParser.IsPresent( EUriPath ) )
+        {
+        // Extract the Path, filename and extension from the uri
+        TFileName filename = UriParser.Extract( EUriPath );        
+        
+        TParse fileParser;
+        fileParser.Set( filename, NULL, NULL );
+        
+        TInt slashPos = filename.LocateReverse( KBSlash );
+        if ( slashPos != KErrNotFound )
+            {
+            aFileName = filename.Right( filename.Length() - (slashPos + 1));
+            return ETrue;               
+            }
+        else
+            {
+            return EFalse;      
+            }      
+        
+        }
+    else
+        {
+        return EFalse;
+        }    
+    
+    }
+// ---------------------------------------------------------------------------
+// CSVGTAppObserverUtil::GetLocalFile
+// This function gets the filename  with full path from the uri, 
+// Returns true if the file name is retrieved
+// Returns False if the file name could not be retrieved.
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C TBool CSVGTAppObserverUtil::GetLocalFile( 
+        const TDesC& aUri, 
+        TDes& aFileName ,
+        const TDesC& aSvgFileName )
+    {
+    
+    TBuf<KMaxFileName> copyUri = aUri;
+    // Before giving the uri to the file parser,
+    // convert '/' to '\'.          
+    TInt pos;
+    while( KErrNotFound != ( pos = copyUri.FindF( KBSlashStr ) ) )
+        {
+        copyUri.Replace(pos,1,KSlashStr );
+        }
+
+    // if the uri starts with ".\" remove ".\"
+    if ( copyUri.Left( 2 ).Compare( KDotSlashStr ) == 0 ) 
+        {
+        copyUri = copyUri.Right( copyUri.Length() - KDotSlashStr().Length() );
+        }   
+        
+    // If the second letter is not ':' 
+    // and if it is not starting with '\',
+    // and if the path has '/',
+    // then prepend slash to it.
+    if ( copyUri.Length() >= 2 && 
+         copyUri.Mid( 1, 1 ).Compare( KColonStr ) != 0 && 
+         copyUri.Mid( 0, 1 ).Compare( KSlashStr ) != 0 &&
+         ( copyUri.Find( KSlashStr ) != KErrNotFound ) )
+        {
+        copyUri.Insert( 0, KSlashStr );
+        }       
+    
+    TParse fileParser;
+    if( fileParser.Set( copyUri, NULL, NULL ) != KErrNone )
+        {
+        return EFalse;
+        } 
+            
+    if ( fileParser.DrivePresent() )
+        {
+        // The uri is an absolute path
+        aFileName.Append( fileParser.Drive() ); 
+        // Append path, file name and extension from the uri.
+        if ( fileParser.PathPresent() )
+            {
+            aFileName.Append( fileParser.Path() );              
+            }
+        if ( fileParser.NamePresent() )
+            {
+            aFileName.Append( fileParser.Name() );              
+            }
+        if ( fileParser.ExtPresent() )
+            {
+            aFileName.Append( fileParser.Ext() );
+            }
+        RFs session;
+        TInt connectError=session.Connect();
+        if(connectError==KErrNone)
+            { 
+            RFile fileHandle;
+            TInt openError  = fileHandle.Open( session, aFileName, EFileShareReadersOnly);    
+            fileHandle.Close();
+            session.Close();
+            if ( openError != KErrNone  )
+               {
+               return EFalse;
+               } 
+            return ETrue;
+            }
+        session.Close();
+        return EFalse;         
+        }
+    else
+        {
+        
+        TParse svgFilenameParser;
+        if ( svgFilenameParser.Set( aSvgFileName,NULL,NULL ) != KErrNone )
+            {
+            return EFalse;
+            }
+        
+        if ( svgFilenameParser.DrivePresent() )
+            {
+            aFileName.Append( svgFilenameParser.Drive() );               
+            }
+        
+        TInt dotdotPos = copyUri.Find( KDotDot );
+        TInt rightPos = 0;        
+        
+        if ( dotdotPos != KErrNotFound )
+            {
+            // If ".." is present collapse it with the parent path
+            if ( svgFilenameParser.PathPresent() )
+                {                  
+                do   
+                    {
+                    if ( dotdotPos > 1 )
+                        {
+                        svgFilenameParser.AddDir( copyUri.Left(dotdotPos - 1) );
+                        }
+                                                          
+                    if ( svgFilenameParser.PopDir() != KErrNone )
+                        {
+                        return EFalse;
+                        }               
+                        
+                    rightPos = (copyUri.Length()) - (dotdotPos + 3);
+                    
+                    if ( rightPos > 0 )
+                        {                       
+                        copyUri = copyUri.Right( rightPos );    
+                        }
+                                                                                                   
+                    }while ( (dotdotPos  = copyUri.Find( KDotDot ) ) 
+                                   != KErrNotFound ); 
+                                   
+                aFileName.Append( svgFilenameParser.Path() );
+                aFileName.Append( copyUri );             
+                }
+            else
+                {
+                return EFalse;
+                }                       
+            }
+        else
+            {
+            if ( svgFilenameParser.PathPresent() )
+                {
+                aFileName.Append( svgFilenameParser.Path() );
+                }           
+        
+            // Append path, file name and extension from the uri.    
+            if ( fileParser.PathPresent() )
+                {
+                //deletes an extra slash in aFileName
+                TInt strlen = aFileName.Length();
+                if(aFileName.Mid(strlen-1).Compare(KSlashStr) == 0)
+                    {
+                    aFileName.Delete(strlen-1, 1);
+                    }
+                aFileName.Append( fileParser.Path() );              
+                }
+                                
+            if ( fileParser.NamePresent() )
+                {
+                aFileName.Append( fileParser.Name() );              
+                }
+            if ( fileParser.ExtPresent() )
+                {
+                aFileName.Append( fileParser.Ext() );
+                }
+            } 
+        RFs session;
+        // The error is caught to avoid any code scanner error
+        TInt connectError=session.Connect();
+        if(connectError==KErrNone)
+            {
+            RFile fileHandle;
+            TInt openError  = fileHandle.Open(session, aFileName, EFileShareReadersOnly );    
+            fileHandle.Close();
+            session.Close();
+            if ( openError != KErrNone  )
+                {
+                return EFalse;
+                }      
+            return ETrue;
+            }
+        session.Close();
+        return EFalse;                
+        }                                  
+    }
+               
+    
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED       
+// ---------------------------------------------------------------------------
+// CSVGTAppObserverUtil::FindDownload
+// This iterates through the linked list and return the link 
+// corresponding to the given http download handle
+// If a link is not found returns NULL.
+// ---------------------------------------------------------------------------
+//    
+CSVGTViewerAppDownloads* CSVGTAppObserverUtil::FindDownload(
+                                         const RHttpDownload* aHttpDownload )
+    {
+    CSVGTViewerAppDownloads* downloadItem;
+    TDblQueIter<CSVGTViewerAppDownloads> Iter( iDownloads );    
+    if ( !iDownloads.IsEmpty() )
+        {
+            Iter.SetToFirst();
+            while ( ( downloadItem = Iter ) != NULL )
+                {
+                if ( downloadItem->DownloadHandle() == aHttpDownload )
+                    {
+                    return downloadItem;
+                    }  
+                Iter++;
+                }            
+        }
+    return NULL;     
+    }
+#endif    
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::CSVGTAppObserverUtil
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSVGTAppObserverUtil::CSVGTAppObserverUtil( 
+            CSVGTUIDialog* aAppDialog ) :
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED
+             iDownloads( CSVGTViewerAppDownloads::LinkOffset() ) ,
+             iDownloadIter( iDownloads ),
+             iDownloadMenuEnabled( EFalse ), // construct header & iterator
+             iSynchronousDownloadStopped( EFalse ),
+#endif 
+              iAppDialog( aAppDialog ),
+              iSavingDone( EFalse ),
+              iCommandId( 0 ),
+//              iIsFetchImageCall(EFalse),
+              iTempFileUsed( EFalse ),
+              iDownloadDone( EFalse ),
+              iDownloadInProgress( EFalse )
+
+    {
+    }
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::ConstructL()
+    { 
+  
+    // Get the CEikonEnv pointer
+    iEikEnv = CEikonEnv::Static(); 
+            
+    // Find which drive this DLL is installed.
+    TFileName fileName;
+
+    // Get the full resource file
+    TParse fp;
+
+    // Add the resource dir
+    fp.Set( KResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL);
+
+    // Get the filename with full path
+    fileName = fp.FullName();
+
+    BaflUtils::NearestLanguageFile( iEikEnv->FsSession(), fileName ); //for
+                                                               // localization
+    iResourceOffset = iEikEnv->AddResourceFileL( fileName );
+
+
+    // File manager utility needed for saving/moving files.
+    iFileManager = CSVGTFileManager::NewL();
+    
+    iDocHandler = CDocumentHandler::NewL(); 
+
+#ifdef SVGTVIEWERAPP_DOWNLOADMGR_ENABLED
+    TUid hostUid = iEikEnv->EikAppUi()->Application()->AppDllUid();
+       
+    //creates a download manager session
+    //parameters - uid, mhttpdownloadmgrobserver
+    //embedded mode on - master flag True has to be passed when the app is 
+    //in stand alone mode, false in case of embedded mode
+    iDownloadMgr.ConnectL( hostUid ,*this , EFalse /* Embedded mode*/);
+    // When SVGT Viewer exits, all the downloads are 
+    // cancelled by the download manager
+    iDownloadMgr.SetIntAttribute( EDlMgrExitAction , EExitDelete );
+
+    iDMgrUiReg  = CDownloadMgrUiLibRegistry::NewL( iDownloadMgr );
+    iDMgrDownloadsList = &iDMgrUiReg->RegisterDownloadsListL();
+    iDMgrUserInteractions = &iDMgrUiReg->RegisterUserInteractionsL();
+    iDMgrUserInteractions->SetBoolAttributeL( CDownloadMgrUiUserInteractions::EAttrSuppressDownloadConfirmation,
+                                              ETrue );
+#endif  
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::ConstructL(
+                                            RFile* aFileHdlPtr,
+                                            const TDesC& aFilename, 
+                                            TBool aIsFileFullPathAvailable,
+                                            TBool aCanSaveContent,
+                                            TBool aShouldMoveContent )
+    {
+    iIsFullFilePathValid = aIsFileFullPathAvailable;
+    iCanSaveContent = aCanSaveContent;
+    iShouldMoveContent = aShouldMoveContent;
+    iSvgFileId = aFileHdlPtr;
+    if ( aIsFileFullPathAvailable )
+        {
+        iSvgFileName = aFilename.AllocL();
+        }
+    else
+        {
+        TFileName fullPathName;
+        iSvgFileId->FullName( fullPathName );
+        iSvgFileName = fullPathName.AllocL();
+        }
+    ConstructL();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::ConstructL(
+                                            RFile* aFileHdlPtr
+                                            )
+    {
+    TBuf<1> lDummyFileName; /* This is needed by ConstructL, 
+                               but will be ignored */
+    
+    ConstructL( aFileHdlPtr, 
+                lDummyFileName, 
+                EFalse /* IsFileFullPathAvailable */, 
+                ETrue  /* CanSaveContent */,
+                EFalse /* aShouldMoveContent */
+              );
+    }
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::CanShowSave
+// Tells the SVG-T dialog if the save option should be displayed.
+// e.g. If the dialog is launched from SVG-T viewer and which is launched
+// embedded from Browser/Messaging then Save option would be displayed.
+// Also when MMS launches the dialog.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSVGTAppObserverUtil::CanShowSave()
+{
+    return iCanSaveContent;
+}
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::CanShowSave
+// Tells the SVG-T dialog if saving of the content is done.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSVGTAppObserverUtil::IsSavingDone()
+{
+    return iSavingDone;
+}
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::DoSaveL
+// Performs the save operation on the content opened. 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::DoSaveL( TInt aCommandId )
+    {
+    iCommandId = aCommandId;
+    // Get filename.
+    // Run Dialog.
+    // Need to pause content
+    iAppDialog->ProcessCommandL( ESvgtDlgPauseCommand );
+
+    // Get the currently playing svg file's name and extension.    
+    HBufC* lFileNameBuf = HBufC::NewLC( KMaxFileName );
+    TPtr lFileNamePtr = lFileNameBuf->Des();
+    GetFileNameAndExt( lFileNamePtr );
+   
+ #ifndef RD_MULTIPLE_DRIVE    
+    // Get User's choice of name and folder for target file.
+    TBool retval = AknCommonDialogs::RunSaveDlgNoDirectorySelectionLD(
+        lFileNamePtr,
+        R_SVGT_SAVE_LOCATIONS );
+#else
+      
+    TBool retval = AknCommonDialogsDynMem::RunSaveDlgNoDirectorySelectionLD( 
+                                         AknCommonDialogsDynMem::EMemoryTypeRemote | 
+                                         AknCommonDialogsDynMem::EMemoryTypePhone | 
+                                         AknCommonDialogsDynMem::EMemoryTypeMMC, 
+                                         lFileNamePtr, R_SVGT_SAVE_LOCATIONS);
+#endif
+    
+    if ( retval )
+        {
+        // User chose a valid file name        
+        TBool lMoveFlag = EFalse;
+        TBuf<1> lDummyFileName;
+        RFile lDummyFile;
+        TInt errSaveContent = KErrNone;
+        TInt errSaveText = KErrNone;
+        
+        // Assume it is not the overwrite case by default
+        iIsOverwriteCase = EFalse; 
+
+        // Get the currently playing svg file's full path
+        HBufC* lFullFilePathBuf = HBufC::NewLC( KMaxFileName );
+        TPtr lFullFilePathPtr = lFullFilePathBuf->Des();
+        
+        if ( iSvgFileId )
+            {
+            iSvgFileId->FullName( lFullFilePathPtr );
+            }
+        // Check if file name is same as orig file -> overwrite case
+        if ( !( lFileNamePtr.CompareF( lFullFilePathPtr ) ) )
+            {
+            iIsOverwriteCase = ETrue;
+            }
+        CleanupStack::PopAndDestroy( lFullFilePathBuf );
+        lFullFilePathBuf = NULL;
+               
+        // Check if text edit happened
+        if ( iAppDialog->IsTextContentChanged() )
+            {
+            if ( iTempFileName )
+                {
+                delete iTempFileName;
+                iTempFileName = NULL;
+                }
+            iTempFileName = HBufC::NewL( KMaxFileName );
+            TPtr lTempFilePtr = iTempFileName->Des();
+            
+            // Indicate that cleanup is to be performed in SVGTSavingDoneL        
+            iTempFileUsed = ETrue;        
+            
+            TRAP( errSaveText, SaveSvgTextContentL( *iSvgFileId, lTempFilePtr ) );
+            
+            if ( !errSaveText )
+                {
+                // Temp file should be moved instead of
+                // original file
+                lMoveFlag = ETrue;
+
+                if ( IsAllowMove() || iIsOverwriteCase )
+                    {
+                    // Based on Move option/self overwrite case, need to close 
+                    // the content being played.           
+                    // Need to close the currently running file-handle, 
+                    // need to inform dialog to stop using it.
+                    iAppDialog->StopUsingContentFileHandle();
+                    iSvgFileId->Close(); 
+                    }
+                
+                if ( IsAllowMove() )
+                    {
+                    // Remember that the original file should 
+                    // be deleted if file save is successful.
+                    iDeleteOrigFile = ETrue;    
+                    }
+                    
+
+                TRAP( errSaveContent, SaveContentL( 
+                      lDummyFile, 
+                      lTempFilePtr,
+                      lFileNamePtr, 
+                      lMoveFlag ));            
+                }
+            }
+            else // No text editing happened
+                {
+
+                if ( IsAllowMove() || iIsOverwriteCase )
+                    {
+                    // Based on Move option/self overwrite case, need to close 
+                    // the content being played.           
+                    // Need to close the currently running file-handle, 
+                    // need to inform dialog to stop using it.
+                    iAppDialog->StopUsingContentFileHandle();
+                    iSvgFileId->Close(); 
+                    }
+                
+                if ( IsAllowMove() )
+                    {
+                    lMoveFlag = ETrue;
+                    TRAP( errSaveContent, SaveContentL( 
+                        lDummyFile, 
+                        *iSvgFileName,
+                        lFileNamePtr, 
+                        lMoveFlag ));
+                    }
+                    else
+                        {
+                        TRAP( errSaveContent, SaveContentL( 
+                            *iSvgFileId, 
+                            lDummyFileName,
+                            lFileNamePtr, 
+                            lMoveFlag ));
+                        }
+                }
+
+        CleanupStack::PopAndDestroy( lFileNameBuf );
+            
+            
+        if ( errSaveText || errSaveContent )
+            {
+            // If disk full problem, display note.
+            if ( errSaveContent == KErrDiskFull || errSaveText == KErrDiskFull )
+                {
+                // mmc full note
+                HBufC* text = StringLoader::LoadLC( R_SVGT_MMC_FULL );
+                CAknGlobalNote* note = CAknGlobalNote::NewLC();
+                note->SetSoftkeys( R_AVKON_SOFTKEYS_OK_EMPTY__OK );
+                note->ShowNoteL( EAknGlobalErrorNote, *text );
+                CleanupStack::PopAndDestroy(2);// note, text
+                }
+
+            // If temporary file was used, perform cleanup
+            if ( iTempFileUsed )
+                {
+                if ( iTempFileName )
+                    {
+                    // Try and delete the temp file, ignore the error.
+                    iEikEnv->FsSession().Delete( iTempFileName->Des() );
+                    delete iTempFileName;
+                    iTempFileName = NULL;
+                    }
+                iTempFileUsed = EFalse;
+                }
+                        
+            // If the File Couldn't be Moved, then Open the original
+            // file again and Set it back to dialog.
+            if ( IsAllowMove() )
+                {
+                if( iSvgFileId->Open(iEikEnv->FsSession(),
+                        iSvgFileName->Des(), EFileShareAny) != KErrNone )
+                    {
+                    // This should not happen, Couldn't reopen back the
+                    // Original content!, No Point in showing save.
+                    iCanSaveContent = EFalse; 
+                    return;
+                    }
+                else
+                    {
+                    iAppDialog->StartUsingContentFileHandle();
+                    }
+                }
+            }
+            else
+                {
+                LaunchWaitNoteL( R_SVGT_SAVING_WAIT_NOTE, ETrue, lDummyFileName );
+                }
+        }
+    else
+        {
+        // User pressed cancel in save dialog - cleanup
+        CleanupStack::PopAndDestroy( lFileNameBuf );
+        }
+    }
+
+EXPORT_C TInt CSVGTAppObserverUtil::NewFetchImageData( const TDesC& aUri )
+    {
+//    iIsFetchImageCall = ETrue
+    TInt ret = KErrNone;
+    
+    TDownloadNeeded downloadNeeded = ELocalImageFile;
+    TRAPD( error, downloadNeeded = IsDownloadNeededL( aUri ) );
+    
+    if ( error != KErrNone )
+        {
+        return KErrNotFound;
+        }
+    
+    if ( downloadNeeded == ELocalImageFile )
+        {
+        TFileName fileName;
+        if ( GetLocalFile( aUri, fileName, *iSvgFileName ) )
+            {
+            TRAPD(error, DoAssignLocalFileDataL( aUri, fileName ));
+            return error;
+            }
+        else
+            {
+            iAppDialog->AssignImageData(aUri , NULL );
+            return KErrNotFound;
+            }        
+        }
+    else if ( downloadNeeded == ERemoteImageFile )
+        {
+        //creatred for Dummy purpose 
+        RFs fs; 
+        RFile file;
+        
+        TRAPD( err,ret = StartDownloadingImageL( aUri, fs, file,
+                                               EFalse,
+                                               EFalse /* Asynchronous mode */) ); 
+        if ( err != KErrNone )
+            {
+            return KErrNotFound;
+            }
+        else
+            {
+            return ret;         
+            }
+        
+        }
+    else
+        {
+        return KErrNotFound;
+        }   
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::SaveContentL
+// Performs the save operation on the content opened given 
+// source file handle, src/dst filename and whether to move/copy. 
+// -----------------------------------------------------------------------------
+//
+void CSVGTAppObserverUtil::SaveContentL( RFile& aSrcFileHandle, // Used in copy
+                                         const TDesC& aSrcFileName,   // Used in move
+                                         TDes& aDstFileName,    // Dest File name
+                                         TBool aMoveFlag )      // ETrue = Move
+    {
+    TInt ret = KErrNone;        
+    // Start Saving Operation.        
+    // Create directory 
+    TInt error = iEikEnv->FsSession().MkDirAll( aDstFileName );
+    if ( error != KErrNone && error != KErrAlreadyExists )
+        {
+        User::Leave( error );
+        }
+  
+    // Check if the content should be moved. e.g. In Browser case.
+    iFileManager->SetAllowMove( aMoveFlag );
+
+    // Ask FileManager to start saving. ObserverUtil acts as
+    // observer for filemanager operations. Based on whether
+    // the Move operation is required or not,
+    // there are two versions of filecopy operations.
+    // In Move Full filepath is required
+    if ( aMoveFlag )
+        {
+        if ( IsFileFullPathAvailable() )
+            {
+            // Keep the Destination file reference.
+            if ( iSvgDstFileName )
+                {
+                delete iSvgDstFileName;
+                iSvgDstFileName = NULL;
+                }
+            iSvgDstFileName = aDstFileName.AllocL();
+
+            // Start the Move Now.
+            ret = iFileManager->StartCopyOperationL( 
+                this, aSrcFileName, aDstFileName );
+            }
+        else
+            {
+            // Shouldn't happen. If Move operation is required,
+            // Full file path must be there.
+            ret = KErrPathNotFound;  
+            }
+        }
+    else
+        {
+        ret = iFileManager->StartCopyOperationL(
+            this, aSrcFileHandle, aDstFileName );
+        }
+    User::LeaveIfError( ret );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::GetUniqueFileName
+// Generates a unique filename in the private directory
+// -----------------------------------------------------------------------------
+//
+void CSVGTAppObserverUtil::GetUniqueFileName( TDes& aName ) const
+    {
+    TFileName lPpath;
+    iEikEnv->FsSession().PrivatePath( lPpath );
+    RThread lThread;
+    _LIT( KFNameFormatStr,"%u");
+    TBuf<KSvgMaxThreadIdStr> lThreadIdStr;
+    lThreadIdStr.Format( KFNameFormatStr, (TUint)(lThread.Id()) );
+    aName.Append( lPpath );
+    aName.Append( lThreadIdStr );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::IsGzipContent
+// Checks whether the file is a GZipped content
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTAppObserverUtil::IsGzipContent( const RFile& aFileHandle ) const
+{
+    TUint8 ids[2];
+    TPtr8 des( ids, 0, sizeof( TUint8 ) * 2 );
+    TInt zero = 0;    
+    
+    // Reset to the beginning
+    aFileHandle.Seek( ESeekStart, zero );
+    
+    // Read the first two bytes
+    if ( aFileHandle.Read( des ) != KErrNone )
+        {
+        return EFalse;
+        }
+
+    // reset to start of file
+    aFileHandle.Seek( ESeekStart, zero );
+    return ( ids[0] == 31 && ids[1] == 139 );
+//    return ( ids[0] == EZGZipFile::ID1 && ids[1] == EZGZipFile::ID2 );
+}
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::SaveSvgContent
+// Saves the SVG content to a temporary file
+// -----------------------------------------------------------------------------
+//
+void CSVGTAppObserverUtil::SaveSvgTextContentL( const RFile& aSrcFileHandle,  
+    TDes& aTempFileName )
+    {
+    TFileName lTempFileName;
+
+    // Save the content path
+    HBufC* lOrigFileNameBuf = HBufC::NewLC( KMaxFileName ); 
+    TPtr lOrigFileNamePtr = lOrigFileNameBuf->Des();
+    aSrcFileHandle.FullName( lOrigFileNamePtr );
+    
+    // Create the temp file in the same drive as the content file
+    TParsePtrC lOrigPath( lOrigFileNamePtr );
+    
+    // Put the drive into the path
+    lTempFileName.Append( lOrigPath.Drive() );
+    
+    // lOrigFileNameBuf no longer needed. No more references to
+    // lOrigFileNamePtr.
+//    CleanupStack::PopAndDestroy( lOrigFileNameBuf ); 
+    
+    // Generate a unique file name
+    GetUniqueFileName( lTempFileName );
+    
+    TInt lOrigFileSize = 0;
+    TInt lFileSizeErr = aSrcFileHandle.Size( lOrigFileSize );
+    if ( lFileSizeErr )
+        {
+        User::Leave( lFileSizeErr );
+        }
+        
+    // Check whether freespace available
+    // Assume that the new file occupies same amount of space as the original 
+    // file. Not so in the case of svgz file. 
+#ifndef RD_MULTIPLE_DRIVE
+    if( lOrigPath.Drive().CompareF( PathInfo::MemoryCardRootPath().Left(2) ) 
+        == 0 )
+        {
+        if (SysUtil::MMCSpaceBelowCriticalLevelL(&(iEikEnv->FsSession()),
+            lOrigFileSize ))
+            {            
+            User::Leave( KErrDiskFull ); // MMC full, Avkon shows note
+            }
+        }
+    else
+        {
+        if (SysUtil::FFSSpaceBelowCriticalLevelL(&(iEikEnv->FsSession()),
+            lOrigFileSize ))
+            {
+            User::Leave( KErrDiskFull ); // Phone memory full, Avkon shows 
+                                         // note
+            }
+        }  
+#else
+//******************* Added to support multiple drives    *************************
+    TInt intDrive;
+    TChar ch = lOrigPath.Drive()[0];
+    
+    User::LeaveIfError( RFs::CharToDrive(ch,intDrive) );
+    
+    if( SysUtil::DiskSpaceBelowCriticalLevelL(&(iEikEnv->FsSession()),
+                                lOrigFileSize, intDrive ))
+        {
+        User::Leave( KErrDiskFull ); // MMC full, Avkon shows note
+        }
+
+//*********************************************************************************
+#endif
+    // lOrigFileNameBuf no longer needed. No more references to
+    // lOrigFileNamePtr.
+    CleanupStack::PopAndDestroy( lOrigFileNameBuf ); 
+
+    // Create the directory to the temp filename
+    TInt lDirCreateError = iEikEnv->FsSession().MkDirAll( lTempFileName  );
+    
+    // Ignore error if the directory already exists
+    if ( lDirCreateError  != KErrNone && lDirCreateError != KErrAlreadyExists )
+        {
+        User::Leave( lDirCreateError );
+        }
+    
+    // Save the changed SVG content to that file name
+    iAppDialog->SaveSvgDom( lTempFileName );
+    
+    // Check if content is gzipped
+    if ( IsGzipContent( aSrcFileHandle ) )
+        {
+        // Zip the content
+        }
+    aTempFileName = lTempFileName;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::GetFileNameAndExt
+// -----------------------------------------------------------------------------
+// 
+EXPORT_C void CSVGTAppObserverUtil::GetFileNameAndExt(TDes& filename) const
+{
+
+    // If FileName is valid use that, else check filehandle
+    // and give back file-name from that.
+    if ( iIsFullFilePathValid )
+        {
+            if ( iSvgFileName )
+                {
+                TParsePtrC p(*iSvgFileName);
+                TPtrC ptr(p.NameAndExt());
+                filename = ptr;
+                }
+        }
+    else
+        {
+            if ( iSvgFileId )
+                {
+                iSvgFileId->Name( filename );
+                }
+        }
+
+}
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::IsAllowMove
+// -----------------------------------------------------------------------------
+EXPORT_C TBool CSVGTAppObserverUtil::IsAllowMove() const
+{
+    return iShouldMoveContent;
+}
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::IsFileFullPathAvailable
+// -----------------------------------------------------------------------------
+EXPORT_C TBool CSVGTAppObserverUtil::IsFileFullPathAvailable() const
+    {
+    return 1;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::LauncWaitNoteL
+// -----------------------------------------------------------------------------
+//
+void CSVGTAppObserverUtil::LaunchWaitNoteL(TInt aResourceId, 
+        TBool aVisibilityDelayOff, const TDesC& aFileName )
+    {
+  
+    delete iWaitNote;
+    iWaitNote = NULL;
+    iProgressInfo = NULL;
+    
+    if ( aResourceId == R_SVGT_DOWNLOAD_WAIT_NOTE )
+        {
+        iWaitNote = new (ELeave) CAknWaitDialog( (CEikDialog**)&iWaitNote, 
+                                                      aVisibilityDelayOff );
+        iWaitNote->PrepareLC(aResourceId);  
+        
+        TInt resourceId = R_SVGT_DOWNLOADING_FILE;
+        HBufC* downloadMsg = StringLoader::LoadLC( resourceId );
+        
+        TBuf<KMaxFileName> titleString;                
+        titleString.Append( downloadMsg->Des() );
+        
+        CleanupStack::PopAndDestroy( downloadMsg ); // downloadMsg
+        
+        // Add a force line feed to the note: 
+        // qtn_svgt_waiting_downloading [ Downloading file ],
+        // and the note will read like this:
+        //     Downloading file
+        //     filename
+        titleString.Append( KNewLineStr );
+       
+        // Append the filename
+        titleString.Append( aFileName );
+        
+        iWaitNote->SetTextL( titleString );
+        
+        iWaitNoteState = EDownloadImageWait;                                              
+        }
+    else if ( aResourceId == R_SVGT_SAVING_WAIT_NOTE )
+        {
+        iWaitNote = new (ELeave) CAknProgressDialog( (CEikDialog**)&iWaitNote, 
+                                                      aVisibilityDelayOff );
+        iWaitNote->PrepareLC(aResourceId);
+        iProgressInfo = iWaitNote->GetProgressInfoL();
+        iProgressInfo->SetFinalValue( KSVGTPercent );
+        iWaitNoteState = ESaveFileWait;                                              
+        }
+    else
+        {
+        return;
+        }
+  
+    if ( iWaitNote ) 
+        {
+        iWaitNote->SetCallback(this);
+        iWaitNote->RunLD();
+        }    
+    else
+        {
+        return;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::DialogDismissedL
+// This is for CAknWaitDialog callback
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::DialogDismissedL( TInt aButtonId )
+    {
+    
+    switch (aButtonId)
+        {
+        case EAknSoftkeyQuit:
+            {
+            if ( iWaitNoteState == ESaveFileWait )
+                {
+                // Handle Save Cancel
+                iFileManager->CancelCopy();            
+                // Resume the presentation
+                iAppDialog->ProcessCommandL( iCommandId );      
+                }
+            else if ( iWaitNoteState == EDownloadImageWait )
+                {
+                if ( iWait.IsStarted() )
+                    {
+                    iSynchronousDownloadStopped = ETrue;
+                    iWait.AsyncStop();                              
+                    }    
+                }
+                else
+                    {
+                    return;
+                    }
+            break;          
+            }
+        default:
+            break;
+        }                  
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::SVGTSavingDoneL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::SVGTSavingDoneL( TInt aError )
+    {
+#ifdef SVGTVIEWERAPP_DBG_FLAG    
+    TBuf<40> msg;
+    _LIT( errorMsg, "Save Done Err %d" );
+    msg.Format(errorMsg, aError );
+    PrintDebugMsg( msg );
+#endif       
+    // If temporary file was used then, perform cleanup
+    if ( iTempFileUsed )
+        {
+        if ( iTempFileName )
+            {
+            iEikEnv->FsSession().Delete( iTempFileName->Des() );
+            delete iTempFileName;
+            iTempFileName = NULL;
+            }
+        iTempFileUsed = EFalse;            
+        }
+    
+    // Indicate to the dialog about the save completion
+    iAppDialog->SaveComplete( aError );
+    
+    if ( !aError )
+        {
+        iSavingDone = ETrue;
+        }
+        
+    if( iWaitNote )
+        {
+        if ( !aError && iProgressInfo )
+            {
+            iProgressInfo->SetAndDraw( KSVGTPercent );
+            }
+        iWaitNote->ProcessFinishedL();      
+        delete iWaitNote;
+        iWaitNote = NULL;    
+    
+#ifdef SVGTVIEWERAPP_DBG_FLAG        
+        _LIT( errorMsg, "Proc Finished called" );        
+        PrintDebugMsg( errorMsg() );  
+#endif          
+          
+        }
+           
+    if ( !aError )
+        {
+
+        // "saved" note
+        HBufC* text = StringLoader::LoadLC(R_SVGT_CLIP_SAVED);
+        CAknInformationNote* dlg = new (ELeave) CAknInformationNote( ETrue );
+        dlg->ExecuteLD(*text);
+        CleanupStack::PopAndDestroy( text );  // text   
+
+        
+        }
+    else
+        {
+        iEikEnv->HandleError( aError );
+        }
+    
+    // If move allowed or it is the overwriting self case then             
+    if ( IsAllowMove() || iIsOverwriteCase )
+        {
+        if ( !aError )
+            {
+            // No error occurred
+            
+            // File has been moved and source
+            // deleted hence don't show save now.    
+            iCanSaveContent = EFalse; 
+            // If It was Move operation, then Open the new file
+            // and give the handle to dialog.
+            if ( iSvgFileId->Open(iEikEnv->FsSession(),
+                 iSvgDstFileName->Des(), EFileShareAny) != KErrNone )
+                {
+                // Shouldn't happen. 
+                return;
+                }
+            else
+                {
+                iAppDialog->StartUsingContentFileHandle();
+                }
+            }
+        else // Error occurred while saving, try to recover
+            {
+            // If it was Move Operation, and failed, then Open
+            // Original Source file again and give the handle to
+            // dialog. Note this could fail potentially as the
+            // original file could have been deleted.
+            if ( iSvgFileId->Open(iEikEnv->FsSession(),
+                 iSvgFileName->Des(), EFileShareAny) != KErrNone )
+                {
+                //Inconsistent state, can't show save also.
+                iCanSaveContent = EFalse; 
+                return;
+                }
+            else
+                {
+                // Can keep showing the save option still.
+                iAppDialog->StartUsingContentFileHandle();
+                }
+            }
+        }
+    
+    if ( !aError )
+        {
+        if ( iDeleteOrigFile )
+            {
+            iEikEnv->FsSession().Delete( iSvgFileName->Des() );
+            iSvgFileName->Des().Zero();
+            }
+        // Pass the command id back to UiDialog
+        iAppDialog->ProcessCommandL( iCommandId );  
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::SVGTPositionChanged
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTAppObserverUtil::SVGTPositionChanged(TInt aPosition)
+    {
+    if (iWaitNote && iProgressInfo)
+        {
+        iProgressInfo->SetAndDraw(aPosition);
+        }
+    /*
+    else if (iFullScreen)
+        {
+        TRAPD(ignore, iContainer->UpdateBufferingL(aPosition) ); 
+        } // (L961)
+        */
+    }
+   
+#ifdef SVGTVIEWERAPP_DBG_FLAG    
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::PrintDebugMsg
+// -----------------------------------------------------------------------------
+//
+void CSVGTAppObserverUtil::PrintDebugMsg( const TDesC&  aMsg )
+    {
+#ifdef _DEBUG
+    RFileLogger::Write( KFileLoggingDir, KFileLog, 
+                        EFileLoggingModeAppend, aMsg );
+#endif    
+    }
+#endif
+
+// -----------------------------------------------------------------------------
+// CSVGTAppObserverUtil::DoAssignImageDataL
+// Reads the downloaded file & gives data to the svg engine.
+// -----------------------------------------------------------------------------
+//
+void CSVGTAppObserverUtil::DoAssignImageDataL(const CSVGTViewerAppDownloads* aDownloadItem,
+                                                RHttpDownload& aDownload)
+    {
+    if( aDownloadItem && !aDownloadItem->ImageLinkFlag() )
+        {
+        TFileName lFileName;
+        // Get the file path of the downloaded file
+        aDownload.GetStringAttribute( EDlAttrDestFilename, lFileName );
+
+        TInt lFileSize = 0;
+        RFile lSvgFile;
+        // Attempt to open the file in read mode
+        User::LeaveIfError( lSvgFile.Open(iEikEnv->FsSession(),lFileName,EFileRead ) );
+        
+        // Save on cleanup stack
+        CleanupClosePushL( lSvgFile );
+        
+        // Get the size of the data to create read buffer
+        User::LeaveIfError( lSvgFile.Size(lFileSize) );
+        
+        // Create buffer that will contain the file data
+        HBufC8* lFileData = HBufC8::NewLC(lFileSize);
+        TPtr8 lFileDataPtr(lFileData->Des());
+        
+        // Read from the file
+        User::LeaveIfError( lSvgFile.Read(lFileDataPtr) );
+        
+        // Create buffer to store the URI of the file
+        HBufC* lUriBuf = HBufC::NewLC( KMaxUrlLength );
+        TPtr lUriPtr(lUriBuf->Des());
+        
+        // Get the URI from data structure
+        aDownload.GetStringAttribute( EDlAttrReqUrl, lUriPtr ); 
+        
+        // Call the AssignImageData function
+        // Mapping is maintained between URI <-> FileData
+        iAppDialog->AssignImageData(lUriPtr , lFileData );
+        
+        CleanupStack::PopAndDestroy( lUriBuf );
+        CleanupStack::Pop( lFileData );
+        CleanupStack::PopAndDestroy(&lSvgFile); // lSvgFile.Close()
+        }
+    }
+
+void CSVGTAppObserverUtil::DoAssignLocalFileDataL( const TDesC& aOriginalUri, 
+                                                   const TDesC& aNewUri ) const
+    {
+    TInt lFileSize = 0;
+    TBuf<KMaxPath>lFileName;
+    lFileName.Copy(aNewUri);
+    RFile lSvgFile;
+    // Attempt to open the file in read mode
+    User::LeaveIfError( lSvgFile.Open(iEikEnv->FsSession(),lFileName,EFileRead ) );
+    
+    // Save on cleanup stack
+    CleanupClosePushL( lSvgFile );
+    
+    // Get the size of the data to create read buffer
+    User::LeaveIfError( lSvgFile.Size(lFileSize) );
+    // Create buffer that will contain the file data
+    HBufC8* lFileData = HBufC8::NewLC(lFileSize);
+    TPtr8 lFileDataPtr(lFileData->Des());
+    // Read from the file
+    User::LeaveIfError( lSvgFile.Read(lFileDataPtr) );
+    
+    // Call the AssignImageData function
+    // Mapping is maintained between URI <-> FileData
+    iAppDialog->AssignImageData(aOriginalUri , lFileData );
+    
+    CleanupStack::Pop( lFileData );
+    CleanupStack::PopAndDestroy(&lSvgFile); // lSvgFile.Close()
+    }
+
+EXPORT_C void CSVGTAppObserverUtil::AssignEmbededDataL( const TDesC& aUri )
+    {
+    HBufC8* decoded = DoGetProcessedEmbededDataL( aUri );
+    if ( decoded )
+        {
+        iAppDialog->AssignImageData( aUri, decoded );
+        }
+    }
+    
+HBufC8* CSVGTAppObserverUtil::DoGetProcessedEmbededDataL( const TDesC& aXlinkHrefValue ) const
+    {
+    HBufC8* retPtr = NULL;
+    // find positions for ';' and ',' to determine encoding, mimetype
+    TInt startIndex = aXlinkHrefValue.Locate( ';' );
+    TInt endIndex = aXlinkHrefValue.Locate( ',' );
+
+    // mimetype is after 'data:' : xlink:href="data:image/png;base64,
+    // ignore mimetype extraction, decode will detect mimetype from decoded data.
+
+    if (    startIndex != KErrNotFound && 
+            endIndex != KErrNotFound &&
+            startIndex < endIndex )
+        {
+        // extract encoding type
+        TPtrC encoding( aXlinkHrefValue.Left( endIndex ).Right( endIndex - startIndex - 1 ) );
+        // handle Base64 encoding
+        _LIT( KEncodingBase64, "base64" );
+        if ( encoding == KEncodingBase64 )
+            {
+            // find index of first character after white-space
+            TInt index = endIndex + 1;
+            while ( index < aXlinkHrefValue.Length() && TChar( aXlinkHrefValue[index] ).IsSpace() )
+            index++;
+
+            // must be 8-bit
+            TInt length = aXlinkHrefValue.Length() - index;
+            HBufC8* encoded = HBufC8::NewLC( length );
+            encoded->Des().Copy( aXlinkHrefValue.Right( length ) );
+
+            HBufC8* decoded = HBufC8::NewLC( length );
+            TPtr8 decodedDes = decoded->Des();
+
+            // decode
+            TImCodecB64 encodingBase64;
+            TInt decodeError = encodingBase64.Decode( *encoded, decodedDes );
+
+            // Cleanup
+            CleanupStack::Pop( decoded ); // encoded, decoded
+            CleanupStack::PopAndDestroy( encoded ); 
+            //delete encoded;
+
+            // Check for decoding error
+            if ( decodeError != KErrNone )
+                {
+                delete decoded;
+                }
+            else
+                {
+                retPtr = decoded;
+                }
+            }
+        }
+    return retPtr;
+    }
+    TBool CSVGTAppObserverUtil::ExitWhenOrientationChange()
+    {
+    	return EFalse;
+    }
+
+//  End of File     
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppObserverUtilSrc/SVGTFileManager.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,370 @@
+/*
+* Copyright (c) 2004, 2005 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:  File operations, used when "Save" option is selected.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include <flogger.h>
+#include <eikenv.h>
+#include <pathinfo.h>
+#include <sysutil.h>
+
+#include "SVGTViewerAppDbgFlags.hrh"
+#include "SVGTFileManager.h"
+#include "SVGTUISaveListener.h"
+
+
+#ifdef SVGTVIEWERAPP_DBG_FLAG    
+_LIT( KFileLoggingDir, "SVGTViewer" );
+_LIT( KFileLog, "SaveLog.txt" );
+#endif
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::CSVGTFileManager
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSVGTFileManager::CSVGTFileManager() : CActive(0)
+    {
+    }
+
+    
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSVGTFileManager::ConstructL()
+    {
+    iEikEnv = CEikonEnv::Static();    
+    iFileMan = CFileMan::NewL( iEikEnv->FsSession(),this );
+    iProgressUpdater =  CPeriodic::NewL( 0 );
+    // Add this active object to the scheduler.
+    CActiveScheduler::Add( this );    
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSVGTFileManager* CSVGTFileManager::NewL()
+    {
+    CSVGTFileManager* self = new( ELeave ) CSVGTFileManager();   
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::~CSVGTFileManager   
+// Destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSVGTFileManager::~CSVGTFileManager()
+    {
+    delete iFileMan;
+    delete iProgressUpdater;
+    // Reset the callback implementation pointer
+    iCallback = NULL;
+    // Reset the environment pointer
+    iEikEnv = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::StartCopyOperationL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CSVGTFileManager::StartCopyOperationL( 
+    MSVGTUISaveListener* aCallback, const TDesC& anOld, const TDesC& aNew )
+    {
+    if (IsActive())
+        {
+        return KErrInUse;
+        }
+
+    iPosition = 0;
+    iCancel = EFalse;
+    RFile lFile;
+    TInt RetVal = KErrNone;//return value
+    iCallback = aCallback;   
+    RetVal = lFile.Open(iEikEnv->FsSession(),anOld, EFileRead); 
+    if ( RetVal != KErrNone)
+        {
+        // if there was a problem opening this file then this should return here 
+        //itself. Or else RTIY-6JNVHS error would occur.
+        return RetVal ;
+        } 
+    lFile.Size(iFileSize);//get the file size into iFileSize
+    lFile.Close();//no filehandle should be open while doing a "move"        
+     
+   
+#ifdef SVGTVIEWERAPP_DBG_FLAG    
+    _LIT( errorMsg2, "Size read");   
+    PrintDebugMsg( errorMsg2 );
+#endif
+        
+    // Check disk space
+    TParsePtrC parse(aNew);
+
+#ifndef RD_MULTIPLE_DRIVE
+    if( parse.Drive().CompareF( PathInfo::MemoryCardRootPath().Left(2) ) == 0 )
+        {
+        if (SysUtil::MMCSpaceBelowCriticalLevelL(&(iEikEnv->FsSession()),iFileSize))
+            {            
+            return KErrDiskFull; // UI shows note
+            }
+        }
+    else
+        {
+        if (SysUtil::FFSSpaceBelowCriticalLevelL(&(iEikEnv->FsSession()),iFileSize))
+            {
+            User::Leave(KErrDiskFull); // Phone memory full, Avkon shows note
+            }
+        }  
+#else
+//********************** Added the support for multiple drive ************************
+    TInt intDrive;
+    TChar ch = parse.Drive()[0];
+    
+    User::LeaveIfError( RFs::CharToDrive(ch,intDrive) );
+    
+    if( SysUtil::DiskSpaceBelowCriticalLevelL(&(iEikEnv->FsSession()),
+                                iFileSize, intDrive ))
+        {
+        User::Leave( KErrDiskFull); // Disk full, Avkon shows note
+        }
+    
+//************************************************************************************        
+
+#endif    
+
+    // start copying
+    if( iMove )
+        {
+        User::LeaveIfError(
+            iFileMan->Move(anOld,aNew,CFileMan::EOverWrite,iStatus));
+        }
+    
+    if ( !iProgressUpdater->IsActive() )
+        {
+        // start progress updater
+        iProgressUpdater->Start(KSVGTOneSecond,KSVGTOneSecond, 
+                    TCallBack(CSVGTFileManager::ProgressUpdate, this));
+
+        }    
+    
+   
+    SetActive();
+
+    return RetVal;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::StartCopyOperationL
+//   Overloaded version with RFile Input.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CSVGTFileManager::StartCopyOperationL( 
+    MSVGTUISaveListener* aCallback, RFile& aSrcHandle, const TDesC& aNew )
+    {
+    TFileName sourceFileName;
+    aSrcHandle.FullName( sourceFileName );
+    aSrcHandle.Size(iFileSize);
+    if ( iMove )
+        {
+        aSrcHandle.Close();
+        return StartCopyOperationL( aCallback, sourceFileName, aNew );   
+        }
+    else
+        {
+    
+        if (IsActive())
+            {
+            return KErrInUse;
+            }
+
+        iPosition = 0;
+        iCancel = EFalse;
+
+        iCallback = aCallback;   
+            
+        
+        // Check disk space
+        TParsePtrC parse(aNew);
+
+#ifndef RD_MULTIPLE_DRIVE
+        if( parse.Drive().CompareF( PathInfo::MemoryCardRootPath().Left(2) ) == 0 )
+            {
+            if (SysUtil::MMCSpaceBelowCriticalLevelL(&(iEikEnv->FsSession()),iFileSize))
+                {       
+                return KErrDiskFull; // UI shows note
+                }
+            }
+        else
+            {
+            if (SysUtil::FFSSpaceBelowCriticalLevelL(&(iEikEnv->FsSession()),iFileSize))
+                {
+                User::Leave(KErrDiskFull); // Phone memory full, Avkon shows note
+                }
+            }  
+#else
+//********************** Added the support for multiple drive ************************
+    TInt intDrive;
+    TChar ch = parse.Drive()[0];
+    
+    User::LeaveIfError( RFs::CharToDrive(ch,intDrive) );
+    
+    if( SysUtil::DiskSpaceBelowCriticalLevelL(&(iEikEnv->FsSession()),
+                                iFileSize, intDrive ))
+        {
+        User::Leave( KErrDiskFull); // Disk full, Avkon shows note
+        }
+    
+//************************************************************************************        
+
+#endif 
+        
+        User::LeaveIfError(
+                iFileMan->Copy(aSrcHandle,aNew,CFileMan::EOverWrite,iStatus));
+          
+        
+        if ( !iProgressUpdater->IsActive() )
+            {
+            // start progress updater
+            iProgressUpdater->Start(KSVGTOneSecond,KSVGTOneSecond, 
+                        TCallBack(CSVGTFileManager::ProgressUpdate, this));
+
+            } 
+        SetActive();
+        return KErrNone;
+
+        }       
+    }
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::DoCancel
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTFileManager::CancelCopy()
+    {
+    iCancel = ETrue;
+    iProgressUpdater->Cancel();
+    Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::SetAllowMove
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSVGTFileManager::SetAllowMove( TInt32 aValue )
+    {
+    iMove = aValue; 
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::RunL
+// -----------------------------------------------------------------------------
+//
+void CSVGTFileManager::RunL() 
+    {   
+    iProgressUpdater->Cancel();
+
+    if (iCallback)
+        {
+        if (iCancel)
+            {
+            iCallback->SVGTSavingDoneL(KErrCancel);
+            }
+        else
+            {
+            iCallback->SVGTSavingDoneL(iStatus.Int());
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::NotifyFileManOperation
+// -----------------------------------------------------------------------------
+//
+MFileManObserver::TControl CSVGTFileManager::NotifyFileManOperation()
+    {
+    if (iCancel)
+        {
+        return MFileManObserver::ECancel;
+        }
+#ifdef SVGTVIEWERAPP_DBG_FLAG    
+    TBuf<40> msg;
+    _LIT( errorMsg, "NotifyFileManOperation %d");
+    msg.Format(errorMsg, iFileMan->BytesTransferredByCopyStep() );
+    PrintDebugMsg( msg );
+#endif    
+    iPosition += iFileMan->BytesTransferredByCopyStep();
+    return MFileManObserver::EContinue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CSVGTFileManager::DoCancel()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::ProgressUpdate
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTFileManager::ProgressUpdate(TAny* aPtr)
+    {
+    if ( aPtr )
+        {
+        static_cast<CSVGTFileManager*>(aPtr)->DoProgressUpdate();        
+        }
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::DoProgressUpdate
+// -----------------------------------------------------------------------------
+//
+void CSVGTFileManager::DoProgressUpdate()
+    {
+    if (iCallback)
+        {    
+        iCallback->SVGTPositionChanged((iPosition*KSVGTPercent)/iFileSize);
+        }
+    }
+#ifdef SVGTVIEWERAPP_DBG_FLAG    
+// -----------------------------------------------------------------------------
+// CSVGTFileManager::PrintDebugMsg
+// -----------------------------------------------------------------------------
+//
+void CSVGTFileManager::PrintDebugMsg( const TDesC&  aMsg )
+    {
+#ifdef _DEBUG        
+    RFileLogger::Write( KFileLoggingDir, KFileLog, 
+                        EFileLoggingModeAppend, aMsg );
+#endif    
+    }
+#endif    
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppObserverUtilSrc/SVGTViewerAppDownloads.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2004,2005 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:  This class defines the downloads and the required attributes. 
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32std.h>                                    // TFileName
+
+#include "SVGTViewerAppDownloads.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSVGTViewerAppDownloads* CSVGTViewerAppDownloads::NewL( 
+        TBool aIsEmbedded, 
+        TBool aIsSynchronous,
+        TBool aLinkFlag )
+
+    {
+    CSVGTViewerAppDownloads* self = CSVGTViewerAppDownloads::NewLC( 
+                    aIsEmbedded, aIsSynchronous, aLinkFlag);
+    CleanupStack::Pop( self );
+    return self;
+   
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSVGTViewerAppDownloads* CSVGTViewerAppDownloads::NewLC( 
+            TBool aIsEmbedded, 
+            TBool aIsSynchronous ,
+            TBool aLinkFlag )
+
+    {
+    CSVGTViewerAppDownloads* self =   new( ELeave ) CSVGTViewerAppDownloads( 
+                    aIsEmbedded, aIsSynchronous, aLinkFlag );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------    
+// Destructor
+// -----------------------------------------------------------------------------
+CSVGTViewerAppDownloads::~CSVGTViewerAppDownloads()
+    {    
+    // Reset the Http Download Handle as it is owned by caller
+    iHttpDownload = NULL;
+    }
+// -----------------------------------------------------------------------------    
+// CSVGTViewerAppDownloads::LinkOffset()
+// -----------------------------------------------------------------------------
+TInt CSVGTViewerAppDownloads::LinkOffset()
+    {
+    return _FOFF(CSVGTViewerAppDownloads,iLink);
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::FileName
+// Returns the file name associated with the download.
+// -----------------------------------------------------------------------------
+//
+TFileName CSVGTViewerAppDownloads::FileName() const
+    {
+    return iFileName;
+    }
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::EmbeddedMode
+// Returns the EmbeddedMode flag associated with the download.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppDownloads::EmbeddedMode() const
+    {
+    return iEmbeddedMode;
+    }
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::SynchronousMode
+// Returns the SynchronousMode flag associated with the download.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppDownloads::SynchronousMode() const
+    {
+    return iSynchronousMode;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::DownloadCompleted
+// Returns the DownloadCompleted flag associated with the download.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppDownloads::DownloadCompleted() const
+    {
+    return iDownloadCompleted;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::QueLink
+// This Function returns the download handle associated with the download
+// -----------------------------------------------------------------------------
+//
+TDblQueLink CSVGTViewerAppDownloads::QueLink() const
+    {
+    return iLink;
+    }
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::Download
+// This Function returns the download handle associated with the download
+// -----------------------------------------------------------------------------
+//
+RHttpDownload* CSVGTViewerAppDownloads::DownloadHandle()
+    {
+    return iHttpDownload;
+    }
+
+TBool CSVGTViewerAppDownloads::ImageLinkFlag() const
+    {
+    return iImageLinkFlag;
+    }    
+    
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::SetFileName
+// This Function Sets the filename associated with the download
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppDownloads::SetFileName( const TDesC& aFileName )
+    {
+    iFileName = aFileName;
+    }
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::SetEmbeddedMode
+// This function sets the EmbeddedMode flag associated with the download.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppDownloads::SetEmbeddedMode( TBool aEmbeddedMode ) 
+    {
+    iEmbeddedMode = aEmbeddedMode;
+    }
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::SetSynchronousMode
+// This function sets the SynchronousMode flag associated with the download.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppDownloads::SetSynchronousMode( TBool aSynchronousMode ) 
+    {
+    iSynchronousMode = aSynchronousMode;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::SetDownloadCompleted
+// This function sets the Downloadcompleted flag associated with the download.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppDownloads::SetDownloadCompleted( TBool aDownloadCompleted ) 
+    {
+    iDownloadCompleted = aDownloadCompleted;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::SetDownloadHandle
+// This function sets the Download handle associated with the download.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppDownloads::SetDownloadHandle( RHttpDownload* aDownloadHandle ) 
+    {
+    iHttpDownload = aDownloadHandle;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::SetImageLinkFlag
+// Image flag to distinguish the Embeded & hyperlink.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppDownloads::SetImageLinkFlag(TBool aLinkFlag)
+    {
+    iImageLinkFlag = aLinkFlag;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::CSVGTViewerAppDownloads
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSVGTViewerAppDownloads::CSVGTViewerAppDownloads( TBool aIsEmbedded,
+                    TBool aIsSynchronous , TBool aLinkFlag ) : 
+                             iEmbeddedMode( aIsEmbedded ), 
+                             iSynchronousMode( aIsSynchronous ),
+                             iDownloadCompleted( EFalse ),
+                             iImageLinkFlag(aLinkFlag)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDownloads::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppDownloads::ConstructL()
+    {
+    }
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppSrc/SVGTViewerApp.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2004,2005 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:  Application Entry point for SVGT Viewer App.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "SVGTViewerAppApplication.h"
+
+// -----------------------------------------------------------------------------
+// NewApplication implements...
+// Creates the SVGT Viewer Application.
+// -----------------------------------------------------------------------------
+//
+LOCAL_C CApaApplication* NewApplication()
+    {
+    return ( static_cast<CApaApplication*>( new CSVGTViewerAppApplication ) );
+    }
+
+// -----------------------------------------------------------------------------
+// E32Main implements...
+// Executable entry point.
+// -----------------------------------------------------------------------------
+//
+GLDEF_C TInt E32Main()
+    {
+    return EikStart::RunApplication( NewApplication );
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppSrc/SVGTViewerAppAppUi.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,686 @@
+/*
+* Copyright (c) 2004,2005 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:  AppUI for SVGT Viewer App.
+*
+*/
+
+
+#include <eikapp.h>
+#include <avkon.hrh>
+#include <aknnotewrappers.h>
+#include <w32std.h>                                        // RWsSession 
+#include <e32std.h> 
+#include <ctsydomainpskeys.h>                              // For call handling
+#include <e32property.h>
+#include <StringLoader.h>
+#include <coeutils.h>
+#include <SVGTViewerApp.rsg>
+#include <SVGTAppObserverUtil.h>
+#include "SVGTViewerAppDbgFlags.hrh"
+#include "SVGTViewerAppAppUi.h"
+#include "SVGTViewerAppDocument.h"
+#include "SVGTViewerApp.pan"
+#include "SVGTUIDialog.h"
+#include "SVGTViewerApp.hrh"
+
+
+#include "SvgtViewerAppView.h"
+
+#ifdef RD_MULTIPLE_DRIVE    
+#include <pathinfo.h>
+#include <driveinfo.h>
+#endif
+// Constants
+
+#ifdef SVGTVIEWERAPP_DBG_OPEN_HARDCODE_FILE
+_LIT(KDummyTstFileName, "c:\\data\\images\\01-guide.svg");
+#endif
+
+// Constant for periodic timer
+const TInt KOneMicroSec = 1;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::CSVGTViewerAppAppUi
+// Default Constructor for CSVGTViewerAppAppUi.
+// -----------------------------------------------------------------------------
+//
+CSVGTViewerAppAppUi::CSVGTViewerAppAppUi()             
+    {
+    // No implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::ConstructL
+// Second Phase constructor for CSVGTViewerAppAppUi.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppAppUi::ConstructL()
+    {
+    BaseConstructL( EAknEnableSkin|EAknEnableMSK );    // Enable skin support and MSK label 
+    												  // for this Application    												
+                                   
+    ResetEmbeddedAppRunning(); //By default, there are no embedded app started.    
+
+    iContainer = new (ELeave) CSvgtViewerAppView;
+    iContainer->ConstructL(ClientRect());
+	// add container to stack; enables key event handling.
+	AddToStackL(iContainer);
+    
+#ifndef SVGTVIEWERAPP_DBG_OPEN_HARDCODE_FILE    
+    // Launch file only in non-hardcoded option.
+    // Start an idle timer to start the dialog synchronously.
+    iIdleTimer = CPeriodic::NewL(CActive::EPriorityIdle);
+    // Using the periodic timer so that active object for
+    // open file service gets a chance to execute
+    iIdleTimer->Start(KOneMicroSec, KOneMicroSec, 
+        TCallBack(CallBackFuncL,this));
+#endif    
+    }
+    
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+CSVGTViewerAppAppUi::~CSVGTViewerAppAppUi()
+    {
+    iAppDialog = NULL; 
+    iAppObserver = NULL;      
+    if ( iIdleTimer )
+        {
+        delete iIdleTimer;
+        iIdleTimer = NULL;
+        }
+
+	RemoveFromStack(iContainer);
+    delete iContainer;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::HandleCommandL
+// Reimplements CAknAppUi::HandleCommandL inorder to handle commands.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppAppUi::HandleCommandL( TInt aCommand )
+    {
+#ifdef SVGTVIEWERAPP_DBG_OPEN_HARDCODE_FILE        
+    TFileName fileName;     
+#endif    
+    switch ( aCommand )
+        {
+        case EEikCmdExit:
+        case EAknSoftkeyExit:
+            Exit();
+            break;
+        case ESVGTViewerAppCommand1:
+#ifdef _DEBUG
+            iEikonEnv->InfoMsg( _L( "not implemented" ) );
+#endif
+#ifdef SVGTVIEWERAPP_DBG_OPEN_HARDCODE_FILE            
+            fileName.Append( KDummyTstFileName );
+            OpenFileL( fileName );
+#endif        
+            break;
+
+        default:           
+            break;
+        }
+    }
+
+
+
+
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::OpenFileL
+// Reimplements CAknAppUi::OpenFileL inorder to provide for opening SVG 
+// content through doc handler.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppAppUi::OpenFileL( 
+    RFile& aFileHandle ) // File Handle to 
+                         // SVGT content
+    {
+    // Display an info note if a video call is in progress.
+    // SVG content cannot be displayed in this case.    
+    if ( IsVideoCall() )
+        {
+        HBufC* text = StringLoader::LoadLC( 
+                R_SVGT_VIEWER_INFO_VIDEO_CALL_ONGOING );
+        CAknInformationNote* dlg = new (ELeave) CAknInformationNote( ETrue );
+        dlg->ExecuteLD( text->Des() );
+        CleanupStack::PopAndDestroy( text );  // text
+        Exit();
+        }
+    
+    TRAPD( err, iAppDialog = CSVGTUIDialog::NewL() );
+    
+    if ( err != KErrNone )
+        {
+        // Reset the pointer to dialog
+        iAppDialog = NULL;
+        iEikonEnv->HandleError( err );
+        Exit();
+        }
+
+    // Get the File's fullpath, Handle and pass it to App Observer Util. 
+    TFileName filename;
+    CSVGTViewerAppDocument *appDocument = 
+            static_cast< CSVGTViewerAppDocument* >(iDocument);
+
+    if ( appDocument->IsFileFullPathAvailable() )
+        {
+        appDocument->GetFileFullPath(filename);
+        }
+
+    TRAP( err, iAppObserver = CSVGTAppObserverUtil::NewL( iAppDialog,
+                                     &aFileHandle, 
+                                     filename,
+                                     appDocument->IsFileFullPathAvailable(),
+                                     CanShowSave(),
+                                     ShouldMoveContent()) );
+    if ( err != KErrNone )
+        {
+        // Delete the dialog
+        delete iAppDialog;
+        // Reset the dialog pointer
+        iAppDialog = NULL;
+        // Reset the App Observer Pointer
+        iAppObserver = NULL;
+        iEikonEnv->HandleError( err );
+        Exit();
+        }
+    
+    if( iAppDialog )
+        {
+        TRAP( err, iAppDialog->ExecuteLD( aFileHandle, iAppObserver ) );
+        if ( err != KErrNone )
+            {
+            if( err == KLeaveExit )
+                {
+            	delete iAppDialog;
+            	delete iAppObserver;
+            	
+            	iAppObserver = NULL;
+            	iAppDialog   = NULL;
+            	
+            	Exit();
+                }
+            // Reset the dialog pointer
+            iAppDialog = NULL;
+            // Delete the app observer 
+            delete iAppObserver;
+            iEikonEnv->HandleError( err );
+            Exit();
+            }
+        }
+    // Delete the app observer
+    delete iAppObserver;
+    
+    // Reset the App Observer Pointer
+    iAppObserver = NULL;
+    
+    // Dialog has destroyed itself, Reset the pointer
+    iAppDialog = NULL;
+    
+    Exit();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::OpenFileL
+// Reimplements CAknAppUi::OpenFileL inorder to provide for opening SVG 
+// content through doc handler.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppAppUi::OpenFileL( 
+    const TDesC& aFileName) // File Name of SVGT content
+    {
+    // Display an info note if a video call is in progress.
+    // SVG content cannot be displayed in this case.
+    if ( IsVideoCall() )
+        {
+        HBufC* text = StringLoader::LoadLC( 
+                R_SVGT_VIEWER_INFO_VIDEO_CALL_ONGOING );
+        CAknInformationNote* dlg = new (ELeave) CAknInformationNote( ETrue );
+        dlg->ExecuteLD( text->Des() );
+        CleanupStack::PopAndDestroy( text );  // text
+        Exit();
+        }
+    
+    // Open File Handle for the file
+
+    RFile fileHandle;
+    TInt err = fileHandle.Open( iEikonEnv->FsSession(), 
+                                aFileName, EFileShareAny );
+    if ( err != KErrNone )
+        {       
+        iEikonEnv->HandleError( err );
+        Exit();
+        }
+
+
+    TRAP( err, iAppDialog = CSVGTUIDialog::NewL() );
+    if ( err != KErrNone )
+        {
+        // Reset the Dialog pointer
+        iAppDialog = NULL;
+        // Close the file handle
+        fileHandle.Close();
+
+        iEikonEnv->HandleError( err );
+        Exit();
+        }
+    
+    TRAP( err, 
+        iAppObserver = CSVGTAppObserverUtil::NewL( iAppDialog, 
+                                     &fileHandle, 
+                                     aFileName,
+                                     ETrue,
+                                     CanShowSave(),
+                                     ShouldMoveContent() ) );
+    if ( err != KErrNone )
+        {
+        // Reset the AppObserver Pointer
+        iAppObserver = NULL;
+        // Reset the Dialog pointer
+        iAppDialog = NULL;
+        // Close the file handle
+        fileHandle.Close();
+        
+        iEikonEnv->HandleError( err );
+        Exit();
+        }
+        
+    if( iAppDialog )
+        {
+        TRAP( err, iAppDialog->ExecuteLD( fileHandle, iAppObserver ) );
+
+        if ( err != KErrNone )
+            {
+            if( err == KLeaveExit )
+                {
+                delete iAppDialog;
+                delete iAppObserver;
+            	
+                iAppObserver = NULL;
+                iAppDialog   = NULL;
+            	
+                Exit();
+                }
+            // Delete the AppObserver Pointer
+            delete iAppObserver;
+            // Reset the AppObserver Pointer
+            iAppObserver = NULL;
+            // Reset the Dialog pointer
+            iAppDialog = NULL;
+            // Close the file handle
+            fileHandle.Close();
+        
+            iEikonEnv->HandleError( err );
+            Exit();
+            }
+        }
+    
+    // Delete the App Observer
+    delete iAppObserver;
+   
+    // Reset the App Observer pointer
+    iAppObserver = NULL;
+
+    // Dialog has destroyed itself, Reset the pointer
+    iAppDialog = NULL;
+    
+    // Close the file handle and session
+    fileHandle.Close();
+    
+    Exit();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::SetAllowMove
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppAppUi::SetAllowMove(TInt32 aMoveAllowed)
+    {
+    iMoveAllowed = aMoveAllowed;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::ProcessCommandParametersL
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppAppUi::ProcessCommandParametersL(
+    TApaCommand /* aCommand */ ,
+    TFileName& aDocumentName, 
+    const TDesC8& /* aTail */ )
+    {
+    return ConeUtils::FileExists(aDocumentName);
+    }    
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::HandleScreenDeviceChangedL
+// Handle the screen size being changed
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppAppUi::HandleScreenDeviceChangedL()
+    {
+    CAknAppUiBase::HandleScreenDeviceChangedL();  
+    }
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::HandleResourceChangeL
+// Handle the screen size being changed
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppAppUi::HandleResourceChangeL( TInt aType )
+    {
+    CAknAppUi::HandleResourceChangeL( aType );
+    }
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::HandleForegroundEventL
+// App Framework calls this api to give background/foreground events to the
+// application. Param: aForeground : ETrue: Foreground. EFalse: Background.
+// -----------------------------------------------------------------------------
+//
+
+void CSVGTViewerAppAppUi::HandleForegroundEventL( TBool aForeground )
+    {   
+    // Pass the application foreground or goes to background,
+    // give the events to the underlying dialog and the custom
+    // control so that the animation is paused when app goes
+    // to background and so on. But the app might have
+    // opened another application embedded (Browser or another
+    // viewer). So need to qualify these events with these
+    // conditions. Whenever opening/closing another app 
+    // embedded, need to pass background/foreground events to
+    // dialog, and call Set/ResetEmbeddedAppRunning.
+
+    // Passing the event to the base class
+    CAknAppUi::HandleForegroundEventL( aForeground );
+    
+    if ( !IsEmbeddedAppRunning() )
+        {
+        if ( iAppDialog )
+            {
+            iAppDialog->HandleApplicationForegroundEvent(
+                            aForeground );
+            }
+
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::IsVideoCall()
+// Used to find out if the videocall is going on. The
+// viewer is not allowed to open if viedo call is 
+// going on.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppAppUi::IsVideoCall() const
+    {
+    TBool lVideoCallConnected = EFalse;
+    TInt lType = 0;  
+    TInt error = RProperty::Get( KPSUidCtsyCallInformation, 
+                                 KCTsyCallType, lType );
+    
+    // EPSTelephonyCallTypeH324Multimedia is used for 3G video calls
+    if ( !error && lType == EPSCTsyCallTypeH324Multimedia )
+        {
+        // Call is of video call, check whether call is connected
+        TInt lState = 0;         
+        error = RProperty::Get( KPSUidCtsyCallInformation, 
+                                KCTsyCallState, lState );
+        if ( !error &&
+         ( lState != EPSCTsyCallStateUninitialized &&
+           lState != EPSCTsyCallStateNone &&
+           lState != EPSCTsyCallStateDisconnecting ) )
+            {
+            lVideoCallConnected = ETrue;    
+            }
+        }
+    return lVideoCallConnected;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::IsEmbeddedAppRunning()
+// Used to find out if viewer application has in turn 
+// started an embedded application.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppAppUi::IsEmbeddedAppRunning() const
+    {
+    return iEmbeddedAppRunning;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::SetEmbeddedAppRunning()
+// Used to set state in Viewer application if it has in turn 
+// started an embedded application.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppAppUi::SetEmbeddedAppRunning()
+    {
+    iEmbeddedAppRunning = ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::ResetEmbeddedAppRunning()
+// Used to set state in viewer application if embedded
+// application started by it is closed now.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppAppUi::ResetEmbeddedAppRunning()
+    {
+    iEmbeddedAppRunning = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::CallBackFuncL()
+// Used to callback by the idle timer in order to launch 
+// the dialog
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTViewerAppAppUi::CallBackFuncL(TAny *aPtr)
+    {
+    CSVGTViewerAppAppUi* appUi = 
+        static_cast< CSVGTViewerAppAppUi* >( aPtr );
+    if ( appUi )    
+        {
+        return ( appUi->LaunchDialogL() );    
+        }
+        else
+            {
+            // To indicate that the timer is not
+            // called again, return false to the timer
+            // RunL
+            return ( EFalse );
+            }
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::LaunchDialogL()
+// This function accesses the document and launches the 
+// content.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppAppUi::LaunchDialogL()
+    {
+    // Check if file-handle in document is valid
+    if ( static_cast< CSVGTViewerAppDocument* >
+        (iDocument)->IsFileHandleValid() )
+        {
+        // Obtain the file-handle
+        RFile& fileHandle = 
+        (static_cast< CSVGTViewerAppDocument* >
+        (iDocument)->GetSvgtContentFileHandle());
+        
+        // Cancel the periodic timer
+        if ( iIdleTimer->IsActive() )
+            {
+            iIdleTimer->Cancel();
+            }
+            
+        // Launch the content
+        OpenFileL( fileHandle );
+ 
+        // Delete and reset the idle-timer
+        delete iIdleTimer;
+        iIdleTimer = NULL;  
+ 
+        // Return False to indicate that 
+        // timer need not callback further.
+        return EFalse; 
+        
+        }
+        else
+            {
+            // Return True to indicate that the 
+            // timer needs to callback this function 
+            // again, as the file-handle is not valid 
+            // yet.
+            return ETrue;           
+            }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::WeAreEmbedded
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppAppUi::WeAreEmbedded() const
+{
+   // SVGT-Viewer will be opened in embedded mode always
+   return ETrue;       
+}
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::CanShowSave
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppAppUi::CanShowSave() const 
+    {
+    // By default dont show the save option
+    TBool ret = EFalse;
+    
+    // Check if we are launched embedded
+    if (WeAreEmbedded())
+        {
+        // If the file is not a local file then 
+        // display the save option
+        if ( !IsLocalFile() )
+            {
+            ret = ETrue;
+            }
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::ShouldMoveContent
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppAppUi::ShouldMoveContent() const
+    {
+    return iMoveAllowed;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::IsLocalFile
+//  This function returns ETrue if file is local, EFalse otherwise
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppAppUi::IsLocalFile() const 
+    {
+    // By default file is not local
+    TBool isLocal = EFalse;
+   
+    // Obtain the file-handle
+    RFile& fileHandle = (static_cast<CSVGTViewerAppDocument*>
+                        (iDocument)->GetSvgtContentFileHandle());
+    // Check whether local/remote  
+    TRAP_IGNORE( isLocal = IsLocalFileL( fileHandle ) );
+    
+    return isLocal;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppAppUi::IsLocalFileL
+//  This function checks whether the filepath of the content opened is 
+//  in the PHONE_MEMORY_IMAGES_PATH or MEMORYCARD_IMAGES_PATH
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppAppUi::IsLocalFileL( RFile& aFileHandle ) const 
+    {
+    // By default file is not local
+    TBool retVal = EFalse;
+
+#ifdef RD_MULTIPLE_DRIVE    
+
+    HBufC* fileNameBuf = HBufC::NewLC( KMaxFileName );
+    TPtr fileNamePtr = fileNameBuf->Des();
+    aFileHandle.FullName( fileNamePtr );
+
+    RFs fsSession = iEikonEnv->FsSession();
+    TName driveRootPath;
+     
+    TInt intDrive;
+    DriveInfo::TDriveArray driveArray;
+    User::LeaveIfError( DriveInfo::GetUserVisibleDrives( fsSession, driveArray ) );
+    for(TInt i=0; i < driveArray.Count(); i++)
+        {
+        TChar driveLetter = driveArray.LetterAt(i);
+        User::LeaveIfError( RFs::CharToDrive(driveLetter, intDrive) );
+        User::LeaveIfError( PathInfo::GetRootPath(driveRootPath, intDrive) );
+
+        // Check whether filepath consists of phone mem path or mmc path
+        if ( driveRootPath.FindF( fileNamePtr.Left(driveRootPath.Length() ) ) != KErrNotFound )
+            {
+            // Path Found means file is local
+            retVal = ETrue;
+            break;
+            }
+        }
+
+    CleanupStack::PopAndDestroy( fileNameBuf );    
+#else
+    // Get the phone memory path
+    HBufC* phoneMemImgPath = iEikonEnv->AllocReadResourceLC( 
+            R_SVGT_VIEWER_PHONE_MEMORY_IMAGES_PATH );
+
+    // Get the Memory Card path
+    HBufC* memCardImgPath = iEikonEnv->AllocReadResourceLC(
+            R_SVGT_VIEWER_MEMORYCARD_IMAGES_PATH );
+    
+    // Get the content filename
+    HBufC* fileNameBuf = HBufC::NewLC( KMaxFileName );
+    TPtr fileNamePtr = fileNameBuf->Des();
+    aFileHandle.FullName( fileNamePtr );
+
+    // Check whether filepath consists of phone mem path or mmc path
+    if ( phoneMemImgPath->FindF( fileNamePtr.Left( 
+            phoneMemImgPath->Length() ) ) != KErrNotFound
+         || memCardImgPath->FindF( fileNamePtr.Left( 
+            memCardImgPath->Length() ) ) != KErrNotFound )
+        {
+        // Path Found means file is local
+        retVal = ETrue;
+        }
+
+    // Perform Cleanup         
+    CleanupStack::PopAndDestroy( fileNameBuf );
+    CleanupStack::PopAndDestroy( memCardImgPath );
+    CleanupStack::PopAndDestroy( phoneMemImgPath );
+#endif    
+
+    return retVal;
+    }
+//End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppSrc/SVGTViewerAppApplication.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2004,2005 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:  Application Class for SVGT Viewer
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "SVGTViewerAppApplication.h"
+#include "SVGTViewerAppDocument.h"
+
+// Constants
+
+// UID for the application; this should correspond to the uid defined in the mmp file
+const TUid KUidSVGTViewerAppApp = { 0x101F874A };
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppApplication::AppDllUid
+// Reimplements CApaApplication::AppDllUid inorder to return SVGT Viewer App's
+// UID
+// Returns: TUid ; SVGT Viewer App UID
+// -----------------------------------------------------------------------------
+//
+TUid CSVGTViewerAppApplication::AppDllUid() const
+    {
+    // Return the UID for the SVGTViewerApp application
+    return KUidSVGTViewerAppApp;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppApplication::CreateDocumentL
+// Invokes the factory function for the Document Class. Called by the
+// framework.
+// Returns: CApaDocument* ; Pointer to the created Document Class
+// -----------------------------------------------------------------------------
+//
+CApaDocument* CSVGTViewerAppApplication::CreateDocumentL()
+    {
+    // Create an SVGTViewerApp document, and return a pointer to it
+    return ( static_cast< CApaDocument* >(
+        CSVGTViewerAppDocument::NewL( *this ) ) );
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppSrc/SVGTViewerAppDocument.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,296 @@
+/*
+* Copyright (c) 2004,2005 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:  Document for SVGT Viewer
+*
+*/
+
+#include <avkon.hrh>
+#include <aknnotewrappers.h>
+#include <AiwGenericParam.h>
+#include <AiwGenericParam.hrh>
+
+#include "SVGTViewerAppAppUi.h"
+#include "SVGTViewerAppDocument.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::CSVGTViewerAppDocument
+// Default Constructor for CSVGTViewerAppDocument.
+// -----------------------------------------------------------------------------
+//
+CSVGTViewerAppDocument::CSVGTViewerAppDocument( 
+    CEikApplication& aApp ) : // Reference to application object
+        CAiwGenericParamConsumer( aApp ),
+        iIsFileHandleValid( EFalse )
+    {
+    // No implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::ConstructL
+// Second Phase constructor for CSVGTViewerAppDocument.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppDocument::ConstructL()
+    {
+    iIsFileFullPathValid = EFalse;   
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::NewL
+// Factory function for creation of CSVGTViewerAppDocument.
+// Returns: CSVGTViewerAppDocument*  ; Pointer to created object
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSVGTViewerAppDocument* CSVGTViewerAppDocument::NewL( 
+    CEikApplication& aApp ) // Reference to application object
+    {
+    CSVGTViewerAppDocument* self = NewLC( aApp );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::NewL
+// Factory function for creation of CSVGTViewerAppDocument. Also pushes the
+// object on the cleanup stack.
+// Returns: CSVGTViewerAppDocument*  ; Pointer to created object
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSVGTViewerAppDocument* CSVGTViewerAppDocument::NewLC( 
+    CEikApplication& aApp ) // Reference to application object
+    {
+    CSVGTViewerAppDocument* self = new ( ELeave )
+        CSVGTViewerAppDocument( aApp );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// Destructor
+CSVGTViewerAppDocument::~CSVGTViewerAppDocument()
+    {
+    // Close the file handle and session
+    iSvgtContentFileHandle.Close();
+    delete iFileFullPath;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::GetSvgtContentFileHandle
+// This function is a get function to get the file-handle of the file content. 
+// This is used by AppUI.
+// Returns: File handle of content by reference .
+// -----------------------------------------------------------------------------
+//
+RFile& CSVGTViewerAppDocument::GetSvgtContentFileHandle() 
+    {
+    return iSvgtContentFileHandle;
+    }
+ 
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::IsFileHandleValid()
+// Used by UI class to check if file's handle is valid
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppDocument::IsFileHandleValid() const
+    {
+    return iIsFileHandleValid;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::IsFileFullPathAvailable()
+// Used by UI class to check if file's full-path available.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTViewerAppDocument::IsFileFullPathAvailable() const
+    {
+    return iIsFileFullPathValid;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::GetFileFullPath()
+// Used by UI class to get file's full-path.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppDocument::GetFileFullPath(TFileName& filename)
+    {
+    if ( iFileFullPath )
+        {
+        filename = iFileFullPath->Des();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::GetParentAppUid()
+// Used by UI class to get parent application's uid.
+// -----------------------------------------------------------------------------
+//
+TUid CSVGTViewerAppDocument::GetParentAppUid() const
+	{
+	return iParentUid;
+	}
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::OpenFileL
+// Reimplements CAknDocument::OpenFileL inorder to support opening of SVGT
+// files through doc-handler framework.
+// Returns: NULL.
+// -----------------------------------------------------------------------------
+//
+CFileStore* CSVGTViewerAppDocument::OpenFileL( TBool aDoOpen,     // Indicates
+                                                                  // Whether doc
+                                                                  // is to be
+                                                                  // created
+                                                                  // or opened.
+                                         const TDesC& aFilename,  // SVGT
+                                                                  // Filename
+                                         RFs& aFs )               // File Srvr
+                                                                  // Session
+    {
+    // In this function we store the file-name inside the document.
+    // The opening of the document is performed by AppUI after 
+    // initialisation.
+    if ( aDoOpen )
+        {
+        CSVGTViewerAppAppUi* AppUi = static_cast<CSVGTViewerAppAppUi*>(iAppUi);
+        AppUi->SetAllowMove(0);
+
+        const CAiwGenericParamList* params = GetInputParameters();
+        if ( params )
+            {
+            TInt findIndex;
+            const TAiwGenericParam* param = params->FindFirst(findIndex,
+                EGenericParamAllowMove);
+
+            if ( param && findIndex != KErrNotFound )
+                {
+                TInt32 value = 0;
+                param->Value().Get(value);
+                AppUi->SetAllowMove(value);
+                }            
+            }
+         
+        // Get Move parameter
+        if ( params && params->Count() )
+            {        
+            TInt index = 0;
+            const TAiwGenericParam* param = NULL;
+
+            param = params->FindFirst(index, EGenericParamApplication, EVariantTypeTUid);
+
+            if ( index >= 0 && param )
+                {
+                param->Value().Get(iParentUid);              
+                }
+            }
+        }
+    
+    // Function is called with Full-path.
+    iIsFileFullPathValid = ETrue;
+    // Store the File's fullpath.
+    iFileFullPath = aFilename.AllocL();
+
+    // Open File Handle for the file
+    TInt openError = iSvgtContentFileHandle.Open( aFs, aFilename, 
+        EFileShareAny );
+    if ( openError != KErrNone )
+        {
+        User::Leave( openError );
+        }
+    iIsFileHandleValid = ETrue;
+    
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::OpenFileL
+// Reimplements CAknDocument::OpenFileL inorder to support opening of SVGT
+// files through doc-handler framework.
+// Returns: NULL.
+// -----------------------------------------------------------------------------
+//
+void CSVGTViewerAppDocument::OpenFileL(
+    CFileStore*& aFileStore, // Pointer to reference of filestore
+    RFile& aFile ) // File handle of content.
+    {
+    // Set the docstore pointer to NULL so that the framework
+    // does not try to open the file by filename
+    aFileStore = NULL;
+    
+    // In this function we store the file-name inside the document.
+    // The opening of the document is performed by AppUI after 
+    // initialisation.
+    CSVGTViewerAppAppUi* AppUi = static_cast<CSVGTViewerAppAppUi*>(iAppUi);
+    AppUi->SetAllowMove(0);
+
+    const CAiwGenericParamList* paramList = GetInputParameters();
+    if ( paramList )
+        {
+        TInt findIndex;
+        const TAiwGenericParam* param = paramList->FindFirst(findIndex,
+               EGenericParamAllowMove);
+
+        if ( param && findIndex != KErrNotFound )
+            {
+            TInt32 value = 0;
+            param->Value().Get(value);
+            AppUi->SetAllowMove(value);
+            }            
+        }
+         
+
+    if ( paramList && paramList->Count() )
+        {
+        TInt index = 0;
+        const TAiwGenericParam* param = NULL;
+        param = paramList->FindFirst(index, EGenericParamApplication, EVariantTypeTUid);
+
+        if ( index >= 0 && param )
+            {
+            param->Value().Get(iParentUid);              
+            }
+        }
+    // Function is not called with Full-path.
+    iIsFileFullPathValid = EFalse;
+    
+    // File-handle is valid
+    iIsFileHandleValid = ETrue;
+    
+    // Make a copy for our use later.
+    iSvgtContentFileHandle.Duplicate( aFile );
+
+    // Close the original file handle
+    aFile.Close();
+
+    return;
+    }
+// -----------------------------------------------------------------------------
+// CSVGTViewerAppDocument::CreateAppUiL
+// Called by the framework to create the AppUI.
+// Returns: CEikAppUi* ; Pointer to the created object.
+//          Leaves if error.
+// -----------------------------------------------------------------------------
+//
+CEikAppUi* CSVGTViewerAppDocument::CreateAppUiL()
+    {
+    // Create the application user interface, and return a pointer to it
+    // the framework takes ownership of this object
+    return ( static_cast < CEikAppUi* >
+            ( new ( ELeave ) CSVGTViewerAppAppUi ) );
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/AppSrc/SvgtViewerAppView.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2007 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:  Application viewer for SVGT Viewer App.
+*
+*/
+
+
+
+#include "SvgtViewerAppView.h"
+#include <AknUtils.h>
+
+void CSvgtViewerAppView::ConstructL(const TRect& aRect)
+    {
+    CreateWindowL();
+
+    SetRect(aRect);
+    ActivateL();
+    }
+
+CSvgtViewerAppView::~CSvgtViewerAppView()
+    {
+    }
+    
+TInt CSvgtViewerAppView::CountComponentControls() const
+	{
+	return 0;
+	}
+
+CCoeControl* CSvgtViewerAppView::ComponentControl(TInt /* aIndex */) const
+	{
+    return NULL;
+	}
+
+void CSvgtViewerAppView::Draw(const TRect& /* aRect */) const
+	{
+	CWindowGc& gc = SystemGc();
+	gc.Clear();
+	}
+
+void CSvgtViewerAppView::HandleResourceChange (TInt /* aType */)
+    {
+    TRect rect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect );
+    SetRect( rect );
+    }
+
+//End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/BWINSCW/SVGTAppObserverUtilU.DEF	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,41 @@
+EXPORTS
+	??0CSVGTAppObserverUtil@@IAE@PAVCSVGTUIDialog@@@Z @ 1 NONAME ; CSVGTAppObserverUtil::CSVGTAppObserverUtil(class CSVGTUIDialog *)
+	??1CSVGTAppObserverUtil@@UAE@XZ @ 2 NONAME ; CSVGTAppObserverUtil::~CSVGTAppObserverUtil(void)
+	??1CSVGTFileManager@@UAE@XZ @ 3 NONAME ; CSVGTFileManager::~CSVGTFileManager(void)
+	?AssignEmbededDataL@CSVGTAppObserverUtil@@UAEXABVTDesC16@@@Z @ 4 NONAME ; void CSVGTAppObserverUtil::AssignEmbededDataL(class TDesC16 const &)
+	?CanShowDownload@CSVGTAppObserverUtil@@UBEHXZ @ 5 NONAME ; int CSVGTAppObserverUtil::CanShowDownload(void) const
+	?CanShowSave@CSVGTAppObserverUtil@@UAEHXZ @ 6 NONAME ; int CSVGTAppObserverUtil::CanShowSave(void)
+	?CancelCopy@CSVGTFileManager@@QAEXXZ @ 7 NONAME ; void CSVGTFileManager::CancelCopy(void)
+	?ConstructL@CSVGTAppObserverUtil@@IAEXPAVRFile@@@Z @ 8 NONAME ; void CSVGTAppObserverUtil::ConstructL(class RFile *)
+	?ConstructL@CSVGTAppObserverUtil@@IAEXPAVRFile@@ABVTDesC16@@HHH@Z @ 9 NONAME ; void CSVGTAppObserverUtil::ConstructL(class RFile *, class TDesC16 const &, int, int, int)
+	?ConstructL@CSVGTAppObserverUtil@@IAEXXZ @ 10 NONAME ; void CSVGTAppObserverUtil::ConstructL(void)
+	?DialogDismissedL@CSVGTAppObserverUtil@@UAEXH@Z @ 11 NONAME ; void CSVGTAppObserverUtil::DialogDismissedL(int)
+	?DisplayDownloadMenuL@CSVGTAppObserverUtil@@UAEXXZ @ 12 NONAME ; void CSVGTAppObserverUtil::DisplayDownloadMenuL(void)
+	?DoSaveL@CSVGTAppObserverUtil@@UAEXH@Z @ 13 NONAME ; void CSVGTAppObserverUtil::DoSaveL(int)
+	?FetchImage@CSVGTAppObserverUtil@@UAEHABVTDesC16@@AAVRFs@@AAVRFile@@@Z @ 14 NONAME ; int CSVGTAppObserverUtil::FetchImage(class TDesC16 const &, class RFs &, class RFile &)
+	?GetDefaultInetAccessPointL@CSVGTAppObserverUtil@@IBEHAAK@Z @ 15 NONAME ; int CSVGTAppObserverUtil::GetDefaultInetAccessPointL(unsigned long &) const
+	?GetFileNameAndExt@CSVGTAppObserverUtil@@IBEXAAVTDes16@@@Z @ 16 NONAME ; void CSVGTAppObserverUtil::GetFileNameAndExt(class TDes16 &) const
+	?GetFileNameFromUri@CSVGTAppObserverUtil@@QBEHABVTDesC16@@AAVTDes16@@@Z @ 17 NONAME ; int CSVGTAppObserverUtil::GetFileNameFromUri(class TDesC16 const &, class TDes16 &) const
+	?GetLocalFile@CSVGTAppObserverUtil@@SAHABVTDesC16@@AAVTDes16@@0@Z @ 18 NONAME ; int CSVGTAppObserverUtil::GetLocalFile(class TDesC16 const &, class TDes16 &, class TDesC16 const &)
+	?GetSmilFitValue@CSVGTAppObserverUtil@@UAEXAAVTDes16@@@Z @ 19 NONAME ; void CSVGTAppObserverUtil::GetSmilFitValue(class TDes16 &)
+	?HandleDMgrEventL@CSVGTAppObserverUtil@@UAEXAAVRHttpDownload@@VTHttpDownloadEvent@@@Z @ 20 NONAME ; void CSVGTAppObserverUtil::HandleDMgrEventL(class RHttpDownload &, class THttpDownloadEvent)
+	?IsAllowMove@CSVGTAppObserverUtil@@IBEHXZ @ 21 NONAME ; int CSVGTAppObserverUtil::IsAllowMove(void) const
+	?IsDownloadNeededL@CSVGTAppObserverUtil@@SA?AW4TDownloadNeeded@1@ABVTDesC16@@@Z @ 22 NONAME ; enum CSVGTAppObserverUtil::TDownloadNeeded CSVGTAppObserverUtil::IsDownloadNeededL(class TDesC16 const &)
+	?IsFileFullPathAvailable@CSVGTAppObserverUtil@@IBEHXZ @ 23 NONAME ; int CSVGTAppObserverUtil::IsFileFullPathAvailable(void) const
+	?IsSavingDone@CSVGTAppObserverUtil@@UAEHXZ @ 24 NONAME ; int CSVGTAppObserverUtil::IsSavingDone(void)
+	?LaunchDownloadedFileL@CSVGTAppObserverUtil@@IBEXABVTDesC16@@HH@Z @ 25 NONAME ; void CSVGTAppObserverUtil::LaunchDownloadedFileL(class TDesC16 const &, int, int) const
+	?LinkActivated@CSVGTAppObserverUtil@@UAEHABVTDesC16@@@Z @ 26 NONAME ; int CSVGTAppObserverUtil::LinkActivated(class TDesC16 const &)
+	?LinkActivatedL@CSVGTAppObserverUtil@@QAEXABVTDesC16@@@Z @ 27 NONAME ; void CSVGTAppObserverUtil::LinkActivatedL(class TDesC16 const &)
+	?LinkActivatedWithShow@CSVGTAppObserverUtil@@UAEHABVTDesC16@@0@Z @ 28 NONAME ; int CSVGTAppObserverUtil::LinkActivatedWithShow(class TDesC16 const &, class TDesC16 const &)
+	?LinkActivatedWithShowL@CSVGTAppObserverUtil@@QAEXABVTDesC16@@0@Z @ 29 NONAME ; void CSVGTAppObserverUtil::LinkActivatedWithShowL(class TDesC16 const &, class TDesC16 const &)
+	?NewFetchImageData@CSVGTAppObserverUtil@@UAEHABVTDesC16@@@Z @ 30 NONAME ; int CSVGTAppObserverUtil::NewFetchImageData(class TDesC16 const &)
+	?NewL@CSVGTAppObserverUtil@@SAPAV1@PAVCSVGTUIDialog@@PAVRFile@@@Z @ 31 NONAME ; class CSVGTAppObserverUtil * CSVGTAppObserverUtil::NewL(class CSVGTUIDialog *, class RFile *)
+	?NewL@CSVGTAppObserverUtil@@SAPAV1@PAVCSVGTUIDialog@@PAVRFile@@ABVTDesC16@@HHH@Z @ 32 NONAME ; class CSVGTAppObserverUtil * CSVGTAppObserverUtil::NewL(class CSVGTUIDialog *, class RFile *, class TDesC16 const &, int, int, int)
+	?NewL@CSVGTFileManager@@SAPAV1@XZ @ 33 NONAME ; class CSVGTFileManager * CSVGTFileManager::NewL(void)
+	?SVGTPositionChanged@CSVGTAppObserverUtil@@UAEXH@Z @ 34 NONAME ; void CSVGTAppObserverUtil::SVGTPositionChanged(int)
+	?SVGTSavingDoneL@CSVGTAppObserverUtil@@UAEXH@Z @ 35 NONAME ; void CSVGTAppObserverUtil::SVGTSavingDoneL(int)
+	?SetAllowMove@CSVGTFileManager@@QAEXJ@Z @ 36 NONAME ; void CSVGTFileManager::SetAllowMove(long)
+	?SetDownloadMenu@CSVGTAppObserverUtil@@QAEXH@Z @ 37 NONAME ; void CSVGTAppObserverUtil::SetDownloadMenu(int)
+	?StartCopyOperationL@CSVGTFileManager@@QAEHPAVMSVGTUISaveListener@@AAVRFile@@ABVTDesC16@@@Z @ 38 NONAME ; int CSVGTFileManager::StartCopyOperationL(class MSVGTUISaveListener *, class RFile &, class TDesC16 const &)
+	?StartCopyOperationL@CSVGTFileManager@@QAEHPAVMSVGTUISaveListener@@ABVTDesC16@@1@Z @ 39 NONAME ; int CSVGTFileManager::StartCopyOperationL(class MSVGTUISaveListener *, class TDesC16 const &, class TDesC16 const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/BWINSCW/SVGTScreenSaverPluginU.DEF	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,5 @@
+EXPORTS
+	?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+	?InitializeFuncs@@YAFPAU_NPPluginFuncs@@@Z @ 2 NONAME ; short InitializeFuncs(struct _NPPluginFuncs *)
+	?NPP_Shutdown@@YAXXZ @ 3 NONAME ; void NPP_Shutdown(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/BWINSCW/SVGTUICONTROLU.def	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,8 @@
+EXPORTS
+	?AssignImageData@CSVGTUIDialog@@QAEXABVTDesC16@@PAVHBufC8@@@Z @ 1 NONAME ; void CSVGTUIDialog::AssignImageData(class TDesC16 const &, class HBufC8 *)
+	?GenerateThumbnailLD@CSVGTThumbnailUtil@@SAHAAVRFile@@AAVCFbsBitmap@@1@Z @ 2 NONAME ; int CSVGTThumbnailUtil::GenerateThumbnailLD(class RFile &, class CFbsBitmap &, class CFbsBitmap &)
+	?NewL@CSVGTCustControl@@SAPAV1@AAVRFile@@PAVMSvgtAppObserver@@PAVMSVGTProgressBarDrawImpl@@PAVMSVGTMSKImpl@@PAVMSvgtApplicationExitObserver@@HPBVCCoeControl@@H@Z @ 3 NONAME ; class CSVGTCustControl * CSVGTCustControl::NewL(class RFile &, class MSvgtAppObserver *, class MSVGTProgressBarDrawImpl *, class MSVGTMSKImpl *, class MSvgtApplicationExitObserver *, int, class CCoeControl const *, int)
+	?NewL@CSVGTUIDialog@@SAPAV1@XZ @ 4 NONAME ; class CSVGTUIDialog * CSVGTUIDialog::NewL(void)
+	?NewLC@CSVGTUIDialog@@SAPAV1@XZ @ 5 NONAME ; class CSVGTUIDialog * CSVGTUIDialog::NewLC(void)
+	?AddListener@CSVGTCustControl@@QAEXPAVMSvgCustControlListener@@W4TCustControlListener@@@Z @ 6 NONAME ; void CSVGTCustControl::AddListener(class MSvgCustControlListener *, enum TCustControlListener)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/BWINSCW/svgtfileviewdetails.def	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,4 @@
+EXPORTS
+	?ExecuteLD@CSvgtFileViewDetailsDialog@@QAEXAAVRFile@@@Z @ 1 NONAME ; void CSvgtFileViewDetailsDialog::ExecuteLD(class RFile &)
+	?NewL@CSvgtFileViewDetailsDialog@@SAPAV1@XZ @ 2 NONAME ; class CSvgtFileViewDetailsDialog * CSvgtFileViewDetailsDialog::NewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/EABI/SVGTAppObserverUtilU.DEF	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,65 @@
+EXPORTS
+	_ZN16CSVGTFileManager10CancelCopyEv @ 1 NONAME
+	_ZN16CSVGTFileManager12SetAllowMoveEl @ 2 NONAME
+	_ZN16CSVGTFileManager19StartCopyOperationLEP19MSVGTUISaveListenerR5RFileRK7TDesC16 @ 3 NONAME
+	_ZN16CSVGTFileManager19StartCopyOperationLEP19MSVGTUISaveListenerRK7TDesC16S4_ @ 4 NONAME
+	_ZN16CSVGTFileManager4NewLEv @ 5 NONAME
+	_ZN16CSVGTFileManagerD0Ev @ 6 NONAME
+	_ZN16CSVGTFileManagerD1Ev @ 7 NONAME
+	_ZN16CSVGTFileManagerD2Ev @ 8 NONAME
+	_ZN20CSVGTAppObserverUtil10ConstructLEP5RFile @ 9 NONAME
+	_ZN20CSVGTAppObserverUtil10ConstructLEP5RFileRK7TDesC16iii @ 10 NONAME
+	_ZN20CSVGTAppObserverUtil10ConstructLEv @ 11 NONAME
+	_ZN20CSVGTAppObserverUtil10FetchImageERK7TDesC16R3RFsR5RFile @ 12 NONAME
+	_ZN20CSVGTAppObserverUtil11CanShowSaveEv @ 13 NONAME
+	_ZN20CSVGTAppObserverUtil12GetLocalFileERK7TDesC16R6TDes16S2_ @ 14 NONAME
+	_ZN20CSVGTAppObserverUtil12IsSavingDoneEv @ 15 NONAME
+	_ZN20CSVGTAppObserverUtil13LinkActivatedERK7TDesC16 @ 16 NONAME
+	_ZN20CSVGTAppObserverUtil14LinkActivatedLERK7TDesC16 @ 17 NONAME
+	_ZN20CSVGTAppObserverUtil15GetSmilFitValueER6TDes16 @ 18 NONAME
+	_ZN20CSVGTAppObserverUtil15SVGTSavingDoneLEi @ 19 NONAME
+	_ZN20CSVGTAppObserverUtil15SetDownloadMenuEi @ 20 NONAME
+	_ZN20CSVGTAppObserverUtil16DialogDismissedLEi @ 21 NONAME
+	_ZN20CSVGTAppObserverUtil16HandleDMgrEventLER13RHttpDownload18THttpDownloadEvent @ 22 NONAME
+	_ZN20CSVGTAppObserverUtil17IsDownloadNeededLERK7TDesC16 @ 23 NONAME
+	_ZN20CSVGTAppObserverUtil17NewFetchImageDataERK7TDesC16 @ 24 NONAME
+	_ZN20CSVGTAppObserverUtil18AssignEmbededDataLERK7TDesC16 @ 25 NONAME
+	_ZN20CSVGTAppObserverUtil19SVGTPositionChangedEi @ 26 NONAME
+	_ZN20CSVGTAppObserverUtil20DisplayDownloadMenuLEv @ 27 NONAME
+	_ZN20CSVGTAppObserverUtil21LinkActivatedWithShowERK7TDesC16S2_ @ 28 NONAME
+	_ZN20CSVGTAppObserverUtil22LinkActivatedWithShowLERK7TDesC16S2_ @ 29 NONAME
+	_ZN20CSVGTAppObserverUtil4NewLEP13CSVGTUIDialogP5RFile @ 30 NONAME
+	_ZN20CSVGTAppObserverUtil4NewLEP13CSVGTUIDialogP5RFileRK7TDesC16iii @ 31 NONAME
+	_ZN20CSVGTAppObserverUtil7DoSaveLEi @ 32 NONAME
+	_ZN20CSVGTAppObserverUtilC1EP13CSVGTUIDialog @ 33 NONAME
+	_ZN20CSVGTAppObserverUtilC2EP13CSVGTUIDialog @ 34 NONAME
+	_ZN20CSVGTAppObserverUtilD0Ev @ 35 NONAME
+	_ZN20CSVGTAppObserverUtilD1Ev @ 36 NONAME
+	_ZN20CSVGTAppObserverUtilD2Ev @ 37 NONAME
+	_ZNK20CSVGTAppObserverUtil11IsAllowMoveEv @ 38 NONAME
+	_ZNK20CSVGTAppObserverUtil15CanShowDownloadEv @ 39 NONAME
+	_ZNK20CSVGTAppObserverUtil17GetFileNameAndExtER6TDes16 @ 40 NONAME
+	_ZNK20CSVGTAppObserverUtil18GetFileNameFromUriERK7TDesC16R6TDes16 @ 41 NONAME
+	_ZNK20CSVGTAppObserverUtil21LaunchDownloadedFileLERK7TDesC16ii @ 42 NONAME
+	_ZNK20CSVGTAppObserverUtil23IsFileFullPathAvailableEv @ 43 NONAME
+	_ZNK20CSVGTAppObserverUtil26GetDefaultInetAccessPointLERm @ 44 NONAME
+	_ZTI20CSVGTAppObserverUtil @ 45 NONAME DATA 56 ; #<TI>#
+	_ZTI23CSVGTViewerAppDownloads @ 46 NONAME DATA 12 ; #<TI>#
+	_ZTV20CSVGTAppObserverUtil @ 47 NONAME DATA 172 ; #<VT>#
+	_ZTV23CSVGTViewerAppDownloads @ 48 NONAME DATA 20 ; #<VT>#
+	_ZThn12_N20CSVGTAppObserverUtil15SVGTSavingDoneLEi @ 49 NONAME ; #<thunk>#
+	_ZThn12_N20CSVGTAppObserverUtil19SVGTPositionChangedEi @ 50 NONAME ; #<thunk>#
+	_ZThn16_N20CSVGTAppObserverUtil16DialogDismissedLEi @ 51 NONAME ; #<thunk>#
+	_ZThn4_N20CSVGTAppObserverUtil10FetchImageERK7TDesC16R3RFsR5RFile @ 52 NONAME ; #<thunk>#
+	_ZThn4_N20CSVGTAppObserverUtil11CanShowSaveEv @ 53 NONAME ; #<thunk>#
+	_ZThn4_N20CSVGTAppObserverUtil12IsSavingDoneEv @ 54 NONAME ; #<thunk>#
+	_ZThn4_N20CSVGTAppObserverUtil13LinkActivatedERK7TDesC16 @ 55 NONAME ; #<thunk>#
+	_ZThn4_N20CSVGTAppObserverUtil15GetSmilFitValueER6TDes16 @ 56 NONAME ; #<thunk>#
+	_ZThn4_N20CSVGTAppObserverUtil17NewFetchImageDataERK7TDesC16 @ 57 NONAME ; #<thunk>#
+	_ZThn4_N20CSVGTAppObserverUtil18AssignEmbededDataLERK7TDesC16 @ 58 NONAME ; #<thunk>#
+	_ZThn4_N20CSVGTAppObserverUtil20DisplayDownloadMenuLEv @ 59 NONAME ; #<thunk>#
+	_ZThn4_N20CSVGTAppObserverUtil21LinkActivatedWithShowERK7TDesC16S2_ @ 60 NONAME ; #<thunk>#
+	_ZThn4_N20CSVGTAppObserverUtil7DoSaveLEi @ 61 NONAME ; #<thunk>#
+	_ZThn4_NK20CSVGTAppObserverUtil15CanShowDownloadEv @ 62 NONAME ; #<thunk>#
+	_ZThn8_N20CSVGTAppObserverUtil16HandleDMgrEventLER13RHttpDownload18THttpDownloadEvent @ 63 NONAME ; #<thunk>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/EABI/SVGTScreenSaverPluginU.DEF	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,15 @@
+EXPORTS
+	_Z24ImplementationGroupProxyRi @ 1 NONAME
+	_Z12NPP_Shutdownv @ 2 NONAME
+	_Z15InitializeFuncsP14_NPPluginFuncs @ 3 NONAME
+	_ZTI11CSvgtPlugin @ 4 NONAME ; #<TI>#
+	_ZTI15CSvgScreenSaver @ 5 NONAME ; #<TI>#
+	_ZTI19CSvgtPluginEcomMain @ 6 NONAME ; #<TI>#
+	_ZTI20CSvgRenderFrameTimer @ 7 NONAME ; #<TI>#
+	_ZTI22CSvgRenderFrameControl @ 8 NONAME ; #<TI>#
+	_ZTV11CSvgtPlugin @ 9 NONAME ; #<VT>#
+	_ZTV15CSvgScreenSaver @ 10 NONAME ; #<VT>#
+	_ZTV19CSvgtPluginEcomMain @ 11 NONAME ; #<VT>#
+	_ZTV20CSvgRenderFrameTimer @ 12 NONAME ; #<VT>#
+	_ZTV22CSvgRenderFrameControl @ 13 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/EABI/SVGTUICONTROLU.def	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,28 @@
+EXPORTS
+	_ZN13CSVGTUIDialog15AssignImageDataERK7TDesC16P6HBufC8 @ 1 NONAME
+	_ZN13CSVGTUIDialog4NewLEv @ 2 NONAME
+	_ZN13CSVGTUIDialog5NewLCEv @ 3 NONAME
+	_ZN16CSVGTCustControl4NewLER5RFileP16MSvgtAppObserverP24MSVGTProgressBarDrawImplP12MSVGTMSKImplP28MSvgtApplicationExitObserveriPK11CCoeControli @ 4 NONAME
+	_ZN18CSVGTThumbnailUtil19GenerateThumbnailLDER5RFileR10CFbsBitmapS3_ @ 5 NONAME
+	_ZTI10CSvgtEvent @ 6 NONAME ; #<TI>#
+	_ZTI13CSVGTUIDialog @ 7 NONAME ; #<TI>#
+	_ZTI14CSVGTDrmHelper @ 8 NONAME ; #<TI>#
+	_ZTI16CSVGTCustControl @ 9 NONAME ; #<TI>#
+	_ZTI18CSVGTThumbnailUtil @ 10 NONAME ; #<TI>#
+	_ZTI19CSvgtEventHandlerAO @ 11 NONAME ; #<TI>#
+	_ZTI21CSVGTPointerHideTimer @ 12 NONAME ; #<TI>#
+	_ZTI21CSVGTProgressBarTimer @ 13 NONAME ; #<TI>#
+	_ZTI21CSvgtDecoratorControl @ 14 NONAME ; #<TI>#
+	_ZTI21CSvgtThreadController @ 15 NONAME ; #<TI>#
+	_ZTV10CSvgtEvent @ 16 NONAME ; #<VT>#
+	_ZTV13CSVGTUIDialog @ 17 NONAME ; #<VT>#
+	_ZTV14CSVGTDrmHelper @ 18 NONAME ; #<VT>#
+	_ZTV16CSVGTCustControl @ 19 NONAME ; #<VT>#
+	_ZTV18CSVGTThumbnailUtil @ 20 NONAME ; #<VT>#
+	_ZTV19CSvgtEventHandlerAO @ 21 NONAME ; #<VT>#
+	_ZTV21CSVGTPointerHideTimer @ 22 NONAME ; #<VT>#
+	_ZTV21CSVGTProgressBarTimer @ 23 NONAME ; #<VT>#
+	_ZTV21CSvgtDecoratorControl @ 24 NONAME ; #<VT>#
+	_ZTV21CSvgtThreadController @ 25 NONAME ; #<VT>#
+	_ZN16CSVGTCustControl11AddListenerEP23MSvgCustControlListener20TCustControlListener @ 26 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/EABI/svgtfileviewdetails.def	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,10 @@
+EXPORTS
+	_ZN26CSvgtFileViewDetailsDialog4NewLEv @ 1 NONAME
+	_ZN26CSvgtFileViewDetailsDialog9ExecuteLDER5RFile @ 2 NONAME
+	_ZTI14CSVGTDrmHelper @ 3 NONAME ; #<TI>#
+	_ZTI16CSvgtFileDetails @ 4 NONAME ; #<TI>#
+	_ZTI26CSvgtFileViewDetailsDialog @ 5 NONAME ; #<TI>#
+	_ZTV14CSVGTDrmHelper @ 6 NONAME ; #<VT>#
+	_ZTV16CSvgtFileDetails @ 7 NONAME ; #<VT>#
+	_ZTV26CSvgtFileViewDetailsDialog @ 8 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/SVGCodec.mmp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,77 @@
+/*
+* 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:  SVGT plugin project file
+*
+*/
+
+
+#include <platform_paths.hrh>
+/**
+@file
+
+@SYMPurpose SVGcodec.dll SVG codec plugin
+*/
+
+target svgcodec.dll
+CAPABILITY ALL -TCB
+targettype plugin
+
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID	0x10009D8D 0x102073D7
+VENDORID 0x70000001
+
+USERINCLUDE	../SVGCodecInc
+
+// This is a SYSTEMINCLUDE macro containing the applications
+// layer specific include directories
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE	/epoc32/include/ecom
+SYSTEMINCLUDE	/epoc32/include/icl
+
+SOURCEPATH	../SVGCodecSrc
+SOURCE		SVGConvert.cpp
+SOURCE		SVGCodec.cpp
+SOURCE		SVGProxy.cpp
+
+SOURCEPATH	../data
+
+START RESOURCE 102073D7.rss
+TARGET SVGCodec.rsc
+HEADER
+END
+
+START RESOURCE 102073D7_extra.rss
+TARGETPATH Resource/ICL
+HEADER
+END
+
+LIBRARY	euser.lib
+LIBRARY	ImageConversion.lib
+LIBRARY	fbscli.lib
+LIBRARY	gdi.lib
+LIBRARY SvgEngine.lib
+LIBRARY Cone.lib
+LIBRARY efsrv.lib
+LIBRARY bitgdi.lib
+LIBRARY InetProtUtil.lib
+LIBRARY platformenv.lib
+LIBRARY imut.lib
+LIBRARY charconv.lib
+
+START	WINS
+BASEADDRESS	0x4F630000
+END
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/SVGTAppObserverUtil.mmp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2004,2005 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:  This is the .mmp for building the SVGT Viewer Application 
+*                Observer utility for the Series60 Platform.
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET          SVGTAppObserverUtil.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x102071E5
+
+CAPABILITY      CAP_GENERAL_DLL 
+VENDORID        VID_DEFAULT
+
+SOURCEPATH      ../AppObserverUtilSrc
+SOURCE          SVGTAppObserverUtil.cpp
+SOURCE          SVGTViewerAppDownloads.cpp
+SOURCE          SVGTFileManager.cpp
+
+// This is a SYSTEMINCLUDE macro containing the applications
+// layer specific include directories
+APP_LAYER_SYSTEMINCLUDE
+
+START RESOURCE  ../data/SVGTAppObserverUtil.rss
+TARGETPATH      RESOURCE_FILES_DIR
+HEADER
+LANGUAGE_IDS
+END // RESOURCE
+
+USERINCLUDE     ../AppObserverUtilInc 
+USERINCLUDE     ../UIControlInc 
+USERINCLUDE     ../AppInc
+
+
+LIBRARY         euser.lib
+LIBRARY         cone.lib 
+LIBRARY         eikcore.lib 
+LIBRARY         avkon.lib
+LIBRARY         efsrv.lib 
+LIBRARY         bafl.lib
+LIBRARY         DownloadMgr.lib
+LIBRARY         DownloadMgrUiLib.lib
+LIBRARY         commdb.lib
+LIBRARY         apengine.lib 
+LIBRARY         browserlauncher.lib
+LIBRARY         APGRFX.lib
+LIBRARY         WS32.lib
+LIBRARY         CENTRALREPOSITORY.lib
+LIBRARY         CommonEngine.lib
+LIBRARY         apmime.lib
+LIBRARY         CommonUi.lib
+LIBRARY         InetProtUtil.lib 
+LIBRARY         SVGTUIControl.lib
+LIBRARY         charconv.lib
+LIBRARY         commondialogs.lib
+LIBRARY         aknnotify.lib // AknGlobalNote
+LIBRARY         aknmemorycardui.lib
+LIBRARY         eikctl.lib
+LIBRARY         sysutil.lib
+LIBRARY         platformenv.lib
+
+LIBRARY         imut.lib
+LIBRARY         ServiceHandler.lib
+
+DEBUGLIBRARY    flogger.lib
+
+LANGUAGE_IDS
+
+#if defined(ARMCC)
+deffile ../EABI/ 
+#elif defined(WINSCW)
+deffile ../BWINSCW/ 
+#endif
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/SVGTScreenSaverPlugin.mmp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,83 @@
+/*
+* 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:  This is the .mmp for building the Svg Screen Saver Plugin 
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET          SVGTScreenSaverPlugin.dll
+
+TARGETTYPE PLUGIN 
+
+/* exportunfrozen */
+
+UID             0x10009D8D 0x102071E7
+
+CAPABILITY      CAP_ECOM_PLUGIN
+VENDORID        VID_DEFAULT
+
+// This is a SYSTEMINCLUDE macro containing the applications
+// layer specific include directories
+APP_LAYER_SYSTEMINCLUDE
+
+START RESOURCE ../data/102071E7.rss 
+HEADER
+TARGET      SVGTScreenSaverPlugin.rsc
+END
+
+/* exportunfrozen */
+
+SOURCEPATH      ../ScreenSaverPluginSrc
+SOURCE          SvgRenderFrameControl.cpp
+SOURCE          SvgRenderFrameTimer.cpp
+SOURCE          SvgScreenSaver.cpp
+SOURCE          Svgtplugin.cpp
+SOURCE          Svgtplugindllapi.cpp
+SOURCE          Svgtpluginmain.cpp
+
+
+
+USERINCLUDE     ../ScreenSaverPluginInc
+
+
+SYSTEMINCLUDE   .
+SYSTEMINCLUDE   /epoc32/include/libc
+SYSTEMINCLUDE   /epoc32/include/ecom
+
+LIBRARY         svgengine.lib
+LIBRARY         ecom.lib 
+LIBRARY         euser.lib
+LIBRARY         gdi.lib 
+LIBRARY         fbscli.lib 
+LIBRARY         cone.lib 
+LIBRARY         efsrv.lib 
+LIBRARY         avkon.lib 
+LIBRARY         SVGTUIControl.lib 
+LIBRARY         SVGTAppObserverUtil.lib
+
+DEBUGLIBRARY    flogger.lib
+
+LANGUAGE_IDS
+
+#if defined(ARMCC)
+deffile ../EABI/ 
+#elif defined(WINSCW)
+deffile ../BWINSCW/ 
+#endif
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/SVGTUIControl.mmp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2004,2005 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:  This is the .mmp for building the SVGT UI Control for
+*                the Series60 Platform.
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET          SVGTUIControl.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101F8749
+
+CAPABILITY      CAP_GENERAL_DLL 
+VENDORID        VID_DEFAULT
+
+
+/* exportunfrozen */
+
+SOURCEPATH      ../UIControlSrc
+SOURCE          SVGTUIDialog.cpp
+SOURCE          SVGTCustControl.cpp
+SOURCE          SVGTProgressBarTimer.cpp
+SOURCE          SVGTPointerHideTimer.cpp
+SOURCE          SVGTDrmHelper.cpp
+SOURCE          SVGTThumbnailUtil.cpp
+SOURCE          SvgtController.cpp
+SOURCE          SvgtEvent.cpp
+SOURCE          SvgtEventHandlerAO.cpp
+SOURCE          SvgtDecoratorControl.cpp 
+
+// This is a SYSTEMINCLUDE macro containing the applications
+// layer specific include directories
+APP_LAYER_SYSTEMINCLUDE
+
+START RESOURCE  ../data/SVGTUIControl.rss
+TARGETPATH      RESOURCE_FILES_DIR
+HEADER
+LANGUAGE_IDS
+END  // RESOURCE
+
+USERINCLUDE     ../UIControlInc
+
+
+
+SYSTEMINCLUDE   /epoc32/include/libc
+
+
+LIBRARY         aknskins.lib
+LIBRARY         egul.lib
+LIBRARY         euser.lib
+LIBRARY         apparc.lib
+LIBRARY         cone.lib
+LIBRARY         eikcore.lib
+LIBRARY         avkon.lib
+LIBRARY         eikcoctl.lib
+LIBRARY         eikctl.lib
+LIBRARY         bafl.lib
+LIBRARY         estor.lib
+LIBRARY         efsrv.lib
+LIBRARY         fbscli.lib
+LIBRARY         bitgdi.lib
+LIBRARY         gdi.lib
+LIBRARY         eikdlg.lib
+LIBRARY         svgengine.lib
+LIBRARY         drmhelper.lib
+LIBRARY         drmcommon.lib
+LIBRARY         commonengine.lib
+LIBRARY         aknicon.lib              // AknIconUtils 
+LIBRARY         CdlEngine.lib            // Scalable UI 
+LIBRARY         AknLayout2.lib           // Scalable UI
+LIBRARY         AknLayout2Scalable.lib   // Scalable UI
+LIBRARY         InetProtUtil.lib
+LIBRARY         svgtfileviewdetails.lib
+LIBRARY         ws32.lib
+
+#ifdef RD_SVGT_AUDIO_SUPPORT
+LIBRARY         remconcoreapi.lib
+LIBRARY         remconinterfacebase.lib
+#endif
+
+#ifdef __SERIES60_HELP
+LIBRARY         hlplch.lib               // for "Help" options menu
+#endif // __SERIES60_HELP
+LIBRARY         caf.lib                  // CAF library: for DRM
+LIBRARY         SVGTAppObserverUtil.lib
+
+LANGUAGE_IDS
+
+#if defined( ARMCC )
+deffile ../EABI/SVGTUICONTROL.def
+#elif defined( WINSCW )
+deffile ../BWINSCW/SVGTUICONTROL.def
+#elif defined( WINS )
+deffile ../bwins/SVGTUICONTROL.def
+#else
+deffile ../bmarm/SVGTUICONTROL.def
+#endif
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/SVGTViewerApp.mmp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2004,2005 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:  This is the .mmp for building the SVGT Viewer App for
+*                  the Series60 Platform.
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET          SVGTViewerApp.exe
+EPOCHEAPSIZE    300000 16000000
+EPOCSTACKSIZE   0x5000
+TARGETTYPE      exe
+UID             0x100039CE 0x101F874A
+
+CAPABILITY      CAP_APPLICATION ProtServ MultimediaDD
+VENDORID        VID_DEFAULT
+
+SOURCEPATH      ../AppSrc
+SOURCE          SVGTViewerApp.cpp
+SOURCE          SVGTViewerAppApplication.cpp 
+SOURCE          SVGTViewerAppAppUi.cpp
+SOURCE          SVGTViewerAppDocument.cpp 
+SOURCE          SvgtViewerAppView.cpp
+
+// This is a SYSTEMINCLUDE macro containing the applications
+// layer specific include directories
+APP_LAYER_SYSTEMINCLUDE
+
+START RESOURCE  ../data/SVGTViewerApp.rss
+TARGETPATH      APP_RESOURCE_DIR
+HEADER
+LANGUAGE_IDS
+END // RESOURCE 
+
+USERINCLUDE     ../AppInc 
+USERINCLUDE     ../UIControlInc 
+
+
+
+SYSTEMINCLUDE   /epoc32/include/libc
+
+LIBRARY         euser.lib
+LIBRARY         apparc.lib
+LIBRARY         cone.lib 
+LIBRARY         eikcore.lib 
+LIBRARY         eikcoctl.lib
+LIBRARY         avkon.lib
+LIBRARY         egul.lib 
+LIBRARY         bitgdi.lib
+LIBRARY         gdi.lib
+LIBRARY         svgengine.lib   
+LIBRARY         fbscli.lib
+LIBRARY         efsrv.lib 
+LIBRARY         bafl.lib
+LIBRARY         WS32.lib
+LIBRARY         CommonEngine.lib
+LIBRARY         CommonUi.lib
+LIBRARY         SVGTUIControl.lib
+LIBRARY         SVGTAppObserverUtil.lib
+LIBRARY         ServiceHandler.lib  // AIW Generic Param Handling.
+LIBRARY         platformenv.lib
+
+// Changes for Scalable UI:
+// New registration resource defined.
+// else 
+//      Normal AIF will work.
+
+START RESOURCE ../data/SVGTViewerApp_reg.rss
+DEPENDS svgtviewerapp.rsg
+// Do not change the UID below.
+TARGETPATH      /private/10003a3f/apps
+END
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/SVGTViewerApp.pkg	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,72 @@
+;
+; Copyright (c) 2009 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:
+;
+;
+; Installation file for SVGT Viewer App 
+;
+;Languages
+&EN
+;
+; UID is the app's UID
+;
+#{"SVG Viewer App"},(0x101F874A),1,0,0
+
+;
+;Supports Series 60 v 2.0
+(0x101F7960), 0, 0, 0, {"Series60ProductID"}
+
+; SVGT UI Control
+; DLL + RSC
+"\Epoc32\release\thumb\urel\SVGTUIControl.dll"         -"!:\system\libs\SVGTUIControl.dll"
+"\Epoc32\data\z\system\data\SVGTUIControl.rsc"         -"!:\system\data\SVGTUIControl.rsc" 
+
+; SVGT Viewer App
+; App + RSC + AIF
+"\Epoc32\release\thumb\urel\SVGTViewerApp.app"         -"!:\system\apps\SVGTViewerApp\SVGTViewerApp.app"
+"\Epoc32\data\z\system\Apps\SVGTViewerApp\SVGTViewerApp.rsc" -"!:\system\apps\SVGTViewerApp\SVGTViewerApp.rsc"
+"\Epoc32\data\z\system\Apps\SVGTViewerApp\SVGTViewerApp.aif" -"!:\system\apps\SVGTViewerApp\SVGTViewerApp.aif"
+
+;
+;
+; Now the Dlls used by the application, put in the same directory
+;
+"\Epoc32\release\thumb\urel\gfx2d.dll" -"!:\system\libs\Gfx2d.dll"
+"\Epoc32\release\thumb\urel\svgengine.dll" -"!:\system\libs\SVGEngine.dll"
+
+; Remove this when XMLINTERFACE.DLL is on hardware:
+"\Epoc32\release\thumb\urel\XMLINTERFACE.DLL" -"!:\system\libs\XMLINTERFACE.DLL"
+
+; XMLParser:
+"\Epoc32\release\thumb\urel\cXmlParser.dll" -"!:\system\libs\cXmlParser.dll"
+
+; Remove this when DRM is on hardware:
+"\Epoc32\release\thumb\urel\DRMCOMMON.DLL" -"!:\system\libs\DRMCOMMON.DLL"
+
+; Remove this when DRM is on hardware:
+"\Epoc32\release\thumb\urel\DRMAUTHENTICATED.DLL" -"!:\system\libs\DRMAUTHENTICATED.DLL"
+
+; SVGT Recogniser, put in system recogniser directory to recognise SVG mime type.
+"\Epoc32\release\thumb\urel\SVGRECOG.MDL" -"!:\system\recogs\Svgrecog.mdl"
+
+; Remove this when DRM is on hardware:
+"\Epoc32\release\thumb\urel\DRMHELPER.DLL" -"!:\system\libs\DRMHELPER.DLL"
+
+; Remove this when DRM is on hardware:
+"\Epoc32\release\thumb\urel\COMMONENGINE.DLL" -"!:\system\libs\COMMONENGINE.DLL"
+
+; Remove this when DRM is on hardware:
+"\Epoc32\release\thumb\urel\MPLAYERDRMHELPER.DLL" -"!:\system\libs\MPLAYERDRMHELPER.DLL"
+
+"\Epoc32\release\thumb\urel\DRMManagerEng.dll" -"!:\system\libs\DRMManagerEng.DLL"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/bld.inf	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2004-2007 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:  This is a top level bld file that drives all sub-components
+*                that make up the SVGT Viewer App and the UI Control
+*
+*/
+
+
+#ifdef __SVGT_VIEWER 
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+//  Help exports
+#include "../help/group/bld.inf"
+
+PRJ_MMPFILES
+SVGTAppObserverUtil.mmp
+SVGTViewerApp.mmp
+SVGTUIControl.mmp
+SVGCodec.mmp
+svgtfileviewdetails.mmp
+#ifdef __SVGT_SCREENSAVER_PLUGIN
+SVGTScreenSaverPlugin.mmp
+#endif //__SVGT_SCREENSAVER_PLUGIN
+
+//gnumakefile icons_dc.mk
+//#ifdef __SCALABLE_ICONS
+//gnumakefile icons_aif_scalable_dc.mk
+//#else
+//gnumakefile icons_aif_bitmaps_dc.mk
+//#endif // __SCALABLE_ICONS
+
+//S60 CODE CHANGES FOR RAPTOR
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE svgtuicontrol.mif
+OPTION HEADERFILE svgtuicontrol.mbg
+OPTION SOURCES -c8,8 qgn_indi_viewer_panning_down  \
+              -c8,8 qgn_indi_viewer_panning_left  \
+              -c8,8 qgn_indi_viewer_panning_right \
+              -c8,8 qgn_indi_viewer_panning_up    \
+              -c8,8 qgn_indi_viewer_pointer       \
+              -c8,8 qgn_indi_viewer_pointer_hand  \
+              -c8,8 qgn_indi_viewer_pointer_text  \
+              -c8,8 qgn_indi_cams_paused         
+
+END
+
+START EXTENSION s60/mifconv
+OPTION TARGETFILE svgtviewerapp_aif.mif
+OPTION SOURCES -c8,8 qgn_menu_mg
+END
+
+
+
+PRJ_EXPORTS
+// CP50 Build Improvements
+../rom/SVGTAppObserverUtil.iby   CORE_APP_LAYER_IBY_EXPORT_PATH(svgtappobserverutil.iby)
+../rom/SVGTViewerApp.iby         CORE_APP_LAYER_IBY_EXPORT_PATH(svgtviewerapp.iby)
+../rom/SVGTUIControl.iby         CORE_APP_LAYER_IBY_EXPORT_PATH(svgtuicontrol.iby)
+../rom/SVGCodec.iby              CORE_APP_LAYER_IBY_EXPORT_PATH(svgcodec.iby)
+../rom/SVGTFileViewDetails.iby   CORE_APP_LAYER_IBY_EXPORT_PATH(svgtfileviewdetails.iby)
+../rom/SVGScreenSaverPlugin.iby  CORE_APP_LAYER_IBY_EXPORT_PATH(svgscreensaverplugin.iby)
+
+// Localised Resource iby file exports
+../rom/SVGTAppObserverUtilResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(svgtappobserverutilresources.iby)
+../rom/SVGTFileViewDetailsResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(svgtfileviewdetailsresources.iby)
+../rom/SVGTUIControlResources.iby       LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(svgtuicontrolresources.iby)
+../rom/SVGTViewerAppResources.iby       LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(svgtviewerappresources.iby)
+
+// Loc files: Ease of localised builds
+../loc/svgtfileviewdetails.loc 	 APP_LAYER_LOC_EXPORT_PATH(svgtfileviewdetails.loc)
+../loc/svgtuicontrol.loc         APP_LAYER_LOC_EXPORT_PATH(svgtuicontrol.loc)
+
+#endif // __SVGT_VIEWER
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/icons_aif_bitmaps_dc.mk	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,70 @@
+#
+# Copyright (c) 2004,2005 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:  This is the makefile for building the AIF MBM file using
+#               bitmaps. The MBM file is stored in Data-Caging location.
+# ============================================================================
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# Target path and MBM file name
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\resource\apps
+ICONTARGETFILENAME=$(TARGETDIR)\svgtviewerapp_aif.mbm
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask depth is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+	mifconv $(ICONTARGETFILENAME) \
+		/c8,8 qgn_menu_mg_lst.bmp \
+		/c8,8 qgn_menu_mg_cxt.bmp
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
+# End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/icons_aif_scalable_dc.mk	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,69 @@
+#
+# Copyright (c) 2004,2005 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:  This is the makefile for building the AIF MIF file using
+#               SVG icons. The MIF file is stored in Data-Caging location.
+# ============================================================================
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# Target Paths and file name
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\resource\apps
+ICONTARGETFILENAME=$(TARGETDIR)\svgtviewerapp_aif.mif
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask depth is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+	mifconv $(ICONTARGETFILENAME) \
+		/c8,8 qgn_menu_mg.svg
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
+# End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/icons_dc.mk	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,78 @@
+#
+# Copyright (c) 2004,2005 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:  This is the makefile for compiling the icons for 
+#               SVGTUIControl using data-caging paths.
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# Target Path and MIF file name
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\resource\apps
+ICONTARGETFILENAME=$(TARGETDIR)\svgtuicontrol.mif
+
+HEADERDIR=\epoc32\include
+HEADERFILENAME=$(HEADERDIR)\svgtuicontrol.mbg
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask depth is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+	mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME)   \
+                        /c8,8 qgn_indi_viewer_panning_down  \
+                        /c8,8 qgn_indi_viewer_panning_left  \
+                        /c8,8 qgn_indi_viewer_panning_right \
+                        /c8,8 qgn_indi_viewer_panning_up    \
+                        /c8,8 qgn_indi_viewer_pointer       \
+                        /c8,8 qgn_indi_viewer_pointer_hand  \
+                        /c8,8 qgn_indi_viewer_pointer_text  \
+                        /c8,8 qgn_indi_cams_paused         
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(HEADERFILENAME)&& \
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
+# End of file	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/Group/svgtfileviewdetails.mmp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 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:  This is the .mmp for building the SVGT File Details dialog DLL.
+*
+*/
+
+
+// 
+//
+// using relative paths for sourcepath and user includes
+// exports are unfrozen
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET        svgtfileviewdetails.dll
+TARGETTYPE    dll
+UID           0x1000008d 0x10004420
+
+CAPABILITY      CAP_GENERAL_DLL 
+VENDORID        VID_DEFAULT
+
+SOURCEPATH    ../data
+
+LANGUAGE_IDS
+
+// This is a SYSTEMINCLUDE macro containing the applications
+// layer specific include directories
+APP_LAYER_SYSTEMINCLUDE
+
+START RESOURCE  svgtfileviewdetails.rss
+TARGETPATH      RESOURCE_FILES_DIR
+HEADER
+LANGUAGE_IDS
+END // RESOURCE
+
+SOURCEPATH    ../SvgtFileViewDetailsSrc
+SOURCE        svgtfileviewdetails.cpp
+SOURCE	      SVGTDrmHelper.cpp
+	
+USERINCLUDE   ../SvgtFileViewDetailsInc
+
+
+LIBRARY       euser.lib 
+LIBRARY       efsrv.lib 
+LIBRARY       cone.lib 
+LIBRARY       bafl.lib 
+LIBRARY       eikcoctl.lib 
+LIBRARY       caf.lib 
+LIBRARY       avkon.lib 
+LIBRARY       drmhelper.lib 
+LIBRARY       CommonEngine.lib 
+LIBRARY       tzclient.lib
+
+#if defined(WINSCW)
+    deffile ../BWINSCW/svgtfileviewdetails.def
+#elif defined(ARMCC)
+    deffile ../EABI/svgtfileviewdetails.def
+#endif
+
+nostrictdef
+//exportunfrozen
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/SVGCodecInc/SVGCodec.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2005 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:  SVGT codec for reading the file header & data.
+*
+*/
+
+
+#ifndef SVGCODEC_H
+#define SVGCODEC_H
+
+#include <imagecodec.h>
+#include <imagedata.h>
+#include <SVGRequestObserver.h>
+#include <SVGListener.h>
+
+
+class CSvgEngineInterfaceImpl;
+class CFbsBitmap;
+class TFrameInfo;
+class TSVGFrameInfo;
+class MSvgError;
+class CGulIcon;
+
+// SVG Read codec.
+class CSvgReadCodec : public CImageProcessorReadCodec
+                       ,public MSvgRequestObserver
+                       , public MSvgLoadingListener
+
+    {
+public:
+    enum TDownloadNeeded 
+        {
+        // The uri refers to a local image file
+        ELocalImageFile,
+        // The uri refers to a remote image file
+        ERemoteImageFile,
+        // The uri doesnt refer to an image file
+        ENotAnImageFile
+        };
+    
+    enum TImagesLocation
+        {
+        EPhoneMemory,
+        EMemoryCard
+        };
+public:
+
+    /**
+    * Static constructor. Creates and returns a pointer to CSvgReadCodec
+    * @since 3.1
+    * @return Pointer to the read codec instance.
+    */
+    static CSvgReadCodec* NewL(const TSize& aSize);
+
+    /**
+    * Destructor.
+    */
+    virtual ~CSvgReadCodec();
+
+    /**
+    * Sets the SVG presentation data
+    * @since 3.1
+    * @param aFileData  SVG presentation file data
+    */
+    void SetFileDataL( const TDesC8& aFileData );
+    
+public: //From MSvgRequestObserver
+    void UpdateScreen();
+
+    TBool ScriptCall( const TDesC& aScript, CSvgElementImpl* aCallerElement );
+
+    TInt FetchImage( const TDesC& aUri, RFs& aSession, RFile& aFileHandle ) ;
+    TInt CSvgReadCodec::FetchFont( const TDesC& /* aUri */, 
+                                    RFs& /* aSession */, RFile& /* aFileHandle */ );
+
+    void GetSmilFitValue( TDes& aSmilValue );
+
+    void UpdatePresentation( const TInt32&  aNoOfAnimation );        
+
+public: //User methods
+    void PrepareEngine();
+    TSize ContentSize() const;
+    void GenerateThumbnailL(CFbsBitmap* aFrame, CFbsBitmap* aFrameMask);
+    TDownloadNeeded IsDownloadNeededL( const TDesC& aUri ) const;
+    TBool GetLocalFile( const TDesC& aUri, 
+                                    TDes& aFileName ,
+                                    const TDesC& aRefPath ) const;
+    
+    HBufC* GetImagesPath( CSvgReadCodec::TImagesLocation aImagesLocation) const;
+    
+protected:
+    // From CImageProcessorReadCodec
+    /**
+    * Performs initial processing of image data and mask bitmaps.
+	* @param	aFrameInfo
+	        A reference to a TFrameInfo object.
+	* @param	aFrameImageData
+	        A reference to a CFrameImageData object.
+	* @param	aDisableErrorDiffusion
+	        A flag indicating whether error diffusion should be disabled.
+	* @param	aDestination
+	        The destination bitmap.
+	* @param	aDestinationMask
+	        The destination mask bitmap.
+    */
+    virtual void InitFrameL(TFrameInfo& aFrameInfo, CFrameImageData& aFrameImageData, TBool aDisableErrorDiffusion, CFbsBitmap& aDestination, CFbsBitmap* aDestinationMask);
+    
+	/**
+	* Processes the frame data contained in aSrc.
+ 	* This is a pure virtual function that each derived class must implement.
+	* @param  aSrc
+	*       A reference to the buffer containing the frame data.
+    *
+	* @return	The current frame state after processing.
+	*/
+    
+    virtual TFrameState ProcessFrameL(TBufPtr8& aSrc);
+
+private:
+    
+    /**
+    * Precesses the SVG presentation file data
+    */
+    void DoProcessL();
+    
+    /**
+    * Default constructor
+    * @param aSize specifies the thubnail size
+    */
+    CSvgReadCodec(const TSize& aSize);
+
+    void ConstructL();
+    void InitializeEngineL();
+    /**
+    * Deletes the structures associated with the engine
+    * viz. The Frame List, Mask List, Delay Interval List, 
+    * The DOM for the content and the Engine Implementation itself
+    */
+    void DeleteEngine();
+// From MSvgLoadingListener    
+public:
+    /**
+     * Query the listener if every element is to be reported or only
+     * the children of <svg> tag.
+     *
+     * @since 1.0
+     * @return : ETrue if every element is to be reported, otherwise
+     *           only the children of <svg> are reported.
+     */
+    TBool ReportAllElements();
+
+    /**
+     * Query the listener if client will call 'AssignImageData' to decode images
+     * separately from parsing.  This is used to avoid non-thread-safe calls in
+     * creating bitmap and decoding images, which must be executed in the main thread.
+     *
+     * @since 1.0
+     * @return : ETrue to use 'ImageDataReference' instead of 'FetchImage'.
+     */
+    TBool WillAssignImageData();
+
+    /**
+     * Callback when the href:xlink attribute is encountered for the <image>
+     * element.  This method is used to notify clients of image data references
+     * needed by <image> element.  This method is called only when 'WillAssignImageData'
+     * returns ETrue.
+     *
+     * @since 1.0
+     * @return : none.
+     */
+    void ImageDataReference( const TDesC& aUri );
+
+    /**
+     * Notified when the start of a svg document(<svg> tag) is encountered.
+     *
+     * @since 1.0
+     * @return : For future use.  Value is ignored.
+     */
+    TBool DocumentStart() ;
+
+    /**
+     * Notified when the end of a svg document(</svg> tag) is encountered.
+     *
+     * @since 1.0
+     * @return : For future use.  Value is ignored.
+     */
+    TBool DocumentEnd();
+
+    /**
+     * Notified when the start of a svg element is encountered.
+     *
+     * @since 1.0
+     * @param : aTagName -- name of svg tag
+     * @param : aAttributeList -- attribute list.
+     * @return : For future use.  Value is ignored.
+     */
+    TBool ElementStart( const TDesC& aTagName,
+                                MSvgAttributeList& aAttributeList);
+
+    /**
+     * Notified when the end of a svg element is encountered.
+     * activated.
+     *
+     * @since 1.0
+     * @param : aTagName -- name of svg tag
+     * @return : For future use.  Value is ignored.
+     */
+    TBool ElementEnd( const TDesC& aTagName );
+
+    /**
+     * Notified when an external data is needed by the svg document,
+     * such as a image-file or an embedded svg-file.
+     *
+     * @since 1.0
+     * @param : aUri -- URI string of external data
+     * @return : For future use.  Value is ignored.
+     */
+    TBool ExternalDataRequested( const TDesC& aUri );
+
+    /**
+     * Notified when an external data has been retrieved,
+     * such as a image-file or an embedded svg-file.
+     *
+     * @since 1.0
+     * @param : aUri -- URI string of external data
+     * @return : For future use.  Value is ignored.
+     */
+    TBool ExternalDataReceived( const TDesC& aUri );
+
+    /**
+     * Notified when an external data request has failed.
+     *
+     * @since 1.0
+     * @param : aUri -- URI string of external data
+     * @return : For future use.  Value is ignored.
+     */
+    TBool ExternalDataRequestFailed( const TDesC& aUri );
+
+    /**
+     * Notified when an unsupported element is encountered.
+     *
+     * @since 1.0
+     * @param : aTagName -- tag name of element
+     * @param : aAttributeList -- attribute list.
+     * @return : For future use.  Value is ignored.
+     */
+    TBool UnsupportedElement( const TDesC& aTagName,
+                                      MSvgAttributeList& aAttributeList );
+
+    void ImagesLoaded(TInt aError);
+    void GetNewDataPosition(TInt &aPosition, TInt &aLength);
+    
+private:    // Data
+    // Dummy Bitmap used by SVG Engine to render content.
+    CFbsBitmap* iSVGTBitMapDummy;
+
+    // SVG Engine Interface Implementation pointer
+    CSvgEngineInterfaceImpl* iSvgModule;
+    
+    //Frame Array
+    RPointerArray<CFbsBitmap> iFrameList;
+    RPointerArray<CFbsBitmap> iMaskList;
+    RArray<TUint> iDelayList;
+    
+    // SVG Thumbnail Handle
+    TInt iThumbnailHandle;
+      
+    // SVGT content filename descriptor
+    HBufC8* iFileData;
+    TSize iContentSize;
+    MSvgError* iPrepareDomResult;
+    
+    TBool iImagesPresent;
+    
+    TBool iImagesLoaded;
+
+    TSize iOriginalSize;
+    };
+
+#endif  //SVGCODEC_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/SVGCodecInc/SVGConvert.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2005 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:  ECom plugin to create the thumbnails from svg presentation.
+*
+*/
+
+
+
+#ifndef SVGCONVERT_H
+#define SVGCONVERT_H
+
+#include <imageplugin.h>
+
+class CSvgReadCodec;
+class CFrameInfoStrings;
+
+/**
+* The PluginAPI for SVG content decoder. 
+* Intended to use it for the processing the SVG content.
+*/
+
+class CSvgDecoder : public CImageDecoderPlugin
+    {
+public:
+
+    /**
+    * Static constructor. Creates and returns a pointer to CSvgDecoder
+    * @since 3.1
+    * @return Pointer to the deocder instance.
+    */
+    static CSvgDecoder* NewL();
+    
+    /**
+    * Destructor.
+    */
+    ~CSvgDecoder();
+
+public:    //From CImageDecoderPlugin
+    /**
+    * Returns the image type & image sub type of the frame number specified
+    * @since 3.1
+    * @param aFrameNumber
+    * @param aImageType
+    * @param aImageSubType
+    * @return None.
+    */
+    void ImageType(TInt aFrameNumber, TUid& aImageType, TUid& aImageSubType) const; 
+    
+    /**
+    * Returns the codec specific frame information stored in resource files.
+    * This is a virtual funtion that each individual plugin must implement.
+    * @param  aFs A handle to a file server session.
+    * @param  aFrameNumber    The frame number to which the codec specific frame information
+    *        applies (optional, defaults to zero).
+    * @return A pointer to a newly allocated CFrameInfoStrings object.
+    *        Ownership is transferred to the caller.
+    */
+    CFrameInfoStrings* FrameInfoStringsL(RFs& aFs, TInt aFrameNumber);
+
+    TSize ContentSizeInTwips(const TSize aContentSizeInPixels) const;
+    
+private:
+    //Default constructor
+    CSvgDecoder();
+
+private: //From CImageDecoderPlugin
+
+	/**
+	* Invokes the ReadFrameHeadersL() method of the supplied plugin.
+    * The plugin's version of ReadFrameHeadersL() should read the image header \
+    * information, create
+	* the required codec and read the frame headers.
+	* This is a virtual funtion that each individual plugin must implement.
+	*/
+    void ScanDataL();
+    
+    /**
+    * Reads the image header & data information. It populates the image information \ 
+    * like content size, pixel depth.
+    * @since 3.1
+    */
+    void ReadFormatL();
+
+private:    //Data members
+    TPtrC8 iFileData;
+    };
+
+
+#endif // SVGCONVERT_H
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/SVGCodecInc/SVGImageCodecUIDs.hrh	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2005 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 Decoder plugin UIDs.
+*
+*/
+
+
+#ifndef SVGIMAGECODECUIDS_HRH
+#define SVGIMAGECODECUIDS_HRH
+
+#define KSVGCodecDllUidValue        0x102073D7
+#define KSVGDecoderImplementationUidValue    0x102071E8
+
+#endif  //SVGIMAGECODECUIDS_HRH
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/SVGCodecInc/SVGProxy.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2005 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:  SVGT proxy for resolving plugin.
+*
+*/
+
+
+#ifndef SVGDECODECONSTRUCT_H
+#define SVGDECODECONSTRUCT_H
+
+#include <imageconstruct.h>
+
+class CSvgDecodeConstruct : public CImageDecodeConstruct
+    {
+public:
+    /**
+    * Static constructor. Creates and returns a pointer to CSvgDecodeConstruct 
+    * @since 3.1
+    * @return Pointer to the decode construct instance.
+    */
+    
+    static CSvgDecodeConstruct* NewL();
+
+    // From CImageDecodeConstruct
+    /**
+	* Creates a new concrete CImageDecoderPlugin object.
+	* This is a pure virtual function that each derived class must implement.
+	* @return A pointer to a fully constructed CImageDecoderPlugin.
+	*/
+	
+    CImageDecoderPlugin* NewPluginL() const;
+    };
+
+#endif //SVGDECODECONSTRUCT_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/SVGCodecSrc/SVGCodec.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,967 @@
+/*
+* Copyright (c) 2005 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:  This file implements the read codec for the SVG presentation
+*
+*/
+
+
+#include "SVGCodec.h"
+
+// INCLUDE FILES
+#include <uri16.h>
+#include <coeutils.h>
+#include <SVGEngineInterfaceImpl.h>
+#include <gdi.h>
+#include <pathconfiguration.hrh>
+// User Includes
+#include <SVGTUIControlDbgFlags.hrh>
+#include <imcvcodc.h>
+#include <utf.h>
+
+#ifdef RD_MULTIPLE_DRIVE    
+#include <pathinfo.h>
+#include <driveinfo.h>
+#endif
+
+// General Constants
+const TInt KSccConstZero = 0;
+const TUint KSccBackground = 0xffffffff;
+// SMIL Fit Value
+_LIT( KSccSmilFitValue,"meet" );
+
+//
+_LIT( KWww, "www" );
+_LIT( KHttp, "http://");
+_LIT( KDotDot, ".." );
+_LIT( KBSlashStr, "/" );
+_LIT( KSlashStr, "\\" );
+_LIT( KDotSlashStr, ".\\" );
+_LIT( KColonStr, ":" );
+
+_LIT(KJpg,   ".jpg" );
+_LIT(KJpeg,  ".jpeg" );
+_LIT(KPng,   ".png" );
+_LIT(KBmp,   ".bmp" );
+_LIT(KSvg,   ".svg" );
+_LIT(KSvgz,  ".svgz" );
+//
+
+enum TSVGCodecPanic
+    {
+    ECouldNotGenerateThumbnail
+    };
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSvgReadCodec::CSvgReadCodec
+// Default constructor. 
+// -----------------------------------------------------------------------------
+//
+CSvgReadCodec::CSvgReadCodec( const TSize& aSize ): iImagesPresent(EFalse),
+                                                    iImagesLoaded (EFalse),
+                                                    iOriginalSize(aSize)
+
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgReadCodec::NewL
+// Static constructor. Returns the pointer to the CSvgReadCodec
+// -----------------------------------------------------------------------------
+//
+CSvgReadCodec* CSvgReadCodec::NewL( const TSize& aSize )
+    {
+    CSvgReadCodec* self = new(ELeave) CSvgReadCodec( aSize );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self); 
+    return self;
+    }
+    
+void CSvgReadCodec::ConstructL()
+    {
+    iSvgModule = NULL;
+    iSVGTBitMapDummy = NULL;
+    InitializeEngineL();
+    }
+
+void CSvgReadCodec::InitializeEngineL()
+    {
+    if ( !iSvgModule )
+       {
+       TFontSpec spec;
+
+       if ( !iSVGTBitMapDummy )
+           {
+           // For thumbnails, the user provided bitmap is used,
+           // Have to give some dummy bitmap to the engine in the constructor.
+           iSVGTBitMapDummy  = new( ELeave ) CFbsBitmap;
+           User::LeaveIfError( 
+                iSVGTBitMapDummy->Create( 
+                    TSize( KSccConstZero, KSccConstZero ), 
+                    EGray2 ) );
+           }
+
+       iSvgModule = CSvgEngineInterfaceImpl::NewL( iSVGTBitMapDummy, this, spec );
+// 0xffffffff is the default color.
+       iSvgModule->SetBackgroundColor( KSccBackground );
+       iSvgModule->AddListener(static_cast<MSvgLoadingListener*>(this),
+            ESvgLoadingListener);
+
+       }
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgReadCodec::~CSvgReadCodec
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSvgReadCodec::~CSvgReadCodec()
+    {
+    DeleteEngine();
+
+    // Dummy bitmap
+    delete iSVGTBitMapDummy;
+
+    // SVG file data
+    delete iFileData;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgReadCodec::SetFileDataL
+// Sets the SVG presentation data
+// -----------------------------------------------------------------------------
+//
+void CSvgReadCodec::SetFileDataL( const TDesC8& aFileData )
+    {
+    delete iFileData;
+    iFileData = NULL;
+    
+   	// For files which are in UTF-16 or unicode format the first 2 bytes
+	// will be FF and FE. In UTF-16 and unicode format every single character
+	// is represented by two bytes. 
+	
+    HBufC8* binaryBuffer=NULL;
+  	binaryBuffer = HBufC8::NewL( aFileData.Length() ); 
+  	
+  	TPtr8 binaryBufferPtr = binaryBuffer->Des();
+	binaryBufferPtr = aFileData;
+	
+	TInt hichar = (CEditableText::EReversedByteOrderMark & 0xFF00)>>8;
+	TInt lochar = CEditableText::EReversedByteOrderMark & 0x00FF;
+	TInt bytesPerChar = 1;
+    
+    if(binaryBufferPtr[0] == hichar && binaryBufferPtr[1] == lochar)
+    	{
+    	bytesPerChar = 2;
+
+    	HBufC* dataBuffer=NULL;
+        TInt fileSize = aFileData.Length();
+    	dataBuffer = HBufC::New(aFileData.Length()/bytesPerChar);
+    	if ( !dataBuffer)
+    		{
+        	//_LIT( KErrorMsg, "Failed to Load Svg Content: Out of memory");
+        	delete binaryBuffer;
+        	return;
+    		}
+
+    	TPtr dataBufferPtr = dataBuffer->Des();
+    	
+    	// Skip two bytes and set the pointer to the next location
+    	// from where the actual data starts.
+    	dataBufferPtr.Set((TUint16*)binaryBufferPtr.Ptr()+1,
+    						fileSize/bytesPerChar-1, 
+    						fileSize/bytesPerChar-1);
+    		
+    	HBufC8* outputBuffer= NULL;
+    	outputBuffer=HBufC8::New(fileSize);
+    	if(!outputBuffer)
+    		{
+    		//_LIT( KErrorMsg, "Failed to Load Svg Content: Out of memory");
+        	delete dataBuffer;
+        	delete binaryBuffer;
+        	return ;
+    		}
+    	TPtr8 outputBufferptr=outputBuffer->Des();
+    	CnvUtfConverter::ConvertFromUnicodeToUtf8(
+            							outputBufferptr,   // Destination
+            							dataBufferPtr );
+        
+        iFileData = HBufC8::NewL(fileSize);
+        iFileData->Des().Copy(outputBufferptr);
+        
+        delete dataBuffer;
+        delete outputBuffer;
+        
+    	}
+    else
+        {
+        iFileData = HBufC8::NewL(aFileData.Length());
+        iFileData->Des().Copy( aFileData );
+        }
+        delete binaryBuffer;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgReadCodec::ProcessFrameL
+// Processes the frame data contained in aSrc.
+// -----------------------------------------------------------------------------
+//
+TFrameState CSvgReadCodec::ProcessFrameL(TBufPtr8& aSrc )
+    {
+    aSrc.Shift( 1 );
+    TFrameState lRetVal = EFrameComplete;
+    DoProcessL();
+    
+    if(iImagesPresent && !iImagesLoaded)
+        {
+        lRetVal = EFrameIncompleteRepositionRequest;
+        }
+    
+    return lRetVal;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgReadCodec::DoProcessL
+// Processes the SVG presentation file data. Called by ProcessFrameL()
+// -----------------------------------------------------------------------------
+//
+void CSvgReadCodec::DoProcessL()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgReadCodec::InitFrameL
+// Processes the SVG presentation file data. Called by ProcessFrameL()
+// -----------------------------------------------------------------------------
+//
+void CSvgReadCodec::InitFrameL(TFrameInfo& /* aFrameInfo*/, 
+    CFrameImageData& /*aFrameImageData*/, 
+    TBool /*aDisableErrorDiffusion */, 
+    CFbsBitmap& aFrame, 
+    CFbsBitmap* /* aDestinationMask */ )
+    {
+        GenerateThumbnailL(&aFrame, NULL);
+    }
+
+void CSvgReadCodec::UpdateScreen()
+    {
+    }
+
+TBool CSvgReadCodec::ScriptCall( const TDesC& /*aScript*/, CSvgElementImpl* /*aCallerElement*/ )
+    {
+    return EFalse;
+    }
+
+TInt  CSvgReadCodec::FetchImage( const TDesC& aUri, RFs& aSession, RFile& aFileHandle )
+    {
+    TInt errorCode = KErrNotFound;
+    TInt ret = 0;
+    TRAPD(err, ret = IsDownloadNeededL(aUri));
+    if(err==KErrNone)
+        {
+        if( ret == ELocalImageFile)
+            {
+            TFileName fileName;
+
+#ifdef RD_MULTIPLE_DRIVE    
+
+//    RFs fsSession;
+            HBufC* fullImagesPathBuf = HBufC::New( KMaxPath );
+            if (fullImagesPathBuf)
+                {
+                TPtr fullImagesPathPtr = fullImagesPathBuf->Des();
+                TInt intDrive;
+                DriveInfo::TDriveArray driveArray;
+
+//    fsSession.Connect();
+    
+                TInt err1=DriveInfo::GetUserVisibleDrives( aSession, driveArray );
+                if(err1==KErrNone)
+                    {
+                    for(TInt i=0; i < driveArray.Count(); i++)
+                        {
+                        TChar driveLetter = driveArray.LetterAt(i);
+                        TInt err2=RFs::CharToDrive(driveLetter, intDrive);
+                        if(err2==KErrNone)
+                            {
+                            TInt err3=PathInfo::GetRootPath(fullImagesPathPtr, intDrive);
+                            if(err3==KErrNone)
+                                {
+                                fullImagesPathPtr.Append( PathInfo::ImagesPath() );
+                                if(GetLocalFile( aUri, fileName, fullImagesPathPtr))
+                                    {
+                                    errorCode = aFileHandle.Open( aSession, fileName, EFileShareAny );
+                                    break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            delete fullImagesPathBuf;
+            fullImagesPathBuf=NULL;
+          
+//    fsSession.Close();
+        
+#else
+
+            HBufC* phoneMemImagesPath = GetImagesPath(EPhoneMemory);
+            TPtr ptrphoneMemImagesPath(phoneMemImagesPath->Des());
+            HBufC* memCardImagesPath = GetImagesPath(EMemoryCard);
+            TPtr ptrMemCardImagesPath(memCardImagesPath->Des());
+        
+            if(GetLocalFile( aUri, fileName, ptrphoneMemImagesPath))
+                errorCode = aFileHandle.Open( aSession, fileName, EFileShareAny );
+            else if(GetLocalFile( aUri, fileName, ptrMemCardImagesPath))
+                errorCode = aFileHandle.Open( aSession, fileName, EFileShareAny );
+        
+            delete memCardImagesPath;
+            delete phoneMemImagesPath;
+#endif        
+            }
+        }
+    return errorCode;
+}
+
+TInt CSvgReadCodec::FetchFont( const TDesC& /* aUri */, 
+                                    RFs& /* aSession */, RFile& /* aFileHandle */ )
+    {
+    return KErrNotSupported;
+    }
+	   
+    
+void CSvgReadCodec::GetSmilFitValue( TDes& aSmilValue )
+    {
+    aSmilValue.Copy( KSccSmilFitValue );
+    }
+
+void  CSvgReadCodec::UpdatePresentation( const TInt32& /* aNoOfAnimation */ )
+    {
+    }
+    
+void CSvgReadCodec::PrepareEngine()
+    {
+    iPrepareDomResult = iSvgModule->PrepareDom( *iFileData, iThumbnailHandle );
+    TInt err = iPrepareDomResult->HasError();
+    iSvgModule->UseDom( iThumbnailHandle, NULL);
+    iContentSize = iSvgModule->GetSvgBoundingBox().Size();
+    if(iContentSize.iHeight < 1)
+        {
+        iContentSize.iHeight = 1;
+        }
+    if(iContentSize.iWidth < 1)
+        {
+        iContentSize.iWidth = 1;
+        }
+    }
+    
+TSize CSvgReadCodec::ContentSize() const
+    {
+    return iContentSize;
+    }
+
+void CSvgReadCodec::GenerateThumbnailL(CFbsBitmap* aFrame, CFbsBitmap* /*aFrameMask*/)
+    {
+    if ( iSvgModule )
+        {
+        // NULL is returned, possible out of memory when create error object.
+        User::LeaveIfNull( iPrepareDomResult );
+        User::LeaveIfError(iPrepareDomResult->HasError());
+#ifdef SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE        
+        iSvgModule->SetThumbNailMode( ETrue );            // Set thumbnail mode On
+#endif // SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE
+        
+        // Setup the engine to use the DOM
+        MSvgError* pResult = iSvgModule->UseDom( iThumbnailHandle, aFrame );
+        if ( pResult->HasError() && !pResult->IsWarning() )
+            {                
+            User::Leave( KErrGeneral );
+            }
+        
+        // View Box define for Dom associated frame
+        iSvgModule->ChooseViewBoxIfNotSet(iThumbnailHandle);
+        
+        // Setup the frame size as the one obtained from 
+        // creator of codec.
+        const TSize frameSize = aFrame->SizeInPixels();
+        // Get the Display mode for bitmap
+        TDisplayMode lFrameDispMode = aFrame->DisplayMode();
+        // Get the Displaymode for mask
+            iSvgModule->InitializeEngine();
+            iSvgModule->RenderFrame( NULL, 0);
+      // render static content as well
+       if ( iFrameList.Count() )
+            {
+            CFbsBitGc* bitmapContext=NULL;
+            CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL( aFrame );
+            CleanupStack::PushL( bitmapDevice );
+            User::LeaveIfError( bitmapDevice->CreateContext( bitmapContext ) );
+            CleanupStack::PushL( bitmapContext );
+            bitmapContext->BitBlt( TPoint(0,0),iFrameList[ 0 ] );
+            CleanupStack::PopAndDestroy(2);
+            } 
+       
+#ifdef SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE        
+        iSvgModule->SetThumbNailMode( EFalse );       // Set thumbnail mode Off 
+#endif // SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgReadCodec::DeleteEngine
+// Deletes the structures associated with the engine
+// viz. The Frame List, Mask List, Delay Interval List, 
+// The DOM for the content and the Engine Implementation itself
+// -----------------------------------------------------------------------------
+//  
+void CSvgReadCodec::DeleteEngine()
+    {       
+    // Cleanup elements in the frame list
+    for ( TInt i = 0; i < iFrameList.Count(); i++ )
+        {
+        delete iFrameList[i];
+        }        
+
+    // Cleanup elements in the mask list
+    for ( TInt i = 0; i < iMaskList.Count(); i++ )
+        {
+        delete iMaskList[i];
+        }        
+    
+    // Cleanup the memory used for storing the pointers/values
+    iFrameList.Reset();
+    iMaskList.Reset();
+    iDelayList.Reset();
+    
+    // Close the resources
+    iFrameList.Close();
+    iMaskList.Close();
+    iDelayList.Close();
+
+    // Delete the DOM created for the content    
+    //if ( iThumbnailHandle )
+    //    {
+    //    iSvgModule->DeleteDom( iThumbnailHandle );
+    //    iThumbnailHandle = 0;
+    //    }
+    
+    // Delete the Engine module 
+    delete iSvgModule;    
+    iSvgModule = NULL;
+    }   
+
+CSvgReadCodec::TDownloadNeeded CSvgReadCodec::IsDownloadNeededL( const TDesC& aUri ) const
+    {
+
+    TUriParser UriParser;
+    
+    TBuf<KMaxFileName> localUri;
+    // url starts with www so append http://
+    if ( !aUri.Left( 4 ).Compare( KWww ) )     
+        {
+        localUri.Append( KHttp );
+        localUri.Append( aUri );
+        User::LeaveIfError( UriParser.Parse( localUri ) );   
+        }
+    else
+        {
+        User::LeaveIfError( UriParser.Parse( aUri ) );   
+        }
+    
+    if ( UriParser.IsPresent( EUriHost ) )
+        {
+        // Extract the Path, filename and extension from the uri
+        TFileName filename = UriParser.Extract( EUriPath ); 
+        TParsePtrC fileParser( filename );
+    
+        if ( fileParser.NamePresent() && fileParser.ExtPresent() )
+            {                        
+            if ( fileParser.Ext().Compare( KJpg ) == 0  ||  
+                 fileParser.Ext().Compare( KJpeg ) == 0 ||
+                 fileParser.Ext().Compare( KBmp ) == 0  ||
+                 fileParser.Ext().Compare( KPng ) == 0  ||
+                 fileParser.Ext().Compare( KSvg ) == 0  ||
+                 fileParser.Ext().Compare( KSvgz ) == 0 )
+                {
+                // file name and ext present and 
+                // it is amy of the supported image types
+                return ERemoteImageFile;         
+                }
+            else
+                {
+                //file Extension present but not a supported image ext,
+                //may be some html file
+                return ENotAnImageFile;
+                }
+            } 
+        else
+            {
+            //Should be a domain name so return ENotAnImageFile
+            return ENotAnImageFile;
+            }
+        }
+    else
+        {     
+        return ELocalImageFile;
+        }                        
+    }
+
+TBool CSvgReadCodec::GetLocalFile( const TDesC& aUri, 
+                                    TDes& aFileName ,
+                                    const TDesC& aRefPath ) const
+    {
+    aFileName.Zero();
+    TBuf<KMaxFileName> copyUri = aUri;
+    // Before giving the uri to the file parser,
+    // convert '/' to '\'.          
+    TInt pos;
+    while( KErrNotFound != ( pos = copyUri.FindF( KBSlashStr ) ) )
+        {
+        copyUri.Replace(pos,1,KSlashStr );
+        }
+
+    // if the uri starts with ".\" remove ".\"
+    if ( copyUri.Left( 2 ).Compare( KDotSlashStr ) == 0 ) 
+        {
+        copyUri = copyUri.Right( copyUri.Length() - KDotSlashStr().Length() );
+        }   
+        
+    // If the second letter is not ':' 
+    // and if it is not starting with '\',
+    // and if the path has '/',
+    // then prepend slash to it.
+    if ( copyUri.Length() >= 2 && 
+         copyUri.Mid( 1, 1 ).Compare( KColonStr ) != 0 && 
+         copyUri.Mid( 0, 1 ).Compare( KSlashStr ) != 0 &&
+         ( copyUri.Find( KSlashStr ) != KErrNotFound ) )
+        {
+        copyUri.Insert( 0, KSlashStr );
+        }       
+    
+    TParse fileParser;
+    if( fileParser.Set( copyUri, NULL, NULL ) != KErrNone )
+        {
+        return EFalse;
+        } 
+            
+    if ( fileParser.DrivePresent() )
+        {
+        // The uri is an absolute path
+        aFileName.Append( fileParser.Drive() ); 
+        // Append path, file name and extension from the uri.
+        if ( fileParser.PathPresent() )
+            {
+            aFileName.Append( fileParser.Path() );              
+            }
+        if ( fileParser.NamePresent() )
+            {
+            aFileName.Append( fileParser.Name() );              
+            }
+        if ( fileParser.ExtPresent() )
+            {
+            aFileName.Append( fileParser.Ext() );
+            }
+            
+        if ( !ConeUtils::FileExists( aFileName  ) )
+            {
+            return EFalse;
+            }            
+        return ETrue;
+        }
+    else
+        {
+        
+        TParse svgFilenameParser;
+        if ( svgFilenameParser.Set( aRefPath,NULL,NULL ) != KErrNone )
+            {
+            return EFalse;
+            }
+        
+        if ( svgFilenameParser.DrivePresent() )
+            {
+            aFileName.Append( svgFilenameParser.Drive() );               
+            }
+        
+        TInt dotdotPos = copyUri.Find( KDotDot );
+        TInt rightPos = 0;        
+        
+        if ( dotdotPos != KErrNotFound )
+            {
+            // If ".." is present collapse it with the parent path
+            if ( svgFilenameParser.PathPresent() )
+                {                  
+                do   
+                    {
+                    if ( dotdotPos > 1 )
+                        {
+                        svgFilenameParser.AddDir( copyUri.Left(dotdotPos - 1) );
+                        }
+                                                          
+                    if ( svgFilenameParser.PopDir() != KErrNone )
+                        {
+                        return EFalse;
+                        }               
+                        
+                    rightPos = (copyUri.Length()) - (dotdotPos + 3);
+                    
+                    if ( rightPos > 0 )
+                        {                       
+                        copyUri = copyUri.Right( rightPos );    
+                        }
+                                                                                                   
+                    }while ( (dotdotPos  = copyUri.Find( KDotDot ) ) 
+                                   != KErrNotFound ); 
+                                   
+                aFileName.Append( svgFilenameParser.Path() );
+                aFileName.Append( copyUri );             
+                }
+            else
+                {
+                return EFalse;
+                }                       
+            }
+        else
+            {
+            if ( svgFilenameParser.PathPresent() )
+                {
+                aFileName.Append( svgFilenameParser.Path() );
+                }           
+        
+            // Append path, file name and extension from the uri.    
+            if ( fileParser.PathPresent() )
+                {
+                TFileName path(fileParser.Path() );
+                path.Copy(path.Right(path.Length()-1));
+                aFileName.Append( path );
+                
+                }
+                                
+            if ( fileParser.NamePresent() )
+                {
+                aFileName.Append( fileParser.Name() );              
+                }
+            if ( fileParser.ExtPresent() )
+                {
+                aFileName.Append( fileParser.Ext() );
+                }
+            }  
+        if ( !ConeUtils::FileExists( aFileName  ) )
+            {
+            return EFalse;
+            }
+        return ETrue;   
+        }                                  
+    }
+               
+HBufC* CSvgReadCodec::GetImagesPath( 
+                        CSvgReadCodec::TImagesLocation aImagesLocation) const
+    {
+    HBufC* fullImagesPath = HBufC::New( KMaxPath );
+    if(fullImagesPath)
+        {
+        TPtr ptrFullImagesPath(fullImagesPath->Des());
+    
+        TPtrC8 ptrImagesPath((TText8*)text_images_path);
+        TFileName imagesPath16;
+        imagesPath16.Copy(ptrImagesPath);
+    
+        switch( aImagesLocation )
+            {
+            case EPhoneMemory:
+                {
+                TPtrC8 ptrRootPhoneMemPath((TText8*)text_phone_memory_root_path);
+                ptrFullImagesPath.Copy(ptrRootPhoneMemPath);
+                }
+                break;
+            case EMemoryCard:
+                {
+                TPtrC8 ptrRootMemCardPath((TText8*)text_memory_card_root_path);
+                ptrFullImagesPath.Copy(ptrRootMemCardPath);
+                }   
+                break;
+            default:
+                break;    
+            }
+        ptrFullImagesPath.Append(imagesPath16);
+        }
+    return fullImagesPath;
+    }
+    
+    //------------------------------------------------------------------------
+//From MsvgLoadingListener
+/**
+     * Query the listener if every element is to be reported or only
+     * the children of <svg> tag.
+     *
+     * @since 1.0
+     * @return : ETrue if every element is to be reported, otherwise
+     *           only the children of <svg> are reported.
+     */
+    TBool CSvgReadCodec::ReportAllElements()
+        {
+        return ETrue;
+        }
+
+    /**
+     * Query the listener if client will call 'AssignImageData' to decode images
+     * separately from parsing.  This is used to avoid non-thread-safe calls in
+     * creating bitmap and decoding images, which must be executed in the main thread.
+     *
+     * @since 1.0
+     * @return : ETrue to use 'ImageDataReference' instead of 'FetchImage'.
+     */
+    TBool CSvgReadCodec::WillAssignImageData()
+        {
+        return ETrue;
+        }
+
+    /**
+     * Callback when the href:xlink attribute is encountered for the <image>
+     * element.  This method is used to notify clients of image data references
+     * needed by <image> element.  This method is called only when 'WillAssignImageData'
+     * returns ETrue.
+     *
+     * @since 1.0
+     * @return : none.
+     */
+    void CSvgReadCodec::ImageDataReference( const TDesC& aUri )
+        {
+        iImagesPresent = ETrue;
+        
+        HBufC8* lImageData = NULL;
+        
+        TInt errorCode = KErrNotFound;
+        TInt ret = 0;
+        TRAPD(err, ret = IsDownloadNeededL(aUri));
+        if(err==KErrNone)
+            {
+            if( ret != ELocalImageFile)
+                {
+                lImageData = HBufC8::New(0);
+                if(lImageData)
+                    {
+                    iSvgModule->AssignImageData(aUri , lImageData );
+                    }
+            
+                return;
+                }
+        
+            _LIT(KEncodedImage,"data:image");
+        
+            if( ! ( aUri.Left(10).Compare(KEncodedImage) ))
+                {
+                _LIT(KBase,"Base64");
+                if(aUri.FindF(KBase) != KErrNotFound)
+                    {
+                    TInt startIndex = aUri.Locate( ';' );
+                    TInt endIndex = aUri.Locate( ',' );
+                    // find index of first character after white-space
+                    TInt index = endIndex + 1;
+                    while ( index < aUri.Length() && TChar( aUri[index] ).IsSpace() )
+                        index++;
+                    // must be 8-bit
+                    TInt length = aUri.Length() - index;
+                    HBufC8* encoded = HBufC8::New( length );
+                    if(encoded)
+                        {
+                        encoded->Des().Copy( aUri.Right( length ) );
+                        // Assign to member variable to destroy after image is process.
+                        lImageData = HBufC8::New( length );
+                        if(lImageData)
+                            {
+                            TPtr8 decodedDes = lImageData->Des();
+                            // decode
+                            TImCodecB64 encodingBase64;
+                            TInt decodeError = encodingBase64.Decode( *encoded, decodedDes );
+                            delete encoded;
+                            encoded = NULL;
+                            }
+                        }
+                    }            
+                else
+                    {
+                    //lImageData = HBufC8::NewL(0);
+                    }            
+                }
+            else
+                {
+                RFile lSvgFile;
+                TFileName lFileName;
+                RFs session;
+        
+                TInt Connecterror = session.Connect();
+        
+                HBufC* phoneMemImagesPath = GetImagesPath(EPhoneMemory);
+                TPtr ptrphoneMemImagesPath(phoneMemImagesPath->Des());
+                HBufC* memCardImagesPath = GetImagesPath(EMemoryCard);
+                TPtr ptrMemCardImagesPath(memCardImagesPath->Des());
+            
+                if(GetLocalFile( aUri, lFileName, ptrphoneMemImagesPath))
+                    errorCode = lSvgFile.Open( session, lFileName, EFileShareAny );
+                else if(GetLocalFile( aUri, lFileName, ptrMemCardImagesPath))
+                    errorCode = lSvgFile.Open( session, lFileName, EFileShareAny );
+            
+                delete memCardImagesPath;
+                delete phoneMemImagesPath;
+            
+                if(errorCode == KErrNone)
+                    {
+                    // Get the size of the data to create read buffer
+                    TInt lFileSize = 0;
+                    TInt sizeError = lSvgFile.Size(lFileSize) ;
+                    // Create buffer that will contain the file data
+                    lImageData = HBufC8::New(lFileSize);
+                    if(lImageData)
+                        {
+                        TPtr8 lFileDataPtr(lImageData->Des());
+                
+                        // Read from the file
+                        TInt ReadError = lSvgFile.Read(lFileDataPtr);
+                        }
+                    }
+                else
+                    {
+                    lImageData = HBufC8::New(0);
+                    }
+                lSvgFile.Close();
+                session.Close();
+                }
+            if(lImageData)
+                {
+                iSvgModule->AssignImageData(aUri , lImageData );                
+                }
+            }
+        }
+
+    /**
+     * Notified when the start of a svg document(<svg> tag) is encountered.
+     *
+     * @since 1.0
+     * @return : For future use.  Value is ignored.
+     */
+    TBool CSvgReadCodec::DocumentStart()
+        {
+        return EFalse;
+        }
+
+    /**
+     * Notified when the end of a svg document(</svg> tag) is encountered.
+     *
+     * @since 1.0
+     * @return : For future use.  Value is ignored.
+     */
+    TBool CSvgReadCodec::DocumentEnd()
+        {
+        return ETrue;
+        }
+
+    /**
+     * Notified when the start of a svg element is encountered.
+     *
+     * @since 1.0
+     * @param : aTagName -- name of svg tag
+     * @param : aAttributeList -- attribute list.
+     * @return : For future use.  Value is ignored.
+     */
+    TBool CSvgReadCodec::ElementStart( const TDesC& /*aTagName*/,
+                                MSvgAttributeList& /*aAttributeList*/)
+        {
+        return ETrue;
+        }
+
+    /**
+     * Notified when the end of a svg element is encountered.
+     * activated.
+     *
+     * @since 1.0
+     * @param : aTagName -- name of svg tag
+     * @return : For future use.  Value is ignored.
+     */
+    TBool CSvgReadCodec::ElementEnd( const TDesC& /*aTagName*/ )
+        {
+        return ETrue;
+        }
+
+    /**
+     * Notified when an external data is needed by the svg document,
+     * such as a image-file or an embedded svg-file.
+     *
+     * @since 1.0
+     * @param : aUri -- URI string of external data
+     * @return : For future use.  Value is ignored.
+     */
+    TBool CSvgReadCodec::ExternalDataRequested( const TDesC& /*aUri*/ )
+        {
+        return EFalse;
+        }
+
+    /**
+     * Notified when an external data has been retrieved,
+     * such as a image-file or an embedded svg-file.
+     *
+     * @since 1.0
+     * @param : aUri -- URI string of external data
+     * @return : For future use.  Value is ignored.
+     */
+    TBool CSvgReadCodec::ExternalDataReceived( const TDesC& /*aUri*/ )
+        {
+        return EFalse;
+        }
+
+    /**
+     * Notified when an external data request has failed.
+     *
+     * @since 1.0
+     * @param : aUri -- URI string of external data
+     * @return : For future use.  Value is ignored.
+     */
+    TBool CSvgReadCodec::ExternalDataRequestFailed( const TDesC& /*aUri*/ )
+        {
+        return EFalse;
+        }
+
+    /**
+     * Notified when an unsupported element is encountered.
+     *
+     * @since 1.0
+     * @param : aTagName -- tag name of element
+     * @param : aAttributeList -- attribute list.
+     * @return : For future use.  Value is ignored.
+     */
+    TBool CSvgReadCodec::UnsupportedElement( const TDesC& /*aTagName*/,
+                                      MSvgAttributeList& /*aAttributeList*/ )
+        {
+        return EFalse;
+        }
+
+    
+    void CSvgReadCodec::ImagesLoaded(TInt /*aError*/)
+        {
+        iImagesLoaded = ETrue;
+        iImagesPresent = EFalse;
+        }
+
+void CSvgReadCodec::GetNewDataPosition(TInt& aPosition, TInt& /*aLength*/)
+    {
+    // Reset position to force seek to beginning
+    aPosition =0;
+        }
+
+
+
+
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/SVGCodecSrc/SVGConvert.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2005 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:  This file implements the decoder for the SVG presentation
+*
+*/
+
+
+#include "SVGConvert.h"
+#include <coemain.h>
+#include <imageconversion.h>
+#include <icl_uids.hrh>
+#include <102073D7_extra.rsg>
+#include <SvgCodecImageConstants.hrh>
+#include "SVGCodec.h"
+
+_LIT(KSVGPanicCategory, "SVGConvertPlugin");
+const TInt KInitialFrameWidth = 1;
+const TInt KInitialFrameHeight = 1;
+
+// Number of bits per pixel used in ReadFormatL
+const TInt KSvgDecBitsPerPixel = 24;
+
+enum TIclPanic
+    {
+    EFrameNumberOutOfRange = 0x1
+    };
+    
+// Global panic function
+GLDEF_C void Panic(TIclPanic aError)
+    {
+    User::Panic(KSVGPanicCategory, aError);
+    }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSvgDecoder::NewL
+// Static constructor. Returns the pointer to the CSvgDecoder
+// -----------------------------------------------------------------------------
+//
+CSvgDecoder* CSvgDecoder::NewL()
+    {
+    return new (ELeave) CSvgDecoder;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgDecoder::~CSvgDecoder
+// C++ destructor.
+// -----------------------------------------------------------------------------
+//
+CSvgDecoder::~CSvgDecoder()
+    {
+    CImageDecoderPlugin::Cleanup();
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgDecoder::ImageType 
+// Returns the image type and sub-type for a given frame of the image that
+// has just been opened.
+// -----------------------------------------------------------------------------
+//
+void CSvgDecoder::ImageType(TInt aFrameNumber, TUid& aImageType, TUid& aImageSubType) const
+    {
+    __ASSERT_ALWAYS(aFrameNumber == 0, Panic( EFrameNumberOutOfRange ));
+    aImageType = KImageTypeSVGUid;
+    aImageSubType = KNullUid;
+    }
+
+// -----------------------------------------------------------------------------
+// Returns the codec specific frame information stored in resource files.
+// This is a virtual funtion that each individual plugin must implement.
+// -----------------------------------------------------------------------------
+//
+CFrameInfoStrings* CSvgDecoder::FrameInfoStringsL( RFs& /*aFs*/, TInt /*aFrameNumber*/ )
+    {
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgDecoder::CSvgDecoder
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSvgDecoder::CSvgDecoder()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//    Invokes the ReadFrameHeadersL() method of the supplied plugin.
+//    This is a virtual funtion that each individual plugin must implement.
+// -----------------------------------------------------------------------------
+//
+void CSvgDecoder::ScanDataL()
+    {
+    CSvgReadCodec* imageReadCodec = CSvgReadCodec::NewL( 
+        TSize(KInitialFrameWidth, KInitialFrameHeight) 
+        );
+    SetImageReadCodec( imageReadCodec );
+
+    ReadFormatL();
+    ReadFrameHeadersL();
+    }
+    
+// -----------------------------------------------------------------------------
+// Reads the image header & data information
+// -----------------------------------------------------------------------------
+//
+void CSvgDecoder::ReadFormatL()
+    {
+    ReadDataL(0, iFileData, KMaxTInt);
+    SetDataLength( iFileData.Length() );
+    CSvgReadCodec* imageReadCodec = static_cast<CSvgReadCodec* >(ImageReadCodec());
+    imageReadCodec->SetFileDataL( iFileData );
+
+    imageReadCodec->PrepareEngine();
+    const TSize contentSize = imageReadCodec->ContentSize();
+    
+    TFrameInfo imageInfo;
+    imageInfo = ImageInfo();
+    imageInfo.iFrameCoordsInPixels.SetRect(TPoint(0, 0), contentSize );
+    imageInfo.iOverallSizeInPixels = contentSize;
+    imageInfo.iBitsPerPixel = KSvgDecBitsPerPixel;
+    imageInfo.iDelay = 0;
+    imageInfo.iFlags = TFrameInfo::ECanDither | TFrameInfo::ETransparencyPossible;
+    imageInfo.iFrameDisplayMode = EColor64K;
+    imageInfo.iFrameSizeInTwips = ContentSizeInTwips(contentSize);
+    
+    SetImageInfo(imageInfo);
+    SetStartPosition(0);
+    }
+
+TSize CSvgDecoder::ContentSizeInTwips(const TSize aContentSizeInPixels) const
+    {
+    // Create zoom factor object
+    TRect boxInTwips(TPoint(0,0), TSize(0,0));
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    if(coeEnv)
+        {
+        TZoomFactor deviceMap(CCoeEnv::Static()->ScreenDevice());
+        // Set zoom factor at 1 to 1
+        deviceMap.SetZoomFactor(TZoomFactor::EZoomOneToOne);
+        const TRect boxInPixels(TPoint(0,0), aContentSizeInPixels);
+        // convert rectangle co-ordinates into pixels
+        boxInTwips = deviceMap.PixelsToTwips(boxInPixels);
+        }
+    return boxInTwips.Size();
+    }
+    
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/SVGCodecSrc/SVGProxy.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2005 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:  This file implements the SVGT proxy for resolving plugins
+*
+*/
+
+
+#include "SVGProxy.h"
+#include <ecom.h>
+#include <implementationproxy.h>
+#include "SVGImageCodecUIDs.hrh"
+#include "SVGConvert.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSvgDecodeConstruct::NewL
+// Static constructor. Returns the pointer to the CSvgDecodeConstruct
+// -----------------------------------------------------------------------------
+//
+CSvgDecodeConstruct* CSvgDecodeConstruct::NewL()
+    {
+    CSvgDecodeConstruct* self = new (ELeave) CSvgDecodeConstruct;
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgDecodeConstruct::NewPluginL
+// Creates a new concrete CImageDecoderPlugin object.
+// This is a pure virtual function that each derived class must implement.
+// -----------------------------------------------------------------------------
+//
+CImageDecoderPlugin* CSvgDecodeConstruct::NewPluginL() const
+    {
+    return CSvgDecoder::NewL();
+    }
+
+// Exported proxy for instantiation method resolution
+// Define the Implementation UIDs for SVG decoder
+const TImplementationProxy ImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY(KSVGDecoderImplementationUidValue, CSvgDecodeConstruct::NewL)
+    };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginInc/SvgRenderFrameControl.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2005 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:  SVGRenderFrameControl provides an implementation of a control 
+*                which renders SVG using RenderFrames API provided by the 
+*                engine.
+*
+*/
+
+
+#ifndef SVGRENDERFRAMECONTROL_H
+#define SVGRENDERFRAMECONTROL_H
+
+#include <gdi.h>
+#include <SVGRequestObserver.h>
+#include <e32base.h>
+#include <coecntrl.h>
+#include "SvgRenderFrameTimer.h"
+
+const TInt KMaxTimeDuration=2500;
+class CSvgEngineInterfaceImpl;
+class MSvgtAppObserver;
+
+
+/**
+*  CSvgRenderFrameControl is a CCoeControl used to display SVGT content.
+*  It makes use of RenderFrames API provided by the svg engine to get
+*  the set of frame buffers and render it one by using render frame timer
+*
+*  @lib SVGTScreenSaverPlugin.lib
+*  @since 3.1
+*/
+class CSvgRenderFrameControl: public CCoeControl,
+                              public MSvgRenderFrameTimerListener,
+                              public MSvgRequestObserver
+    {    
+    
+    public: 
+        
+        /**
+        * Two-phased constructor.
+        * @since 3.1
+        */
+        static CSvgRenderFrameControl* NewL( 
+                                        const CCoeControl* aParent, 
+                                        RFile& aFileHandle,
+                                        MSvgtAppObserver* aObserver = NULL );
+                                             
+        /**
+        * Two-phased constructor.
+        * @since 3.1
+        */
+        static CSvgRenderFrameControl* NewLC( 
+                                         const CCoeControl* aParent, 
+                                         RFile& aFileHandle,
+                                         MSvgtAppObserver* aObserver = NULL );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CSvgRenderFrameControl();           
+
+            
+        /**
+        * From CCoeControl, 
+        * @since 3.1
+        */
+        void Draw(const TRect& aRect) const;
+        
+        /**
+        * From CCoeControl, 
+        * @since 3.1
+        */
+        void SizeChanged();
+        
+    public : // From MSvgRequestObserver        
+        
+        /**
+        * From MSvgRequestObserver, Method Called by Svg Engine,
+        * when the frame buffer is updated and has to be redrawn
+        * @since 3.1
+        */
+        virtual void    UpdateScreen();
+        
+        /**
+        * From MSvgRequestObserver, Method Called by Svg Engine,
+        * when there is a script support
+        * @since 3.1
+        */
+        virtual TBool   ScriptCall( const TDesC& aScript,
+                                    CSvgElementImpl* aCallerElement );
+        
+        /**
+        * From MSvgRequestObserver, Method Called by Svg Engine,
+        * when it encounters an image element
+        * @since 3.1
+        */
+        virtual TInt FetchImage( const TDesC& aUri, RFs& aSession, 
+                                 RFile& aFileHandle );
+
+        TInt FetchFont( const TDesC& /* aUri */, 
+                                    RFs& /* aSession */, RFile& /* aFileHandle */ );
+
+        /**
+        * This Method is called by the Svg engine to  Get the SMIL 
+        * Fit Attribute Value
+        * @since 3.1
+        */
+        virtual  void GetSmilFitValue( TDes& aSmilValue );
+
+        /**
+        * This Method updates the presentation status
+        * @since 3.1
+        */
+        virtual  void UpdatePresentation(const TInt32&  aNoOfAnimation);            
+        
+    public: // From MSvgRenderFrameTimerListener
+        
+        /**
+        * This function is a callback from animation timer, 
+        * when there is an animation timeout.
+        * @since 3.1
+        */             
+        virtual void AnimationTimeOut();
+                            
+        
+    public: // New Function
+        
+        /*
+        * Starts the timer
+        * @since 3.1
+        */
+        void SetTimer();
+        
+        /*
+        * Cancels the timer
+        * @since 3.1
+        */
+        void CancelTimer();
+        
+        /*
+        * Processes the command sent by the user of the control
+        * @param aCommandId - command to be processed
+        * @since 3.1
+        */
+        virtual void ProcessViewerCommandL( TInt aCommandId );   
+        
+        /*
+        * Gets the current index of the frame buffers
+        * @since 3.1
+        */
+        TInt GetCurrentIndex() const;
+        
+        /*
+        * Sets the index of the buffer to be used
+        * @param aIndex - index to be set
+        * @since 3.1
+        */        
+        void SetCurrentIndex( TInt aIndex );
+        
+        /**
+        * This function initializes the svg engine.
+        * This function is also used to check the validity of the file.
+        * @param aCheckFile True if used in check file mode
+        *                   False otherwise
+        * @since 3.1
+        */      
+        void InitializeEngineL( TBool aCheckFile, 
+                                MSvgRequestObserver* aObserver = NULL );       
+     
+        
+        /**
+        * This function deletes the svg engine.
+        * @since 3.1
+        */  
+        void DeleteEngine();
+        
+        /**
+        * This function uses the svg engine to get the frames in an array 
+        * of buffers.
+        * @since 3.1
+        */ 
+        TInt RenderMyFrames();
+        
+        /**
+        * This function moves the index of the array 
+        * of buffers.
+        * @since 3.1
+        */         
+        void MoveIndex();
+        
+        /**
+        * This function logs the debug message 
+        * @param aMsg - message to be logged
+        * @since 3.1
+        */          
+        void PrintDebugMsg( const TDesC&  aMsg ) const;            
+       
+       
+    public:   
+        /**
+        * Default Constructor
+        * @since 3.1
+        */  
+        CSvgRenderFrameControl( RFile& aFileHandle ,
+                         MSvgtAppObserver* aObserver = NULL );
+
+        
+        /**
+        * 2nd phase constructor
+        * @since 3.1
+        */
+        void ConstructL( const CCoeControl* aParent );
+
+    private:        
+        
+        // Pointer to the Svg Engine
+        CSvgEngineInterfaceImpl* iSvgEngine;
+        
+        // Frame buffer to be given to svg engine during initialization
+        CFbsBitmap* iBmap;
+
+        // Array of bitmaps generated by RenderFrames
+        RPointerArray<CFbsBitmap> iBitmapFrames;
+        
+        // Array of corresponding masks for the Bitmaps
+        RPointerArray<CFbsBitmap> iMaskFrames;
+        
+        // Array of TimeInterval between frames
+        RArray<TUint> iDelayIntervals;  
+        
+        // file handle of the svg file to be set as ScreenSaver.
+        RFile* iFileHandle;
+        
+        // Index of the bitmap in the array
+        TInt iCurrentFrame; 
+        
+        // Start duration to be given to RenderFrames
+        TUint iDuration;       
+    
+        // Handle to the Svg Dom
+        TInt iSvgDom;        
+        
+        // timer
+        CSvgRenderFrameTimer* iRenderFrameTimer;
+        
+        // boolean to check whether it is in play or paused state
+        TBool iCanPlay;
+        
+        // size of the control currently
+        TRect iRect;
+        
+        // Parent Control
+        const CCoeControl* iParent;
+        
+        // App observer pointer
+        MSvgtAppObserver* iAppObserver;
+               
+        };
+
+#endif // SVGRENDERFRAMECONTROL_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginInc/SvgRenderFrameTimer.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2005 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:  SVGRenderFrameTimer provides an implementation of timer 
+*                for RenderFrames Control
+*
+*/
+
+
+#ifndef SVGRENDERFRAMETIMER_H
+#define SVGRENDERFRAMETIMER_H
+
+#if !defined(__E32BASE_H__)
+#include <e32base.h>
+#endif
+
+/**
+*  Interface for the render frame timer listener.
+*  @lib SVGTScreenSaverPlugin.lib
+*  @since 3.1
+*/
+class MSvgRenderFrameTimerListener
+    {
+
+    public:
+    /*
+    * Function called when timeout occurs
+    * @since 3.1
+    */
+    virtual void AnimationTimeOut() = 0;   
+   
+    };
+
+/**
+*  Provides the timer functionality for RenderFrames control  
+*  @lib SVGTScreenSaverPlugin.lib
+*  @since 3.1
+*/
+class CSvgRenderFrameTimer: public CTimer                            
+    {    
+    
+    public: 
+        
+        /**
+        * Two-phased constructor.
+        * @since 3.1
+        */
+        static CSvgRenderFrameTimer* NewL( MSvgRenderFrameTimerListener* 
+                                           aListener );
+                                           
+        /**
+        * Two-phased constructor.
+        * @since 3.1
+        */                                           
+        static CSvgRenderFrameTimer* NewLC(MSvgRenderFrameTimerListener* 
+                                           aListener );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CSvgRenderFrameTimer();              
+        
+        
+    public: // CTimer interface methods        
+         
+
+        /**
+        * From CActive Implements cancellation of an outstanding request.
+        * @since 3.1
+        */
+        void DoCancel();
+
+        /**
+        * From CActive Handles the timer's request completion event.
+        * @since 3.1
+        */
+        void RunL();
+   
+    public: // new function(s)
+    
+        /**
+        * Sets the timeout to the interval specified.
+        * @param anInterval the timeout value
+        * @since 3.1
+        */
+        void SetTimeOut( const TTimeIntervalMicroSeconds32& anInterval );
+       
+    
+    private:
+    
+        /**
+        * Default Constructor
+        * @since 3.1
+        */  
+        CSvgRenderFrameTimer( MSvgRenderFrameTimerListener* aListener  );
+        
+        /**
+        * 2nd phase constructor
+        * @since 3.1
+        */
+        void ConstructL();
+
+    private:        
+        
+        // Listener for the timeout
+        MSvgRenderFrameTimerListener* iListener;
+               
+        };
+
+#endif // SVGRENDERFRAMETIMER_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginInc/SvgScreenSaver.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2005 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:  SVGScreenSaver provides an implementation of ScreenSaverPlugin
+*                for Svg files.
+*
+*/
+
+
+#ifndef SVGSCREENSAVER_H
+#define SVGSCREENSAVER_H
+
+#include <coecntrl.h>
+#include <PluginAdapterInterface.h>
+#include <SVGTAppObserver.h>
+#include <NPNExtensions.h>
+
+const TInt KMaxFileSize=10000;  
+class CSVGTCustControl;
+class CEikonEnv;
+
+
+/**
+*  CSvgScreenSaver provides an implementation of MSvgtAppObserver
+*  It makes use of RenderFrames Control or SVGTCustControl to render
+*  the SVGT content.
+*  @lib SVGTScreenSaverPlugin.lib
+*  @since 3.1
+*/
+class CSvgScreenSaver: public CBase,
+                       public MSvgtAppObserver,
+                       public MPluginNotifier                 
+    {    
+    
+    public:             
+                      
+        
+        /**
+        * Default Constructor
+        * @since 3.1
+        */  
+        CSvgScreenSaver();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CSvgScreenSaver(); 
+        
+        /**
+        * 2nd phase constructor
+        * @since 3.1
+        */
+        void ConstructL( const CCoeControl* aParent );
+        
+                
+        /**
+        * Creates an SVG Custom Control or RenderFrames Control 
+        * for the file
+        * @param aFileName 
+        * @since 3.1
+        */        
+        TInt AsFile(const TDesC& aFileName);    
+        
+        /**
+        * Sets the rect for SVG Custom Control or RenderFrames Control         
+        * for the file
+        * @param aRect
+        * @since 3.1
+        */  
+        void SetRect(const TRect& aRect);   
+        
+        /**
+        * Sends the command to SVG Custom Control or RenderFrames Control         
+        * @param aCommand command to be sent to the control
+        * @since 3.1
+        */  
+        void SendCommandL( TInt aCommand );
+        
+        /**
+        * makes the control to be (in)visible        
+        * @param aVisible ETrue makes the control visible
+        *                 EFalse makes the control invisible
+        * @since 3.1
+        */
+        void MakeVisible( TBool aVisible );
+        
+        /**
+        * gets the last error encountered by the Control        
+        * @since 3.1
+        */
+        TInt GetLastError() const;
+        
+    public: // Functions From MSvgtAppObserver
+            
+        /**
+        * From MSvgtAppObserver 
+        * @see MSvgtAppObserver::FetchImage
+        */
+        virtual TInt FetchImage( const TDesC& aUri, RFs& aSession, 
+                                 RFile& aFileHandle );
+                                 
+        /**
+        * From MSvgtAppObserver 
+        * @see MSvgtAppObserver::GetSmilFitValue
+        */
+        virtual  void GetSmilFitValue(TDes& aSmilValue);
+        
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::LinkActivated
+        */
+        virtual TBool LinkActivated( const TDesC& aUri );
+
+        
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::LinkActivatedWithShow
+        */
+        virtual TBool LinkActivatedWithShow( const TDesC& aUri, 
+                                             const TDesC& aShow );
+               
+        /**
+        * This function is called by the application to enable/disable the
+        * downloads menu in the options menu
+        * @since 3.0
+        * @param aAddDownloadMenu enable/disable the downloads menu  
+        */   
+                                 
+        void SetDownloadMenu( TBool aAddDownloadMenu );
+        
+        /**
+        * This function is called by the Ui Dialog to enable/disable the
+        * downloads menu in the options menu
+        * @since 3.0
+        * @return iDownloadMenuEnabled enable/disable the downloads menu  
+        */   
+        virtual TBool CanShowDownload() const;
+        
+
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::DisplayDownloadMenuL
+        */ 
+        virtual void DisplayDownloadMenuL();   
+                                                           
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::CanShowSave
+        */
+        virtual TBool CanShowSave();
+        
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::IsSavingDone
+        */
+        virtual TBool IsSavingDone();
+
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::DoSaveL
+        */ 
+        virtual void DoSaveL( TInt aCommandId );         
+               
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::NewFetchImageData
+        */ 
+        virtual TInt NewFetchImageData( const TDesC& aUri );
+
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::AssignEmbededDataL
+        */ 
+        virtual void AssignEmbededDataL( const TDesC& aUri );
+        
+        /**
+        * From MSvgtAppObserver
+        * @see MSvgtAppObserver::ExitWhenOrientationChange
+        */
+        virtual TBool ExitWhenOrientationChange();
+ 
+    private: // In MPluginNotify in S60
+        TInt NotifyL(TNotificationType aCallType, void* aParam);    
+
+    private:                                
+        
+        // Pointer to the Svg control               
+        CCoeControl* iSvgControl;
+        
+        // Pointer to the Parent Control
+        const CCoeControl* iParent;
+        
+        // file Handle of the file displayed
+        RFile iFileHandle;
+        
+        // environment pointer
+        CEikonEnv* iEikEnv;
+        
+        // current size of the control
+        TRect iRect;
+        
+        // flag to indicate whether render frames control or
+        // Custom control is used.
+        TBool iIsRenderFrameControl;
+        
+        // Name of the Svg file
+        TFileName iFileName;
+        
+        // last error encountered by the SVG Plugin
+        TInt iLastError;
+    };
+
+#endif //  SVGSCREENSAVER_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginInc/SvgScreenSaverImplementationUid.hrh	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2005 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:  Defines the ECOM Implementation UIDs. 
+*
+*
+*/
+
+
+#ifndef SVGSCREENSAVERIMPLEMENTATIONUID_HRH
+#define SVGSCREENSAVERIMPLEMENTATIONUID_HRH
+
+#define KSVGTScreenSaverImplementationUID 0x102071E6
+
+#endif 
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginInc/Svgtplugin.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,227 @@
+/*
+* Copyright (c) 2005 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:  SVGT Plugin Implementation header file
+ *
+*/
+
+
+#ifndef SVGTPLUGIN_H
+#define SVGTPLUGIN_H
+
+#include <e32std.h>
+#include <coecntrl.h>
+#include <coemain.h>
+#include <fbs.h>
+#include <barsread.h>
+
+
+/**
+* Note: Need to ensure that EPOC is defined before including these headers...
+*/
+#if defined(__SYMBIAN32__) && !defined(EPOC)
+    #define EPOC
+#endif
+
+#include <npupp.h>
+#include <PluginAdapterInterface.h>
+
+//This is to include ECom Style Plugin Specific headers
+#include <CEcomBrowserPluginInterface.h>
+
+//Implementation id Svgt Ecom Plugin
+const TInt KSvgtPluginImplementationValue = 0x102071E6; 
+
+class   CSvgScreenSaver;
+class   CSvgtPlugin;
+
+/**
+* This function initializes the NPPluginFuncs with the
+* SVG plugin Netscape interface implementation functions
+*/
+IMPORT_C NPError InitializeFuncs(NPPluginFuncs* aPpf);
+
+/**
+* This class is specific to ECom Style Plugin.
+* This is used for passing plugin specific initialization information to 
+* and from Screensaver Animation Plugin.
+*/
+class CSvgtPluginEcomMain :  public CEcomBrowserPluginInterface
+    {
+    public: 
+        /**
+        * Two-phased constructor.
+        * @param aInitParam Has Pointer to NPNImplementationFuncs and
+        *                       Pointer to PluginFuncs
+        * @since 3.1
+        */
+        static CSvgtPluginEcomMain* NewL( TAny* aInitParam );
+        
+        /**
+        * Destructor.
+        * @since 3.1
+        */
+        virtual ~CSvgtPluginEcomMain();
+        
+        /**
+        * Returns the iNpf.
+        * @since 3.1
+        */
+        NPNetscapeFuncs* Funcs() const {return iNpf;}
+        
+    private:
+        /**
+        * Constructor.
+        * @since 3.1
+        */
+        CSvgtPluginEcomMain( NPNetscapeFuncs* aNpf );
+        
+        /**
+        * Second-phase constructor.
+        * @since 3.1
+        */
+        void ConstructL( NPPluginFuncs* aPluginFuncs );
+        
+    private:
+        // NPN implementation function pointers
+        NPNetscapeFuncs* iNpf;
+    };
+
+/*******************************************************
+Class CSvgtPlugin
+********************************************************/
+
+class CSvgtPlugin : public CBase
+    {
+public:
+    /**
+    * Two-phased constructor.
+    * @since 3.1
+    */
+    static CSvgtPlugin* NewL(NPP anInstance);
+    
+    /**
+    * Destructor.
+    * @since 3.1
+    */
+    ~CSvgtPlugin();
+    
+    /**
+    * Second-phase constructor.
+    * @since 3.1
+    */
+    void ConstructL();
+    
+    /**
+    * Called before the Plugin Exits.
+    * @since 3.1
+    */    
+    void PrepareToExitL();
+    
+    /**
+    * returns the Control.
+    * @since 3.1
+    */    
+    CSvgScreenSaver* Control() const; 
+    
+    /**
+    * returns the instance.
+    * @since 3.1
+    */    
+    NPP Instance() const;    
+        
+    /**
+    * Called by the SetWindow Netscape API.
+    * @param aWindow - structure having the parent control
+    * @param aRect - size of the control
+    * @since 3.1
+    */    
+    void SetWindowL(const NPWindow* aWindow,const TRect& aRect);
+
+private:
+    /**
+    * Default constructor.
+    * @since 3.1
+    */    
+    CSvgtPlugin(NPP anInstance);
+ 
+private:
+    // Handle to the plugin Adapter
+    MPluginAdapter*             iPluginAdapter;        
+    
+    // Pointer to the SVG control
+    CSvgScreenSaver*            iControl;
+    
+    // Plugin instance
+    NPP                         iInstance;       
+    
+    // Screensaver mode flag
+    TBool                       iScreenSaverMode;
+    };
+
+
+/******************************************************************************
+*
+*    Plugin API methods
+*
+******************************************************************************/
+
+/**
+* Create a plugin.
+*/
+NPError SvgtPluginNewp(NPMIMEType /*pluginType*/,
+                       NPP aInstance, 
+                       uint16 /*mode*/, 
+                       CDesCArray* /*argn*/, 
+                       CDesCArray* /*argv*/, 
+                       NPSavedData* /*saved*/);
+/**
+* Destroy a plugin.
+*/
+NPError SvgtPluginDestroy(NPP aInstance, NPSavedData** /*save*/);
+
+/**
+* This is the parent window of a plugin.
+*/
+NPError SvgtPluginSetWindow(NPP aInstance, NPWindow* aWindow);
+
+/**
+* A data stream has been fully saved to a file.
+*/
+void SvgtPluginAsFile(NPP aInstance, 
+                      NPStream* /*stream*/, 
+                      const TDesC& aFname);
+
+
+/**
+* Generic hook to retrieve values/attributes from the plugin.
+*/
+NPError SvgtPluginGetValue(NPP aInstance, 
+                           NPPVariable aVariable, 
+                           void* aRetvalue);
+
+/**
+* Generic hook to set values/attributes within the plugin.
+*/              
+NPError SvgtPluginSetValue(NPP aInstance, 
+                           NPNVariable aVariable, 
+                           void* aRetvalue);              
+
+/**
+* Check File Validity 
+*/
+void SvgtPluginCheckFileL( void* aRetvalue );
+
+
+#endif // SVGTPLUGIN_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/SvgRenderFrameControl.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,510 @@
+/*
+* Copyright (c) 2005 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:  This file implements a control which displays svg files using 
+*                renderframes engine api, used by Screen Saver application 
+*
+*/
+
+
+#include <eikenv.h>
+#include <eikappui.h>
+#include <gdi.h>
+#include <AknUtils.h>
+#include <SVGEngineInterfaceImpl.h>
+#include <SVGTUIDialog.hrh>
+#include <SVGTAppObserver.h>
+#include <flogger.h>
+
+#include "SvgRenderFrameControl.h"
+#include "SvgRenderFrameTimer.h"
+
+const TUint KConvertToMicroSecond = 1000;
+const TInt  KMilliSecondsBetweenFrame = 50;
+
+// Font Ids for use with Engine-Init
+const TInt KApacFontId = EApacPlain16;
+const TInt KLatintFontId = ELatinBold12;
+
+// Duration const returned by engine when indefinite animations are present
+const TUint KIndefiniteDur = 0xffffffff;
+
+#ifdef _DEBUG
+_LIT( KFileLoggingDir, "ScreenSaver" );
+_LIT( KFileLog, "FromSvgPlugin.txt" );
+#endif
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::NewL
+// -----------------------------------------------------------------------------
+//
+CSvgRenderFrameControl* CSvgRenderFrameControl::NewL( 
+                                             const CCoeControl* aParent, 
+                                             RFile& aFileHandle ,
+                                             MSvgtAppObserver* aObserver )
+    {
+    CSvgRenderFrameControl* self = CSvgRenderFrameControl::NewLC( aParent,
+                                                                  aFileHandle,
+                                                                  aObserver );   
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::NewL
+// -----------------------------------------------------------------------------
+//
+CSvgRenderFrameControl* CSvgRenderFrameControl::NewLC( 
+                                             const CCoeControl* aParent, 
+                                             RFile& aFileHandle ,
+                                             MSvgtAppObserver* aObserver )
+    {
+    CSvgRenderFrameControl* self = new (ELeave) CSvgRenderFrameControl(
+                                   aFileHandle, aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL( aParent );    
+    return self;
+    }    
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::~CSvgRenderFrameControl
+// -----------------------------------------------------------------------------
+//   
+CSvgRenderFrameControl::~CSvgRenderFrameControl()
+    {     
+    DeleteEngine();  
+    delete iBmap;  
+    delete iRenderFrameTimer;          
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::SizeChanged
+// -----------------------------------------------------------------------------
+// 
+void CSvgRenderFrameControl::SizeChanged()
+    {
+    iRect = iParent->Rect();
+    
+    }
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::UpdateScreen
+// -----------------------------------------------------------------------------
+//
+void CSvgRenderFrameControl::UpdateScreen()
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::ScriptCall
+// -----------------------------------------------------------------------------
+//    
+TBool CSvgRenderFrameControl::ScriptCall( const TDesC& /*aScript*/,
+                                          CSvgElementImpl* /*aCallerElement*/ )
+    {    
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::FetchImage
+// -----------------------------------------------------------------------------
+//    
+TInt CSvgRenderFrameControl::FetchImage( const TDesC& aUri, RFs& aSession, 
+                                         RFile& aFileHandle )
+    {
+    if ( iAppObserver )
+        {
+        return iAppObserver->FetchImage( aUri, aSession, aFileHandle );        
+        }
+    else
+        {
+        return KErrNotFound;
+        }
+    
+    }
+
+TInt CSvgRenderFrameControl::FetchFont( const TDesC& /* aUri */, 
+                                    RFs& /* aSession */, RFile& /* aFileHandle */ )
+    {
+    return KErrNotSupported;
+    }
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::GetSmilFitValue
+// -----------------------------------------------------------------------------
+//
+void CSvgRenderFrameControl::GetSmilFitValue(TDes& /*aSmilValue*/)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::UpdatePresentation
+// -----------------------------------------------------------------------------
+//    
+void CSvgRenderFrameControl::UpdatePresentation( const TInt32&  
+                                                 /*aNoOfAnimation*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::Draw
+// -----------------------------------------------------------------------------
+// 
+void CSvgRenderFrameControl::Draw(const TRect& /*aRect*/) const
+    {       
+       
+    // Calculate rectangle for the whole bitmap
+    TRect bmpPieceRect(TPoint(0,0), iRect.Size() );    
+    
+    // Get the standard graphics context
+    CWindowGc& gc = SystemGc();    
+    
+    gc.SetBrushColor(CGraphicsContext::ENullBrush );
+    gc.SetPenColor( CGraphicsContext::ENullPen );
+    
+    gc.BitBlt( TPoint(0,0),iBitmapFrames[iCurrentFrame],
+              bmpPieceRect );       
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::SetTimer
+// -----------------------------------------------------------------------------
+// 
+void CSvgRenderFrameControl::SetTimer()    
+    {    
+    if ( !iRenderFrameTimer )
+        {        
+        TRAP_IGNORE( iRenderFrameTimer = 
+                    CSvgRenderFrameTimer::NewL( this ) );
+        }
+    if ( iCanPlay )               
+        {
+        // Since the number of delay intervals is one less than 
+        // the number of bitmaps need to have a bound check
+        iRenderFrameTimer->SetTimeOut( iDelayIntervals[
+           iCurrentFrame >= iDelayIntervals.Count() ? 0 : iCurrentFrame]
+           * KConvertToMicroSecond );       
+        }  
+    }
+ 
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::CancelTimer
+// -----------------------------------------------------------------------------
+//      
+void CSvgRenderFrameControl::CancelTimer()
+    {
+    if (iRenderFrameTimer)
+        {
+        iRenderFrameTimer->Cancel();
+        delete iRenderFrameTimer;
+        iRenderFrameTimer = NULL;
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::ProcessViewerCommandL
+// -----------------------------------------------------------------------------
+//    
+void CSvgRenderFrameControl::ProcessViewerCommandL( TInt aCommandId )
+    {
+    if ( aCommandId == ESvgtDlgPlayCommand )
+        {
+         _LIT(msg1, "start event " );    
+        PrintDebugMsg( msg1 );    
+        iCanPlay = ETrue;
+        SetTimer();
+        }
+    if ( aCommandId == ESvgtDlgPauseCommand )
+        {
+         _LIT(msg1, "end event " );    
+        PrintDebugMsg( msg1 );    
+        iCanPlay = EFalse;
+        CancelTimer();
+        }        
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::GetCurrentIndex
+// -----------------------------------------------------------------------------
+//
+TInt CSvgRenderFrameControl::GetCurrentIndex() const
+    {
+    return iCurrentFrame;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::SetCurrentIndex
+// -----------------------------------------------------------------------------
+//        
+void CSvgRenderFrameControl::SetCurrentIndex( TInt aIndex )
+    {
+    iCurrentFrame = aIndex;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::AnimationTimeOut
+// -----------------------------------------------------------------------------
+//     
+void CSvgRenderFrameControl::AnimationTimeOut()
+    {   
+    DrawNow();
+    SetTimer();
+    MoveIndex();    
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::InitializeEngineL
+// -----------------------------------------------------------------------------
+//  
+void CSvgRenderFrameControl::InitializeEngineL( TBool aCheckFile,
+                                     MSvgRequestObserver* aObserver )
+    {    
+    
+    iBmap =  new ( ELeave ) CFbsBitmap();    
+    TSize dummyScreenSize( 10,10  );    
+    iBmap->Create( dummyScreenSize, EColor16MU );    
+           
+    if ( !iSvgEngine )
+        {
+        TInt fontId = KLatintFontId;
+    
+        switch ( AknLayoutUtils::Variant() )
+            {
+            case EApacVariant:
+                {
+                fontId = KApacFontId;
+                }
+                break;
+            case EEuropeanVariant:
+            default:
+                break;
+            }
+        const CFont* font = AknLayoutUtils::FontFromId( fontId );
+        TFontSpec spec = font->FontSpecInTwips();
+
+        iSvgEngine = CSvgEngineInterfaceImpl::NewL( iBmap,
+                                                    aObserver,
+                                                    spec );                    
+                                                        
+        if ( iSvgEngine && !iSvgDom  )
+            {       
+            if ( aCheckFile )
+                {
+                /* Set Thumbnail Mode if check file mode
+                 * so that the rights wont be consumed 
+                 */
+                iSvgEngine->SetThumbNailMode( ETrue );
+                }
+                
+            MSvgError* parseResult = iSvgEngine->PrepareDom( *iFileHandle, 
+                                                             iSvgDom );
+            
+            if ( aCheckFile )
+                {
+                /* Reset Thumbnail Mode */                
+                iSvgEngine->SetThumbNailMode( EFalse );
+                }                                               
+                                                               
+            if ( parseResult && 
+                 parseResult->HasError() && 
+                 !parseResult->IsWarning() )
+                {   
+                if ( parseResult->HasError() == ESvgNoMemory )
+                    {
+                    User::Leave( KErrNoMemory );        
+                    }
+                else
+                    {
+                    User::Leave( KErrGeneral );
+                    }
+                }        
+            if ( !aCheckFile )
+                {
+                MSvgError* pResult = iSvgEngine->UseDom( iSvgDom, iBmap );
+                if ( pResult->HasError() && !pResult->IsWarning() )
+                    {                
+                    User::Leave( KErrGeneral );
+                    }               
+                }
+            }
+        else
+            {
+            User::Leave( KErrGeneral );
+            }
+        }
+    else
+        {
+        User::Leave( KErrGeneral );
+        }
+    return;
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::DeleteEngine
+// -----------------------------------------------------------------------------
+//  
+void CSvgRenderFrameControl::DeleteEngine()
+    {       
+    for ( TInt i = 0; i < iBitmapFrames.Count(); i++ )
+        {
+        delete iBitmapFrames[i];
+        }        
+
+    for ( TInt i = 0; i < iMaskFrames.Count(); i++ )
+        {
+        delete iMaskFrames[i];
+        }        
+
+    iBitmapFrames.Reset();
+    iMaskFrames.Reset();
+    iDelayIntervals.Reset();
+    
+    iBitmapFrames.Close();
+    iMaskFrames.Close();
+    iDelayIntervals.Close();
+    
+    iCurrentFrame = 0; 
+    iDuration = 0;
+    
+    if ( iSvgDom )
+        {
+        iSvgEngine->DeleteDom( iSvgDom );
+        iSvgDom = 0;
+        }
+    delete iSvgEngine;    
+    iSvgEngine = NULL;
+    
+    }   
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::RenderMyFrames
+// -----------------------------------------------------------------------------
+//  
+TInt CSvgRenderFrameControl::RenderMyFrames()
+    {
+    
+    TUint interval = iSvgEngine->Duration();   
+   
+    if ( interval == KIndefiniteDur || interval > KMaxTimeDuration )
+        {
+        // Infinite content
+        // Dont try to handle using Render Frames
+        // return Error
+        return KErrGeneral;     
+        }
+
+    
+    
+    MSvgError* result = iSvgEngine->RenderFrames(
+                                       iSvgDom,
+                                       iRect.Size(),
+                                       0, 
+                                       interval,
+                                       KMilliSecondsBetweenFrame,
+                                       EColor64K, EGray2,
+                                       iBitmapFrames,
+                                       iMaskFrames,
+                                       iDelayIntervals,
+                                       ETrue /*Remove redundant frames*/ );
+                                          
+                                       
+    if ( result->HasError() && !result->IsWarning() )
+        {
+        return KErrGeneral;
+        } 
+    else
+        {
+        return KErrNone;
+        }
+    }
+   
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::MoveIndex
+// -----------------------------------------------------------------------------
+//     
+void CSvgRenderFrameControl::MoveIndex()
+    {
+    
+    TBuf<64> buffer1;
+    _LIT(msg1, "Index is : %d" );
+    buffer1.Format( msg1, iCurrentFrame );
+    PrintDebugMsg( buffer1 );    
+    
+    iCurrentFrame++;    
+    if ( iCurrentFrame == iBitmapFrames.Count() )
+        {
+        iCurrentFrame = 0;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::CSvgRenderFrameControl
+// -----------------------------------------------------------------------------
+//
+CSvgRenderFrameControl::CSvgRenderFrameControl( RFile& aFileHandle,
+                                                MSvgtAppObserver* aObserver )
+    {
+    iCurrentFrame = 0;
+    iDuration = 0; 
+    iSvgEngine = NULL;
+    iSvgDom = 0;    
+    iFileHandle = &aFileHandle;
+    iCanPlay = EFalse;  
+    iParent = NULL; 
+    iAppObserver = aObserver; 
+    }
+ 
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameControl::ConstructL
+// -----------------------------------------------------------------------------
+//    
+void CSvgRenderFrameControl::ConstructL( const CCoeControl* aParent )
+    {       
+    
+    if ( aParent )
+        {
+        CreateWindowL(aParent); 
+        iParent = aParent;
+        iRect = aParent->Rect();
+        }    
+     
+    InitializeEngineL( EFalse /*Not checkFile mode*/  , this );    
+       
+    User::LeaveIfError(RenderMyFrames()); 
+    
+    SetRect( iRect );
+    
+    ActivateL();
+    
+    }
+    
+// -----------------------------------------------------------------------------
+// CScreenSaverAnimPlugin::PrintDebugMsg
+// -----------------------------------------------------------------------------
+//
+#ifndef _DEBUG        
+void CSvgRenderFrameControl::PrintDebugMsg( const TDesC&  /* aMsg */ ) const
+#else
+void CSvgRenderFrameControl::PrintDebugMsg( const TDesC&  aMsg ) const
+#endif
+    {
+#ifdef _DEBUG        
+    RFileLogger::Write( KFileLoggingDir, KFileLog, 
+                        EFileLoggingModeAppend, aMsg );
+#endif    
+    }  
+          
+// End Of file.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/SvgRenderFrameTimer.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2005 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:  ECOM Implementation Array.
+*
+*/
+
+
+#include "SvgRenderFrameTimer.h"
+#include "SvgRenderFrameControl.h"
+
+
+// INCLUDE FILES
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameTimer::CSvgRenderFrameTimer
+// Default Constructor. Initialises Timer State Variables.
+// -----------------------------------------------------------------------------
+//
+CSvgRenderFrameTimer::CSvgRenderFrameTimer( MSvgRenderFrameTimerListener* 
+        aListener) : // Listener for the pointer inactivity
+    CTimer( CActive::EPriorityStandard ), iListener( aListener )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameTimer::ConstructL
+// Second Phase Constructor for CSvgRenderFrameTimer. Adds this object to the 
+// applications active scheduler.
+// -----------------------------------------------------------------------------
+//
+void CSvgRenderFrameTimer::ConstructL()
+    {
+    // Call the base class ConstructL
+    CTimer::ConstructL();
+    // Add to active scheduler
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameTimer::NewLC
+// Factory function for creating CSvgRenderFrameTimer objects. It also 
+// pushes the created dialog object onto the cleanup stack.
+// Returns: CSvgRenderFrameTimer* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSvgRenderFrameTimer* CSvgRenderFrameTimer::NewLC(
+    MSvgRenderFrameTimerListener* aListener ) // Listener for inactivity event
+    {
+    CSvgRenderFrameTimer* self = new ( ELeave ) CSvgRenderFrameTimer( 
+            aListener );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameTimer::NewL
+// Factory function for creating CSvgRenderFrameTimer objects.
+// Returns: CSvgRenderFrameTimer* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSvgRenderFrameTimer* CSvgRenderFrameTimer::NewL( 
+    MSvgRenderFrameTimerListener* aListener ) // Listener for inactivity event
+    {
+    CSvgRenderFrameTimer* self = NewLC( aListener );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// Destructor
+CSvgRenderFrameTimer::~CSvgRenderFrameTimer()
+    {
+    // Cancel any pending timer events 
+    Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameTimer::DoCancel
+// Reimplements CActive::DoCancel. 
+// -----------------------------------------------------------------------------
+//
+void CSvgRenderFrameTimer::DoCancel()
+    {
+    CTimer::DoCancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgRenderFrameTimer::RunL
+// Reimplements CActive::RunL. This function resets the inactivity timer 
+// so that the control is triggered to hide the pointer when no 
+// activity occurs for a specified time period
+// -----------------------------------------------------------------------------
+//
+void CSvgRenderFrameTimer::RunL()
+    {
+    // Callback 
+    if ( iListener )
+        {
+        iListener->AnimationTimeOut();
+        }
+    }
+
+void CSvgRenderFrameTimer::SetTimeOut( 
+    const TTimeIntervalMicroSeconds32& anInterval )
+    {
+    if (!IsActive())
+        {
+        After( anInterval );
+        }
+    }
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/SvgScreenSaver.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,361 @@
+/*
+* Copyright (c) 2005 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:  This file implements the SVGT Screen Saver Plugin which
+*                is used by Screen Saver application to display SVGT content
+*
+*/
+
+
+#include <eikenv.h>
+#include <bautils.h>
+
+#include <aknnotewrappers.h> 
+#include <SVGTCustControl.h>
+#include <coecntrl.h>
+#include <SVGTUIDialog.hrh>
+#include <SVGTAppObserverUtil.h>
+#include "SvgScreenSaver.h"
+#include "SvgRenderFrameControl.h"
+
+_LIT( KSccSmilFitValue,"meet" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::CSvgScreenSaver
+// -----------------------------------------------------------------------------
+//
+CSvgScreenSaver::CSvgScreenSaver():iIsRenderFrameControl(ETrue),
+                                   iLastError(KErrNone)
+    {        
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::~CSvgScreenSaver
+// -----------------------------------------------------------------------------
+//   
+CSvgScreenSaver::~CSvgScreenSaver()
+    {
+    iFileHandle.Close();
+    delete iSvgControl;    
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::SetRect
+// -----------------------------------------------------------------------------
+//    
+void CSvgScreenSaver::SetRect(const TRect& aRect)
+    {
+    iRect = aRect;
+
+    if ( iIsRenderFrameControl )
+        {
+        if ( iSvgControl )
+            {
+            TInt index = STATIC_CAST(CSvgRenderFrameControl*, iSvgControl)->
+                GetCurrentIndex(); 
+            delete iSvgControl;      
+            iSvgControl = NULL;
+            AsFile( iFileName );
+            if ( iIsRenderFrameControl && iSvgControl )
+                {
+                STATIC_CAST(CSvgRenderFrameControl*, iSvgControl)->
+                   SetCurrentIndex( index );                    
+                }
+            }        
+        }
+    else
+        {
+        if ( iSvgControl )
+            {
+            iSvgControl->SetExtentToWholeScreen();
+            }
+        }        
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::SendCommandL
+// -----------------------------------------------------------------------------
+//
+void CSvgScreenSaver::SendCommandL( TInt aCommand )
+    {
+    if ( !iSvgControl )
+        {
+        User::Leave( KErrGeneral );
+        }
+    if ( iIsRenderFrameControl )
+        {
+        STATIC_CAST(CSvgRenderFrameControl*, iSvgControl)->
+                ProcessViewerCommandL( aCommand );
+        }
+    else
+        {
+        STATIC_CAST(CSVGTCustControl*, iSvgControl)->
+                ProcessViewerCommandL( aCommand );
+        }    
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::MakeVisible
+// -----------------------------------------------------------------------------
+//
+void CSvgScreenSaver::MakeVisible( TBool aVisible )
+    {
+    if ( iSvgControl )
+        {
+        iSvgControl->MakeVisible( aVisible );        
+        }    
+    }
+ 
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::GetLastError
+// -----------------------------------------------------------------------------
+//
+TInt CSvgScreenSaver::GetLastError() const
+    {
+    return iLastError;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::FetchImage
+// -----------------------------------------------------------------------------
+//    
+TInt CSvgScreenSaver::FetchImage( const TDesC& aUri, RFs& aSession, 
+                 RFile& aFileHandle )
+    {
+    CSVGTAppObserverUtil::TDownloadNeeded dnloadNeeded = 
+                                     CSVGTAppObserverUtil::ELocalImageFile ;
+    TRAPD( err, 
+       dnloadNeeded = CSVGTAppObserverUtil::IsDownloadNeededL( aUri ));
+    if ( err != KErrNone )
+        {        
+        return err;   
+        }
+    
+           
+    if ( CSVGTAppObserverUtil::ELocalImageFile == dnloadNeeded )
+        {
+                           
+        TFileName fileName;    
+        if ( CSVGTAppObserverUtil::GetLocalFile( aUri, fileName, iFileName ) )
+            {
+            return aFileHandle.Open( aSession, fileName, EFileShareAny );
+            }
+        else
+            {
+            return KErrNotFound;
+            }
+        }
+    return KErrNotFound;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::GetSmilFitValue
+// -----------------------------------------------------------------------------
+//
+void CSvgScreenSaver::GetSmilFitValue(TDes& aSmilValue)
+    {
+    aSmilValue.Copy( KSccSmilFitValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::NotifyL
+// -----------------------------------------------------------------------------
+//    
+TInt CSvgScreenSaver::NotifyL(TNotificationType /*aCallType*/, 
+                                    void* /*aParam*/)
+    {
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::ConstructL
+// -----------------------------------------------------------------------------
+//    
+void CSvgScreenSaver::ConstructL( const CCoeControl* aParent )
+    { 
+    iParent = aParent; 
+    iEikEnv = CEikonEnv::Static();
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::AsFile
+// -----------------------------------------------------------------------------
+//     
+TInt CSvgScreenSaver::AsFile(const TDesC& aFileName)
+    {
+    iFileName = aFileName;
+    iLastError = iFileHandle.Open( iEikEnv->FsSession(), 
+                                 aFileName, 
+                                 EFileShareReadersOnly );
+                                 
+    if ( iLastError != KErrNone )
+        {
+        return iLastError;
+        }
+    TInt aSize = 0;
+    iFileHandle.Size(aSize);
+        
+    if ( aSize > KMaxFileSize )
+       {
+            iLastError = KErrGeneral;
+        }
+                                     
+    else
+        {
+            TRAP( iLastError,
+            iSvgControl = CSvgRenderFrameControl::NewL( iParent, iFileHandle, this ) );    
+        }                                   
+            
+    if ( iLastError != KErrNone )
+        {
+        iIsRenderFrameControl = EFalse;
+        delete iSvgControl;
+        iSvgControl = NULL;
+     
+        // reset iLastError
+        iLastError = KErrNone;
+
+        // Render Frames returned error
+        TRAP( iLastError, 
+          iSvgControl = CSVGTCustControl::NewL( iFileHandle,
+                                              this,   // App Observer
+                                              NULL,   // Progress Bar Draw Impl
+                                              NULL,	  // MSK label Impl
+                                              NULL,   // Exit Observer
+                                              EFalse, // No Progressive Render
+                                              iParent,
+                                              ESvgWindowOwning ));
+                                               
+        if ( iSvgControl )
+            {
+            STATIC_CAST(CSVGTCustControl*, iSvgControl)->
+                    SetCurrentFullScreenStatus( ETrue );
+            // trigger a size changed event
+            iSvgControl->SetExtentToWholeScreen();                    
+            TRAP_IGNORE(STATIC_CAST(CSVGTCustControl*, iSvgControl)->
+                    ProcessViewerCommandL(ESvgtDlgStopCommand));
+            }          
+        else
+            {
+            // Control is not created.
+            iLastError = KErrGeneral;
+            }
+        } 
+      
+    iFileHandle.Close();
+   
+    return iLastError;
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::LinkActivated
+// -----------------------------------------------------------------------------
+//  
+TBool CSvgScreenSaver::LinkActivated( const TDesC& /*aUri*/ )
+    {
+    return EFalse;
+    }
+
+        
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::LinkActivatedWithShow
+// -----------------------------------------------------------------------------
+// 
+TBool CSvgScreenSaver::LinkActivatedWithShow( const TDesC& /*aUri*/, 
+                                              const TDesC& /*aShow*/ )
+    {
+    return EFalse;
+    }
+               
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::SetDownloadMenu
+// -----------------------------------------------------------------------------
+// 
+void CSvgScreenSaver::SetDownloadMenu( TBool /*aAddDownloadMenu*/ )
+    {
+    }
+        
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::CanShowDownload
+// -----------------------------------------------------------------------------
+//   
+TBool CSvgScreenSaver::CanShowDownload() const
+    {
+    return EFalse;
+    }       
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::DisplayDownloadMenuL
+// -----------------------------------------------------------------------------
+//  
+void CSvgScreenSaver::DisplayDownloadMenuL()
+    {
+    }
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::CanShowSave
+// -----------------------------------------------------------------------------
+// 
+TBool CSvgScreenSaver::CanShowSave()
+    {
+    return EFalse;
+    }
+        
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::IsSavingDone
+// -----------------------------------------------------------------------------
+// 
+TBool CSvgScreenSaver::IsSavingDone()
+    {
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::DoSaveL
+// -----------------------------------------------------------------------------
+//  
+void CSvgScreenSaver::DoSaveL( TInt /*aCommandId*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::NewFetchImageData
+// -----------------------------------------------------------------------------
+//  
+TInt CSvgScreenSaver::NewFetchImageData( const TDesC& /* aUri */ )
+    {
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::AssignEmbededDataL
+// -----------------------------------------------------------------------------
+//  
+void CSvgScreenSaver::AssignEmbededDataL( const TDesC& /*aUri*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgScreenSaver::ExitWhenOrientationChange
+// -----------------------------------------------------------------------------
+//  
+TBool CSvgScreenSaver::ExitWhenOrientationChange()
+    {
+        return EFalse;
+    }
+
+// End Of file.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/SvgScreenSaverProxy.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2005 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:  ECOM Implementation Array.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    <e32Std.h>
+#include    <ImplementationProxy.h>
+#include    <coecntrl.h>
+#include    "SvgScreenSaverImplementationUid.hrh"
+#include    "SvgScreenSaver.h"
+
+// CONSTANTS
+const TImplementationProxy ImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY(KSVGTScreenSaverImplementationUID, 
+                    CSvgScreenSaver::NewL    )
+    };
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// ImplementationProxy
+// ECOM implementation table entry.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+    return ImplementationTable;
+    }
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/Svgtplugin.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2005 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:  SVGT Plugin Implementation source file
+ *
+*/
+
+
+
+#include <e32std.h>
+#include <eikenv.h>
+#include <barsread.h>
+#include <fbs.h>
+#include <gdi.h>
+#include <f32file.h>
+
+#include "Svgtplugin.h"
+#include "SvgScreenSaver.h"
+
+
+// -----------------------------------------------------------------------------
+// CSvgtPlugin::NewL
+// -----------------------------------------------------------------------------
+//
+CSvgtPlugin* CSvgtPlugin::NewL(NPP anInstance)
+    {
+    CSvgtPlugin *self = new (ELeave) CSvgtPlugin(anInstance);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtPlugin::~CSvgtPlugin
+// -----------------------------------------------------------------------------
+//
+CSvgtPlugin::~CSvgtPlugin()
+    {
+    if ( iControl )
+        {
+        delete iControl;        
+        }    
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgtPlugin::PrepareToExitL
+// -----------------------------------------------------------------------------
+//
+void CSvgtPlugin::PrepareToExitL()
+    {
+    if ( iPluginAdapter )
+        {
+        iPluginAdapter->PluginFinishedL();
+        }
+    if ( iControl )
+        {
+        delete iControl;
+        iControl=NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtPlugin::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSvgtPlugin::ConstructL()
+    {      
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtPlugin::SetWindowL
+// Sets the parent control
+// -----------------------------------------------------------------------------
+//
+void CSvgtPlugin::SetWindowL(const NPWindow *aWindow,const TRect& aRect)
+    {
+    if ( !aWindow )
+        {
+        User::Leave( KErrArgument );
+        }
+    iPluginAdapter = static_cast<MPluginAdapter*>(aWindow->window);
+    CCoeControl* lParentControl = iPluginAdapter->GetParentControl();
+
+    if ( !iControl )
+        {
+        // Control is created here as Parent Control is available
+        // only in SetWindowL
+        iControl = new (ELeave) CSvgScreenSaver;
+        iControl->ConstructL( lParentControl );
+        iPluginAdapter->SetPluginNotifier(iControl);
+        }
+
+    iControl->SetRect(aRect);
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtPlugin::CSvgtPlugin
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+CSvgtPlugin::CSvgtPlugin(NPP anInstance)
+    {
+    iScreenSaverMode = EFalse;
+    this->iInstance=anInstance;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSvgtPlugin::Control
+// returns the control
+// -----------------------------------------------------------------------------
+//
+CSvgScreenSaver* CSvgtPlugin::Control() const
+    {
+    ASSERT( iControl );
+    return iControl;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgtPlugin::Instance
+// returns the instance
+// -----------------------------------------------------------------------------
+//
+NPP CSvgtPlugin::Instance() const
+    {
+    return iInstance;
+    }
+ 
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/Svgtplugindllapi.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,282 @@
+/*
+* Copyright (c) 2005 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:  SVGT Plugin Implementation source file
+ *
+*/
+
+
+
+#include <SVGTUIDialog.hrh>
+#include <eikenv.h>
+
+#include "Svgtplugin.h"
+#include "SvgRenderFrameControl.h"
+#include "SvgScreenSaver.h"
+
+// -----------------------------------------------------------------------------
+// SvgtPluginNewp
+// Creates the plugin.
+// -----------------------------------------------------------------------------
+//
+NPError SvgtPluginNewp(NPMIMEType /*pluginType*/,
+                       NPP aInstance, 
+                       uint16 /*mode*/, 
+                       CDesCArray* /*argn*/, 
+                       CDesCArray* /*argv*/, 
+                       NPSavedData* /*saved*/)
+    {
+    CSvgtPlugin* lSvgtPlugin=NULL;
+    TRAPD(err,lSvgtPlugin=CSvgtPlugin::NewL(aInstance));
+
+    if (err == KErrNoMemory)
+        {
+        return NPERR_OUT_OF_MEMORY_ERROR;
+        }
+    if (err != KErrNone)
+        {
+        return NPERR_MODULE_LOAD_FAILED_ERROR;
+        }
+    if ( aInstance )
+        {
+        aInstance->pdata = (void *) lSvgtPlugin;        
+        }
+    else
+        {
+        return NPERR_INVALID_INSTANCE_ERROR;
+        }
+    return NPERR_NO_ERROR;
+    }
+
+
+// -----------------------------------------------------------------------------
+// SvgtPluginDestroy
+// Destroy a plugin.
+// -----------------------------------------------------------------------------
+//
+NPError SvgtPluginDestroy(NPP aInstance, NPSavedData** /*save*/)
+    {
+    if ( !aInstance )
+        {
+        return NPERR_GENERIC_ERROR;
+        }
+    CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *)aInstance->pdata;
+    if ( lSvgtPlugin )
+        {
+        TRAPD(err,lSvgtPlugin->PrepareToExitL());
+        if (err != KErrNone)
+            {
+            #ifdef _DEBUG
+            RDebug::Print(_L("SvgtPluginDestroy Error when printing Warning"));
+            #endif //_DEBUG
+            }
+        /**Ignoring the error*/
+        delete lSvgtPlugin;
+        lSvgtPlugin = NULL;
+        }
+    return NPERR_NO_ERROR;
+    }
+
+// -----------------------------------------------------------------------------
+// SvgtPluginSetWindow
+// This sets the parent window of a plugin.
+// -----------------------------------------------------------------------------
+//
+NPError SvgtPluginSetWindow(NPP aInstance, NPWindow* aWindow)
+    {
+    if ( !aInstance )
+        {
+        return NPERR_INVALID_INSTANCE_ERROR;
+        }
+    if ( !aWindow )
+        {
+        return NPERR_GENERIC_ERROR; 
+        }
+    CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *) aInstance->pdata;
+    TUint lWidth = aWindow->width;
+    TUint lHeight = aWindow->height;
+   
+    TRAPD(err,lSvgtPlugin->SetWindowL(aWindow,TRect(TSize(lWidth,lHeight))));
+    if (err == KErrNoMemory)
+        {
+        return NPERR_OUT_OF_MEMORY_ERROR;
+        }
+        
+    if (err != KErrNone)
+        {
+        return NPERR_GENERIC_ERROR;
+        }
+        
+    return NPERR_NO_ERROR;
+    }
+
+// -----------------------------------------------------------------------------
+// SvgtPluginAsFile
+// The name of the SVG file is set by AsFile
+// -----------------------------------------------------------------------------
+//
+void SvgtPluginAsFile(NPP aInstance, NPStream* /*stream*/, const TDesC& aFname)
+    {
+    CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin*)aInstance->pdata;
+    TInt err = lSvgtPlugin->Control()->AsFile(aFname);
+    if ( err != KErrNone )
+        {
+        // Destroy myself
+        SvgtPluginDestroy( aInstance, NULL );
+        }
+    }
+
+
+
+
+// -----------------------------------------------------------------------------
+// SvgtPluginGetValue
+// Generic hook to retrieve values/attributes from the plugin.
+// -----------------------------------------------------------------------------
+//
+NPError SvgtPluginGetValue(NPP aInstance, 
+                           NPPVariable aVariable, 
+                           void* aRetvalue)
+    {
+    TInt ret = NPERR_NO_ERROR;
+    if ( !aInstance )
+        {
+        ret = NPERR_INVALID_INSTANCE_ERROR;
+        }
+    CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *)aInstance->pdata;       
+    if ( lSvgtPlugin && aRetvalue )
+        {        
+        if ( aVariable == NPPCheckFileIsValid )
+            {             
+            NPCheckFile* checkFile = (NPCheckFile*)aRetvalue;
+            checkFile->fileValidityCheckError = KErrNone;     
+            TRAPD(err, SvgtPluginCheckFileL( aRetvalue ) );
+            if ( err != KErrNone )
+                {
+                ret=  NPERR_GENERIC_ERROR;
+                }
+            ret = NPERR_NO_ERROR;
+            }    
+        if ( aVariable == NPPScreenSaverGetLastError )
+            { 
+            TInt* error = (TInt*)aRetvalue;
+            *error = lSvgtPlugin->Control()->GetLastError();
+            ret =  NPERR_NO_ERROR;
+            }               
+        }
+    else
+        {
+        ret =  NPERR_GENERIC_ERROR;
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// SvgtPluginCheckFileL
+// Helper function used to check the file's validity
+// -----------------------------------------------------------------------------
+//
+void SvgtPluginCheckFileL( void* aRetvalue )
+    {
+    if ( !aRetvalue )
+        {
+        User::Leave( KErrArgument );
+        }
+    NPCheckFile* checkFile = (NPCheckFile*)aRetvalue;    
+    TFileName fileName = checkFile->fileName->Des();
+    RFile fileHandle;
+    TInt err = fileHandle.Open( CEikonEnv::Static()->FsSession(), 
+                                 fileName, 
+                                 EFileShareAny );
+    User::LeaveIfError( err );
+                
+    CleanupClosePushL( fileHandle );
+    CSvgRenderFrameControl* control = new ( ELeave )
+                      CSvgRenderFrameControl( fileHandle );
+                      
+    CleanupStack::PushL( control );                      
+    TRAP( err, control->InitializeEngineL( ETrue, control ) ); /* CheckFile Mode */
+    checkFile->fileValidityCheckError = err;
+    CleanupStack::PopAndDestroy( control );
+    CleanupStack::PopAndDestroy(&fileHandle); 
+    }
+
+
+// -----------------------------------------------------------------------------
+// SvgtPluginSetValue
+// Generic hook to set values/attributes within the plugin.
+// -----------------------------------------------------------------------------
+//
+NPError SvgtPluginSetValue(NPP aInstance, 
+                           NPNVariable aVariable, 
+                           void* aRetvalue)
+    {
+    TInt ret = NPERR_NO_ERROR;
+    if ( !aInstance )
+        {
+        ret = NPERR_INVALID_INSTANCE_ERROR;
+        }
+    CSvgtPlugin* lSvgtPlugin = (CSvgtPlugin *)aInstance->pdata;    
+    
+    if ( lSvgtPlugin )
+        {
+        switch( aVariable )
+            {
+            case NPNInteractionMode:
+            // do nothing
+            break;
+            case NPNScreenSaverAnimationEvent:
+                {
+                NPAnimationEvent animEvent = ( NPAnimationEvent )
+                                    (*(NPAnimationEvent*)aRetvalue);
+                                    
+                if ( animEvent == NPStartAnimation )
+                    {
+                    // Make the control Visible
+                    lSvgtPlugin->Control()->MakeVisible( ETrue );
+                    TRAPD(err, lSvgtPlugin->Control()->
+                          SendCommandL(ESvgtDlgLoopOnCommand));
+                    if ( err != KErrNone )
+                        {
+                        ret = NPERR_GENERIC_ERROR;            
+                        }                                               
+                    // Start the animation
+                    TRAP( err, lSvgtPlugin->Control()->
+                          SendCommandL( ESvgtDlgPlayCommand ) );
+                    if ( err != KErrNone )
+                        {
+                        ret = NPERR_GENERIC_ERROR;
+                        }        
+                    }
+                if ( animEvent == NPEndAnimation )
+                    {
+                    // Make the control invisible
+                    lSvgtPlugin->Control()->MakeVisible( EFalse );
+                    // Stop the animation
+                    TRAPD( err, lSvgtPlugin->Control()->
+                        SendCommandL( ESvgtDlgPauseCommand ) );
+                    if ( err != KErrNone )
+                        {
+                        ret= NPERR_GENERIC_ERROR;            
+                        }
+                    }        
+                }
+            break;
+            }       
+        }
+    return ret;
+    }
+
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/ScreenSaverPluginSrc/Svgtpluginmain.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2005 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:  SVGT Plugin Implementation source file
+ *
+*/
+
+
+#include <implementationproxy.h>
+#include <CEcomBrowserPluginInterface.h>
+
+#include "Svgtplugin.h"
+
+const TInt KPluginVersion = 1;
+
+// -----------------------------------------------------------------------------
+// CSvgtPluginEcomMain::NewL
+// -----------------------------------------------------------------------------
+//  
+CSvgtPluginEcomMain* CSvgtPluginEcomMain::NewL(TAny* aInitParam)
+    {
+    if ( !aInitParam )
+        {
+        User::Leave(KErrArgument);
+        }
+        
+    // aInitParam has both the NPNImplementation Functions implemented by
+    // the ScreensaverAnimPlugin and the functions  implemented by the 
+    // SVGPlugin for animation plugin.  
+        
+    TFuncs* funcs = REINTERPRET_CAST( TFuncs*, aInitParam);
+    CSvgtPluginEcomMain* self = new(ELeave)
+                                CSvgtPluginEcomMain(funcs->iNetscapeFuncs);
+    CleanupStack::PushL(self);
+    self->ConstructL(funcs->iPluginFuncs);
+    CleanupStack::Pop( self );
+    Dll :: SetTls ( (void*) self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtPluginEcomMain::ConstructL
+// -----------------------------------------------------------------------------
+//  
+void CSvgtPluginEcomMain::ConstructL(NPPluginFuncs* aPluginFuncs)
+    {
+    InitializeFuncs(aPluginFuncs);
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtPluginEcomMain::CSvgtPluginEcomMain
+// -----------------------------------------------------------------------------
+//  
+CSvgtPluginEcomMain::CSvgtPluginEcomMain(NPNetscapeFuncs* aNpf) : 
+                            CEcomBrowserPluginInterface(),iNpf(aNpf)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtPluginEcomMain::~CSvgtPluginEcomMain
+// -----------------------------------------------------------------------------
+// 
+CSvgtPluginEcomMain::~CSvgtPluginEcomMain()
+    {    
+    }
+      
+const TImplementationProxy KImplementationTable[] =
+    {
+    {{KSvgtPluginImplementationValue}, 
+    (TProxyNewLPtr) CSvgtPluginEcomMain::NewL}
+    };
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// -----------------------------------------------------------------------------
+// 
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy);
+    return KImplementationTable;
+    }
+
+// -----------------------------------------------------------------------------
+// InitializeFuncs
+// -----------------------------------------------------------------------------
+// 
+EXPORT_C NPError InitializeFuncs(NPPluginFuncs* aPpf)
+    {
+    if ( !aPpf )
+        {
+        return NPERR_GENERIC_ERROR;
+        }
+    aPpf->size = sizeof(NPPluginFuncs);
+    aPpf->version = KPluginVersion;
+    aPpf->newp          = NewNPP_NewProc(SvgtPluginNewp);
+    aPpf->destroy       = NewNPP_DestroyProc(SvgtPluginDestroy);
+    aPpf->setwindow     = NewNPP_SetWindowProc(SvgtPluginSetWindow);
+    aPpf->newstream     = NULL;
+    aPpf->destroystream = NULL;
+    aPpf->asfile        = NewNPP_StreamAsFileProc(SvgtPluginAsFile);
+    aPpf->writeready    = NULL;
+    aPpf->write         = NULL;
+    aPpf->print         = NULL;
+    aPpf->event         = NULL;
+    aPpf->urlnotify     = NULL;
+    aPpf->javaClass     = NULL;
+    aPpf->getvalue      = NewNPP_GetValueProc(SvgtPluginGetValue);
+    aPpf->setvalue      = NewNPP_SetValueProc(SvgtPluginSetValue);
+    return NPERR_NO_ERROR;
+    
+    }
+
+// -----------------------------------------------------------------------------
+// NPP_Shutdown
+// -----------------------------------------------------------------------------
+// 
+EXPORT_C void NPP_Shutdown(void)
+    {
+    CSvgtPluginEcomMain* npm = (CSvgtPluginEcomMain*) Dll :: Tls ();
+    delete npm;
+    Dll :: SetTls ( NULL );
+    }
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/SvgtFileViewDetailsSrc/SVGTDrmHelper.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,542 @@
+/*
+* Copyright (c) 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:  DRM helper for svgt files.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    <DRMHelper.h>
+#include    <bamdesca.h>
+#include    <bautils.h>
+#include    <coemain.h>
+#include    <StringLoader.h>
+#include    <aknnotewrappers.h>
+#include    <caf/content.h>
+#include    <caf/attribute.h>
+#include    <caf/caftypes.h>
+#include    <caf/caferr.h>
+#include    <Oma2Agent.h>
+
+#include    "SVGTDrmHelper.h"
+
+// CONSTANTS
+
+const TUint32 KSVGTCountConstraint = 3;
+const TInt KSVGTTimeConstraint = 7;
+const TInt KSVGTSecondsInDay = 86400;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::CSVGTDrmHelper
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSVGTDrmHelper::CSVGTDrmHelper() :      
+    iEnv(CCoeEnv::Static())
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSVGTDrmHelper::ConstructL()
+    {
+    iDrmHelper = CDRMHelper::NewL( *iEnv );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSVGTDrmHelper* CSVGTDrmHelper::NewL()
+    {
+    CSVGTDrmHelper* self = CSVGTDrmHelper::NewLC();    
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSVGTDrmHelper* CSVGTDrmHelper::NewLC()
+    {
+    CSVGTDrmHelper* self = new(ELeave) CSVGTDrmHelper();    
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::~CSVGTDrmHelper
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSVGTDrmHelper::~CSVGTDrmHelper()
+    {
+    delete iRightsConstraints;  
+
+    // Delete the DRM Helper
+    delete iDrmHelper;
+    // Reset the environment pointer
+    iEnv = NULL;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::IsPreviewL
+// -----------------------------------------------------------------------------
+//        
+TBool CSVGTDrmHelper::IsPreviewL( RFile& aFileHandle )    
+    {
+    LoadUsageRigthsInfoL( aFileHandle );        
+    
+    TSVGTRightsStatus rightsStatus;
+    GetUsageRightsStatus( rightsStatus );         
+    return ( rightsStatus == ESVGTPreview );  
+
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::CheckRightsAmountL
+// -----------------------------------------------------------------------------
+//     
+TInt CSVGTDrmHelper::CheckRightsAmountL( RFile& aFileHandle )
+    {
+    LoadUsageRigthsInfoL( aFileHandle );
+    if ( iProtected )
+        {
+        return iDrmHelper->CheckRightsAmountL( aFileHandle );   
+        }
+    else
+        {
+        return 0;
+        }
+    }
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetDrmDetailsL
+// -----------------------------------------------------------------------------
+// 
+void CSVGTDrmHelper::GetDrmDetailsL( RFile& aFileHandle,
+                         TBool& aRightsValid, TBool& aIsSeparateDeliveryNS, 
+                         TBool& aIsProtected )
+    {
+
+
+    LoadUsageRigthsInfoL( aFileHandle );     
+    
+    aIsProtected = IsProtected();    
+    
+    if( !aIsProtected )
+        {       
+        return;
+        }             
+   
+    TSVGTRightsStatus rightsStatus;
+    GetUsageRightsStatus( rightsStatus );       
+    aRightsValid = ( rightsStatus == ESVGTFull ) ||
+                   ( rightsStatus == ESVGTRestricted ) ||
+                   ( rightsStatus == ESVGTPreview ); 
+                   
+                   
+    // Creates a handle to content handled via CAF
+    CContent *content = CContent::NewLC( aFileHandle ); 
+    content->GetAttribute( EIsForwardable, aIsSeparateDeliveryNS );
+    CleanupStack::PopAndDestroy( content );     
+    return;   
+    
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::LoadUsageRigthsInfoL
+// -----------------------------------------------------------------------------
+//
+void CSVGTDrmHelper::LoadUsageRigthsInfoL( RFile& aFileHandle )
+    {
+    
+    delete iRightsConstraints;
+    iRightsConstraints = NULL;
+
+    // Creates a handle to content handled via CAF
+    CContent *content = CContent::NewLC( aFileHandle ); 
+    content->GetAttribute( EIsProtected, iProtected );
+    CleanupStack::PopAndDestroy( content );
+
+    if ( iProtected )
+        {
+
+        CDRMHelperRightsConstraints* ignore1 = NULL;
+        CDRMHelperRightsConstraints* ignore2 = NULL;
+        CDRMHelperRightsConstraints* ignore3 = NULL;
+        
+
+        TRAPD(error, iDrmHelper->GetRightsDetailsL(aFileHandle,
+                                                   ContentAccess::EView,
+                                                   iExpired,
+                                                   iSendingAllowed,
+                                                   ignore1,
+                                                   iRightsConstraints,
+                                                   ignore2,
+                                                   ignore3));  
+       
+        // Delete ignored constraints
+        delete ignore1;
+        ignore1 = NULL;
+        delete ignore2;
+        ignore2 = NULL;
+        delete ignore3;
+        ignore3 = NULL;
+
+        if ( error == KErrCANoRights )
+            {
+            delete iRightsConstraints;
+            iRightsConstraints = NULL;
+            }
+        else
+            {
+            User::LeaveIfError(error);
+            }
+        }
+    else
+        {
+        iExpired = EFalse;
+        iSendingAllowed = ETrue;
+        }     
+
+    iDrmHelper->CanSetAutomated(aFileHandle, iCanSetAutomated);
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetUsageRightsStatus
+// -----------------------------------------------------------------------------
+//
+void CSVGTDrmHelper::GetUsageRightsStatus(TSVGTRightsStatus& aStatus)
+    {
+    if (!iProtected)
+        {
+        aStatus = ESVGTFull;
+        }
+    else if (iRightsConstraints)
+        {
+        if (iExpired)
+            {
+            aStatus = ESVGTExpired;
+            }
+        else if (iRightsConstraints->IsPreview())
+            {
+            aStatus = ESVGTPreview;
+            }
+        else if (iRightsConstraints->FullRights())
+            {
+            aStatus = ESVGTFull;
+            }
+        else
+            {
+            TTime time;
+            TTime startTime;
+
+            time.HomeTime();
+            TInt error = GetStartTime(startTime);
+
+            // Check that usage time has already started
+            if (!error && time < startTime)
+                {
+                aStatus = ESVGTExpired;
+                }
+            else
+                {
+                aStatus = ESVGTRestricted;
+                }
+            }
+        }
+    else
+        {
+        aStatus = ESVGTMissing;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetExpireStatus
+// -----------------------------------------------------------------------------
+//
+void CSVGTDrmHelper::GetExpireStatus(TBool& aAboutToExpire,
+                                            TSVGTExpireConstraint& aConstraint,
+                                            TInt& aCountLeft,
+                                            TInt& aDaysLeft)
+    {
+    TSVGTRightsStatus status;
+    GetUsageRightsStatus(status);
+
+    if (status == ESVGTRestricted)
+        {
+        TUint32 count = 0;
+        TInt countError = GetCount(count);
+        
+        TTime endTime;
+        TInt timeError = GetEndTime(endTime);
+        TTime currentTime;
+        currentTime.HomeTime();
+        TInt diff = endTime.DaysFrom(currentTime).Int();
+
+        TTimeIntervalSeconds interval;
+        TInt intervalError = GetInterval(interval);
+        TInt intervalDiff = 0;
+        if (!intervalError)
+            {
+            TTime intervalStart;
+            TTimeIntervalSeconds secondsFromStart;
+
+            if (!GetIntervalStart(intervalStart))
+                {
+                // No error => interval has already started
+                currentTime.SecondsFrom(intervalStart, secondsFromStart);
+                intervalDiff = 
+                    (interval.Int() - secondsFromStart.Int()) / KSVGTSecondsInDay;
+                }
+            else
+                {
+                // Error occurred => interval not started yet
+                intervalDiff = interval.Int() / KSVGTSecondsInDay;
+                }
+            }
+
+        if (!countError && count <= KSVGTCountConstraint &&
+            ((!timeError && diff <= KSVGTTimeConstraint) ||
+            (!intervalError && intervalDiff <= KSVGTTimeConstraint)))
+            {
+            // Count and time or interval contraints about to expire
+            aConstraint = ESVGTCountAndTime;
+            aCountLeft = count;
+            aAboutToExpire = ETrue;
+
+            if (!timeError && !intervalError)
+                {
+                // Both constraints exist => use smaller one
+                aDaysLeft = Min(diff, intervalDiff);
+                }
+            else if (!timeError)
+                {
+                // Only time constraint exists => use it
+                aDaysLeft = diff;
+                }
+            else
+                {
+                // Only interval constraint exists => use it
+                aDaysLeft = intervalDiff;
+                }
+            }
+        else if (!countError && count <= KSVGTCountConstraint)
+            {
+            // Count constraint about to expire
+            aConstraint = ESVGTCount;
+            aCountLeft = count;
+            aAboutToExpire = ETrue;
+            }
+        else if ((!timeError && diff <= KSVGTTimeConstraint) ||
+                 (!intervalError && intervalDiff <= KSVGTTimeConstraint))
+            {
+            // Time or interval constraint about to expire
+            aConstraint = ESVGTTime;
+            aAboutToExpire = ETrue;
+
+            if (!timeError && !intervalError)
+                {
+                // Both constraints exist => use smaller one
+                aDaysLeft = Min(diff, intervalDiff);
+                }
+            else if (!timeError)
+                {
+                // Only time constraint exists => use it
+                aDaysLeft = diff;
+                }
+            else
+                {
+                // Only Interval constraint exists => use it
+                aDaysLeft = intervalDiff;
+                }
+            }
+        else
+            {
+            // No constraint about to expire
+            aAboutToExpire = EFalse;
+            aConstraint = ESVGTNone;
+            }
+        }
+    else
+        {
+        // Non-restricted object cannot expire
+        aAboutToExpire = EFalse;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::SendingAllowed
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTDrmHelper::SendingAllowed() const
+    {
+    return iSendingAllowed;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetCount
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTDrmHelper::GetCount(TUint32& aCount)
+    {
+    TInt error = KErrNone;
+
+    if (!iProtected)
+        {
+        error = KErrNotFound;
+        }
+    else if (iRightsConstraints)
+        {
+        TUint32 ignore;
+        TRAP(error, iRightsConstraints->GetCountersL(aCount, ignore));
+        }
+    else
+        {
+        error = KErrNotReady;
+        }
+
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetStartTime
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTDrmHelper::GetStartTime(TTime& aStartTime)
+    {
+    TInt error = KErrNone;
+
+    if (!iProtected)
+        {
+        error = KErrNotFound;
+        }
+    else if (iRightsConstraints)
+        {
+        TRAP(error, iRightsConstraints->GetStartTimeL(aStartTime));
+        }
+    else
+        {
+        error = KErrNotReady;
+        }
+
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetEndTime
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTDrmHelper::GetEndTime(TTime& aEndTime)
+    {
+    TInt error = KErrNone;
+
+    if (!iProtected)
+        {
+        error = KErrNotFound;
+        }
+    else if (iRightsConstraints)
+        {
+        TRAP(error, iRightsConstraints->GetEndTimeL(aEndTime));
+        }
+    else
+        {
+        error = KErrNotReady;
+        }
+
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetInterval
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTDrmHelper::GetInterval(TTimeIntervalSeconds& aInterval)
+    {
+    TInt error = KErrNone;
+
+    if (!iProtected)
+        {
+        error = KErrNotFound;
+        }
+    else if (iRightsConstraints)
+        {
+        TRAP(error, iRightsConstraints->GetIntervalL(aInterval));
+        }
+    else
+        {
+        error = KErrNotReady;
+        }
+
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetIntervalStart
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTDrmHelper::GetIntervalStart(TTime& aStartTime)
+    {
+    TInt error = KErrNone;
+
+    if (!iProtected)
+        {
+        error = KErrNotFound;
+        }
+    else if (iRightsConstraints)
+        {
+        TRAP(error, iRightsConstraints->GetIntervalStartL(aStartTime));
+        }
+    else
+        {
+        error = KErrNotReady;
+        }
+
+    return error;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::IsProtected
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTDrmHelper::IsProtected() const
+    {
+    return iProtected;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::CanSetAutomated
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTDrmHelper::CanSetAutomated() const
+    {
+    return iCanSetAutomated;
+    }
+    
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/SvgtFileViewDetailsSrc/svgtfileviewdetails.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,904 @@
+/*
+* Copyright (c) 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:  Implementation of the CSvgtFileViewDetailsDialog.
+*
+*/
+
+    
+
+// INCLUDE FILES
+#include "svgtfileviewdetails.h"
+
+#include <aknlists.h>
+#include <bautils.h>
+#include <StringLoader.h>
+#include <e32base.h>
+#include <apmstd.h> // KMaxDataTypeLength
+#include <DRMHelper.h> 
+#include <caf/content.h>
+#include <caf/attribute.h>
+#include <data_caging_path_literals.hrh>
+#include <tz.h>
+#include <tzconverter.h>
+
+#include <svgtfileviewdetails.rsg>
+
+_LIT(KResourceFileName,"svgtfileviewdetails.rsc");
+
+const TInt KSizeStringLengthSix = 6;
+const TInt KSizeStringLengthFive = 5;
+const TInt KSizeStringLengthFour = 4;
+const TInt KSizeStringLengthThree = 3;
+
+const TInt KValBufferLength = 512;
+const TInt KTimeCount = 2;
+const TInt KArrayGranularity = 2; 
+const TInt KDecimalCount = 2;
+
+const TInt KOneDigit1 = 1;
+const TInt KOneDigit5 = 5;
+const TInt KOneDigit9 = 9;
+const TInt KTwoDigit11 = 11;
+const TInt KTwoDigit14 = 14;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSvgtFileDetails::CSvgtFileDetails
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSvgtFileDetails::CSvgtFileDetails() 
+    :   iUrl(NULL), iFormat(NULL), 
+        iDRMExpireConstraint( ESVGTNone )   //Initialize with no constraints
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileDetails::~CSvgtFileDetails   
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSvgtFileDetails::~CSvgtFileDetails()
+    {
+    delete iUrl;    
+    delete iFormat; 
+    }
+
+
+// CONSTANTS
+
+
+_LIT(KDataTypeSvgt,"svg"); 
+
+const TInt KFileSizeOneKilobyte = 1024;
+const TInt KThousandNotKilobyte = 1000;
+const TInt KMaxTimeLength = 36;
+
+// For meta data 
+_LIT( KSpace, " ");
+
+// Language specific time format
+const TInt KOneDigit = 10;
+const TInt KTwoDigits = 100;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::CSvgtFileViewDetailsDialog
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSvgtFileViewDetailsDialog::CSvgtFileViewDetailsDialog() 
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::ConstructL()
+    {
+    iListBox = new (ELeave) CAknDoublePopupMenuStyleListBox();
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSvgtFileViewDetailsDialog* CSvgtFileViewDetailsDialog::NewL()
+    {
+    CSvgtFileViewDetailsDialog* self = new( ELeave ) CSvgtFileViewDetailsDialog;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::~CSvgtFileViewDetailsDialog   
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSvgtFileViewDetailsDialog::~CSvgtFileViewDetailsDialog()
+    {
+    delete iListBox;
+    iEnv->DeleteResourceFile( iResOffset );  //removing the resource file for enviornment
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::ExecuteLD
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSvgtFileViewDetailsDialog::ExecuteLD( RFile& aFileHandle )     
+    {
+    CleanupStack::PushL( this );
+    CSvgtFileDetails* fileDetails = new (ELeave) CSvgtFileDetails();
+    CleanupStack::PushL( fileDetails );
+
+    AddResourceFileToEnvL();
+
+   // Creates a handle to content handled via CAF
+    CContent *content = CContent::NewLC( aFileHandle ); 
+    content->GetAttribute( EIsProtected, fileDetails->iDrmProtected );
+    CleanupStack::PopAndDestroy( content );
+  
+    if ( fileDetails->iDrmProtected )
+        {
+        // drm data
+        FetchDrmDataL( aFileHandle, fileDetails );        
+        }
+    
+    // recognize file and get format
+    TBuf<KMaxDataTypeLength> format(KDataTypeSvgt);
+    fileDetails->iFormat = format.AllocL();
+    
+    // creation time
+    aFileHandle.Modified(fileDetails->iTime);
+   
+    // Convert from UTC to local time
+    RTz lTz;
+    // Connect to TimeZone Server
+    User::LeaveIfError( lTz.Connect() );
+    CleanupClosePushL( lTz );
+    
+    // Create Util Class
+    CTzConverter* lTzConverterPtr = CTzConverter::NewL( lTz );
+    
+    CleanupStack::PushL( lTzConverterPtr );
+    // Perform conversion to local time
+    User::LeaveIfError( lTzConverterPtr->ConvertToLocalTime( fileDetails->iTime ) );
+
+    CleanupStack::PopAndDestroy( 2 ); // lTzConverterPtr, lTz
+
+    // file size
+    aFileHandle.Size(fileDetails->iSize);
+    
+    // Show File Details Dialog
+    DoLaunchDialogL( fileDetails );
+
+    CleanupStack::PopAndDestroy( fileDetails ); 
+    CleanupStack::PopAndDestroy( this ); 
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::DoLaunchDialog
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::DoLaunchDialogL(const CSvgtFileDetails* aFileDetails )
+    {
+    CAknPopupList* popupList = CAknPopupList::NewL(iListBox,
+            R_AVKON_SOFTKEYS_OK_EMPTY__OK, 
+            AknPopupLayouts::EMenuDoubleWindow);
+    CleanupStack::PushL(popupList);
+    
+    iListBox->ConstructL(popupList, EAknListBoxViewerFlags);
+    iListBox->CreateScrollBarFrameL(ETrue);   
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+                    CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+    
+    SetTitleL(popupList);
+    FillListBoxL(aFileDetails);
+
+    CleanupStack::Pop( popupList );
+    popupList->ExecuteLD();
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::SetTitleL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::SetTitleL(CAknPopupList* aPopupList) const
+    {
+    HBufC* title = StringLoader::LoadLC(R_FILE_DETAILS);
+    if( aPopupList )
+       {
+       aPopupList->SetTitleL(*title);   
+       }    
+    CleanupStack::PopAndDestroy( title ); 
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::FillListBoxL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::FillListBoxL(const CSvgtFileDetails* aFileDetails)
+    {
+    CDesCArray* itemArray = 
+            static_cast<CDesCArray*>( iListBox->Model()->ItemTextArray() );
+    
+    if( aFileDetails )
+        {
+        if ( aFileDetails->iDrmProtected )
+            {
+            MakeDrmItemsL(itemArray,aFileDetails);
+            }    
+           
+        MakeUrlItemL(itemArray,aFileDetails);
+        MakeFormatItemL(itemArray,aFileDetails);
+        MakeDateItemL(itemArray,aFileDetails);
+        MakeTimeItemL(itemArray,aFileDetails);
+        MakeSizeItemL(itemArray,aFileDetails);
+        }
+        
+    iListBox->HandleItemAdditionL();
+    iListBox->SetCurrentItemIndex(0);
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::AddItemToListBoxL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::AddItemToListBoxL(const TDesC& aHeading,
+                                             const TDesC& aValue, 
+                                             CDesCArray* aItemArray) const
+    {
+    CDesCArrayFlat* items = new (ELeave) CDesCArrayFlat( KArrayGranularity );
+    CleanupStack::PushL(items);
+    items->AppendL(aHeading); //First string (heading)
+    items->AppendL(aValue);   //Second string (value)
+    HBufC* headingAndValue = 
+            StringLoader::LoadLC( R_FILE_DETAILS_ROW_FORMAT, *items );
+    if( aItemArray )        
+        {
+        aItemArray->AppendL(*headingAndValue);  
+        }    
+
+        CleanupStack::PopAndDestroy( headingAndValue ); // headingAndValue 
+        CleanupStack::PopAndDestroy( items ); // items 
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::MakeUrlItemL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::MakeUrlItemL(CDesCArray* aItemArray,
+                                  const CSvgtFileDetails* aFileDetails) const
+    {
+    
+    if ( aFileDetails && aFileDetails->iUrl )
+        {
+        HBufC* heading = StringLoader::LoadLC(R_FILE_URL_HEADING);
+        AddItemToListBoxL(*heading,*aFileDetails->iUrl,aItemArray);
+        CleanupStack::PopAndDestroy( heading ); 
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::MakeFormatItemL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::MakeFormatItemL(CDesCArray* aItemArray,
+                                     const CSvgtFileDetails* aFileDetails) const
+    {
+    if ( aFileDetails && aFileDetails->iFormat )
+        {
+        HBufC* heading = StringLoader::LoadLC(R_FILE_FORMAT_HEADING);
+        AddItemToListBoxL(*heading,*aFileDetails->iFormat,aItemArray);
+        CleanupStack::PopAndDestroy( heading );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::MakeSizeItemL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::MakeSizeItemL(CDesCArray* aItemArray,
+                                   const  CSvgtFileDetails* aFileDetails) const
+    {
+
+    if ( aFileDetails && aFileDetails->iSize )
+        {   
+        TRealFormat format = TRealFormat(KMaxFileName, KDecimalCount);
+        TBuf<KMaxFileName> sizeString;
+        HBufC* value = NULL;
+        HBufC* heading = StringLoader::LoadLC(R_FILE_SIZE_HEADING);
+        TReal size = aFileDetails->iSize;
+        
+        // Show bytes with 3 digits. If more digits needed, 
+        // show size in kilobytes.
+        if ( size < KThousandNotKilobyte )
+            {
+            sizeString.Num(size,format);
+            switch (sizeString.Length())
+                {
+                case KSizeStringLengthSix:
+                    sizeString = sizeString.Left( KSizeStringLengthThree );
+                    break;
+                case KSizeStringLengthFive:
+                    sizeString = sizeString.Left( KSizeStringLengthFour );
+                    break;
+                default:
+                    break;
+                }
+            value = StringLoader::LoadLC(R_FILE_SIZE_B,sizeString);
+            }
+        else
+            {
+            size = size/KFileSizeOneKilobyte;
+            sizeString.Num(size,format);
+            switch (sizeString.Length())
+                {
+                case KSizeStringLengthSix:
+                    sizeString = sizeString.Left( KSizeStringLengthThree );
+                    break;
+                case KSizeStringLengthFive:
+                    sizeString = sizeString.Left( KSizeStringLengthFour );
+                    break;
+                default:
+                    break;
+                }
+            value = StringLoader::LoadLC(R_FILE_SIZE_KB,sizeString);
+            }
+        TPtr textPtr = value->Des();
+        LanguageSpecificNumberConversion( textPtr );
+        AddItemToListBoxL(*heading,*value,aItemArray);
+        CleanupStack::PopAndDestroy( value ); 
+        CleanupStack::PopAndDestroy( heading ); // heading & value
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::MakeDateItemL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::MakeDateItemL(CDesCArray* aItemArray,
+                                    const CSvgtFileDetails* aFileDetails) const
+    {
+
+    if ( ( aFileDetails ) && ( aFileDetails->iTime > TTime(0) ))
+        {
+        HBufC* heading = StringLoader::LoadLC(R_FILE_DATE_HEADING);
+        HBufC* dateFormatString = 
+                StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO );
+        TBuf<KMaxTimeLength> date;
+        aFileDetails->iTime.FormatL(date,*dateFormatString);
+        LanguageSpecificNumberConversion( date );
+        AddItemToListBoxL(*heading,date,aItemArray);
+        CleanupStack::PopAndDestroy( dateFormatString ); 
+        CleanupStack::PopAndDestroy( heading ); // heading & dateFormatString
+        }
+
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::MakeTimeItemL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::MakeTimeItemL(CDesCArray* aItemArray,
+                                  const CSvgtFileDetails* aFileDetails) const
+    {
+    if ( ( aFileDetails ) && ( aFileDetails->iTime > TTime(0)))
+        {
+        HBufC* heading = StringLoader::LoadLC( R_FILE_TIME_HEADING );
+        HBufC* timeFormatString = 
+                StringLoader::LoadLC( R_QTN_TIME_USUAL_WITH_ZERO );
+        TBuf<KMaxTimeLength> time;
+        aFileDetails->iTime.FormatL(time,*timeFormatString);
+        LanguageSpecificNumberConversion( time );
+        AddItemToListBoxL(*heading,time,aItemArray);
+        CleanupStack::PopAndDestroy( timeFormatString ); 
+        CleanupStack::PopAndDestroy( heading ); // heading & timeFormatString
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::MakeDrmItemsL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::MakeDrmItemsL(CDesCArray* aItemArray,
+                                       const CSvgtFileDetails* aFileDetails) const
+    {
+
+    HBufC* rights = StringLoader::LoadLC(R_FILE_DRM_DISPLAY);
+    HBufC* heading = NULL;
+    HBufC* value = NULL;
+    
+    if ( aFileDetails )
+        {
+        switch (aFileDetails->iDRMRightsStatus)
+            {
+            case ESVGTFull:
+                // status
+                heading = StringLoader::LoadLC(R_FILE_DRM_STAT);
+                value = StringLoader::LoadLC(R_FILE_DRM_VALID);
+                AddItemToListBoxL(*heading,*value,aItemArray);
+                CleanupStack::PopAndDestroy( value ); 
+                CleanupStack::PopAndDestroy( heading ); // heading && value
+                // full rights
+                heading = StringLoader::LoadLC(R_FILE_DRM_FULL,*rights);
+                value = StringLoader::LoadLC(R_FILE_DRM_UNLIMITED);
+                AddItemToListBoxL(*heading,*value,aItemArray);
+                CleanupStack::PopAndDestroy( value ); 
+                CleanupStack::PopAndDestroy( heading ); // heading && value
+                break;
+            case ESVGTRestricted:
+            case ESVGTPreview:
+                // status
+                heading = StringLoader::LoadLC(R_FILE_DRM_STAT);
+                value = StringLoader::LoadLC(R_FILE_DRM_VALID);
+                AddItemToListBoxL(*heading,*value,aItemArray);
+                CleanupStack::PopAndDestroy( value ); 
+                CleanupStack::PopAndDestroy( heading ); // heading && value
+                // make rest of the drm items
+                MakeRestrictedDrmItemsL(rights,aItemArray,aFileDetails);          
+                break;
+            case ESVGTMissing:
+                // status
+                heading = StringLoader::LoadLC(R_FILE_DRM_STAT);
+                value = StringLoader::LoadLC(R_FILE_DRM_EXP);
+                AddItemToListBoxL(*heading,*value,aItemArray);
+                CleanupStack::PopAndDestroy( value ); 
+                CleanupStack::PopAndDestroy( heading ); // heading && value
+                break;
+            case ESVGTExpired:
+                // status
+                heading = StringLoader::LoadLC(R_FILE_DRM_STAT);
+                value = StringLoader::LoadLC(R_FILE_DRM_EXP);
+                AddItemToListBoxL(*heading,*value,aItemArray);
+                CleanupStack::PopAndDestroy( value ); 
+                CleanupStack::PopAndDestroy( heading ); // heading && value
+                // make rest of the drm items
+                MakeRestrictedDrmItemsL(rights,aItemArray,aFileDetails);          
+                break;
+            default:
+                break;
+            }
+        }
+    
+    heading = NULL;
+    value = NULL;
+    
+    // sending
+    heading = StringLoader::LoadLC(R_FILE_DRM_CS);
+    if ( aFileDetails && aFileDetails->iDRMForwardLocked )
+        {
+        value = StringLoader::LoadLC(R_FILE_DRM_FORBID);
+        }
+    else
+        {
+        value = StringLoader::LoadLC(R_FILE_DRM_ALLOWED);
+        }
+    AddItemToListBoxL(*heading,*value,aItemArray); 
+    CleanupStack::PopAndDestroy( value ); 
+    CleanupStack::PopAndDestroy( heading ); 
+    CleanupStack::PopAndDestroy( rights ); // heading, value, rights
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::MakeDrmItemsL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::MakeRestrictedDrmItemsL(
+        const HBufC* aRights, CDesCArray* aItemArray, 
+        const CSvgtFileDetails* aFileDetails ) const
+    {
+
+    HBufC* heading = NULL;
+    HBufC* value = NULL;
+    
+    if ( !aRights || !aItemArray )
+        {
+        return;
+        }
+        
+    // count
+    if ( ( aFileDetails ) && ( aFileDetails->iDRMExpireConstraint == ESVGTCount 
+    || aFileDetails->iDRMExpireConstraint == ESVGTCountAndTime ))
+        {
+        heading = StringLoader::LoadLC(R_FILE_DRM_UTL,*aRights);
+        
+        TInt counts = aFileDetails->iDRMCountsLeft;
+        
+        if (counts == 1)
+            {
+            value = StringLoader::LoadLC(R_FILE_DRM_1_COUNT);
+            }
+        else
+            {
+            value = StringLoader::LoadLC(R_FILE_DRM_N_COUNTS,counts);
+            }
+        TPtr textPtr = value->Des();
+        LanguageSpecificNumberConversion( textPtr );
+        AddItemToListBoxL(*heading,*value,aItemArray);
+        CleanupStack::PopAndDestroy( value ); 
+        CleanupStack::PopAndDestroy( heading ); // heading && value
+        }
+
+    if ( ( aFileDetails ) && ( aFileDetails->iDRMExpireConstraint == ESVGTTime ||
+        aFileDetails->iDRMExpireConstraint == ESVGTCountAndTime ||
+        ( aFileDetails->iDRMFileHasInterval && 
+        aFileDetails->iDRMIntervalActive )))
+        {
+        HBufC* dateFormatString = StringLoader::LoadLC( 
+                R_QTN_DATE_USUAL_WITH_ZERO );
+        HBufC* timeFormatString = StringLoader::LoadLC( R_QTN_TIME_USUAL );
+        
+        TTime from = aFileDetails->iDRMValidFrom;
+        TTime until = aFileDetails->iDRMValidUntil;
+
+        // from
+        heading = StringLoader::LoadLC(R_FILE_DRM_VALID_FROM,*aRights);
+        HBufC* datePointer = HBufC::NewLC( KMaxLongDateFormatSpec );
+        TPtr date = datePointer->Des();
+        from.FormatL( date, *dateFormatString );
+        TBuf<KMaxTimeLength> time;
+        from.FormatL( time, *timeFormatString );
+        date.Append( KSpace );
+        date.Append( time );
+        LanguageSpecificNumberConversion( date );
+        AddItemToListBoxL( *heading, date, aItemArray );
+        CleanupStack::PopAndDestroy( datePointer ); 
+        CleanupStack::PopAndDestroy( heading ); // datePointer, heading 
+
+        // until
+        heading = StringLoader::LoadLC(R_FILE_DRM_VALID_TO,*aRights);
+        HBufC* dateToPntr = HBufC::NewLC( KMaxLongDateFormatSpec );
+        TPtr dateTo = dateToPntr->Des();
+        until.FormatL( dateTo, *dateFormatString );
+        TBuf<KMaxTimeLength> timeTo;
+        until.FormatL( timeTo, *timeFormatString );
+        dateTo.Append( KSpace );
+        dateTo.Append( timeTo );
+        LanguageSpecificNumberConversion( dateTo );
+        AddItemToListBoxL( *heading, dateTo, aItemArray );
+
+        // destroying dateFormatString, timeFormatString, heading, dateToPntr 
+        CleanupStack::PopAndDestroy( dateToPntr ); 
+        CleanupStack::PopAndDestroy( heading ); 
+        CleanupStack::PopAndDestroy( timeFormatString ); 
+        CleanupStack::PopAndDestroy( dateFormatString ); 
+        }
+    // interval
+    else 
+        {
+        if ( ( aFileDetails ) && ( aFileDetails->iDRMFileHasInterval && 
+             !aFileDetails->iDRMIntervalActive ))
+            {
+            // times not activated
+            heading = StringLoader::LoadLC(R_FILE_DRM_UTS,*aRights);
+            value  = StringLoader::LoadLC(R_FILE_DRM_NOT_ACT);
+            AddItemToListBoxL(*heading,*value,aItemArray);
+            CleanupStack::PopAndDestroy( value ); // heading && value
+            CleanupStack::PopAndDestroy( heading );
+
+            // query what the current time is
+            TTime currentTime;
+            currentTime.HomeTime();
+            // calculate rights end time
+            TTime endTime = currentTime + aFileDetails->iDRMInterval;
+
+            HBufC* lVal = HBufC::NewLC( KValBufferLength );
+            TPtr valPtr(lVal->Des());
+            
+            TInt count = 0;
+
+            // years
+            TTimeIntervalYears years = endTime.YearsFrom(currentTime);
+            if (years.Int())
+                {
+                AddSinglePartOfTimeL( years.Int(), 
+                                  R_FILE_DRM_NBR_OF_YEARS_ONE,
+                                  R_FILE_DRM_NBR_OF_YEARS_ONE_FINAL,
+                                  R_FILE_DRM_NBR_OF_YEARS_TWO_FOUR,
+                                  R_FILE_DRM_NBR_OF_YEARS_FIVE_ZERO,
+                                  value );
+                count++;
+                valPtr.Append(*value);
+                endTime -= years; 
+                CleanupStack::PopAndDestroy( value ); 
+                }
+            
+            // months
+            TTimeIntervalMonths months = endTime.MonthsFrom(currentTime);
+            if (months.Int())
+                {
+                AddSinglePartOfTimeL( months.Int(), 
+                                  R_FILE_DRM_NBR_OF_MONTHS_ONE,
+                                  0,                                  
+                                  R_FILE_DRM_NBR_OF_MONTHS_TWO_FOUR, 
+                                  R_FILE_DRM_NBR_OF_MONTHS_FIVE_ZERO, 
+                                  value );
+                 if (count)
+                    {
+                    valPtr.Append( KSpace );
+                    }
+
+                count++;
+                valPtr.Append(*value);
+                endTime -= months;
+                CleanupStack::PopAndDestroy( value );
+                }
+       
+            // days
+            TTimeIntervalDays days = endTime.DaysFrom(currentTime);
+            if (days.Int() && count < KTimeCount)
+                {
+                AddSinglePartOfTimeL( days.Int(), 
+                                  R_FILE_DRM_NBR_OF_DAYS_ONE,
+                                  R_FILE_DRM_NBR_OF_DAYS_ONE_FINAL,
+                                  R_FILE_DRM_NBR_OF_DAYS_TWO_FOUR, 
+                                  R_FILE_DRM_NBR_OF_DAYS_FIVE_ZERO, 
+                                  value );
+                if (count)
+                    {
+                    valPtr.Append( KSpace );
+                    }
+
+                valPtr.Append(*value);
+                endTime -= days; 
+                CleanupStack::PopAndDestroy( value ); 
+                count++;
+                }
+       
+            // hours
+            TTimeIntervalHours hours;
+            TInt ret = endTime.HoursFrom(currentTime,hours);
+            if (ret == KErrNone && count < KTimeCount && hours.Int())
+                {
+                AddSinglePartOfTimeL( hours.Int(), 
+                                  R_FILE_DRM_NBR_OF_HOURS_ONE, 
+                                  R_FILE_DRM_NBR_OF_HOURS_ONE_FINAL,
+                                  R_FILE_DRM_NBR_OF_HOURS_TWO_FOUR, 
+                                  R_FILE_DRM_NBR_OF_HOURS_FIVE_ZERO, 
+                                  value );
+                if (count)
+                    {
+                    valPtr.Append( KSpace );
+                    }
+
+                valPtr.Append(*value);
+                endTime -= hours; 
+                CleanupStack::PopAndDestroy( value ); 
+                count++;
+                }
+
+            // mins
+            TTimeIntervalMinutes minutes;
+            ret = endTime.MinutesFrom(currentTime,minutes);
+            if (ret == KErrNone && count < KTimeCount && minutes.Int())
+                {
+                AddSinglePartOfTimeL( minutes.Int(), 
+                                  R_FILE_DRM_NBR_OF_MINS_ONE,
+                                  R_FILE_DRM_NBR_OF_MINS_ONE_FINAL,
+                                  R_FILE_DRM_NBR_OF_MINS_TWO_FOUR, 
+                                  R_FILE_DRM_NBR_OF_MINS_FIVE_ZERO, 
+                                  value );
+                if (count)
+                    {
+                    valPtr.Append( KSpace );
+                    }
+
+                valPtr.Append(*value);
+                endTime -= minutes; 
+                CleanupStack::PopAndDestroy( value );
+                count++;
+                }
+            
+            // seconds
+            TTimeIntervalSeconds seconds;
+            ret = endTime.SecondsFrom(currentTime,seconds);
+            if (ret == KErrNone && count < KTimeCount && seconds.Int())
+                {
+                AddSinglePartOfTimeL( seconds.Int(), 
+                                  R_FILE_DRM_NBR_OF_SECS_ONE, 
+                                  R_FILE_DRM_NBR_OF_SECS_ONE_FINAL,
+                                  R_FILE_DRM_NBR_OF_SECS_TWO_FOUR, 
+                                  R_FILE_DRM_NBR_OF_SECS_FIVE_ZERO, 
+                                  value );
+
+                if (count)
+                    {
+                    valPtr.Append( KSpace );
+                    }
+
+                valPtr.Append(*value);
+                CleanupStack::PopAndDestroy( value ); 
+                count++;
+                }
+           
+            heading = StringLoader::LoadLC(R_FILE_DRM_UDL,*aRights);
+            LanguageSpecificNumberConversion(valPtr);
+            AddItemToListBoxL(*heading,valPtr,aItemArray);
+            CleanupStack::PopAndDestroy( lVal ); 
+            CleanupStack::PopAndDestroy( heading ); 
+            }
+            
+        }
+      
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::LanguageSpecificNumberConversion
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::LanguageSpecificNumberConversion( TDes& aText ) const
+    {
+    if ( AknTextUtils::DigitModeQuery( AknTextUtils::EDigitModeShownToUser ) )
+        {
+        AknTextUtils::DisplayTextLanguageSpecificNumberConversion( aText );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::FetchDrmDataL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::FetchDrmDataL( RFile& aFileHandle, 
+                                          CSvgtFileDetails* aFileDetails ) const
+    {
+   
+    CSVGTDrmHelper* myHelper = CSVGTDrmHelper::NewLC();
+    
+    myHelper->LoadUsageRigthsInfoL(aFileHandle);
+
+    if ( aFileDetails )
+        {
+        myHelper->GetUsageRightsStatus(aFileDetails->iDRMRightsStatus);
+      
+        // sending
+        aFileDetails->iDRMForwardLocked = !myHelper->SendingAllowed();
+            
+        if (aFileDetails->iDRMRightsStatus == ESVGTRestricted ||
+            aFileDetails->iDRMRightsStatus == ESVGTPreview ||
+            aFileDetails->iDRMRightsStatus == ESVGTExpired)
+            {    
+            // counts
+            TInt retCount = myHelper->GetCount(aFileDetails->iDRMCountsLeft);
+
+            if (retCount == KErrNone)
+                {
+                aFileDetails->iDRMExpireConstraint = ESVGTCount;
+                }
+            
+            // time
+            TInt retTime = myHelper->GetStartTime(aFileDetails->iDRMValidFrom); 
+            retTime = myHelper->GetEndTime(aFileDetails->iDRMValidUntil); 
+
+            if (retTime == KErrNone && retCount == KErrNone)
+                {
+                aFileDetails->iDRMExpireConstraint = ESVGTCountAndTime;
+                }
+            else 
+                {
+                if (retTime == KErrNone)
+                    {
+                    aFileDetails->iDRMExpireConstraint = ESVGTTime;
+                    }
+                }
+      
+             // interval    
+            if (myHelper->GetInterval(aFileDetails->iDRMInterval) == KErrNone)
+                {
+                aFileDetails->iDRMFileHasInterval = ETrue;
+                TTime from;
+                if (myHelper->GetIntervalStart(from) == KErrNone)
+                    {
+                    aFileDetails->iDRMIntervalActive = ETrue;
+                    // active from
+                    aFileDetails->iDRMValidFrom = from;
+                    // calculate rights end time
+                    aFileDetails->iDRMValidUntil = 
+                        aFileDetails->iDRMValidFrom + aFileDetails->iDRMInterval;
+                    }
+                else
+                    {
+                    aFileDetails->iDRMIntervalActive = EFalse;
+                    }
+                }
+            else
+                {
+                aFileDetails->iDRMFileHasInterval = EFalse;
+                aFileDetails->iDRMIntervalActive = EFalse;
+                }
+            }        
+        }
+    
+    // cleanup
+    CleanupStack::PopAndDestroy( myHelper );
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtFileViewDetailsDialog::AddSinglePartOfTimeL
+// -----------------------------------------------------------------------------
+//
+void CSvgtFileViewDetailsDialog::AddSinglePartOfTimeL( TInt aNumOfElements,
+                                                 TInt aResourceIdSingle,
+                                                 TInt aResourceIdOneFinal, 
+                                                 TInt aResourceIdTwoFour,
+                                                 TInt aResourceIdFiveZero, 
+                                                 HBufC*& aStrings ) const
+    {
+    TInt finalOneDigit = aNumOfElements % KOneDigit;
+    TInt finalTwoDigits = aNumOfElements % KTwoDigits;
+
+    if ( aNumOfElements == 1 )
+        {
+        aStrings = StringLoader::LoadLC( aResourceIdSingle);
+        }
+    else if ( finalOneDigit == KOneDigit1 && finalTwoDigits != KTwoDigit11 )
+        {
+        // Used for period of years ending with 1 from 21 (21, 31, 41, etc.)
+        aStrings = StringLoader::LoadLC( aResourceIdOneFinal, aNumOfElements );
+        }
+    else if ( finalOneDigit == 0 || 
+            ( finalOneDigit >= KOneDigit5 && finalOneDigit <= KOneDigit9 ) ||
+            ( finalTwoDigits >= KTwoDigit11 && finalTwoDigits <= KTwoDigit14 ) )
+        {
+        // Used for period of minutes ending from 5 to 0 plus range between 11 
+        // and 14 (5-20, 25-30, 35-40, 45-50, 53-59)
+        aStrings = StringLoader::LoadLC( aResourceIdFiveZero, aNumOfElements );
+        }
+    else
+        {
+        // Used for period of minutes ending from 2 to 4, excluded 12-14 (2-4,
+        // 22-24, 32-34, 42-44, 52-54)        
+        aStrings = StringLoader::LoadLC( aResourceIdTwoFour, aNumOfElements );
+        }     
+    }
+
+void CSvgtFileViewDetailsDialog::AddResourceFileToEnvL() 
+    {
+    TFileName resFileName;
+    Dll::FileName( resFileName ); // get dll path
+    TDriveName drive( TParsePtrC( resFileName ).Drive( ) ); // solve drive
+    resFileName.Zero();
+    resFileName.Append( drive );
+    resFileName.Append( KDC_RESOURCE_FILES_DIR );
+    resFileName.Append( KResourceFileName );
+
+    iEnv = CEikonEnv::Static();
+    BaflUtils::NearestLanguageFile(iEnv->FsSession(), resFileName); //for localization
+    iEnv->AddResourceFileL(resFileName);
+    RResourceFile resFile;
+    CleanupClosePushL(resFile);
+    resFile.OpenL(iEnv->FsSession(), resFileName);
+    resFile.ConfirmSignatureL();
+    iResOffset = resFile.Offset();
+    CleanupStack::PopAndDestroy(&resFile); //resFile
+    }
+
+    
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlInc/SVGTDrmHelper.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,261 @@
+/*
+* Copyright (c) 2004,2005 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:  DRM helper for svg files.
+*
+*/
+
+
+
+#ifndef SVGTDRMHELPER_H
+#define SVGTDRMHELPER_H
+
+// INCLUDES
+#include <e32std.h>
+
+// DATA TYPES
+enum TSVGTRightsStatus
+    {
+    ESVGTFull,
+    ESVGTMissing,
+    ESVGTRestricted,
+    ESVGTExpired,
+    ESVGTPreview
+    };
+
+enum TSVGTExpireConstraint
+    {
+    ESVGTNone,
+    ESVGTCount,
+    ESVGTTime,
+    ESVGTCountAndTime
+    };
+
+// CONSTANTS
+const TInt KSVGTRightsAboutToExpire = -40000;
+
+// FORWARD DECLARATIONS
+class CDRMHelper;
+class CDRMHelperRightsConstraints;
+class MDesCArray;
+class CCoeEnv;
+
+// CLASS DECLARATION
+
+/**
+*  DRM helper for SVG files.
+*
+*  @lib SVGTUIControl.dll
+*  @since 3.0
+*/
+class CSVGTDrmHelper : public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.       
+        */
+        static CSVGTDrmHelper* NewL();
+        
+        /**
+        * Two-phased constructor.       
+        */
+        static CSVGTDrmHelper* NewLC();   
+                
+        /**
+        * Destructor.
+        */
+        virtual ~CSVGTDrmHelper();
+
+    public: // New functions
+    
+
+        /**
+        * This Function checks whether the file has preview rights.
+        * @since 3.0
+        * @param aFileHandle File handle for which usage rights info is loaded.
+        * @return True if the file has only preview rights
+        *         False if not.
+        */
+        TBool IsPreviewL( RFile& aFileHandle );
+       
+        /**
+        * This Function checks the rights associated with the file.
+        * @since 3.0
+        * @param aFileHandle File handle for which usage rights is checked.
+        * @return Button code
+        */
+        TInt CheckRightsAmountL( RFile& aFileHandle );
+        
+
+        /**
+        * This Function gets the drm details needed for thumbnail generation.
+        * @since 3.0
+        * @param aFileHandle File handle for which usage rights info is loaded.
+        * @param aRightsValid True if the rights are valid
+        * @param aIsSeparateDeliveryNS True if the file is a separate delivery 
+        *               drm file non-supersitributable
+        * @param aIsProtected True if the file is protected
+        */
+        void GetDrmDetailsL( RFile& aFileHandle,
+                             TBool& aRightsValid,
+                             TBool& aIsSeparateDeliveryNS, 
+                             TBool& aIsProtected );
+                 
+    
+        /**
+        * Loads usage rights information for a svg file using 
+        * CDRMHelper. The loaded constraint is CContentAccess::EPlay.
+        * @since 3.0
+        * @param aFileHandle File handle for which usage rights info is loaded.
+        */
+        void LoadUsageRigthsInfoL( RFile& aFileHandle );
+
+
+        /**
+        * Gets usage rigths status.
+        * @since 3.0
+        * @param aStatus:
+        *           ESVGTFull:        Full rights
+        *           ESVGTMissing:     Rights missing
+        *           ESVGTRestricted:  Restricted rights
+        *           ESVGTExpired:     Expired rights (could be also future rights)
+        *           ESVGTPreview:     Preview rights
+        */
+        void GetUsageRightsStatus( TSVGTRightsStatus& aStatus );
+
+        /**
+        * Checks if the usage rigths are about to expire. If they are, returns 
+        * info about the rights contraints that are about to expire.
+        * @since 3.0
+        * @param aAboutToExpire Boolean telling if the rigths are about to
+        *                       expire or not.
+        * @param aConstraint Constraint that is about to expire:
+        *                    ESVGTCount:          Usage count about to expire
+        *                    ESVGTTime:           Usage time about to expire
+        *                    ESVGTCountAndTime:   Usage count and time about to
+        *                                       expire
+        * @param aCountLeft Usage counts left (only if count is about to expire)
+        * @param aDaysLeft Usage days left (only if time is about to expire)
+        */
+        void GetExpireStatus( TBool& aAboutToExpire,
+                                      TSVGTExpireConstraint& aConstraint,
+                                      TInt& aCountLeft,
+                                      TInt& aDaysLeft );
+
+        /**
+        * Checks if sending of the file is allowed.
+        * @since 3.0
+        * @return ETrue:    Sending is allowed.
+        *         EFalse:   Sending is not allowed.
+        */
+        TBool SendingAllowed() const;
+
+        /**
+        * Gets usage count.
+        * @since 3.0
+        * @param aCount Counts left.
+        * @return Error code:
+        *           KErrNone:       Count returned.
+        *           KErrNotFound:   Object doesn't have count based rights.
+        *           KErrNotReady:   Usage rights info not loaded.
+        */
+        TInt GetCount( TUint32& aCount );
+
+        /**
+        * Gets start time of time based rights.
+        * @since 3.0
+        * @param aStartTime Start time.
+        * @return Error code:
+        *           KErrNone:       Start time returned.
+        *           KErrNotFound:   Object doesn't have time based rights.
+        *           KErrNotReady:   Usage rights info not loaded.
+        */
+        TInt GetStartTime( TTime& aStartTime );
+
+        /**
+        * Gets end time of time based rights.
+        * @since 3.0
+        * @param aEndTime End time.
+        * @return Error code:
+        *           KErrNone:       End time returned.
+        *           KErrNotFound:   Object doesn't have time based rights.
+        *           KErrNotReady:   Usage rights info not loaded.
+        */
+        TInt GetEndTime( TTime& aEndTime );
+
+        /**
+        * Gets interval time constraint.
+        * @since 3.0
+        * @param aInterval Interval.
+        * @return Error code:
+        *           KErrNone:       Interval returned.
+        *           KErrNotFound:   Object doesn't have interval constraint.
+        *           KErrNotReady:   Usage rights info not loaded.
+        */
+        TInt GetInterval( TTimeIntervalSeconds& aInterval );
+
+        /**
+        * Gets start time of activated interval constraint.
+        * @since 3.0
+        * @param aStartTime Start time.
+        * @return Error code:
+        *           KErrNone:       Start time returned.
+        *           KErrNotFound:   Interval has not been started yet.
+        *           KErrNotReady:   Usage rights info not loaded.
+        */
+        TInt GetIntervalStart( TTime& aStartTime );
+                
+        /**
+        * Provides info about files DRM protection status.
+        * @since 3.0
+        * @return ETrue:  The file is DRM protected.
+        *         EFalse: The file is not DRM protected.
+        */
+        TBool IsProtected() const;
+
+        /**
+        * Checks if given content can be set as an automated content.
+        * @since 3.0
+        * @return  Boolean.
+        */
+        TBool CanSetAutomated() const;
+
+    private: // Private contructors
+
+        /**
+        * C++ default constructor.
+        */
+        CSVGTDrmHelper();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();        
+
+    private:    // Data
+        CDRMHelper* iDrmHelper;
+        CDRMHelperRightsConstraints* iRightsConstraints;
+        CCoeEnv* iEnv;
+        
+        TBool iProtected;
+        TBool iExpired;
+        TBool iSendingAllowed;
+        TBool iCanSetAutomated;       
+    //flag to check for SD protection
+    	TInt iIsSeparateDelivery;
+    };
+
+#endif      // SVGTDRMHELPER_H  
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlInc/SvgtController.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2005 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:  SVGT Controller implements the active objects for the 
+*                progressive rendering feature(Redraw, Thread Exit)
+*
+*/
+
+
+//SvgtController.h
+
+#ifndef SVGTCONTROLLER_H
+#define SVGTCONTROLLER_H
+
+#include <e32base.h>
+#include <f32file.h>
+
+const TInt KAnimationLength = 10;
+const TInt KAnimatioBufferLength = 20;
+class CSVGTCustControl;
+class CAknNavigationDecorator;
+class CEikonEnv;
+
+/**
+*  CSvgtThreadController is a Active Object (CActive) used to
+*  notify thread death event to the main thread to do the post load operations
+*
+*  @lib SVGTUIControl.lib
+*  @since 3.1
+*/
+
+class CSvgtThreadController : public CActive
+    {
+    public:
+        /**
+        * Two phase constructor
+        * @since 3.1
+        * @param aEngine Engine object 
+        * @param aCustControl
+        * @return CSvgtThreadController*
+        */
+        static CSvgtThreadController* NewL(CSVGTCustControl* aCustControl);
+
+        /**
+        * Two phase constructor which pushes the object on cleanup stack
+        * @since 3.1
+        * @param aEngine Engine object 
+        * @param aCustControl
+        * @return CSvgtThreadController*
+        */
+        static CSvgtThreadController* NewLC(CSVGTCustControl* aCustControl);
+
+        /**
+        * Destructor
+        * @since 3.1
+        */
+        ~CSvgtThreadController();
+        
+        /**
+        * Makes it active to get notify on thread death
+        * @since 3.1
+        * @param aThread Main thread object 
+        */
+        void IssueThreadMonitorRequest(const RThread& aThread);
+
+        /**
+        * Stops the thread execution
+        * @since 3.1
+        * @param aThread Main thread object 
+        */
+        void StopThreadExecution(const RThread& aThread);
+        
+    private:
+        /**
+        * Cancels all the request
+        * @since 3.1
+        * @see CActive
+        */
+        void DoCancel();
+
+        /**
+        * Handles an active object's request completion event.
+        * @since 3.1
+        * @see CActive
+        */
+        void RunL();
+
+       /**
+        * Parameterized constructor
+        * @since 3.1
+        * @param aEngine Engine object 
+        * @param aCustControl
+        * @param aMainThread
+        */
+        CSvgtThreadController(CSVGTCustControl* aCustControl);
+        /**
+        * Two phase constructor
+        * @since 3.1
+        */
+        void ConstructL();
+
+        /**
+        * This fuction does the loading animation
+        * @since 3.1
+        */
+        void DoLoadAnimationL();
+        
+        /**
+        * Callback fuction for loading animation
+        * @since 3.1
+        * @param aThreadController Stores the object of type CSvgtThreadController
+        */
+        static TInt LoadAnimationCallBack(TAny* aThreadController);
+        
+        /**
+        * Clears the navi pane indicator when the loading animation gets over
+        * @since 3.1
+        * @param aThreadController Stores the object of type CSvgtThreadController
+        */
+        void ClearNaviPaneDecorator();
+        
+    private:    //data members
+        // Custom control object
+        CSVGTCustControl* iCustControl;
+        
+        // Periodic timer to do loading animation
+        CPeriodic* iLoadAnimator;
+        
+        // Counts the number steps in the animation
+        TInt iCount;
+        
+        // Stores the text to display in the context bar while loading animation
+        TBuf<KAnimatioBufferLength> iAnimationText;
+        
+        // Stores the the navigation pane decorator
+        CAknNavigationDecorator* iNaviDecorator;
+        
+        // Stores the main thread id
+        TThreadId iMainThread;
+       
+        // Application enviornment
+        CEikonEnv* iEikEnv;
+    };
+
+#endif //SVGTCONTROLLER_H
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlInc/SvgtDecoratorControl.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 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:  Used to decorate the control on the navi pane
+*
+*/
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// -----> CSvgtDecoratorControl(definition)
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef SVGTDECORATORCONTROL_H
+#define SVGTDECORATORCONTROL_H
+
+
+#include <eikbctrl.h>
+#include <barsread.h>
+
+class CAknStylusPopUpMenu;
+class CAknNavigationControlContainer;
+class CEikImage;
+class CEikLabel;
+class CGulIcon;
+
+enum TSvgtDecoratorControlId
+    {
+    EMuteImageCtrlId,
+    ETextCtrlId,
+    ELastCtrl
+    };
+    
+class CSvgtDecoratorControl : public CEikBorderedControl
+	{
+public: //class methods
+
+    /**
+    * default constructor.
+    */
+	CSvgtDecoratorControl();
+
+    /**
+    * Twon phase constructor.
+    */
+	void ConstructL();
+	
+    /**
+    * Destructor.
+    */
+	~CSvgtDecoratorControl();
+
+    /**
+    * Sets the visibility of the mute icon in the navi pane.
+    * @since 3.2
+    * @param aVolumeMuted whether to show the mute icon in the navi pane (True/False);
+    */
+    void ShowVolumeMutedIcon( TBool aVolumeMuted );
+
+    /**
+    * Sets the progress text in the navi pane.
+    * @since 3.2
+    * @param aText Progress text;
+    */
+    void SetTextL( const TDesC& aText);
+    
+protected:    //From CCoeControl
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+private:    //From CCoeControl
+	void         Draw(const TRect& aRect) const;
+	
+    TInt         CountComponentControls() const;
+
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	
+	void         SizeChanged();
+
+private:
+    CEikImage* iImg;
+    CEikLabel* iLabel;
+    CGulIcon* iMutedIcon;
+    CAknNavigationControlContainer* iNaviPane;
+	};
+
+
+#endif //SVGTDECORATORCONTROL_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlInc/SvgtEvent.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+
+/*
+************************************************************************************
+*   SvgtEvent 
+************************************************************************************
+*/
+
+
+#ifndef SVGTEVENT_H
+#define SVGTEVENT_H
+
+#include <e32base.h>
+
+class CSvgtEvent : public CBase
+    {
+    public: //Data
+    enum TSvgtEventType
+        {
+        ESvgtEventEmbededImage,
+        ESvgtEventFetchImage,
+        ESvgtEventLinkActivated,
+        ESvgtEventLinkActivatedWithShow,
+        ESvgtEventRedraw,
+        ESvgtEventInvalid
+        };
+        
+    public: //class methods
+        CSvgtEvent(TSvgtEventType aEventType, const TDesC& aUri);
+        ~CSvgtEvent();
+        TPtrC ImageUri() const;
+        TSvgtEventType EventType() const;
+    private:
+        HBufC* iUri;
+        TSvgtEventType iEventType;
+    };
+
+class CSvgtEventEmbededImage : public CSvgtEvent
+    {
+    public:
+        CSvgtEventEmbededImage( const TDesC& aUri);
+        
+    };
+    
+class CSvgtEventFetchImage : public CSvgtEvent
+    {
+    public:
+        CSvgtEventFetchImage( const TDesC& aUri);
+    };
+
+class CSvgtEventLinkActivated : public CSvgtEvent
+    {
+    public:
+        CSvgtEventLinkActivated( const TDesC& aUri);
+
+    };
+
+class CSvgtEventLinkActivatedWithShow : public CSvgtEvent
+    {
+    public:
+        CSvgtEventLinkActivatedWithShow( const TDesC& aUri, const TDesC& aShow);
+        TPtrC Show() const;
+        
+    private:
+        HBufC* iShow;
+    };
+
+class CSvgtEventRedraw : public CSvgtEvent
+    {
+    public:
+        CSvgtEventRedraw();
+    private:
+        using CSvgtEvent::ImageUri;
+    };
+    
+#endif //SVGTEVENT_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlInc/SvgtEventHandlerAO.h	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 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:  This header file defines the  CSvgtEventHandlerAO class 
+*
+*/
+
+
+#ifndef SVGTEVENTHANDLERAO_H
+#define SVGTEVENTHANDLERAO_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32cmn.h>
+#include "SVGTCustControl.h"
+
+class MSvgtAppObserver;
+class CSVGTAppObserverUtil;
+class CSvgtEvent;
+
+_LIT(KSvgTagName, "svg");
+_LIT(KDataTagName, "data:");
+
+/**
+*       This class handles the event list & process the events 
+*       while progressive rendering
+*/
+class CSvgtEventHandlerAO : public CActive
+    {
+    public:
+        /**
+        * Two phase constructor
+        * @since 3.1
+        * @param aAppObserverUtil AppOberserverUtil Object
+        * @param aEngine Engine object 
+        * @param aCustControl
+        * @return CSvgtEventHandlerAO*
+        */
+        static CSvgtEventHandlerAO* NewL(MSvgtAppObserver* aAppObserverUtil, 
+                                            CSVGTCustControl* aCustControl,
+                                            const TThreadId aMainThreadId );
+
+        /**
+        *  Destructor
+        */
+        virtual ~CSvgtEventHandlerAO();
+
+        /**
+        * It adds the event (except redraw event) to the event queue.
+        * @since 3.1
+        * @param aEvent Event Object
+        * @return TBool
+        */
+        TBool AddEventToList(CSvgtEvent* aEvent);
+
+        /**
+        * It adds the redraw event to the event queue.
+        * @since 3.1
+        * @param aForceAdd Decides whether to add the redraw event forcefully
+        * @return TBool
+        */
+        TBool AddRedrawEventToList( const TBool aForceAdd = EFalse);
+        
+        /**
+        * It make the request complete.
+        * @since 3.1
+        * @param aError Error code for the service provided
+        * @return none
+        */
+        void MakeRequestComplete( TInt aError );
+        
+        /**
+        * It indicates that document is document loading completed.
+        * @since 3.1
+        * @return none
+        */
+        void SetDocumentComplete();
+        
+    private:
+        /**
+        * Handles an active object's request completion event.
+        * @since 3.1
+        * @see CActive
+        */
+        void RunL();
+        
+        /**
+        * Cancels all the request
+        * @since 3.1
+        * @see CActive
+        */
+        void DoCancel();
+
+        /**
+        * Handles a leave occurring in the request completion event handler RunL().
+        * @since 3.1
+        * @see CActive
+        */
+        TInt RunError( TInt aError );
+
+        /**
+        * It determines whether the time elapsed or not.
+        * @since 3.1
+        * @return TBool
+        */
+        TBool IsRedrawTimeElapsed();
+
+        /**
+        * Terminates the active object
+        * @since 3.1
+        */
+        void DoTerminate();
+        
+    private:    //class methods
+        /**
+        * constructor
+        */
+        CSvgtEventHandlerAO(MSvgtAppObserver* aAppObserverUtil, 
+                                CSVGTCustControl* aCustControl, 
+                                const TThreadId aMainThreadId );
+        /**
+        * Two phase constructor
+        * @since 3.1
+        */
+        void ConstructL();
+
+    private:    //Data members
+
+        CSVGTAppObserverUtil* iAppObserverUtil;
+        CSvgEngineInterfaceImpl* iSvgEngine;
+        CSVGTCustControl* iCustControl;
+        RPointerArray<CSvgtEvent>   iEventList;
+
+        // Stores the previous time stamp
+        TTime iPreviousRedrawClock;
+        TThreadId iMainThreadId;
+        TBool iIsDocumentComplete;
+        
+        TInt iStepCount;
+        TInt iSvgTimeBetweenRedraw;
+        // For Synchronising RequestComplete() calls
+        RCriticalSection iCritSection;
+    };
+
+#endif  //SVGTEVENTHANDLERAO_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTCustControl.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,4850 @@
+/*
+* Copyright (c) 2004,2005 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:  This file implements the SVGT Custom Control which
+*                is used to display SVGT content
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <aknnotewrappers.h>
+#include <AknWaitNoteWrapper.h>
+#include <AknIconUtils.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknsConstants.h>
+#include <AknsSkinInstance.h>
+#include <AknsUtils.h>
+#include <AknWaitDialog.h>
+#include <bitdev.h>
+#include <StringLoader.h>
+#include <DRMHelper.h>
+#include <eikenv.h> //CEikonEnv
+#include <e32math.h>
+#include <uri16.h>
+#include <ctsydomainpskeys.h> // for call handling
+#include <data_caging_path_literals.hrh>
+#include <gdi.h>
+#include <SVGTUIControl.rsg>
+#include <svgtuicontrol.mbg>
+// User Includes
+#include "SVGTUIControlDbgFlags.hrh"
+#include "SVGTAppObserver.h"
+#include "SVGTCustControl.h"
+#include "SVGTUIDialog.hrh"
+
+#include "SvgtController.h"
+#include "SvgtApplicationExitObserver.h"
+#include "SvgtEventHandlerAO.h"
+#include "SvgtEvent.h"
+#include <svgtfileviewdetails.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <avkon.mbg>
+
+#ifdef RD_SVGT_AUDIO_SUPPORT
+#include <AknVolumePopup.h>
+#include<remconinterfaceselector.h>     //for CRemConInterfaceSelector
+#include<remconcoreapitarget.h>         //for CRemConCoreApiTarget
+
+#endif //RD_SVGT_AUDIO_SUPPORT
+// Constants
+
+// Panning Constants
+// KSccPanNumPixelsX - Amount of Pixels to Pan in X Direction when Pan is
+//                     performed once.
+// KSccPanNumPixelsY - Amount of Pixels to Pan in Y Direction when Pan is
+//                     performed once.
+const TInt KSccPanNumPixelsX = 30;
+const TInt KSccPanNumPixelsY = 30;
+
+// Pointer Constants
+// When pointer is moved in a particular direction, the movement also
+// acceleration. The below constants define the delta for the acceleration.
+// KSccCursorMinDeltaX - For X Direciton
+// KSccCursorMinDeltaY - For Y Direciton
+const TInt KSccCursorMinDeltaX = 5;
+const TInt KSccCursorMinDeltaY = 5;
+
+// Zoom Constants
+// KSccZoomInFactor - Indicates zoom factor to use while zooming in.
+//                    This Value should be > 1.0
+// KSccZoomOutFactor - Indicates zoom factor to use while zooming out.
+//                     This value should be > 0 and < 1.0
+const TReal32 KSccZoomInFactor = 2.0; // 2X Zoom In
+const TReal32 KSccZoomOutFactor = 0.5;// 2X Zoom Out
+
+// Key Constants
+const TInt KSccZoomInKey = ENumberKey5;//'5';
+const TInt KSccZoomOutKey =ENumberKey0; //'0';
+
+// Number of milli seconds per second
+const TUint32 KSccNumMSecPerSec = 1000;
+
+
+
+// Time in microsecs after which Pointer Inactivity should be declared
+const TUint KSccPointerHideTimerStartAfter = 15000000;
+
+// Time in microsecs per second
+const TInt KSccOneSecond = 1000000;
+
+// General Constants
+const TInt KSccConstMinusOne = -1;
+const TInt KSccConstZero = 0;
+const TInt KSccConstOne = 1;
+const TInt KSccConstTwo = 2;
+
+// set the name of the multi-bitmap file containing the bitmaps
+_LIT( KSccIconFile,"Z:SVGTUIControl.mif" );
+
+// SMIL Fit Value
+_LIT( KSccSmilFitValue,"meet" );
+
+// Font Ids for use with Engine-Init
+const TInt KApacFontId = EApacPlain16;
+const TInt KLatintFontId = ELatinBold12;
+
+// Duration const returned by engine when indefinite animations are present
+const TUint KSccIndefiniteDur = 0xffffffff;
+
+
+// Interval between two consecutive timer ticks in microseconds.
+const TUint32 KSccProgIndTimerYieldDur = 100000;
+
+//constant for converting radians to degrees
+const TReal32 KDegreesToRadiansFactor = 0.01745329252;
+
+// Maximum length of text in a text element
+const TInt KSccMaxTextLength = 250;
+const TInt KBackLightTimeInterval = 9;
+const TInt KMaxEditorTextLength = 5120; 
+const TInt KEmbededImageTagLength = 5;
+const TInt KSchemaLength = 4;
+
+#ifdef RD_SCALABLE_UI_V2
+const TInt KInitRepeatInterval = 10000;
+#endif // RD_SCALABLE_UI_V2
+
+// Background colour which is used by engine before rendering as a base colour
+const TUint32 KSccArgbWhite = 0xffffffff;
+
+//TOUCH
+#ifdef RD_SVGT_AUDIO_SUPPORT
+const TInt KDefaultVolumeLevel = 3;   
+const TInt KMinVolume = 0;
+const TInt KMaxVolume = 10;
+#endif // RD_SVGT_AUDIO_SUPPORT
+//TOUCH
+#ifdef _DEBUG
+// Backlight Strings
+_LIT( KSccBacklightOnStr, "Backlight On" );
+_LIT( KSccBacklightOffStr, "Backlight Off" );
+#endif
+
+//Loading thread name
+_LIT(KSvgThread,"SvgThread");
+
+_LIT(KJpg,   ".jpg" );
+_LIT(KJpeg,  ".jpeg" );
+_LIT(KPng,   ".png" );
+_LIT(KBmp,   ".bmp" );
+_LIT(KSvg,   ".svg" );
+_LIT(KSvgz,  ".svgz" );
+
+_LIT( KWww, "www" );
+_LIT( KHttp, "http://");
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::CSVGTCustControl
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CSVGTCustControl::CSVGTCustControl(
+    RFile& aFileHandle, // File Handle of SVGT content
+    TBool aProgressiveRendering,
+    TInt aFlag ) :
+    // Animation State
+    iTotalNumerOfAnimation( KSccConstMinusOne ),
+    iAnimationStatus( ESvgNoAnimationsPresent ),
+    iAnimState( ESvgAnimStoppedState ),
+    iContentFileHandle( aFileHandle ),
+    // SVG Engine
+    iIsLoadingDone( EFalse ),
+    iFetchImageError( 0 ),
+    // Control State Variables
+    iZoomLevel( 0 ),
+    iIsLoopOn( EFalse ),
+    iIsFullScreenOn( EFalse ),
+    // Pointer Variables
+    iPointerDx( 0 ),
+    iPointerDy( 0 ),
+    iPointerX( 0 ),
+    iPointerY( 0 ),
+    // Current Match is invalid
+    iIsSearchStrValid( EFalse ),
+    iCurSearchMatchId( 0 ),
+    iNumAnimInProgress( 0 ),
+    iIsPointerDisplayed( ETrue ),                 
+    iFindTextHiColor( KRgbBlack ),               
+    iIgnorePointerKeyEvent( EFalse ),
+    iPointerType( ESvgPointerDefault ),
+    iEnableTextOps( ETrue ),
+    iIsTextEditOn( EFalse ),
+    iIsTextSelectOn(EFalse),
+    iProgressiveRendering(aProgressiveRendering),
+    iDisplayFlags( aFlag ),
+    iEventHandlerAO(NULL),
+    iThreadController(NULL),
+    iIsWaitNoteDisplayed(EFalse),
+#ifdef RD_SVGT_AUDIO_SUPPORT
+	iVolumeLevel(KDefaultVolumeLevel),
+	iPrevVolume(KDefaultVolumeLevel),
+#endif //RD_SVGT_AUDIO_SUPPORT
+    iIsTextChanged( EFalse ),
+    iViewerCommand(EFalse),
+    iPlayMSKLabel(EFalse),
+    iContextMenuActivated(EFalse),
+    iAElement(EFalse),
+    iScrollKey(EFalse),
+    iPointerDownAnimation(EFalse),
+    iInteractiveElementEnteredCnt(0),
+    iDownKeyOccurred(EFalse),
+    iIsVolumeMuted(EFalse),
+    iIsForeground(ETrue)
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ConstructL
+// Symbian 2nd phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ConstructL(
+    MSvgtAppObserver* aAppObs, // User Implementation of Mixin
+    MSVGTProgressBarDrawImpl* aPBDrawImpl , // Implementation for rendering
+                                            // progress indicator
+	MSVGTMSKImpl* aMSKImpl,		//Interface for MSK labelling                                           
+    MSvgtApplicationExitObserver* aExitObserver,
+    const CCoeControl* aParent )
+    {
+    iEngineInitialized = EFalse;
+    // Save the user parameters for later access.
+    iAppObserver = aAppObs;
+    iProgressBarDrawImpl = aPBDrawImpl;
+    iMSKImpl=aMSKImpl;
+    iExitObserver = aExitObserver;
+   
+    TRect lRect;
+    GetNormalScreenLayoutRect( lRect );
+    // Frame buffers creation
+    CreateBitmapsL( lRect.Size() );
+
+    // Icons(Pointer, Pan Ind) creation
+    CreateIconsL();
+
+#ifdef RD_SVGT_AUDIO_SUPPORT
+    iVolumePopup = CAknVolumePopup::NewL(NULL, ETrue);
+    iVolumePopup->SetObserver(this);
+    _LIT( KVolumePopupTitle, "Presentation volume");
+    iVolumePopup->SetTitleTextL(KVolumePopupTitle);
+    iVolumePopup->SetRange( KMinVolume, KMaxVolume);
+    iVolumePopup->SetValue( KDefaultVolumeLevel );
+    
+    
+    // Open a connection to receive Volume Key events.
+    iSelector = CRemConInterfaceSelector::NewL();
+    iInterfaceSelector = CRemConCoreApiTarget::NewL(*iSelector,*this);
+    TRAPD(err, iSelector->OpenTargetL());
+    if(err != KErrNone)
+    {
+		#ifdef _DEBUG
+		RDebug::Printf("Leave occured in OpenTargetL. Error code returned %d",err);
+		#endif
+    }
+    
+#endif  //RD_SVGT_AUDIO_SUPPORT
+
+    // DrmHelper to display save related query
+    iSvgDrmHelper = CSVGTDrmHelper::NewL();
+
+    // Check if it is a preview file
+    iPreviewMode = iSvgDrmHelper->IsPreviewL( iContentFileHandle );
+   
+    // Initialise the SVG engine.
+    InitializeEngineL();
+   
+   
+//############################################################
+    // Create the timer for Pointer Inactivity
+    if ( iDisplayFlags & ESvgDrawPointer )
+        {
+        iInactivityTimer = CSVGTPointerHideTimer::NewL( this );
+        iInactivityTimer->After( KSccPointerHideTimerStartAfter );
+        }
+
+    // Create the timer for blinking Pause
+    if ( iDisplayFlags & ESvgDrawPauseIndicator )
+        {
+
+        iBlinker = CPeriodic::NewL( CTimer::EPriorityStandard );
+        }   
+
+    // Create the timer for removal of info note
+    if ( iDisplayFlags & ESvgDisplayErrorNotes)
+        {
+        // Create the timer for removal of info note
+        iNoteRemoverTimer = CPeriodic::NewL( CTimer::EPriorityHigh );
+        }
+
+    if ( iDisplayFlags & ESvgDisplayErrorNotes )
+        {
+        // Create instance of DRM Helper for checking rights for content   
+        iSvgDrmHelper->CheckRightsAmountL( iContentFileHandle );
+        }
+   
+    //Initialize the backlight time to current time
+    iPreviousBackLightTimeStamp.HomeTime();
+    if(iProgressiveRendering)
+        {
+        iEventHandlerAO = CSvgtEventHandlerAO::NewL( aAppObs, this,
+RThread().Id());
+        
+        iThreadController = CSvgtThreadController::NewL(this);
+        //Separate thread is created to load the content
+        // set up parameters to thread generate thread, leave if fails
+        TInt result = iMainThread.Create( KSvgThread,
+                                      ( TThreadFunction )LoadSvgContent,
+                                      KDefaultStackSize,
+                                      NULL, this, EOwnerProcess );
+        User::LeaveIfError( result );
+        // log on to thread & requests notification of thread completion
+        iThreadController->IssueThreadMonitorRequest( iMainThread );
+
+        // give thread low priority
+        iMainThread.SetPriority( EPriorityMuchLess );
+        // resume thread (wake it up sometime after this function returns)
+        iMainThread.Resume();
+        }
+    else
+        {
+        // Start displaying wait note
+        LaunchWaitNoteL( R_QTN_SVGT_WAITING_OPENING );
+   
+        // Load the SVGT content
+        LoadContentL( iContentFileHandle );
+
+        // Dismiss the wait note
+        DismissWaitNote();
+
+        TInt lLoadErr = DoHandleLoadingThreadError();
+        if ( lLoadErr != KErrNone )
+            {
+            if ( lLoadErr != KErrNoMemory )
+                {
+                // All errors other than memory failure related are
+                // ignored.
+                lLoadErr = KErrNone;
+                }
+            User::Leave( lLoadErr );   
+            }
+       
+        // Do the post load functionality
+        DoPostLoadFuncL();   
+        }
+    if ( aParent && (iDisplayFlags & ESvgWindowOwning ))
+        {
+        CreateWindowL( aParent );
+        }
+//############################################################
+    // Set the windows size
+    SetRect( lRect );
+
+    // Activate the window, which makes it ready to be drawn
+    ActivateL();   
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::NewL
+// Factory function for creating CSVGTCustControl objects.
+// Returns: CSVGTCustControl* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSVGTCustControl* CSVGTCustControl::NewL(
+    RFile& aFileHandle,         // File Handle for the content
+    MSvgtAppObserver* aAppObs,  // User Implementation of Mixin
+    MSVGTProgressBarDrawImpl* aPBDrawImpl , // Implementation for rendering
+                                            // progress indicator
+	MSVGTMSKImpl* aMSKImpl,		//Interface for MSK labelling                                          
+    MSvgtApplicationExitObserver* aExitObserver,
+    TBool aProgressiveRendering,
+    const CCoeControl* aParent,                                           
+    TInt aDisplayFlag )
+    {
+    CSVGTCustControl* self = CSVGTCustControl::NewLC( aFileHandle,
+                                                      aAppObs,
+                                                      aPBDrawImpl,
+                                                      aMSKImpl,
+                                                      aExitObserver,
+                                                      aProgressiveRendering,
+                                                      aParent,
+                                                      aDisplayFlag );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::NewLC
+// Factory function for creating CSVGTCustControl objects.
+// Returns: CSVGTCustControl* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSVGTCustControl* CSVGTCustControl::NewLC(
+    RFile& aFileHandle,         // File handle for the content
+    MSvgtAppObserver* aAppObs , // User Implementation of Mixin
+    MSVGTProgressBarDrawImpl* aPBDrawImpl , // Implementation for rendering
+                                            // progress indicator
+	MSVGTMSKImpl* aMSKImpl,		//Interface for MSK labelling                                            
+    MSvgtApplicationExitObserver* aExitObserver,
+    TBool aProgressiveRendering,
+    const CCoeControl* aParent,                                           
+    TInt aDisplayFlag )
+    {
+    CSVGTCustControl* self = new ( ELeave ) CSVGTCustControl( aFileHandle,
+                                                             
+aProgressiveRendering,
+                                                              aDisplayFlag );
+    CleanupStack::PushL( self );
+    self->ConstructL( aAppObs, aPBDrawImpl ,aMSKImpl, aExitObserver, aParent );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::~CSVGTCustControl
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSVGTCustControl::~CSVGTCustControl()
+    {
+    
+#ifdef RD_SVGT_AUDIO_SUPPORT
+    // if non volume key is pressed <br>
+    if(iVolumePopup)
+        {
+        iVolumePopup->CloseVolumePopup();
+        delete iVolumePopup;
+        iVolumePopup=NULL;
+        }
+    if(iSelector)
+        {
+        delete iSelector;
+        iInterfaceSelector=NULL;
+        iSelector=NULL; //iSelector has been deleted by "delete iInterfaceSelector"
+        }
+    
+#endif //RD_SVGT_AUDIO_SUPPORT       
+
+    if(iProgressiveRendering)
+        {
+        TInt count = 0;
+        if(iSvgModule)
+            {
+            if ( iSvgModule->IsLoading() )
+                {
+                iSvgModule->CancelLoad();
+                do
+                    {
+                    User::After( 10 * 1000 ); // milliseconds
+                    }while ( iSvgModule->IsLoading() && count++ < 100 );
+                }
+            }
+
+        if(iThreadController)
+            {
+            iThreadController->StopThreadExecution(iMainThread);
+            }
+       
+        iMainThread.Kill(KErrNone);
+        iMainThread.Close();
+
+        delete iEventHandlerAO;
+       
+        delete iThreadController;
+        }
+       
+    // Hyperlink Handler
+    if ( iSvgModule )
+        {
+        iSvgModule->RemoveHyperlinkListener( 
+        	static_cast< MSvgHyperlinkListener*> ( this ) );
+        iSvgModule->RemoveListener( static_cast<MSvgLoadingListener*>(this),
+                                                ESvgLoadingListener);
+        iSvgModule->RemoveListener( static_cast<MSvgLoadingListener*>(this),
+                                                ESvgHyperlinkListener);
+        iSvgModule->RemoveListener( static_cast<MSvgInteractiveElementListener*>(this), ESvgInteractiveElementListener);
+        }
+         
+    // SVG Engine
+    delete iSvgModule;
+   
+    // Free the icons
+    FreeIcons();
+   
+    // Screen Bitmaps + Masks
+    delete iSVGTBitMap;
+    delete iSVGTBitMapMask;
+   
+    // delete SVG drmHelper
+    delete iSvgDrmHelper;
+
+   
+   // Delete the arrays
+   iBoundBoxArray.Close();
+   iFoundTextArray.Close();
+   iTextElemIdArray.Close();
+
+    // Reset App Observer
+    iAppObserver = NULL;
+   
+    // Reset Progress Bar Draw Implementation Callback
+    iProgressBarDrawImpl = NULL;
+    // Current Match is invalid
+    iIsSearchStrValid = EFalse;
+    iCurSearchMatchId = KSccConstZero;
+
+    // Backlight Timer
+
+    // Progress Indicator Timer
+    delete iProgressBarTimer;
+        
+    // Pointer Inactivity Hide Timer
+    delete iInactivityTimer;
+
+    // Pause Blink Timer
+    delete iBlinker;
+   
+    // Framebuffer  Bitmap
+    delete iSVGTFrameBufBitMap;
+   
+    // Framebuffer Bitmap Context
+    delete iSVGTFrameBufContext;
+   
+    // Framebuffer Bitmap Device
+    delete iSVGTFrameBufDevice;
+   
+    // Delete the wait dialog
+    delete iWaitDialog;
+   
+    // Delete the info note
+    delete iInfoNote;
+   
+    // Delete the info note remover timer
+    delete iNoteRemoverTimer;
+   
+    // Close the System RProperty
+    iSystemState.Close(); 
+   
+    // Reset the loading thread error
+    iLoadingThreadError = NULL;
+   
+    // Reset the exit observer
+    iExitObserver = NULL;
+   
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ProcessViewerCommandL
+// Process commands for handling SVGT content
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ProcessViewerCommandL( TInt aCommandId ) // Command ID
+                                                                // be processed
+    {
+   //Set the flag to indicate that the selection key is for options selection
+    iViewerCommand=ETrue;
+    switch( aCommandId )
+        {
+        case ESvgtDlgSaveCommand:
+            break;
+        case ESvgtDlgZoomInCommand:
+            // Perform Zoom operation
+            iSvgModule->Zoom( KSccZoomInFactor );
+            // Do a Redraw
+            iSvgModule->Redraw();
+            //dummy mouse move
+            iSvgModule->MouseMove( iPointerX, iPointerY );
+            iZoomLevel++;
+            UpdatePointer();
+            break;
+        case ESvgtDlgZoomOutCommand:
+            if ( iZoomLevel > KSccConstZero )
+                {
+                iZoomLevel--;
+                // Perform Zoom operation
+                iSvgModule->Zoom( KSccZoomOutFactor );
+                // Do a Redraw
+                iSvgModule->Redraw();
+                //dummy mouse move
+                iSvgModule->MouseMove( iPointerX, iPointerY );
+                UpdatePointer();
+                }
+            break;
+        case ESvgtDlgZoomOptimalCommand:
+            if ( iZoomLevel != KSccConstZero )
+                {
+                //This is to nullify only the zooming effect
+                //Other transformations(panning, rotation) won't be restored
+                TReal reducedFactor = 0.0;
+                Math::Pow(reducedFactor, KSccZoomOutFactor, iZoomLevel);
+                iZoomLevel = KSccConstZero;
+                iSvgModule->Zoom(reducedFactor);
+                iSvgModule->Redraw();
+                }
+            break;
+        case ESvgtDlgSelectTextCommand:
+            {
+            if ( iEnableTextOps )
+                {
+                HBufC* lStrPtr = HBufC::NewLC( KMaxEditorTextLength ); 
+                TPtr lPtr = lStrPtr->Des();
+               
+                if ( iCurrentTextElementId )
+                    {
+                    if ( iIsCurrentTextElement )
+                        {
+                        iSvgModule->GetTextForTextElement(
+                            iCurrentTextElementId,
+                            iIsTextEditOn,
+                            lPtr );
+                        }
+                        else
+                            {
+                            iSvgModule->GetTextForTextAreaElement(
+                                iCurrentTextElementId,
+                                iIsTextEditOn,
+                                lPtr );
+                            }
+                   
+                    DoTextSelectionL( lPtr );
+                    }
+                CleanupStack::PopAndDestroy( lStrPtr );                   
+                }
+            }
+            break;
+        case ESvgtDlgEditTextCommand:
+            {
+            if ( iEnableTextOps )
+                {
+                if ( iCurrentTextElementId )
+                    {
+                    HBufC* lStrPtr = HBufC::NewLC( KMaxEditorTextLength ); 
+                    TPtr lPtr = lStrPtr->Des();
+
+                    if ( iIsCurrentTextElement )
+                        {
+                        iSvgModule->GetTextForTextElement(
+                            iCurrentTextElementId,
+                            iIsTextEditOn,
+                            lPtr );
+                        }
+                        else
+                            {
+                            iSvgModule->GetTextForTextAreaElement(
+                                iCurrentTextElementId,
+                                iIsTextEditOn,
+                                lPtr );
+                            }
+                   
+                   
+                    DoTextEditingL( iIsCurrentTextElement,
+                                    iCurrentTextElementId,
+                                    lPtr );
+                    CleanupStack::PopAndDestroy( lStrPtr );                               
+                    }
+                }
+            }
+            break;
+        case ESvgtDlgPlayCommand:
+            ProcessPlayCmd();
+            break;
+        case ESvgtDlgPauseCommand:
+            ProcessPauseCmd();
+            break;
+        case ESvgtDlgStopCommand:
+            ProcessStopCmd();
+            break;
+//TOUCH SUPPORT START   
+#ifdef RD_SVGT_AUDIO_SUPPORT
+        case ESvgtDlgSetVolumeCommand:
+            {
+            // The volume popup will close itself after 1s 
+            // unless another call to ShowVolumePopupL() is made
+            if(iIsVolumeMuted)
+            	{
+            	// Set the volume of pop to zero if muted.
+            	iVolumePopup->SetValue( 0 );
+            	iVolumePopup->ShowVolumePopupL();
+            	}
+            else
+            	{
+            	// If not muted, then show the previous volume
+            	iVolumePopup->SetValue( iPrevVolume );
+            	iVolumePopup->ShowVolumePopupL(); 
+            	}
+            break;
+            }
+#endif //RD_SVGT_AUDIO_SUPPORT
+//TOUCH SUPPORT END
+        case ESvgtDlgLoopOnCommand:
+            if ( IsContentFinite() )
+                {
+                iIsLoopOn = ETrue;
+                }
+            break;
+        case ESvgtDlgLoopOffCommand:
+            if ( IsContentFinite() )
+                {
+                iIsLoopOn = EFalse;
+                }
+            break;
+        case ESvgtDlgFindTextCommand:
+            ProcessFindTextCmdL();
+            break;
+        case ESvgtDlgFullScreenCommand: // Fall Through
+        case ESvgtDlgNormalScreenCommand:
+            // No processing here. The Command is processed by the dialog.
+            // Dialog sets the size of the control, because of which
+            // SizeChanged() of control is called. This queries the
+            // layout rectangles and recreates the framebuffer.
+            break;
+        case ESvgtDlgViewDetailsCommand:
+            {
+            CSvgtFileViewDetailsDialog* fileDetailsDialog =
+                CSvgtFileViewDetailsDialog::NewL();
+            fileDetailsDialog->ExecuteLD( iContentFileHandle );
+
+            break;
+            }
+        case ESvgtDlgAngle90:
+            {
+            DoRotation( ERotationAngle90 );
+            }
+            break;
+        case ESvgtDlgAngle180:
+            {
+            DoRotation( ERotationAngle180 );
+            }
+            break;
+        case ESvgtDlgAngle270:
+            {
+            DoRotation( ERotationAngle270 );
+            }
+            break;
+        case ESvgtDlgHelpCommand:
+            break;
+        default:
+            break;
+        }
+    if(iMSKImpl && !iPreviewMode)
+    	{
+    	TRAP_IGNORE(SetMSKLabelL());
+    	}
+}
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::GetCurrentZoomLevel
+// Get function for current zoom level. Zoom level is the number of times the
+// user has zoomed in.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::GetCurrentZoomLevel(
+    TInt& aZoomLevel ) const  // Current Zoom Level
+    {
+    aZoomLevel = iZoomLevel;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::GetCurrentAnimState
+// Get function for current animation state
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::GetCurrentAnimState(
+    TSvgtViewerAnimStatus& aAnimState )  const // Playing/Paused/Stopped
+    {
+    aAnimState = iAnimState;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::GetCurrentFullScreenStatus
+// Get function for current viewing mode.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::GetCurrentFullScreenStatus(
+    TBool& aIsFullScreenOn )  const //  Full Screen( ETrue )/Normal( EFalse )
+    {
+    aIsFullScreenOn = iIsFullScreenOn;
+    }
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::GetCurrentLoopStatus
+// Get function for current loop mode.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::GetCurrentLoopStatus(
+    TBool& aIsLoopOn )  const //  Loop On( ETrue )/Loop Off( EFalse )
+    {
+    aIsLoopOn = iIsLoopOn;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::GetNormalScreenLayoutRect
+// Gets the normal screen layout rectangle for control from LAF.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::GetNormalScreenLayoutRect(
+    TRect& aRect )  const // Rectangle specifying extent of control
+    {
+    // Get parent client rect.
+    TRect myRect = iEikonEnv->EikAppUi()->ClientRect();
+   
+    if ( AknLayoutUtils::ScalableLayoutInterfaceAvailable() )
+        {
+        TAknLayoutRect lNormalLayoutRect;
+        lNormalLayoutRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::main_viewer_pane( 0 ) ); // Normal Screen
+        aRect = lNormalLayoutRect.Rect();
+        }
+        else
+            {
+            aRect = myRect;
+            }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::IsLoopAllowed
+// Indicates whether the Loop feature is allowed for the Control.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::IsLoopAllowed()  const
+    {
+    return ( IsContentFinite() );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::IsAnimationPresent
+//  Finds whether the content has any animations
+// @return TBool -  ETrue indicates content contains animations,
+//                  EFalse otherwise
+// -----------------------------------------------------------------------------
+//
+TBool  CSVGTCustControl::IsAnimationPresent() const
+    {
+    return ( iAnimationStatus != ESvgNoAnimationsPresent );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::IsContentFinite
+//  Finds whether the content is of finite duration.
+// @return TBool -  ETrue indicates Finite Duration,
+//                  EFalse otherwise
+// -----------------------------------------------------------------------------
+//
+TBool  CSVGTCustControl::IsContentFinite() const
+    {
+    // Does it not have any infinite repeat count
+    // animations
+    if ( ( iDuration != 0 ) &&
+        ( iDuration != KSccIndefiniteDur ) )
+        {
+        return ETrue;
+        }
+    // Content contains atlease one infinite animation
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::IsProcessDone
+// Returns ETrue if loading is done.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::IsProcessDone() const
+    {
+    return iIsLoadingDone;
+    }
+   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::SetCurrentFullScreenStatus
+// Set function for current viewing mode.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::SetCurrentFullScreenStatus(
+    TBool aIsFullScreenOn )  //  Full Screen( ETrue )/Normal( EFalse )
+    {
+    iIsFullScreenOn = aIsFullScreenOn;
+    }   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::HandleApplicationForegroundEvent
+// Does the handling of foreground event occurring.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::HandleApplicationForegroundEvent( TBool aForeground )
+    { 
+    iIsForeground = aForeground;
+    if ( !aForeground )
+        {
+        // Application going into background, pause presentation.
+        // We need to check first if there are any
+        // animations at all in this presentation and pause
+        // makes sense or not.
+        if ( IsAnimationPresent() && iAnimState == ESvgAnimPlayingState )
+            {
+            TRAPD(errProcessViewerCmd,
+                ProcessViewerCommandL( ESvgtDlgPauseCommand ));
+           
+            if ( errProcessViewerCmd != KErrNone )
+                {
+                // Error occurred , Stop Processing
+                return;
+                }
+               
+            if ( iBlinker->IsActive() )               
+                {
+                iBlinker->Cancel();
+                iPauseIconVisible = ETrue;
+                }
+            }
+        }
+    else
+        {
+        // Application coming into foreground.
+        // May need to start a flashing pause indicator so
+        // that user would come to know presentation is paused.
+        if ( IsAnimationPresent() && iAnimState == ESvgAnimPausedState )
+            {
+            if ( iPauseIconVisible )
+                {
+                ShowPauseIcon( ETrue );
+                }
+            }
+        // Perform a redraw to avoid corrupted bitmap
+        iSvgModule->Redraw();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::IsTextSelectOn
+// Indicates whether the "Select Text" menu item be displayed.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::IsTextSelectOn() const
+    {
+    return ( iIsTextSelectOn );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::IsTextEditOn
+// Indicates whether the "Edit Text" menu item be displayed.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::IsTextEditOn() const
+    {
+    return ( iIsTextEditOn );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::IsTextContentChanged
+// Indicates whether the text in the content was modified.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::IsTextContentChanged() const
+    {
+    return ( iIsTextChanged );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::SaveComplete
+// Used to perform any cleanup once save is complete.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::SaveComplete( const TInt aError )
+    {
+    if ( !aError )
+        {
+        iIsTextChanged = EFalse;
+       
+        //Upadate the MSK label once saving is done
+        if(iMSKImpl && !iPreviewMode)
+        	{
+        	TRAP_IGNORE(SetMSKLabelL());	
+        	}
+       
+        }
+    }
+   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::UpdateScreen
+// Implements MSvgRequestObserver::UpdateScreen.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::UpdateScreen()
+    {
+    if ( IsContentFinite() )
+        {
+        ResetBacklightTime();    
+        }
+    if ( iSVGTBitMapMask )
+        {
+        // Generate the mask for the bitmap
+        iSvgModule->GenerateMask( iSVGTBitMapMask );
+        }
+	iSvgModule->IsPanPossibleFourWay(iPanLt,iPanRt,iPanUp,iPanDn);
+       
+    // Find the new position of bounding boxes if
+    // Find Text was performed
+    if ( iIsSearchStrValid )
+        {
+        CalcFindTextBBox();
+        }
+    if ( iIsLoadingDone )
+        {
+        DrawNow();
+        }   
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ScriptCall
+// Implements MSvgRequestObserver::ScriptCall.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::ScriptCall( const TDesC& /*aScript*/,
+                                  CSvgElementImpl* /*aCallerElement*/ )
+    {
+    return EFalse;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::FetchImage
+// Implements MSvgRequestObserver::FetchImage. It executes asynchronously.
+// To fetch the image each time the KErrGeneral should be return.
+// -----------------------------------------------------------------------------
+//   
+TInt  CSVGTCustControl::FetchImage( const TDesC& aUri,
+             RFs& aSession, RFile& aFileHandle )
+    {
+
+    TInt ret = 0;
+
+    iImageFileType = ImageFileType(aUri);
+    if ( iAppObserver )
+        {
+        ret = iAppObserver->FetchImage( aUri, aSession, aFileHandle ) ;
+        }
+    else
+        {
+        return KErrNotFound;
+        }
+
+    if ( !iFetchImageError )
+        {
+        iFetchImageError = ret;
+        }
+
+    if(iImageFileType == ELocalImageFile)
+        {
+        return ret;
+        }
+    else
+        {
+        return KErrGeneral;
+        }
+    }
+
+TInt CSVGTCustControl::FetchFont( const TDesC& aUri ,
+                                    RFs& aSession , RFile& aFileHandle )
+    {
+    _LIT(KPath, "C:\\data\\images\\");
+    TBuf<KMaxPath> fileName;
+    fileName.Copy(KPath);
+    fileName.Append(aUri);
+    return aFileHandle.Open( aSession, fileName, EFileShareReadersOnly);
+    }
+	  
+// -----------------------------------------------------------------------------
+// CSVGTCustControl:: GetSmilFitValue
+// Implements the MSvgRequestObserver::GetSmilFitValue.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::GetSmilFitValue( TDes& aSmilValue )
+    {
+    aSmilValue.Copy( KSccSmilFitValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::UpdatePresentation
+// Implements MSvgRequestObserver::UpdatePresentation.
+// -----------------------------------------------------------------------------
+//
+void  CSVGTCustControl::UpdatePresentation( const TInt32&  aNoOfAnimation )
+    {
+    if ( iTotalNumerOfAnimation == KSccConstMinusOne )
+        {
+        if ( aNoOfAnimation == KSccConstZero )
+            {
+            iAnimationStatus = ESvgNoAnimationsPresent;
+            return;
+            }
+        else
+            {
+            // First time Update Presentation is called
+            // and animations are present.
+            iTotalNumerOfAnimation = aNoOfAnimation;
+            }
+        }
+    else
+        {
+        iTotalNumerOfAnimation -= aNoOfAnimation;
+        }
+
+    if ( iTotalNumerOfAnimation == KSccConstZero )
+        {
+        iAnimationStatus = ESvgAllAnimationsComplete;
+        return;
+        }
+
+    iAnimationStatus =  ESvgAnimationsNotComplete;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::OfferKeyEventL
+// Handles Key events by reimplementing CCoeControl::OfferKeyEventL.
+// Returns:
+//      EKeyWasConsumed: If this control uses this key.
+//      EKeyWasNotConsumed: Otherwise.
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CSVGTCustControl::OfferKeyEventL(
+    const TKeyEvent& aKeyEvent,  // Key Event
+    TEventCode aType )           // Event Code
+    {
+   
+    TKeyResponse retVal = EKeyWasNotConsumed;
+    TInt keyScanCode = aKeyEvent.iScanCode;
+    TInt keyCode = aKeyEvent.iCode;
+    switch ( aType )
+        {
+        case EEventKeyDown:
+            {
+            // reset the repeat count
+            iKeyRepeatCount = 0;
+            // Reset the select cause
+            iSelectCause = ESvgInvalidSelectCause;
+            // UI Spec: Pointer should be displayed when
+            // Select Key or Pointer is moved
+            if ( keyScanCode == EStdKeyEnter ||
+                 keyScanCode == EStdKeyDevice3 ||
+                 keyScanCode == EStdKeyUpArrow ||
+                 keyScanCode == EStdKeyDownArrow ||
+                 keyScanCode == EStdKeyLeftArrow ||
+                 keyScanCode == EStdKeyRightArrow )
+                {
+                if ( !iInactivityTimer )
+                    {
+                    // Ignore subsequent key events as the pointer should be
+                    // displayed and no event is to be processed until key
+                    // up event is received.
+                    iIgnorePointerKeyEvent = ETrue;
+                    }
+                if( keyScanCode != EStdKeyDevice3 && keyScanCode != EStdKeyEnter && !iIsPointerDisplayed )
+                	{
+                	iScrollKey=ETrue; //needed to check when the pointer hidden
+                	                  // and scroll key is pressed.
+                   	}
+                
+               
+                if( ( keyScanCode == EStdKeyDevice3 || keyScanCode == EStdKeyEnter )&&!iIsPointerDisplayed )
+                    {
+                    // Key has been lifted,
+                    // Reset the Pointer Delta Values
+                    iPointerDx = KSccConstZero;
+                    iPointerDy = KSccConstZero;
+
+                    // UI Spec: Pointer should be hidden after 15 sec of
+                    // user inactivity
+                    if ( iInactivityTimer )
+                        {
+                        // Should not be the case!
+                        delete iInactivityTimer;
+                        iInactivityTimer = NULL;
+                        }
+                    iInactivityTimer = CSVGTPointerHideTimer::NewL( this );
+                    iInactivityTimer->After( KSccPointerHideTimerStartAfter );
+                    }
+                if(keyScanCode == EStdKeyDevice3 || keyScanCode == EStdKeyEnter )    
+                    {
+                    iDownKeyOccurred = ETrue;
+                    iSvgModule->MouseDown( iPointerX, iPointerY );    
+                    }
+                SetPointerDisplayStatusAndRedraw( ETrue );
+                
+                retVal = EKeyWasConsumed;
+                }
+            }
+            break;
+        case EEventKeyUp:
+            {
+            if ( keyScanCode == EStdKeyEnter ||
+                 keyScanCode == EStdKeyDevice3 ||
+                 keyScanCode == EStdKeyUpArrow ||
+                 keyScanCode == EStdKeyDownArrow ||
+                 keyScanCode == EStdKeyLeftArrow ||
+                 keyScanCode == EStdKeyRightArrow )
+                {
+                // Key has been lifted,
+                // Reset the Pointer Delta Values
+                iPointerDx = KSccConstZero;
+                iPointerDy = KSccConstZero;
+
+                // UI Spec: Pointer should be hidden after 15 sec of
+                // user inactivity
+                if ( iInactivityTimer )
+                    {
+                    // Should not be the case!
+                    delete iInactivityTimer;
+                    iInactivityTimer = NULL;
+                    }
+                iInactivityTimer = CSVGTPointerHideTimer::NewL( this );
+                iInactivityTimer->After( KSccPointerHideTimerStartAfter );
+
+                // Once the pointer is un-hidden, Ignore subsequent key events
+                // and no event is to be processed until key up event is received.
+                if ( iIgnorePointerKeyEvent )
+                    {
+                    iIgnorePointerKeyEvent = EFalse;
+                    retVal = EKeyWasConsumed;
+                    TRAP_IGNORE(SetMSKLabelL());
+                    }
+                else
+                    {
+                    // Assume key will be consumed
+                    retVal = EKeyWasConsumed;
+                   
+                    if( ( keyScanCode == EStdKeyDevice3 || keyScanCode == EStdKeyEnter )&& iDownKeyOccurred)
+                        {
+                        iSvgModule->MouseUp(iPointerX,iPointerY);    
+                        iDownKeyOccurred= EFalse;
+                        }
+                    }
+                
+                }                           
+            }
+            break;
+        case EEventKey:
+            {
+            retVal = EKeyWasConsumed;
+            iKeyRepeatCount++;
+
+            // Once the pointer is un-hidden, Ignore subsequent joystick 
+            // key events and no joystick event is to be processed until 
+            // key up event is received.
+            switch ( keyCode /*keyScanCode*/ )
+                {
+                case KSccZoomInKey: // Zoom In Key
+                    {
+                    if ( iKeyRepeatCount == 1 )
+                        {
+                        ProcessViewerCommandL( ESvgtDlgZoomInCommand );
+                        }
+                     
+                    break;
+                    }
+                case EKeyUpArrow: // Pointer Up
+                    {
+                    if ( iIgnorePointerKeyEvent == EFalse)
+                        {
+                        iPointerDx = KSccConstZero;
+                        iPointerDy -= KSccCursorMinDeltaY;
+                        }
+                    break;
+                    }
+                case EKeyDownArrow: // Pointer Down
+                    if ( iIgnorePointerKeyEvent == EFalse)
+                        {
+                        iPointerDx = KSccConstZero;
+                        iPointerDy += KSccCursorMinDeltaY;
+                        }
+                    break;
+                case EKeyLeftArrow: // Pointer Left
+                    if ( iIgnorePointerKeyEvent == EFalse)
+                        {
+                        iPointerDx -= KSccCursorMinDeltaX;
+                        iPointerDy = KSccConstZero;
+                        }
+                    break;
+                case EKeyRightArrow: // Pointer Right
+                    if ( iIgnorePointerKeyEvent == EFalse)
+                        {
+                        iPointerDx += KSccCursorMinDeltaX;
+                        iPointerDy = KSccConstZero;
+                        }
+                        break;
+                case ENumberKey1:    //key 1
+                    DoRotation(ERotationAngle90);
+                    break;
+                case ENumberKey3:    //key 3
+                    DoRotation(-ERotationAngle90);
+                    break;
+                case ENumberKey7:    //key 7
+                    DoRotation(ERotationAngle45);
+                    break;
+                case ENumberKey9:    //key 9
+                    DoRotation(-ERotationAngle45);
+                    break;
+                case KSccZoomOutKey: // Zoom out key
+                    // Zoom out if "zoom-out" key was pressed once
+                    {
+                    if ( iKeyRepeatCount == 1 )
+                        {
+                        ProcessViewerCommandL( ESvgtDlgZoomOutCommand );
+                        }
+                    else if ( ( iZoomLevel > 0 ) && ( iKeyRepeatCount == 2 ) )
+                        {
+                        ProcessViewerCommandL(ESvgtDlgZoomOptimalCommand );
+                        }                             
+                    break;    
+                    }
+                default:
+                    {
+                    // Unknown Key
+                    retVal = EKeyWasNotConsumed;
+                    }
+                }
+            }
+            break;
+        default:
+            {
+            // Unknown Key
+            retVal = EKeyWasNotConsumed;
+            }
+            break;
+        }
+    if ( ( iPointerDx != KSccConstZero ) ||
+            ( iPointerDy != KSccConstZero ) )
+        {
+        UpdatePointer();
+        }
+    return retVal;
+    }
+
+   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::HandleResourceChange
+// This function is called by the framework when there is a layout switch/skin
+// change
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::HandleResourceChange( TInt aType )
+    {
+    if ( aType == KAknsMessageSkinChange )
+        {
+        // Recreate the icons
+        TRAPD( err, CreateIconsL() );
+        if ( err !=  KErrNone )
+            {
+            // No Error Handling done here.
+            }
+        // Find Text Highlight Colour
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+       
+        // Color is not updated if it not found from the skin
+        AknsUtils::GetCachedColor(skin, iFindTextHiColor,
+                                  KAknsIIDQsnHighlightColors,
+                                  EAknsCIQsnHighlightColorsCG2);
+        SetSize(Rect().Size());                          
+        }
+
+    CCoeControl::HandleResourceChange( aType );       
+    }
+
+       
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::LinkEntered
+// Callback Function called by the engine when the pointer enters a hyperlink
+// -----------------------------------------------------------------------------
+//
+
+TBool CSVGTCustControl::LinkEntered( const TDesC& aUri)
+    {
+   
+    CXmlElementImpl* ptr=NULL;
+   
+    // Get the elementID
+    ptr=iSvgModule->GetElementById(iSvgModule->SvgDocument(),aUri);
+	
+	// Check for "a" element or an element which has animation on
+	// mousedown/mouseup 
+	if(!ptr)
+		{
+		iAElement=ETrue;
+		iPointerType = ESvgPointerHand;
+		// Sets the MSK label
+        if(iMSKImpl && !iPreviewMode )
+    	    {
+    	    TRAP_IGNORE(SetMSKLabelL());	
+    	    }  
+		}
+    
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::LinkExited
+// Callback Function called by the engine when the pointer exits a hyperlink
+// -----------------------------------------------------------------------------
+//
+
+TBool CSVGTCustControl::LinkExited( const TDesC& /*aUri*/ )
+    {
+   
+    iPointerType = ESvgPointerDefault;
+   
+    // Reset the flag for a element
+    iAElement=EFalse;
+   
+    //Set the MSK label
+    if(iMSKImpl && !iPreviewMode)
+    	{
+    	TRAP_IGNORE(SetMSKLabelL());	
+    	}
+   
+    return ETrue;
+    }
+// ---------------------------------------------------------------------------
+// CSVGTCustControl::LinkActivated
+// Callback Function called by the engine when a hyperlink is activated
+// ---------------------------------------------------------------------------
+//
+
+TBool CSVGTCustControl::LinkActivated(
+    const TDesC& aUri )
+    {
+    if (iSelectCause != ESvgInvalidSelectCause )
+        {
+        // Ignore this callback as it was already processed.
+        return ETrue;
+        }
+    // Set the cause for select operation as Hyperlink so that
+    // subsequent events trigerred are ignored.
+    iSelectCause = ESvgHyperLinkSelectCause;
+   
+    if( iAppObserver )
+        {
+        if( IsThreadRunning() )
+            {
+            CSvgtEventLinkActivated* event = new 
+                CSvgtEventLinkActivated( aUri );
+            iEventHandlerAO->AddEventToList( event );
+            iEventHandlerAO->MakeRequestComplete( KErrNone );
+            return ETrue;
+            }
+        else
+            {
+            return iAppObserver->LinkActivated( aUri );    
+            }
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+// --------------------------------------------------------------------
+// CSVGTCustControl::LinkActivatedWithShow
+// Callback Function called by the engine when a hyperlink with show
+// attribute is activated
+// --------------------------------------------------------------------
+//
+TBool CSVGTCustControl::LinkActivatedWithShow(
+    const TDesC& aUri ,
+    const TDesC& aShow )
+    {
+    if (iSelectCause != ESvgInvalidSelectCause )
+        {
+        // Ignore this callback as it was already processed.
+        return ETrue;
+        }   
+    // Set the cause for select operation as Hyperlink so that
+    // subsequent events trigerred are ignored.
+    iSelectCause = ESvgHyperLinkSelectCause;
+    if( iAppObserver )
+        {
+        if( IsThreadRunning() )
+            {
+            CSvgtEventLinkActivatedWithShow* event = 
+                new CSvgtEventLinkActivatedWithShow( aUri, aShow );
+            iEventHandlerAO->AddEventToList( event );
+            iEventHandlerAO->MakeRequestComplete( KErrNone );
+           
+            return ETrue;
+            }
+        else
+            {
+            return iAppObserver->LinkActivatedWithShow( aUri, aShow );     
+            }
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::CreateBitmapsL
+// This function is called to create the bitmaps used by the SVG engine
+// for rendering.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::CreateBitmapsL(
+    const TSize& aBitmapSize ) // Bitmap Size used to render content
+    {
+   
+    if( iSVGTBitMap && (iSVGTBitMap->SizeInPixels() == aBitmapSize))
+        {
+        return ;
+        }
+   
+    TDisplayMode dispMode = iEikonEnv->ScreenDevice()->DisplayMode();
+    TInt errCode = KErrNone;
+    // Modes currently supported by SVG engine are:
+    // EGray2, EColor4K, EColor64K, EColor16M, EColor16MU.
+    switch ( dispMode )
+        {
+        case EGray2:
+        case EColor16M:
+            {
+            break;
+            }
+        case EColor16MU:
+            {
+            break;
+            }
+        default:
+            {
+            dispMode = EColor64K;
+            break;
+            }
+        }
+    // Create the bitmaps using local variables and assign
+    // to member variable if successful
+    CFbsBitmap* lTempBitmap = new ( ELeave ) CFbsBitmap();
+   
+    // Create the bitmap with size and display mode
+    errCode = lTempBitmap->Create( aBitmapSize, dispMode );
+    if ( errCode != KErrNone )
+        {
+        delete lTempBitmap;
+        User::Leave( errCode );
+        }
+   
+    // Check and destroy existing bitmap
+    if ( iSVGTBitMap )
+        {
+        delete iSVGTBitMap;
+        }
+   
+    // Assign newly created bitmap   
+    iSVGTBitMap = lTempBitmap;
+   
+    // Create the bitmap mask
+    lTempBitmap = new ( ELeave ) CFbsBitmap();
+   
+    // Create the bitmap with size and display mode
+    errCode = lTempBitmap->Create( aBitmapSize, EGray256 );
+    if ( errCode != KErrNone )
+        {
+        delete lTempBitmap;
+        User::Leave( errCode );
+        }
+
+    // Check and destroy existing bitmap
+    if ( iSVGTBitMapMask )
+        {
+        delete iSVGTBitMapMask;
+        }
+   
+    // Assign newly created bitmap
+    iSVGTBitMapMask = lTempBitmap;
+       
+    // Create the Framebuffer Bitmap
+    lTempBitmap = new ( ELeave ) CFbsBitmap();
+   
+    // Create the bitmap with size and display mode
+    errCode = lTempBitmap->Create( aBitmapSize, dispMode );
+    if ( errCode != KErrNone )
+        {
+        delete lTempBitmap;
+        User::Leave( errCode );
+        }
+
+    // Check and destroy existing bitmap
+    if ( iSVGTFrameBufBitMap  )
+        {
+        delete iSVGTFrameBufBitMap;
+        }
+   
+    // Assign newly created bitmap   
+    iSVGTFrameBufBitMap = lTempBitmap;
+       
+    // Create the Bitmap Device and Contexts, used to reduce the number
+    // of interactions with the windows server
+    CFbsBitmapDevice* lTempBitmapDev = CFbsBitmapDevice::NewL(
+            iSVGTFrameBufBitMap );
+   
+    CFbsBitGc* lTempBitmapCtx = NULL;
+    // Create framebuffer context
+    errCode = lTempBitmapDev->CreateContext( lTempBitmapCtx );
+    if ( errCode != KErrNone )
+        {
+        delete lTempBitmapDev;
+        User::Leave( errCode );
+        }
+   
+    // Check and destroy existing bitmap device
+    if ( iSVGTFrameBufDevice )
+        {
+        delete iSVGTFrameBufDevice;
+        }
+   
+    // Check and destroy existing bitmap context
+    if ( iSVGTFrameBufContext )
+        {
+        delete iSVGTFrameBufContext;
+        }
+   
+    // Assign newly created bitmap device
+    iSVGTFrameBufDevice = lTempBitmapDev;
+    iSVGTFrameBufContext = lTempBitmapCtx;
+    }
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::CreateIconsL
+// This function is called to create the icons used by the control.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::CreateIconsL()
+    {
+    // Skin instance
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+    // Cleanup the old icons.
+    FreeIcons();
+   
+    // Construct the MBM file name
+    TParse parse;
+    parse.Set( KSccIconFile, &KDC_APP_BITMAP_DIR, NULL);
+    TPtrC iconFile = parse.FullName();
+
+    //Create icon for drawing the pointer
+    iPointerIcon = AknsUtils::CreateGulIconL(
+            skin,
+            KAknsIIDQgnIndiViewerPointer,
+            iconFile,
+            EMbmSvgtuicontrolQgn_indi_viewer_pointer,
+            EMbmSvgtuicontrolQgn_indi_viewer_pointer_mask );
+
+    //Create icon for drawing the hyperlink pointer
+    iHandIcon = AknsUtils::CreateGulIconL(
+            skin,
+            KAknsIIDQgnIndiViewerPointerHand,
+            iconFile,
+            EMbmSvgtuicontrolQgn_indi_viewer_pointer_hand,
+            EMbmSvgtuicontrolQgn_indi_viewer_pointer_hand_mask );
+
+    //Create icon for drawing the hyperlink pointer
+    iTextIcon = AknsUtils::CreateGulIconL(
+           skin,
+            KAknsIIDQgnIndiViewerPointerText,
+            iconFile,
+            EMbmSvgtuicontrolQgn_indi_viewer_pointer_text,
+            EMbmSvgtuicontrolQgn_indi_viewer_pointer_text_mask );
+
+    // Panning Indicators
+    // Create icon for drawing the Pan Left
+    iPanIndLeftIcon = AknsUtils::CreateGulIconL(
+            skin,
+            KAknsIIDQgnIndiViewerPanningLeft,
+            iconFile,
+            EMbmSvgtuicontrolQgn_indi_viewer_panning_left,
+            EMbmSvgtuicontrolQgn_indi_viewer_panning_left_mask );
+
+    // Create icon for drawing the Pan Right
+    iPanIndRightIcon = AknsUtils::CreateGulIconL(
+            skin,
+            KAknsIIDQgnIndiViewerPanningRight,
+            iconFile,
+            EMbmSvgtuicontrolQgn_indi_viewer_panning_right,
+            EMbmSvgtuicontrolQgn_indi_viewer_panning_right_mask );
+
+    // Create icon for drawing the Pan Up
+    iPanIndUpIcon = AknsUtils::CreateGulIconL(
+            skin,
+            KAknsIIDQgnIndiViewerPanningUp,
+            iconFile,
+            EMbmSvgtuicontrolQgn_indi_viewer_panning_up,
+            EMbmSvgtuicontrolQgn_indi_viewer_panning_up_mask );
+
+    // Create icon for drawing the Pan Down
+    iPanIndDownIcon = AknsUtils::CreateGulIconL(
+           skin,
+           KAknsIIDQgnIndiViewerPanningDown,
+           iconFile,
+           EMbmSvgtuicontrolQgn_indi_viewer_panning_down,
+           EMbmSvgtuicontrolQgn_indi_viewer_panning_down_mask );
+
+    // Create icon for drawing the Pause
+    iPauseIcon = AknsUtils::CreateGulIconL(
+           skin,
+           KAknsIIDQgnIndiCamsPaused,
+           iconFile,
+           EMbmSvgtuicontrolQgn_indi_cams_paused,
+           EMbmSvgtuicontrolQgn_indi_cams_paused_mask );
+    }
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::InitializeEngineL
+// Initiliazes the interface with the SVG engine.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::InitializeEngineL()
+    {
+    if ( !iSvgModule )
+        {
+        TInt fontId = KLatintFontId;
+   
+        switch ( AknLayoutUtils::Variant() )
+            {
+            case EApacVariant:
+                {
+                fontId = KApacFontId;
+                }
+                break;
+            case EEuropeanVariant:
+            default:
+                break;
+            }
+
+        const CFont* font = AknLayoutUtils::FontFromId( fontId );
+        TFontSpec spec = font->FontSpecInTwips();
+       
+        iSvgModule = CSvgEngineInterfaceImpl::NewL( iSVGTBitMap,
+                this, spec );
+        iSvgModule->SetBackgroundColor( KSccArgbWhite );
+        iSvgModule->AddHyperlinkListener( static_cast < MSvgHyperlinkListener* >
+                                        (this) );
+        // Register for notification of Animation Start/Stop.
+        iSvgModule->AddAnimationListener( static_cast < MSvgAnimationListener* >
+                         ( this ) );
+        iSvgModule->AddListener(static_cast<MSvgLoadingListener*>(this),
+            ESvgLoadingListener);
+        iSvgModule->AddListener(static_cast<MSvgLoadingListener*>(this),
+            ESvgHyperlinkListener);
+        iSvgModule->AddListener( static_cast < MSvgInteractiveElementListener* >
+                    (this), ESvgInteractiveElementListener);
+
+#ifdef SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE   
+        // In DRM protected contents, disable the text operations:
+        iEnableTextOps = !( iSvgDrmHelper->IsProtected()||iPreviewMode );
+       
+        if ( iEnableTextOps )
+            {
+            // Add textArea element listener
+            iSvgModule->AddListener( static_cast<MSvgTextAreaListener *>(this),
+                                     ESvgTextAreaListener );
+           
+            // Add text element listener
+            iSvgModule->AddListener( static_cast<MSvgTextListener *>(this),
+                                     ESvgTextListener );
+            }
+#endif // SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE                           
+       }
+
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::LoadContentL
+// This function uses the SVG Engine to load the SVGT content.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::LoadContentL(
+    RFile& aFileHandle )    // Filename of SVGT content
+    {
+    // Enable DRM mode of engine
+    iSvgModule->SetDRMMode( ETrue );
+   
+    // Rewind the file
+    TInt pos = 0;
+    aFileHandle.Seek( ESeekStart, pos );
+   
+    iLoadingThreadError = iSvgModule->Load( aFileHandle );
+
+#ifdef SVGTUICONTROL_DBG_OPENVG_TESTING_ENABLE   
+    iSvgModule->CustomOption( ETrue );
+#endif // SVGTUICONTROL_DBG_OPENVG_TESTING_ENABLE   
+    }
+
+TInt CSVGTCustControl::LoadSvgContent(TAny* aAny)
+    {
+    CSVGTCustControl& loader = *( CSVGTCustControl* )aAny;
+    CTrapCleanup* theTrapCleanup = CTrapCleanup::New();
+    loader.SetThreadRunning(ETrue);
+    TRAP_IGNORE( loader.InitSvgContentL() );
+    delete theTrapCleanup;
+    return 0;
+    }
+
+void CSVGTCustControl::InitSvgContentL()
+    {
+    CActiveScheduler* threadScheduler = new (ELeave) CActiveScheduler;
+    CleanupStack::PushL( threadScheduler );
+    CActiveScheduler::Install(threadScheduler);
+
+    // Load the SVGT content
+    LoadContentL( iContentFileHandle );
+    CleanupStack::PopAndDestroy( threadScheduler );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::DisplayInfoNoteL
+// This is a utility function for displaying the info notes
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::DisplayInfoNoteL( TInt aResourceId, // Resource Id of
+                                                           // string
+                                 TBool aIsWaitingDialog ) // Indicate whether \
+                                                          // dialog should wait
+    {
+    if(iDisplayFlags & ESvgDisplayErrorNotes )
+        {
+        // Show information note
+        HBufC* prompt = iCoeEnv->AllocReadResourceLC( aResourceId );
+        CAknInformationNote* note = new ( ELeave ) CAknInformationNote(
+                                                            aIsWaitingDialog );
+        note->ExecuteLD( *prompt );
+        CleanupStack::PopAndDestroy( prompt );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::DoPostLoadFuncL
+// This is a utility function for performing post-load functionality
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::DoPostLoadFuncL()
+    {
+    if ( iSvgModule )
+        {
+#ifdef RD_SVGT_AUDIO_SUPPORT
+        SetPresentationVolume( iVolumeLevel );
+#endif //RD_SVGT_AUDIO_SUPPORT
+
+        // give thread normal priority
+        iMainThread.SetPriority( EPriorityNormal );
+        // Attach to property for call state property
+        User::LeaveIfError( iSystemState.Attach( KPSUidCtsyCallInformation,
+                                                 KCTsyCallState ) );
+        // Attach to property for call type property
+        User::LeaveIfError( iSystemState.Attach( KPSUidCtsyCallInformation,
+                                                 KCTsyCallType ) );
+        // Indicate that the content loading is complete
+        iIsLoadingDone = ETrue;
+   
+        // Store SVG duration
+        iDuration = iSvgModule->Duration();   
+
+        // Start the rendering process
+        iAnimState = ESvgAnimPlayingState;
+        iSvgModule->Start();
+		
+		//Drawing the MSK label for the first time
+		if(iMSKImpl && !iPreviewMode)
+			{
+			TRAP_IGNORE(SetMSKLabelL());
+			}
+			
+        // Check whether the content is finite, inorder to display the
+        // progress timer
+        if ( IsContentFinite() )
+            {
+            // Start immediately so that the first count is displayed
+            StartProgIndTimer( 0 );
+            }
+
+        if ( IsVoiceCallActive() )
+            {
+            ProcessPauseCmd();
+            }
+        }
+    }   
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::SaveSvgDom
+// This function is a helper function to save the modified svg content
+// given the file name.
+// -----------------------------------------------------------------------------
+TInt CSVGTCustControl::SaveSvgDom( const TDesC& aFileName )
+    {
+    TInt retVal = KErrNone;
+    MSvgError* lSvgErr = iSvgModule->SaveSvgDom(
+        (TInt)iSvgModule->SvgDocument(), aFileName );
+    if ( ( !lSvgErr ) || ( lSvgErr->HasError() ) )
+        {
+        if ( lSvgErr )
+            {
+            // Attempt to find the system error code
+            retVal = lSvgErr->SystemErrorCode();
+            }
+            else
+                {
+                // No free memory available
+                retVal = KErrNoMemory;
+                }
+       
+        // No error code found, indicate general error   
+        if ( retVal == KErrNone )
+            {
+            retVal = KErrGeneral;
+            }
+        }
+    return retVal;
+    }
+ // -----------------------------------------------------------------------------
+
+
+//-----------------------------------------------------------------------------    
+void CSVGTCustControl::GetViewPort( TInt  getWidth , 
+                                    TInt  getHeight , 
+                                    TBool isWidthInPercentage, 
+                                    TBool isHeightInPercentage, 
+                                    TInt& setWidth, TInt& setHeight )
+ {
+    if(!iSvgModule)
+    {
+        return;
+    }
+    if(!iSVGTBitMap)
+    {
+        return;
+    }
+    TSize svgSize = iSvgModule->ContentDimensionsInPercentage();
+    TInt  per=100;
+    TSize tempSize = iSvgModule->ContentDimensions();
+    TInt scrW = iSVGTBitMap->SizeInPixels().iWidth;
+    TInt scrH = iSVGTBitMap->SizeInPixels().iHeight;
+    //both not in percentage
+    if(!isWidthInPercentage && !isHeightInPercentage)
+    {
+        setWidth = tempSize.iWidth;
+        setHeight = tempSize.iHeight;
+    }
+    //if width in percentage 
+    else if(isWidthInPercentage && !isHeightInPercentage)
+    {
+        setWidth = svgSize.iWidth * scrW / per;
+        //if svg had valid height take it else use default
+        if(tempSize.iHeight)
+        {
+         setHeight = getHeight;
+        }
+    }
+    //if height in percentage
+    else if(!isWidthInPercentage && isHeightInPercentage)
+    {
+        setHeight =  svgSize.iHeight * scrH / per;
+        if(tempSize.iWidth)
+        {
+         setWidth = getWidth;
+        }
+    }
+    //if both height and width are in percentage
+    else
+    {
+        setHeight =  svgSize.iHeight * scrH / per;
+        setWidth = svgSize.iWidth * scrW / per;
+    }
+    
+    //if height is greater than screenHeight
+    //or if width is greater than screenwidth 
+    //set the width and height by preserving the aspect ratio
+    TReal32 sx,sy;
+
+    if(setHeight > scrH || setWidth > scrW)
+    {
+        sx = (TReal32) (scrW) / (TReal32) (setWidth);
+        sy = (TReal32) (scrH) / (TReal32) (setHeight);
+        if ( sx > sy )
+        {
+            sx = sy;
+        }
+        else // ( sx < sy )
+        {
+            sy = sx;
+        }
+        setWidth = sx * setWidth;
+        setHeight = sy * setHeight;
+    }
+    
+    
+ }
+ 
+ 
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::DrawPointer
+// This function blits the pointer bitmap on the screen at the current mouse
+// co-ordinates which are maintained as data-members of CSVGTCustControl.
+// -----------------------------------------------------------------------------
+//
+
+void CSVGTCustControl::DrawPointer() const
+    {
+
+    iSVGTFrameBufContext->SetPenStyle( CGraphicsContext::ENullPen );
+    iSVGTFrameBufContext->SetBrushStyle( CGraphicsContext::ENullBrush );
+   
+   
+    // Use the aid for the hotspot from the LAF.
+    // This value is set in the SizeChanged function.
+    // The hotspot information is used so that the bitmap is drawn in
+    // correct position with respect to the mouse position.
+    switch ( iPointerType )
+        {
+        case ESvgPointerHand:
+            {
+            // Draw the hand icon at the mouse position
+            TPoint pointerStart( iPointerX - iHandAidRect.Rect().Width(),
+                                 iPointerY - iHandAidRect.Rect().Height() );
+            iSVGTFrameBufContext->BitBltMasked( pointerStart,
+                 iHandIcon->Bitmap(),
+                 iHandRect.Rect(),
+                 iHandIcon->Mask(),
+                 EFalse );
+            break;
+            }
+        case ESvgPointerText:
+            {
+            // Draw the hand icon at the mouse position
+            TPoint pointerStart( iPointerX - iTextAidRect.Rect().Width(),
+                                 iPointerY - iTextAidRect.Rect().Height() );
+            iSVGTFrameBufContext->BitBltMasked( pointerStart,
+                 iTextIcon->Bitmap(),
+                 iTextRect.Rect(),
+                 iTextIcon->Mask(),
+                 EFalse );
+            break;
+            }
+        case ESvgPointerDefault:      // Fall Through
+        default:                      // Fall Through - Should never be the case
+            {
+            // Draw the pointer icon at the mouse position
+            TPoint pointerStart( iPointerX - iPointerAidRect.Rect().Width(),
+                                 iPointerY - iPointerAidRect.Rect().Height() );
+            iSVGTFrameBufContext->BitBltMasked( pointerStart,
+                iPointerIcon->Bitmap(),
+                iPointerRect.Rect(),
+                iPointerIcon->Mask(),
+                EFalse );
+            break;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::UpdatePointer
+// Called when pointer needs to be redrawn
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::UpdatePointer()
+    {
+    // Get the size of the content
+    TSize svgSize = iSvgModule->Size();
+    TInt rgnw = svgSize.iWidth;
+    TInt rgnh = svgSize.iHeight;
+
+    // This is to store whether the framebuffer changed
+    TBool lFrameBufChange = EFalse;
+   
+    // iPointerDx contains the delta increment in X axis
+    // Add it to the pointer coordinates
+    iPointerX += iPointerDx;
+   
+    // If pointer coordinate becomes negative then reset it
+    // and perform panning.
+    if ( iPointerX < KSccConstZero )
+        {
+        iPointerX = KSccConstZero;
+		if(iPanLt)
+			{
+			iSvgModule->Pan( KSccPanNumPixelsX, KSccConstZero );
+			}
+        lFrameBufChange = ETrue;
+        }
+   
+    // If pointer coordinate becomes greater than content size
+    // then set it back to (content width - 1) and
+    // perform panning.
+    if ( rgnw <= iPointerX )
+        {
+        iPointerX = rgnw - KSccConstOne;
+		if(iPanRt)
+			{
+    	    iSvgModule->Pan( -KSccPanNumPixelsX, KSccConstZero );
+			}
+        lFrameBufChange = ETrue;
+        }
+
+    // iPointerDy contains the delta increment in Y axis
+    // Add it to the pointer coordinates.
+    iPointerY += iPointerDy;
+
+    // If pointer coordinate becomes negative then reset it
+    // and perform panning.
+    if ( iPointerY < KSccConstZero )
+        {
+        iPointerY = KSccConstZero;
+		if(iPanUp)
+			{
+            iSvgModule->Pan( KSccConstZero, KSccPanNumPixelsY );
+			}
+        lFrameBufChange = ETrue;
+        }
+
+    // If pointer coordinate becomes greater than content size
+    // then set it back to (content height - 1) and
+    // perform panning.
+    if ( iPointerY >= rgnh )
+        {
+        iPointerY = rgnh - KSccConstOne;
+		if(iPanDn)
+		    {
+	        iSvgModule->Pan( KSccConstZero, -KSccPanNumPixelsY );
+		    }
+        lFrameBufChange = ETrue;
+        }
+   
+    // If Framebuffer changed, perform an engine redraw and recalculate
+    // bound box coordinates
+    if ( lFrameBufChange )
+        {
+        iSvgModule->Redraw();
+        CalcFindTextBBox();       
+        }
+   
+    // Indicate new mouse position to engine
+    iSvgModule->MouseMove( iPointerX, iPointerY );
+   
+    // Perform a redraw to reflect new position of pointer
+    DrawDeferred();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::SetMSKLabel
+// This function is called to set the MSK labels under various circumstances.
+// -----------------------------------------------------------------------------
+//   
+void CSVGTCustControl::SetMSKLabelL()
+{
+	TInt lResourceID=0;
+	TInt lCommandID=0;
+	if(!iIsPointerDisplayed)
+		{
+		if (IsAnimationPresent())
+			{
+			lResourceID=R_SVGT_MSK_LABEL_CONTEXT;
+			lCommandID=EAknSoftkeyContextOptions;
+			}
+		else if ( !IsAnimationPresent() && 
+		    (iAppObserver->CanShowSave() || IsTextContentChanged() ) )
+			{
+			lResourceID=R_SVGT_MSK_LABEL_SAVE;
+			lCommandID=EAknSoftkeySave;	
+			}
+		else
+			{	
+			lResourceID=R_SVGT_MSK_LABEL_CONTEXT;
+			lCommandID=EAknSoftkeyOptions;		
+			}
+		}
+	else
+		{
+		switch(iPointerType)
+			{
+			case ESvgPointerHand:
+				{
+				lCommandID=EAknSoftkeySelect;	
+				if(iAElement)
+					{
+					lResourceID=R_SVGT_MSK_LABEL_OPEN;
+					}
+				else
+					{
+					iPlayMSKLabel=ETrue;
+					lResourceID=R_SVGT_MSK_LABEL_PLAY;
+					}
+				}
+				break;			
+			case ESvgPointerText:
+				{
+				lCommandID=EAknSoftkeySelect;
+				if(IsTextEditOn())
+					{
+					lResourceID=R_SVGT_MSK_LABEL_EDIT;
+					}
+				else
+					{
+					lResourceID=R_SVGT_MSK_LABEL_SELECT;
+					}
+				}
+				break;
+			case ESvgPointerDefault:
+				{
+				if (IsAnimationPresent())
+					{
+					lResourceID=R_SVGT_MSK_LABEL_CONTEXT;
+					lCommandID=EAknSoftkeyContextOptions;
+					}
+				else if( !IsAnimationPresent() && 
+				    ( iAppObserver->CanShowSave() || IsTextContentChanged() ) )
+					{
+					lResourceID=R_SVGT_MSK_LABEL_SAVE;
+					lCommandID=EAknSoftkeySave;	
+					}
+				else
+					{	
+					lResourceID=R_SVGT_MSK_LABEL_CONTEXT;
+					lCommandID=EAknSoftkeyOptions;		
+					}
+				}
+				break;
+			}
+		}
+	iMSKImpl->RemoveMSKLabel();
+	iMSKImpl->DrawMSKLabelL(lResourceID,lCommandID);
+}
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::GetMSKLabelFlag
+// This function is called to get either iPlayMSKLabel or
+// iContextMenuActivated flag
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::GetMSKLabelFlag(TInt aButtonId) const
+{
+	if (aButtonId==EAknSoftkeyContextOptions)
+		{
+		return iContextMenuActivated;	
+		}
+	else   //Else the case will be for EAknSoftkeySelect for which the
+           // iPlayMSKLabel has to be returned
+		{
+		return iPlayMSKLabel;	
+		}
+}
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::SetMSKLabelFlag
+// This function is called to set/reset either iPlayMSKLabel or
+// iContextMenuActivated flag
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ChangeMSKLabelFlag(TInt aButtonId)
+{
+	if (aButtonId==EAknSoftkeyContextOptions)
+		{
+		iContextMenuActivated = !iContextMenuActivated;
+		}
+	else //Else the case will be for EAknSoftkeySelect
+		{
+		iPlayMSKLabel=!iPlayMSKLabel;
+		}
+}
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::SwitchScreenModeL
+// This function is called to change the viewing mode to Normal Screen/Full
+// Screen.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::SwitchScreenModeL()
+    {
+    // When control mode is being switched, following
+    // processing needs to happen:
+    //  a. Save the current framebuffer
+    //  b. Create the New Framebuffer by calling CreateBitmaps()
+    //  c. Set the framebuffer to the new framebuffer
+    //  d. Pause the content if it was paused.
+    //  e. Also processing in following functions is affected:
+    //      i. UpdateScreen - This is the callback of the engine to indicate
+    //         that it has rendered the frame on the bitmap, and is ready to be
+    //         drawn. Here we need to generate mask with correct bitmap
+    //      ii. Draw -  This function needs to bitblt the bitmap
+    //         along with the mask
+
+    if ( iSvgModule )
+        {
+        // Create new bitmaps
+        CreateBitmapsL( Rect().Size() );
+        iSvgModule->Pause();       
+        // Change the rendering bitmap to the appropriate Screen Bitmap
+        iSvgModule->SetFrameBuffer( iSVGTBitMap );  
+       
+        // Check if content was playing
+        if ( iAnimState != ESvgAnimPlayingState )
+            {
+            // Stop it, as content is paused
+            iSvgModule->Pause();
+            // Redraw the screen, to prevent blank screen from appearing
+            iSvgModule->Redraw();
+            }
+        // Find Text Update
+        // Get new position of Bounding Boxes
+        CalcFindTextBBox();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::CalcFindTextBBox
+// This function is called to recalculate the bounding boxes for the find text.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::CalcFindTextBBox()
+    {
+
+    // Clear the Arrays
+    iBoundBoxArray.Reset();
+    iFoundTextArray.Reset();
+    iTextElemIdArray.Reset();
+
+    // If the Search String is not valid, then
+    // no need to do anything.
+    if ( !iIsSearchStrValid )
+        {
+        return EFalse;
+        }
+       
+    // Invoke Engine call for searching text.
+    TBool retVal = iSvgModule->SearchForText(
+        iLastSearchText,
+        iBoundBoxArray,
+        iFoundTextArray,
+        iTextElemIdArray,
+        EFalse );
+   
+    if ( retVal == EFalse )
+        {
+        // Set the search string as invalid
+        iIsSearchStrValid = EFalse;
+        // Reset the string
+      //Himanshu  iLastSearchText.Zero();
+        }
+       
+    return ( retVal );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::PanToCurBBox
+// This function is called to pan the content inorder that the current
+// bounding box is visible.
+// -----------------------------------------------------------------------------
+//
+
+void CSVGTCustControl::PanToCurBBox()
+    {
+    TPoint lRefPos( Rect().Center() );
+
+    // We need to pan in such a way that the Top Left of the Bounding box
+    // coincides with the current view's Center
+    TPoint lPanAmount( lRefPos - FPRCenter(
+        iBoundBoxArray[ iCurSearchMatchId ] ) );
+    iSvgModule->Pan( lPanAmount.iX, lPanAmount.iY );
+    // Do a Redraw
+    iSvgModule->Redraw();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ProcessFindTextCmd
+// This function is called to perform the necessary processing for the find
+// text command.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ProcessFindTextCmdL()
+    {
+    // The Processing involved is
+    // 1. Query the text to be searched for from the User
+    // 2. Is the text same as the text input before? (Case Insensitive Match)
+    // 3. If Yes, then
+    //      Perform "Find Next" functionality
+    //          a. If the bounding box is not in view then
+    //                 move to the same bound box
+    //             Else,
+    //                 Cycle through the list of bound-boxes by incrementing
+    //                 with wrap around the iCurSearchMatchId while the text
+    //                 is not visible
+    //    else // New text entered
+    //      Perform "Find First" Functionality
+    //          If no Match is found then,
+    //                 Display an "Text not found" info note
+    //                 Reset the Last Searched Text
+    //                 return to caller
+    //             Else,
+    //                 Find the List of Bound Boxes
+    //                 Set the Current Match as the Index Zero of the BBox Array
+    // 4. If the current bound box is not in view
+    //      Pan to the Bound Box
+    //      Recalculate the Bound Box Co-ordinates
+    // 5. Move the mouse to the center of the bound box
+    // 6. Return to caller.
+
+    TBuf<KFindTextQueryMaxLen> lText( iLastSearchText );
+    // Query the text to be searched for from the User
+    CAknTextQueryDialog* dlg = new ( ELeave ) CAknTextQueryDialog(
+        iLastSearchText );
+    if( dlg->ExecuteLD( R_FIND_TEXT_QUERY_DIALOG ) )
+        {
+        // User entered text
+        if ( lText.CompareF( iLastSearchText ) == 0 && 
+            iIsSearchStrValid==1 ) // Case insensitive comparison
+            {
+            // Searching for same text = Find Next
+            // If current bound box is not in view and is visible, then
+            //      move to the same bound box
+            // else  ; Bound Box is in view or is Not Visible
+            //      find next visible box with wraparound.
+            TBool lIsBoxInView = FPRIntersects( 
+                iBoundBoxArray[ iCurSearchMatchId ] ,
+                Rect() );
+            if ( lIsBoxInView  ||
+                    ( !iSvgModule->IsElementVisible(
+                      iTextElemIdArray[ iCurSearchMatchId ] ) ) )
+                {
+                // Store the current match Index so that the end of the list
+                // can be identified.
+                TInt lastSearchMatchId = iCurSearchMatchId;
+                // Increment iIsCurMatchId to point to next matching text
+                iCurSearchMatchId = ( iCurSearchMatchId + KSccConstOne ) %
+                    ( iBoundBoxArray.Count() );
+                while ( ( iCurSearchMatchId != lastSearchMatchId ) &&
+                            ( !iSvgModule->IsElementVisible(
+                               iTextElemIdArray[ iCurSearchMatchId ] ) ) )
+                    {
+                    // Increment iIsCurMatchId to point to next matching text
+                    iCurSearchMatchId = ( iCurSearchMatchId + KSccConstOne ) %
+                        ( iBoundBoxArray.Count() );
+                    }
+                    if( iCurSearchMatchId == lastSearchMatchId ||
+                        (iCurSearchMatchId==0 )   )
+                    {
+                    ProcessNoTextFoundL();
+                    return;
+                    }
+                }
+            }
+        else
+            {
+            // New Search String
+            iCurSearchMatchId = KSccConstZero;
+            iIsSearchStrValid = ETrue;
+
+            if ( !CalcFindTextBBox() )
+                {
+                ProcessNoTextFoundL();
+                return;
+                }
+                else
+                    {
+                    // Match Found,
+                    // Find the first box in the list that is visible
+                    if ( !iSvgModule->IsElementVisible(
+                        iTextElemIdArray[ iCurSearchMatchId ] ) )
+                        {
+                        // Store the current match Index so that the end of the
+                        // list can be identified.
+                        TInt lastSearchMatchId = iCurSearchMatchId;
+                        // Increment iIsCurMatchId to point to next matching
+                        // text
+                        iCurSearchMatchId = ( iCurSearchMatchId +
+                                KSccConstOne ) % ( iBoundBoxArray.Count() );
+                        while ( ( iCurSearchMatchId != lastSearchMatchId ) &&
+                                    ( !iSvgModule->IsElementVisible(
+                                     iTextElemIdArray[ iCurSearchMatchId ] ) ) )
+                            {
+                            // Increment iIsCurMatchId to point to next
+                            // matching text
+                            iCurSearchMatchId = ( iCurSearchMatchId +
+                                    KSccConstOne ) % ( iBoundBoxArray.Count() );
+                            }
+                        if ( iCurSearchMatchId == lastSearchMatchId )
+                            {
+                            ProcessNoTextFoundL();
+                            return;
+                            }
+                        }
+                    }
+            }
+
+        // To determine if a bounding-box is in view:
+        //   Take the intersection ( TRect::Intersects ) of the
+        //   Cust Control's rect and the bounding-box. If Intersects()
+        //   returns true, bounding-box is in view
+        TRect myRect= Rect();
+        TBool lIsBoxInView = FPRIntersects( iBoundBoxArray[ iCurSearchMatchId ],
+            myRect );
+       
+        if ( !lIsBoxInView )
+            {
+            // Box is not in view
+
+            // Pan Content to bring the text in view
+            PanToCurBBox();
+
+            // Get new position of Bounding Boxes
+            CalcFindTextBBox();
+            }
+
+        // Make the mouse visible
+        SetPointerDisplayStatusAndRedraw( ETrue );
+        // Move Mouse over to the centre of the Bound Box
+        TPoint lMousePos =
+            FPRCenter( iBoundBoxArray[ iCurSearchMatchId ] );
+        iPointerX = lMousePos.iX;
+        iPointerY = lMousePos.iY;
+
+        UpdatePointer();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::DrawFindTextBBox
+//  Draws the Bounding Box for the current match in the SVGT content.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::DrawFindTextBBox(
+    const TRect& aRect ) const // Rectangle which needs to be redrawn
+    {
+    // Is there any text to highlight?
+    if ( iIsSearchStrValid )
+        {
+        // To determine if a bounding-box can be drawn:
+        //  Need to check whether it is in view && It is visible
+        //
+        //  Check whether it is in view:
+        //   Take the intersection ( TRect::Intersects ) of the CoeControl-rect
+        //   and the bounding-box.if Intersects() returns true,
+        //   bounding-box is in view
+        //  Check whether it is visible:
+        //   Call Engine API to check whether the text elem is visible.
+
+        TBool lCanDrawBox = ( FPRIntersects(
+            iBoundBoxArray[ iCurSearchMatchId ], aRect ) &&
+            iSvgModule->IsElementVisible( iTextElemIdArray[
+                iCurSearchMatchId ] ) );
+
+        if ( lCanDrawBox )
+            {
+            // Set the Draw Mode to XOR
+            iSVGTFrameBufContext->SetDrawMode( CGraphicsContext::EDrawModeXOR );
+           
+            // Set the Brush Style to No Fill
+            iSVGTFrameBufContext->SetBrushStyle(
+                CGraphicsContext::ESolidBrush );
+           
+            // Set the Pen Style to Solid and color to one obtd from LAF
+            iSVGTFrameBufContext->SetPenStyle( CGraphicsContext::ESolidPen );
+            iSVGTFrameBufContext->SetPenColor( iFindTextHiColor );
+           
+            // Set the line thickness
+            iSVGTFrameBufContext->SetPenSize( TSize( KSccConstTwo,
+                        KSccConstTwo ) );
+           
+            // Set the brush to White so that when the color is XORed with it
+            // it is displayed in its complementary colours.
+            iSVGTFrameBufContext->SetBrushColor( KRgbWhite );
+            // Form the clipping rectangle so that text beyound the
+            // framebuffer is not displayed
+            TRect lClipRect( TPoint( 0,0 ), iSvgModule->Size() );
+           
+            iSVGTFrameBufContext->SetClippingRect( lClipRect);
+            CArrayFix<TPoint>* lArray = NULL;
+            TRAPD( err,
+                FPR2PointArrayL( iBoundBoxArray[ iCurSearchMatchId ], 
+                lArray ) );
+            if ( err != KErrNone )
+                {
+                delete lArray;
+                return;
+                }
+               
+            iSVGTFrameBufContext->DrawPolygon(
+                lArray );
+           
+            delete lArray;
+            lArray = NULL;
+           
+            // Reset the graphic context parameters so that subsequent
+            // Draw() functions are not affected.
+            iSVGTFrameBufContext->Reset();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ProcessNoTextFoundL
+//  This function is called to perform the necessary procesing when
+//  text being searched using Find Text command is not found.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ProcessNoTextFoundL()
+    {
+    // Set the search string as invalid
+    iIsSearchStrValid = EFalse;
+    // Reset the string
+   //Himanshu iLastSearchText.Zero();
+   
+    // No match found, display an information note
+    TInt resourceId;
+
+    resourceId = R_SVGT_TEXT_NOT_FOUND;
+    // Read from Resource
+    HBufC* prompt = iCoeEnv->AllocReadResourceLC(
+        resourceId );
+   
+    // Start a timer to delete the note after 3 seconds.
+    if (!iNoteRemoverTimer->IsActive())
+        {
+        iNoteRemoverTimer->Start( KSccOneSecond * 3, KSccOneSecond * 3,
+                TCallBack( RemoveInfoNote, this ) );
+        }
+    // Create and display the note
+    iInfoNote = new ( ELeave ) CAknInformationNote(
+            ETrue ); // ETrue - Waiting Dialog
+    iInfoNote->ExecuteLD( *prompt );
+   
+    // Reset the pointer
+    iInfoNote = NULL;
+           
+    CleanupStack::PopAndDestroy( prompt );
+
+    // Do a deferred draw in order to refresh the highlight
+    DrawDeferred();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::DrawPanInd
+//  Draws the Panning indicators for the SVGT content.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::DrawPanInd() const
+    {
+    // Get current Control Rectangle
+    TRect myRect = Rect();
+    // Set the Brush Style and Pen Style to NULL type
+    // so that the background of bitmap is correctly blitted.
+    iSVGTFrameBufContext->SetPenStyle( CGraphicsContext::ENullPen );
+    iSVGTFrameBufContext->SetBrushStyle( CGraphicsContext::ENullBrush );
+
+    if ( iSvgModule )
+        {
+        // Pan Left?
+        if ( iPanLt )
+            {
+            // Draw the indicator                   
+            iSVGTFrameBufContext->BitBltMasked( iPanIndLeftRect.Rect().iTl,
+                iPanIndLeftIcon->Bitmap(),
+                myRect,
+                iPanIndLeftIcon->Mask(),
+                EFalse );                              
+                   
+            }
+
+        // Pan Right?
+        if ( iPanRt )
+            {
+            // Draw the indicator
+            iSVGTFrameBufContext->BitBltMasked( iPanIndRightRect.Rect().iTl,
+                iPanIndRightIcon->Bitmap(),
+                myRect,
+                iPanIndRightIcon->Mask(),
+                EFalse );                              
+            }
+
+        // Pan Up?
+        if ( iPanUp )
+            {
+            // Draw the indicator
+            iSVGTFrameBufContext->BitBltMasked( iPanIndUpRect.Rect().iTl,
+                iPanIndUpIcon->Bitmap(),
+                myRect,
+                iPanIndUpIcon->Mask(),
+                EFalse );                              
+            }
+
+        // Pan Down?
+        if ( iPanDn )
+            {
+            // Draw the indicator
+            iSVGTFrameBufContext->BitBltMasked( iPanIndDownRect.Rect().iTl,
+                iPanIndDownIcon->Bitmap(),
+                myRect,
+                iPanIndDownIcon->Mask(),
+                EFalse );
+            }
+        }
+   }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::CountAnimStarted
+//  Counts the number of animations started in the SVGT content.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::CountAnimStarted()
+    {
+    iNumAnimInProgress++;
+#ifdef _DEBUG
+    iDbgNumAnimStarted++;
+#endif       
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::CountAnimPaused
+//  Counts the number of animations paused in the SVGT content.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::CountAnimPaused()
+    {
+    // Pause is for the whole content, rather than per animation.
+    // Do not reset the count of animations in progress. Once the
+    // animation is resumed it would receive as many AnimStopped()(as in
+    // iNumAnimInProgress) as the animation progresses towards completion.
+#ifdef _DEBUG
+    iDbgNumAnimPaused++;
+#endif       
+    }
+   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::CountAnimStopped
+//  Counts the number of animations stopped in the SVGT content.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::CountAnimStopped()
+    {
+    iNumAnimInProgress--;
+#ifdef _DEBUG
+    iDbgNumAnimStopped++;
+#endif           
+    }   
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::IsAnimFirst
+//  Function indicates whether the animation currently in progress is first one.
+// @return TBool - ETrue - First one
+//                 EFalse Otherwise.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::IsAnimFirst() const
+    {
+    return( iNumAnimInProgress == 0 );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::IsAnimLast
+//  Function indicates whether the animation currently in progress is the last
+//  one.
+// @return TBool - ETrue - Last one
+//                 EFalse Otherwise.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::IsAnimLast() const
+    {
+    return( iNumAnimInProgress == 0 );
+    }   
+
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::SetPointerDisplayStatusAndRedraw
+// Function sets the Pointer display status and redraws the whole control
+// inorder to update display status. Called when Pointer Hide Timer times out.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::SetPointerDisplayStatusAndRedraw(
+    TBool aIsPointerDisplayed )
+    {
+    if ( iIsPointerDisplayed != aIsPointerDisplayed )
+        {
+        iIsPointerDisplayed = aIsPointerDisplayed;   
+        //Set the MSK label
+        if(iMSKImpl &&  iScrollKey && !iPreviewMode )
+        	{
+        	iScrollKey=EFalse;
+        	TRAP_IGNORE(SetMSKLabelL());
+        	}
+        DrawDeferred();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ShowPauseIcon()
+// This function updates the pause indicator display in the main pane
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ShowPauseIcon(
+    TBool aPauseIconVisible ) // ETrue - Start Pause Blink
+    {
+    if ( iDisplayFlags & ESvgDrawPauseIndicator )
+        {       
+        if (aPauseIconVisible && !iBlinker->IsActive())
+            {
+            iBlinker->Start( KSccOneSecond/2, KSccOneSecond/2,
+                    TCallBack( BlinkPauseIcon, this ) );
+            }
+        if (!aPauseIconVisible && iBlinker->IsActive())
+            {
+            iBlinker->Cancel();
+            }
+        iPauseIconVisible = aPauseIconVisible;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::BlinkPauseIcon
+// Callback function of blink timer
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTCustControl::BlinkPauseIcon( TAny* aPtr )
+    {
+    if ( aPtr )
+        {
+        static_cast< CSVGTCustControl* >( aPtr )->DoBlinkPauseIcon();
+        }
+    return KErrNone;       
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::DoBlinkPauseIcon
+// Function which does the actual work of toggling pause indicator
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::DoBlinkPauseIcon()
+    {
+    iPauseIconVisible = !iPauseIconVisible;
+    DrawDeferred();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::FreeIcons
+// Function which frees the icons created by CreateIcons
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::FreeIcons()
+    {
+    // Pointer Icons - owned
+    delete iPointerIcon;
+    iPointerIcon = NULL;
+   
+    delete iHandIcon;
+    iHandIcon = NULL;
+   
+    delete iTextIcon;
+    iTextIcon = NULL;
+   
+    // Panning Indicator Icons - owned
+    delete iPanIndLeftIcon;
+    iPanIndLeftIcon = NULL;
+   
+    delete iPanIndRightIcon;
+    iPanIndRightIcon = NULL;
+   
+    delete iPanIndUpIcon;
+    iPanIndUpIcon = NULL;
+   
+    delete iPanIndDownIcon;
+    iPanIndDownIcon = NULL;
+   
+    // Pause Indicator Icons - owned
+    delete iPauseIcon;
+    iPauseIcon = NULL;
+    }
+
+// ----------------------------------------------------------------------------
+// CSVGTCustControl::LaunchWaitNoteL
+// Helper function for launching wait note.
+// ----------------------------------------------------------------------------
+//
+void CSVGTCustControl::LaunchWaitNoteL(
+    TInt aResourceId ) // Resource ID indicating
+                       // string to be displayed
+                       // while waiting.
+    {
+    if ( iDisplayFlags & ESvgDisplayWaitNote )
+        {
+        if( iWaitDialog )
+            {
+            delete iWaitDialog;
+            iWaitDialog = NULL;
+            }
+
+        iWaitDialog = new( ELeave ) CAknWaitDialog(
+                                    reinterpret_cast<CEikDialog**>( 
+                                    &iWaitDialog ),
+                                    ETrue /* No visibility delay =
+                                             Display Wait note immediately */ );
+
+        iWaitDialog->PrepareLC( R_SVGT_WAIT_NOTE );
+
+        HBufC* lNoteTextPtr = StringLoader::LoadLC( aResourceId );
+        iWaitDialog->SetTextL( *lNoteTextPtr );
+        CleanupStack::PopAndDestroy( lNoteTextPtr );
+
+        // Launch dialog
+        iWaitDialog->RunLD();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CSVGTCustControl::DismissWaitNote
+// Helper function for dismissing wait note.
+// ----------------------------------------------------------------------------
+//
+void CSVGTCustControl::DismissWaitNote()
+    {
+    if ( iDisplayFlags & ESvgDisplayWaitNote )
+        {
+        if( iWaitDialog )
+            {
+            TRAPD( err, iWaitDialog->ProcessFinishedL() );
+            if( err )
+                {
+                delete iWaitDialog;
+                iWaitDialog = NULL;
+                }
+            }
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CSVGTCustControl::StartProgIndTimer
+// Helper function for starting the progress indicator timer.
+// ----------------------------------------------------------------------------
+//
+void CSVGTCustControl::StartProgIndTimer( TInt aAfter ) // Time period in
+                                                        // micro-seconds after
+                                                        // after which timer
+                                                        // expires
+    {
+    // Stop the progress indicator timer if exists
+    StopProgIndTimer();
+       
+    TRAPD(err, iProgressBarTimer =
+                   CSVGTProgressBarTimer::NewL( this,
+                   iDisplayFlags & ESvgUseBackLight ) );           
+   
+    if ( err == KErrNone )
+        {
+        // Expire after aAfter microseconds.
+        iProgressBarTimer->After( aAfter );
+        }       
+    }                                            
+
+// ----------------------------------------------------------------------------
+// CSVGTCustControl::StopProgIndTimer
+// Helper function for stopping the progress indicator timer.
+// ----------------------------------------------------------------------------
+//
+void CSVGTCustControl::StopProgIndTimer()
+    {
+    // Delete the Progress Bar timer
+    if ( iProgressBarTimer )
+        {
+        delete iProgressBarTimer;
+        iProgressBarTimer = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ProcessPlayCmd
+// This function is called to perform the necessary processing for the Play
+// command.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ProcessPlayCmd()
+    {
+    // Play Command is applicable only if animations are present
+    if ( IsAnimationPresent() )
+        {
+        if ( iAnimState != ESvgAnimPlayingState )
+            {
+            // Start the backlight timer if the content is of finite duration
+            if ( IsContentFinite() )
+                {
+                if ( ( iDisplayFlags & ESvgUseBackLight ) )
+                    {
+#ifdef _DEBUG                    
+                    iEikonEnv->InfoMsg( KSccBacklightOnStr );   
+#endif 
+/*
+                    TRAPD( err, iBacklightTimer = CSVGTBacklightTimer::NewL() );
+                    if ( err == KErrNone )
+                        {
+                        iBacklightTimer->After( KSccBacklightTimerStartAfter ); 
+                        }           
+*/                       
+                    }
+                }
+
+            // Start the Progress Ind Timer if the content is of finite duration
+            if ( IsContentFinite() )
+                {
+                // Start immediately so that current count is updated.
+                StartProgIndTimer( 0 );
+                }
+           
+            if ( iAnimState == ESvgAnimStoppedState )
+                {
+                // Rewind the content
+                iSvgModule->Replay();
+                }
+            else
+                {
+                // Resume playback of the content
+                iSvgModule->Resume();
+                }
+            // Set the state variable to indicate content is playing        
+            iAnimState = ESvgAnimPlayingState;
+           
+            // Hide the display of Pause content
+            ShowPauseIcon( EFalse );
+            }
+        }
+    }
+   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ProcessPauseCmd
+// This function is called to perform the necessary processing for the Pause
+// command.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ProcessPauseCmd()
+    {
+    // Pause Command is applicable only if animations are present
+    if ( IsAnimationPresent() )
+        {
+        if ( iAnimState == ESvgAnimPlayingState )
+            {
+            if ( IsContentFinite() )
+                {
+                // Stop the progress Bar timer
+                StopProgIndTimer();
+                }
+            // Set the state variable.
+            iAnimState = ESvgAnimPausedState;
+            // Pause the content
+            iSvgModule->Pause();
+            // Show the pause indicator
+            ShowPauseIcon( ETrue );
+            }
+        }
+    }
+   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ProcessStopCmd
+// This function is called to perform the necessary processing for the Stop
+// command.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ProcessStopCmd()
+    {
+    // Stop Command is applicable only if animations are present
+    if ( IsAnimationPresent() )
+        {
+        if ( IsContentFinite() )
+            {
+            // Stop the progress Bar timer
+            StopProgIndTimer();
+            }
+        // Stop playing the content
+        // Do a pause so that the content is not rewound.
+        iSvgModule->Stop();
+       
+        // Reset the state variables
+        iAnimState = ESvgAnimStoppedState;
+        iProgIndTimeElap = 0;
+       
+        // Reset the number of animations in progress.
+        iNumAnimInProgress = 0;
+       
+        // Stop the display of the Pause indicator
+        ShowPauseIcon( EFalse );
+       
+        // Redraw the screen - so that pause icon is cleaned up
+        DrawDeferred();
+        }
+    }       
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::IsVoiceCallActive 
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::IsVoiceCallActive()
+    {
+    TBool call;
+    TInt type = 0; 
+    // Check whether a call is a voice call
+    TInt error = iSystemState.Get( KPSUidCtsyCallInformation,
+                                   KCTsyCallType, type );
+    if ( !error && type == EPSCTsyCallTypeCSVoice )
+        {
+        call = ETrue;
+        }
+    else
+        {
+        call = EFalse;
+        }
+         
+    TInt state = 0;
+    // Check whether the voice call is active
+    error = iSystemState.Get( KPSUidCtsyCallInformation, 
+             KCTsyCallState, state );
+    if ( call && !error && state == EPSCTsyCallStateConnected )
+        {
+        return ETrue;
+        }
+    else
+        {       
+        return EFalse;
+        }   
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::RemoveInfoNote
+// This function is called by the periodic timer to remove the info note that
+// is not removed because of starvation.
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTCustControl::RemoveInfoNote( TAny* aPtr )
+    {
+    CSVGTCustControl* thisPtr = static_cast< CSVGTCustControl* >( aPtr );
+    if ( thisPtr && thisPtr->iInfoNote )
+        {
+        delete thisPtr->iInfoNote;
+        thisPtr->iInfoNote = NULL;
+        }
+    if ( thisPtr )       
+        {
+        if ( thisPtr->iNoteRemoverTimer->IsActive() )
+            {
+            thisPtr->iNoteRemoverTimer->Cancel();
+            }
+        }
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::DoRotation()
+// This function rotates the presentation in clockwise direction with given
+// angle about bitmap center
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::DoRotation( const TInt aAngle )
+    {
+    const TInt xCenter = iSVGTBitMap->SizeInPixels().iWidth / 2; 
+    const TInt yCenter = iSVGTBitMap->SizeInPixels().iHeight / 2;
+    const TReal32 angleInRadians = KDegreesToRadiansFactor * TReal32( aAngle );
+    iSvgModule->Rotate( angleInRadians, xCenter, yCenter );
+    // Do a Redraw
+    iSvgModule->Redraw();
+    UpdatePointer();
+    }
+
+#ifdef SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::DoTextSelectionL()
+// This function displays the existing text in the text/textArea in a
+// read-only dialog so that the user can copy text into system clipboard
+// from it.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::DoTextSelectionL(
+    TDes& aText // Text Content descriptor
+    ) const
+    {
+    CAknTextQueryDialog* dlgPtr = CAknTextQueryDialog::NewL( aText );
+    dlgPtr->ExecuteLD( R_SVGT_TEXT_SELECTION_DIALOG );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::DoTextEditingL()
+// This function displays the existing text in the text/textArea element which
+// is editable and returns the modified text in the same descriptor.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::DoTextEditingL(
+    TBool aIsTextElement, // Bool indicating whether element is text/textArea
+    TInt aElemHandle, // Element handle from engine
+    TDes& aText ) // Text Content descriptor
+    {
+    const TChar KOpeningBraces ='<';
+    const TChar KClosingBraces ='>';
+    TBool lTextQueryDone = EFalse;
+
+    while ( !lTextQueryDone )
+        {
+        CAknTextQueryDialog* dlgPtr = CAknTextQueryDialog::NewL( aText );
+        dlgPtr->SetPredictiveTextInputPermitted( ETrue );
+        TInt retVal = dlgPtr->ExecuteLD( R_SVGT_EDIT_TEXT_QUERY_DIALOG );
+        if (retVal)
+            {
+            if ( !iIsTextChanged )
+                {
+                // Set iIsTextChanged to indicate that text content is
+                // changed and changes need to be saved
+                iIsTextChanged = ETrue;
+                }
+           
+            if( aText.Locate( KOpeningBraces ) != KErrNotFound ||
+                    aText.Locate( KClosingBraces ) != KErrNotFound )
+                {
+                // display a error not with the msg that the text area
+                // cant contain < or > since it will fuddle up the xml parsing
+                DisplayInfoNoteL(R_SVGT_BRACES_FOUND_IN_TEXTAREA, ETrue );
+                }
+                else
+                    {
+                    // User entered valid text, go out of loop
+                    lTextQueryDone = ETrue;
+                    }
+            }
+            else
+                {
+                // User pressed cancel, no need to change the text
+                // return back to caller
+                return;
+                }
+        }
+
+    if ( aIsTextElement )
+        {
+        // Update the text element in the engine
+        iSvgModule->SetTextForTextElement( aElemHandle, aText );
+        }
+        else
+            {
+            // Update the textArea element in the engine
+            iSvgModule->SetTextForTextAreaElement( aElemHandle, aText );
+            }
+    // Redraw the screen to reflect the new changes
+    iSvgModule->Redraw();
+           
+
+    }
+#endif // SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE 
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::FPRCenter()
+// This function calculates the center of the four point rectangle
+// -----------------------------------------------------------------------------
+//
+TPoint CSVGTCustControl::FPRCenter(
+    const MRect* aBBoxRect    // Four point rect
+    ) const
+    {
+    TPoint pt1( 0, 0 ), pt2( 0, 0 ), pt3( 0, 0 ), pt4( 0, 0 );
+    TPoint lCentre;
+
+    if ( aBBoxRect )
+        {
+        aBBoxRect->GetPoints( pt1, pt2, pt3, pt4 );
+        // Center of the rectangle is the center of the diagonal as
+        // diagonals are congruent in a rectangle
+        lCentre = TPoint( ( pt1.iX + pt3.iX ) / 2, ( pt1.iY + pt3.iY )/2 );
+        }
+    return lCentre;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::FPRIntersects()
+// This function calculates whether the FPR intersects with the rectangle
+// -----------------------------------------------------------------------------
+TBool CSVGTCustControl::FPRIntersects(
+    const MRect* aBBoxRect,   // Four point rect
+    const TRect& aRect        // Rectangle
+    ) const
+    {
+    TPoint pt1( 0, 0 ), pt2( 0, 0 ), pt3( 0, 0 ), pt4( 0, 0 );
+    if ( aBBoxRect )
+        {
+        aBBoxRect->GetPoints( pt1, pt2, pt3, pt4 );   
+        // TODO: Need to use clipping algorithm here - to check whether line is
+        // within rectangle.
+        TInt32 maxx,maxy,minx,miny;
+        
+        maxx = pt1.iX;
+        if(pt2.iX > maxx)
+        	maxx = pt2.iX;
+        if(pt3.iX > maxx)
+        	maxx = pt3.iX;
+        if(pt4.iX > maxx)
+        	maxx = pt4.iX;
+        
+        maxy = pt1.iY;
+        if(pt2.iY > maxy)
+        	maxy = pt2.iY;
+        if(pt3.iY > maxy)
+        	maxy = pt3.iY;
+        if(pt4.iY > maxy)
+        	maxy = pt4.iY;
+        
+        minx = pt1.iX;
+        if(pt2.iX < minx)
+        	minx = pt2.iX;
+        if(pt3.iX < minx)
+        	minx = pt3.iX;
+        if(pt4.iX < minx)
+        	minx = pt4.iX;
+        
+        miny = pt1.iY;
+        if(pt2.iY < miny)
+        	miny = pt2.iY;
+        if(pt3.iY < miny)
+        	miny = pt3.iY;
+        if(pt4.iY < miny)
+        	miny = pt4.iY;
+        
+
+        TPoint topleft(aRect.iTl);
+        TPoint bottomright(aRect.iBr);
+
+	    if ( ( bottomright.iX < minx ) || ( maxx < topleft.iX ) ||
+         	 ( bottomright.iY  < miny) || ( maxy < topleft.iY ) )
+        {
+        return EFalse;
+        }
+        
+        return ETrue;
+        }
+    return EFalse;   
+    }
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::FPR2PointArrayL()
+// This function converts a Four Point Rect into an array of points
+// -----------------------------------------------------------------------------
+void CSVGTCustControl::FPR2PointArrayL(
+    const MRect* aBBoxRect,         // Four Point Rect
+    CArrayFix<TPoint>*& aArrayPtr   // Array of Points
+    )  const
+    {
+    aArrayPtr = new (ELeave) CArrayFixFlat<TPoint> ( 4 );
+    CleanupStack::PushL( aArrayPtr );
+    TPoint pt1( 0, 0 ), pt2( 0, 0 ), pt3( 0, 0 ), pt4( 0, 0 );
+   
+    if ( aBBoxRect )
+        {
+        aBBoxRect->GetPoints( pt1, pt2, pt3, pt4 );
+        }
+    aArrayPtr->AppendL( pt1 );
+    aArrayPtr->AppendL( pt2 );
+    aArrayPtr->AppendL( pt4 );
+    aArrayPtr->AppendL( pt3 );   
+   
+    CleanupStack::Pop( aArrayPtr ); // Ownership transferred to caller
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::Draw
+// Reimplements CCoeControl::Draw to draw this control's view to the screen
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::Draw(
+    const TRect& aRect ) const
+    {
+    iSVGTFrameBufContext->Clear();
+   
+    if ( iSVGTBitMap && iSVGTBitMapMask )
+        {
+        iSVGTFrameBufContext->BitBltMasked( iViewerPaneRect.Rect().iTl,
+                                            iSVGTBitMap,
+                                            iViewerPaneRect.Rect(),
+                                            iSVGTBitMapMask,
+                                            ETrue );
+        }
+   
+    // Draw the bounding box
+    DrawFindTextBBox( aRect );
+
+    if ( iDisplayFlags & ESvgDrawPanIndicator )
+        {
+        // Draw Panning Indicator
+        DrawPanInd();
+        }
+   
+    // draw paused icon
+    if ( iPauseIconVisible )
+        {
+        iSVGTFrameBufContext->BitBltMasked( iPauseRect.Rect().iTl,
+            iPauseIcon->Bitmap(),
+            Rect(),
+            iPauseIcon->Mask(),
+            EFalse ); 
+        }
+
+    
+    // Draw Pointer
+    if ( iIsPointerDisplayed && iDisplayFlags & ESvgDrawPointer )
+        {
+        DrawPointer();   
+        }
+
+    // Get the standard graphics context
+    CWindowGc& gc = SystemGc();
+    // Blit our framebuffer bitmap to the System GC   
+    gc.BitBlt( iViewerPaneRect.Rect().iTl, iSVGTFrameBufBitMap );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ConstructFromResourceL
+// Since this control is to be displayed in a dialog, this function is
+// reimplented from CCoeControl::ConstructFromResourceL inorder to read
+// resource values from resource file.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ConstructFromResourceL(
+    TResourceReader& /*aReader*/) // Resource Reader
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::SizeChanged
+// Handles resizing of control reimplementing CCoeControl::SizeChanged.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::SizeChanged()
+    {
+    TRect myRect = Rect();
+   
+   // Commented this section because,Indicators were not displaying in
+   // case of theme change
+   // if ( myRect == iCurrentLayout )
+   //    {
+   // Layout has not changed, do nothing
+   // return;
+   // } 
+   // 
+       
+    if ( AknLayoutUtils::ScalableLayoutInterfaceAvailable() )
+        {
+        TInt lVariety = 0; // Normal Screen
+        if ( iIsFullScreenOn )
+            {
+            lVariety = 1; // Full Screen
+            }
+       
+        // Main Viewer Pane
+        iViewerPaneRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::main_viewer_pane( lVariety ) );
+       
+        // Panning Indicators
+        iPanIndLeftRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::main_viewer_pane_g3( lVariety ) );
+        iPanIndRightRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::main_viewer_pane_g4( lVariety ) );
+        iPanIndUpRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::main_viewer_pane_g1( lVariety ) );
+        iPanIndDownRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::main_viewer_pane_g2( lVariety ) );
+      // Panning Indicators Rectangle for Touch Area
+      	iPanIndLeftAidRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::aid_main_viewer_pane_g3( lVariety ) );
+        iPanIndRightAidRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::aid_main_viewer_pane_g4( lVariety ) );
+        iPanIndUpAidRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::aid_main_viewer_pane_g1( lVariety ) );
+        iPanIndDownAidRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::aid_main_viewer_pane_g2( lVariety ) );
+       
+        // Pointers
+        iPointerRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::main_viewer_pane_g5( lVariety ) );
+        iHandRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::main_viewer_pane_g7( lVariety ) );
+        iTextRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::main_viewer_pane_g7( lVariety ) );
+       
+        // Pause Indicator
+        iPauseRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::main_viewer_pane_g8( lVariety ) );
+
+        // Aid for display of pointer
+        // In order to draw the cursor in the correct location on
+        // the screen, the viewer needs to know the offsetX and offSetY
+        // of the cursor hotspot in the icon bitmap.
+        // Because of Scalable UI the size of the icons can be changed
+        // and this would result in the change of these co-ordinates.
+        // he viewer needs to get this information from the LAF
+        // so that viewer can draw the cursor in the correct position
+        // on the screen.
+       
+        iPointerAidRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::aid_hotspot_pointer_arrow_pane() );
+        iHandAidRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::aid_hotspot_pointer_hand_pane() );
+        iTextAidRect.LayoutRect( myRect,
+            AknLayoutScalable_Apps::aid_hotspot_pointer_text2_pane() );
+        }
+        else
+            {
+            // Hardcode the values for normal resolution (172x208)
+           
+            iViewerPaneRect.LayoutRect( myRect,
+                0, 0, 0, 0, 0, myRect.Width(), myRect.Height() );
+               
+            iPanIndLeftRect.LayoutRect( myRect,
+                    0, 0, ( myRect.Height() / KSccConstTwo ) - 8, 0, 0, 6, 15 );
+            iPanIndRightRect.LayoutRect( myRect,
+                    0, ( myRect.Width() - 6 ),
+                    (myRect.Height() / KSccConstTwo ) - 8, 0, 0, 6, 15 );
+            iPanIndUpRect.LayoutRect( myRect,
+                    0, ( ( myRect.Width() / KSccConstTwo ) - 8 ),  0, 0, 0,
+                    15, 6 );
+            iPanIndDownRect.LayoutRect( myRect,
+                    0, ( ( myRect.Width() / KSccConstTwo ) - 8 ), 
+                    myRect.Height() - 6, 0, 0, 15, 6 );
+
+            iPointerRect.LayoutRect( myRect,
+                    0, 0, 0, 0, 0, 18, 24 );
+            iHandRect.LayoutRect( myRect,
+                    0, 0, 0, 0, 0, 18, 24 );
+            iTextRect.LayoutRect( myRect,
+                    0, 0, 0, 0, 0, 18, 24 );
+
+           
+            iPauseRect.LayoutRect(myRect,
+                    0, 0, 0, 0, 0, 13, 13 );
+           
+            iPointerAidRect.LayoutRect( myRect,
+                    0, 0, 0, 0, 0, 0, 0 );
+            iHandAidRect.LayoutRect( myRect,
+                    0, 0, 0, 0, 0, 0, 0 );                   
+            iTextAidRect.LayoutRect( myRect,
+                    0, 0, 0, 0, 0, 0, 0 );                   
+            }
+   
+    // Set the size of the bitmaps
+    // No Error Handling for SetSize
+    // Pointers
+    AknIconUtils::SetSize( iPointerIcon->Bitmap(), iPointerRect.Rect().Size() );
+    AknIconUtils::SetSize( iHandIcon->Bitmap(), iHandRect.Rect().Size() );
+    AknIconUtils::SetSize( iTextIcon->Bitmap(), iTextRect.Rect().Size() );
+
+    // Panning Indicators
+
+    // Left Ind
+    AknIconUtils::SetSize( iPanIndLeftIcon->Bitmap(),
+            iPanIndLeftRect.Rect().Size() );
+
+    // Right Ind
+    AknIconUtils::SetSize( iPanIndRightIcon->Bitmap(),
+            iPanIndRightRect.Rect().Size() );
+   
+    // Up Ind
+    AknIconUtils::SetSize( iPanIndUpIcon->Bitmap(),
+            iPanIndUpRect.Rect().Size() );
+
+    // Down Ind
+    AknIconUtils::SetSize( iPanIndDownIcon->Bitmap(),
+            iPanIndDownRect.Rect().Size() );
+
+    // Pause Ind
+    AknIconUtils::SetSize( iPauseIcon->Bitmap(),
+            iPauseRect.Rect().Size() );
+
+    // Recreate the framebuffer.
+    TRAPD( errSwitchMode, SwitchScreenModeL() );
+    if ( errSwitchMode != KErrNone )
+        {
+        // Let environment handle error
+        iCoeEnv->HandleError( errSwitchMode );
+        }
+   
+    // Dummy mouse-move to the engine
+    iSvgModule->MouseMove( iPointerX, iPointerY );                   
+   
+    // Save current layout so that we know if the Layout changed.
+    iCurrentLayout = myRect;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::AnimationStarted
+// Handles callback notification from SVG engine indicating Animation Started.
+// Reimplements MSvgAnimationListener::AnimationStarted.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::AnimationStarted( TBool aIsAnimationIndefinite )
+    {
+    // If the content contains any infinite animations - then the
+    // backlight behaves normally.
+    if ( !IsContentFinite() )
+        {
+        return ETrue;
+        }
+       
+    if ( aIsAnimationIndefinite )
+        {
+#ifdef _DEBUG
+        iEikonEnv->InfoMsg( KSccBacklightOffStr );   
+#endif 
+       
+        }
+        else
+            {
+            if ( IsAnimFirst() )
+                {               
+#ifdef _DEBUG                    
+                iEikonEnv->InfoMsg( KSccBacklightOnStr );   
+#endif 
+                if ( ( iDisplayFlags & ESvgUseBackLight ) )
+                    {
+                        
+                    }
+                }
+            CountAnimStarted();
+            }
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::AnimationEnded
+// Handles callback notification from SVG engine indicating Animation Ended.
+// Reimplements MSvgAnimationListener::AnimationEnded.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::AnimationEnded()
+    {
+    // If the content contains any infinite animations - then the
+    // backlight behaves normally.
+    if ( !IsContentFinite() )
+        {
+        return ETrue;
+        }
+   
+    CountAnimStopped();
+    if ( IsAnimLast() )
+        {
+#ifdef _DEBUG
+        iEikonEnv->InfoMsg( KSccBacklightOffStr );   
+#endif 
+        // All animations have ended
+       
+        }
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::AnimationPaused
+// Handles callback notification from SVG engine indicating Animation Paused.
+// Reimplements MSvgAnimationListener::AnimationPaused.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::AnimationPaused()
+    {
+    // If the content contains any infinite animations - then the
+    // backlight behaves normally.
+    if ( !IsContentFinite() )
+        {
+        return ETrue;
+        }
+   
+#ifdef _DEBUG
+    iEikonEnv->InfoMsg( KSccBacklightOffStr );   
+#endif 
+    // Animation is paused,
+    CountAnimPaused();
+
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::UpdateProgressBar
+// This function updates the progress bar in the navi pane. It is called back
+// by the progress bar timer.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::UpdateProgressBar()
+    {
+    
+    TReal lSecElapsedRounded = 0.0;
+    TReal lSecElapsedReal    = 0.0;
+    TReal lTotalTimeReal     = 0.0;
+    TReal lTotalTimeRounded  = 0.0;
+    TUint32 lTimeElapsed     = 0;
+        
+    lSecElapsedReal = (TReal)iSvgModule->MediaTime() 
+            / KSccNumMSecPerSec;
+            
+    lTotalTimeReal = (TReal)iDuration / KSccNumMSecPerSec;      
+        if ( iProgressBarDrawImpl )
+            {
+            
+        
+           // Round off the Elapsed time inorder to display time accurately.
+           Math::Round( lSecElapsedRounded, lSecElapsedReal, 0 );
+        
+           // Round off the Total time inorder to display time accurately.
+           Math::Round( lTotalTimeRounded, lTotalTimeReal, 0 );
+
+           lTimeElapsed = lSecElapsedRounded;
+           TRAPD( err, iProgressBarDrawImpl->DrawProgressBarL( lTimeElapsed, 
+           lTotalTimeRounded ) );
+           if ( err != KErrNone )
+              {
+              // Error Case, Nothing is done now.
+               }    
+            
+      
+           // Stop the Progress Bar timer
+           StopProgIndTimer();
+           iProgIndTimeElap = lSecElapsedReal ;
+   
+            }
+            
+        // Check whether end of animation is reached.
+        // 01-Feb-2008 Fix for TSW Id "CGSR-7B6DFW"
+        // Earlier this check was happening only if iProgressBarDrawImpl is there
+        // for screen saver iProgressBarDrawImpl is not there but still the animation
+        // should work for the duration set for ScreenSaver
+        
+     if ( lSecElapsedReal >= (TReal)iDuration / KSccNumMSecPerSec )
+        {
+        TInt err = 0;
+        // Reset the state variables
+        iProgIndTimeElap = 0;
+        
+        // Stop the animation and rewind.
+        TRAP(err, ProcessViewerCommandL( ESvgtDlgStopCommand ) );
+        if ( err != KErrNone )
+            {
+            // Error Case, Nothing is done now.               
+            }
+        // If loop is on then replay the content.
+        if ( !iIsLoopOn )
+            {
+            // Animation is done, no need to continue progress bar.
+            return;
+            }
+            else
+                {
+                // Loop option enabled. Replay content.
+                TRAP( err, ProcessViewerCommandL( ESvgtDlgPlayCommand ));
+                if ( err != KErrNone )
+                    {
+                    // Error Case, Nothing is done now.
+                    }
+                return;
+                }
+        }        
+            
+            
+            
+            
+    // Restart the timer
+    StartProgIndTimer( KSccProgIndTimerYieldDur ); 
+    }   
+
+
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::PointerInactivityTimeout()
+// This function updates the pointer display status in the navi pane.
+// It is called back by the pointer hide timer.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::PointerInactivityTimeout()
+    {
+    // UI Spec: Hide Pointer as time of inactivity has passed
+    SetPointerDisplayStatusAndRedraw( EFalse );
+   
+    //Set the MSK label
+    if(iMSKImpl && !iPreviewMode )
+    	{
+    	TRAP_IGNORE(SetMSKLabelL());
+    	}
+   		
+    // Delete the inactivity timer
+    delete iInactivityTimer;
+    iInactivityTimer = NULL;
+    }
+
+#ifdef SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::TextAreaEntered()
+// This callback is called to notify when a pointer enters a textbox element.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::TextAreaEntered( TInt aTextAreaHandle )
+    {
+    // Save the current element handle
+    iCurrentTextElementId = aTextAreaHandle;
+   
+    // Indicate that it is a text area element
+    iIsCurrentTextElement = EFalse;
+   
+    // check if there is a 'a' element or interactive element
+    // within which text is present
+    
+    if(iAElement || iPointerDownAnimation)
+    	{
+    	iPointerType=ESvgPointerHand;	
+    	}
+    else
+    	{
+    	// Text symbol to indicate user can perform some action by clicking
+    	iPointerType = ESvgPointerText;
+    	}
+    // Remember that textArea element is entered, so that
+    // subsequent text element notifications are ignored
+    iTextAreaEntered = ETrue;
+   
+    // Enable Select Menu Option
+    iIsTextSelectOn = ETrue;
+    HBufC* lStrPtr = HBufC::New( KSccMaxTextLength );
+    if ( !lStrPtr )
+        {
+        // Error while allocation, no memory
+        iCoeEnv->HandleError( KErrNoMemory );
+        return ETrue;
+        }
+    TPtr lPtr = lStrPtr->Des();
+   
+    // Check whether the Text is editable
+    iSvgModule->GetTextForTextAreaElement( aTextAreaHandle,
+        iIsTextEditOn,
+        lPtr );   
+
+    delete lStrPtr;
+   
+    //Display MSK label Select/Edit
+    if(iMSKImpl && !iPreviewMode)
+    	{
+    	TRAP_IGNORE(SetMSKLabelL());	
+    	}
+   	
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::TextAreaExited()
+// This callback is called to notify when a pointer exits a textbox element.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::TextAreaExited( TInt /* aTextAreaHandle */)
+    {
+    // Reset the current element handle
+    iCurrentTextElementId = 0;
+   
+    // Reset the element flag to text element
+    iIsCurrentTextElement = ETrue;
+   
+    // check if there is a 'a' element or interactive element
+    // within which text is present
+    if(iAElement || iPointerDownAnimation)
+    	{
+    	iPointerType=ESvgPointerHand;	
+    	}
+    else
+    	{
+    	// Reset the pointer to default pointer
+    	iPointerType = ESvgPointerDefault;   
+    	}
+    // Remember that textArea element is exitted
+    iTextAreaEntered = EFalse;
+
+    // Disable the Select and Edit menu option
+    iIsTextSelectOn = EFalse;
+    iIsTextEditOn = EFalse;
+    //Set the MSK label
+    if(iMSKImpl && !iPreviewMode)
+    	{
+    	TRAP_IGNORE(SetMSKLabelL());	
+    	}
+   
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::TextAreaActivated()
+// This callback is called to notify that a text element has been activated.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::TextAreaActivated( TInt aTextAreaHandle )
+    {
+    if (iSelectCause != ESvgInvalidSelectCause )
+        {
+        // Ignore this callback as it was already processed.
+        return ETrue;
+        }
+    // Set the cause for select operation as text area so that
+    // subsequent events trigerred are ignored.
+    iSelectCause = ESvgTextAreaSelectCause;
+
+    HBufC* lStrPtr = HBufC::New( KMaxEditorTextLength );         
+    if ( !lStrPtr )
+        {
+        // Error while allocation, no memory
+        iCoeEnv->HandleError( KErrNoMemory );
+        return ETrue;
+        }
+    TPtr lPtr = lStrPtr->Des();
+   
+    // Check whether the Text is editable
+    iSvgModule->GetTextForTextAreaElement( aTextAreaHandle,
+        iIsTextEditOn,
+        lPtr );
+       
+    if ( iIsTextEditOn && !iSvgModule->IsLoading() )
+        {
+        TRAPD( err, DoTextEditingL(
+                        EFalse,              // Text Area Element
+                        aTextAreaHandle,     // Element Handle
+                        lPtr ) );            // buffer pointer
+        if ( err != KErrNone )
+            {
+            // No error handling done.
+            }
+                       
+        }
+        else
+            {
+            TRAPD( err,
+                DoTextSelectionL( lPtr );
+                );
+            if ( err != KErrNone )
+                {
+                // No error handling done.
+                }
+            }
+   
+    delete lStrPtr;       
+    return ETrue;
+    }
+   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::TextEntered()
+// This callback is called to notify that a text element has been entered.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::TextEntered( TInt aTextHandle )
+    {
+    if ( iTextAreaEntered )
+        {
+        // Ignore all text element notifications when cursor is
+        // within a textArea element
+        return ETrue;
+        }
+       
+    // Save the current element handle
+    iCurrentTextElementId = aTextHandle;
+   
+    // Set the flag to indicate element type is text element
+    iIsCurrentTextElement = ETrue;
+   
+    // check if there is a 'a' element or interactive element
+    // within which text is present
+    
+    if(iAElement || iPointerDownAnimation)
+    	{
+    	iPointerType=ESvgPointerHand;	
+    	}
+    else
+    	{
+    	// Text symbol to indicate user can perform some action by clicking
+    	iPointerType = ESvgPointerText;
+    	}
+    // Enable Select Menu Option
+    iIsTextSelectOn = ETrue;
+
+    HBufC* lStrPtr = HBufC::New( KSccMaxTextLength );
+   
+    if ( !lStrPtr )
+        {
+        // Error while allocation, no memory
+        iCoeEnv->HandleError( KErrNoMemory );
+        return ETrue;
+        }
+   
+    TPtr lPtr = lStrPtr->Des();
+   
+    // Check whether the Text is editable
+    iSvgModule->GetTextForTextElement( aTextHandle,
+        iIsTextEditOn,
+        lPtr );
+   
+    delete lStrPtr;
+     // Display MSK label Select/Edit
+    if(iMSKImpl && !iPreviewMode)
+    	{
+    	TRAP_IGNORE(SetMSKLabelL());	
+    	}
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::TextExited()
+// This callback is called to notify that a text element has been exited.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::TextExited( TInt /* aTextHandle */ )
+    {
+    if ( iTextAreaEntered )
+        {
+        // Ignore all text element notifications when cursor is
+        // within a textArea element
+        return ETrue;
+        }
+           
+    // Reset the current element handle
+    iCurrentTextElementId = 0;
+    
+    // check if there is a 'a' element or interactive element
+    // within which text is present
+    if(iAElement || iPointerDownAnimation)
+    	{
+    	iPointerType=ESvgPointerHand;	
+    	}
+    else
+    	{
+    	// Reset the pointer to default
+    	iPointerType = ESvgPointerDefault;
+    	}
+    // Disable the Select and Edit menu option
+    iIsTextSelectOn = EFalse;
+    iIsTextEditOn = EFalse;
+   
+    //Set the MSK label
+    if(iMSKImpl && !iPreviewMode)
+    	{
+    	TRAP_IGNORE(SetMSKLabelL());	
+    	}
+       	
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::TextActivated()
+// This callback is called to notify that a text element has been activated.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::TextActivated( TInt aTextHandle )
+    {
+    if (iSelectCause != ESvgInvalidSelectCause )
+        {
+        // Ignore this callback as it was already processed.
+        return ETrue;
+        }
+    // Set the cause for select operation as text so that
+    // subsequent events trigerred are ignored.
+    iSelectCause = ESvgTextSelectCause;
+    HBufC* lStrPtr = HBufC::New( KMaxEditorTextLength );         
+    if ( !lStrPtr )
+        {
+        // Error while allocation, no memory
+        iCoeEnv->HandleError( KErrNoMemory );
+        return ETrue;
+        }
+    TPtr lPtr = lStrPtr->Des();
+
+    // Check whether the Text is editable
+    iSvgModule->GetTextForTextElement( aTextHandle,
+        iIsTextEditOn,
+        lPtr );
+
+    if ( iIsTextEditOn && !iSvgModule->IsLoading())
+        {
+        TRAPD( err,
+            DoTextEditingL( ETrue,             // Text Element
+                            aTextHandle ,      // Element Handle
+                            lPtr );            // Buffer Pointer
+            );
+        if ( err != KErrNone )
+            {
+            // No Error handling done.
+            }
+        }
+        else
+            {
+            TRAPD( err,
+                DoTextSelectionL( lPtr );
+                );
+            if ( err != KErrNone )
+                {
+                // No Error handling done.
+                }
+            }
+    delete lStrPtr;
+    return ETrue;
+    }
+   
+#endif // SVGTUICONTROL_DBG_TEXT_EDIT_SELECT_API_ENABLE   
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::InteractiveElementEntered()
+// This callback is called to notify that an interactive element has been entered.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::InteractiveElementEntered(TPtrC /*aElementIdPtr*/, TUint16 aInteractonTypeList )
+    {
+  
+    if( (aInteractonTypeList & ESvgInteractiveEventClick )||
+        (aInteractonTypeList & ESvgInteractiveEventMousedown ) ||
+        (aInteractonTypeList & ESvgInteractiveEventMouseup ) )
+        {
+        
+        iPointerType = ESvgPointerHand;
+        
+        // Increment the count maintained for overlapping interactive elements
+        // with pointer-down events so that the iPointertype is set properly
+        iInteractiveElementEnteredCnt++;    
+        
+        // Need to set flag so that when the element is within 
+        // textarea or text
+        iPointerDownAnimation=ETrue;
+            
+        // Sets the MSK label
+        if(iMSKImpl && !iPreviewMode)
+    	    {
+    	    TRAP_IGNORE(SetMSKLabelL());	
+    	    }
+        }
+    return ETrue;
+    }
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::InteractiveElementExited()
+// This callback is called to notify that an interactive element has been exited.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::InteractiveElementExited(TPtrC /*aElementIdPtr*/)
+    {
+    
+    // The count of interactive elements with pointer down events registered
+    // is decremented 
+    if(iPointerDownAnimation)
+        {
+        iInteractiveElementEnteredCnt--;    
+        }
+    
+    
+    if(!iInteractiveElementEnteredCnt)
+        {
+        iPointerType = ESvgPointerDefault;
+        
+        iPointerDownAnimation=EFalse;
+        //Set the MSK label
+        if(iMSKImpl && !iPreviewMode)
+    	    {    	
+    	    TRAP_IGNORE(SetMSKLabelL());	
+    	    }
+        }
+       
+    return ETrue;
+    }
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ReportAllElements
+// Implements MSvgLoadingListener::ReportAllElements.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::ReportAllElements()
+    {
+    return ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::WillAssignImageData
+// Implements MSvgLoadingListener::WillAssignImageData.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::WillAssignImageData()
+    {
+    // Return ETrue to indicate that AssignImageData will be used to
+    // asynchronously load the image in the engine
+    if(iProgressiveRendering)
+    	{
+    	return ETrue;
+    	}
+    else
+    	{
+    	return EFalse;
+    	}
+	}
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ImageDataReference
+// Implements MSvgLoadingListener::ImageDataReference.
+// -----------------------------------------------------------------------------
+//
+void CSVGTCustControl::ImageDataReference( const TDesC& aUri )
+    {
+    CSvgtEvent* event = NULL;
+    if ( aUri.Length() > KEmbededImageTagLength &&
+        aUri.Left(KEmbededImageTagLength) == KDataTagName )
+        {
+        event = new CSvgtEventEmbededImage(aUri);
+        }
+    else
+        {
+        event = new CSvgtEventFetchImage(aUri);
+        }
+    if ( iEventHandlerAO )
+        {
+        iEventHandlerAO->AddEventToList( event );       
+        iEventHandlerAO->MakeRequestComplete( KErrNone );
+        }  
+    }
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ReportAllElements
+// Implements MSvgLoadingListener::DocumentStart.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::DocumentStart()
+    {
+    return EFalse;
+    }
+   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::DocumentEnd
+// Implements MSvgLoadingListener::DocumentEnd.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::DocumentEnd()
+    {
+    if(iProgressiveRendering)
+        {
+        iEventHandlerAO->SetDocumentComplete();
+        iEventHandlerAO->AddRedrawEventToList( ETrue );
+        iEventHandlerAO->MakeRequestComplete( KErrNone );
+        }
+    return EFalse;
+    }
+   
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ElementStart
+// Implements MSvgLoadingListener::ElementStart.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::ElementStart( const TDesC& aTagName,
+                    MSvgAttributeList& /*aAttributeList*/)
+    {
+    if ( iProgressiveRendering && aTagName == KSvgTagName && iEngineInitialized
+                                                                 == EFalse )
+        {
+        iEngineInitialized = ETrue;
+        iSvgModule->AddListener( static_cast < MSvgViewPortListener*>(this), ESvgViewPortListener );
+        iSvgModule->InitializeEngine( NULL, EFalse);
+        }
+    else if ( iProgressiveRendering )
+        {
+//        iEventHandlerAO->RequestRedraw();
+//        User::After( 10 * 1000 );
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ElementEnd
+// Implements MSvgLoadingListener::ElementEnd.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::ElementEnd( const TDesC& /* aTagName */)
+    {
+    if(iProgressiveRendering)
+        {
+        iEventHandlerAO->AddRedrawEventToList();
+        iEventHandlerAO->MakeRequestComplete( KErrNone );
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ExternalDataRequested
+// Implements MSvgLoadingListener::ExternalDataRequested.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::ExternalDataRequested( const TDesC& /* aUri */)
+    {
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ExternalDataReceived
+// Implements MSvgLoadingListener::ExternalDataReceived.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::ExternalDataReceived( const TDesC& /* aUri */)
+    {
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::ExternalDataRequestFailed
+// Implements MSvgLoadingListener::ExternalDataRequestFailed.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::ExternalDataRequestFailed( const TDesC& /* aUri */)
+    {   
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTCustControl::UnsupportedElement
+// Implements MSvgLoadingListener::UnsupportedElement.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTCustControl::UnsupportedElement( const TDesC& /* aTagName */,
+                    MSvgAttributeList& /* aAttributeList*/ )
+    {
+    return EFalse;
+    }
+void CSVGTCustControl::ImagesLoaded(TInt aError)
+    {
+    if(aError != KErrNone)
+        {
+        if(!iIsWaitNoteDisplayed)
+            {
+            iIsWaitNoteDisplayed = ETrue;
+            TRAP_IGNORE( DisplayInfoNoteL( R_SVGT_FILE_NOT_COMPLETE, ETrue ) );
+            }
+        }
+    }
+
+void CSVGTCustControl::DoExitFromDialogL()
+    {
+    if ( iExitObserver )
+        {
+        iExitObserver->HandleApplicationExitL(EEikCmdExit);
+        }
+    }
+   
+void CSVGTCustControl::AssignImageData( const TDesC& aUri, HBufC8* aData )
+    {
+    if(aData)
+        {
+        iSvgModule->AssignImageData(aUri, aData);
+        // Do a redraw to reflect the image loaded
+        iSvgModule->Redraw();
+        }
+    else
+        {
+        // Show information note
+        if(!iIsWaitNoteDisplayed)
+            {
+            iIsWaitNoteDisplayed = ETrue;
+            TRAP_IGNORE( DisplayInfoNoteL( R_SVGT_FILE_NOT_COMPLETE, ETrue ) );
+            }
+        }
+    }
+TInt CSVGTCustControl::DoHandleLoadingThreadError()
+    {
+    TInt lErrCode = KErrNone;
+    // An error note "Unable to open file" for eg. should be displayed
+    // in the following conditions
+    //  a. Error Object contains NULL. This means possible out of memory
+    //     when create error object.
+    //  b. Error Object has an error which is not a warning - This
+    //     indicates unrecoverable error in parsing -
+    //     invalid/corrupted content
+    if ( (! iLoadingThreadError ) || ( iLoadingThreadError &&
+                                       iLoadingThreadError->HasError() &&
+                                       !iLoadingThreadError->IsWarning() ) )
+        {
+        TRAP_IGNORE( DisplayInfoNoteL( R_SVGT_FILE_OPEN_FAILURE, ETrue ) );
+   
+        // Exiting from the dialog   
+        if ( iLoadingThreadError )
+            {
+            lErrCode = iLoadingThreadError->SystemErrorCode();
+            if ( lErrCode == KErrNone )
+                {
+                lErrCode = KErrGeneral;
+                }
+            }
+        else
+            {
+            lErrCode = KErrNoMemory;
+            }
+        }
+
+    if ( lErrCode == KErrNone )
+        {
+// Placed into the DoPostLoadFuncL
+        }
+
+    return lErrCode;
+    }
+   
+CSVGTCustControl::TFileType
+        CSVGTCustControl::ImageFileType( const TDesC& aUri ) const
+    {
+
+    TUriParser UriParser;
+   
+    TBuf<KMaxFileName> localUri;
+    // url starts with www so append http://
+    if ( !aUri.Left( KSchemaLength ).Compare( KWww ) )    
+        {
+        localUri.Append( KHttp );
+        localUri.Append( aUri );
+        if ( UriParser.Parse( localUri ) )
+            {
+            return ( EInvalidFilePath );
+            }
+        }
+    else
+        {
+        if ( UriParser.Parse( aUri ) )
+            {
+            return ( EInvalidFilePath );
+            }
+        }
+   
+    if ( UriParser.IsPresent( EUriHost ) )
+        {
+        // Extract the Path, filename and extension from the uri
+        TFileName filename = UriParser.Extract( EUriPath );
+        TParsePtrC fileParser( filename );
+   
+        if ( fileParser.NamePresent() && fileParser.ExtPresent() )
+            {                       
+            if ( fileParser.Ext().Compare( KJpg ) == 0  || 
+                 fileParser.Ext().Compare( KJpeg ) == 0 ||
+                 fileParser.Ext().Compare( KBmp ) == 0  ||
+                 fileParser.Ext().Compare( KPng ) == 0  ||
+                 fileParser.Ext().Compare( KSvg ) == 0  ||
+                 fileParser.Ext().Compare( KSvgz ) == 0 )
+                {
+                // file name and ext present and
+                // it is amy of the supported image types
+                return ERemoteImageFile;        
+                }
+            else
+                {
+                //file Extension present but not a supported image ext,
+                //may be some html file
+                return ENotAnImageFile;
+                }
+            }
+        else
+            {
+            //Should be a domain name so return ENotAnImageFile
+            return ENotAnImageFile;
+            }
+        }
+    else
+        {    
+        return ELocalImageFile;
+        }                       
+    }
+
+/**
+* CSVGTCustControl::ResetBacklightTime
+* Resets the backlight time for finite content
+*/
+void CSVGTCustControl::ResetBacklightTime()
+    {
+    TTimeIntervalSeconds secondCount;
+    TTime currTime;
+    currTime.HomeTime();
+    currTime.SecondsFrom(iPreviousBackLightTimeStamp, secondCount);
+   
+    if ( iDisplayFlags & ESvgUseBackLight )
+        {
+        if(secondCount.Int() >= KBackLightTimeInterval)
+           {
+           User::ResetInactivityTime();
+           iPreviousBackLightTimeStamp = currTime;
+           }       
+        }
+    }
+
+void CSVGTCustControl::StopEventHandler()
+    {
+    if ( iEventHandlerAO )
+        {
+        iEventHandlerAO->Cancel();
+        }
+    }
+
+void CSVGTCustControl::SetThreadRunning(TBool aIsRunning)
+    {
+    iIsThreadRunning = aIsRunning;
+    }
+
+TBool CSVGTCustControl::IsThreadRunning() const
+    {
+    return iIsThreadRunning;
+    }
+
+void CSVGTCustControl::PerformEngineRedraw()   
+    {
+    iSvgModule->Redraw();
+    }
+
+//TOUCH SUPPORT START   
+#ifdef RD_SCALABLE_UI_V2
+void CSVGTCustControl::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+	{
+	if(aPointerEvent.iType == TPointerEvent::EButton1Down)
+		{
+        if(iPntrObserver && iPntrObserver->HandleCustControlPointerEventL(aPointerEvent))
+            return;
+
+        // Reset the select cause
+        iSelectCause = ESvgInvalidSelectCause;
+
+		TIndicatorType indicatorType =
+            ActiveIndicator(aPointerEvent.iPosition);
+		if (indicatorType != ENoIndicator)
+		    {
+		    if(indicatorType == EPauseIndicator)
+                {
+                ProcessPlayCmd();
+                }
+            else
+                {
+        	    PanPresentation( indicatorType );
+                }
+		    }
+    
+            // Get the size of the content
+    	TSize svgSize = iSvgModule->Size();
+    	TInt rgnw = svgSize.iWidth;
+    	TInt rgnh = svgSize.iHeight;     
+        if ( aPointerEvent.iPosition.iX >= rgnw || aPointerEvent.iPosition.iY >= rgnh  )
+        	return;  
+        iPointerX = aPointerEvent.iPosition.iX;
+        iPointerY = aPointerEvent.iPosition.iY;
+        iSvgModule->MouseDown( iPointerX, iPointerY );       
+
+        SetPointerDisplayStatusAndRedraw(ETrue);
+        UpdatePointer();
+
+		Window().RequestPointerRepeatEvent(KInitRepeatInterval, ActiveIndicatorRect(indicatorType));
+		}
+	else if(aPointerEvent.iType == TPointerEvent::EButtonRepeat)
+		{
+        UpdatePointer();
+		TIndicatorType indicatorType =
+            ActiveIndicator(aPointerEvent.iPosition);
+		PanPresentation( indicatorType );
+		Window().RequestPointerRepeatEvent(KInitRepeatInterval, ActiveIndicatorRect(indicatorType));
+		}
+	else if(aPointerEvent.iType == TPointerEvent::EButton1Up)
+		{
+		Window().CancelPointerRepeatEventRequest();
+        // UI Spec: Pointer should be hidden after 15 sec of
+        // user inactivity
+        if ( iInactivityTimer )
+            {
+            // Should not be the case!
+            delete iInactivityTimer;
+            iInactivityTimer = NULL;
+            }
+        iInactivityTimer = CSVGTPointerHideTimer::NewL( this );
+        iInactivityTimer->After( KSccPointerHideTimerStartAfter );
+
+		TIndicatorType indicatorType =
+            ActiveIndicator(aPointerEvent.iPosition);
+		if (indicatorType == ENoIndicator)
+		    {
+            iSvgModule->MouseUp( iPointerX, iPointerY );
+		    }
+		}
+	else if(aPointerEvent.iType == TPointerEvent::EDrag)
+	    {
+	       // Get the size of the content
+    	TSize svgSize = iSvgModule->Size();
+    	TInt rgnw = svgSize.iWidth;
+    	TInt rgnh = svgSize.iHeight;     
+        if ( aPointerEvent.iPosition.iX >= rgnw || aPointerEvent.iPosition.iY >= rgnh  )
+        	return;
+        iPointerX = aPointerEvent.iPosition.iX;
+        iPointerY = aPointerEvent.iPosition.iY;
+
+        iSvgModule->MouseMove( iPointerX, iPointerY );
+        SetPointerDisplayStatusAndRedraw(ETrue);
+        UpdatePointer();
+	    }
+	}
+
+void CSVGTCustControl::SetContainerWindowL(const CCoeControl &aContainer)
+    {
+    CCoeControl::SetContainerWindowL(aContainer);
+    EnableDragEvents();
+    }
+    
+void CSVGTCustControl::PanPresentation( 
+    const CSVGTCustControl::TIndicatorType aIndicatorType )
+    {
+	switch( aIndicatorType )
+	    {
+	    case ELeftIndicator:
+	        {
+			iSvgModule->Pan( KSccPanNumPixelsX, KSccConstZero );
+			break;
+	        }
+	    case ERightIndicator:
+	        {
+			iSvgModule->Pan( -KSccPanNumPixelsX, KSccConstZero );
+			break;
+	        }
+	    case EUpIndicator:
+	        {
+			iSvgModule->Pan( KSccConstZero, KSccPanNumPixelsY );
+			break;
+	        }
+	    case EDownIndicator:
+	        {
+			iSvgModule->Pan( KSccConstZero, -KSccPanNumPixelsY );
+			break;
+	        }
+	    }
+	    iSvgModule->Redraw();
+	    DrawDeferred();
+	}
+
+CSVGTCustControl::TIndicatorType CSVGTCustControl::ActiveIndicator(
+    const TPoint aPosition ) const
+	{
+	TIndicatorType indicatorType = ENoIndicator;
+	
+    if( iPanIndLeftAidRect.Rect().Contains( aPosition ) && iPanLt)
+		{
+		indicatorType = ELeftIndicator;
+		}
+    else if( iPanIndRightAidRect.Rect().Contains( aPosition ) && iPanRt)
+		{
+		indicatorType = ERightIndicator;
+		}
+    else if( iPanIndUpAidRect.Rect().Contains( aPosition ) && iPanUp)
+		{
+		indicatorType = EUpIndicator;
+		}
+    else if( iPanIndDownAidRect.Rect().Contains( aPosition ) && iPanDn)
+		{
+		indicatorType = EDownIndicator;
+		}
+	
+	return indicatorType ;
+	}
+
+TRect CSVGTCustControl::ActiveIndicatorRect( TIndicatorType aIndicator) const
+    {
+    TRect indicatorRect(0,0,0,0);
+    
+    switch(aIndicator)
+        {
+        case ELeftIndicator:
+            {
+    		indicatorRect = iPanIndLeftAidRect.Rect();
+            }
+            break;
+        case ERightIndicator:
+            {
+    		indicatorRect = iPanIndRightAidRect.Rect();
+            }
+            break;
+        case EUpIndicator:
+            {
+    		indicatorRect = iPanIndUpAidRect.Rect();
+            }
+            break;
+        case EDownIndicator:
+            {
+    		indicatorRect = iPanIndDownAidRect.Rect();
+            }
+            break;
+        }
+
+	return indicatorRect;	
+    }	
+
+#endif //RD_SCALABLE_UI_V2
+
+#ifdef RD_SVGT_AUDIO_SUPPORT
+void CSVGTCustControl::HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType)
+    {
+    if((aControl == iVolumePopup) && ( aEventType == MCoeControlObserver::EEventStateChanged))
+        {
+#ifdef _DEBUG
+        TName msg;
+        msg.Format(_L("Volume level: %d"), iVolumePopup->Value());
+        iEikonEnv->InfoMsgWithAlignment(TGulAlignment(EHCenterVCenter), msg);
+#endif  
+		// Save the current volume as previous volume before setting
+        // new volume level
+        iPrevVolume=iVolumeLevel;    
+        iVolumeLevel = iVolumePopup->Value();
+        SetPresentationVolume( iVolumeLevel );
+        }
+    }
+    
+void CSVGTCustControl::SetPresentationVolume( TInt aVolumeLevel )
+    {
+    TInt volumeInPercent = aVolumeLevel * 10;
+
+    if(volumeInPercent)
+        {
+        
+        iSvgModule->SetAudioVolume(volumeInPercent);
+        if(iIsVolumeMuted)
+            {
+            iIsVolumeMuted = EFalse;
+            if(iAudioMuteListener)
+                {
+                iAudioMuteListener->VolumeMuted(EFalse);    
+                }
+            
+            }
+        }
+        
+    else
+        {
+        iSvgModule->MuteAudioVolume();
+        if(!iIsVolumeMuted)
+            {
+            iIsVolumeMuted = ETrue;
+            if(iAudioMuteListener)
+                {
+                iAudioMuteListener->VolumeMuted(ETrue);    
+                }
+            
+            }
+        
+        }
+        
+    }
+
+TInt CSVGTCustControl::PresentationVolume() const
+    {
+    return iVolumeLevel;
+    }
+    
+void CSVGTCustControl::MrccatoCommand(TRemConCoreApiOperationId aOperationId, 
+                             TRemConCoreApiButtonAction aButtonAct )
+    {
+    switch(aOperationId)
+        {
+        case ERemConCoreApiVolumeUp:
+            {
+            switch (aButtonAct)
+                {
+                case ERemConCoreApiButtonPress:
+                    {
+                    break;
+                    }
+                case ERemConCoreApiButtonRelease:
+                    {
+                    break;
+                    }
+                case ERemConCoreApiButtonClick:
+                    {
+                    FilterAndSendCommand(EStdKeyIncVolume);
+                    break;
+                    }
+                default:
+                    {
+                    break;
+                    }
+                }
+            break;
+            }
+        case ERemConCoreApiVolumeDown:
+            {
+            switch (aButtonAct)
+                {
+                case ERemConCoreApiButtonPress:
+                    {
+                    break;
+                    }
+                case ERemConCoreApiButtonRelease:
+                    {
+                    break;
+                    }
+                case ERemConCoreApiButtonClick:
+                    {
+                    FilterAndSendCommand(EStdKeyDecVolume);
+                    break;
+                    }
+                default:
+                    {
+                    break;
+                    }
+                }
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }        
+    }
+
+void CSVGTCustControl::FilterAndSendCommand(TInt aCommandId)
+    {    
+    TInt currentVolume = iVolumeLevel;
+    
+    if(!iIsForeground)
+        {
+        return;
+        }
+        
+    switch(aCommandId)
+        {
+        case EStdKeyIncVolume:
+            currentVolume=(currentVolume< KMaxVolume)? ++currentVolume : KMaxVolume;
+            break;
+        case EStdKeyDecVolume:
+            currentVolume=(currentVolume> KMinVolume)? --currentVolume : KMinVolume;
+            break;  
+        default:
+            break;      
+        }
+         
+    iVolumePopup->SetValue( currentVolume );
+    TRAP_IGNORE(iVolumePopup->ShowVolumePopupL());
+    iVolumePopup->DrawNow();
+
+    TRAP_IGNORE(HandleControlEventL( iVolumePopup, MCoeControlObserver::EEventStateChanged ));    
+}
+
+EXPORT_C void CSVGTCustControl::AddListener(MSvgCustControlListener *aListener, TCustControlListener aType)
+    {
+    if(aType == EAudioListener)
+        {
+        iAudioMuteListener = (MSvgAudioMuteListener *)aListener;    
+        }
+    
+    }
+TInt CSVGTCustControl::GetPrevVolume() const
+    {
+    return iPrevVolume;
+    } 
+#endif  //RD_SVGT_AUDIO_SUPPORT
+
+//TOUCH SUPPORT END
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTDrmHelper.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,547 @@
+/*
+* Copyright (c) 2004,2005 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:  DRM helper for svgt files.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    <DRMHelper.h>
+#include    <bamdesca.h>
+#include    <bautils.h>
+#include    <coemain.h>
+#include    <StringLoader.h>
+#include    <aknnotewrappers.h>
+#include    <caf/content.h>
+#include    <caf/attribute.h>
+#include    <caf/caftypes.h>
+#include    <caf/caferr.h>
+#include    <Oma2Agent.h>
+
+#include    "SVGTDrmHelper.h"
+
+// CONSTANTS
+
+const TUint32 KSVGTCountConstraint = 3;
+const TInt KSVGTTimeConstraint = 7;
+const TInt KSVGTSecondsInDay = 86400;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::CSVGTDrmHelper
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSVGTDrmHelper::CSVGTDrmHelper() :      
+    iEnv(CCoeEnv::Static())
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSVGTDrmHelper::ConstructL()
+    {
+    iDrmHelper = CDRMHelper::NewL( *iEnv );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSVGTDrmHelper* CSVGTDrmHelper::NewL()
+    {
+    CSVGTDrmHelper* self = CSVGTDrmHelper::NewLC();    
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSVGTDrmHelper* CSVGTDrmHelper::NewLC()
+    {
+    CSVGTDrmHelper* self = new(ELeave) CSVGTDrmHelper();    
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::~CSVGTDrmHelper
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSVGTDrmHelper::~CSVGTDrmHelper()
+    {
+    delete iRightsConstraints;  
+
+    // Delete the DRM Helper
+    delete iDrmHelper;
+    // Reset the environment pointer
+    iEnv = NULL;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::IsPreviewL
+// -----------------------------------------------------------------------------
+//        
+TBool CSVGTDrmHelper::IsPreviewL( RFile& aFileHandle )    
+    {
+    LoadUsageRigthsInfoL( aFileHandle );        
+    
+    TSVGTRightsStatus rightsStatus;
+    GetUsageRightsStatus( rightsStatus );         
+    return ( rightsStatus == ESVGTPreview );  
+
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::CheckRightsAmountL
+// -----------------------------------------------------------------------------
+//     
+TInt CSVGTDrmHelper::CheckRightsAmountL( RFile& aFileHandle )
+    {
+    LoadUsageRigthsInfoL( aFileHandle );
+    if ( iProtected )
+        {
+        return iDrmHelper->CheckRightsAmountL( aFileHandle );   
+        }
+    else
+        {
+        return 0;
+        }
+    }
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetDrmDetailsL
+// -----------------------------------------------------------------------------
+// 
+void CSVGTDrmHelper::GetDrmDetailsL( RFile& aFileHandle,
+                         TBool& aRightsValid, TBool& aIsSeparateDeliveryNS, 
+                         TBool& aIsProtected )
+    {
+
+
+    LoadUsageRigthsInfoL( aFileHandle );     
+    
+    aIsProtected = IsProtected();    
+    
+    if( !aIsProtected )
+        {       
+        return;
+        }             
+   
+    TSVGTRightsStatus rightsStatus;
+    GetUsageRightsStatus( rightsStatus );       
+    aRightsValid = ( rightsStatus == ESVGTFull ) ||
+                   ( rightsStatus == ESVGTRestricted ) ||
+                   ( rightsStatus == ESVGTPreview ); 
+                   
+                   
+    // Creates a handle to content handled via CAF
+    CContent *content = CContent::NewLC( aFileHandle ); 
+    content->GetAttribute( EIsForwardable, aIsSeparateDeliveryNS );
+    CleanupStack::PopAndDestroy( content );     
+    return;   
+    
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::LoadUsageRigthsInfoL
+// -----------------------------------------------------------------------------
+//
+void CSVGTDrmHelper::LoadUsageRigthsInfoL( RFile& aFileHandle )
+    {
+    
+    delete iRightsConstraints;
+    iRightsConstraints = NULL;
+    //flag to check for SD protection
+    iIsSeparateDelivery=0;
+    // Creates a handle to content handled via CAF
+    CContent *content = CContent::NewLC( aFileHandle ); 
+    content->GetAttribute( EIsProtected, iProtected );
+    content->GetAttribute( EDeliveryMethod, iIsSeparateDelivery );
+    CleanupStack::PopAndDestroy( content );
+
+    if ( iProtected )
+        {
+
+        CDRMHelperRightsConstraints* ignore1 = NULL;
+        CDRMHelperRightsConstraints* ignore2 = NULL;
+        CDRMHelperRightsConstraints* ignore3 = NULL;
+        
+
+        TRAPD(error, iDrmHelper->GetRightsDetailsL(aFileHandle,
+                                                   ContentAccess::EView,
+                                                   iExpired,
+                                                   iSendingAllowed,
+                                                   ignore1,
+                                                   iRightsConstraints,
+                                                   ignore2,
+                                                   ignore3));  
+       
+        // Delete ignored constraints
+        delete ignore1;
+        ignore1 = NULL;
+        delete ignore2;
+        ignore2 = NULL;
+        delete ignore3;
+        ignore3 = NULL;
+
+        if ( error == KErrCANoRights )
+            {
+            delete iRightsConstraints;
+            iRightsConstraints = NULL;
+            }
+        else
+            {
+            User::LeaveIfError(error);
+            }
+        }
+    else
+        {
+        iExpired = EFalse;
+        iSendingAllowed = ETrue;
+        }     
+
+    iDrmHelper->CanSetAutomated(aFileHandle, iCanSetAutomated);
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetUsageRightsStatus
+// -----------------------------------------------------------------------------
+//
+void CSVGTDrmHelper::GetUsageRightsStatus(TSVGTRightsStatus& aStatus)
+    {
+    if (!iProtected)
+        {
+        aStatus = ESVGTFull;
+        }
+    else if (iRightsConstraints)
+        {
+        if (iExpired)
+            {
+            aStatus = ESVGTExpired;
+            }
+        else if (iRightsConstraints->IsPreview())
+            {
+            	if(!(iIsSeparateDelivery==EOmaDrm2||iIsSeparateDelivery==EOmaDrm1SeparateDelivery))
+            	{
+            	aStatus = ESVGTPreview;	
+            	}
+            }
+        else if (iRightsConstraints->FullRights())
+            {
+            aStatus = ESVGTFull;
+            }
+        else
+            {
+            TTime time;
+            TTime startTime;
+
+            time.HomeTime();
+            TInt error = GetStartTime(startTime);
+
+            // Check that usage time has already started
+            if (!error && time < startTime)
+                {
+                aStatus = ESVGTExpired;
+                }
+            else
+                {
+                aStatus = ESVGTRestricted;
+                }
+            }
+        }
+    else
+        {
+        aStatus = ESVGTMissing;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetExpireStatus
+// -----------------------------------------------------------------------------
+//
+void CSVGTDrmHelper::GetExpireStatus(TBool& aAboutToExpire,
+                                            TSVGTExpireConstraint& aConstraint,
+                                            TInt& aCountLeft,
+                                            TInt& aDaysLeft)
+    {
+    TSVGTRightsStatus status;
+    GetUsageRightsStatus(status);
+
+    if (status == ESVGTRestricted)
+        {
+        TUint32 count = 0;
+        TInt countError = GetCount(count);
+        
+        TTime endTime;
+        TInt timeError = GetEndTime(endTime);
+        TTime currentTime;
+        currentTime.HomeTime();
+        TInt diff = endTime.DaysFrom(currentTime).Int();
+
+        TTimeIntervalSeconds interval;
+        TInt intervalError = GetInterval(interval);
+        TInt intervalDiff = 0;
+        if (!intervalError)
+            {
+            TTime intervalStart;
+            TTimeIntervalSeconds secondsFromStart;
+
+            if (!GetIntervalStart(intervalStart))
+                {
+                // No error => interval has already started
+                currentTime.SecondsFrom(intervalStart, secondsFromStart);
+                intervalDiff = 
+                    (interval.Int() - secondsFromStart.Int()) / KSVGTSecondsInDay;
+                }
+            else
+                {
+                // Error occurred => interval not started yet
+                intervalDiff = interval.Int() / KSVGTSecondsInDay;
+                }
+            }
+
+        if (!countError && count <= KSVGTCountConstraint &&
+            ((!timeError && diff <= KSVGTTimeConstraint) ||
+            (!intervalError && intervalDiff <= KSVGTTimeConstraint)))
+            {
+            // Count and time or interval contraints about to expire
+            aConstraint = ESVGTCountAndTime;
+            aCountLeft = count;
+            aAboutToExpire = ETrue;
+
+            if (!timeError && !intervalError)
+                {
+                // Both constraints exist => use smaller one
+                aDaysLeft = Min(diff, intervalDiff);
+                }
+            else if (!timeError)
+                {
+                // Only time constraint exists => use it
+                aDaysLeft = diff;
+                }
+            else
+                {
+                // Only interval constraint exists => use it
+                aDaysLeft = intervalDiff;
+                }
+            }
+        else if (!countError && count <= KSVGTCountConstraint)
+            {
+            // Count constraint about to expire
+            aConstraint = ESVGTCount;
+            aCountLeft = count;
+            aAboutToExpire = ETrue;
+            }
+        else if ((!timeError && diff <= KSVGTTimeConstraint) ||
+                 (!intervalError && intervalDiff <= KSVGTTimeConstraint))
+            {
+            // Time or interval constraint about to expire
+            aConstraint = ESVGTTime;
+            aAboutToExpire = ETrue;
+
+            if (!timeError && !intervalError)
+                {
+                // Both constraints exist => use smaller one
+                aDaysLeft = Min(diff, intervalDiff);
+                }
+            else if (!timeError)
+                {
+                // Only time constraint exists => use it
+                aDaysLeft = diff;
+                }
+            else
+                {
+                // Only Interval constraint exists => use it
+                aDaysLeft = intervalDiff;
+                }
+            }
+        else
+            {
+            // No constraint about to expire
+            aAboutToExpire = EFalse;
+            aConstraint = ESVGTNone;
+            }
+        }
+    else
+        {
+        // Non-restricted object cannot expire
+        aAboutToExpire = EFalse;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::SendingAllowed
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTDrmHelper::SendingAllowed() const
+    {
+    return iSendingAllowed;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetCount
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTDrmHelper::GetCount(TUint32& aCount)
+    {
+    TInt error = KErrNone;
+
+    if (!iProtected)
+        {
+        error = KErrNotFound;
+        }
+    else if (iRightsConstraints)
+        {
+        TUint32 ignore;
+        TRAP(error, iRightsConstraints->GetCountersL(aCount, ignore));
+        }
+    else
+        {
+        error = KErrNotReady;
+        }
+
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetStartTime
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTDrmHelper::GetStartTime(TTime& aStartTime)
+    {
+    TInt error = KErrNone;
+
+    if (!iProtected)
+        {
+        error = KErrNotFound;
+        }
+    else if (iRightsConstraints)
+        {
+        TRAP(error, iRightsConstraints->GetStartTimeL(aStartTime));
+        }
+    else
+        {
+        error = KErrNotReady;
+        }
+
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetEndTime
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTDrmHelper::GetEndTime(TTime& aEndTime)
+    {
+    TInt error = KErrNone;
+
+    if (!iProtected)
+        {
+        error = KErrNotFound;
+        }
+    else if (iRightsConstraints)
+        {
+        TRAP(error, iRightsConstraints->GetEndTimeL(aEndTime));
+        }
+    else
+        {
+        error = KErrNotReady;
+        }
+
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetInterval
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTDrmHelper::GetInterval(TTimeIntervalSeconds& aInterval)
+    {
+    TInt error = KErrNone;
+
+    if (!iProtected)
+        {
+        error = KErrNotFound;
+        }
+    else if (iRightsConstraints)
+        {
+        TRAP(error, iRightsConstraints->GetIntervalL(aInterval));
+        }
+    else
+        {
+        error = KErrNotReady;
+        }
+
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::GetIntervalStart
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTDrmHelper::GetIntervalStart(TTime& aStartTime)
+    {
+    TInt error = KErrNone;
+
+    if (!iProtected)
+        {
+        error = KErrNotFound;
+        }
+    else if (iRightsConstraints)
+        {
+        TRAP(error, iRightsConstraints->GetIntervalStartL(aStartTime));
+        }
+    else
+        {
+        error = KErrNotReady;
+        }
+
+    return error;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::IsProtected
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTDrmHelper::IsProtected() const
+    {
+    return iProtected;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTDrmHelper::CanSetAutomated
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTDrmHelper::CanSetAutomated() const
+    {
+    return iCanSetAutomated;
+    }
+    
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTPointerHideTimer.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2004, 2005 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:  This file implements the timer functionality required for the
+*                hiding of pointer in case of inactivity.
+*
+*/
+
+
+// User Includes
+#include "SVGTPointerHideTimer.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSVGTPointerHideTimer::CSVGTPointerHideTimer
+// Default Constructor. Initialises Timer State Variables.
+// -----------------------------------------------------------------------------
+//
+CSVGTPointerHideTimer::CSVGTPointerHideTimer( MSVGTPointerInactivityListener* 
+        aListener) : // Listener for the pointer inactivity
+    CTimer( CActive::EPriorityStandard ), iInactivityListener( aListener )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTPointerHideTimer::ConstructL
+// Second Phase Constructor for CSVGTPointerHideTimer. Adds this object to the 
+// applications active scheduler.
+// -----------------------------------------------------------------------------
+//
+void CSVGTPointerHideTimer::ConstructL()
+    {
+    // Call the base class ConstructL
+    CTimer::ConstructL();
+    // Add to active scheduler
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTPointerHideTimer::NewLC
+// Factory function for creating CSVGTPointerHideTimer objects. It also 
+// pushes the created dialog object onto the cleanup stack.
+// Returns: CSVGTPointerHideTimer* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSVGTPointerHideTimer* CSVGTPointerHideTimer::NewLC(
+    MSVGTPointerInactivityListener* aListener ) // Listener for inactivity event
+    {
+    CSVGTPointerHideTimer* self = new ( ELeave ) CSVGTPointerHideTimer( 
+            aListener );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTPointerHideTimer::NewL
+// Factory function for creating CSVGTPointerHideTimer objects.
+// Returns: CSVGTPointerHideTimer* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSVGTPointerHideTimer* CSVGTPointerHideTimer::NewL( 
+    MSVGTPointerInactivityListener* aListener ) // Listener for inactivity event
+    {
+    CSVGTPointerHideTimer* self = NewLC( aListener );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// Destructor
+CSVGTPointerHideTimer::~CSVGTPointerHideTimer()
+    {
+    // Reset the listener
+    iInactivityListener = NULL;
+    // Cancel any pending timer events 
+    Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTPointerHideTimer::DoCancel
+// Reimplements CActive::DoCancel. 
+// -----------------------------------------------------------------------------
+//
+void CSVGTPointerHideTimer::DoCancel()
+    {
+    CTimer::DoCancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTPointerHideTimer::RunL
+// Reimplements CActive::RunL. This function resets the inactivity timer 
+// so that the control is triggered to hide the pointer when no 
+// activity occurs for a specified time period
+// -----------------------------------------------------------------------------
+//
+void CSVGTPointerHideTimer::RunL()
+    {
+    // Callback 
+    if ( iInactivityListener )
+        {
+        iInactivityListener->PointerInactivityTimeout();
+        }
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTProgressBarTimer.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2004,2005 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:  This file implements the timer functionality required for the
+*                progress time functionality in the dialog.
+*
+*/
+
+
+// User Includes
+#include "SVGTProgressBarTimer.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSVGTProgressBarTimer::CSVGTProgressBarTimer
+// Default Constructor. Initialises Timer State Variables.
+// -----------------------------------------------------------------------------
+//
+CSVGTProgressBarTimer::CSVGTProgressBarTimer(MSVGTProgressBarListener* 
+            aListener , TBool aResetInactivityTime ) : 
+    CTimer( CActive::EPriorityHigh ), iListener( aListener ), 
+    iUseInactivityTime( aResetInactivityTime )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTProgressBarTimer::ConstructL
+// Second Phase Constructor for CSVGTProgressBarTimer. Adds this object to the 
+// applications active scheduler.
+// -----------------------------------------------------------------------------
+//
+void CSVGTProgressBarTimer::ConstructL()
+    {
+    // Call the base class ConstructL
+    CTimer::ConstructL();
+    // Add to active scheduler
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTProgressBarTimer::NewLC
+// Factory function for creating CSVGTProgressBarTimer objects.It also pushes the
+// created dialog object onto the cleanup stack.
+// Returns: CSVGTProgressBarTimer* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSVGTProgressBarTimer* CSVGTProgressBarTimer::NewLC( MSVGTProgressBarListener* 
+            aListener , 
+            TBool aResetInactivityTime ) // Listener for timer tick event
+    {
+    CSVGTProgressBarTimer* self = new ( ELeave ) CSVGTProgressBarTimer( 
+        aListener , aResetInactivityTime );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTProgressBarTimer::NewL
+// Factory function for creating CSVGTProgressBarTimer objects.
+// Returns: CSVGTProgressBarTimer* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSVGTProgressBarTimer* CSVGTProgressBarTimer::NewL( MSVGTProgressBarListener* 
+            aListener , 
+            TBool aResetInactivityTime ) // Listener for timer tick event
+    {
+    CSVGTProgressBarTimer* self = NewLC( aListener , aResetInactivityTime );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// Destructor
+CSVGTProgressBarTimer::~CSVGTProgressBarTimer()
+    {
+    // Reset the listener
+    iListener = NULL;
+    // Cancel any pending timer events if any.
+    Cancel();
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTProgressBarTimer::DoCancel
+// Reimplements CActive::DoCancel. 
+// -----------------------------------------------------------------------------
+//
+void CSVGTProgressBarTimer::DoCancel()
+    {
+    CTimer::DoCancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTProgressBarTimer::RunL
+// Reimplements CActive::RunL. This function updates the media time.
+// -----------------------------------------------------------------------------
+//
+void CSVGTProgressBarTimer::RunL()
+    {
+    if ( iUseInactivityTime )
+        {
+        User::ResetInactivityTime();        
+        }
+            
+    // CallBack listener
+    if ( iListener )
+        {
+        iListener->UpdateProgressBar();
+        }
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTThumbnailUtil.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2004,2005 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:  This file implements the SVGT Thumbnail functionality
+*                to display SVGT content
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <AknIconUtils.h>
+#include <e32def.h>
+#include <e32base.h>
+#include <eikenv.h>
+#include <fbs.h>
+#include <gdi.h>
+#include <bautils.h>
+#include <SVGEngineInterfaceImpl.h>
+#include <data_caging_path_literals.hrh>
+
+// User Includes
+#include "SVGTUIControlDbgFlags.hrh"
+#include "SVGTThumbnailUtil.h"
+
+// Constants
+// General Constants
+const TInt KSccConstMinusOne = -1;
+const TInt KSccConstZero = 0;
+const TUint KSccBackground = 0xffffffff;
+
+
+// SMIL Fit Value
+_LIT( KSccSmilFitValue,"meet" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::GenerateThumbnailLD
+// Generate thumbnails for SVGT content.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSVGTThumbnailUtil::GenerateThumbnailLD(
+    RFile& aFileHandle,                 // Filehandle of SVGT
+    CFbsBitmap& aThumbnailBitmap,       // Thumbnail Bitmap
+    CFbsBitmap& aThumbnailBitmapMask )  // BitMap mask    
+    {
+    CSVGTThumbnailUtil *tnUtilPtr = CSVGTThumbnailUtil::NewLC( aFileHandle, 
+            aThumbnailBitmap,
+            aThumbnailBitmapMask );
+    TBool retVal = tnUtilPtr->GenerateThumbnail();
+    CleanupStack::PopAndDestroy( tnUtilPtr );
+    return retVal;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::UpdateScreen
+// Implements MSvgRequestObserver::UpdateScreen.
+// -----------------------------------------------------------------------------
+//
+void CSVGTThumbnailUtil::UpdateScreen()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::ScriptCall
+// Implements MSvgRequestObserver::ScriptCall.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTThumbnailUtil::ScriptCall( const TDesC& /*aScript*/,
+                                  CSvgElementImpl* /*aCallerElement*/ )
+    {
+    return EFalse;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::FetchImage
+// Implements MSvgRequestObserver::FetchImage. Calls the application call
+// back corresponding to this function if exists, else returns EFalse
+// indicating to the engine that the image was not retrieved.
+// -----------------------------------------------------------------------------
+//     
+TInt  CSVGTThumbnailUtil::FetchImage( const TDesC& /*aUri*/, 
+             RFs& /*aSession*/, RFile& /*aFileHandle*/ )
+    {
+    return KErrNotFound;        
+    }
+
+TInt CSVGTThumbnailUtil::FetchFont( const TDesC& /* aUri */, 
+                                    RFs& /* aSession */, RFile& /* aFileHandle */ )
+    {
+    return KErrNotSupported;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil:: GetSmilFitValue
+// Implements the MSvgRequestObserver::GetSmilFitValue.
+// -----------------------------------------------------------------------------
+//
+void CSVGTThumbnailUtil::GetSmilFitValue( TDes& aSmilValue )
+    {
+    aSmilValue.Copy( KSccSmilFitValue );
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::UpdatePresentation
+// Implements MSvgRequestObserver::UpdatePresentation.
+// -----------------------------------------------------------------------------
+//
+void  CSVGTThumbnailUtil::UpdatePresentation( const TInt32&  
+    /* aNoOfAnimation */ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::InitializeEngineL
+// Initiliazes the interface with the SVG engine.
+// -----------------------------------------------------------------------------
+//
+void CSVGTThumbnailUtil::InitializeEngineL()
+    {
+    if ( !iSvgModule )
+       {
+       TFontSpec spec;
+
+       if ( !iSVGTBitMapDummy )
+           {
+           // For thumbnails, the user provided bitmap is used,
+           // Have to give some dummy bitmap to the engine in the constructor.
+           iSVGTBitMapDummy  = new( ELeave ) CFbsBitmap;
+           User::LeaveIfError( iSVGTBitMapDummy->Create(
+            TSize( KSccConstZero, KSccConstZero ), EGray2 ) );
+           }
+
+       iSvgModule = CSvgEngineInterfaceImpl::NewL( iSVGTBitMapDummy,
+               this, spec );
+       iSvgModule->SetBackgroundColor( KSccBackground );
+       }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::GenerateThumbnail
+// Helper function that generates Thumbnail for the SVG content.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTThumbnailUtil::GenerateThumbnail()
+    {
+    if ( iSvgModule )
+        {
+        MSvgError* result;
+        result = iSvgModule->PrepareDom( iContentFileHandle, iThumbnailHandle );
+
+        // NULL is returned, possible out of memory when create error object.
+        if ( ( !result ) || ( result->HasError() ) )
+            {
+            return EFalse;
+            }
+#ifdef SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE        
+        // Set thumbnail mode On
+        iSvgModule->SetThumbNailMode( ETrue );                          
+#endif // SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE
+
+        // Setup the engine to use the DOM
+        result = iSvgModule->UseDom( iThumbnailHandle, iThumbnailBitmap );
+        if ( result->HasError() && !result->IsWarning() )
+            {                
+            return EFalse;
+            }
+
+        // View Box define for Dom associated frame
+        iSvgModule->ChooseViewBoxIfNotSet(iThumbnailHandle);
+        iSvgModule->InitializeEngine();
+        iSvgModule->RenderFrame( NULL, 0);
+
+        // Render the Mask Bitmap
+        iSvgModule->GenerateMask( iThumbnailBitmapMask );
+#ifdef SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE        
+        // Set thumbnail mode Off
+        iSvgModule->SetThumbNailMode( EFalse );            
+#endif // SVGTUICONTROL_DBG_DRM_THUMBNAIL_API_ENABLE
+
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+        
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::CSVGTThumbnailUtil
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CSVGTThumbnailUtil::CSVGTThumbnailUtil( RFile& aFileHandle ) : 
+    // Thumbnail Variables
+    iThumbnailHandle( KSccConstMinusOne ),
+    iContentFileHandle( aFileHandle )
+{
+}
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::ConstructL
+// Symbian 2nd phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CSVGTThumbnailUtil::ConstructL(
+    CFbsBitmap& aThumbnailBitmap,     // Bitmap on which content is to be
+                                      // rendered
+    CFbsBitmap& aThumbnailBitmapMask )// Bitmap Mask
+    {
+    // Save the user parameters for later access.
+    iSvgModule = NULL;
+    iSVGTBitMapDummy = NULL;
+    iThumbnailBitmap = &aThumbnailBitmap;
+    iThumbnailBitmapMask = &aThumbnailBitmapMask;
+    InitializeEngineL();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::NewL
+// Factory function for creating CSVGTThumbnailUtil objects for thumbnail
+// generation.
+// Returns: CSVGTThumbnailUtil* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSVGTThumbnailUtil* CSVGTThumbnailUtil::NewL(
+    RFile& aFileHandle,               // File handle of SVGT Content
+    CFbsBitmap& aThumbnailBitmap,     // Bitmap on which content is to be
+                                      // rendered
+    CFbsBitmap& aThumbnailBitmapMask )// Bitmap Mask
+    {
+    CSVGTThumbnailUtil* self = CSVGTThumbnailUtil::NewLC( aFileHandle,
+                                                      aThumbnailBitmap,
+                                                      aThumbnailBitmapMask );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::NewLC
+// Factory function for creating CSVGTThumbnailUtil objects for thumbnail
+// generation.
+// Returns: CSVGTThumbnailUtil* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+CSVGTThumbnailUtil* CSVGTThumbnailUtil::NewLC(
+    RFile& aFileHandle,               // File Handle of SVGT Content
+    CFbsBitmap& aThumbnailBitmap,     // Bitmap on which content is to be
+                                      // rendered
+    CFbsBitmap& aThumbnailBitmapMask) // Bitmap Mask
+    {
+    CSVGTThumbnailUtil* self = new ( ELeave ) CSVGTThumbnailUtil( 
+        aFileHandle );
+    CleanupStack::PushL( self );
+    self->ConstructL( aThumbnailBitmap, aThumbnailBitmapMask );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTThumbnailUtil::~CSVGTThumbnailUtil
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSVGTThumbnailUtil::~CSVGTThumbnailUtil()
+    {
+    if ( iThumbnailHandle != KSccConstMinusOne )
+        {
+        if ( iSvgModule )
+            {
+            iSvgModule->DeleteDom( iThumbnailHandle );            
+            }
+        }
+   
+    // Dummy bitmap
+    delete iSVGTBitMapDummy;
+    
+    // SVG Engine
+    delete iSvgModule;
+    
+    // Reset the Thumbnail and Mask as this is owned by the caller
+    iThumbnailBitmap = NULL;
+    iThumbnailBitmapMask = NULL;
+    }
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SVGTUIDialog.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,1304 @@
+/*
+* Copyright (c) 2004,2005 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:  This file implements the SVGT Dialog which
+*                is used to display SVGT content
+*
+*/
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <uikon/eikctrlstatus.h>
+#endif
+
+#include <e32std.h>
+#include <AknDialog.h>
+#include <coeaui.h>
+#include <eikenv.h>
+#include <bautils.h>
+#include <eikdialg.h>
+#include <eikmenup.h>
+#include <eikspane.h>
+
+#ifdef __SERIES60_HELP
+#include <hlplch.h>
+#endif // __SERIES60_HELP
+
+#include <coeaui.h>
+#include <aknnavi.h> 
+#include <aknnavide.h> 
+#include <AknWaitNoteWrapper.h>
+#include <SVGRequestObserver.h>
+#include <aknnotewrappers.h>
+#include <akntitle.h>
+#include <data_caging_path_literals.hrh>
+#include <StringLoader.h>
+#include <SVGTUIControl.rsg>
+#include <csxhelp/svgt.hlp.hrh>
+//-----------
+
+// User Includes
+#include "SVGTAppObserver.h"
+#include "SVGTCustControl.h"
+#include "SVGTUIDialog.h"
+#include "svgtfileviewdetails.h"
+
+#include "SVGTUIDialog.hrh"
+#include "SvgtDecoratorControl.h"
+
+const TInt KButtonContainerDisplayTime = 5000000;
+
+// Constants
+
+// The Middle softkey has position 3 at button group's stack
+const TInt KMiddleSKId=3;
+_LIT( KResourceFileName, "Z:SVGTUIControl.rsc" );
+#ifdef _DEBUG
+//_LIT( KUnknownCommandStr, "Unknown Command" );
+#endif
+
+#ifdef __SERIES60_HELP
+// Help Context UID = DLL UID3
+const TUid KSvgtHelpContextUid = { 0x101F8749 };
+#endif // __SERIES60_HELP
+
+// Times longer than this many seconds are shown using the long format
+const TInt KShortTimeLimit = 59*60 + 59; 
+
+// Maximum number of seconds shown in the time duration field
+const TInt KMaxTotalTimeSeconds = 9*60*60 + 59*60 + 59; // 59:59
+
+// Maximum length for both the time elapsed/remaining string "mm:ss/mm:ss"
+// and post-recording text "Length: mm:ss"
+const TInt KMaxTimeTextLength = 40;
+
+// This many microseconds in a second
+const TInt KMicro = 1000000;  
+
+// Key Constant for toggling between Full/Normal Screen
+const TInt KSvgScreenToggleKey = '*';
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::CSVGTUIDialog
+// Default Constructor. Initialises Dialog State Variables.
+// -----------------------------------------------------------------------------
+//
+CSVGTUIDialog::CSVGTUIDialog()
+    {
+    // SVGT Viewer State Variables
+    iSaveEnable = EFalse;
+    iPreview = EFalse;
+    iCustControl = NULL;
+    iAppObserver = NULL;
+    iIsVolumeMuted = EFalse;
+    iLastCommandID = EAknSoftkeyOptions;
+    iIsButtonContainerVisible = ETrue;
+    iQuietExitWhenOrientationChange = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::ConstructL
+// Second Phase Constructor for CSVGTUIDialog. Opens resource file, reads the
+// dialog menu resource and calls CAknDialog::ConstructL with the resource as
+// param.
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::ConstructL()
+    {
+    // Find which drive this DLL is installed.
+    TFileName fileName;
+
+    // Get the full resource file
+    TParse lParse;
+
+    // Add the resource dir
+    lParse.Set( KResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL);
+
+    // Get the filename with full path
+    fileName = lParse.FullName();
+
+    BaflUtils::NearestLanguageFile( iEikonEnv->FsSession(), fileName ); //for
+                                                               // localization
+    iResourceOffset = iEikonEnv->AddResourceFileL( fileName );
+
+    // Read time format strings from AVKON resource
+    iTimeFormatShort = 
+        iEikonEnv->AllocReadResourceL( R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO );
+    iTimeFormatLong =
+        iEikonEnv->AllocReadResourceL( R_QTN_TIME_DURAT_LONG );
+
+    iBtnCntrTimer = CPeriodic::NewL( CActive::EPriorityStandard);
+    CAknDialog::ConstructL( R_SVGT_DIALOG_MENUBAR );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::NewL
+// Factory function for creating CSVGTUIDialog objects.
+// Returns: CSVGTUIDialog* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSVGTUIDialog* CSVGTUIDialog::NewL()
+    {
+    CSVGTUIDialog* self = CSVGTUIDialog::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::NewLC
+// Factory function for creating CSVGTUIDialog objects. It also pushes the
+// created dialog object onto the cleanup stack.
+// Returns: CSVGTUIDialog* ; Pointer to the created object.
+//          Leaves if error occurs during creation.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSVGTUIDialog* CSVGTUIDialog::NewLC()
+    {
+    CSVGTUIDialog* self = new ( ELeave ) CSVGTUIDialog();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// Destructor
+CSVGTUIDialog::~CSVGTUIDialog()
+    {
+    if ( iResourceOffset != 0 )
+        {
+        iEikonEnv->DeleteResourceFile( iResourceOffset );
+        }
+    // Custom Control will be automatically destroyed by dialog framework
+    iCustControl = NULL;
+    // App Observer is reset.
+    iAppObserver = NULL;
+
+    // Set the text in status pane to the stored one            
+    if (iAppTitleText)
+        {
+        // Get the Status Pane Control
+        CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
+        // Get the title pane 
+        CAknTitlePane* tp = NULL;
+        TRAPD( errGetControl, 
+            tp = static_cast< CAknTitlePane* >( sp->ControlL( 
+            TUid::Uid( EEikStatusPaneUidTitle ) ) ) );
+        if ( errGetControl == KErrNone && tp )
+            {
+            //set application name in the title pane
+            TRAPD( errSetText, 
+                tp->SetTextL(*iAppTitleText) );
+            if ( errSetText != KErrNone )
+                {
+                // No error handling here
+                }
+            }
+        
+        delete iAppTitleText;
+        iAppTitleText = NULL;
+
+        delete iProgressText;
+        iProgressText = NULL;
+        }
+    
+    // Clear the Navi-Pane Decorator    
+    if ( iNaviDecorator )
+        {
+        // Restore the old navi-pane
+        CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
+        
+        CAknNavigationControlContainer* np = NULL;
+        TRAPD( errGetNaviControl, 
+            np = static_cast< CAknNavigationControlContainer* >
+            ( sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ) );
+        if ( errGetNaviControl == KErrNone && np )
+            {
+            TRAPD( errPushDefNaviControl, 
+                np->PushDefaultL ()); // Set default.    
+            if ( errPushDefNaviControl != KErrNone )
+                {
+                // No error handling here.
+                }
+            }
+        delete iNaviDecorator;
+        }    
+    iCbaGroup=NULL;
+    // Callers responsibility of closing the file handle.
+    iFileHandlePtr = NULL;
+    // Delete the format strings
+    delete iTimeFormatShort;
+    delete iTimeFormatLong;
+    
+    delete iBtnCntrTimer;
+    }
+
+TInt CSVGTUIDialog::ButtonContainerTimerCallBack(TAny* aAny)
+    {
+    CSVGTUIDialog* dlg = (CSVGTUIDialog*)(aAny);
+    dlg->iBtnCntrTimer->Cancel();
+    dlg->iIsButtonContainerVisible = EFalse;
+    TRAP_IGNORE(dlg->SwitchDialogLayoutL( ETrue ));
+    
+    return KErrNone;
+    }
+
+TBool CSVGTUIDialog::HandleCustControlPointerEventL(const TPointerEvent& /* aPointerEvent */)
+    {
+	TBool fullScreenStatus;
+	TBool isEventHandled = EFalse;
+    TCallBack callBack(CSVGTUIDialog::ButtonContainerTimerCallBack, this);
+
+    iBtnCntrTimer->Cancel();
+    
+    if(iIsButtonContainerVisible)
+        {
+        return isEventHandled;
+        }
+    
+	iCustControl->GetCurrentFullScreenStatus(fullScreenStatus);
+    if(fullScreenStatus)
+        {
+        TRect appRect = iEikonEnv->EikAppUi()->ApplicationRect();
+        
+        if(iBtnGrpPos.iX && iBtnGrpPos.iY)
+            SetSize(TSize(appRect.Width() - iBtnGrpSize.iWidth, appRect.Height() - iBtnGrpSize.iHeight));
+        if(iBtnGrpPos.iX)
+            SetSize(TSize(appRect.Width() - iBtnGrpSize.iWidth, appRect.Height()));
+        else if(iBtnGrpPos.iY)
+            SetSize(TSize(appRect.Width(), appRect.Height() - iBtnGrpSize.iHeight));
+        
+        CEikButtonGroupContainer& bgc = ButtonGroupContainer();
+        //bgc.MakeVisible(ETrue);
+        //bgc.SetSize(iBtnGrpSize);
+        //bgc.SetExtent(iBtnGrpPos, iBtnGrpSize);
+        //bgc.DrawDeferred();
+        iIsButtonContainerVisible = ETrue;
+        isEventHandled = ETrue;
+        iBtnCntrTimer->Start(KButtonContainerDisplayTime, 0, callBack);
+        }
+        
+    return isEventHandled;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::ExecuteLD
+// Reimplements CAknDialog::ExecuteLD. It initialises the member variables of
+// the class and calls CAknDialog::ExecuteLD() with the dialog resource.
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTUIDialog::ExecuteLD(
+    RFile& aFileHandle,         // Filename of SVGT Content
+    MSvgtAppObserver* ptr )     // Applications Implementation of callbacks
+    {
+    // Save this pointer since there are leaving functions in the flow
+    CleanupStack::PushL( this );    
+
+    iFileHandlePtr = &aFileHandle;
+    iIsFileHandleValid = ETrue;
+    iAppObserver = ptr;
+    iQuietExitWhenOrientationChange = iAppObserver->ExitWhenOrientationChange();
+
+    // Get the Status Pane Control
+    CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
+    
+    // Get the Title Pane Control
+    CAknTitlePane* tp = static_cast< CAknTitlePane* >( sp->ControlL(
+            TUid::Uid( EEikStatusPaneUidTitle ) ) );
+
+    // Store the Application's title text
+    iAppTitleText = HBufC::NewL(tp->Text()->Length());
+    *iAppTitleText = *tp->Text();
+    
+    // Display the filename in the title pane of application
+    
+    TFileName lFileName;
+    // Get the file name from the file handle
+    if ( !aFileHandle.Name( lFileName ) )
+        {
+        TParse p;
+        p.Set( lFileName, NULL, NULL);
+
+        // SetTextL also ensures that if the length exceeds the layout space
+        // available the text is truncated from the end.
+        tp->SetTextL( p.NameAndExt() ); // p.NameAndExt() gives "Filename.ext"
+        
+        }
+
+    CSVGTDrmHelper *drmHelper = CSVGTDrmHelper::NewLC();
+    // Check if the "Save" Option should be shown or not.
+    // The calling application of the dialog decides this.
+    if ( iAppObserver )
+        {
+        iSaveEnable = iAppObserver->CanShowSave();
+        }       
+     
+    // Check Rights Status
+    iPreview = drmHelper->IsPreviewL( aFileHandle );
+    
+    CleanupStack::PopAndDestroy( drmHelper );
+    
+    // ExecuteLD will delete this, so we have to Pop it...
+    CleanupStack::Pop( this );
+    
+    if ( iPreview )
+        {              
+        return  CAknDialog::ExecuteLD( R_SVGT_VIEWER_PREVIEW_DIALOG );  
+        }
+    else
+        {
+        return CAknDialog::ExecuteLD( R_SVGT_VIEWER_DIALOG );       
+        }
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::FormatTimeL
+// Convert a time given in seconds to a descriptor.
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::FormatTimeL( 
+                              const TUint& aDuration, // duration in 
+                                                      // seconds
+                              TDes& aBuf   // Buffer holding formatted 
+                                           // string
+                               ) const
+                                           
+    {
+    TTime time( TInt64( aDuration ) * KMicro );
+
+    if ( time.Int64() > TInt64( KMaxTotalTimeSeconds ) * KMicro )
+        {
+        time = TInt64( KMaxTotalTimeSeconds ) * KMicro;
+        }
+
+    if ( time.Int64() < TInt64( KShortTimeLimit ) * KMicro )
+        {
+        time.FormatL( aBuf, *iTimeFormatShort );
+        }
+    else
+        {
+        time.FormatL( aBuf, *iTimeFormatLong );
+        }
+
+    // Arabic number conversion
+    AknTextUtils::LanguageSpecificNumberConversion( aBuf );
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::SaveNeededL
+// This function checks if Save is displayed and saving is already done
+// and prompts a confirmation query to the user and then calls DoSaveL
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTUIDialog::SaveNeededL( TInt aButtonId )
+    {
+    if ( ( iAppObserver->CanShowSave() || 
+           iCustControl->IsTextContentChanged()) &&
+         !iAppObserver->IsSavingDone() && 
+         !iPreview &&            
+         LaunchSaveQueryDialogL() )
+        {
+        iAppObserver->DoSaveL( aButtonId );
+        return ETrue;       
+        }
+    else
+        {
+        return EFalse;
+        }          
+    }
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::LaunchSaveQueryDialogL
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTUIDialog::LaunchSaveQueryDialogL() const
+    {
+    HBufC* titleText = NULL;
+
+    TFileName lFileName;
+    if ( iFileHandlePtr )
+        {
+        iFileHandlePtr->Name( lFileName );
+        }
+    else
+        {
+        return EFalse;
+        }
+    titleText = StringLoader::LoadLC( R_QTN_SVGT_QUERY_CONF_SAVE_DOWNLOADED, 
+                              lFileName );
+
+    CAknQueryDialog* query = CAknQueryDialog::NewL( );
+    TBool retVal = query->ExecuteLD( R_SVGT_CONFIRMATION_QUERY_YES_NO, 
+                                                   *titleText );
+    CleanupStack::PopAndDestroy( titleText );
+    
+    if ( retVal == EAknSoftkeyOk || retVal == EAknSoftkeyYes )
+        {
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::SwitchDialogLayoutL
+// This function changes the layout of the dialog
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::SwitchDialogLayoutL( TBool aIsFullScreen )
+    {
+    if ( aIsFullScreen )
+        {
+        // Full Screen Mode
+        // Expand Dialog Window to occupy full screen
+        SetExtentToWholeScreen();
+        // Hide the Status Pane
+        CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
+        sp->MakeVisible( EFalse );
+        
+        // Hide the CBA
+        CEikButtonGroupContainer* cp = &( ButtonGroupContainer() );
+        //cp->SetExtent( TPoint( 0, 0 ), TSize( 0, 0) );
+        cp->SetSize( TSize( 0, 0) );
+        
+        }
+    else
+        {
+        // Normal Screen Mode
+        // Show the Status Pane
+        CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
+        sp->MakeVisible( ETrue );
+        
+        // Restore the size and position of the dialog
+        // to normal screen size(Client Rectangle)
+        TRect lRect;
+        iCustControl->GetNormalScreenLayoutRect( lRect );
+        SetSizeAndPosition( lRect.Size() );
+        // Restore original layout
+        Layout();
+        iBtnCntrTimer->Cancel();
+        }
+    
+    iIsButtonContainerVisible = !aIsFullScreen;
+    
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::DynInitMenuPaneL
+// Reimplements CAknDialog::DynInitMenuPaneL inorder to support dynamic hiding
+// of menu items based on current state of the viewer.
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::DynInitMenuPaneL(
+    TInt aResourceId,           // Resource Id for which this func is called
+    CEikMenuPane* aMenuPane )   // Menupane object pointer for manipulation
+    {
+    iBtnCntrTimer->Cancel();
+   
+if(
+  (aResourceId==R_SVGT_DIALOG_MENU)
+  &&iCustControl->GetMSKLabelFlag(EAknSoftkeyContextOptions)
+  &&(aMenuPane)
+  )
+    	{
+    	iCustControl->ChangeMSKLabelFlag(EAknSoftkeyContextOptions);
+    	if ( iAppObserver )
+    		{
+    		iSaveEnable = iAppObserver->CanShowSave();
+    		}
+    	aMenuPane->SetItemDimmed(ESvgtDlgSaveCommand,
+    	                        !( iSaveEnable||
+    	                        iCustControl->IsTextContentChanged() ) );
+          
+        TSvgtViewerAnimStatus lAnimState;
+        iCustControl->GetCurrentAnimState( lAnimState );
+        TBool isLoadingDone = iCustControl->IsProcessDone();
+        aMenuPane->SetItemDimmed(ESvgtDlgPlayCommand,
+        						!isLoadingDone ||
+        						(lAnimState == ESvgAnimPlayingState ));
+        aMenuPane->SetItemDimmed(ESvgtDlgPauseCommand,
+                                !isLoadingDone ||
+                                (lAnimState != ESvgAnimPlayingState ));                                                
+        aMenuPane->SetItemDimmed(ESvgtDlgStopCommand,
+                                !isLoadingDone ||
+                                (lAnimState ==ESvgAnimStoppedState));                                
+                                         
+          
+        //All the other menu items are dimmed since they are not the part of
+        // context menu
+        aMenuPane->SetItemDimmed(ESvgtDlgZoomInCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgZoomOutCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgSelectTextCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgEditTextCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgLoopCascadeCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgFindTextCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgFullScreenCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgNormalScreenCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgListRotateCascadeCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgViewDetailsCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgListDownloadCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgHelpCommand,ETrue);
+        aMenuPane->SetItemDimmed(EAknCmdExit,ETrue);           
+        #ifdef RD_SVGT_AUDIO_SUPPORT
+        aMenuPane->SetItemDimmed( ESvgtDlgMuteCommand,ETrue);
+        aMenuPane->SetItemDimmed( ESvgtDlgUnmuteCommand,ETrue);
+        aMenuPane->SetItemDimmed(ESvgtDlgSetVolumeCommand,ETrue);
+        #endif //RD_SVGT_AUDIO_SUPPORT         
+        }
+    
+    else if ( ( aResourceId == R_SVGT_DIALOG_MENU ) && ( aMenuPane ) )
+        {
+        if ( iAppObserver )
+            {
+            iSaveEnable = iAppObserver->CanShowSave();
+            }
+        aMenuPane->SetItemDimmed(
+                        ESvgtDlgSaveCommand,
+                        !( iSaveEnable || 
+                        iCustControl->IsTextContentChanged() ) );
+        TInt zoomLvl = 0;
+        iCustControl->GetCurrentZoomLevel( zoomLvl );
+        aMenuPane->SetItemDimmed(
+                        ESvgtDlgZoomOutCommand,
+                        ( zoomLvl == 0 ) );
+        
+        // Select Text Option
+        aMenuPane->SetItemDimmed( ESvgtDlgSelectTextCommand, 
+            !iCustControl->IsTextSelectOn() );
+        
+        // Edit Text Option
+        aMenuPane->SetItemDimmed( ESvgtDlgEditTextCommand, 
+            !iCustControl->IsTextEditOn() );
+            
+        if ( !iCustControl->IsAnimationPresent() )
+            {
+            // No Animations case - dim the Play/Pause/Stop buttons
+            aMenuPane->SetItemDimmed(
+                        ESvgtDlgPlayCommand,
+                        ETrue );
+
+            aMenuPane->SetItemDimmed(
+                        ESvgtDlgPauseCommand,
+                        ETrue );
+            
+            aMenuPane->SetItemDimmed(
+                        ESvgtDlgStopCommand,
+                        ETrue );
+            aMenuPane->SetItemDimmed(
+                        ESvgtDlgLoopCascadeCommand,
+                        ETrue );                            
+            }
+            else
+                {
+                // Animations case - normal behaviour
+                // Play/Pause Options
+                TSvgtViewerAnimStatus lAnimState;
+                iCustControl->GetCurrentAnimState( lAnimState );
+                TBool isLoadingDone = iCustControl->IsProcessDone();
+                
+                aMenuPane->SetItemDimmed(
+                                ESvgtDlgPlayCommand,
+                                !isLoadingDone || 
+                                 ( lAnimState == ESvgAnimPlayingState ) );
+
+                aMenuPane->SetItemDimmed(
+                                ESvgtDlgPauseCommand,
+                                !isLoadingDone || 
+                                 ( lAnimState != ESvgAnimPlayingState ) );
+                
+                aMenuPane->SetItemDimmed(
+                                ESvgtDlgStopCommand,
+                                !isLoadingDone || 
+                                 ( lAnimState == ESvgAnimStoppedState ) );
+                // Loop Option 
+                aMenuPane->SetItemDimmed(
+                                ESvgtDlgLoopCascadeCommand,
+                                !isLoadingDone || 
+                                !iCustControl->IsLoopAllowed() );
+                }
+#ifdef RD_SVGT_AUDIO_SUPPORT            
+        aMenuPane->SetItemDimmed( ESvgtDlgMuteCommand, iIsVolumeMuted );
+
+        aMenuPane->SetItemDimmed( ESvgtDlgUnmuteCommand, !iIsVolumeMuted );
+#endif //RD_SVGT_AUDIO_SUPPORT
+        TBool isFullScreenOn;
+        iCustControl->GetCurrentFullScreenStatus( isFullScreenOn );
+        aMenuPane->SetItemDimmed(
+                        ESvgtDlgFullScreenCommand,
+                        isFullScreenOn );
+
+        aMenuPane->SetItemDimmed(
+                        ESvgtDlgNormalScreenCommand,
+                        !isFullScreenOn );
+
+        aMenuPane->SetItemDimmed(
+                        ESvgtDlgFindTextCommand,
+                        EFalse );
+
+        aMenuPane->SetItemDimmed(
+                        ESvgtDlgViewDetailsCommand,
+                        !iIsFileHandleValid);
+        aMenuPane->SetItemDimmed(
+                        ESvgtDlgListDownloadCommand,
+                         !iAppObserver->CanShowDownload() );
+        }
+        else 
+            {
+            if ( ( aResourceId == R_SVGT_LOOP_SUBMENU ) && ( aMenuPane ) )
+                {
+                // Loop On/Off Submenu option
+                TBool isLoopOn = ETrue;
+                iCustControl->GetCurrentLoopStatus( isLoopOn );
+                if ( isLoopOn )
+                    {
+                    aMenuPane->SetItemButtonState( ESvgtDlgLoopOnCommand, 
+                                                   EEikMenuItemSymbolOn );
+                    aMenuPane->SetItemButtonState( ESvgtDlgLoopOffCommand,
+                                             EEikMenuItemSymbolIndeterminate );
+                    }
+                    else
+                        {
+                        aMenuPane->SetItemButtonState( ESvgtDlgLoopOffCommand, 
+                                                       EEikMenuItemSymbolOn );
+                        aMenuPane->SetItemButtonState( ESvgtDlgLoopOnCommand, 
+                                             EEikMenuItemSymbolIndeterminate );
+                        }
+                }
+            }
+    }
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::DrawMSKLabelL
+// Reimplements MSVGTMSKImplL::DrawMSKLabelL.This function is called by the
+// CSVGTCustControl whenever MSK label needs to be updated.
+// -----------------------------------------------------------------------------
+// 
+void CSVGTUIDialog::DrawMSKLabelL(TInt aResourceID,TInt aCommandID)
+{
+    iLastCommandID = aCommandID;
+	iCbaGroup= &( ButtonGroupContainer() );
+  	HBufC* middleSKText = StringLoader::LoadLC(aResourceID );
+    iCbaGroup->AddCommandToStackL(KMiddleSKId, aCommandID,*middleSKText );
+    iCbaGroup->MakeCommandVisible(aCommandID, ETrue);
+	CleanupStack::PopAndDestroy( middleSKText );
+	iCbaGroup->DrawDeferred();		
+}
+
+// ----------------------------------------------------------------------------
+// CSVGTUIDialog::RemoveMSKLabel
+// Reimplements MSVGTMSKImplL::RemoveMSKLabel.This function is called by the 
+// CSVGTCustControl before adding new MSK label to button group stack.   
+// ----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::RemoveMSKLabel()
+{
+	iCbaGroup= &( ButtonGroupContainer() );
+	MEikButtonGroup* lButtonGroup=iCbaGroup->ButtonGroup();
+	TInt lCmdID=lButtonGroup->CommandId(KMiddleSKId);
+	iCbaGroup->RemoveCommandFromStack(KMiddleSKId,lCmdID);
+	iCbaGroup->DrawDeferred();
+
+}
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::OkToExitL
+// Reimplements CAknDialog::OkToExitL inorder to display custom menu and
+// trap the back softkey to provide restore view functionality/exit.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTUIDialog::OkToExitL( TInt aButtonId ) // ButtonId of button pressed
+    {
+    if ( aButtonId == EAknSoftkeyOptions )
+        {
+        DisplayMenuL();
+        return EFalse;
+        }
+    else if(aButtonId==EAknSoftkeyContextOptions)
+   		{
+        //Flag to differentiate context menu from normal options menu
+       	iCustControl->ChangeMSKLabelFlag(aButtonId);
+         		
+       	//Display context menu 
+       	iMenuBar->SetContextMenuTitleResourceId( R_SVGT_DIALOG_MENUBAR );
+  		iMenuBar-> TryDisplayContextMenuBarL();
+    		    
+    	//No task swapper for context menu
+   	    iMenuBar->SetMenuType(CEikMenuBar::EMenuOptionsNoTaskSwapper);
+      			
+     	//Restore the options menu
+   		iMenuBar->SetMenuTitleResourceId( R_SVGT_DIALOG_MENUBAR );
+   		iMenuBar->SetMenuType(CEikMenuBar::EMenuOptions);
+          
+       	return EFalse;
+        }
+    else if(aButtonId ==EAknSoftkeySave)
+    	{
+    	//Save the content
+    	ProcessCommandL(ESvgtDlgSaveCommand);   
+    	return EFalse;
+    	}
+  
+    else
+        {
+        if ( aButtonId == EAknSoftkeyBack )
+            {
+            // Check whether full screen is active
+            TBool isFullScreenActive;
+            iCustControl->GetCurrentFullScreenStatus( isFullScreenActive );
+
+            if ( isFullScreenActive )
+                {
+                //  Yes[FullScreen]: revert back to normal screen
+                ProcessCommandL( ESvgtDlgNormalScreenCommand );
+                return EFalse;
+                }
+
+            // Check whether content is zoomed in
+            TInt zoomLvl = 0;
+            iCustControl->GetCurrentZoomLevel( zoomLvl );
+
+            if ( zoomLvl > 0 )
+                {
+                //  Yes[ZoomedIn]: restore to original view
+                iCustControl->ProcessViewerCommandL(
+                    ESvgtDlgZoomOptimalCommand );
+                return EFalse;
+                }
+            return !SaveNeededL( aButtonId );            
+            }
+            else
+                {
+                // Ignore Select Key..
+                if ( aButtonId == EAknSoftkeySelect || aButtonId == EEikBidOk )
+                    {
+					//If animation on mousedown/mouseup is present trigger it
+					if(iCustControl->GetMSKLabelFlag(aButtonId))
+						{
+						TKeyEvent lKeyEvent;
+						lKeyEvent.iScanCode=EStdKeyDevice3;
+						iCustControl->OfferKeyEventL(lKeyEvent,EEventKey);	
+						iCustControl->ChangeMSKLabelFlag(aButtonId);
+						TRAP_IGNORE(iCustControl->SetMSKLabelL());
+						}
+					
+						
+				
+                    // Select button pressed, ignore.
+                    return EFalse;
+                    }
+                if ( aButtonId == EEikCmdExit )
+                    {
+                    return !SaveNeededL( aButtonId ); 
+                    }
+                }
+            
+        }
+        
+    return ETrue;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::IsLoadingDone
+// This function is called by the application to check whether the
+// loading of the svg content is done.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTUIDialog::IsLoadingDone()
+    {
+    return iCustControl->IsProcessDone();
+    }   
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::HandleApplicationForegroundEvent
+// This API is used by the application to give background/foreground events
+// to the Dialog. The dialog inturn passes the events to custom control.
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::HandleApplicationForegroundEvent( TBool aForeground )
+    {
+    if ( iCustControl )
+        {
+        iCustControl->HandleApplicationForegroundEvent( aForeground );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::StopUsingContentFileHandle
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::StopUsingContentFileHandle()
+    {
+    // NOTE: Currently the custom control and the engine are
+    // not actively using the File handle. e.g. Engine uses
+    // the file handle only during loading of content. And custom
+    // control uses it when File Details are shown. 
+    // If required, in future need to pass this event to custom control.
+    // Block the filedetails option now.
+    iIsFileHandleValid = EFalse;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::StartUsingContentFileHandle
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::StartUsingContentFileHandle()
+    {
+    iIsFileHandleValid = ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::IsTextContentChanged
+// Function used by the client to check if text in the content was modified, 
+// to check if save is needed.
+// -----------------------------------------------------------------------------
+//
+TBool CSVGTUIDialog::IsTextContentChanged()
+    {
+    return (iCustControl->IsTextContentChanged());    
+    }
+        
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::SaveSvgDom
+// Function used by the client to save the modified svg content
+// -----------------------------------------------------------------------------
+//
+TInt CSVGTUIDialog::SaveSvgDom( const TDesC& aFileName )
+    {
+    if ( iCustControl )
+        {
+        return ( iCustControl->SaveSvgDom( aFileName ) );
+        }
+        else 
+            {
+            return KErrGeneral;            
+            }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::SaveComplete
+// Function used by the client to indicate saving is complete
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::SaveComplete( const TInt aError )
+    {
+    if ( !aError )
+        {
+        // Indicate to Custom Control to perform any cleanup
+        // once save is complete
+        iCustControl->SaveComplete( aError );
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::ProcessCommandL
+// Reimplements CAknDialog::ProcessCommandL inorder to handle dialog menu
+// commands.
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::ProcessCommandL( TInt aCommandId )  // Command Id
+    {
+    // The Commands are handled by the custom CCoe Control and
+    // a boolean varialble is used inorder to keep track whether
+    // the control command processing needs to be invoked or not.
+    TBool procCmdReqd = ETrue;
+    CAknDialog::ProcessCommandL( aCommandId );
+    switch ( aCommandId )
+        {
+        case ESvgtDlgSaveCommand: 
+            if ( iAppObserver )
+                {
+                iAppObserver->DoSaveL( ESvgtDlgCommand1 );
+                }
+            break;
+        case ESvgtDlgHelpCommand:
+#ifdef __SERIES60_HELP            
+            procCmdReqd = EFalse;
+            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+                iEikonEnv->EikAppUi()->AppHelpContextL() );
+#endif // __SERIES60_HELP           
+            break;
+        case ESvgtDlgFindTextCommand:
+            break;
+        case ESvgtDlgViewDetailsCommand:
+            break;
+        case ESvgtDlgListDownloadCommand:    
+            {          
+            if ( iAppObserver )
+                {
+                iAppObserver->DisplayDownloadMenuL();
+                }                           
+            break;              
+            }
+        case ESvgtDlgFullScreenCommand:
+            {
+            if ( iCustControl )
+                {
+                iCustControl->SetCurrentFullScreenStatus( ETrue );
+                SwitchDialogLayoutL( ETrue ); // ETrue = Full Screen Mode
+                // Redraw Status Pane and CBA by doing a draw on dialog
+                DrawNow();
+                }
+            break;
+            }
+        case ESvgtDlgNormalScreenCommand:
+            {
+            if ( iCustControl )
+                {
+                iCustControl->SetCurrentFullScreenStatus( EFalse );            
+                SwitchDialogLayoutL( EFalse ); // EFalse = Normal Screen Mode
+                // Redraw Status Pane and CBA by doing a draw on dialog
+                DrawNow();                
+                }
+            break;
+            }
+//@@ Touch support
+#ifdef RD_SVGT_AUDIO_SUPPORT
+        case ESvgtDlgMuteCommand:
+            iIsVolumeMuted = !iIsVolumeMuted;
+            iCustControl->SetPresentationVolume(0);
+
+            if(iCustControl->IsContentFinite())
+                SetNaviPaneInfoL(iIsVolumeMuted, *iProgressText);
+            else
+                SetNaviPaneInfoL(iIsVolumeMuted, KNullDesC);
+            break;
+            
+        case ESvgtDlgUnmuteCommand:
+            iIsVolumeMuted = !iIsVolumeMuted;
+            // Set the volume level to the value it was before muting
+            iCustControl->SetPresentationVolume(iCustControl->GetPrevVolume());
+            
+            if(iCustControl->IsContentFinite())
+                SetNaviPaneInfoL(iIsVolumeMuted, *iProgressText);
+            else
+                SetNaviPaneInfoL(iIsVolumeMuted, KNullDesC);
+            break;            
+        case ESvgtDlgSetVolumeCommand:       // Fall Through
+#endif //RD_SVGT_AUDIO_SUPPORT        
+//@@ Touch support
+        case ESvgtDlgLoopOnCommand:     // Fall Through
+        case ESvgtDlgLoopOffCommand:    // Fall Through
+        case ESvgtDlgPlayCommand:       // Fall Through
+        case ESvgtDlgPauseCommand:      // Fall Through
+        case ESvgtDlgStopCommand:       // Fall Through
+        case ESvgtDlgZoomInCommand:     // Fall Through
+        case ESvgtDlgZoomOutCommand:    // Fall Through
+        case ESvgtDlgAngle90:           // Fall Through
+        case ESvgtDlgAngle180:          // Fall Through
+        case ESvgtDlgAngle270:          // Fall Through
+        case ESvgtDlgSelectTextCommand: // Fall Through
+        case ESvgtDlgEditTextCommand:   // Fall Through
+            break;
+        case EAknSoftkeyBack: // Fall Through
+        case EEikCmdExit:
+            // Close this dialog
+            procCmdReqd = EFalse; // No Further Processing required.
+            TryExitL( aCommandId );
+            break;
+        case EAknCmdExit:          
+            // Close this dialog
+            procCmdReqd = EFalse; // No Further Processing required.
+            if ( !SaveNeededL( aCommandId ) )
+                {
+                TryExitL( aCommandId );  
+                iAvkonAppUi->ProcessCommandL( EAknCmdExit );                
+                }
+            break;
+        default:
+            procCmdReqd = EFalse;
+            break;
+        }
+    // If custom control has been created and control needs
+    // to process the command invoke the control's ProcessViewerCommandL()
+    // function
+    if ( procCmdReqd && iCustControl )
+        {
+        iCustControl->ProcessViewerCommandL( aCommandId );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::CreateCustomControlL
+// Reimplements CAknDialog::CreateCustomControlL inorder to add the SVGT
+// custom control as part of the dialog in the UI framework.
+// Returns: SEikControlInfo which contains the SVGT Cust Control, if
+//                          aControlType == ESVGTCustControl
+//                     else,
+//                           the structure does not contain any control.
+// -----------------------------------------------------------------------------
+//
+SEikControlInfo CSVGTUIDialog::CreateCustomControlL(
+        TInt aControlType ) // Control Type
+    {
+    SEikControlInfo controlInfo;
+    controlInfo.iControl = NULL;
+    controlInfo.iTrailerTextId = 0;
+    controlInfo.iFlags = EEikControlHasEars;//EEikControlIsNonFocusing;
+
+    switch ( aControlType )
+        {
+        case ESVGTCustControl:
+            iCustControl = CSVGTCustControl::NewL(
+                            *iFileHandlePtr,
+                            iAppObserver,
+                            this,
+                            this, 
+                            this, 
+                            ETrue,    // Progressive rendering enabled.
+                                      // To enable it pass ETrue 
+                                      // otherwise EFalse.
+                            NULL,
+                            ESvgDisplayIcons|
+                            ESvgDrawPanIndicator|
+                            ESvgDrawPointer |
+                            ESvgDisplayErrorNotes |
+                            ESvgDrawPauseIndicator | 
+                            ESvgUseBackLight
+                            ); 
+            iCustControl->AddListener(this,EAudioListener);
+            controlInfo.iControl = iCustControl;
+            controlInfo.iControl->SetContainerWindowL(*this);                
+            iCustControl->SetPointerObserver(this);
+            break;
+        default:
+			return CAknDialog::CreateCustomControlL(aControlType);
+        }
+    return controlInfo;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::SizeChanged
+// Reimplements CAknDialog::SizeChanged inorder to support the resize of the
+// dialog when functions such as SetRect, SetExtent are called on the dialog.
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::SizeChanged()
+    {
+    CAknDialog::SizeChanged();
+    iCustControl->SetExtent( Rect().iTl, Rect().Size() );
+    AknLayoutUtils::LayoutMetricsPosition(AknLayoutUtils::EControlPane, iBtnGrpPos);
+    AknLayoutUtils::LayoutMetricsSize(AknLayoutUtils::EControlPane, iBtnGrpSize);
+    DrawNow();
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::OfferKeyEventL
+// Handles Key events by reimplementing CCoeControl::OfferKeyEventL.
+// Returns:
+//      EKeyWasConsumed: If this control uses this key.
+//      EKeyWasNotConsumed: Otherwise.
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CSVGTUIDialog::OfferKeyEventL(
+    const TKeyEvent& aKeyEvent, // Key Event
+    TEventCode aType)           // Event Code
+    {
+    if ( iCustControl )
+        {
+        if ( aType == EEventKey )
+            {
+            if ( aKeyEvent.iScanCode == EStdKeyEnter  )
+                {
+                TryExitL( iLastCommandID );
+                
+                return iCustControl->OfferKeyEventL( aKeyEvent, aType );
+                }
+            
+            if ( aKeyEvent.iCode == KSvgScreenToggleKey && 
+                 aKeyEvent.iRepeats == 0 ) // Ignore Repeat Events
+                {
+                // Screen Mode Change Handling
+                TBool isFullScreenOn;
+                iCustControl->GetCurrentFullScreenStatus( isFullScreenOn );
+                if ( isFullScreenOn )
+                    {
+                    // Toggle to Normal Screen
+                    ProcessCommandL( ESvgtDlgNormalScreenCommand );
+                    }
+                    else
+                        {
+                        // Toggle to Full Screen
+                        ProcessCommandL( ESvgtDlgFullScreenCommand );
+                        }
+                // No further processing required.
+                return EKeyWasConsumed;
+                }
+            }
+        // Pass the key to the custom control
+        TKeyResponse lCcRetVal = iCustControl->OfferKeyEventL( aKeyEvent, 
+                                                               aType );
+        if ( lCcRetVal == EKeyWasConsumed )
+            {
+            return EKeyWasConsumed;
+            }
+        }
+    return CAknDialog::OfferKeyEventL( aKeyEvent, aType );        
+    }
+
+#ifdef __SERIES60_HELP
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::OfferKeyEventL
+// Handles Key events by reimplementing CCoeControl::OfferKeyEventL.
+// Returns:
+//      EKeyWasConsumed: If this control uses this key.
+//      EKeyWasNotConsumed: Otherwise.
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    aContext.iMajor = KSvgtHelpContextUid;    
+    aContext.iContext = KSVGT_HLP_VIEWER;
+    }
+#endif // __SERIES60_HELP
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::HandleResourceChange
+// Handles change of skin/Layout
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::HandleResourceChange( TInt aType )
+    {
+    CAknDialog::HandleResourceChange( aType );
+    if( iQuietExitWhenOrientationChange )
+        {
+           TryExitL( EAknCmdExit );  
+           return;
+        }
+    if ( aType == KAknsMessageSkinChange )
+        {
+        // No skin related action performed.
+        }
+        else if ( aType == KEikDynamicLayoutVariantSwitch )
+            {
+            if ( iCustControl )
+                {
+                TBool isFullScreenOn;
+                // Check whether the custom control is using full-screen or
+                // normal screen
+                iCustControl->GetCurrentFullScreenStatus( isFullScreenOn );                
+                // Change the layout to reflect layout switch
+                TRAP_IGNORE( SwitchDialogLayoutL( isFullScreenOn ) );
+                }
+            }
+
+    // If it is a Layout switch, need to do a redraw
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        // Redraw the dialog
+        DrawDeferred();
+        }
+    }
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::DrawProgressBarL
+// This function updates the progress bar in the navi pane. It is called back 
+// by the custom control.
+// -----------------------------------------------------------------------------
+//
+void CSVGTUIDialog::DrawProgressBarL( TUint aTimeElapsed, // Time Elapsed in 
+                                                          // Seconds
+    TUint aTimeTotal ) // Total time in seconds
+    {
+        
+    TBuf<KMaxTimeTextLength> timeElapsedBuf; // Time Elapsed, e.g. "00:12"
+    TBuf<KMaxTimeTextLength> totalTimeBuf; // Total duration, e.g. "00:55"
+    
+    // Format the time to user readable format. The format is locale dependent
+    FormatTimeL( aTimeElapsed, timeElapsedBuf );  
+    FormatTimeL( aTimeTotal, totalTimeBuf );  
+
+    // Format label text based on resource
+    CDesCArrayFlat* strings = new (ELeave) CDesCArrayFlat( 2 ); // Allocate 2 
+                                                                // strings for
+                                                                // elapsed time
+                                                                // and total 
+                                                                // time strings
+    CleanupStack::PushL( strings );
+    strings->AppendL( timeElapsedBuf );
+    strings->AppendL( totalTimeBuf );
+
+    delete iProgressText;
+    iProgressText = NULL;
+    iProgressText = StringLoader::LoadL( R_QTN_SVGT_TIME_INDIC, 
+                                      *strings, 
+                                      iEikonEnv );
+    // Destroy the array of strings
+    CleanupStack::PopAndDestroy( strings );
+    
+    SetNaviPaneInfoL( iIsVolumeMuted, *iProgressText);
+    }    
+
+void CSVGTUIDialog::HandleApplicationExitL( TInt aExitCommand )
+    {
+    if((aExitCommand == EAknSoftkeyBack) || ( aExitCommand == EEikCmdExit))
+        {
+        this->TryExitL(aExitCommand);
+        }
+    else
+        {
+        User::LeaveIfError(KErrArgument);
+        }
+    }
+
+EXPORT_C void CSVGTUIDialog::AssignImageData( const TDesC& aUri, HBufC8* aData )
+    {
+    iCustControl->AssignImageData(aUri, aData);
+    }
+
+// -----------------------------------------------------------------------------
+// CSVGTUIDialog::SetNaviPaneInfoL
+// Sets the mute icon & text to the navi pane.
+// -----------------------------------------------------------------------------
+void CSVGTUIDialog::SetNaviPaneInfoL(TBool aIsVolumeMuted, const TDesC& aText)
+    {
+    CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
+    CAknNavigationControlContainer* np = 
+            static_cast<CAknNavigationControlContainer*>
+            ( sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+    // Save the old Navi Decorator so that it can be deleted after 
+    // creating the new navi decorator 
+    CAknNavigationDecorator* lOldNaviDecorator = iNaviDecorator;
+            
+    iNaviDecorator = NULL;
+
+    CSvgtDecoratorControl* decoControl = new (ELeave) CSvgtDecoratorControl;
+    CleanupStack::PushL(decoControl);
+    decoControl->ConstructL();
+    decoControl->ShowVolumeMutedIcon(aIsVolumeMuted);
+    decoControl->SetTextL(aText);
+    iNaviDecorator = CAknNavigationDecorator::NewL(np, decoControl);
+    iNaviDecorator->SetContainerWindowL(*this);
+    CleanupStack::Pop(decoControl);
+        
+    // Clear the old Navi-Pane Decorator
+    if ( lOldNaviDecorator )
+        {
+        delete lOldNaviDecorator ;
+        lOldNaviDecorator = NULL;
+        }
+    // Push the new Navi decorator in the Navigation Pane
+    np->PushL( *iNaviDecorator );
+    }    
+    
+void CSVGTUIDialog::VolumeMuted(TBool aVolumeMuted)
+    {
+    if(iCustControl->IsContentFinite())
+        {
+        TRAP_IGNORE( SetNaviPaneInfoL(aVolumeMuted, *iProgressText));
+        }
+    else
+        {
+        TRAP_IGNORE(SetNaviPaneInfoL(aVolumeMuted, KNullDesC));
+        }
+    iIsVolumeMuted = aVolumeMuted;
+    }
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SvgtController.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,269 @@
+/*
+* Copyright (c) 2005 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:  This file implements the active objects used for progressive 
+*                rendering 
+*
+*/
+
+
+#include "SvgtController.h"
+#include <eikenv.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <eikspane.h>
+#include "SVGTCustControl.h"
+
+const TInt KAnimationInerval = 100000;
+
+_LIT(KDot, ". ");
+
+/*
+*************************************************************************************
+*   ThreadController Implemetation
+*
+***************************************************************************************
+*/
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::NewL
+// Two phase constructor
+// -----------------------------------------------------------------------------
+//
+CSvgtThreadController* CSvgtThreadController::NewL(CSVGTCustControl* aCustControl)
+    {
+    CSvgtThreadController* self = CSvgtThreadController::NewLC(aCustControl);
+    CleanupStack::Pop(self);    //self
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::NewLC
+// Two phase constructor
+// -----------------------------------------------------------------------------
+//
+CSvgtThreadController* CSvgtThreadController::NewLC(CSVGTCustControl* aCustControl)
+    {
+    CSvgtThreadController* self = new (ELeave) CSvgtThreadController(aCustControl);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::~CSvgtThreadController
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSvgtThreadController::~CSvgtThreadController()
+    {
+    Cancel();
+    if(iLoadAnimator)
+        {
+        iLoadAnimator->Cancel();
+        }
+        
+    delete iLoadAnimator;
+    ClearNaviPaneDecorator();
+    // Reset eikon env pointer
+    iEikEnv = NULL;
+    // Reset the custom control pointer
+    iCustControl = NULL;
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::DoCancel
+// Cancels all the pending request
+// -----------------------------------------------------------------------------
+//
+void CSvgtThreadController::DoCancel()
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::RunL
+// Handles an active object's request completion event.
+// -----------------------------------------------------------------------------
+//
+void CSvgtThreadController::RunL()
+    {
+    iCustControl->SetThreadRunning(EFalse);
+    iLoadAnimator->Cancel();
+    iCount = KAnimationLength;
+    DoLoadAnimationL();
+    TInt lLoadError = iCustControl->DoHandleLoadingThreadError();
+    TInt lPostLoadError = KErrNone;
+    
+    // Stop displaying progressive-render indicator
+    ClearNaviPaneDecorator();
+    //iCustControl->StopEventHandler();
+    if( lLoadError == KErrNone )
+        {
+        // No Load error, Do the post load functionality
+        TRAP( lPostLoadError, iCustControl->DoPostLoadFuncL() );    
+        }
+    
+    // If there were any errors then ask parent to exit
+    if ( ( lLoadError!= KErrNone ) || ( lPostLoadError != KErrNone ) )
+        {
+        // Error has occurred, commence cleanup 
+        // Request Observer to Exit
+   	    iCustControl->DoExitFromDialogL();
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::CSvgtThreadController
+// Parameterized constructor
+// -----------------------------------------------------------------------------
+//
+CSvgtThreadController::CSvgtThreadController(CSVGTCustControl* aCustControl):
+                                                CActive(EPriorityStandard),
+                                                iCustControl(aCustControl)
+    {
+    CActiveScheduler::Add(this);
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::ConstructL
+// Two phase constructor
+// -----------------------------------------------------------------------------
+//
+void CSvgtThreadController::ConstructL()
+    {
+    iLoadAnimator = CPeriodic::NewL(CActive::EPriorityStandard);
+    
+    // Store the environment pointer to avoid slow static access
+    iEikEnv = CEikonEnv::Static();
+    User::LeaveIfNull( iEikEnv );
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::IssueThreadMonitorRequest
+// Makes it active to get notify on thread death
+// -----------------------------------------------------------------------------
+//
+void CSvgtThreadController::IssueThreadMonitorRequest(const RThread& aThread)
+    {
+    aThread.Logon(iStatus);
+    iMainThread = aThread.Id();
+    SetActive();
+
+    TCallBack callBack(LoadAnimationCallBack, this);
+    iCount  = 0;
+    iLoadAnimator->Start(0, KAnimationInerval, callBack);
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::StopThreadExecution
+// Stops the thread execution
+// -----------------------------------------------------------------------------
+//
+void CSvgtThreadController::StopThreadExecution(const RThread& aThread)
+    {
+    aThread.LogonCancel(iStatus);
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::DoLoadAnimationL
+// This fuction does the loading animation
+// -----------------------------------------------------------------------------
+//
+void CSvgtThreadController::DoLoadAnimationL()
+    {
+    CEikStatusPane* sp = iEikEnv->AppUiFactory()->StatusPane();
+    CAknNavigationControlContainer* np = 
+        static_cast<CAknNavigationControlContainer*>
+            ( sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+
+    if(iCount >= KAnimationLength)
+        {
+        iCount = 0;
+        iAnimationText.Zero();
+        }
+    else
+        {
+        iCount++;
+        iAnimationText.Append(KDot);
+        }
+
+    CAknNavigationDecorator* lOldNaviDecorator = iNaviDecorator;
+    iNaviDecorator = NULL;
+    if ( lOldNaviDecorator )
+        {
+        delete lOldNaviDecorator ;
+        lOldNaviDecorator = NULL;
+        }
+
+    // Clear the old Navi-Pane Decorator
+    // Create the navi pane label            
+    iNaviDecorator = np->CreateNavigationLabelL( iAnimationText );
+
+    // Save the old Navi Decorator so that it can be deleted after 
+    // creating the new navi decorator 
+    // Push the new Navi decorator in the Navigation Pane
+    np->PushL( *iNaviDecorator );
+    
+    }
+    
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::LoadAnimationCallBack
+// Callback fuction for loading animation
+// -----------------------------------------------------------------------------
+//
+TInt CSvgtThreadController::LoadAnimationCallBack(TAny* aThreadController)
+    {
+    CSvgtThreadController* threadController = 
+        static_cast< CSvgtThreadController* >( aThreadController );
+    if ( threadController )
+        {
+        TRAPD( ignore, threadController->DoLoadAnimationL() );
+        if ( ignore != KErrNone )
+            {
+            // No error handling done.
+            }
+        }
+    return 0;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtThreadController::ClearNaviPaneDecorator
+// Clears the navi pane indicator when the loading animation gets over
+// -----------------------------------------------------------------------------
+//
+void CSvgtThreadController::ClearNaviPaneDecorator()
+    {
+    // Clear the Navi-Pane Decorator    
+    if ( iNaviDecorator )
+        {
+        // Restore the old navi-pane
+        CEikStatusPane* sp = iEikEnv->AppUiFactory()->StatusPane();
+        
+        CAknNavigationControlContainer* np = NULL;
+        TRAPD( errGetNaviControl, 
+            np = static_cast< CAknNavigationControlContainer* >
+            ( sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ) );
+        if ( errGetNaviControl == KErrNone && np )
+            {
+            TRAPD( errPushDefNaviControl, 
+                np->PushDefaultL ()); // Set default.    
+            if ( errPushDefNaviControl != KErrNone )
+                {
+                // No error handling here.
+                }
+            }
+        delete iNaviDecorator;
+        iNaviDecorator = NULL;
+        }
+    }
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SvgtDecoratorControl.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 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:  Used to decorate the control on the navi pane
+*
+*/
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// -----> CSvgtDecoratorControl (implementation)
+//
+//////////////////////////////////////////////////////////////////////////////
+#include "SvgtDecoratorControl.h"
+#include <eikenv.h>
+
+#include <aknnavi.h>
+#include <AknsUtils.h>
+#include <gulicon.h>
+#include <eikspane.h>
+#include <avkon.mbg>
+#include <avkon.hrh>
+#include <eikimage.h>
+#include <eiklabel.h>
+
+_LIT(KAvkonMifFileName, "z:\\resource\\apps\\avkon2.mif");
+
+// -----------------------------------------------------------------------------
+// CSvgtDecoratorControl::CSvgtDecoratorControl
+// default constructor
+// -----------------------------------------------------------------------------
+CSvgtDecoratorControl::CSvgtDecoratorControl()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSvgtDecoratorControl::ConstructL
+// 2nd phase constructor
+// -----------------------------------------------------------------------------
+void CSvgtDecoratorControl::ConstructL()
+	{
+	iNaviPane = static_cast<CAknNavigationControlContainer*>
+	    ( CEikStatusPaneBase::Current()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+    //Create icon for drawing the pointer
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb txtColor;
+    AknsUtils::GetCachedColor( skin, txtColor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG2 );
+    
+    iMutedIcon = AknsUtils::CreateGulIconL( 
+            skin,
+            KAknsIIDQgnIndiMupSpeakerMuted,
+            KAvkonMifFileName,
+            EMbmAvkonQgn_indi_speaker_muted,
+            EMbmAvkonQgn_indi_speaker_muted_mask );
+    
+    iImg = new (ELeave) CEikImage;
+    iImg->SetContainerWindowL(*this);
+    iImg->SetPictureOwnedExternally(ETrue);
+        
+    iLabel = new (ELeave) CEikLabel;
+    iLabel->SetContainerWindowL(*this);
+    iLabel->SetFont(iEikonEnv->DenseFont());
+    iLabel->OverrideColorL( EColorLabelText, txtColor );
+    iLabel->SetTextL(KNullDesC);
+    
+    ShowVolumeMutedIcon(EFalse);
+    TRect rt(iNaviPane->Rect().iTl, iNaviPane->Rect().Size());
+	SetRect(rt);
+	
+	ActivateL();	
+	}
+
+// -----------------------------------------------------------------------------
+// CSvgtDecoratorControl::~CSvgtDecoratorControl
+// Destructor
+// -----------------------------------------------------------------------------
+CSvgtDecoratorControl::~CSvgtDecoratorControl()
+	{
+	delete iImg;
+	delete iLabel;
+
+	delete iMutedIcon;
+	}
+
+
+
+// -----------------------------------------------------------------------------
+// CSvgtDecoratorControl::CountComponentControls
+// From CCoeControl
+// -----------------------------------------------------------------------------
+TInt CSvgtDecoratorControl::CountComponentControls() const
+	{
+	return ELastCtrl;
+	}
+
+// -----------------------------------------------------------------------------
+// CSvgtDecoratorControl::ComponentControl
+// From CCoeControl
+// -----------------------------------------------------------------------------
+CCoeControl* CSvgtDecoratorControl::ComponentControl(TInt aIndex) const
+	{
+	CCoeControl* control = NULL;
+	switch (aIndex)
+	    {
+	    case EMuteImageCtrlId:
+	        control = static_cast<CCoeControl*>(iImg);
+	        break;
+	    case ETextCtrlId:
+	        control = static_cast<CCoeControl*>(iLabel);
+	        break;
+	    default:
+	        break;    
+	    }
+	return control;
+	}
+
+// -----------------------------------------------------------------------------
+// CSvgtDecoratorControl::SizeChanged
+// From CCoeControl
+// -----------------------------------------------------------------------------
+void CSvgtDecoratorControl::SizeChanged()
+    {
+	CCoeControl::SizeChanged();
+	
+	const TInt KBitmapWidth = 40;
+	const TInt naviWidth = iNaviPane->Rect().Width();
+	const TInt naviHeight = iNaviPane->Rect().Height() ;
+
+    AknIconUtils::SetSize( iMutedIcon->Bitmap(), TSize(KBitmapWidth, naviHeight));
+    AknIconUtils::SetSize( iMutedIcon->Mask(), TSize(KBitmapWidth, naviHeight));
+	
+	TInt imgWidth = KBitmapWidth;
+	TInt lblWidth = naviWidth - imgWidth;
+	
+	TPoint imgPos;
+	TPoint lblPos(imgWidth, 0);
+	
+	iImg->SetExtent(imgPos, TSize(imgWidth, naviHeight));
+	iLabel->SetExtent(lblPos, TSize(lblWidth, naviHeight));
+
+	}
+	
+
+// -----------------------------------------------------------------------------
+// CSvgtDecoratorControl::Draw
+// From CCoeControl
+// -----------------------------------------------------------------------------
+void CSvgtDecoratorControl::Draw(const TRect& aRect) const
+	{
+	CEikBorderedControl::Draw(aRect);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CSvgtDecoratorControl::OfferKeyEventL
+// From CCoeControl
+// -----------------------------------------------------------------------------
+TKeyResponse CSvgtDecoratorControl::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	return CCoeControl::OfferKeyEventL(aKeyEvent, aType);//EKeyWasNotConsumed;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CSvgtDecoratorControl::SizeChanged
+// Sets the visibility of the mute icon in the navi pane.
+// -----------------------------------------------------------------------------
+void CSvgtDecoratorControl::ShowVolumeMutedIcon( TBool aVolumeMuted )
+    {
+    if(aVolumeMuted)
+        {
+        iImg->SetPicture(iMutedIcon->Bitmap(), iMutedIcon->Mask());
+        }
+    else
+        {
+        
+        iImg->SetPicture(NULL, NULL);
+        }    
+//    iImg->DrawDeferred()
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtDecoratorControl::SetTextL
+// Sets the progress text in the navi pane.
+// -----------------------------------------------------------------------------
+void CSvgtDecoratorControl::SetTextL( const TDesC& aText)
+    {
+    iLabel->SetTextL( aText );
+//    iLabel->DrawDeferred()
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SvgtEvent.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#include "SvgtEvent.h"
+
+CSvgtEvent::CSvgtEvent(CSvgtEvent::TSvgtEventType aEventType,  const TDesC& aUri):
+                            iEventType (aEventType)
+    {
+    iUri = aUri.Alloc();
+    }
+
+CSvgtEvent::~CSvgtEvent()
+    {
+    delete iUri;
+    }
+    
+CSvgtEvent::TSvgtEventType CSvgtEvent::EventType() const
+    {
+    return iEventType;
+    }
+
+TPtrC CSvgtEvent::ImageUri() const
+    {
+    return TPtrC( iUri->Des() );
+    }
+
+CSvgtEventEmbededImage::CSvgtEventEmbededImage( const TDesC& aUri):
+                        CSvgtEvent(CSvgtEvent::ESvgtEventEmbededImage, aUri)
+    {
+    
+    }
+CSvgtEventFetchImage::CSvgtEventFetchImage( const TDesC& aUri):
+                        CSvgtEvent(CSvgtEvent::ESvgtEventFetchImage, aUri)
+    {
+    }
+    
+CSvgtEventLinkActivated::CSvgtEventLinkActivated( const TDesC& aUri):
+                        CSvgtEvent(CSvgtEvent::ESvgtEventLinkActivated, aUri)
+    {
+    }
+
+CSvgtEventLinkActivatedWithShow::CSvgtEventLinkActivatedWithShow( const TDesC& aUri, 
+                                const TDesC& aShow): 
+                                CSvgtEvent(CSvgtEvent::ESvgtEventLinkActivatedWithShow, aUri)
+    {
+    iShow = aShow.Alloc();
+    }
+    
+TPtrC CSvgtEventLinkActivatedWithShow::Show() const
+    {
+    return TPtrC(iShow->Des());
+    }
+
+CSvgtEventRedraw::CSvgtEventRedraw() : CSvgtEvent( CSvgtEvent::ESvgtEventRedraw, KNullDesC )
+    {
+    }
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/UIControlSrc/SvgtEventHandlerAO.cpp	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,319 @@
+/*
+* Copyright (c) 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:  This class handles the event list & process the events 
+*                 while progressive rendering
+*
+*/
+
+
+#include "SvgtEventHandlerAO.h"
+#include <SVGTAppObserverUtil.h>
+#include <imcvcodc.h>
+#include "SvgtEvent.h"
+
+const TInt KTimerIntervalInMiliSeconds = 1000;
+
+const TInt KInitialTimeInterval = 100;
+const TInt KMaxTimeInterval = 2000;
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::NewL
+// Two phase construction
+// -----------------------------------------------------------------------------
+//
+CSvgtEventHandlerAO* CSvgtEventHandlerAO::NewL(MSvgtAppObserver* aAppObserverUtil, 
+                                CSVGTCustControl* aCustControl ,
+                                const TThreadId aMainThreadId )
+    {
+    CSvgtEventHandlerAO* self = new ( ELeave ) CSvgtEventHandlerAO( aAppObserverUtil , 
+                                                                    aCustControl, 
+                                                                    aMainThreadId);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::CSvgtEventHandlerAO
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CSvgtEventHandlerAO::CSvgtEventHandlerAO(MSvgtAppObserver* aAppObserverUtil, 
+                                        CSVGTCustControl* aCustControl, 
+                                        const TThreadId aMainThreadId):
+                                        CActive( CActive::EPriorityStandard ),
+                                        iCustControl(aCustControl),
+                                        iMainThreadId( aMainThreadId ),
+                                        iIsDocumentComplete( EFalse ),
+                                        iStepCount( 1 ),
+                                        iSvgTimeBetweenRedraw( KInitialTimeInterval )
+    {
+    iAppObserverUtil = static_cast<CSVGTAppObserverUtil*>(aAppObserverUtil);
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::ConstructL
+// 2nd phase constructor
+// -----------------------------------------------------------------------------
+//
+void CSvgtEventHandlerAO::ConstructL()
+    {
+    iPreviousRedrawClock.HomeTime();
+    // Add to active scheduler
+    CActiveScheduler::Add( this );
+    // Set the status as pending
+    iStatus = KRequestPending;
+    // Set the active object as Active
+    SetActive();
+    // Create the critical section IPC for sync. the RequestComplete Calls
+    iCritSection.CreateLocal();
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::~CSvgtEventHandlerAO
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSvgtEventHandlerAO::~CSvgtEventHandlerAO()
+    {
+    Cancel();
+    iEventList.ResetAndDestroy();
+    iEventList.Close();
+    iCritSection.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::AddEventToList
+// It adds the event (except redraw event) to the event queue.
+// -----------------------------------------------------------------------------
+//
+TBool CSvgtEventHandlerAO::AddEventToList( CSvgtEvent* aEvent)
+    {
+    iEventList.Append( aEvent );
+    return ETrue;        
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::AddRedrawEventToList
+// It adds the redraw event to the event queue.
+// -----------------------------------------------------------------------------
+//
+TBool CSvgtEventHandlerAO::AddRedrawEventToList( const TBool aForceAdd )
+    {
+    TBool isEventAdded = EFalse;
+    if(aForceAdd || IsRedrawTimeElapsed())
+        {
+        CSvgtEvent* redrawEvent = new CSvgtEventRedraw;
+        iEventList.Append( redrawEvent );
+        isEventAdded = ETrue;
+        }
+    
+    return isEventAdded;        
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::MakeRequestComplete
+// It make the request complete.
+// -----------------------------------------------------------------------------
+//
+void CSvgtEventHandlerAO::MakeRequestComplete( TInt aError )
+    {
+    // The Asynchronouse service provider must only call the RequestComplete()
+    // once for each request. Multiple completion events on a single active
+    // object result in a stray signal panic.
+    // Hence use a critical section to synchronize access to RequestComplete()
+    iCritSection.Wait();
+    if( ( IsActive() ) && ( iStatus == KRequestPending ) )
+        { 
+        // The asynchronous service provider is the loading thread and since 
+        // this is called from both loading thread as well as main thread
+        // use the RThread object to complete the request for active
+        // object present in the main thread's active scheduler
+        TRequestStatus* status = &iStatus;
+        RThread mainThread;
+
+        if( mainThread.Open( iMainThreadId) )
+            {
+            // Problem opening thread, ignore error and return : Should not happen.
+            return;
+            }
+            
+        mainThread.RequestComplete( status, aError );
+        mainThread.Close();
+        }
+    iCritSection.Signal();
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::AddEventToList
+// It indicates that document is document loading completed.
+// -----------------------------------------------------------------------------
+//
+void CSvgtEventHandlerAO::SetDocumentComplete()
+    {
+    iIsDocumentComplete = ETrue;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::RunL
+// Handles an active object's request completion event.
+// -----------------------------------------------------------------------------
+//
+void CSvgtEventHandlerAO::RunL()
+    {
+    // Set the Active Object Active always
+    if( !IsActive() )
+        {
+        iStatus = KRequestPending;
+        SetActive();
+        }
+
+    if(iEventList.Count())    
+        {
+        CSvgtEvent* event = iEventList[0];
+        iEventList.Remove( 0 );
+        switch(event->EventType())
+            {
+            case CSvgtEvent::ESvgtEventEmbededImage:
+                {
+                CSvgtEventEmbededImage* svgEvent = 
+                                        static_cast<CSvgtEventEmbededImage*>(event);
+                iAppObserverUtil->AssignEmbededDataL( svgEvent->ImageUri() );
+                }
+                break;
+                
+            case CSvgtEvent::ESvgtEventFetchImage:
+                {
+                CSvgtEventFetchImage* fetchEvent = 
+                                        static_cast<CSvgtEventFetchImage*>(event);
+                iAppObserverUtil->NewFetchImageData(fetchEvent->ImageUri());
+                }
+                break;
+            case CSvgtEvent::ESvgtEventLinkActivated:
+                {
+                CSvgtEventLinkActivated* linkEvent = 
+                                            static_cast<CSvgtEventLinkActivated*>(event);
+                iAppObserverUtil->LinkActivated(linkEvent->ImageUri());
+                }
+                break;
+            case CSvgtEvent::ESvgtEventLinkActivatedWithShow:
+                {
+                CSvgtEventLinkActivatedWithShow* linkShowEvent = 
+                                static_cast<CSvgtEventLinkActivatedWithShow*>(event);
+                iAppObserverUtil->LinkActivatedWithShow(linkShowEvent->ImageUri(), 
+                                                        linkShowEvent->Show());
+                }
+                break;
+            case CSvgtEvent::ESvgtEventRedraw:
+                {
+                //DO REDRAW
+                iCustControl->PerformEngineRedraw();
+                iCustControl->DrawNow();
+                }
+                break;
+                
+            default:
+                break;
+            }
+
+        delete event;
+        }
+
+
+        if( iEventList.Count() )
+            {
+            // Pending events in the list, reschedule active
+            // object
+            MakeRequestComplete( KErrNone );
+            }
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::DoCancel
+// Cancels all the pending request
+// -----------------------------------------------------------------------------
+//
+void CSvgtEventHandlerAO::DoCancel()
+    {
+    // The service provided for this active object is the 
+    // loading thread. Since the loading thread is already indicated to stop
+    // generating requests, need to terminate the request
+    // pending in the main thread
+    DoTerminate();
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::RunError
+// Handles a leave occurring in the request completion event handler RunL().
+// -----------------------------------------------------------------------------
+//
+TInt CSvgtEventHandlerAO::RunError( TInt aError )
+    {
+    // When an error occurs, call base class error handler
+    // Note that active object should not be Cancel() here
+    // as Loading thread could still be alive and do a
+    // MakeRequestComplete. This would generate a stray
+    // signal.
+    return ( CActive::RunError( aError ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::IsRedrawTimeElapsed
+// It determines whether the time elapsed or not.
+// -----------------------------------------------------------------------------
+//
+TBool CSvgtEventHandlerAO::IsRedrawTimeElapsed()
+    {
+    TBool isTimeElapsed = EFalse;
+    TTime currentClock;
+    currentClock.HomeTime();
+
+    TTimeIntervalMicroSeconds time64;
+    time64 = currentClock.MicroSecondsFrom( iPreviousRedrawClock );
+
+    TUint32 timeDelta = I64INT( time64.Int64() ) / KTimerIntervalInMiliSeconds; 
+                                                            // milliseconds
+    
+    if ( timeDelta > iSvgTimeBetweenRedraw )//KSvgTimeBetweenRedraw=500  
+        {
+        if( iSvgTimeBetweenRedraw < KMaxTimeInterval )
+            {
+            iSvgTimeBetweenRedraw *= ++iStepCount;
+            }
+        isTimeElapsed = ETrue;
+        // Save the current time to calculate interframe delay
+        iPreviousRedrawClock.HomeTime();        
+        }
+
+    return isTimeElapsed;
+    }
+
+// -----------------------------------------------------------------------------
+// CSvgtEventHandlerAO::DoTerminate
+// Cancels the pending async request 
+// -----------------------------------------------------------------------------
+//
+void CSvgtEventHandlerAO::DoTerminate()
+    {
+    // Post a pseudo complete, so that Cancel() is done 
+    // successfully. The Loading thread which is the actual service
+    // provider is by now already stopped.
+    // The Asynchronous service provider should complete the 
+    // request with KErrCancel as quickly as possible, because CActive::Cancel
+    // blocks until completion occurs.
+    MakeRequestComplete( KErrCancel );    
+    }
+
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/data/102071E7.rss	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2005 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:  ECOM Resource file for SVGTScreenSaverPlugin.dll
+*
+*/
+
+
+//  INCLUDES
+#include <registryinfo.rh>
+
+#include "ScreensaverpluginIntDef.hrh"
+#include "SvgScreenSaverImplementationUid.hrh"
+
+
+//  RESOURCE DEFINITIONS 
+// -----------------------------------------------------------------------------
+//   
+// theInfo
+// ECOM DLL interface & implementation description resource.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO theInfo
+    {
+    dll_uid = 0x102071E7;
+    interfaces =
+        {
+        INTERFACE_INFO
+            {
+            interface_uid = 0x101F8810; // identifies plugin type (used by ECom)
+            implementations =
+                {
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid =0x102071E6;
+                    version_no = 1;
+                    display_name = "SVGT-ScreenSaver";
+                    default_data = "";
+									// suppored mime types  
+									// mime Extensions
+									// and mime descriptions
+                    opaque_data = "1";
+                    }
+                };
+            }
+        };
+    }
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/data/102073D7.rss	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2005 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:  Registry file for the SVG Decoder Implementation
+*
+*/
+
+
+#include <registryinfo.rh>
+#include <icl/icl_uids.hrh>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <icl/icl_uids_def.hrh>
+#endif
+
+#include "SVGImageCodecUIDs.hrh"
+
+//  RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//   
+// theInfo
+// Specifies the svg interface definition information
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO theInfo
+	{
+	dll_uid = KSVGCodecDllUidValue;
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = KDecoderInterfaceUidValue;
+			implementations = 
+				{
+				BINARY_IMPLEMENTATION_INFO
+					{
+					implementation_uid = KSVGDecoderImplementationUidValue;
+					version_no = 1;
+					display_name = "SVG";
+					default_data = {0x3C, 0x73, 0x76}; // "<SV"
+					opaque_data = {0, 0x10, 0x20, 0x73, 0xE7, 0, 0, 0, 0, 1, 0x2E, 0x73, 0x76, 0x67, 0x0D, 1, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x2F, 0x73, 0x76, 0x67, 0x0D};
+					// 0 0x102073E7 0x00000000 1 .svg 1 image/svg 
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/data/102073D7_extra.rss	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+// 102073D7_extra.rss
+/*
+* ==============================================================================
+*  Name        : 102073D7_extra.rss
+*  Part of     : SVGT Viewer
+*  Description : Resource information file for SVGT decoder
+*  Version     :
+*
+*  Copyright © 2005 Nokia. All rights reserved.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia. All rights are reserved. Copying, including
+*  reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia.
+* ==============================================================================
+*/
+STRUCT DECODER_INFO
+	{
+	LTEXT	decoder_name;
+	LTEXT	image_format;
+	LTEXT	image_dimensions;
+	LTEXT	image_depth[];
+	LTEXT	image_details[];
+	}
+
+//  RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//   
+// theDecoderInfo
+// Specifies the svg decoder information
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DECODER_INFO theDecoderInfo
+	{
+	decoder_name = "Decoder: SVG decoder V1.0";
+	image_format = "Format: SVG";
+	image_dimensions = "Dimensions: %dx%d pixels";
+	image_depth = { "Depth: %dbpp b&w", "Depth: %dbpp colour"};
+	image_details = {"Details: Uncompressed", "Details: Run length encoded"};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/data/SVGTAppObserverUtil.rss	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,211 @@
+/*
+* Copyright (c) 2004,2005 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:  Resource file for SVGT App observer DLL.
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+
+NAME SVGA
+
+//  INCLUDES
+
+#include <eikon.rh>
+#include <avkon.rh>
+#include <avkon.rsg>
+#include <avkon.mbg>
+#include <avkon.loc>
+#include <avkon.hrh>
+#include <documenthandler.loc>
+#ifdef __SCALABLE_ICONS
+#include <appinfo.rh>
+#endif
+#include <CommonDialogs.hrh> 
+#include <CommonDialogs.rh>
+#include <pathconfiguration.hrh>
+#include <e32keys.h> 
+#include <svgtuicontrol.loc>
+// ---------------------------------------------------------
+//
+// Define the resource file signature
+// This resource should be empty.
+//
+// ---------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+    {
+    }
+
+RESOURCE TBUF
+    {
+    buf = "SVGTAppObserver";
+    }
+
+//----------------------------------------------------
+//   
+//    r_svgt_save_locations  
+//
+//----------------------------------------------------
+// 
+RESOURCE MEMORYSELECTIONDIALOG r_svgt_save_locations
+    {
+    softkey_1 = text_softkey_ok;
+    softkey_2 = text_softkey_cancel;
+    locations =
+        {
+#ifndef RD_MULTIPLE_DRIVE
+        LOCATION { root_path = text_phone_memory_root_path text_others_path; },
+        LOCATION { root_path = text_memory_card_root_path text_others_path; }                
+#else
+        LOCATION
+        	{
+        	root_path = "C:\\Data\\";
+        	//default_folder="images\\";
+        	default_folder="Others\\";
+        	},
+        LOCATION
+            {
+            root_path = "E:\\";
+            //default_folder="images\\";
+            default_folder="Others\\";
+            }
+        	
+#endif        
+        };
+    }
+
+// ---------------------------------------------------
+//
+//    r_svgt_mmc_full
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_svgt_mmc_full
+    {
+    buf = qtn_memlo_mmc_not_enough_memory;
+    }
+
+// ---------------------------------------------------
+//
+//    r_svgt_saving_wait_note
+//
+// ---------------------------------------------------
+//
+RESOURCE DIALOG r_svgt_saving_wait_note
+    {
+    flags = EAknProgressNoteFlags;
+    buttons = r_svgt_waitnote_softkeys;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = 10;
+            control = AVKON_NOTE
+                {
+                layout = EProgressLayout;
+                singular_label = qtn_gen_note_saving;
+                imageid = EMbmAvkonQgn_note_progress;
+                imagemask = EMbmAvkonQgn_note_progress_mask;
+                };
+            }
+        };
+    }
+
+// ---------------------------------------------------
+//
+//    r_svgt_download_wait_note
+//
+// ---------------------------------------------------
+//
+RESOURCE DIALOG r_svgt_download_wait_note
+    {
+    flags = EAknWaitNoteFlags;
+    buttons = r_svgt_waitnote_softkeys;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = 15; // EWaitNote          
+            control = AVKON_NOTE
+                {
+                layout = EWaitLayout;                
+                imageid = EMbmAvkonQgn_note_progress;
+                imagemask = EMbmAvkonQgn_note_progress_mask;
+                animation = R_QGN_GRAF_WAIT_BAR_ANIM; 
+                };
+            }
+        };
+    }
+
+// ---------------------------------------------------
+//
+//    r_svgt_saving_softkeys
+//
+// ---------------------------------------------------
+//
+RESOURCE CBA r_svgt_waitnote_softkeys
+    {
+    buttons=
+            {
+            CBA_BUTTON
+                {
+                id = EAknSoftkeyEmpty;
+                txt = text_softkey_empty;
+                },
+            CBA_BUTTON
+                {
+                id = EAknSoftkeyQuit;
+                txt = text_softkey_cancel;
+                }
+            };
+    }
+
+// ---------------------------------------------------
+//
+//    r_svgt_clip_saved
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_svgt_clip_saved
+    {
+ 
+    buf = qtn_fldr_others_directory ;
+    }
+
+// ---------------------------------------------------
+//
+//    r_svgt_file_not_found
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_svgt_file_not_found
+    { 
+    buf = qtn_svgt_file_not_found;    
+    }
+    
+// ---------------------------------------------------
+//
+//    r_svgt_downloading_file
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_svgt_downloading_file
+    { 
+    buf = qtn_svgt_waiting_downloading;    
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/data/SVGTScreenSaverPlugin.rss	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2005 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:  Resource file for  SVGT ScreenSaverPlugin
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+
+NAME SVSS
+
+#include <eikon.rh>
+#include <PathConfiguration.hrh>
+#include <FileListModel.rh>
+
+// ---------------------------------------------------------
+//
+// Define the resource file signature
+// This resource should be empty.
+//
+// ---------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+    {
+    }
+
+RESOURCE TBUF
+    {
+    buf = "SVGTScreenSaver";
+    }
+
+
+#define SVG_PHONE_MEMORY_SYSTEM_PATH "C:\\System\\"
+
+RESOURCE FILELISTMODEL r_svg_filelist_model
+    {           
+    
+    directories =
+        {
+        LBUF { txt = text_rom_root_path text_images_path; },
+        LBUF { txt = text_phone_memory_root_path text_images_path; },
+        LBUF { txt = SVG_PHONE_MEMORY_SYSTEM_PATH text_images_path; },
+        LBUF { txt = text_memory_card_root_path text_images_path; }
+        };
+        
+    // Include these MIME types in the tone selection list..
+    mimetypes =
+        {
+        LBUF { txt = "image/svg+xml"; }
+        };
+
+    wildcards =
+		{
+			LBUF { txt = "*.svg"; },
+			LBUF { txt = "*.svgz"; }			
+		};     
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/data/SVGTUIControl.rss	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,663 @@
+/*
+* Copyright (c) 2004,2005 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:  Resource file for SVGTUIControl.dll
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+NAME    SVGU // 4 letter ID
+
+//  INCLUDES
+
+#include <eikon.rh>
+#include <eikon.hrh>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <avkon.loc>
+#include <data_caging_paths_strings.hrh>
+
+#include "SVGTUIDialog.hrh"
+#include "SVGTCustControl.rh"
+#include <svgtuicontrol.loc>
+#include "SVGTUIControlDbgFlags.hrh"
+//  CONSTANTS
+
+//  MACROS
+
+//  RESOURCE DEFINITIONS
+
+RESOURCE RSS_SIGNATURE
+    {
+    }
+
+
+RESOURCE TBUF
+    {
+    buf = "SVGUIControl";
+    }
+
+// -----------------------------------------------------------------------------
+//
+// r_svgt_wait_note
+// Resource for wait note displayed while opening SVGT files.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_svgt_wait_note
+    {
+    flags = EAknWaitNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_EMPTY;   // No Softkeys displayed
+                                        // when image is loading.
+    items=
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = ESvgtWaitNote;
+            control = AVKON_NOTE 
+                {
+                layout = EWaitLayout;
+                animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+                };
+            }
+        };
+    }
+// -----------------------------------------------------------------------------
+//
+// r_svgt_dialog_menubar
+// Resource for SVGT Dialog "Options" Menu Bar
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_svgt_dialog_menubar
+    {
+    titles =
+        {
+        MENU_TITLE
+            {
+            menu_pane = r_svgt_dialog_menu;
+            }
+        };
+    }
+
+// -----------------------------------------------------------------------------
+//
+// r_svgt_dialog_menu
+// Resource for SVGT Dialog "Options" Menu Pane
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_svgt_dialog_menu
+    {
+    items =
+        {
+        MENU_ITEM
+            {
+            command = ESvgtDlgSaveCommand;
+            txt = qtn_svgt_options_save;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgZoomInCommand;
+            txt = qtn_svgt_options_zoom_in;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgZoomOutCommand;
+            txt = qtn_svgt_options_zoom_out;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgSelectTextCommand;
+            txt = qtn_svgt_options_select_text;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgEditTextCommand;
+            txt = qtn_svgt_options_edit_text;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgPlayCommand;
+            txt = qtn_svgt_options_play;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgPauseCommand;
+            txt = qtn_svgt_options_pause;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgStopCommand;
+            txt = qtn_svgt_options_stop;
+            },
+#ifdef RD_SVGT_AUDIO_SUPPORT            
+        MENU_ITEM
+            {
+            command = ESvgtDlgSetVolumeCommand;
+            txt = qtn_svgt_options_setvolume;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgMuteCommand;
+            txt = qtn_svgt_options_mute;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgUnmuteCommand;
+            txt = qtn_svgt_options_unmute;
+            },
+#endif //RD_SVGT_AUDIO_SUPPORT            
+        MENU_ITEM
+            {
+            command = ESvgtDlgLoopCascadeCommand;
+            txt = qtn_svgt_options_loop;
+            cascade = r_svgt_loop_submenu;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgFindTextCommand;
+            txt = qtn_svgt_options_find_text;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgFullScreenCommand;
+            txt = qtn_svgt_options_full_screen;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgNormalScreenCommand;
+            txt = qtn_svgt_options_normal_screen;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgListRotateCascadeCommand;
+            txt = qtn_svgt_options_rotate;
+            cascade = r_svgt_rotate_submenu;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgViewDetailsCommand;
+            txt = qtn_svgt_options_view_details;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgListDownloadCommand;
+            txt = qtn_browser_list_downloads;
+            },
+#ifdef __SERIES60_HELP            
+        MENU_ITEM
+            {
+            command = ESvgtDlgHelpCommand;
+            txt = qtn_options_help;
+            },
+#endif // __SERIES60_HELP            
+        MENU_ITEM
+            {
+            command = EAknCmdExit;
+            txt = qtn_options_exit;
+            }
+        };
+    }
+
+// ---------------------------------------------------------
+//
+//   r_svgt_loop_submenu
+//   Loop Submenu 
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_PANE r_svgt_loop_submenu
+    {
+    items =
+        {
+        MENU_ITEM
+            {
+            command = ESvgtDlgLoopOnCommand;
+            txt = qtn_svgt_options_loop_on;
+            flags = EEikMenuItemRadioStart ;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgLoopOffCommand;
+            txt = qtn_svgt_options_loop_off;
+            flags = EEikMenuItemSymbolOn | EEikMenuItemRadioEnd;
+            }  
+        };
+    }
+ 
+//  
+// -----------------------------------------------------------------------------
+//   
+// r_svgt_rotate_submenu
+// Rotate submenu
+//
+// -----------------------------------------------------------------------------
+//
+
+RESOURCE MENU_PANE r_svgt_rotate_submenu
+    {
+    items =
+        {
+        MENU_ITEM
+            {
+            command = ESvgtDlgAngle90;
+            txt = qtn_svgt_options_rotate_90;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgAngle180;
+            txt = qtn_svgt_options_rotate_180;
+            },
+        MENU_ITEM
+            {
+            command = ESvgtDlgAngle270;
+            txt = qtn_svgt_options_rotate_270;
+            }
+        };
+    }
+
+// ---------------------------------------------------------
+//
+//   r_svgt_viewer_dialog
+//   SVG-T Dialog
+//
+// ---------------------------------------------------------
+//
+
+RESOURCE DIALOG r_svgt_viewer_dialog
+    {
+    flags = EEikDialogFlagNoDrag |
+            EEikDialogFlagFillAppClientRect |
+            EEikDialogFlagNoBorder |
+            EEikDialogFlagNoShadow |
+            EEikDialogFlagCbaButtons |
+            EEikDialogFlagWait |
+            EEikDialogFlagDontEatUpDownEvents;
+    title = "SVGT Dialog";
+    buttons = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+    items =
+        {
+        DLG_LINE
+            {
+            type = ESVGTCustControl;
+            id = ESVGTDialogCustControlIdData;
+            control = SVGT_CUST_CONTROL
+                {
+                };
+            }
+        };
+    }
+    
+// ---------------------------------------------------------
+//
+//   r_svgt_viewer_preview_dialog
+//   SVG-T Dialog
+//
+// ---------------------------------------------------------
+//
+
+RESOURCE DIALOG r_svgt_viewer_preview_dialog
+    {
+    flags = EEikDialogFlagNoDrag |
+            EEikDialogFlagFillAppClientRect |
+            EEikDialogFlagNoBorder |
+            EEikDialogFlagNoShadow |
+            EEikDialogFlagCbaButtons |
+            EEikDialogFlagWait |
+            EEikDialogFlagDontEatUpDownEvents;
+    title = "SVGT Dialog";
+    buttons = R_AVKON_SOFTKEYS_BACK;
+    items =
+        {
+        DLG_LINE
+            {
+            type = ESVGTCustControl;
+            id = ESVGTDialogCustControlIdData;
+            control = SVGT_CUST_CONTROL
+                {
+                };
+            }
+        };
+    }
+
+
+//----------------------------------------------------
+//
+//    r_svgt_file_open_failure
+//    File open problem information note.
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_svgt_file_open_failure
+    {
+    buf = qtn_svgt_info_unable_to_open;
+    }
+    
+//----------------------------------------------------
+//
+//    r_svgt_file_not_complete
+//    File not complete information note.
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_svgt_file_not_complete
+    {
+    buf = qtn_svgt_info_not_complete;
+    }
+
+//For View Details Strings
+
+// ---------------------------------------------------
+//
+//    r_svgt_file_details_row_format
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_svgt_file_details_row_format
+    {
+    buf = "%0U\t%1U"; 
+    }
+
+//For MSK Labels
+//----------------------------------------------------
+//
+//    r_svgt_msk_label_select
+//    MSK Label "Select"
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_svgt_msk_label_select
+	{
+	buf=qtn_msk_select;
+	}
+//----------------------------------------------------
+//
+//    r_svgt_msk_label_select
+//    MSK Label "Edit"
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_svgt_msk_label_edit
+	{
+	buf=qtn_msk_edit;
+	}
+//----------------------------------------------------
+//
+//    r_svgt_msk_label_select
+//    MSK Label "Open"
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_svgt_msk_label_open
+	{
+	buf=qtn_msk_open;
+	}
+//----------------------------------------------------
+//
+//    r_svgt_msk_label_select
+//    MSK context sensitive menu icon
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_svgt_msk_label_context
+	{	
+	buf=text_softkey_option;
+	}
+//----------------------------------------------------
+//
+//    r_svgt_msk_label_select
+//    MSK Label "Play"
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_svgt_msk_label_play
+	{
+	buf=qtn_msk_play;
+	}
+//----------------------------------------------------
+//
+//    r_svgt_msk_label_select
+//    MSK Label "Save"
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_svgt_msk_label_save
+	{
+	buf=qtn_msk_save;
+	}
+
+// ---------------------------------------------------
+//
+// r_svgt_softkeys_fullscreen
+// Resource for CBA in Full Screen mode
+//
+// ---------------------------------------------------
+//
+
+RESOURCE CBA r_svgt_softkeys_fullscreen
+    {
+    buttons =
+        {
+        CBA_BUTTON 
+            {
+            id = EAknSoftkeyOptions; 
+            txt = text_softkey_empty;
+            },
+        CBA_BUTTON
+            {
+            id = EAknSoftkeyBack; 
+            txt = text_softkey_empty; 
+            }
+        };
+    }
+ 
+
+// Find Text 
+
+//----------------------------------------------------
+//    
+//    r_find_text_query_dialog    
+//    Text Query Dialog Resource
+//
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_find_text_query_dialog
+    {
+    flags = EAknDialogGenericQueryFlags | EEikDialogFlagNoShadow;
+    buttons = R_AVKON_SOFTKEYS_OK_CANCEL__OK;//MSK label added
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtQuery;
+            id = EGeneralQuery;
+            control = AVKON_DATA_QUERY
+                { 
+                layout = EDataLayout;
+                label = qtn_svgt_query_enter_string;
+                control = EDWIN
+                    {
+                    flags= EEikEdwinNoLineOrParaBreaks;
+                    lines=1;
+                    maxlength=50;
+                    };
+                };
+            }
+        };
+    }
+
+
+//----------------------------------------------------
+//
+//    r_svgt_text_not_found
+//    "Text not Found" information note for find text.
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_svgt_text_not_found
+    {
+    buf = qtn_svgt_info_not_found;
+    }
+
+//----------------------------------------------------
+//
+//    r_svgt_braces_found_in_textarea
+//    Braces "<" or ">" found in text or textarea information note.
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_svgt_braces_found_in_textarea
+    {
+    buf = qtn_svgt_braces_found_in_textarea;
+    }
+
+//----------------------------------------------------
+//
+//    r_qtn_svgt_time_indic
+//    Progress Indicator Format String
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_qtn_svgt_time_indic
+    {
+    buf = qtn_svgt_time_indic;
+    }
+
+//----------------------------------------------------
+//
+//    r_qtn_svgt_waiting_opening
+//    Waiting note text for opening
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_qtn_svgt_waiting_opening 
+    { 
+    buf = qtn_svgt_waiting_opening; 
+    }    
+
+// ----------------------------------------------------
+// Save content (if not already saved when exiting)
+// ----------------------------------------------------
+//
+RESOURCE TBUF r_qtn_svgt_query_conf_save_downloaded  
+    { 
+    buf = qtn_iv_query_conf_save_downloaded;
+    }
+
+//----------------------------------------------------
+//
+//    
+//   Yes/No Confirmation query
+//
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_svgt_confirmation_query_yes_no
+    {
+    flags = EGeneralQueryFlags;
+    buttons = R_AVKON_SOFTKEYS_YES_NO__YES; //MSK label added
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtQuery;
+            id = EAknCtQuery;
+            control = AVKON_CONFIRMATION_QUERY
+                {
+                layout = EConfirmationLayout;
+                };
+            }
+        };
+    }
+
+
+//----------------------------------------------------
+//    
+//    r_svgt_text_edit_query_dialog    
+//    Text Edit Query Dialog Resource
+//
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_svgt_edit_text_query_dialog
+    {
+    flags = EAknDialogGenericQueryFlags | EEikDialogFlagNoShadow;
+    buttons = R_AVKON_SOFTKEYS_OK_CANCEL__OK;//MSK label added
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtQuery;
+            id = EGeneralQuery;
+            itemflags=EEikDlgItemTakesEnterKey;
+            control = AVKON_DATA_QUERY
+                { 
+                layout = EDataLayout;
+                label = qtn_svgt_edit_query_string;
+                control = EDWIN
+                    {
+                    flags= KMultiLineExpandingEditorFlags |
+                           EEikEdwinNoAutoSelection;
+                    width = 5;
+                    lines = 5;
+                    maxlength = 0; //160;
+                    default_input_mode = EAknEditorTextInputMode;
+                    allowed_input_modes = EAknEditorTextInputMode | 
+                                          EAknEditorNumericInputMode;
+                    default_case = EAknEditorTextCase;
+                    allowed_case_modes = EAknEditorAllCaseModes;
+                    avkon_flags = EAknEditorFlagUseSCTNumericCharmap |
+                                  EAknEditorFlagEnablePictographInput;
+                    };
+                };
+            }
+        };
+    }
+
+//----------------------------------------------------
+//    
+//    r_svgt_text_selection_dialog    
+//    Text selection dialog Resource
+//
+//----------------------------------------------------
+//
+RESOURCE DIALOG r_svgt_text_selection_dialog
+    {
+    flags = EAknDialogGenericQueryFlags | 
+            EEikDialogFlagNoShadow;
+    buttons = R_AVKON_SOFTKEYS_CANCEL;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtQuery;
+            id = EGeneralQuery;
+            itemflags=0;
+            control = AVKON_DATA_QUERY
+                { 
+                layout = EDataLayout;
+                label = qtn_svgt_select_query_string;
+                control = EDWIN
+                    {
+                    flags = KMultiLineExpandingEditorFlags;
+                    //width = 5;
+                    lines = 5;
+                    };
+                };
+            }
+        };
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/data/SVGTViewerApp.rss	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2004,2005 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:  Resource file for SVGT Viewer Applicaton
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+
+NAME SVGT
+
+//  INCLUDES
+
+#include <eikon.rh>
+#include <avkon.rh>
+#include <avkon.rsg>
+#include <avkon.loc>
+#include <appinfo.rh>
+#include "SVGTViewerApp.hrh"
+#include "SVGTViewerAppDbgFlags.hrh"
+#include <svgtuicontrol.loc>
+#include <data_caging_paths_strings.hrh>
+#include <pathconfiguration.hrh>
+
+// ---------------------------------------------------------
+//
+// Define the resource file signature
+// This resource should be empty.
+//
+// ---------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+    {
+    }
+
+// ---------------------------------------------------------
+//
+// Default Document Name
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_default_document_name
+    {
+    buf="";
+    }
+
+// ---------------------------------------------------------
+//
+// Define default menu and CBA key.
+//
+// ---------------------------------------------------------
+//
+RESOURCE EIK_APP_INFO
+    {
+    menubar = r_svgtviewerapp_menubar;
+    cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+    }
+
+
+// ---------------------------------------------------------
+//
+// r_svgtviewerapp_localisable_app_info
+// Provide Caption and Icon Info for Scalable UI
+//
+// ---------------------------------------------------------
+//
+RESOURCE LOCALISABLE_APP_INFO r_svgtviewerapp_localisable_app_info
+    {
+    short_caption = qtn_apps_sv_grid; // TODO: Replace String with
+                                     // L10n caption
+    caption_and_icon =
+    CAPTION_AND_ICON_INFO
+        {
+        caption = qtn_apps_sv_grid; // TODO: Replace String with
+                                     // L10n caption
+#ifdef __SCALABLE_ICONS
+        number_of_icons = 1;
+        icon_file = APP_BITMAP_DIR"\\SvgtViewerApp_aif.mif";
+#else // __SCALABLE_ICONS
+        number_of_icons = 2;
+        icon_file = APP_BITMAP_DIR"\\SvgtViewerApp_aif.mbm";
+#endif // __SCALABLE_ICONS
+        };
+    }
+// ---------------------------------------------------------
+//
+//   r_svgtviewerapp_menubar
+//   Menubar for SVGTViewerApp
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_BAR r_svgtviewerapp_menubar
+    {
+    titles =
+        {
+        MENU_TITLE
+            {
+            menu_pane = r_svgtviewerapp_menu;
+            }
+        };
+    }
+
+
+// ---------------------------------------------------------
+//
+//   r_svgtviewerapp_menu
+//   Menu for "Options"
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_PANE r_svgtviewerapp_menu
+    {
+    items =
+        {
+        MENU_ITEM
+            {
+            command = EAknSoftkeyExit;
+            txt = qtn_options_exit;
+            }
+#ifdef SVGTVIEWERAPP_DBG_OPEN_HARDCODE_FILE
+            ,
+        MENU_ITEM
+            {
+            command = ESVGTViewerAppCommand1;
+            txt = "Open";
+            }
+#endif            
+        };
+    }
+
+// ---------------------------------------------------
+//
+//    r_svgt_viewer_info_video_call_ongoing 
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_svgt_viewer_info_video_call_ongoing
+    {
+    buf = qtn_svgt_info_video_call_ongoing;
+    }
+
+RESOURCE TBUF r_svgt_viewer_phone_memory_images_path
+    {
+    buf = text_phone_memory_root_path;
+    }
+
+RESOURCE TBUF r_svgt_viewer_memorycard_images_path
+    {
+    buf = text_memory_card_root_path;
+    }
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/data/SVGTViewerApp_reg.rss	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2004,2005 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:  Registration resource file for SVGT Viewer Applicaton
+*                Reqd for the new app framework.
+*
+*/
+
+
+//  INCLUDES
+
+#include <appinfo.rh>
+#include <SVGTViewerApp.rsg>
+#include <data_caging_paths_strings.hrh>
+
+#include "SVGTViewerAppDbgFlags.hrh"
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x101F874A // application UID
+
+//  RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+// APP_REGISTRATION_INFO
+// Registration resource for SVGT Viewer
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE APP_REGISTRATION_INFO
+    {
+    app_file = "SVGTViewerApp";
+
+    localisable_resource_file = APP_RESOURCE_DIR"\\SVGTViewerApp";
+    localisable_resource_id = R_SVGTVIEWERAPP_LOCALISABLE_APP_INFO;
+#ifndef SVGTVIEWERAPP_DBG_OPEN_HARDCODE_FILE
+    hidden = KAppIsHidden;
+    embeddability = KAppEmbeddableUiNotStandAlone;
+#else
+    hidden = KAppNotHidden;
+    embeddability = KAppEmbeddable;
+#endif    
+
+    datatype_list =
+        {
+        DATATYPE
+            {
+            // SVG-T Viewer gets high priority for handling 
+            // mime-type image/svg+xml
+            priority = EDataTypePriorityHigh;
+            type="image/svg+xml";
+            },
+        DATATYPE
+            {
+            // SVG-T Viewer gets high priority for handling 
+            // mime-type image/svg
+            priority = EDataTypePriorityHigh;
+            type="image/svg";
+            }
+        };
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/data/svgtfileviewdetails.rss	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,629 @@
+/*
+* Copyright (c) 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:  Resource file for DRM view details DLL.
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+
+NAME FVWD
+
+//  INCLUDES
+
+#include <eikon.rh>
+#include <avkon.rh>
+#include <avkon.rsg>
+//#include <pathconfiguration.hrh>
+#include <svgtfileviewdetails.loc>
+// ---------------------------------------------------------
+//
+// Define the resource file signature
+// This resource should be empty.
+//
+// ---------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+    {
+    }
+
+RESOURCE TBUF
+    {
+    buf = "File View Details";
+    }
+
+RESOURCE TBUF r_fileviewdetails_title_presentationdetails { buf = qtn_fileviewdetails_title_presentationdetails; }
+
+//For View Details Strings
+
+// ---------------------------------------------------
+//
+//    r_file_details_row_format
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_details_row_format
+    {
+    buf = "%0U\t%1U"; 
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_details
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_details
+    {
+    buf = qtn_heading_pres_details;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_format_heading
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_format_heading
+    {
+    buf = qtn_details_format;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_size_heading
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_size_heading
+    {
+    buf = qtn_details_size;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_size_kb
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_size_kb
+    {
+    buf = qtn_details_size_kb;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_size_b
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_size_b
+    {
+    buf = qtn_details_size_b;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_date_heading
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_date_heading
+    {
+    buf = qtn_details_date;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_date_heading
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_time_heading
+    {
+    buf = qtn_details_time;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_url_heading
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_url_heading
+    {
+    buf = "";
+    }
+
+
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_display
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_display
+    {
+    buf = qtn_drm_mgr_det2_display;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_full
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_full
+    {
+    buf = qtn_drm_mgr_det_full_x;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_unlimited
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_unlimited
+    {
+    buf = qtn_drm_mgr_det_unlimited;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_utl
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_utl
+    {
+    buf = qtn_drm_mgr_det_utl_x;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_1_count
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_1_count
+    {
+    buf = qtn_drm_mgr_det_1_count;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_n_counts
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_n_counts
+    {
+    buf = qtn_drm_mgr_det_n_counts;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_uts
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_uts
+    {
+    buf = qtn_drm_mgr_det_uts_x;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_not_act
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_not_act
+    {
+    buf = qtn_drm_mgr_det_not_act;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_udl
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_udl
+    {
+    buf = qtn_drm_mgr_det_udl_x;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_det_inter
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_det_inter
+    {
+    buf = qtn_drm_mgr_det_inter;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_det_inter_two
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_det_inter_two
+    {
+    buf = qtn_drm_mgr_det_inter_two;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_years_one
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_years_one
+    {
+    buf = qtn_drm_nbr_of_years_one;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_years_one_final
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_years_one_final
+    {
+    buf = qtn_drm_nbr_of_years_one_final;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_years_two_four
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_years_two_four
+    {
+    buf = qtn_drm_nbr_of_years_two_four;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_years_five_zero
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_years_five_zero
+    {
+    buf = qtn_drm_nbr_of_years_five_zero;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_months_one
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_months_one
+    {
+    buf = qtn_drm_nbr_of_months_one;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_months_two_four
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_months_two_four
+    {
+    buf = qtn_drm_nbr_of_months_two_four;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_months_five_zero
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_months_five_zero
+    {
+    buf = qtn_drm_nbr_of_months_five_zero;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_days_one
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_days_one
+    {
+    buf = qtn_drm_nbr_of_days_one;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_days_one_final
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_days_one_final
+    {
+    buf = qtn_drm_nbr_of_days_one_final;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_days_two_four
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_days_two_four
+    {
+    buf = qtn_drm_nbr_of_days_two_four;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_days_five_zero
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_days_five_zero
+    {
+    buf = qtn_drm_nbr_of_days_five_zero;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_hours_one
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_hours_one
+    {
+    buf = qtn_drm_nbr_of_hours_one;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_hours_one_final
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_hours_one_final
+    {
+    buf = qtn_drm_nbr_of_hours_one_final;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_hours_two_four
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_hours_two_four
+    {
+    buf = qtn_drm_nbr_of_hours_two_four;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_hours_five_zero
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_hours_five_zero
+    {
+    buf = qtn_drm_nbr_of_hours_five_zero;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_mins_one
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_mins_one
+    {
+    buf = qtn_drm_nbr_of_mins_one;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_mins_one_final
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_mins_one_final
+    {
+    buf = qtn_drm_nbr_of_mins_one_final;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_mins_two_four
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_mins_two_four
+    {
+    buf = qtn_drm_nbr_of_mins_two_four;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_mins_five_zero
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_mins_five_zero
+    {
+    buf = qtn_drm_nbr_of_mins_five_zero;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_secs_one
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_secs_one
+    {
+    buf = qtn_drm_nbr_of_secs_one;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_secs_one_final
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_secs_one_final
+    {
+    buf = qtn_drm_nbr_of_secs_one_final;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_secs_two_four
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_secs_two_four
+    {
+    buf = qtn_drm_nbr_of_secs_two_four;
+    }
+
+
+// ---------------------------------------------------
+//
+//    r_file_drm_nbr_of_secs_five_zero
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_nbr_of_secs_five_zero
+    {
+    buf = qtn_drm_nbr_of_secs_five_zero;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_valid_from
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_valid_from
+    {
+    buf = qtn_drm_mgr_det_rvf_x ;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_det_valid_to
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_valid_to
+    {
+    buf = qtn_drm_mgr_det_rvt_x;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_cs
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_cs
+    {
+    buf = qtn_drm_mgr_det_cs;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_allowed
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_allowed
+    {
+    buf = qtn_drm_mgr_det_allowed;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_forbid
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_forbid
+    {
+    buf = qtn_drm_mgr_det_forbid;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_stat
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_stat
+    {
+    buf = qtn_drm_mgr_det_stat;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_valid
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_valid
+    {
+    buf = qtn_drm_mgr_det_valid;
+    }
+
+// ---------------------------------------------------
+//
+//    r_file_drm_exp
+//
+// ---------------------------------------------------
+//
+RESOURCE TBUF r_file_drm_exp
+    {
+    buf = qtn_drm_mgr_det_exp;
+    }
+
+
+// End of File
Binary file svgtviewer/SvgtViewerPlugin/help/data/xhtml.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/help/group/bld.inf	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 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:
+* Export help related files.
+*
+*/
+
+#include <platform_paths.hrh>				
+PRJ_EXPORTS
+:zip ../data/xhtml.zip   /epoc32/data/z/resource/ overwrite
+:zip ../data/xhtml.zip   /epoc32/winscw/c/resource/ overwrite
+
+../inc/svgt.hlp.hrh	MW_LAYER_PLATFORM_EXPORT_PATH(csxhelp/svgt.hlp.hrh)
+../rom/svgtviewerpluginhelps_variant.iby		CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(svgtviewerpluginhelps_variant.iby)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/help/inc/svgt.hlp.hrh	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description:
+*
+*/
+	
+//
+// svgt.hlp.hrh generated by CSXHelp Utilities.
+//           
+
+#ifndef __SVGT_HLP_HRH__
+#define __SVGT_HLP_HRH__
+
+_LIT(KSVGT_HLP_VIEWER, "SVGT_HLP_VIEWER"); // 
+
+#endif 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/help/rom/svgtviewerpluginhelps_variant.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 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:  IBY file for SVGTViewer Help
+*
+*/
+
+
+#ifndef __SVGTVIEWERHELPS_VARIANT_IBY__
+#define __SVGTVIEWERHELPS_VARIANT_IBY__
+
+#if defined(FF_S60_HELPS_IN_USE) && defined(__SVGT_VIEWER)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x101F8749\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x101F8749\contents.zip)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x101F8749\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x101F8749\index.xml)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x101F8749\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x101F8749\keywords.xml)
+    data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x101F8749\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x101F8749\meta.xml)
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/loc/svgtfileviewdetails.loc	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,513 @@
+/*
+* Copyright (c) 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:  Localization strings for File view details
+*
+*/
+
+
+
+//d: Heading Text for the presentation details like size, date, format etc.
+//d: When the 'View Details' option is selected, the presentation details view appears.
+//l: heading_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_heading_pres_details "Presentation details"
+
+//d: Keyword conveying the size of the SVG-T file.
+//d: When the 'View Details' option is selected, the presentation details view appears.
+//d: The SVG-T files size information is displayed as "Size %N B", or "Size %N kB"
+//d: where the %N is replaced by the number of bytes/kbytes of the size of file.
+//l: list_double_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_details_size "Size"
+
+//d: Expressed in number of kbytes
+//d: When the 'View Details' option is selected, the presentation details view appears.
+//d: The SVG-T files size information is displayed as "Size %N kB", where the %N is replaced
+//d: by the number of kbytes of the size of file.
+//l: list_double_popup_menu_pane_2
+//w:
+//r:3.0
+//
+#define qtn_details_size_kb " %U kB" 
+
+//d: Expressed in number of bytes
+//d: When the 'View Details' option is selected, the presentation details view appears.
+//d: The SVG-T files size information is displayed as "Size %N B", where the %N is replaced
+//d: by the number of bytes of the size of file.
+//l: list_double_popup_menu_pane_2
+//w:
+//r:3.0
+//
+#define qtn_details_size_b "%U B" 
+
+
+//d: Keyword conveying the Time when the SVG-T file was received in the system.
+//d: When the 'View Details' option is selected, the presentation details view appears.
+//l: list_double_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_details_time "Time"
+
+
+//d: Keyword conveying the Date when the SVG-T file was received in the system.
+//d: When the 'View Details' option is selected, the presentation details view appears.
+//l: list_double_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_details_date "Date"
+
+//d: Keyword conveying the Format of the SVG-T file
+//d: When the 'View Details' option is selected, the presentation details view appears.
+//l: list_double_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_details_format "Format"
+
+
+// *******************************
+// Copy from DRMRightsManager.loc 
+// *******************************
+
+//d:Second part of the first line of the fourth entry of Details View listbox
+//d:Related Media Object can be displayed (for example an image)
+//l:list_single_big_heading_pane_1_2nd_part
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det2_display    "Display"
+
+//d:Possible first line for fourth entry of Details View listbox
+//d:%U is the type of rigths (qtn_drm_mgr_det2_play, qtn_drm_mgr_det2_display,
+//d:qtn_drm_mgr_det2_execute or qtn_drm_mgr_det2_print)
+//d:Second line is qtn_drm_mgr_det_unlimited, meaning that there are no 
+//d:constraints for this type of rights
+//l:list_double_pane_1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_full_x      "Rights (%U)"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:No constraints for this type of Right.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_unlimited   "Unlimited"
+
+//d:Possible first line for fourth entry of Details View listbox
+//d:%U is the type of rigths (qtn_drm_mgr_det2_play, qtn_drm_mgr_det2_display,
+//d:qtn_drm_mgr_det2_execute or qtn_drm_mgr_det2_print)
+//d:Second line is qtn_drm_mgr_det_1_count or qtn_drm_mgr_det_n_counts, 
+//d:meaning the number of times that this object can be used.
+//l:list_double_pane_1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_utl_x       "Times left (%U)"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:Usage times left is 1: it means that this object can be played, displayed,
+//d:executed or printed (according to the examined type of right) only once 
+//d:more.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_1_count     "1 count"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N is the number of counts
+//d:Usage times left is %n: it means that this object can be played, displayed,
+//d:executed or printed (according to the examined type of right) only %N times
+//d:more.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_n_counts    "%N counts"
+
+//d:Possible first line for fourth entry of Details View listbox
+//d:%U is the type of rigths (qtn_drm_mgr_det2_play, qtn_drm_mgr_det2_display,
+//d:qtn_drm_mgr_det2_execute or qtn_drm_mgr_det2_print)
+//d:Second line is qtn_drm_mgr_det_not_act, meaning that this object has not 
+//d:been activated yet.
+//l:list_double_pane_1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_uts_x       "Times status (%U)"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:Rights not activated
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_not_act     "Not activated"
+
+//d:Possible first line for fourth entry of Details View listbox
+//d:%U is the type of rigths (qtn_drm_mgr_det2_play, qtn_drm_mgr_det2_display,
+//d:qtn_drm_mgr_det2_execute or qtn_drm_mgr_det2_print)
+//d:Second line is qtn_drm_mgr_det_inter or qtn_drm_mgr_det_inter_two, meaning 
+//d:a quantity of time that specifies how long this object can be used.
+//l:list_double_pane_1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_udl_x       "Time left (%U)"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:There is only one entry for an interval: e.g. "1 year"
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_inter       "%U"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:There are two entries for an interval: e.g. "1 year, 2 months"
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_inter_two   "%0U, %1U"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 year. 
+//d:Other quantities of time may follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_years_one        "1 year"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of years of an interval
+//d:It is used for period of years ending with 1 from 21 (21, 31, 41, etc.)
+//d:It reports that the time constraint for this type of object is %N years.
+//d:Other quantities of time may follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_years_one_final  "%N years"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of years of an interval
+//d:It is used for period of years ending from 2 to 4, excluded 12-14 (2-4, 
+//d:22-24, 32-34, etc.)
+//d:It reports that the time constraint for this type of object is %N years.
+//d:Other quantities of time may follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_years_two_four   "%N years"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of years of an interval
+//d:It is used for period of years ending from 5 to 0 plus range between 11 and 
+//d:14 (5-20, 25-30, 35-40, etc.)
+//d:It reports that the time constraint for this type of object is %N years.
+//d:Other quantities of time may follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_years_five_zero  "%N years"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 month. 
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_months_one       "1 month"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of months of an interval
+//d:It is used for period from two to four months
+//d:It reports that the time constraint for this type of object is %N months. 
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_months_two_four  "%N months"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of months of an interval
+//d:It is used for period greater than four months
+//d:It reports that the time constraint for this type of object is %N months. 
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_months_five_zero "%N months"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 day. 
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_days_one         "1 day"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of days of an interval
+//d:It is used for a period of 21 days
+//d:It reports that the time constraint for this type of object is %N days. 
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_days_one_final   "%N days"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of days of an interval
+//d:It is used for period of days ending from 2 to 4, excluded 12-14 (2-4, 
+//d:22-24)
+//d:It reports that the time constraint for this type of object is %N days. 
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_days_two_four    "%N days"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of days of an interval
+//d:It is used for period of days ending from 5 to 0 plus range between 11 and 
+//d:14 (5-20, 25-30)
+//d:It reports that the time constraint for this type of object is %N days. 
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_days_five_zero   "%N days"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 hour. 
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_hours_one        "1 hour"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of hours of an interval
+//d:It is used for a period of 21 hours
+//d:It reports that the time constraint for this type of object is %N hours.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_hours_one_final  "%N hours"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of hours of an interval
+//d:It is used for period of hours ending from 2 to 4, excluded 12-14 (2-4, 
+//d:22-23)
+//d:It reports that the time constraint for this type of object is %N hours.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_hours_two_four   "%N hours"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of hours of an interval
+//d:It is used for a period included from 5 to 20 hours
+//d:It reports that the time constraint for this type of object is %N hours.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_hours_five_zero  "%N hours"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 minute. 
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_mins_one         "1 minute"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of minutes of an interval
+//d:It is used for period of minutes ending with 1 from 21 (21, 31, 41, 51)
+//d:It reports that the time constraint for this type of object is %N minutes.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_mins_one_final   "%N minutes"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of minutes of an interval
+//d:It is used for period of minutes ending from 2 to 4, excluded 12-14 (2-4,
+//d:22-24, 32-34, 42-44, 52-54)
+//d:It reports that the time constraint for this type of object is %N minutes.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_mins_two_four    "%N minutes"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of minutes of an interval
+//d:It is used for period of minutes ending from 5 to 0 plus range between 11 
+//d:and 14 (5-20, 25-30, 35-40, 45-50, 53-59)
+//d:It reports that the time constraint for this type of object is %N minutes.
+//d:Other quantities of time may precede or follow.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_mins_five_zero   "%N minutes"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:It reports that the time constraint for this type of object is 1 second. 
+//d:Other quantities of time may precede.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_secs_one         "1 second"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of seconds of an interval
+//d:It is used for period of seconds ending with 1 from 21 (21, 31, 41, 51)
+//d:It reports that the time constraint for this type of object is %N seconds.
+//d:Other quantities of time may precede.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_secs_one_final   "%N seconds"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of seconds of an interval
+//d:It is used for period of seconds ending from 2 to 4, excluded 12-14 (2-4,
+//d:22-24, 32-34, 42-44, 52-54)
+//d:It reports that the time constraint for this type of object is %N seconds.
+//d:Other quantities of time may precede.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_secs_two_four    "%N seconds"
+
+//d:Possible second line for fourth entry of Details View listbox
+//d:%N number of seconds of an interval
+//d:It is used for period of minutes ending from 5 to 0 plus range between 11 
+//d:and 14 (5-20, 25-30, 35-40, 45-50, 53-59)
+//d:It reports that the time constraint for this type of object is %N seconds.
+//d:Other quantities of time may precede.
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_nbr_of_secs_five_zero   "%N seconds"
+
+//d:Possible first line for fourth entry of Details View listbox
+//d:%U is the type of rigths (qtn_drm_mgr_det2_play, qtn_drm_mgr_det2_display,
+//d:qtn_drm_mgr_det2_execute or qtn_drm_mgr_det2_print)
+//d:Second line is a date, meaning when the object started to be valid.
+//l:list_double_pane_1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_rvf_x       "Valid from (%U)"
+
+//d:Possible first line for fourth entry of Details View listbox
+//d:%U is the type of rigths (qtn_drm_mgr_det2_play, qtn_drm_mgr_det2_display,
+//d:qtn_drm_mgr_det2_execute or qtn_drm_mgr_det2_print)
+//d:Second line is a date, meaning until when the object is valid.
+//l:list_double_pane_1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_rvt_x       "Valid until (%U)"
+
+//d:First line of third entry of Details View listbox
+//d:It reports if it is possible to send Media Object or not.
+//d:Second line is qtn_drm_mgr_det_allowed or qtn_drm_mgr_det_forbid
+//l:list_double_pane_1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_cs          "Content sending"
+
+//d:Possible second line for third entry of Details View listbox
+//d:Sending of the content is allowed
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_allowed     "Allowed"
+
+//d:Possible second line for third entry of Details View listbox
+//d:Sending of the content is forbidden
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_forbid      "Not allowed"
+
+//d:First line of first entry of Details View listbox
+//d:It indicates the current status of the selected Right Object
+//d:Second line is qtn_drm_mgr_det_valid or qtn_drm_mgr_det_exp
+//l:list_double_pane_1
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_stat        "Status"
+
+//d:Possible second line for first entry of Details View listbox
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_valid       "Activation key is valid"
+
+//d:Possible second line for first entry of Details View listbox
+//l:list_double_pane_2
+//w:
+//r:3.0
+//
+#define qtn_drm_mgr_det_exp         "Activation key expired"
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/loc/svgtuicontrol.loc	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,339 @@
+/*
+* Copyright (c) 2004-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:  Localization strings for SVGT UI Control
+*
+*/
+
+
+// APPLICATION NAME
+
+//d:Short name of the application, application shell grid layout
+//l:cell_app_pane_1
+//
+#define qtn_apps_sv_grid "SVGT Viewer"
+
+//d: Option in the Options menu.
+//d: The option is used to rotate the presentation with selected angle.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.1
+#define qtn_svgt_options_rotate "Rotate"
+
+//d: Sub-menu for the "Rotate" option.
+//d: The presentation is rotated with angle 90 degrees.
+//l: list_single_popup_submenu_pane_1
+//w:
+//r:3.1
+#define qtn_svgt_options_rotate_90 "90°"
+
+//d: Sub-menu for the "Rotate" option.
+//d: The presentation is rotated with angle 180 degrees.
+//l: list_single_popup_submenu_pane_1
+//w:
+//r:3.1
+#define qtn_svgt_options_rotate_180 "180°"
+
+//d: Sub-menu for the "Rotate" option.
+//d: The presentation is rotated with angle 270 degrees.
+//l: list_single_popup_submenu_pane_1
+//w:
+//r:3.1
+#define qtn_svgt_options_rotate_270 "270°"
+
+//d: Option in the Options menu.
+//d: Available when SVG-T Viewer is launched from applications which are
+//d: used for storing media files, like the Media Gallery application.
+//d: Gives details of the file like size, date, format etc.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_view_details "View details"
+
+//d: Option in the Options menu.
+//d: Available when the full screen option is selected. Used to bring back the view to
+//d: normal screen mode.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_normal_screen "Normal screen"
+
+//d: Option in the Options menu.
+//d: The option is available when the SVG-T presentation being viewed in normal screen
+//d: mode. The option is used to view the presentation in full screen mode.
+//d: In Full screen mode Status pane and Control pane are not visible.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_full_screen "Full screen"
+
+//d: Option in the Options menu.
+//d: The option is used to search the text in the SVG-T presentation.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_find_text "Find text"
+
+//d: Option in the Options menu.
+//d: The option is used to set the presentation mode to playing continuously or once.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_loop "Loop"
+
+//d: Sub-menu for the "Loop" option.
+//d: The presentation is played only once if this sub-menu is selected.
+//l: list_single_popup_submenu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_loop_off "Off"
+
+//d: Sub-menu for the "Loop" option.
+//d: The presentation is played continuously so that when it reaches the end, it starts all over again.
+//l: list_single_popup_submenu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_loop_on "On"
+
+//d: Option in the Options menu.
+//d: Option to stop the presentation, will appear if presentation is played or paused.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_stop "Stop"
+
+#ifdef RD_SVGT_AUDIO_SUPPORT
+//d: Option in the Options menu.
+//d: Option to set the volume for the presentation.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.2
+//
+#define qtn_svgt_options_setvolume "Set Volume"
+
+//d: Option in the Options menu.
+//d: Option to mute the volume for the presentation.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.2
+//
+#define qtn_svgt_options_mute "Mute"
+
+//d: Option in the Options menu.
+//d: Option to unmute the volume for the presentation.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.2
+//
+#define qtn_svgt_options_unmute "Unmute"
+#endif //RD_SVGT_AUDIO_SUPPORT
+
+//d: Option in the Options menu.
+//d: Option to pause the presentation, will appear if presentation is being played.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_pause "Pause"
+
+//d: Option in the Options menu.
+//d: Option to play the presentation, will appear if presentation is stopped or paused.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_play "Play"
+
+//d: Option in the Options menu.
+//d: Option to zoom out a zoomed-in presentation.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_zoom_out "Zoom out"
+
+//d: Option in the Options menu.
+//d: Option to zoom-in a presentation.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_zoom_in "Zoom in"
+
+//d: Option in the Options menu.
+//d: Saves the image into Media Gallery.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_options_save "Save"
+
+
+
+//d: The progress note text.
+//d: When the zoom-in or zoom-out option is selected, the progress note zooming is displayed
+//d: until the presentation is zoomed.
+//l: popup_note_wait_window_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_waiting_zooming "Zooming"
+
+
+//d: Wait Note.
+//d: When the SVG-T file is opened, the "opening file" wait note is displayed,
+//d: until the presentation is completed loaded by the engine.
+//l: popup_note_wait_window_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_waiting_opening "Opening file"
+
+//d: Information note for the text area editing and text editing.
+//d: If "<" or ">" is found in edited content of text area and text then error has to be flashed
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_svgt_braces_found_in_textarea "< and > characters not allowed in editable area"
+
+
+
+//d: Information note for the "Find Text" option.
+//d: If the Find text option does not give any results, an information note "Text not found" is displayed.
+//l: popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_svgt_info_not_found "Text not found"
+
+//d: If some parts of the presentation (like embedded files) can not be shown, an
+//d: information note "Unable to show all content" is displayed.
+//l: popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_svgt_info_not_complete "Unable to show all content"
+
+//d: If the presentation can not be opened for any reason (for example a corrupted
+//d: file or an unsupported format), an information note "Unable to open file"
+//d: is displayed at the calling application and the viewer is not opened.
+//l: popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_svgt_info_unable_to_open "Unable to open file"
+
+
+//d: "Find Text" Query Prompt Text
+//l: popup_query_data_window_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_query_enter_string "Enter query string: "
+
+
+//d: If a video call is going on the viewer is not allowed to be opened.
+//l: popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_svgt_info_video_call_ongoing "SVG-T Viewer cannot be used during video call"
+
+//d: If a synchronous download of a remote image is going on,  the 
+//d: "downloading file" wait note is displayed 
+//l: popup_note_wait_window_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_waiting_downloading "downloading "
+
+//d: If a locally linked image is not found,  the information note
+//d: "File not found" displayed 
+//l: popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_svgt_file_not_found "File not found"
+
+//d: Progress Indicator Format String 
+//d: %0U is elapsed time 
+//d: %1U is the total duration of the presentation 
+//d: ( Both the Unicode texts are formatted with 
+//d:   qtn_time_durat_min_sec_with_zero if the time is less than or 
+//d:   equal to One hour, else qtn_time_durat_long )
+//l: navi_pane_5
+//w:
+//r:3.0
+//
+#define qtn_svgt_time_indic "%0U/%1U"
+//d:Used as a confirmation query in situations where user wants to 
+//d:exit but the downloaded content is not saved. %U is replaced 
+//d:with the downloaded content name.   
+//l:popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_iv_query_conf_save_downloaded "%U has not been saved. Save now?"
+
+//d:Options menu item for the Client App to open Downloads List.
+//l:list_single_popup_menu_pane_1
+//w:
+//
+#define qtn_browser_list_downloads "Downloads"
+
+//d:Saved information note.
+//d:Shown when media clip is saved to Media Gallery.
+//l:popup_note_window
+//
+
+
+//d: Text Edit Query Prompt Text
+//l: popup_query_data_window_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_edit_query_string "Edit Text"
+
+//d: Text Selection Query Prompt Text
+//l: popup_query_data_window_1
+//w:
+//r:3.0
+//
+#define qtn_svgt_select_query_string "Select Text"
+
+//d: Option in the Options menu.
+//d: The option is used to select the text which is present below the pointer.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.1
+//
+#define qtn_svgt_options_select_text "Select Text"
+
+//d: Option in the Options menu.
+//d: The option is used to edit the text which is present below the pointer.
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.1
+//
+#define qtn_svgt_options_edit_text "Edit Text"
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/rom/SVGCodec.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2004, 2005 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:  IBY file for SVGCodec
+*
+*/
+
+#ifndef __SVGCODEC_IBY
+#define __SVGCODEC_IBY
+
+#ifdef __SVGT_VIEWER
+
+// SVG Codec Implementation DLL and ECOM Registration resource
+ECOM_PLUGIN(SVGCodec.dll,102073D7.rsc)
+data=ZRESOURCE\ICL\102073D7_extra.rsc Resource\ICL\102073D7_extra.rsc
+
+#endif // __SVGT_VIEWER
+
+#endif // __SVGCODEC_IBY
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/rom/SVGScreenSaverPlugin.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005 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:  IBY file for SVGScreenSaver
+*
+*/
+
+#ifndef __SVGTSCREENSAVER_IBY
+#define __SVGTSCREENSAVER_IBY
+
+#ifdef __SVGT_VIEWER
+#ifdef __SVGT_SCREENSAVER_PLUGIN
+
+ECOM_PLUGIN(SVGTScreenSaverPlugin.dll,102071E7.rsc)
+
+#endif // __SVGT_SCREENSAVER_PLUGIN
+#endif // __SVGT_VIEWER
+
+#endif // __SVGTSCREENSAVER_IBY
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/rom/SVGTAppObserverUtil.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2004 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:  IBY file for SVGTViewerAppObserverUtil
+*
+*/
+
+#ifndef __SVGTVIEWERAPPOBSERVERUTIL_IBY
+#define __SVGTVIEWERAPPOBSERVERUTIL_IBY
+
+#ifdef __SVGT_VIEWER 
+
+file=ABI_DIR\BUILD_DIR\SVGTAppObserverUtil.dll            SHARED_LIB_DIR\SVGTAppObserverUtil.dll
+
+#endif // __SVGT_VIEWER
+
+#endif // __SVGTVIEWERAPPOBSERVERUTIL_IBY
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/rom/SVGTAppObserverUtilResources.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2004 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:  IBY file for SVGTViewerAppObserverUtil localisable resources
+*
+*/
+
+#ifndef __SVGTVIEWERAPPOBSERVERUTILRESOURCES_IBY
+#define __SVGTVIEWERAPPOBSERVERUTILRESOURCES_IBY
+
+#ifdef __SVGT_VIEWER 
+
+data=DATAZ_\RESOURCE_FILES_DIR\SVGTAppObserverUtil.rsc      RESOURCE_FILES_DIR\SVGTAppObserverUtil.rsc
+
+#endif // __SVGT_VIEWER
+
+#endif // __SVGTVIEWERAPPOBSERVERUTILRESOURCES_IBY
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/rom/SVGTFileViewDetails.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 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:  IBY file for SVGTFileViewDetails
+*
+*/
+
+#ifndef __SVGTFILEVIEWDETAILS_IBY
+#define __SVGTFILEVIEWDETAILS_IBY
+
+#ifdef __SVGT_VIEWER
+
+file=ABI_DIR\BUILD_DIR\SVGTFileViewDetails.dll            SHARED_LIB_DIR\SVGTFileViewDetails.dll
+
+#endif // __SVGT_VIEWER
+
+#endif // __SVGTFILEVIEWDETAILS_IBY
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/rom/SVGTFileViewDetailsResources.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 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:  IBY file for SVGTFileViewDetails localisable resources
+*
+*/
+
+#ifndef __SVGTFILEVIEWDETAILSRESOURCES_IBY
+#define __SVGTFILEVIEWDETAILSRESOURCES_IBY
+
+#ifdef __SVGT_VIEWER
+
+data=DATAZ_\RESOURCE_FILES_DIR\SVGTFileViewDetails.rsc    RESOURCE_FILES_DIR\SVGTFileViewDetails.rsc
+
+#endif // __SVGT_VIEWER
+
+#endif // __SVGTFILEVIEWDETAILSRESOURCES_IBY
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/rom/SVGTUIControl.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2004 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:  IBY file for SVGTUIControl
+*
+*/
+
+#ifndef __SVGTUICONTROL_IBY
+#define __SVGTUICONTROL_IBY
+
+#ifdef __SVGT_VIEWER
+
+file=ABI_DIR\BUILD_DIR\SVGTUIControl.dll            SHARED_LIB_DIR\SVGTUIControl.dll
+SCALABLE_IMAGE( APP_BITMAP_DIR, APP_BITMAP_DIR, SVGTUIControl )
+
+#endif // __SVGT_VIEWER
+
+#endif // __SVGTUICONTROL_IBY
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/rom/SVGTUIControlResources.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2004 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:  IBY file for SVGTUIControl localisable resources
+*
+*/
+
+#ifndef __SVGTUICONTROLRESOURCES_IBY
+#define __SVGTUICONTROLRESOURCES_IBY
+
+#ifdef __SVGT_VIEWER
+
+data=DATAZ_\RESOURCE_FILES_DIR\SVGTUIControl.rsc    RESOURCE_FILES_DIR\SVGTUIControl.rsc
+
+#endif // __SVGT_VIEWER
+
+#endif // __SVGTUICONTROLRESOURCES_IBY
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/rom/SVGTViewerApp.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2004 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:  IBY file for SVGT Viewer App
+*
+*/
+
+#ifndef __SVGTVIEWERAPP_IBY
+#define __SVGTVIEWERAPP_IBY
+
+#ifdef __SVGT_VIEWER
+
+S60_APP_EXE( SVGTViewerApp )
+S60_APP_AIF_ICONS( SVGTViewerApp )
+S60_APP_AIF_RSC( SVGTViewerApp )
+
+#endif // __SVGT_VIEWER
+
+#endif // __SVGTVIEWERAPP_IBY
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/SvgtViewerPlugin/rom/SVGTViewerAppResources.iby	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2004 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:  IBY file for SVGT Viewer App Localisable Resources
+*
+*/
+
+#ifndef __SVGTVIEWERAPPRESOURCES_IBY
+#define __SVGTVIEWERAPPRESOURCES_IBY
+
+#ifdef __SVGT_VIEWER
+
+data=DATAZ_\APP_RESOURCE_DIR\SVGTViewerApp.rsc   APP_RESOURCE_DIR\SVGTViewerApp.rsc
+
+#endif // __SVGT_VIEWER
+
+#endif // __SVGTVIEWERAPPRESOURCES_IBY
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtviewer/group/bld.inf	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 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:  Highlevel bld.inf
+*
+*/
+
+
+
+
+
+/*
+*   Order is important
+*/
+#include "../SvgtViewerPlugin/Group/bld.inf"
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_4_0.dtd	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,86 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemDefinition.xml	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "systemDefinition.dtd"[
+
+ 	<!ENTITY layer_real_source_path "\sf\app\graphicsuis">
+ 	<!ENTITY layer_name "graphicsuis">
+
+ 	<!ENTITY layer_file SYSTEM "systemDefinitionLayer.xml">
+ 	<!ENTITY targetDefinition_file SYSTEM "/epoc32/tools/systemDefinition/targetDefinition.xml">
+ 	<!ENTITY defaultbuild_file SYSTEM "/epoc32/tools/systemDefinition/default_build.xml">
+ 	<!ENTITY defaultclean_file SYSTEM "/epoc32/tools/systemDefinition/default_clean.xml">
+]>
+
+<SystemDefinition name="SystemDefinition" schema="1.4.0">
+  <systemModel>
+&layer_file;
+  </systemModel>
+  <build>
+&targetDefinition_file;
+
+		<configuration name="build" description="build layer" filter="">
+    	<layerRef layerName="&layer_name;"/>
+
+&defaultbuild_file;
+    </configuration>
+
+		<configuration name="clean" description="clean layer" filter="">
+    	<layerRef layerName="&layer_name;"/>
+
+&defaultclean_file;
+    </configuration>
+
+  </build>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemDefinitionLayer.xml	Thu Dec 17 08:40:16 2009 +0200
@@ -0,0 +1,42 @@
+<layer name="graphicsuis">
+  <module name="group_graphicsuis">
+    <component name="group_graphicsuis">
+      <unit unitID="graphicsuis" mrp="" bldFile="&layer_real_source_path;\group" name="graphicsuis" />
+    </component>
+  </module>
+  <module name="graphicsuis_dom">
+    <component name="graphicsuis_dom">
+      <unit unitID="graphicsuis_graphicsuis_dom" mrp="" filter="not_build" bldFile="&layer_real_source_path;\graphicsuis_dom\group" name="graphicsuis_dom" />
+    </component>
+  </module>
+  <module name="svgt_file_view_details_dialog_api">
+    <component name="svgt_file_view_details_dialog_api">
+      <unit unitID="graphicsuis_graphicsuis_dom_svgt_file_view_details_dialog_api" mrp="" filter="not_build" bldFile="&layer_real_source_path;\graphicsuis_dom\svgt_file_view_details_dialog_api\group" name="svgt_file_view_details_dialog_api" />
+    </component>
+  </module>
+  <module name="svgt_viewer_ui_api">
+    <component name="svgt_viewer_ui_api">
+      <unit unitID="graphicsuis_graphicsuis_dom_svgt_viewer_ui_api" mrp="" filter="not_build" bldFile="&layer_real_source_path;\graphicsuis_dom\svgt_viewer_ui_api\group" name="svgt_viewer_ui_api" />
+    </component>
+  </module>
+  <module name="svg_application_observer_utility_api">
+    <component name="svg_application_observer_utility_api">
+      <unit unitID="graphicsuis_graphicsuis_dom_svg_application_observer_utility_api" mrp="" filter="not_build" bldFile="&layer_real_source_path;\graphicsuis_dom\svg_application_observer_utility_api\group" name="svg_application_observer_utility_api" />
+    </component>
+  </module>
+  <module name="svgtviewer">
+    <component name="svgtviewer">
+      <unit unitID="graphicsuis_svgtviewer" mrp="" filter="not_build" bldFile="&layer_real_source_path;\svgtviewer\group" name="svgtviewer" />
+    </component>
+  </module>
+  <module name="SvgtViewerPlugin">
+    <component name="SvgtViewerPlugin">
+      <unit unitID="graphicsuis_svgtviewer_SvgtViewerPlugin" mrp="" filter="not_build" bldFile="&layer_real_source_path;\svgtviewer\SvgtViewerPlugin\group" name="SvgtViewerPlugin" />
+    </component>
+  </module>
+  <module name="ScreenSaverAnimPlugin">
+    <component name="ScreenSaverAnimPlugin">
+      <unit unitID="graphicsuis_svgtviewer_SvgtViewerPlugin_internal_tsrc_ScreenSaverAnimPlugin" mrp="" filter="not_build,test_internal" bldFile="&layer_real_source_path;\svgtviewer\SvgtViewerPlugin\internal\tsrc\ScreenSaverAnimPlugin\group" name="ScreenSaverAnimPlugin" />
+    </component>
+  </module>
+</layer>