phonebookui/Phonebook2/ServerApplication/src/CPbk2AssignMultiProperty.cpp
changeset 0 e686773b3f54
child 68 9da50d567e3c
--- /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
+