msg_plat/smil_engine_api/inc/smilpresentation.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/msg_plat/smil_engine_api/inc/smilpresentation.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,477 @@
+/*
+* Copyright (c) 2003 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: smilpresentation  declaration
+*
+*/
+
+
+
+#ifndef SMILPRESENTATION_H
+#define SMILPRESENTATION_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <coedef.h>
+#include <w32std.h>
+
+#include <smiltextbuf.h>
+
+#include <smiltime.h>
+#include <smilevent.h>
+#include <smillinkedlist.h>
+#include <smilregioninterface.h>
+#include <smilplayerinterface.h>
+
+#include <smilmediafactoryinterface.h>
+
+#define JEEVES_MEDIUM_VOLUME 50
+#define JEEVES_MAX_VOLUME 100
+
+// FORWARD DECLARATIONS
+class CSmilRootRegion;
+class CSmilSequence;
+class CSmilTimeContainer;
+class CSmilTransition;
+class CSmilAnchor;
+class MSmilTransitionFactory;
+class MSmilActive;
+
+// CLASS DECLARATION
+
+/**
+ *  A SMIL presentation
+ */
+class CSmilPresentation : public CActive
+    {
+public:  // Constructors and destructor
+    
+	/**
+    * Two-phased constructor.
+    */
+    IMPORT_C static CSmilPresentation* NewL(MSmilPlayer* aPlayer);	
+    
+    /**
+    * Destructor.
+    */
+    virtual ~CSmilPresentation();
+
+
+public: // New functions
+
+	/**
+	* Returns the MSmilPlayer object associated with this presentation
+	*/
+	inline MSmilPlayer* GetPlayer();
+
+	/**
+	* Called from outside of the engine to update the given 
+	* region within the presentation area, using the given
+	* graphics context The engine draws the region 
+	* backgrounds and the media objects that are not 
+	* responsible for performing their own drawing.
+	*
+	* This method should ultimately be called by the Draw 
+	* method of the CCoeControl that contains the SMIL 
+	* presentation. It should also be called as a result 
+	* of MSmilPlayer::Redraw() call.
+	*/
+
+	IMPORT_C void Draw(CGraphicsContext& aGc, const TRect& aRect);
+
+	/**
+	* Starts the presentation playback.
+	*/
+    IMPORT_C void PlayL();
+
+	
+	/**
+	* Stops the presentation playback, resetting the 
+	* timeline to the beginning and possibly freeing some 
+	* allocated resouces.
+	*/
+    IMPORT_C void StopL();
+
+
+	/**
+	* Pauses the presentation playback.
+	*/
+    IMPORT_C void Pause();
+
+
+	/**
+	* Resumes the presentation playback.
+	*/
+    IMPORT_C void Resume();
+	
+
+	/**
+	* Tries to seek the presentation to the given position
+	* in the timeline. If this fails, the presentation is 
+	* stopped.
+	*
+	* Returns TRUE if succesful.
+	*/
+	IMPORT_C TBool SeekL(TSmilTime aTo);
+
+
+	/**
+	* Returns the base URL of the presentation
+	*/
+	IMPORT_C TPtrC BaseUrl() const;
+
+	
+	/**
+	* Sets the base URL of the presentation
+	*/
+	IMPORT_C void SetBaseUrlL(const TDesC& aUrl);
+
+
+	/**
+	* Current position on presentation timeline
+	*/
+	IMPORT_C TSmilTime CurrentTime();
+
+
+	enum TPresentationState
+	{
+		EPlaying,
+		EStopped,
+		EPaused
+	};
+
+	/**
+	* State of the presentation:
+	*
+	* EStopped
+	* EPlaying
+	* EPaused
+	*/
+	IMPORT_C TPresentationState State();
+
+
+	IMPORT_C TSmilTime Duration() const;
+
+	/** 
+	* Submits an event to the Engine. Events are 
+	* characterised by event name and event source.
+	*
+	* Event source is a name of a source element. If 
+	* the source is within the timegraph the name can 
+	* be obtained using TSmilObject::GetName() method.
+	* 
+	* Event name is a name of an event class, for example 
+	* "activateEvent".
+	*/
+	IMPORT_C void SubmitEventL(const TDesC& aName, const TDesC& aSource);
+
+	IMPORT_C void SubmitEventL(const TDesC& aName, CSmilObject* aSource);
+
+	/** 
+	 * Convenience method for generating UI events
+	 */
+	IMPORT_C void MouseClickedL(const TPoint& aPoint);
+
+	/** 
+	 * Move media focus maintained by the SMIL engine to given direction.
+	 * HandleKeyEvent replaces this method in most cases.
+	 */
+	IMPORT_C void MoveFocusL(TInt aX, TInt aY);
+
+	/**
+	 * Remove focus if exists
+	 */
+	IMPORT_C void CancelFocusL();
+
+	/**
+	 * Return currently focused object, or null
+	 */
+	IMPORT_C CSmilObject* FocusedObject() const;
+
+	/** 
+	 * Generate activate event for currently focused media (if there is one)
+	 */
+	IMPORT_C void ActivateFocusedL();
+
+	/**
+	 * Set to true to enable slide mode used for playing back Conformance
+	 * Document MMS messages. Use NextSlide(), CurrentSlide(), SlideCount() to navigate.
+	 *
+	 */
+	inline void SetSlideModeEnabled(TBool aEnable);
+
+	inline TBool SlideModeEnabled() const;
+
+	/**
+	 * Handle Symbian OS key event. This may generate SMIL events, may move key focus
+	 * and may cause media to scroll
+	 */
+	IMPORT_C TKeyResponse HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+	/**
+	 * Handle Symbian OS mouse event. This may generate SMIL events, may move key focus
+	 * and may cause media to scroll
+	 */
+	IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+	/**
+	 * Return the sequence number (starting from 1) of current slide (top level <body> child element)
+	 */
+	IMPORT_C TInt CurrentSlide() const;
+
+	/**
+	 * Return total number of slides in the presentation (top level <body> child elements)
+	 */
+	IMPORT_C TInt SlideCount() const;
+
+	/**
+	 * Go to next slide in the presentation:
+	 */
+	IMPORT_C TBool NextSlideL();
+
+	/**
+	 * Go to previous slide in the presentation:
+	 */
+	IMPORT_C TBool PreviousSlideL();
+
+	/**
+	 * Returns true if presentation background is transparent
+	 */
+	IMPORT_C TBool IsTransparent() const;
+
+	/**
+	 * If true, using two-way (up-down) navigation mode, four-way otherwise
+	 */
+	inline TBool TwoWayNavigation() const;
+
+	/**
+	 * If set to true (default), use two-way (up-down) navigation mode, four-way otherwise
+	 */
+	inline void SetTwoWayNavigation(TBool aEnable);
+
+	/**
+	 * If set to true (default), scale down oversized SMIL layouts
+	 */
+	inline TBool ScaleLayout() const;
+
+	/**
+	 * If set to true (default), scale down oversized SMIL layouts
+	 */
+	inline void SetScaleLayout(TBool aScale);
+
+	/**
+	 * Volume getter  function. SetVolume notifies renderes about changes.
+	 * Range: [0..100]
+	 */
+	inline TInt Volume(); 
+
+	/**
+	 * Volume setter function. SetVolume notifies renderes about changes.
+	 * Range: [0..100]
+	 */
+	IMPORT_C void SetVolume(const TInt aVolume);
+
+
+	enum TEndAction { EStopAtEnd, EPauseAtEnd, ERepeatAtEnd };
+
+	/**
+	 * What to do at the end of the presentation. 
+	 * Values: EStopAtEnd, EPauseAtEnd, ERepeatAtEnd
+	 */
+	inline void SetEndAction(TEndAction aEndAction);
+
+	/**
+	 * What to do at the end of the presentation. 
+	 * Values: EStopAtEnd, EPauseAtEnd, ERepeatAtEnd
+	 */
+	inline TEndAction GetEndAction() const;
+
+
+	enum TStartAction { EDoNothing, EShowFirstFrame };
+
+	/**
+	 * What to do when then the presentation is in the beginning
+	 * (stopped) and not playing.
+	 * Values: EDoNothing, EShowFirstFrame
+	 */
+	inline void SetStartAction(TStartAction aStartAction);
+
+	/**
+	 * What to do when then the presentation is in the beginning
+	 * (stopped) and not playing.
+	 * Values: EDoNothing, EShowFirstFrame
+	 */
+	inline TStartAction GetStartAction() const;
+
+
+	/**
+	 * Sets the keyboards focus navigation order
+	 * EFalse: from left to right
+	 * ETrue: from right to left
+	 */
+	inline void SetRTLNavigation(TBool aRTL);
+
+
+	/**
+	 * Gets the keyboards focus navigation order
+	 * EFalse: from left to right
+	 * ETrue: from right to left
+	 */
+	inline TBool RTLNavigation() const;
+
+	inline void SetMaxDownUpScaling( TReal aDown, TReal aUp );
+
+	TReal32 GetMaxDownScaling();
+
+	TReal32 GetMaxUpScaling();
+
+	/**
+	 * Returns true if the presentation contains interactive elements
+	 * (besides scrollable media)
+	 */
+	IMPORT_C TBool IsInteractive() const;
+ 
+	IMPORT_C TReal32 GetScalingFactor();
+	
+	/**
+	 * Returns root region rectangle.
+	 */
+	IMPORT_C TRect RootRegionRect() const;
+
+public:
+
+	inline CSmilRootRegion* GetLayout();
+	void SetLayout(CSmilRootRegion* aRoot);
+
+	inline CSmilTimeContainer* GetTimegraph();
+	void SetTimegraph(CSmilTimeContainer* aBody);
+
+	
+	MSmilMediaFactory* GetMediaFactory(); 
+	MSmilTransitionFactory* GetTransitionFactory(); 
+	
+	void SetFocusedObjectL(CSmilObject* aFocus);
+
+	void AddTransitionL(CSmilTransition* aTransition);
+	void ClearTransitions();
+	CSmilTransition* FindTransition(const TDesC& aName);
+
+	void ProcessScheduledL();
+	void ProcessScheduledRecL();
+	void ScheduleNext();
+	void ClearSchedule();
+	void ScheduleUpdateL(const TSmilTime& aTime, MSmilActive* aActive = 0);
+
+	void PrintDebug();	
+
+	TSmilTime RealTime();
+
+	TBool SeekL(CSmilObject* aTo);
+
+	void SubmitEventL(const TSmilEvent& aEvent, TSmilTime aNow = TSmilTime::KUnresolved);
+
+	void ReadyL();
+
+	void ActivateAnchorL(const CSmilAnchor* anchor);	
+
+	void AfterL(MSmilActive* aActive, const TSmilTime& aDelay, TBool aLazy);
+	void CancelActive(MSmilActive* aActive);
+
+	inline TBool MediaSelected() const;
+
+	void UpdateFocusListL();
+
+protected:
+	
+
+	friend class CSmilParser;
+
+	/** constructor */
+	CSmilPresentation(); 
+	void ConstructL(MSmilPlayer* aPlayer);
+
+	virtual void RunL();
+	virtual void DoCancel();
+
+	void PauseInternal();
+
+	TBool iSlideModeEnabled;
+
+	void AutoFocusL();
+	TBool SelectionKeyPressedL();
+	TBool MoveDirectionL(TInt aX, TInt aY);
+
+
+private:
+
+	CSmilRootRegion* iLayout;
+	CSmilTimeContainer* iTimegraph;
+
+	RSmilTextBuf iBaseUrl;
+
+	MSmilPlayer* iPlayer;
+
+	TSmilTime iClock;
+
+	TPresentationState iState;
+
+	RTimer iTimer;
+
+
+	TTime iStartTime;
+	TSmilTime iAccumulatedTime;
+
+	struct ScheduleItem
+		{
+		ScheduleItem* iNext;
+		TSmilTime iTime;
+		MSmilActive* iActive;
+		};
+
+	ScheduleItem* iSchedule;		
+
+	CSmilTransition* iTransitions;
+	CSmilObject* iFocusedObject; 
+	CSmilMedia* iInBounds;
+
+	TInt iVolume;
+
+	TBool iMediaSelected;
+	
+	TBool iEventsEnabled;
+	TBool iSchedulingEnabled;		
+	TBool iProcessing;
+
+	TEndAction iEndAction;
+	TStartAction iStartAction;
+
+	TTime iLastEventTime;
+
+	TBool iTwoWayNavigation;
+
+	CLinkedList<CSmilObject*> iFocusOrder;
+
+	const CSmilAnchor* iDelayedAnchor;
+
+	TBool iFirstFramePaused;
+
+	TBool iRTL;
+	
+		TReal iDown;
+		TReal iUp;
+};
+
+#include <smilpresentation.inl>
+
+#endif      // ?INCLUDE_H   
+            
+// End of File