phonebookui/Phonebook2/UIControls/src/CPbk2ReadingFieldEditorVisitor.cpp
changeset 0 e686773b3f54
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ReadingFieldEditorVisitor.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,171 @@
+/*
+* Copyright (c) 2002-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 editor reading field visitor.
+*
+*/
+
+
+#include "CPbk2ReadingFieldEditorVisitor.h"
+
+// Phonebook 2
+#include <MPbk2ContactEditorField.h>
+#include <CPbk2PresentationContactField.h>
+#include <Pbk2UIControls.rsg>
+
+// Virtual Phonebook
+#include <MVPbkFieldType.h>
+#include <MVPbkBaseContactField.h>
+#include <CVPbkContactManager.h>
+#include <CVPbkFieldTypeSelector.h>
+
+// System includes
+#include <AknReadingConverter.h>
+#include <barsread.h>
+
+// Debugging headers
+#include <Pbk2Debug.h>
+
+
+/// Unnamed namespace for local definitions
+namespace {
+
+/**
+ * Matches field type.
+ *
+ * @param aFieldTypeList    The field type list to use.
+ * @param aField            The field whose type to match.
+ * @return  Matched field type.
+ */
+const MVPbkFieldType* MatchFieldType
+        ( const MVPbkFieldTypeList& aFieldTypeList,
+          const MVPbkBaseContactField& aField )
+    {
+    const MVPbkFieldType* result = NULL;
+
+    for ( TInt matchPriority = 0; 
+          matchPriority <= aFieldTypeList.MaxMatchPriority() && !result;
+          ++matchPriority )
+        {
+        result = aField.MatchFieldType( matchPriority );
+        }
+
+    return result;
+    }
+
+/**
+ * Checks is the given field type included in
+ * the given selection.
+ *
+ * @param aField        The field whose type to check.
+ * @param aManager      Contact manager.
+ * @param aResourceId   Selector's resource id.
+ * @return  ETrue if field type is included.
+ */
+TBool IsFieldTypeIncludedL(
+        const MVPbkBaseContactField& aField,
+        const CVPbkContactManager& aManager,
+        const TInt aResourceId )
+    {
+    // Get the field type
+    const MVPbkFieldType* fieldType = MatchFieldType
+        ( aManager.FieldTypes(), aField );
+    
+    TResourceReader resReader;
+    CCoeEnv::Static()->CreateResourceReaderLC
+        ( resReader, aResourceId );
+    
+    CVPbkFieldTypeSelector* selector =
+        CVPbkFieldTypeSelector::NewL( resReader, aManager.FieldTypes() );
+    CleanupStack::PopAndDestroy(); // resReader
+
+    TBool ret = selector->IsFieldTypeIncluded( *fieldType );
+    delete selector;
+    return ret;
+    }
+
+} /// namespace
+
+
+// --------------------------------------------------------------------------
+// CPbk2ReadingFieldEditorVisitor::CPbk2ReadingFieldEditorVisitor
+// --------------------------------------------------------------------------
+//
+inline CPbk2ReadingFieldEditorVisitor::CPbk2ReadingFieldEditorVisitor
+        ( const CVPbkContactManager& aContactManager ):
+            iContactManager( aContactManager )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ReadingFieldEditorVisitor::~CPbk2ReadingFieldEditorVisitor
+// --------------------------------------------------------------------------
+//
+CPbk2ReadingFieldEditorVisitor::~CPbk2ReadingFieldEditorVisitor()
+    {
+    delete iFirstNameConverter;
+    delete iLastNameConverter;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ReadingFieldEditorVisitor::NewL
+// --------------------------------------------------------------------------
+//
+CPbk2ReadingFieldEditorVisitor* CPbk2ReadingFieldEditorVisitor::NewL
+        ( const CVPbkContactManager& aContactManager )
+    {
+    return new ( ELeave )
+        CPbk2ReadingFieldEditorVisitor( aContactManager );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ReadingFieldEditorVisitor::VisitL
+// --------------------------------------------------------------------------
+//
+void CPbk2ReadingFieldEditorVisitor::VisitL
+        ( MPbk2ContactEditorField& /* aThis */ )
+    {
+    }
+    
+// --------------------------------------------------------------------------
+// CPbk2ReadingFieldEditorVisitor::SetEditorsL
+// --------------------------------------------------------------------------
+//
+inline void CPbk2ReadingFieldEditorVisitor::SetEditorsL
+        ( MPbk2ContactEditorField& aThis )
+    {
+    const MVPbkStoreContactField& field = aThis.ContactField();
+    
+    if ( IsFieldTypeIncludedL( field, iContactManager,
+         R_PHONEBOOK2_LAST_NAME_SELECTOR ) )
+        {
+        iLastNameConverter->SetMainEditor( *aThis.Control() );
+        }
+    else if ( IsFieldTypeIncludedL( field, iContactManager,
+               R_PHONEBOOK2_FIRST_NAME_SELECTOR ) )
+        {
+        iFirstNameConverter->SetMainEditor( *aThis.Control() );
+        }
+    else if ( IsFieldTypeIncludedL( field, iContactManager,
+               R_PHONEBOOK2_LAST_NAME_PRONUNCIATION_SELECTOR ) )
+        {
+        iLastNameConverter->SetReadingEditor( *aThis.Control() );
+        }
+    else if ( IsFieldTypeIncludedL( field, iContactManager,
+               R_PHONEBOOK2_FIRST_NAME_PRONUNCIATION_SELECTOR ) )
+        {
+        iFirstNameConverter->SetReadingEditor( *aThis.Control() );
+        }
+    }
+
+// End of File