diff -r 000000000000 -r e686773b3f54 phonebookengines/VirtualPhonebook/VPbkSimStore/src/TStoreContactFieldCollection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/src/TStoreContactFieldCollection.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,142 @@ +/* +* Copyright (c) 2002-2007 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: The virtual phonebook store field collection implementation +* +*/ + + +// INCLUDES +#include "TStoreContactFieldCollection.h" + +#include +#include +#include +#include +#include "TStoreContactField.h" +#include "CContact.h" +#include "CContactLink.h" + +namespace VPbkSimStore { + +// ----------------------------------------------------------------------------- +// TStoreContactFieldCollection::TStoreContactFieldCollection +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +TStoreContactFieldCollection::TStoreContactFieldCollection() + { + } + +// ----------------------------------------------------------------------------- +// TStoreContactFieldCollection::SetContact +// ----------------------------------------------------------------------------- +// +void TStoreContactFieldCollection::SetContact( CContact& aParentContact, + CVPbkSimContact& aSimContact ) + { + iCurrentField.SetParentContact( aParentContact ); + iParentContact = &aParentContact; + iSimFields = &aSimContact.FieldArray(); + } + +// ----------------------------------------------------------------------------- +// TStoreContactFieldCollection::ParentContact +// ----------------------------------------------------------------------------- +// +MVPbkBaseContact& TStoreContactFieldCollection::ParentContact() const + { + return *iParentContact; + } + +// ----------------------------------------------------------------------------- +// TStoreContactFieldCollection::FieldCount +// ----------------------------------------------------------------------------- +// +TInt TStoreContactFieldCollection::FieldCount() const + { + return iSimFields->Count(); + } + +// ----------------------------------------------------------------------------- +// TStoreContactFieldCollection::FieldAt +// ----------------------------------------------------------------------------- +// +const MVPbkStoreContactField& TStoreContactFieldCollection::FieldAt( + TInt aIndex) const + { + iCurrentField.SetSimField( *(*iSimFields)[aIndex] ); + return iCurrentField; + } + +// ----------------------------------------------------------------------------- +// TStoreContactFieldCollection::FieldAt +// ----------------------------------------------------------------------------- +// +MVPbkStoreContactField& TStoreContactFieldCollection::FieldAt(TInt aIndex) + { + iCurrentField.SetSimField( *(*iSimFields)[aIndex] ); + return iCurrentField; + } + +// ----------------------------------------------------------------------------- +// TStoreContactFieldCollection::FieldAtLC +// ----------------------------------------------------------------------------- +// +MVPbkStoreContactField* TStoreContactFieldCollection::FieldAtLC( + TInt aIndex ) const + { + TStoreContactField* field = new( ELeave ) TStoreContactField; + field->SetParentContact( *iParentContact ); + field->SetSimField( *(*iSimFields)[aIndex] ); + CleanupDeletePushL( field ); + return field; + } + +// ----------------------------------------------------------------------------- +// TStoreContactFieldCollection::ParentStoreContact +// ----------------------------------------------------------------------------- +// +MVPbkStoreContact& TStoreContactFieldCollection::ParentStoreContact() const + { + return *iParentContact; + } + +// ----------------------------------------------------------------------------- +// TStoreContactFieldCollection::RetrieveField +// ----------------------------------------------------------------------------- +// +MVPbkStoreContactField* TStoreContactFieldCollection::RetrieveField( + const MVPbkContactLink& aContactLink) const + { + __ASSERT_ALWAYS(aContactLink.RefersTo(*iParentContact), + VPbkError::Panic(VPbkError::EInvalidContactField)); + + MVPbkStoreContactField* result = NULL; + + if (&aContactLink.ContactStore() == &iParentContact->ContactStore()) + { + const CContactLink& link = static_cast(aContactLink); + TInt fieldIndex = link.FieldId(); + if ( fieldIndex >= 0 && fieldIndex < iSimFields->Count()) + { + iCurrentField.SetSimField(*(*iSimFields)[fieldIndex]); + result = &iCurrentField; + } + } + + return result; + } +} // namespace VPbkSimStore +