phonebookui/Phonebook2/Presentation/src/Pbk2ContactNameFormatterFactory.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/Presentation/src/Pbk2ContactNameFormatterFactory.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,169 @@
+/*
+* 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: 
+*     Name formatter factory.
+*
+*/
+
+
+#include "Pbk2ContactNameFormatterFactory.h"
+
+// From Phonebook2
+#include "Pbk2DataCaging.hrh"
+#include "CPbk2ContactNameFormatter.h"
+#include "CPbk2JapaneseContactNameFormatter.h"
+#include "CPbk2ChineseContactNameFormatter.h"
+#include "Pbk2PresentationUtils.h"
+#include <RPbk2LocalizedResourceFile.h>
+#include <Pbk2Presentation.rsg>
+
+// From Virtual Phonebook
+#include <CVPbkFieldTypeSelector.h>
+
+// System includes
+#include <barsread.h>
+#include <featmgr.h>
+
+namespace {
+
+MPbk2ContactNameFormatter* CreateFormatterL(
+        const MVPbkFieldTypeList& aMasterFieldTypeList,
+        const CPbk2SortOrderManager& aSortOrderManager,
+        CVPbkFieldTypeSelector* aTitleFieldSelector,
+        const TDesC& aUnnamedText )
+    {
+    MPbk2ContactNameFormatter* result = NULL;
+    
+    FeatureManager::InitializeLibL();
+    TBool chinese = FeatureManager::FeatureSupported( KFeatureIdChinese );
+    FeatureManager::UnInitializeLib();
+    
+    if ( chinese )
+        {                
+        result = CPbk2ChineseContactNameFormatter::NewL( aUnnamedText, 
+            aMasterFieldTypeList, aSortOrderManager, aTitleFieldSelector );
+        }
+    else
+        {
+        result = CPbk2ContactNameFormatter::NewL( aUnnamedText, 
+            aMasterFieldTypeList, aSortOrderManager, aTitleFieldSelector );
+        }
+    
+    
+    return result;
+    }
+
+MPbk2ContactNameFormatter* CreateFormatterL(
+        const MVPbkFieldTypeList& aMasterFieldTypeList,
+        const CPbk2SortOrderManager& aSortOrderManager,
+        TResourceReader* aTitleFieldSelectorReader,
+        const TDesC* aUnnamedText,
+        RFs* aRFs )
+    {
+    RFs ownFs;
+    RFs fs;
+    
+    if ( !aRFs )
+        {
+        User::LeaveIfError( ownFs.Connect() );
+        CleanupClosePushL( ownFs );
+        fs = ownFs;
+        }
+    else
+        {
+        fs = *aRFs;
+        }
+        
+    RPbk2LocalizedResourceFile resFile( &fs );
+    resFile.OpenLC( KPbk2RomFileDrive, 
+        KDC_RESOURCE_FILES_DIR, 
+        Pbk2PresentationUtils::PresentationResourceFile() );
+        
+    CVPbkFieldTypeSelector* titleFieldSelector = NULL;
+    
+    HBufC* unnamed = NULL;
+    if ( !aUnnamedText )
+        {
+        TResourceReader reader;
+        reader.SetBuffer( resFile.AllocReadLC( R_QTN_PHOB_UNNAMED ) );
+        unnamed = reader.ReadHBufCL();
+        CleanupStack::PopAndDestroy(); // reader
+        CleanupStack::PushL( unnamed );
+        }
+    else
+        {
+        unnamed = aUnnamedText->AllocLC();
+        }
+    
+    if ( !aTitleFieldSelectorReader )
+        {
+        // Use default title fields
+        TResourceReader reader;
+        reader.SetBuffer( resFile.AllocReadLC( R_TITLE_FIELD_SELECTOR ) );
+        titleFieldSelector =
+            CVPbkFieldTypeSelector::NewL( reader, aMasterFieldTypeList );
+        CleanupStack::PopAndDestroy(); // reader
+        }
+    else
+        {
+        titleFieldSelector = CVPbkFieldTypeSelector::NewL(
+            *aTitleFieldSelectorReader, aMasterFieldTypeList );
+        }
+    CleanupStack::PushL( titleFieldSelector );
+    
+    // Ownership of titleFieldSelector changes
+    MPbk2ContactNameFormatter* result = CreateFormatterL( aMasterFieldTypeList,
+        aSortOrderManager, titleFieldSelector, *unnamed );
+        
+    CleanupStack::Pop( titleFieldSelector );
+    CleanupStack::PopAndDestroy(2); // resFile, unnamed
+    if ( ownFs.Handle() )
+        {
+        CleanupStack::PopAndDestroy(); // ownFs
+        }
+    
+    return result;    
+    }
+}
+
+                
+EXPORT_C MPbk2ContactNameFormatter* Pbk2ContactNameFormatterFactory::CreateL
+        ( const MVPbkFieldTypeList& aMasterFieldTypeList, 
+        const CPbk2SortOrderManager& aSortOrderManager, 
+        RFs* aRFs )
+    {
+    return CreateFormatterL( aMasterFieldTypeList, aSortOrderManager, 
+        NULL, NULL, aRFs );
+	}
+
+EXPORT_C MPbk2ContactNameFormatter* Pbk2ContactNameFormatterFactory::CreateL
+        ( const TDesC& aUnnamedText,
+        const MVPbkFieldTypeList& aMasterFieldTypeList, 
+        const CPbk2SortOrderManager& aSortOrderManager, 
+        RFs* aRFs )
+    {
+    return CreateFormatterL( aMasterFieldTypeList, aSortOrderManager, 
+        NULL, &aUnnamedText, aRFs );
+    }
+
+EXPORT_C MPbk2ContactNameFormatter* Pbk2ContactNameFormatterFactory::CreateL
+        ( const MVPbkFieldTypeList& aMasterFieldTypeList, 
+        const CPbk2SortOrderManager& aSortOrderManager,
+        TResourceReader& aTitleFieldSelectorReader,
+        const TDesC* aUnnamedText, 
+        RFs* aRFs )
+    {
+    return CreateFormatterL( aMasterFieldTypeList, aSortOrderManager, 
+        &aTitleFieldSelectorReader, aUnnamedText, aRFs );
+	}