phonebookui/Phonebook2/CommonUI/src/CPbk2FieldFocusHelper.cpp
changeset 0 e686773b3f54
--- /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