--- /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 <Pbk2ServerApp.rsg>
+#include <MPbk2FieldProperty.h>
+#include <TPbk2AddItemWrapper.h>
+#include <CPbk2FieldPropertyArray.h>
+#include <MPbk2ApplicationServices.h>
+
+// Virtual Phonebook
+#include <CVPbkContactManager.h>
+#include <MVPbkContactLink.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreList.h>
+#include <MVPbkContactStoreProperties.h>
+#include <VPbkContactStoreUris.h>
+#include <CVPbkFieldTypeSelector.h>
+
+// System includes
+#include <barsread.h>
+
+/// 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<CPbk2ServerAppAppUi&>
+ ( *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
+