diff -r 000000000000 -r 72b543305e3a mobilemessaging/smilui/playerinc/SmilPlayerPresentationController.h --- /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 + +#include +#include // TRemConCoreApiOperationId +#include "SmilPlayer.hrh" +#include + +#include + + +// 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