diff -r e52958d06c29 -r 5fd161fa28b6 graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTCustControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicsuis_plat/svgt_viewer_ui_api/inc/SVGTCustControl.h Thu Sep 09 11:17:40 2010 +0300 @@ -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 +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#ifdef RD_SVGT_AUDIO_SUPPORT +#include //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*& 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 iLastSearchText; + + // Array to store the Bounding boxes for found text + RPointerArray iBoundBoxArray; + + // Array to store the text found + RArray iFoundTextArray; + + // Array to store the text element ids found - for use in animation case. + RArray 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