phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/ViewObserver.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/ViewObserver.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,134 @@
+// 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:
+//
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+ 
+#include "ViewObserver.h"
+
+CViewObserver* CViewObserver::NewLC(const CContactViewTest &aTest, 
+									void (CContactViewTest::*aFunc)())
+	{
+	CViewObserver *self = new(ELeave) CViewObserver(aTest, aFunc);
+	CleanupStack::PushL(self);
+	return self;
+	}
+	
+CViewObserver::~CViewObserver()
+	{
+	CleanView();
+	}
+
+CViewObserver::CViewObserver( 	const CContactViewTest &aTest,
+								void (CContactViewTest::*aFunc)()) : 
+														CActive(EPriorityStandard),
+														iMainFunc( aFunc ), 
+														iTest( const_cast<CContactViewTest &>(aTest) )
+	{
+	CActiveScheduler::Add(this);
+	}
+	
+	
+void CViewObserver::RunL()
+	{
+	
+	if(iMainFunc)
+		{
+		(iTest.*iMainFunc)();
+		}
+	else
+		{
+		(iTest.*iDoFunc)(*iLocalView);
+		}
+		
+	if( !iDoFunc && !iMainFunc )
+		{
+		CActiveScheduler::Stop();
+		}
+	}
+	
+void CViewObserver::DoCancel()
+	{
+	}
+
+TInt CViewObserver::RunError(TInt aError)
+	{
+	_LIT(KViewError,"ViewObserver:: Error in doTest runL: %d");
+	iTest.ERR_PRINTF2(KViewError , aError );
+	return aError;
+	}
+
+void CViewObserver::Activate()
+	{
+    if (!IsActive())
+        {
+    	TRequestStatus *pS=&iStatus;
+    	User::RequestComplete(pS,KErrNone);
+        SetActive();
+        }
+	}
+	
+	
+void CViewObserver::HandleContactViewEvent(	const CContactViewBase& aView, 
+											const TContactViewEvent& aEvent)
+	{
+	if (&aView==iLocalView)
+		{
+		switch(aEvent.iEventType)
+			{
+			case TContactViewEvent::EReady:
+				{				
+				Activate();
+				break;
+				}
+			case TContactViewEvent::EItemAdded:
+			case TContactViewEvent::EItemRemoved:
+			case TContactViewEvent::EGroupChanged:
+			case TContactViewEvent::ESortOrderChanged:
+			case TContactViewEvent::EUnavailable:
+				{
+				break;
+				}
+			default:
+				{
+				_LIT(KViewError,"CViewObserver::HandleContactViewEvent, non ready event: %d and error: %d");
+				iTest.ERR_PRINTF3(KViewError , aEvent.iEventType, aEvent.iInt );
+				RDebug::Print(KViewError , aEvent.iEventType, aEvent.iInt  );
+				iEvent = TContactViewEvent(aEvent.iEventType, aEvent.iInt, aEvent.iContactId);
+				Activate();
+				break;
+				}
+			}
+		}
+	}
+	
+void CViewObserver::CleanView()
+	{
+	if(iLocalView)
+		{
+		iLocalView->Close(*this);
+		iLocalView = NULL;
+		}
+	}
+	
+void CViewObserver::SetView(const CContactViewBase *aLocalView)
+	{
+	CleanView();
+	iLocalView = const_cast<CContactViewBase *>(aLocalView);
+	}
+