--- /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 <MVPbkStoreContactField.h>
+#include <MVPbkStoreContact.h>
+
+// Phonebook2
+#include <MPbk2ContactUiControl.h>
+#include <CPbk2PresentationContact.h>
+#include <CPbk2PresentationContactFieldCollection.h>
+
+// ============================ 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<MVPbkStoreContact&>( *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