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