diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/CommonUI/src/CPbk2FieldFocusHelper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/CommonUI/src/CPbk2FieldFocusHelper.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,147 @@ +/* +* Copyright (c) 2006-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: Command helper class +* +*/ + + +#include "CPbk2FieldFocusHelper.h" + +// VirtualPhonebook +#include +#include + +// Phonebook2 +#include +#include +#include + +// ============================ MEMBER FUNCTIONS ============================ + +// -------------------------------------------------------------------------- +// CPbk2FieldFocusHelper::CPbk2FieldFocusHelper +// -------------------------------------------------------------------------- +// +inline CPbk2FieldFocusHelper::CPbk2FieldFocusHelper( + MPbk2ContactUiControl& aUiControl, + MPbk2FieldPropertyArray& aPropertyArray ): + iUiControl( aUiControl ), + iFieldProperties( aPropertyArray ), + iUiControlValid ( ETrue ) + { + } + +// -------------------------------------------------------------------------- +// CPbk2FieldFocusHelper::NewL +// -------------------------------------------------------------------------- +// +EXPORT_C CPbk2FieldFocusHelper* CPbk2FieldFocusHelper::NewL + ( MPbk2ContactUiControl& aUiControl, + MPbk2FieldPropertyArray& aPropertyArray ) + { + CPbk2FieldFocusHelper* self = + new ( ELeave ) CPbk2FieldFocusHelper( aUiControl, aPropertyArray ); + return self; + } + +// -------------------------------------------------------------------------- +// CPbk2FieldFocusHelper::~CPbk2FieldFocusHelper +// -------------------------------------------------------------------------- +// +CPbk2FieldFocusHelper::~CPbk2FieldFocusHelper() + { + delete iFocusedStoreCntField; + } + +// -------------------------------------------------------------------------- +// CPbk2FieldFocusHelper::SaveInitiallyFocusedFieldL +// -------------------------------------------------------------------------- +// +EXPORT_C void CPbk2FieldFocusHelper::SaveInitiallyFocusedFieldL + ( MVPbkStoreContact& aStoreContact ) + { + if ( iUiControlValid ) + { + iStoreContact = &aStoreContact; + iUiFieldIndex = iUiControl.FocusedFieldIndex(); + if ( iStoreContact && ( iUiFieldIndex != KErrNotFound ) ) + { + // This command is launched only from contact info view so there + // should be store contact + CPbk2PresentationContact* pCnt = + CPbk2PresentationContact::NewL + ( const_cast( *iStoreContact ), + iFieldProperties ); + CleanupStack::PushL( pCnt ); + TInt storeFieldIndex( + pCnt->PresentationFields().StoreIndexOfField( iUiFieldIndex ) ); + if ( storeFieldIndex != KErrNotFound ) + { + if ( iFocusedStoreCntField ) + { + delete iFocusedStoreCntField; + iFocusedStoreCntField = NULL; + } + iFocusedStoreCntField = iStoreContact->Fields().FieldAtLC + ( storeFieldIndex ); + CleanupStack::Pop(); // iFocusedStoreCntField + } + CleanupStack::PopAndDestroy(); // pCnt + } + } + } +// -------------------------------------------------------------------------- +// CPbk2FieldFocusHelper::RestoreSavedFieldL +// -------------------------------------------------------------------------- +// +EXPORT_C TInt CPbk2FieldFocusHelper::RestoreSavedFieldL() + { + TInt fieldIndex ( KErrNotFound ); + if ( iStoreContact && iUiControlValid ) + { + iUiControl.SetFocusedContactL( *iStoreContact ); + + if ( iFocusedStoreCntField ) + { + CPbk2PresentationContact* presentationCnt = + CPbk2PresentationContact::NewL + ( *iStoreContact, iFieldProperties ); + fieldIndex = presentationCnt->PresentationFields(). + FindFieldIndex( *iFocusedStoreCntField ); + delete presentationCnt; + presentationCnt = NULL; + + // If the field is added, focused index stays the same. + // If the field is removed and the focus is in the + // removed field, focus moves upwards by one. + if ( fieldIndex == KErrNotFound ) + { + fieldIndex = --iUiFieldIndex; + } + iUiControl.SetFocusedFieldIndex( fieldIndex ); + } + } + + return fieldIndex; + } + +// -------------------------------------------------------------------------- +// CPbk2FieldFocusHelper::SetUiControlValid +// -------------------------------------------------------------------------- +// +EXPORT_C void CPbk2FieldFocusHelper::SetUiControlValid( TBool aUiControlValid ) + { + iUiControlValid = aUiControlValid; + } +// End of file