diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/ServerApplication/src/CPbk2AssignMultiProperty.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2AssignMultiProperty.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,229 @@ +/* +* Copyright (c) 2005-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: Phonebook 2 contact field property selector +* : for multi contact assign. +* +*/ + + +#include "CPbk2AssignMultiProperty.h" + +// Phonebook 2 +#include "CPbk2ServerAppAppUi.h" +#include +#include +#include +#include +#include + +// Virtual Phonebook +#include +#include +#include +#include +#include +#include +#include + +// System includes +#include + +/// Unnamed namespace for local definitions +namespace { + +enum TPanicCode + { + ENullPointer, + EInvalidParameter + }; + +void Panic(TPanicCode aReason) + { + _LIT(KPanicText, "CPbk2AssignMultiProperty"); + User::Panic(KPanicText,aReason); + } + +} /// namespace + +// -------------------------------------------------------------------------- +// CPbk2AssignMultiProperty::CPbk2AssignMultiProperty +// -------------------------------------------------------------------------- +// +CPbk2AssignMultiProperty::CPbk2AssignMultiProperty + ( HBufC8& aSelector, TInt aResourceId, + MVPbkContactLinkArray& aMarkedEntries ) : + CPbk2SelectFieldPropertyBase( aSelector, aResourceId ), + iMarkedEntries( aMarkedEntries ) + { + } + +// -------------------------------------------------------------------------- +// CPbk2AssignMultiProperty::~CPbk2AssignMultiProperty +// -------------------------------------------------------------------------- +// +CPbk2AssignMultiProperty::~CPbk2AssignMultiProperty() + { + } + +// -------------------------------------------------------------------------- +// CPbk2AssignMultiProperty::NewL +// -------------------------------------------------------------------------- +// +CPbk2AssignMultiProperty* CPbk2AssignMultiProperty::NewL + ( HBufC8& aSelector, MVPbkContactLinkArray& aMarkedEntries ) + { + CPbk2AssignMultiProperty* self = new ( ELeave ) CPbk2AssignMultiProperty + ( aSelector, R_QTN_PHOB_QTL_ENTRY_ADD_TO, aMarkedEntries ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CPbk2AssignMultiProperty::ConstructL +// -------------------------------------------------------------------------- +// +void CPbk2AssignMultiProperty::ConstructL() + { + BaseConstructL(); + } + +// -------------------------------------------------------------------------- +// CPbk2AssignMultiProperty::PrepareL +// -------------------------------------------------------------------------- +// +void CPbk2AssignMultiProperty::PrepareL() + { + __ASSERT_ALWAYS( iMarkedEntries.Count() > 0, + Panic( EInvalidParameter ) ); + + if ( AreAllContactsFromSameStore( iMarkedEntries ) ) + { + TVPbkContactStoreUriPtr uriPtr = + iMarkedEntries.At( 0 ).ContactStore().StoreProperties().Uri(); + CPbk2SelectFieldPropertyBase::CreateWrappersL( uriPtr ); + if ( iWrappers.Count() <= 0 ) + { + CreateWrappersFromCntDbL(); + } + } + else + { + CreateWrappersFromCntDbL(); + } + } + +// -------------------------------------------------------------------------- +// CPbk2AssignMultiProperty::ExecuteL +// -------------------------------------------------------------------------- +// +TInt CPbk2AssignMultiProperty::ExecuteL() + { + __ASSERT_ALWAYS( iFieldProperties, Panic( ENullPointer ) ); + + TInt result = ShowSelectFieldQueryL(); + + if ( result > KErrNotFound && + iWrappers.Count() > 0 && + iWrappers.Count() > result ) + { + iSelectedFieldType = &iWrappers[result].PropertyAt( 0 ).FieldType(); + } + + return result; + } + +// -------------------------------------------------------------------------- +// CPbk2AssignMultiProperty::SelectedFieldIndex +// -------------------------------------------------------------------------- +// +TInt CPbk2AssignMultiProperty::SelectedFieldIndex() const + { + return KErrNotSupported; + } + +// -------------------------------------------------------------------------- +// CPbk2AssignMultiProperty::AreAllContactsFromSameStore +// -------------------------------------------------------------------------- +// +TBool CPbk2AssignMultiProperty::AreAllContactsFromSameStore + ( MVPbkContactLinkArray& aMarkedEntries ) + { + TBool ret = ETrue; + + const TInt count( aMarkedEntries.Count() ); + if ( count > 1 ) + { + // Take the first URI from array + TVPbkContactStoreUriPtr uriPtr = + aMarkedEntries.At( 0 ).ContactStore().StoreProperties().Uri(); + for ( TInt i(1); i < count; ++i ) + { + TVPbkContactStoreUriPtr nextUriPtr = + aMarkedEntries.At( i ).ContactStore(). + StoreProperties().Uri(); + if ( uriPtr.Compare( nextUriPtr, + TVPbkContactStoreUriPtr::EContactStoreUriAllComponents ) + != 0 ) + { + ret = EFalse; + break; + } + } + } + + return ret; + } + +// -------------------------------------------------------------------------- +// CPbk2AssignMultiProperty::CreateWrappersFromCntDbL +// -------------------------------------------------------------------------- +// +void CPbk2AssignMultiProperty::CreateWrappersFromCntDbL() + { + TResourceReader reader; + reader.SetBuffer( &iSelector ); + + // Default saving store + CPbk2ServerAppAppUi& appUi = static_cast + ( *CEikonEnv::Static()->EikAppUi() ); + MVPbkContactStore* store = + appUi.ApplicationServices().ContactManager().ContactStoresL().Find + ( VPbkContactStoreUris::DefaultCntDbUri() ); + + CVPbkFieldTypeSelector* selector = + CVPbkFieldTypeSelector::NewL( reader, + appUi.ApplicationServices().ContactManager().FieldTypes() ); + + CleanupStack::PushL( selector ); + + CreateFieldPropertiesArrayL( *store ); + + const TInt count( iFieldProperties->Count() ); + for ( TInt i = 0; i < count; ++i ) + { + const MPbk2FieldProperty& property = + iFieldProperties->At( i ); + if ( selector->IsFieldTypeIncluded( property.FieldType() ) ) + { + TPbk2AddItemWrapper wrapper( property ); + iWrappers.Append( wrapper ); + } + } + CleanupStack::PopAndDestroy( selector ); + } + +// End of File +