--- /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