mobilemessaging/smilui/playerinc/SmilPlayerPresentationController.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/smilui/playerinc/SmilPlayerPresentationController.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,706 @@
+/*
+* Copyright (c) 2003-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: SmilPlayerPresentationController  declaration
+*
+*/
+
+
+#ifndef SMILPLAYERPRESENTATIONCONTROLLER_H
+#define SMILPLAYERPRESENTATIONCONTROLLER_H
+
+// INCLUDES
+#include <coecntrl.h>
+
+#include <smilplayerinterface.h>
+#include <remconcoreapi.h> // TRemConCoreApiOperationId
+#include "SmilPlayer.hrh"
+#include <AknUtils.h>
+
+#include <MsgMedia.hrh>
+
+
+// FORWARD DECLARATIONS
+class MMediaFactoryFileInfo;
+class CSmilPlayerMediaFactory;
+class CSmilTransitionFactory;
+class CSmilPlayerDialog;
+class CAknWaitDialog;
+class CMDXMLDocument;
+class CMDXMLNode;
+class CMDXMLElement;
+class CSmilPlayerPresentationControl;
+class CAknNavigationDecorator;
+class CSmilPlayerIndicatorController;
+class CSendUi;
+
+class CAiwServiceHandler;
+
+// CLASS DECLARATION
+
+/**
+* Controller class of the presentation.
+*/
+NONSHARABLE_CLASS(CSmilPlayerPresentationController) : public CCoeControl,
+                                                       public MSmilPlayer
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Static constructor.
+        *
+        * @param aRect            Control rectangle.
+        * @param aBaseUrl         Base URL used to resolve relative URLs.
+        * @param aFileInfo        Handle to the media objects.
+        * @param aParent          Dialog class of this controller
+        * @param aDOM             SMIL Document Object Model
+        * @param aVolumeEnabled   Specified whether audio is enabled.
+        *
+        * @return pointer to the object
+        */
+        static CSmilPlayerPresentationController* NewL( const TRect& aRect,
+                                                        const TDesC& aBaseUrl,
+                                                        MMediaFactoryFileInfo* aFileInfo,
+                                                        CSmilPlayerDialog* aParent,
+                                                        CMDXMLDocument* aDOM,
+                                                        TBool aVolumeEnabled );
+        /**
+        * Constructor.
+        *
+        * @param aRect            Control rectangle.
+        * @param aBaseUrl         Base URL used to resolve relative URLs.
+        * @param aFileInfo        Handle to the media objects.
+        * @param aParent          Dialog class of this controller
+        * @param aFileHandle      File handle to .smil file
+        * @param aVolumeEnabled   Specified whether audio is enabled.
+        *
+        * @return pointer to the object
+        */
+        static CSmilPlayerPresentationController* NewL( const TRect& aRect,
+                                                        const TDesC& aBaseUrl,
+                                                        MMediaFactoryFileInfo* aFileInfo,
+                                                        CSmilPlayerDialog* aParent,
+                                                        RFile& aFileHandle,
+                                                        TBool aVolumeEnabled );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CSmilPlayerPresentationController();
+
+    public: // New functions
+        
+        /**
+        * Returns buffer bitmap
+        *
+        * @since 2.0
+        *
+        * @return Pointer to buffer bitmap.
+        */
+        inline CFbsBitmap* BufferBitmap();
+
+        /**
+        * Returns buffer bitmap context
+        *
+        * @since 2.0
+        *
+        * @return Pointer to buffer bitmap context..
+        */
+        inline CFbsBitGc* BufferContext();
+
+        /**
+        * Prepares presentation controller to dialog close.
+        *
+        * @since 2.0
+        */
+        void PrepareExitL();
+
+        /**
+        * Controller states
+        */
+        enum TSmilPresControllerStates
+            {
+            EStatePlay,
+            EStateStop,
+            EStatePause,
+            EStateResume
+            };
+            
+        /**
+        * Changes presentation state. 
+        *
+        * @since 3.0
+        *
+        * @param aState New state.
+        */
+        void ChangeStateL( TSmilPresControllerStates aState );
+
+        /**
+        * Stops timers for pause and volume indicator.
+        *
+        * @since 2.0
+        */
+        void StopTimer();
+
+        /**
+        * Invalidates the redraw area
+        *
+        * @since 2.0
+        *
+        * @param aArea  Value of the invalidated area
+        */
+        void RedrawArea( const TRect& aArea ) const;
+        
+        /**
+        * Returns the Presentation object of the player.
+        *
+        * @since 2.0
+        *
+        * @return CSmilPresentation
+        */
+        inline CSmilPresentation* Presentation();
+
+        /**
+        * Set the visibility of the status pane
+        *
+        * @since 2.0
+        *
+        * @param aValue Boolean value whether to make normal statuspane visible or not.
+        */
+        void SetStatusPaneVisibilityL( TBool aValue );
+
+        /**
+        * Returns whether achor exists.
+        *
+        * @since 2.0
+        * 
+        * @return ETrue if anchor exists otherwise EFalse is returned.
+        */
+        TBool AnchorExist() const;
+
+        /**
+        * Returns whether achor is to internal link.
+        *
+        * @since 2.0
+        *
+        * @return ETrue if anchor is to internal link otherwise EFalse is returned.
+        */
+        TBool AnchorIsInternalLink() const;
+
+        /**
+        * Returns whether focused object scrolling activation is enabled.
+        *
+        * @since 2.0
+        * 
+        * @return ETrue if scrolling activation is enabled otherwise EFalse is returned.
+        */
+        TBool ScrollingActivationEnabled() const;
+
+        /**
+        * Returns whether focused object is scrollable
+        *
+        * @since 2.0
+        * 
+        * @return ETrue if focused object is scrollable otherwise EFalse is returned.
+        */
+        TBool FocusedObjectScrollable() const;
+
+        /**
+        * Returns whether focused object scrolling deactivation is enabled.
+        *
+        * @since 2.0
+        *
+        * @return ETrue if scrolling deactivation is enabled otherwise EFalse is returned.
+        */
+        inline TBool ScrollingDeactivationEnabled() const;
+
+        /**
+        * Activates the focused object for scrolling
+        *
+        * @since 2.0
+        */
+        void ActivateScrollingL();
+
+        /**
+        * Deactivates the focused object from scrolling
+        *
+        * @since 2.0
+        */
+        void DeactivateScrollingL();
+
+        /**
+        * Activates the link defined in the focused object
+        *
+        * @since 2.0
+        */
+        inline void OpenLinkL();
+
+        /**
+        * Returns whether some object is focused.
+        *
+        * @since 2.0
+        *
+        * @return ETrue if object is focused otherwise EFalse is returned.
+        */
+        inline TBool ObjectFocused() const;
+
+        /**
+        * Switches status pane to the given one.
+        *
+        * @since 3.0
+        *
+        * @param aNewPaneResourceId New statuspane's resource ID
+        * @param aSetOwnIndicators  Specifies whether own indicators should be used
+        * @param aOldPaneResourceId Old statuspane resource ID for storing.
+        *
+        */
+        void SwitchStatusPaneL( TInt aNewPaneResourceId,
+                                TBool aSetOwnIndicators, 
+                                TInt& aOldPaneResourceId );
+
+        /**
+        * Called just before activating
+        *
+        * @since 2.0
+        *
+        * @return ETrue if presentationcontroller is initialized ok otherwise EFalse.
+        */
+        TBool InitializeL();
+        
+        /**
+        * Sets correct layout for the presentation controller.
+        *
+        * @since 3.0
+        *
+        */
+        void LayoutPresentationL();
+        
+        /**
+        * Indicates whether the presentation is overlapped by another
+        * dialog (e.g. FindUi).
+        * 
+        * @return ETrue if overlapped, otherwise EFalse.
+        */   
+        TBool IsPresentationOverlapped();
+
+        /**
+        * Sets flag to indicate that the presentation is overlapped.
+        * 
+        * @param aOverlapped ETrue / EFalse for setting the flag likewise.
+        */   
+        void SetPresentationOverlapped( TBool aOverlapped );
+        
+        /**
+        * Sets the correct presentation layout, when a dialog (e.g. FindUi)
+        * is overlapping the presentation.
+        */ 
+        void LayoutOverlappedPresentation();
+        
+        /**
+        * Sends an activation event to focused media.
+        *
+        * @since 3.0
+        */
+        void ActivateFocusedMediaL();
+        
+        /**
+        * Handles Remote Control Server Operations.
+        *
+        * @since 3.0
+        *
+        * @param aOperation An operation ID to handle.
+        */
+        void HandleRCSOperation( TRemConCoreApiOperationId aOperation );
+        
+        /**
+        * Handles scroll key event.
+        *
+        * @since 3.0
+        *
+        */
+        TKeyResponse HandleScrollKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+        /**
+        * Handles volume key event.
+        *
+        * @since 3.0
+        *
+        */
+        TKeyResponse HandleVolumeKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+        
+        /**
+        * Returns all presentation's text on single buffer. Individual texts are separated
+        * with two paragraph separators from each others.
+        *
+        * @since 3.0
+        *
+        * @return Text buffer. Buffer may be NULL and it must be otherwise freed by client.
+        */
+        HBufC* PresentationTextL();
+        
+        /**
+        * Returns whether presentation have asked media type.
+        *
+        * @since 3.0
+        
+        * @param aType Enumeration of TSmilMediaType
+        *
+        * @return ETrue if presentation have asked media type otherwise EFalse.
+        */
+        TBool PresentationContains( const TMsgMediaType& aType ) const;
+        
+        /**
+        * Handles the pointer-events. One tap activates area and
+        *  second tap enables scrolling
+        */                
+        void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+        
+        /**
+        * Controls the taps on the corresponding area, 
+        *   either playing or pausing the presentation after the tap
+        */
+        void PlayPauseTappedL();
+        
+        /**
+        * Returns whether asked media type if focused.
+        * 
+        * @since 3.2
+        * 
+        * @param aMediaType Enumeration of TSmilMediaType
+        *
+        * @return ETrue if asked media type is focused otherwise EFalse.
+        *
+        */
+        TBool IsFocused( const TMsgMediaType& aMediaType ) const;
+
+        /**
+        * Activates focused media object.
+        */
+        void ActivateFocusedL();
+        
+        /**
+         * Returns SMIL players own statuspane current visibility.
+         * 
+         * @return ETrue if own statuspane is visible and EFalse if it is not.
+         */
+        TBool OwnStatusPaneVisible();
+        
+        /**
+         * Returns whether wide screen statuspane should be used.
+         * 
+         * @return ETrue/EFalse Use/Don't use
+         */
+         static TBool UseWidescreenStatusPane();
+
+        
+    public: // Functions from base classes
+
+        /** 
+        * From MSmilPlayer
+        * Returns the media factory object that is responsible of 
+        * creating the media renderers
+        *
+        * @since 2.0
+        *
+        */
+        inline virtual MSmilMediaFactory* GetMediaFactory(
+                        const CSmilPresentation* aPres ) const;        
+
+        /**
+        * From MSmilPlayer  
+        * Returns the transition factory object that is responsible of 
+        * creating the transition renderers
+        *
+        * @since 2.0
+        *
+        */
+        inline virtual MSmilTransitionFactory* GetTransitionFactory( 
+                        const CSmilPresentation* aPres ) const;
+        
+        /** 
+        * From MSmilPlayer
+        * Evaluate a content control attribute for true or false. 
+        * Attributes 
+        *       systemOperatingSystem
+        *       systemCPU
+        *       systemScreenSize 
+        *       systemScreenDepth 
+        * are handled inside the SMIL engine, the rest are passed to this method.
+        *
+        * @since 2.0
+        *
+        */
+        inline virtual TBool EvaluateContentControlAttribute(
+                        const TDesC& aName, const TDesC& aValue );
+
+        /** 
+        * From MSmilPlayer
+        * Return the dimensions of the drawing surface
+        *
+        * @since 2.0
+        *
+        */
+        inline virtual TRect GetDimensions(const CSmilPresentation* aPres );
+
+        /**
+        * From MSmilPlayer  
+        * Return the EIKON GUI control that is used as the view for the given 
+        * presentation.
+        *
+        * SMIL Engine never calls this method. It might be used by 
+        * implementations of MSmilMediaRenderer interface.
+        *
+        * @since 2.0
+        *
+        */
+        inline virtual CCoeControl* GetControl(const CSmilPresentation* aPres );
+
+        /** 
+        * From MSmilPlayer
+        * The engine calls this method to initiate redrawing of the given area. 
+        * Implementation of this method should in turn call Draw method of the 
+        * given presentation object.
+        *
+        * @since 2.0
+        *
+        */
+        inline virtual void Redraw(TRect aArea, CSmilPresentation* aPres );
+
+        /** 
+        * This method is called by the engine as a result of hyperlink
+        * activation. Player should open the given (relative to the
+        * presentation base) url. However, the current presentation MUST NOT
+        * be deleted during execution of this method, as this method is
+        * invoked by the current presentation,
+        * 
+        * aAnchor - contains addition information about the link. can be 0.
+        *
+        * source/destination states: 
+        * EPlay - (continue) play the presentation
+        * EStop - stop the source presentation or open destination presentation
+        *   in stopped state
+        * EPause - pause the source presentation, continue it after,
+        *   destination finishes
+        *
+        * 3GPP profile does not require respecting these states,
+        *   aAnchor may be ignored
+        *
+        * @since 2.0
+        *
+        */
+        virtual void OpenDocumentL(
+                        const TDesC& aUrl,
+                        const CSmilAnchor* aAnchor,
+                        const CSmilPresentation* aPres );       
+
+        /** 
+        * Invoked when a presentation state changes. aEvent is 
+        * EStarted - presentation started playing,
+        * EStopped - presentation was stopped,
+        * EPaused - presentation was paused
+        * EResumed - paused presentation was resumed
+        * ESeeked - presentation was seeked to a new position on timeline
+        * EMediaNotFound - opening media failed, aText contains the media url
+        * or
+        * EEndReached - presentation has reached its end time. whether it is
+        * paused or stopped depends on EndAction setting.
+        * one of the negative system wide error codes (from a trapped leave
+        * inside engine RunL() method). 
+        * In this case the playing presentation is stopped automatically and
+        * the presentation can not be restarted.
+        *
+        * @since 2.0
+        *
+        */
+        virtual void PresentationEvent(
+                        TInt aEvent,
+                        const CSmilPresentation* aPres,
+                        const TDesC& aText );
+
+    private:
+
+        /**
+        * C++ constructor.
+        */
+        CSmilPlayerPresentationController( CMDXMLDocument* aDOM,
+                                           MMediaFactoryFileInfo* aFileInfo,
+                                           CSmilPlayerDialog* aParent,
+                                           RFile& aFileHandle );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( const TRect& aRect, const TDesC& aBaseUrl, TBool aVolumeEnabled );
+
+    private: // New functions
+
+        /**
+        * Parses the presentation file
+        */
+        void DoParsingL();
+
+        /**
+        * Calls to references phone number
+        */
+        void CallL( const TDesC& aString );
+
+        /**
+        * Sends message (SMS, MMS or e-mail) to selected item
+        */
+        void SendMessageL( const TUid& aMtmUid, const TDesC& aString );
+
+        /**
+        * Goes to referenced URL
+        */
+        void GoToUrlL( const TDesC& aString );
+
+        /**
+        * Load text string and shows a confirm dialog
+        */
+        TBool LoadTextAndConfirmL( TInt aResourceId, const TDesC& aString ) const;
+
+        /**
+        * Shows confirm query to the user
+        */
+        TBool ShowConfirmQueryL( TInt aResource, const TDesC& aText ) const;
+        
+        /**
+        * Resets the control state.
+        */
+        void Reset();
+        
+        /**
+        * Sets correct layout for indicators.
+        */  
+        void LayoutIndicators();
+        
+        /**
+        * Sets correct layout for presentation control.
+        */
+        void LayoutPresentationControl();
+        
+        /**
+        * Performs volume change key handling.
+        */ 
+        TKeyResponse DoHandleVolumeKeyL( const TKeyEvent& aKeyEvent, TEventCode aType );
+        
+        /**
+        * Performs Remote Control Operation handling.
+        */
+        void DoHandleRCSOperationL( TRemConCoreApiOperationId aOperation );
+        
+        /**
+        * Initializes double buffer.
+        */
+        void InitializeDoubleBufferL();
+        
+    private: // Functions from base classes
+
+        /**
+        * From CoeControl,CountComponentControls.
+        */
+        TInt CountComponentControls() const;
+
+        /**
+        * From CCoeControl,ComponentControl.
+        */
+        CCoeControl* ComponentControl( TInt aIndex ) const;
+
+        /**
+        * From CCoeControl,Draw.
+        */
+        void Draw( const TRect& aRect ) const;
+
+    private: // data
+            
+        // iDOM
+        CMDXMLDocument* iDOM;
+
+        // A Font and Bitmap server, which managed bitmap as a graphics device.
+        CFbsBitmapDevice*               iBufferDevice;
+
+        // Implementation of a bitmapped graphics context.
+        CFbsBitGc*                      iBufferContext;
+
+        // Presentation class to the engine
+        CSmilPresentation*              iPresentation;
+
+        // Factory class for the media
+        CSmilPlayerMediaFactory*        iMediaFactory;
+
+        // Factory class for the transitions
+        CSmilTransitionFactory*         iTransitionFactory;
+
+        // Store class for the medias
+        MMediaFactoryFileInfo*          iFileInfo;
+
+        // Dialog class for this class
+        CSmilPlayerDialog*              iParent;
+
+        // A bitmap managed by the Font and Bitmap server.
+        // Provided to the CSmilTransitionFactory class.
+        CFbsBitmap*                     iBufferBitmap;
+
+        // Wait dialog.
+        CAknWaitDialog* iWaitDialog;
+        
+        // SendUi 
+        CSendUi* iSendUi;
+
+        CAiwServiceHandler* iServiceHandler;
+
+        //
+        TBool iScrollingTogglePerformedWhileLinkExist;
+
+        //
+        TInt iLayoutResId;
+
+        // Presentation control of the player
+        CSmilPlayerPresentationControl* iPresentationControl;
+        
+        // Controller class for this class
+        CAknNavigationDecorator* iIndicatorContainer;
+        
+        // Indicator controller.
+        CSmilPlayerIndicatorController* iIndicatorController;
+        
+        //
+        TBool iDOMInternallyOwned;
+        
+        //
+        TRect iPresentationRect;
+        
+        // .smil file handle (can be KNullHandle).
+        RFile iFileHandle;
+        
+        // Base URL that is used for resolving relative URLs.
+        HBufC* iBaseUrl;
+        
+        // Flag to indicate that layout change is needed.
+        TBool iChangeLayout;
+        
+        // Last selected object
+        CSmilObject* iTappedObject;
+        
+        // Current visibility of own statuspane.
+        TBool iOwnStatusPaneVisible;    
+        
+        // Flag to indicate if the presentation is overlapped by another dialog (e.g. FindUi)
+        TBool iPresentationOverlapped;
+    };
+
+#include "SmilPlayerPresentationController.inl"
+
+#endif // SMILPLAYERPRESENTATIONCONTROLLER_H
+
+// End of File