lafagnosticuifoundation/graphicseffects/ClientInc/TransitionControl.h
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/graphicseffects/ClientInc/TransitionControl.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,171 @@
+// Copyright (c) 2006-2009 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:
+//
+
+#ifndef _TRANSITIONCONTROL_H
+#define _TRANSITIONCONTROL_H
+
+#include <e32base.h>
+#include <w32std.h>
+#include <vwsdef.h>
+
+#include "TransitionParticipant.h"
+#include "GfxTransDataType.h"
+
+
+class CRegisteredControl;
+class CTransitionControl;
+class CCoeControl;
+class CTransitionParticipant;
+
+/**
+stack for controls that has got a begin, but not yet an end.
+
+@internalTechnology
+*/
+class RActiveStack : public RPointerArray<CTransitionControl>
+	{
+public:
+	TInt Push(CTransitionControl* aTransControl);
+	TInt PushLC(CTransitionControl* aTransControl);
+	CTransitionControl* Pop();
+	CTransitionControl* Top();
+
+	TInt ClearAbove(TInt aIndex);
+	TInt Find(const CCoeControl* aControl) const;
+	TInt Find(const CRegisteredControl* aRegControl) const;
+	TInt FindView(TVwsViewId const &aView) const;
+	TInt Find(TInt aHandle) const;
+private:
+	static void CleanupOperation(TAny* aAny);
+	};
+
+/**
+list of controls currently transitioning/animating.
+*/
+class RInTransitionList : public RPointerArray<CTransitionControl>
+	{
+public:
+	TInt Append(CTransitionControl* aTransControl);
+	void Remove(TInt aIndex);
+
+	TInt Find(const CRegisteredControl* aRegControl) const;
+	TInt Find(TInt aHandle) const;
+	};
+
+class MTransitionControlObserver
+	{
+public:
+	virtual void ParticipantUpdated(CTransitionControl* aTransControl, CTransitionParticipant* aParticipant, 
+									RWsGraphicMsgBuf* aCommandBuffer, const TRect& aDrawRect, const TRect& aBoundingRect) = 0;
+	};
+
+/**
+keeps the data defining a specific transition instance.
+*/
+NONSHARABLE_CLASS(CTransitionControl) : public CBase
+	{
+public:
+	friend class RActiveStack;
+
+	static CTransitionControl* New(	CRegisteredControl* aRegControl, MTransitionControlObserver* aObserver,
+									TUint aAction, TPolicy aPolicy, TInt aHandle);
+	~CTransitionControl();
+	void Reset();									
+	//getters
+	inline CRegisteredControl* RegControl() const;
+	inline TUint Action() const;
+	inline TInt Handle() const;
+	inline TBool Failed() const;
+	inline TPolicy Policy() const;
+	inline CWsScreenDevice* ScreenDevice();
+	
+	//capture
+	void CaptureBegin();
+	void CaptureEnd();
+	//demarcation
+	void DoSetDemarcation(const CCoeControl* aKey, TRect aDemarcation);
+	void DoSetDemarcation(const CCoeControl* aKey, const CCoeControl* aSrc, TRect aDemarcation);
+	void DoSetBeginDemarcation(const CCoeControl* aKey, TRect aDemarcation);
+	void DoSetEndDemarcation(const CCoeControl* aKey, TRect aDemarcation);
+	// hints
+	void Invalidate(const CCoeControl* aKey);
+	void SetHints(const CCoeControl* aKey, TUid aLayerType);
+	void SetHints(const CCoeControl* aKey, TUint aFlags);
+	TUint GetHints(const CCoeControl* aKey);
+	//
+	void SetTransitionData(TUint aType, const TDesC8& aData);
+	void GetTransitionData(const CTransitionData*& aTransData);
+	TInt GetUpdatedRegion(RRegion& aRegion);
+	
+	//participant callback
+	void ParticipantUpdated(CTransitionParticipant* aParticipant, RWsGraphicMsgBuf* aCommandBuffer,
+							const TRect& aDrawRect, const TRect& aBoundingRect);
+	void SetListenForUpdates(TBool aListen);
+private:
+	MTransitionControlObserver* iObserver;
+	//private functions
+	CTransitionControl(CRegisteredControl* aRegControl, MTransitionControlObserver* aObserver, TInt aHandle);
+	void Fallback();
+	TInt FindParticipant(const CCoeControl* aKey);
+	CTransitionParticipant* CreateSubControl(const CCoeControl* aKey, TUint aFlags);
+	//data
+	CTransitionData* iData;
+	CRegisteredControl* iRegControl; //not owning
+	CTransitionParticipant* iBaseControl;
+	RPointerArray<CTransitionParticipant> iSubControls;
+	
+	//transition info
+	TInt iHandle;
+	
+	CWsScreenDevice* iScreenDevice; //not owning
+	friend class RActiveStack;
+	friend class RInTransitionList;
+	//helpers
+	TBool iHasBeginWOPos;
+	TBool iOnCleanupStack;
+};
+
+//getters/setters.
+CRegisteredControl* CTransitionControl::RegControl() const 
+	{
+	return iRegControl;
+	}
+TUint CTransitionControl::Action() const
+	{
+	return iData->iAction;
+	}
+
+TInt CTransitionControl::Handle() const
+	{
+	return iHandle;
+	}
+	
+TBool CTransitionControl::Failed() const
+	{
+	return iData->iFailed;
+	}
+
+TPolicy CTransitionControl::Policy() const
+	{
+	return iData->iPolicy;
+	}
+
+CWsScreenDevice* CTransitionControl::ScreenDevice()
+	{
+	return iScreenDevice;
+	}
+
+#endif
+