--- /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