diff -r 000000000000 -r e686773b3f54 phonebookengines/VirtualPhonebook/VPbkCntModel/src/TContactFieldCollection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/TContactFieldCollection.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2004-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: Maps a Contact Model field collection to a virtual Phonebook + field collection. +* +*/ + + +// INCLUDES +#include "TContactFieldCollection.h" +#include +#include +#include "TContactField.h" +#include "CContact.h" +#include "CContactLink.h" + +namespace VPbkCntModel { + +TContactFieldCollection::TContactFieldCollection + (CContact& aParentContact, CContactItemFieldSet& aFieldSet) : + iFieldSet(&aFieldSet), + iCurrentField(aParentContact), + iParentContact(&aParentContact) + { + } + +TContactFieldCollection::~TContactFieldCollection() + { + } + +void TContactFieldCollection::SetContact + (CContact& aParentContact, CContactItemFieldSet& aFieldSet) + { + iFieldSet = &aFieldSet; + iCurrentField.SetParentContact(aParentContact); + iParentContact = &aParentContact; + } + +MVPbkBaseContact& TContactFieldCollection::ParentContact() const + { + return *iParentContact; + } + +TInt TContactFieldCollection::FieldCount() const + { + return iFieldSet->Count(); + } + +const MVPbkStoreContactField& TContactFieldCollection::FieldAt(TInt aIndex) const + { + __ASSERT_ALWAYS(aIndex >= 0 && aIndex < iFieldSet->Count(), + VPbkError::Panic(VPbkError::EInvalidFieldIndex)); + iCurrentField.SetField((*iFieldSet)[aIndex]); + return iCurrentField; + } + +MVPbkStoreContactField& TContactFieldCollection::FieldAt(TInt aIndex) + { + __ASSERT_ALWAYS(aIndex >= 0 && aIndex < iFieldSet->Count(), + VPbkError::Panic(VPbkError::EInvalidFieldIndex)); + iCurrentField.SetField((*iFieldSet)[aIndex]); + return iCurrentField; + } + +MVPbkStoreContactField* TContactFieldCollection::FieldAtLC(TInt aIndex) const + { + __ASSERT_ALWAYS(aIndex >= 0 && aIndex < iFieldSet->Count(), + VPbkError::Panic(VPbkError::EInvalidFieldIndex)); + TContactField* clone = + new (ELeave) TContactField(*iParentContact); + clone->SetField((*iFieldSet)[aIndex]); + CleanupDeletePushL(clone); + return clone; + } + +MVPbkStoreContact& TContactFieldCollection::ParentStoreContact() const + { + return *iParentContact; + } + +MVPbkStoreContactField* TContactFieldCollection::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); + const TInt fieldCount = FieldCount(); + for (TInt i = 0; i < fieldCount; ++i) + { + if ((*iFieldSet)[i].Id() == link.ContactFieldId()) + { + iCurrentField.SetField((*iFieldSet)[i]); + result = &iCurrentField; + } + } + } + + return result; + } +} // namespace VPbkCntModel +