msg_plat/smil_engine_api/inc/smilobject.h
author Simon Howkins <simonh@symbian.org>
Mon, 22 Nov 2010 17:05:03 +0000
branchRCL_3
changeset 83 26c290f28dd1
parent 0 72b543305e3a
permissions -rw-r--r--
Removed duplicate instructions for creating some messaging MIFs

/*
* 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: smilobject  declaration
*
*/



#ifndef SMILOBJECT_H
#define SMILOBJECT_H

//  INCLUDES
#include <e32base.h>

#include "smiltextbuf.h"

#include "smiltime.h"
#include "smiltimelist.h"
#include "smilinstancetime.h"
#include "smilcondition.h"

// CONSTANTS
//const TReal32 KFloatIndefinite = KMaxTReal32;
#define KFloatIndefinite KMaxTReal32
const TReal32 KFloatUnspecified = -12346;

// FORWARD DECLARATIONS
class CSmilTimeContainer;
class CSmilRegion;
class MSmilRegion;
class CSmilAnchor;
class CSmilPresentation;
class CSmilEvent;
class MSmilActive;
// CLASS DECLARATION


//< -- Fill values -- >
enum TFill  {  EFillAuto, EFillRemove, EFillFreeze, EFillHold, EFillTransition };
//< -- Restart values -->
enum TRestart { ERestartAlways, ERestartNever, ERestartWhenNotActive };
//< -- Endsync values -->
enum TEndsync { EEndsyncFirst, EEndsyncLast, EEndsyncAll, EEndsyncId };


class CSmilObject : public CBase
    {

    public:  // Constructors and destructor
		
		virtual const TDesC* ClassName() const { _LIT(KN,"CSmilObject"); return &KN; } 

		/**
        * Destructor.
        */
		virtual ~CSmilObject();

	public:	
		/**
        * Gets anchor object associated with this object.
        * @return CSmilAnchor* - pointer to the anchor object
        */
		IMPORT_C CSmilAnchor* Anchor() const;

		CSmilPresentation* Presentation() { return iPresentation; }
		CSmilObject* NextSibling() { return iNext; }
		CSmilObject* PreviousSibling() { return iPrevious; }		
		CSmilTimeContainer* ParentObject();
		virtual CSmilObject* FirstChild() const { return 0; }
		virtual CSmilObject* LastChild() const { return 0; }

		TSmilTime Duration() const { return iDuration; }				
		TRestart Restart() const { return iRestart; }
		
		TSmilTime Min() const { return iMin; }
		TSmilTime Max() const { return iMax; }
		TPtrC Id() const;
		TPtrC Title() const;
		TFill Fill() const;			
		TSmilTime RepeatDur() const;
		TReal32 RepeatCount() const;

		virtual TBool IsTimeContainer() const { return EFalse; }
		virtual TBool IsSequence() const { return EFalse; }
		virtual TBool IsParallel() const { return EFalse; }
		virtual TBool IsExclusive() const { return EFalse; }
		virtual TBool IsMedia() const { return EFalse; }
		virtual TBool IsPrefetch() const { return EFalse; }
		virtual TBool IsArea() const { return EFalse; }
		virtual TBool IsA() const { return EFalse; }

		virtual TBool IsVisible() const { return EFalse; }
		virtual TBool IsScrollable() const { return EFalse; }

		struct TInterval
			{
			TInterval()
				{
				iBegin = TSmilTime::KUnresolved;
				iEnd = TSmilTime::KUnresolved;
				}

			TInterval(const TSmilTime& aBegin, const TSmilTime& aEnd)
				{
				iBegin = aBegin;
				iEnd = aEnd;
				}

			TBool IsNull() { return iBegin.IsUnresolved(); }
			TSmilTime Duration() { return iEnd - iBegin; }

			TSmilTime iBegin;
			TSmilTime iEnd;
			};

		/**
        * Unfreeze an object.
        */
		virtual void Unfreeze() {};

		/**
        * Propagate an event throught the timing tree.
        */
		virtual void PropagateEventL( const TSmilEvent& aEvent, const TSmilTime& aTime );

		/**
        * A common "proceed" function for all timed objects.
		* Called each time a timed object receives the timing signal.
        */
		virtual void ProceedL( const TSmilTime& aTps );
		
		void ResolveL() { ResolveL(0); }
		virtual void ResolveL( const TSmilTime& aTps );

		// virtual void Seek( const TSmilTime& aTps, const TSmilTime& aTo );

		/**
        * A common "NotifyDependents" function for all timed objects.
        */
		virtual void NotifyDependents( const TSmilTime& aTime );

		/**
        * Get the implicit duration of an object.
        */
		virtual TSmilTime ImplicitDuration() const;

		/**
        * End an object & geberate an end event.
        */
		virtual void EndL( const TSmilTime& aTime );

		/**
        * Begin an object & generate a begin event.
        */
		virtual void BeginL( const TSmilTime& aTime );
		
		/**
        * Reset the timing values of an object.
        */
		virtual void Reset();
		
		/**
        * Repeat an object.
        */
		virtual void RepeatL( const TSmilTime& aTime );
		
		/**
        * Sets the default timing values of an object.
        */
		void Initialise();
		
		/**
        * Get the active time of an object.
        */
		TSmilTime ActiveTime();		
		
		/**
        * Does the object have a resolved begin time.?
        */
		TBool HasBeginTime();
		
		/**
        * Does the object have a begin condition?
        */
		TBool HasBeginEvent();

		/**
        * Does the object have a resolved end time?.
        */
		TBool HasEndTime();
		
		TBool HasEndEvent();


		void AddConditionL( const TSmilCondition& aCondition, TBool aBeginCondition );
		
			

		void SetRestart( TRestart aVal );

		/**
        * Set the repeatCount value.
        */
		void SetRepeatCount( TReal32 aRC );
		
		/**
        * Set the repeatDur value.
        */
		void SetRepeatDur( TSmilTime aRD );

		void SetFill(TFill aFill) { iFill = aFill; }

		/**
        * Set the "id" string.
        */
		void SetIdL( const TDesC& aString );
		
		/**
        * Set the "title" string.
        */
		void SetTitleL( const TDesC& aString );
		

		void SetAnchor( CSmilAnchor* aReference );
		
		void SetDuration( const TSmilTime& aDuration );
		
		void SetEndTime( const TSmilTime& aEndTime );


		void SetMax( const TSmilTime& aMax );
		void SetMin( const TSmilTime& aMin );

		/**
        * Set the parent object.
        */
		void SetParent( CSmilTimeContainer* aContainer );

		/**
        * Set the "next sibling.
        */
		void SetNextSibling( CSmilObject* aNext );

		/**
        * Set the previous sibling.
        */
		void SetPreviousSibling( CSmilObject* aPrevious );

		/**
        * Returns the next sibling.
        */
		CSmilObject* NextSibling() const;

		/**
        * Returns the previous sibling.
        */
		CSmilObject* PreviousSibling() const;

		CSmilObject* NextAdjacent() const;
		CSmilObject* PreviousAdjacent() const;
		
		CSmilPresentation* Presentation() const;

		
		virtual void SetEndsyncL(TEndsync /*	aEndsync*/, const TDesC& /*aId*/ = TPtrC()) { }

		TSmilTime EndTime() const;
		TSmilTime BeginTime() const;

		TBool IsPlaying() const;
	
		void RecalcInterval( const TSmilTime& aTime );

		virtual TSmilTime NextActivation( const TSmilTime& aTime ) const;			

		TInterval FirstInterval();
		TInterval NextInterval();
		TBool HasMoreIntervals();

		TSmilTime ParentSimpleEnd();

		TInt ActualRepeat() const;
		
		TBool EndSpecified();
		TBool BeginSpecified();
		
		TSmilTime RepeatBeginTime() const;
		
		TSmilTime CalcActiveEnd( TSmilTime aB ); 
		TSmilTime CalcActiveEnd( TSmilTime aB, TSmilTime aEnd );
		
		void ResolveSimpleDuration();
		
		TSmilTime CalcIntermediateActiveDuration() const;

		virtual void AttachedL();
		
		virtual void PrintTree(int d=0) const;		

		TBool IsRepeating() const;

		virtual void SetFocus(TBool ) { }
		virtual TBool HasFocus() const { return EFalse; }

		virtual void SetFocusable(TBool ) { }
		virtual TBool IsFocusable() const{ return EFalse; }
		

		virtual CSmilObject* FindNamedObject(const TDesC& aName);

		void ResolveBeginTimeL(TSmilTime aTime);
		void ResolveEndTimeL(TSmilTime aTime);

		TSmilTime LocalToGlobal(const TSmilTime& aTime);
		TSmilTime GlobalToLocal(const TSmilTime& aTime);

		virtual void RewindL(const TSmilTime& aTime, const TSmilTime& aTo);

		virtual void SetPaused(TBool /*aPaused*/) {};

		virtual void Redraw() {}
		virtual MSmilRegion* GetRegion() const { return 0;}
		virtual TPoint Center() const { return TPoint();}

		void AfterL(MSmilActive* iActive, const TSmilTime& aDelay, TBool aLazy = EFalse);
		void CancelActive(MSmilActive* aActive);

	protected:

		/**
        * C++ default constructor.
        */
		CSmilObject();
		
		/**
        * Base-class Constructor.
        */
		virtual void ConstructL(CSmilPresentation* aPresentation);

	protected:	// Data

		// style properties		
		TSmilTime								iDuration;
		TSmilTime								iRepeatDur;
		TReal32									iRepeatCount;
		TRestart								iRestart;
		TFill									iFill;
		TSmilTime								iMin;
		TSmilTime								iMax;
		RPointerArray<TSmilCondition>			iBeginConditions;
		RPointerArray<TSmilCondition>			iEndConditions;
		CSmilAnchor*							iAnchor;
		RSmilTextBuf							iId;
		RSmilTextBuf							iTitle;
				
		
		// object state

		TInterval								iCurrentInterval;

		TBool									iPlaying;
		TBool									iFirstInterval;		
				
		TSmilTimeList							iBeginList;
		TSmilTimeList							iEndList;

		TSmilTime								iRepeatBeginTime;
		TSmilTime								iSimpleDuration;
		TSmilTime								iActiveDuration;

		TInt									iActualRepeat;

		TBool									iMinLimited;

		TBool									iForcedRepeat;

		// tree management

		CSmilPresentation*						iPresentation;
		CSmilTimeContainer*						iParentObject;
		CSmilObject*							iPrevious;
		CSmilObject*							iNext;		

};

#include "smiltimecontainer.h"

#endif      // ?INCLUDE_H   
            
// End of File