diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/ViewObserver.cpp --- /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(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(aLocalView); + } +