diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/ServerApplication/src/CPbk2AssignSingleProperty.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2AssignSingleProperty.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,205 @@ +/* +* 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 type selector for +* : single contact assign. +* +*/ + + +#include "CPbk2AssignSingleProperty.h" + +// Phonebook 2 +#include "Pbk2AssignValidateField.h" +#include "CPbk2ServerAppAppUi.h" +#include +#include +#include +#include +#include +#include + +// Virtual Phonebook +#include +#include +#include + + +/// Unnamed namespace for local definitions +namespace { + +const TInt KFirstElement = 0; + +enum TPanicCode + { + ENullPointer, + EInvalidParameter + }; + +void Panic(TPanicCode aReason) + { + _LIT(KPanicText, "CPbk2AssignSingleProperty"); + User::Panic(KPanicText,aReason); + } + +} /// namespace + + +// -------------------------------------------------------------------------- +// CPbk2AssignSingleProperty::CPbk2AssignSingleProperty +// -------------------------------------------------------------------------- +// +CPbk2AssignSingleProperty::CPbk2AssignSingleProperty + ( HBufC8& aSelector, TInt aResourceId, + MVPbkStoreContact& aStoreContact, + CVPbkContactManager& aContactManager ) : + CPbk2SelectFieldPropertyBase( aSelector, aResourceId ), + iFieldIndex( KErrNotSupported ), + iStoreContact( aStoreContact ), + iContactManager( aContactManager ) + { + } + +// -------------------------------------------------------------------------- +// CPbk2AssignSingleProperty::~CPbk2AssignSingleProperty +// -------------------------------------------------------------------------- +// +CPbk2AssignSingleProperty::~CPbk2AssignSingleProperty() + { + } + +// -------------------------------------------------------------------------- +// CPbk2AssignSingleProperty::NewL +// -------------------------------------------------------------------------- +// +CPbk2AssignSingleProperty* CPbk2AssignSingleProperty::NewL + ( HBufC8& aSelector, MVPbkStoreContact& aStoreContact, + CVPbkContactManager& aContactManager ) + { + CPbk2AssignSingleProperty* self = + new ( ELeave ) CPbk2AssignSingleProperty + ( aSelector, R_QTN_PHOB_QTL_ENTRY_ADD_TO, aStoreContact, + aContactManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CPbk2AssignSingleProperty::ConstructL +// -------------------------------------------------------------------------- +// +void CPbk2AssignSingleProperty::ConstructL() + { + BaseConstructL(); + } + +// -------------------------------------------------------------------------- +// CPbk2AssignSingleProperty::PrepareL +// -------------------------------------------------------------------------- +// +void CPbk2AssignSingleProperty::PrepareL() + { + // Create wrappers + CreateWrappersL( iStoreContact.ContactStore().StoreProperties().Uri() ); + + CPbk2ServerAppAppUi& appUi = static_cast + ( *CEikonEnv::Static()->EikAppUi() ); + + CPbk2PresentationContact* contact = CPbk2PresentationContact::NewL + ( iStoreContact, appUi.ApplicationServices().FieldProperties() ); + CleanupStack::PushL( contact ); + + // Go through all the wrappers and validate them + const TInt count( iWrappers.Count() ); + // Loop backwards + for ( TInt i( count - 1 ); i >= 0; --i ) + { + TPbk2AddItemWrapper wrapper = iWrappers[i]; + + // Check is the field type used in contact + iResult = Pbk2AssignValidateField::ValidateFieldTypeUsageInContactL + ( *contact, wrapper.PropertyAt( KFirstElement ).FieldType(), + iContactManager.FsSession(), iFieldIndex ); + + if ( iResult == KErrAlreadyExists && count > 1) + { + // Field type is already fully used so remove + // the corresponding wrapper. Do not do this if there + // is only one wrapper left. In that case the user is + // asked for replace confirmation. + iWrappers.Remove( i ); + } + else if ( iResult == KErrNotSupported && count > 1 ) + { + // Field type not supported, remove corresponding wrapper + iWrappers.Remove( i ); + } + } + + // If there is just one wrapper, the result is already correct, + // but in other cases update result according to wrapper count + if ( iWrappers.Count() == 0 ) + { + // No suitable wrappers -> field type is not + // supported by this contact + iResult = KErrNotSupported; + iFieldIndex = KErrNotSupported; + } + else if ( iWrappers.Count() > 1 ) + { + // Several wrappers exist + iResult = KErrNone; + } + + CleanupStack::PopAndDestroy( contact ); + } + +// -------------------------------------------------------------------------- +// CPbk2AssignSingleProperty::ExecuteL +// -------------------------------------------------------------------------- +// +TInt CPbk2AssignSingleProperty::ExecuteL() + { + __ASSERT_ALWAYS( iFieldProperties, Panic( ENullPointer ) ); + + // Display select field query + TInt index = ShowSelectFieldQueryL(); + + if ( index > KErrNotFound && iWrappers.Count() > 0 && + iWrappers.Count() > index ) + { + // Get selected field type + iSelectedFieldType = + &iWrappers[index].PropertyAt( KFirstElement ).FieldType(); + } + else if ( index == KErrCancel ) + { + // Cancel was pressed + iResult = KErrCancel; + } + + return iResult; + } + +// -------------------------------------------------------------------------- +// CPbk2AssignSingleProperty::SelectedFieldIndex +// -------------------------------------------------------------------------- +// +TInt CPbk2AssignSingleProperty::SelectedFieldIndex() const + { + return iFieldIndex; + } + +// End of File