/** Copyright (c) 2005 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: Container of one contact item. It includes contact ID and WV IDs***/// INCLUDE FILES#include <e32std.h>#include <cntfldst.h>#include "CPEngContact.h"#include "PEngContactIdTools.h"// ============================ MEMBER FUNCTIONS ===============================// -----------------------------------------------------------------------------// CPEngContact::CPEngContact// C++ default constructor can NOT contain any code, that// might leave.// -----------------------------------------------------------------------------//CPEngContact::CPEngContact( TContactItemId& aContactId ) : iWVIds( 1 ), // usually only one WV per contact iContactItemId( aContactId ) { }// -----------------------------------------------------------------------------// CPEngContact::ConstructL// Symbian 2nd phase constructor can leave.// -----------------------------------------------------------------------------//void CPEngContact::ConstructL( CContactItem* aContactItem ) { iWVIds.Reset(); // if there is no WV ID field then the array of the WV IDs will be empty CContactItemFieldSet& cardFieldSet = aContactItem->CardFields(); TInt fieldIndex ( cardFieldSet.FindNext( KPbkFieldIMAddress, KPbkFieldWVIdMapping, KContactFieldSetSearchAll ) ); // now read all wv ID fields while ( fieldIndex != KErrNotFound ) { CContactTextField* textField = ( cardFieldSet[fieldIndex] ).TextStorage(); // does not take ownership // read contact only if it's length is more then 0 TPtrC wvId ( textField->Text() ); if ( wvId.Length() != 0 ) { // if it leaves, it is cause of KErrNoMemory AddContactIdToArrayL( iWVIds, wvId ); } // +1 is to start from next field fieldIndex = cardFieldSet.FindNext( KPbkFieldIMAddress, KPbkFieldWVIdMapping, fieldIndex + 1 ); } }// -----------------------------------------------------------------------------// CPEngContact::NewL// Two-phased constructor.// -----------------------------------------------------------------------------//CPEngContact* CPEngContact::NewL( CContactItem* aContactItem ) { CPEngContact* self = NewLC( aContactItem ); CleanupStack::Pop( self ); // self return self; }// -----------------------------------------------------------------------------// CPEngContact::NewLC// Two-phased constructor.// -----------------------------------------------------------------------------//CPEngContact* CPEngContact::NewLC( CContactItem* aContactItem ) { TContactItemId contactID( aContactItem->Id() ); CPEngContact* self = new( ELeave ) CPEngContact( contactID ); CleanupStack::PushL( self ); self->ConstructL( aContactItem ); return self; }// -----------------------------------------------------------------------------// CPEngContact::NewLC// Two-phased constructor.// -----------------------------------------------------------------------------//CPEngContact* CPEngContact::NewL( TContactItemId& aContactID ) { CPEngContact* self = new( ELeave ) CPEngContact( aContactID ); // no need to call ConstructL return self; }// DestructorCPEngContact::~CPEngContact() { iWVIds.Reset(); }// =============================================================================// ===============Function of base class =======================================// =============================================================================// -----------------------------------------------------------------------------// CPEngContact::ContactId()// Return contact Item ID// (other items were commented in a header).// -----------------------------------------------------------------------------//TContactItemId CPEngContact::ContactId() const { return iContactItemId; }// -----------------------------------------------------------------------------// CPEngContact::WvIds()// Get List of the WV IDs// (other items were commented in a header).// -----------------------------------------------------------------------------//const MDesCArray& CPEngContact::WvIds() const { return iWVIds; }// -----------------------------------------------------------------------------// CPEngContact::Compare()// Compare two Contacts if they match, based on Contact Item ID// (other items were commented in a header).// -----------------------------------------------------------------------------//TInt CPEngContact::Compare( const CPEngContact& aContactA, const CPEngContact& aContactB ) { return aContactA.Compare( aContactB ); }// -----------------------------------------------------------------------------// CPEngContact::CompareContactID()// Compare two Contacts if they match, based on Contact Item ID// (other items were commented in a header).// -----------------------------------------------------------------------------//TInt CPEngContact::Compare( const CPEngContact& aContact ) const { if ( aContact.ContactId() == iContactItemId ) { return KErrNone; } if ( aContact.ContactId() < iContactItemId ) { return 1; // does not match } return -1; // does not match }// -----------------------------------------------------------------------------// CPEngContact::ValidateWVId()// Search if WV Id is presented in the contact// (other items were commented in a header).// -----------------------------------------------------------------------------//TBool CPEngContact::ValidateWVId( const TDesC& aWVId ) const { return !( KErrNotFound == FindContactIdInArray( iWVIds, aWVId ) ); }// -----------------------------------------------------------------------------// CPEngContact::WVIdsCount()// Count of the WV IDs in the contact// (other items were commented in a header).// -----------------------------------------------------------------------------//TInt CPEngContact::WVIdsCount() { return iWVIds.Count(); }// -----------------------------------------------------------------------------// CPEngContact::UpdateContactL()// Update contact from the contact db// (other items were commented in a header).// -----------------------------------------------------------------------------//void CPEngContact::UpdateContactL( CContactDatabase& aContactDatabase ) { // update content of the Contact from the database CContactItem* contactItem = aContactDatabase.ReadMinimalContactLC( iContactItemId ); iWVIds.Reset(); ConstructL( contactItem ); CleanupStack::PopAndDestroy(); // contactItem }// End of File