diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/MigrationSupport/src/CPbk2MigrationSupport.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/MigrationSupport/src/CPbk2MigrationSupport.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,190 @@ +/* +* 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: Migration support for Phonebook 2. +* +*/ + + +// INCLUDES +#include "CPbk2MigrationSupport.h" + +// Phonebook 2 +#include + +// Virtual Phonebook +#include +#include +#include +#include +#include +#include + +// Phonebook 1 +#include + +/// Unnamed namespace for local definitions +namespace { + +#ifdef _DEBUG + +enum TPanicCode + { + EPanicPreCond_ConstructL = 1, + EPanicPreCond_NewL + }; + +void Panic(TPanicCode aPanicCode) + { + _LIT(KPanicText, "CPbk2MigrationSupport"); + User::Panic(KPanicText, aPanicCode); + }; + +#endif // _DEBUG + +} /// namespace + + +// -------------------------------------------------------------------------- +// CPbk2MigrationSupport::CPbk2MigrationSupport +// -------------------------------------------------------------------------- +// +inline CPbk2MigrationSupport::CPbk2MigrationSupport + ( CVPbkContactManager* aContactManager ) : + iContactManager( *aContactManager ) + { + } + +// -------------------------------------------------------------------------- +// CPbk2MigrationSupport::~CPbk2MigrationSupport +// -------------------------------------------------------------------------- +// +CPbk2MigrationSupport::~CPbk2MigrationSupport() + { + delete iIdConverter; + } + +// -------------------------------------------------------------------------- +// CPbk2MigrationSupport::NewL +// -------------------------------------------------------------------------- +// +CPbk2MigrationSupport* CPbk2MigrationSupport::NewL( TAny* aParam ) + { + __ASSERT_DEBUG( aParam, Panic( EPanicPreCond_NewL ) ); + + CVPbkContactManager* contactManager = + static_cast( aParam ); + + CPbk2MigrationSupport* self = + new ( ELeave ) CPbk2MigrationSupport( contactManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CPbk2MigrationSupport::ConstructL +// -------------------------------------------------------------------------- +// +inline void CPbk2MigrationSupport::ConstructL() + { + // Find Contacts Model store URI from the contact manager + TVPbkContactStoreUriPtr uri( VPbkContactStoreUris::DefaultCntDbUri() ); + MVPbkContactStore* defaultStore = + iContactManager.ContactStoresL().Find( uri ); + User::LeaveIfNull( defaultStore ); + iIdConverter = CVPbkContactIdConverter::NewL( *defaultStore ); + } + +// -------------------------------------------------------------------------- +// CPbk2MigrationSupport::ConvertViewStateL +// -------------------------------------------------------------------------- +// +void CPbk2MigrationSupport::ConvertViewStateL + ( const TDesC8& aCustomMessage, CPbk2ViewState& aViewState ) + { + CPbkViewState* viewState = CPbkViewState::NewLC( aCustomMessage ); + + // 1. Convert a contact id to a contact link for focus + // TContactItemId FocusedContactId() + // -> void SetFocusedContact( MVPbkContactLink* aContact ) + if ( viewState->FocusedContactId() != KNullContactId ) + { + MVPbkContactLink* focusIdLink = iIdConverter->IdentifierToLinkLC( + viewState->FocusedContactId() ); + aViewState.SetFocusedContact( focusIdLink ); + CleanupStack::Pop(); // focusIdLink + } + + // 2. Convert a contact id to contact link for top focus + // TContactItemId TopContactId() + // -> void SetTopContact( MVPbkContactLink* aTopContact ) + if ( viewState->TopContactId() != KNullContactId ) + { + MVPbkContactLink* topIdLink = iIdConverter->IdentifierToLinkLC( + viewState->TopContactId() ); + aViewState.SetFocusedContact( topIdLink ); + CleanupStack::Pop(); // topIdLink + } + + // 3. Convert a contact id to contact link for setting parent contact + // TContactItemId ParentContactId() + // -> void SetParentContact( MVPbkContactLink* aParentContact ) + if ( viewState->ParentContactId() != KNullContactId ) + { + MVPbkContactLink* parentIdLink = iIdConverter->IdentifierToLinkLC( + viewState->ParentContactId() ); + aViewState.SetFocusedContact( parentIdLink ); + CleanupStack::Pop(); // parentIdLink + } + + // 4. Convert a contact id array to contact link array + // for marking contacts + // CContactIdArray* MarkedContactIds() + // -> void SetMarkedContacts( MVPbkContactLinkArray* aArray ) + if (viewState->MarkedContactIds()) + { + CVPbkContactLinkArray* linkArray = CVPbkContactLinkArray::NewLC(); + CContactIdArray* ids = viewState->MarkedContactIds(); + for( TInt i = 0; i < ids->Count(); ++i ) + { + TContactItemId cid = ( *ids )[i]; + MVPbkContactLink* markedIdLink = + iIdConverter->IdentifierToLinkLC( cid ); + linkArray->AppendL( markedIdLink ); + CleanupStack::Pop(); // markedIdLink + } + aViewState.SetMarkedContacts( linkArray ); + CleanupStack::Pop(); // linkArray + } + + // 5. Convert a field index to a field index for focus + // TInt FocusedFieldIndex() + // -> void SetFocusedFieldIndex( TInt aIndex ) + aViewState.SetFocusedFieldIndex( viewState->FocusedFieldIndex() ); + + // 6. Convert a top index to a index for top focus + // TInt TopFieldIndex() + // -> void SetTopFieldIndex( TInt aIndex ) + aViewState.SetTopFieldIndex( viewState->TopFieldIndex() ); + + // 7. Convert flags to flags + // TUint Flags() + // -> void SetFlags( TUint aFlags ) + aViewState.SetFlags( viewState->Flags() ); + + CleanupStack::PopAndDestroy( viewState ); + } + +// End of File