--- /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);
+ }
+