diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookui/Phonebook2/ServerApplication/src/CPbk2SelectFieldPropertyBase.cpp --- /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 +#include +#include +#include +#include +#include + +// Virtual Phonebook +#include +#include +#include +#include +#include + +// System includes +#include +#include + + +// -------------------------------------------------------------------------- +// 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 + ( *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 + ( *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( + const_cast( 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