--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2SelectFieldPropertyBase.cpp Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,204 @@
+/*
+* 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 base.
+*
+*/
+
+
+#include "CPbk2SelectFieldPropertyBase.h"
+
+// Phonebook 2
+#include "CPbk2ServerAppAppUi.h"
+#include <CPbk2FieldPropertyArray.h>
+#include <MPbk2FieldProperty.h>
+#include <MPbk2FieldProperty2.h>
+#include <CPbk2AddItemToContactDlg.h>
+#include <TPbk2AddItemWrapper.h>
+#include <MPbk2ApplicationServices.h>
+
+// Virtual Phonebook
+#include <CVPbkContactManager.h>
+#include <CVPbkFieldTypeSelector.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreList.h>
+#include <MVPbkContactStoreProperties.h>
+
+// System includes
+#include <barsread.h>
+#include <aknnotewrappers.h>
+
+
+// --------------------------------------------------------------------------
+// CPbk2SelectFieldPropertyBase::CPbk2SelectFieldPropertyBase
+// --------------------------------------------------------------------------
+//
+CPbk2SelectFieldPropertyBase::CPbk2SelectFieldPropertyBase
+ ( HBufC8& aSelector, TInt aResourceId ) :
+ iSelector( aSelector ),
+ iDialogTitleResourceId( aResourceId )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2SelectFieldPropertyBase::~CPbk2SelectFieldPropertyBase
+// --------------------------------------------------------------------------
+//
+CPbk2SelectFieldPropertyBase::~CPbk2SelectFieldPropertyBase()
+ {
+ iWrappers.Close();
+
+ if ( iAddItemDlgEliminator )
+ {
+ iAddItemDlgEliminator->ForceExit();
+ }
+
+ delete iFieldProperties;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2SelectFieldPropertyBase::BaseConstructL
+// --------------------------------------------------------------------------
+//
+void CPbk2SelectFieldPropertyBase::BaseConstructL()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2SelectFieldPropertyBase::SelectedFieldType
+// --------------------------------------------------------------------------
+//
+const MVPbkFieldType*
+ CPbk2SelectFieldPropertyBase::SelectedFieldType() const
+ {
+ return iSelectedFieldType;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2SelectFieldPropertyBase::Cancel
+// --------------------------------------------------------------------------
+//
+void CPbk2SelectFieldPropertyBase::Cancel( TInt aCommandId )
+ {
+ if ( iAddItemDlgEliminator )
+ {
+ TRAPD( err, iAddItemDlgEliminator->RequestExitL( aCommandId ) );
+ if ( err != KErrNone && iAddItemDlgEliminator )
+ {
+ // Use force if necessary
+ iAddItemDlgEliminator->ForceExit();
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2SelectFieldPropertyBase::CreateFieldPropertiesArrayL
+// --------------------------------------------------------------------------
+//
+void CPbk2SelectFieldPropertyBase::CreateFieldPropertiesArrayL
+ ( MVPbkContactStore& aStore )
+ {
+ CPbk2ServerAppAppUi& appUi = static_cast<CPbk2ServerAppAppUi&>
+ ( *CEikonEnv::Static()->EikAppUi() );
+
+ CPbk2FieldPropertyArray* temp = CPbk2FieldPropertyArray::NewL
+ ( aStore.StoreProperties().SupportedFields(),
+ appUi.ApplicationServices().ContactManager().FsSession() );
+
+ delete iFieldProperties;
+ iFieldProperties = temp;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2SelectFieldPropertyBase::CreateWrappersL
+// --------------------------------------------------------------------------
+//
+void CPbk2SelectFieldPropertyBase::CreateWrappersL
+ ( TVPbkContactStoreUriPtr aStoreUri )
+ {
+ TResourceReader reader;
+ reader.SetBuffer( &iSelector );
+
+ // Default saving store
+ CPbk2ServerAppAppUi& appUi = static_cast<CPbk2ServerAppAppUi&>
+ ( *CEikonEnv::Static()->EikAppUi() );
+ MVPbkContactStore* store =
+ appUi.ApplicationServices().ContactManager().ContactStoresL().
+ Find( aStoreUri );
+
+ CVPbkFieldTypeSelector* selector =
+ CVPbkFieldTypeSelector::NewL( reader,
+ store->StoreProperties().SupportedFields() );
+ CleanupStack::PushL( selector );
+
+ CreateFieldPropertiesArrayL( *store );
+
+ const TInt count( iFieldProperties->Count() );
+ for ( TInt i = 0; i < count; ++i )
+ {
+ const MPbk2FieldProperty& property =
+ iFieldProperties->At( i );
+
+ MPbk2FieldProperty2* fieldPropertyExtension =
+ reinterpret_cast<MPbk2FieldProperty2*>(
+ const_cast<MPbk2FieldProperty&>( property ).
+ FieldPropertyExtension(
+ KMPbk2FieldPropertyExtension2Uid ) );
+
+ if ( fieldPropertyExtension != NULL )
+ {
+ if ( !fieldPropertyExtension->XSpName().Length() &&
+ selector->IsFieldTypeIncluded( property.FieldType() ) )
+ {
+ TPbk2AddItemWrapper wrapper( property );
+ iWrappers.Append( wrapper );
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy( selector );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2SelectFieldPropertyBase::ShowSelectFieldQueryL
+// --------------------------------------------------------------------------
+//
+TInt CPbk2SelectFieldPropertyBase::ShowSelectFieldQueryL()
+ {
+ TInt result( KErrNotSupported );
+
+ // Show select field query
+ if ( iWrappers.Count() > 1 )
+ {
+ HBufC* titleBuf =
+ CCoeEnv::Static()->AllocReadResourceLC( iDialogTitleResourceId );
+
+ TPbk2AddItemDialogParams params
+ ( titleBuf, R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT,
+ KErrNotFound );
+
+ CPbk2AddItemToContactDlg* addItemDlg =
+ CPbk2AddItemToContactDlg::NewL();
+ iAddItemDlgEliminator = addItemDlg;
+ iAddItemDlgEliminator->ResetWhenDestroyed
+ ( &iAddItemDlgEliminator );
+ result = addItemDlg->ExecuteLD( iWrappers, ¶ms );
+ CleanupStack::PopAndDestroy( titleBuf );
+ }
+ else if ( iWrappers.Count() == 1 )
+ {
+ result = KErrNone;
+ }
+ return result;
+ }
+
+// End of File