phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherheadertextorder.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherheadertextorder.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,982 @@
+/*
+* Copyright (c) 2008-2008 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:  Implementation of the class which takes care of placing the correct texts in the header
+*
+*/
+
+#include "ccappcommlauncherheaders.h"
+#include "cmscontact.h"
+#include <Pbk2PresentationUtils.h>
+#include <Pbk2Presentation.rsg>
+#include <RPbk2LocalizedResourceFile.h>
+#include <Pbk2DataCaging.hrh>
+
+const TInt KContactTypeNotSet = -1;
+
+namespace {
+
+/// These enumerations must have same values as in the specification
+/// and in the qtn_phob_name_order. These are different compared to
+/// TPbk2NameOrderInCenRep because TPbk2NameOrderInCenRep values
+/// must be same as in old PbkEng TPbkNameOrder to keep data compatibility
+/// of the CenRep.
+enum TPbk2NameOrderInUiSpecification
+    {
+    EPbk2UiSpecFirstNameLastName,
+    EPbk2UiSpecLastNameFirstName
+    };
+
+#ifdef _DEBUG
+
+enum TPanicCode
+    {
+    EPanicInvalidNameConfiguration
+    };
+
+void Panic(TPanicCode aReason)
+    {
+    _LIT(KPanicText, "CPbk2SortOrderManagerImpl");
+    User::Panic(KPanicText,aReason);
+    }
+
+#endif // _DEBUG
+
+/**
+ * Gets a digit from a descriptor.
+ *
+ * @param aReaderToBuf  Resource reader pointed to a descriptor resource.
+ * @return  The digit.
+ */
+TInt GetDigitFromDescriptorL( TResourceReader& aReaderToBuf )
+    {
+    HBufC* orderBuf = aReaderToBuf.ReadHBufCL();
+    CleanupStack::PushL( orderBuf );
+
+    // The setting should be 1 digit
+    __ASSERT_DEBUG( orderBuf->Length() == 1,
+        Panic( EPanicInvalidNameConfiguration ) );
+
+    TInt result = KErrNotFound;
+    TPtrC ptr( orderBuf->Des() );
+    if ( ptr.Length() > 0 && TChar(ptr[0]).IsDigit() )
+        {
+        result = TChar(ptr[0]).GetNumericValue();
+        }
+
+    CleanupStack::PopAndDestroy( orderBuf );
+    return result;
+    }
+} // namespace
+
+// ---------------------------------------------------------------------------
+// NewL, two-phase construction
+// ---------------------------------------------------------------------------
+//
+CCCAppCommLauncherHeaderTextOrder* CCCAppCommLauncherHeaderTextOrder::NewL()
+    {
+    CCCAppCommLauncherHeaderTextOrder* self= new (ELeave) CCCAppCommLauncherHeaderTextOrder();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ (first phase) constructor
+// ---------------------------------------------------------------------------
+//
+CCCAppCommLauncherHeaderTextOrder::CCCAppCommLauncherHeaderTextOrder()
+    {
+    for (TInt i=0; i < KCCAppCommLauncherHeaderTextOrderLastField - KCCAppCommLauncherHeaderTextOrderFirstField + 1; i++)
+        {
+        iGroupPriorities[i] = NULL;
+        iIndividualPriorities[i] = NULL;
+        }
+    
+    // Group 8
+    SetPriority(CCmsContactFieldItem::ECmsImpp, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsUrlGeneric, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsUrlHome, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsUrlWork, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsSipAddress, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsEmailGeneric, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsEmailHome, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsEmailWork, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsMobilePhoneGeneric, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsMobilePhoneHome, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsMobilePhoneWork, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsLandPhoneGeneric, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsLandPhoneHome, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsLandPhoneWork, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsVideoNumberGeneric, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsVideoNumberHome, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsVideoNumberWork, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsAssistantNumber, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsCarPhone, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsPagerNumber, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsPushToTalk, ETrue, 1);
+    SetPriority(CCmsContactFieldItem::ECmsShareView, ETrue, 1);
+    
+    SetPriority(CCmsContactFieldItem::ECmsVoipNumberGeneric, ETrue, 1);
+		
+    SetPriority(CCmsContactFieldItem::ECmsImpp, EFalse, 1);
+
+    SetPriority(CCmsContactFieldItem::ECmsUrlWork, EFalse, 2);
+    SetPriority(CCmsContactFieldItem::ECmsUrlHome, EFalse, 3);
+    SetPriority(CCmsContactFieldItem::ECmsUrlGeneric, EFalse, 4);
+    
+    SetPriority(CCmsContactFieldItem::ECmsSipAddress, EFalse, 5);
+    SetPriority(CCmsContactFieldItem::ECmsShareView, EFalse, 6);
+    SetPriority(CCmsContactFieldItem::ECmsPushToTalk, EFalse, 7);
+        
+    SetPriority(CCmsContactFieldItem::ECmsEmailWork, EFalse, 8);
+    SetPriority(CCmsContactFieldItem::ECmsEmailHome, EFalse, 9);
+    SetPriority(CCmsContactFieldItem::ECmsEmailGeneric, EFalse, 10);
+    
+    SetPriority(CCmsContactFieldItem::ECmsAssistantNumber, EFalse, 11);
+    SetPriority(CCmsContactFieldItem::ECmsPagerNumber, EFalse, 12);
+    SetPriority(CCmsContactFieldItem::ECmsVideoNumberWork, EFalse, 13);
+    SetPriority(CCmsContactFieldItem::ECmsVideoNumberHome, EFalse, 14);
+    SetPriority(CCmsContactFieldItem::ECmsVideoNumberGeneric, EFalse, 15);
+    SetPriority(CCmsContactFieldItem::ECmsCarPhone, EFalse, 16);
+    SetPriority(CCmsContactFieldItem::ECmsLandPhoneWork, EFalse, 17);
+    SetPriority(CCmsContactFieldItem::ECmsLandPhoneHome, EFalse, 18);
+    SetPriority(CCmsContactFieldItem::ECmsLandPhoneGeneric, EFalse, 19);
+    SetPriority(CCmsContactFieldItem::ECmsMobilePhoneWork, EFalse, 20);
+    SetPriority(CCmsContactFieldItem::ECmsMobilePhoneHome, EFalse, 21);
+    SetPriority(CCmsContactFieldItem::ECmsMobilePhoneGeneric, EFalse, 22);
+    
+    
+    // Group 7
+    SetPriority(CCmsContactFieldItem::ECmsLastName, ETrue, 2);
+    SetPriority(CCmsContactFieldItem::ECmsMiddleName, ETrue, 2);
+    SetPriority(CCmsContactFieldItem::ECmsFirstName, ETrue, 2);
+    
+    SetPriority(CCmsContactFieldItem::ECmsLastName, EFalse, 1);
+    SetPriority(CCmsContactFieldItem::ECmsMiddleName, EFalse, 2);
+    SetPriority(CCmsContactFieldItem::ECmsFirstName, EFalse, 3);
+    
+    
+    // Group 6
+    SetPriority(CCmsContactFieldItem::ECmsAddrCountryGeneric, ETrue, 3);
+    SetPriority(CCmsContactFieldItem::ECmsAddrRegionGeneric, ETrue, 3);
+    SetPriority(CCmsContactFieldItem::ECmsAddrLocalGeneric, ETrue, 3);
+    SetPriority(CCmsContactFieldItem::ECmsAddrStreetGeneric, ETrue, 3);
+    
+    SetPriority(CCmsContactFieldItem::ECmsAddrCountryGeneric, EFalse, 1);
+    SetPriority(CCmsContactFieldItem::ECmsAddrRegionGeneric, EFalse, 2);
+    SetPriority(CCmsContactFieldItem::ECmsAddrLocalGeneric, EFalse, 3);
+    SetPriority(CCmsContactFieldItem::ECmsAddrStreetGeneric, EFalse, 4);
+    
+    
+    // Group 5
+    SetPriority(CCmsContactFieldItem::ECmsAddrCountryWork, ETrue, 4);
+    SetPriority(CCmsContactFieldItem::ECmsAddrRegionWork, ETrue, 4);
+    SetPriority(CCmsContactFieldItem::ECmsAddrLocalWork, ETrue, 4);
+    SetPriority(CCmsContactFieldItem::ECmsAddrStreetWork, ETrue, 4);
+       
+    SetPriority(CCmsContactFieldItem::ECmsAddrCountryWork, EFalse, 1);
+    SetPriority(CCmsContactFieldItem::ECmsAddrRegionWork, EFalse, 2);
+    SetPriority(CCmsContactFieldItem::ECmsAddrLocalWork, EFalse, 3);
+    SetPriority(CCmsContactFieldItem::ECmsAddrStreetWork, EFalse, 4);
+
+    
+    // Group 4
+    SetPriority(CCmsContactFieldItem::ECmsAddrCountryHome, ETrue, 5);
+    SetPriority(CCmsContactFieldItem::ECmsAddrRegionHome, ETrue, 5);
+    SetPriority(CCmsContactFieldItem::ECmsAddrLocalHome, ETrue, 5);
+    SetPriority(CCmsContactFieldItem::ECmsAddrStreetHome, ETrue, 5);
+    
+    SetPriority(CCmsContactFieldItem::ECmsAddrCountryHome, EFalse, 1);
+    SetPriority(CCmsContactFieldItem::ECmsAddrRegionHome, EFalse, 2);
+    SetPriority(CCmsContactFieldItem::ECmsAddrLocalHome, EFalse, 3);
+    SetPriority(CCmsContactFieldItem::ECmsAddrStreetHome, EFalse, 4);
+    
+    
+    // Group 3 (prio 6)
+    SetPriority(CCmsContactFieldItem::ECmsDepartment, ETrue, 6);
+    SetPriority(CCmsContactFieldItem::ECmsCompanyName, ETrue, 6);
+    SetPriority(CCmsContactFieldItem::ECmsJobTitle, ETrue, 6);
+    SetPriority(CCmsContactFieldItem::ECmsNickname, ETrue, 6);
+ 
+    SetPriority(CCmsContactFieldItem::ECmsDepartment, EFalse, 1);
+    SetPriority(CCmsContactFieldItem::ECmsCompanyName, EFalse, 2);
+    SetPriority(CCmsContactFieldItem::ECmsJobTitle, EFalse, 3);
+    SetPriority(CCmsContactFieldItem::ECmsNickname, EFalse, 4);
+    
+    
+    // Group 1 (prio 7)
+    SetPriority(CCmsContactFieldItem::ECmsNote, ETrue, 7);
+    
+    SetPriority(CCmsContactFieldItem::ECmsNote, EFalse, 1);
+    
+    }
+
+// ---------------------------------------------------------------------------
+// Helper function for reading a descriptor from repository
+// ---------------------------------------------------------------------------
+//
+HBufC* GetStringFromRepoLC(CRepository* aRepository, TUint32 aKey)
+    {
+    HBufC* prioStr = HBufC::NewLC(NCentralRepositoryConstants::KMaxUnicodeStringLength);
+    TInt trueLength = 0;
+    TPtr ptr = prioStr->Des();
+    TInt error = aRepository->Get(aKey, ptr, trueLength);
+    if (error == KErrOverflow)
+        {
+        CleanupStack::PopAndDestroy(prioStr);
+        prioStr =  HBufC::NewLC(trueLength);
+        User::LeaveIfError(aRepository->Get(aKey, ptr));
+        }
+    else if (error != KErrNone)
+        {
+#ifdef _DEBUG 
+        CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherHeaderTextOrder::getStringFromRepoLC - Header text priority variation error (repository field)"));   
+        CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherHeaderTextOrder::getStringFromRepoLC - err: %d"), error );
+        CEikonEnv::Static()->InfoMsg(_L("Header text priority variation error. See logs."));
+#endif//_DEBUG
+        CleanupStack::PopAndDestroy(prioStr);
+        return 0;
+        }
+    return prioStr;
+    }
+
+// ---------------------------------------------------------------------------
+// ConstructL, second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherHeaderTextOrder::ConstructL()
+    {
+    for (TInt i = 0; i < KCCAppCommLauncherHeaderTextOrderLineCount; i++)
+        {
+        iHeaderRows.AppendL(0);
+        iHeaderRowsClipped.AppendL(0);
+        iHeaderTypes[i] = KContactTypeNotSet;
+        }
+    
+    CRepository* prioOrderRepo = CRepository::NewLC(KCRUidCCACommLauncher);
+    HBufC* prioStr = 0;
+    
+    HBufC* prioStr1 = GetStringFromRepoLC(prioOrderRepo, KHeaderGroupPriorities);
+    User::LeaveIfNull(prioStr1);
+        
+    HBufC* prioStr2 = GetStringFromRepoLC(prioOrderRepo, KHeaderGroupPriorities2);
+    if (prioStr2)
+        {
+        prioStr = HBufC::NewL(prioStr1->Length() + prioStr2->Length());
+        prioStr->Des().Append(*prioStr1);
+        prioStr->Des().Append(*prioStr2);
+        CleanupStack::PopAndDestroy(prioStr2);
+        CleanupStack::PopAndDestroy(prioStr1);
+        CleanupStack::PushL(prioStr);
+        }
+    else
+        {
+        prioStr = prioStr1;
+        }
+    
+    
+    TLex groupPrioLex(*prioStr);
+    while (groupPrioLex.Offset() < prioStr->Length() - 1)
+        {
+        TPtrC nameToken = groupPrioLex.NextToken();
+        CCmsContactFieldItem::TCmsContactField type;
+        if (MapStringToContactField(nameToken, type) == KErrNone)
+            {
+            TPtrC numToken = groupPrioLex.NextToken();
+            TPtrC numToken2 = groupPrioLex.NextToken();
+            TLex groupPrioNumLex(numToken);
+            TLex individualPrioNumLex(numToken2);
+            TInt priority = 0;
+            if (groupPrioNumLex.Val(priority) == KErrNone)
+                {
+                SetPriority(type, ETrue, priority);
+                }
+#ifdef _DEBUG_
+            else
+                {
+                CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherHeaderTextOrder::ConstructL - Priority value is not a number: %S"), &numToken );
+                CEikonEnv::Static()->InfoMsg(_L("Header text priority variation error. See logs."));
+                }
+#endif //_DEBUG_
+            if (individualPrioNumLex.Val(priority) == KErrNone)
+                {
+                SetPriority(type, EFalse, priority);
+                }
+#ifdef _DEBUG_
+            else
+                {
+                CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherHeaderTextOrder::ConstructL - Priority value is not a number: %S"), &numToken );
+                CEikonEnv::Static()->InfoMsg(_L("Header text priority variation error. See logs."));
+                }
+#endif //_DEBUG_
+            }
+#ifdef _DEBUG 
+        else
+            {
+            CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherHeaderTextOrder::ConstructL - Header text priority variation, field name not recognized)"));   
+            CCA_DP(KCommLauncherLogFile, CCA_L("CCCAppCommLauncherHeaderTextOrder::ConstructL - field name: %S"), &nameToken );
+            }
+#endif //_DEBUG
+        }
+    CleanupStack::PopAndDestroy(prioStr);
+    
+    CleanupStack::PopAndDestroy(prioOrderRepo);
+    
+    // Open resource file for reading language specific default values
+    RPbk2LocalizedResourceFile resFile;
+    resFile.OpenLC( KPbk2RomFileDrive,
+        KDC_RESOURCE_FILES_DIR, 
+        Pbk2PresentationUtils::PresentationResourceFile() );
+    
+    // Read the name order value from the resource file
+    TResourceReader reader;
+    reader.SetBuffer( resFile.AllocReadLC( R_QTN_PHOB_NAME_ORDER ) );
+    TInt orderInResFile = GetDigitFromDescriptorL( reader );
+    CleanupStack::PopAndDestroy(); // reader
+    
+    CleanupStack::PopAndDestroy(); // resFile
+    
+    // Converting from TPbk2NameOrderInUiSpecification to TPbk2NameOrderInCenRep
+    TInt orderInCenRep = EPbk2CenRepNameOrderUndefined;
+
+    CRepository* sortOrderSettings = CRepository::NewLC(TUid::Uid(KCRUidPhonebook));
+    sortOrderSettings->Get(KPhonebookNameOrdering, orderInCenRep);
+    
+    switch ( orderInResFile )
+        {
+        case EPbk2UiSpecLastNameFirstName:
+            {
+            orderInCenRep = EPbk2CenRepLastNameFirstName;
+            break;
+            }
+            
+        case EPbk2UiSpecFirstNameLastName: // FALL THROUGH
+            
+        // If the name order is not defined in the UI Specification,
+        // and...
+        default:
+            {
+            // ... also not defined in the CenRep,
+            // then use the "First Name" "Last Name" order
+            // for most number of languages.
+            if ( EPbk2CenRepNameOrderUndefined == orderInCenRep )
+                {
+                orderInCenRep = EPbk2CenRepFirstNameLastName;
+                }
+            break;
+            }
+            
+        } // end switch
+
+    if (orderInCenRep == EPbk2CenRepLastNameFirstName)
+        {
+        SetPriority(CCmsContactFieldItem::ECmsMiddleName, EFalse, 1);
+        SetPriority(CCmsContactFieldItem::ECmsFirstName, EFalse, 2);
+        SetPriority(CCmsContactFieldItem::ECmsLastName, EFalse, 3);
+        }
+    else
+        {
+        SetPriority(CCmsContactFieldItem::ECmsFirstName, EFalse, 3);
+        SetPriority(CCmsContactFieldItem::ECmsMiddleName, EFalse, 2);
+        SetPriority(CCmsContactFieldItem::ECmsLastName, EFalse, 1);
+        }
+        
+    CleanupStack::PopAndDestroy(sortOrderSettings);
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CCCAppCommLauncherHeaderTextOrder::~CCCAppCommLauncherHeaderTextOrder()
+    {
+    iHeaderRows.ResetAndDestroy();
+    iHeaderRowsClipped.ResetAndDestroy();
+    delete iCurrentDbName;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::SetPriority
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherHeaderTextOrder::SetPriority(CCmsContactFieldItem::TCmsContactField aContactField, TBool aGroup, TInt aPriority)
+    {
+    if (aGroup)
+        {
+        iGroupPriorities[aContactField -  KCCAppCommLauncherHeaderTextOrderFirstField] = aPriority;
+        }
+    else
+        {
+        iIndividualPriorities[aContactField -  KCCAppCommLauncherHeaderTextOrderFirstField] = aPriority;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::GetPriority
+// ---------------------------------------------------------------------------
+//
+TInt CCCAppCommLauncherHeaderTextOrder::GetPriority(CCmsContactFieldItem::TCmsContactField aContactField, TBool aGroup)
+    {
+    if (aGroup)
+        {
+        return iGroupPriorities[aContactField -  KCCAppCommLauncherHeaderTextOrderFirstField];
+        }
+    else
+        {
+        return iIndividualPriorities[aContactField -  KCCAppCommLauncherHeaderTextOrderFirstField];
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::GetTextForRow
+// ---------------------------------------------------------------------------
+//
+const TDesC& CCCAppCommLauncherHeaderTextOrder::GetTextForRow(TInt aRow)
+    {
+    if (aRow >= 0 && aRow < iHeaderRowsClipped.Count() && aRow < iHeaderRows.Count())
+        {
+        if (iHeaderRowsClipped[aRow])
+            {
+            TPtr ptr(iHeaderRowsClipped[aRow]->Des());
+            // Replace characters that can not be displayed correctly.
+            Pbk2PresentationUtils::ReplaceNonGraphicCharacters(ptr, ' ');
+            return *iHeaderRowsClipped[aRow];
+            }
+        else if (iHeaderRows[aRow])
+            {
+            TPtr ptr(iHeaderRows[aRow]->Des());
+            Pbk2PresentationUtils::ReplaceNonGraphicCharacters(ptr, ' ');
+            return *iHeaderRows[aRow];
+            }
+        }
+    return KNullDesC();
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::SelectContactFieldL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherHeaderTextOrder::SelectContactFieldL(
+    const CCmsContactField& aContactField, 
+    TInt aTopGroupPriority)
+    {
+    CCmsContactFieldItem::TCmsContactField type = aContactField.Type();    
+    const RPointerArray<CCmsContactFieldItem>& fields = aContactField.Items();    
+
+    for (TInt i=0; i < fields.Count(); i++)
+        {
+        for (TInt i2 = 0; i2 < KCCAppCommLauncherHeaderTextOrderLineCount; i2++)
+            {
+            if ( GetPriority(type, ETrue) == aTopGroupPriority &&
+                      (iHeaderTypes[i2] < 0 || GetPriority(type, EFalse) > GetPriority((CCmsContactFieldItem::TCmsContactField)iHeaderTypes[i2], EFalse)) )
+                {
+                if(StrippedLengthL(*fields[i])) //Skip blank fields 
+                    {
+                    TInt typeMem = KContactTypeNotSet;
+                    for (TInt i3 = i2; i3 < KCCAppCommLauncherHeaderTextOrderLineCount; i3++)
+                        {
+                        TInt typeTemp = iHeaderTypes[i3];
+                        iHeaderTypes[i3] = typeMem;
+                        typeMem = typeTemp;
+                        }
+                    iHeaderTypes[i2] = type;  
+                    break;                    
+                    }
+                }
+            }            
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::ProcessContactFieldsL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherHeaderTextOrder::ProcessContactFieldsL(
+    RArray<CCmsContactField> aCmsContactFields)
+    {
+    TInt topGroupPriority = 0;
+    delete iCurrentDbName;
+    iCurrentDbName = NULL;
+    TInt count = aCmsContactFields.Count();
+    TInt i;
+    
+    //1. Get the topmost group of fields containing displayable sdata
+    for(i=0; i < count ; i++ )
+        {
+        for(TInt j=0; j < aCmsContactFields[i].Items().Count(); j++ )
+            {
+            CCmsContactFieldItem::TCmsContactField type = aCmsContactFields[i].Type();
+            if(StrippedLengthL(aCmsContactFields[i].ItemL(j)))
+                {
+                if ( GetPriority(type, ETrue) > topGroupPriority )
+                    {
+                    topGroupPriority = GetPriority(type, ETrue);  
+                    }
+                }
+            }
+        }
+
+    //2. Select preferred fields from top group     
+    for(i=0; i < count ; i++ )
+        {
+        SelectContactFieldL( aCmsContactFields[i], topGroupPriority ); 
+        }
+    if (KCCAppCommLauncherHeaderTextOrderLineCount > 1 && iHeaderTypes[1] == KContactTypeNotSet)
+        {
+        iHeadersWrapped = ETrue;
+        }
+
+    //3. Process the selected fields
+    for(i=0; i < count ; i++ )
+        {
+        ProcessContactFieldL( aCmsContactFields[i] );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::ProcessContactFieldL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherHeaderTextOrder::ProcessContactFieldL(const CCmsContactField& aContactField)
+    {
+    for (TInt i = 0; i < KCCAppCommLauncherHeaderTextOrderLineCount; i++)
+        {
+        if (iHeaderRowsClipped[i])
+            {
+            delete iHeaderRowsClipped[i];
+            iHeaderRowsClipped[i] = 0;
+            }
+        if (aContactField.Type() == iHeaderTypes[i] && !iHeaderRows[i])
+            {
+            //Check is there anything from current database for this header row[i]
+            TInt itemCountForDb = ItemCountForCurrentDbL( aContactField ); 
+            if(!itemCountForDb)
+                {
+                //nothing to show, skip this contact field
+                break; 
+                }
+            
+            if (itemCountForDb > 1)
+                {
+                iHeadersWrapped = EFalse;
+                
+                HBufC* mem = 0;
+                TInt typeMem = KContactTypeNotSet;
+                for (TInt i2 = i + itemCountForDb-1; i2 < KCCAppCommLauncherHeaderTextOrderLineCount; i2++)                 
+                    {
+                    HBufC* temp = iHeaderRows[i2];
+                    TInt typeTemp = iHeaderTypes[i2];
+                    iHeaderRows[i2] = mem;
+                    iHeaderTypes[i2] = typeMem;
+                    mem = temp;
+                    typeMem = typeTemp;
+                    }
+                delete mem;
+                }
+            for (unsigned i2 = i; i2 < KCCAppCommLauncherHeaderTextOrderLineCount && i2-i < itemCountForDb; i2++)             
+                {
+                //Add only rows from current db
+                TPtrC info = aContactField.ItemL(i2-i).Info();
+                if( iCurrentDbName && *iCurrentDbName == info ) 
+                    {
+                    iHeaderRows[i2] = aContactField.ItemL(i2-i).Data().AllocL();
+                    iHeaderTypes[i2] = aContactField.Type();
+                    }
+                }
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::StrippedLengthL
+// ---------------------------------------------------------------------------
+//
+TInt CCCAppCommLauncherHeaderTextOrder::StrippedLengthL(
+    const CCmsContactFieldItem& aCmsContactFieldItem)
+    {
+    HBufC* buf1 = aCmsContactFieldItem.Data().AllocLC();
+    TPtr buf1Ptr = buf1->Des();
+    buf1Ptr.TrimAll();
+    
+    DeleteCharL(buf1Ptr, 0x000d); //KCarriageReturn = 0x000d
+    DeleteCharL(buf1Ptr, 0x000a); //KLineFeed = 0x000a
+    buf1Ptr.TrimAll();            //if any whitespace left after first trim...    
+
+    TInt strippedLength = buf1Ptr.Length();    
+    CleanupStack::PopAndDestroy(buf1);    
+    return strippedLength;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::ProcessContactFieldsL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherHeaderTextOrder::DeleteCharL(TDes& aDest, TChar aChar)
+    {
+    TBuf<1> str;
+    str.Append(aChar);    
+    
+    TInt delPos = aDest.Find(str);
+    while( delPos != KErrNotFound )
+        {
+        aDest.Delete(delPos, 1);
+        delPos = aDest.Find(str);
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::ItemCountForCurrentDbL
+// ---------------------------------------------------------------------------
+//
+TInt CCCAppCommLauncherHeaderTextOrder::ItemCountForCurrentDbL( 
+    const CCmsContactField& aContactField )
+    {
+    TInt ret(0);
+    
+    for(TInt i=0; i < aContactField.ItemCount(); i++ )
+        {
+        if( !iCurrentDbName )
+            {
+            //From now on accept only data from this database
+            iCurrentDbName = aContactField.ItemL(i).Info().AllocL();
+            }    
+
+        TPtrC info = aContactField.ItemL(i).Info();
+        if( *iCurrentDbName == info ) 
+            {
+            ret++;
+            }
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::Reset
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherHeaderTextOrder::Reset()
+    {
+    for (TInt i = 0; i < KCCAppCommLauncherHeaderTextOrderLineCount; i++)
+        {
+        delete iHeaderRows[i];
+        iHeaderRows[i] = NULL;
+        delete iHeaderRowsClipped[i];
+        iHeaderRowsClipped[i] = NULL;
+        iHeaderTypes[i] = KContactTypeNotSet;
+        }
+    iHeadersWrapped = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::ClipL
+// ---------------------------------------------------------------------------
+//
+void CCCAppCommLauncherHeaderTextOrder::ClipL(const CFont& aFont, TInt aLineWidth)
+    {
+    iHeaderRowsClipped.ResetAndDestroy();
+    if (iHeadersWrapped && iHeaderRows[0])
+        {
+        HBufC* textTemp = HBufC::NewLC(iHeaderRows[0]->Length() + 1);
+        CArrayFixFlat<TInt> * lineWidths = new (ELeave) CArrayFixFlat<TInt>(KCCAppCommLauncherHeaderTextOrderLineCount);
+        CleanupStack::PushL(lineWidths);
+        lineWidths->AppendL(aLineWidth);
+        lineWidths->AppendL(aLineWidth);
+        lineWidths->AppendL(aLineWidth);
+        CArrayFixFlat<TPtrC>* lines = new (ELeave) CArrayFixFlat<TPtrC>(KCCAppCommLauncherHeaderTextOrderLineCount);
+        CleanupStack::PushL(lines);
+        TPtr ptr = textTemp->Des();
+        ptr.Copy(*iHeaderRows[0]);
+        AknTextUtils::WrapToArrayAndClipL(ptr, *lineWidths, aFont, *lines);
+        for (TInt i=0; i < KCCAppCommLauncherHeaderTextOrderLineCount; i++)
+            {
+            if (i < lines->Count())
+                {
+                iHeaderRowsClipped.AppendL(lines->At(i).AllocL());
+                }
+            else
+                {
+                iHeaderRowsClipped.AppendL(KNullDesC().AllocL());
+                }
+            }
+        CleanupStack::PopAndDestroy(3);
+        }
+    else
+        {
+        for (TInt i = 0; i < KCCAppCommLauncherHeaderTextOrderLineCount; i++)
+            {
+            iHeaderRowsClipped.AppendL(0);
+            if (iHeaderRows[i])
+                {
+                AknTextUtils::TClipDirection clipDirection = MapContactFieldToClipDirection((CCmsContactFieldItem::TCmsContactField)iHeaderTypes[i]);
+                iHeaderRowsClipped[i] = iHeaderRows[i]->AllocL();
+                TPtr ptr = iHeaderRowsClipped[i]->Des();
+                AknTextUtils::ClipToFit(ptr, aFont, aLineWidth, clipDirection);
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppCommLauncherHeaderTextOrder::MapStringToContactField
+// ---------------------------------------------------------------------------
+//
+ TInt CCCAppCommLauncherHeaderTextOrder::MapStringToContactField(const TDesC& aDesc, CCmsContactFieldItem::TCmsContactField& aType)
+    {
+    _LIT(KECmsLastName, "ECmsLastName");
+    _LIT(KECmsMiddleName, "ECmsMiddleName");
+    _LIT(KECmsFirstName, "ECmsFirstName");
+    _LIT(KECmsUndefined, "ECmsUndefined");
+    _LIT(KECmsPresenceData, "ECmsPresenceData");
+    _LIT(KECmsBrandedAvailability, "ECmsBrandedAvailability");
+    _LIT(KECmsThumbnailPic, "ECmsThumbnailPic");
+    _LIT(KECmsSipAddress, "ECmsSipAddress");
+    _LIT(KECmsLandPhoneHome, "ECmsLandPhoneHome");
+    _LIT(KECmsMobilePhoneHome, "ECmsMobilePhoneHome");
+    _LIT(KECmsFaxNumberHome, "ECmsFaxNumberHome");
+    _LIT(KECmsVideoNumberHome, "ECmsVideoNumberHome");
+    _LIT(KECmsVoipNumberHome, "ECmsVoipNumberHome");
+    _LIT(KECmsEmailHome, "ECmsEmailHome");
+    _LIT(KECmsUrlHome, "ECmsUrlHome");
+    _LIT(KECmsLandPhoneWork, "ECmsLandPhoneWork");
+    _LIT(KECmsMobilePhoneWork, "ECmsMobilePhoneWork");
+    _LIT(KECmsVideoNumberWork, "ECmsVideoNumberWork");
+    _LIT(KECmsFaxNumberWork, "ECmsFaxNumberWork");
+    _LIT(KECmsVoipNumberWork, "ECmsVoipNumberWork");
+    _LIT(KECmsEmailWork, "ECmsEmailWork");
+    _LIT(KECmsUrlWork, "ECmsUrlWork");
+    _LIT(KECmsEmailGeneric, "ECmsEmailGeneric");
+    _LIT(KECmsUrlGeneric, "ECmsUrlGeneric");
+    _LIT(KECmsLandPhoneGeneric, "ECmsLandPhoneGeneric");
+    _LIT(KECmsMobilePhoneGeneric, "ECmsMobilePhoneGeneric");
+    _LIT(KECmsVideoNumberGeneric, "ECmsVideoNumberGeneric");
+    _LIT(KECmsAddrLabelGeneric, "ECmsAddrLabelGeneric");
+    _LIT(KECmsAddrPOGeneric, "ECmsAddrPOGeneric");
+    _LIT(KECmsAddrExtGeneric, "ECmsAddrExtGeneric");
+    _LIT(KECmsAddrStreetGeneric, "ECmsAddrStreetGeneric");
+    _LIT(KECmsAddrLocalGeneric, "ECmsAddrLocalGeneric");
+    _LIT(KECmsAddrRegionGeneric, "ECmsAddrRegionGeneric");
+    _LIT(KECmsAddrPostcodeGeneric, "ECmsAddrPostcodeGeneric");
+    _LIT(KECmsAddrCountryGeneric, "ECmsAddrCountryGeneric");
+    _LIT(KECmsVoipNumberGeneric, "ECmsVoipNumberGeneric");
+    _LIT(KECmsAddrLabelHome, "ECmsAddrLabelHome");
+    _LIT(KECmsAddrPOHome, "ECmsAddrPOHome");
+    _LIT(KECmsAddrExtHome, "ECmsAddrExtHome");
+    _LIT(KECmsAddrStreetHome, "ECmsAddrStreetHome");
+    _LIT(KECmsAddrLocalHome, "ECmsAddrLocalHome");
+    _LIT(KECmsAddrRegionHome, "ECmsAddrRegionHome");
+    _LIT(KECmsAddrPostcodeHome, "ECmsAddrPostcodeHome");
+    _LIT(KECmsAddrCountryHome, "ECmsAddrCountryHome");
+    _LIT(KECmsAddrLabelWork, "ECmsAddrLabelWork");
+    _LIT(KECmsAddrPOWork, "ECmsAddrPOWork");
+    _LIT(KECmsAddrExtWork, "ECmsAddrExtWork");
+    _LIT(KECmsAddrStreetWork, "ECmsAddrStreetWork");
+    _LIT(KECmsAddrLocalWork, "ECmsAddrLocalWork");
+    _LIT(KECmsAddrRegionWork, "ECmsAddrRegionWork");
+    _LIT(KECmsAddrPostcodeWork, "ECmsAddrPostcodeWork");
+    _LIT(KECmsAddrCountryWork, "ECmsAddrCountryWork");
+    _LIT(KECmsImpp, "ECmsImpp");
+    _LIT(KECmsFullName, "ECmsFullName");
+    _LIT(KECmsNote, "ECmsNote");
+    _LIT(KECmsNickname, "ECmsNickname");
+    _LIT(KECmsJobTitle, "ECmsJobTitle");
+    _LIT(KECmsDepartment, "ECmsDepartment");
+    _LIT(KECmsBirthday, "ECmsBirthday");
+    _LIT(KECmsAnniversary, "ECmsAnniversary");
+    _LIT(KECmsCompanyName, "ECmsCompanyName");
+    _LIT(KECmsAssistantNumber, "ECmsAssistantNumber");
+    _LIT(KECmsCarPhone, "ECmsCarPhone");
+    _LIT(KECmsPagerNumber, "ECmsPagerNumber");
+    _LIT(KECmsPushToTalk, "ECmsPushToTalk");
+    _LIT(KECmsShareView, "ECmsShareView");
+
+    
+    if (!aDesc.Compare(KECmsLastName))
+        aType = CCmsContactFieldItem::ECmsLastName;
+    else if (!aDesc.Compare(KECmsMiddleName))
+        aType = CCmsContactFieldItem::ECmsMiddleName;
+    else if (!aDesc.Compare(KECmsFirstName))
+        aType = CCmsContactFieldItem::ECmsFirstName;
+    else if (!aDesc.Compare(KECmsUndefined))
+        aType = CCmsContactFieldItem::ECmsUndefined;
+    else if (!aDesc.Compare(KECmsPresenceData))
+        aType = CCmsContactFieldItem::ECmsPresenceData;
+    else if (!aDesc.Compare(KECmsBrandedAvailability))
+        aType = CCmsContactFieldItem::ECmsBrandedAvailability;
+    else if (!aDesc.Compare(KECmsThumbnailPic))
+        aType = CCmsContactFieldItem::ECmsThumbnailPic;
+    else if (!aDesc.Compare(KECmsSipAddress))
+        aType = CCmsContactFieldItem::ECmsSipAddress;
+    else if (!aDesc.Compare(KECmsLandPhoneHome))
+        aType = CCmsContactFieldItem::ECmsLandPhoneHome;
+    else if (!aDesc.Compare(KECmsMobilePhoneHome))
+        aType = CCmsContactFieldItem::ECmsMobilePhoneHome;
+    else if (!aDesc.Compare(KECmsFaxNumberHome))
+        aType = CCmsContactFieldItem::ECmsFaxNumberHome;
+    else if (!aDesc.Compare(KECmsVideoNumberHome))
+        aType = CCmsContactFieldItem::ECmsVideoNumberHome;
+    else if (!aDesc.Compare(KECmsVoipNumberHome))
+        aType = CCmsContactFieldItem::ECmsVoipNumberHome;
+    else if (!aDesc.Compare(KECmsEmailHome))
+        aType = CCmsContactFieldItem::ECmsEmailHome;
+    else if (!aDesc.Compare(KECmsUrlHome))
+        aType = CCmsContactFieldItem::ECmsUrlHome;
+    else if (!aDesc.Compare(KECmsLandPhoneWork))
+        aType = CCmsContactFieldItem::ECmsLandPhoneWork;
+    else if (!aDesc.Compare(KECmsMobilePhoneWork))
+        aType = CCmsContactFieldItem::ECmsMobilePhoneWork;
+    else if (!aDesc.Compare(KECmsVideoNumberWork))
+        aType = CCmsContactFieldItem::ECmsVideoNumberWork;
+    else if (!aDesc.Compare(KECmsFaxNumberWork))
+        aType = CCmsContactFieldItem::ECmsFaxNumberWork;
+    else if (!aDesc.Compare(KECmsVoipNumberWork))
+        aType = CCmsContactFieldItem::ECmsVoipNumberWork;
+    else if (!aDesc.Compare(KECmsEmailWork))
+        aType = CCmsContactFieldItem::ECmsEmailWork;
+    else if (!aDesc.Compare(KECmsUrlWork))
+        aType = CCmsContactFieldItem::ECmsUrlWork;
+    else if (!aDesc.Compare(KECmsEmailGeneric))
+        aType = CCmsContactFieldItem::ECmsEmailGeneric;
+    else if (!aDesc.Compare(KECmsUrlGeneric))
+        aType = CCmsContactFieldItem::ECmsUrlGeneric;
+    else if (!aDesc.Compare(KECmsLandPhoneGeneric))
+        aType = CCmsContactFieldItem::ECmsLandPhoneGeneric;
+    else if (!aDesc.Compare(KECmsMobilePhoneGeneric))
+        aType = CCmsContactFieldItem::ECmsMobilePhoneGeneric;
+    else if (!aDesc.Compare(KECmsVideoNumberGeneric))
+        aType = CCmsContactFieldItem::ECmsVideoNumberGeneric;
+    else if (!aDesc.Compare(KECmsAddrLabelGeneric))
+        aType = CCmsContactFieldItem::ECmsAddrLabelGeneric;
+    else if (!aDesc.Compare(KECmsAddrPOGeneric))
+        aType = CCmsContactFieldItem::ECmsAddrPOGeneric;
+    else if (!aDesc.Compare(KECmsAddrExtGeneric))
+        aType = CCmsContactFieldItem::ECmsAddrExtGeneric;
+    else if (!aDesc.Compare(KECmsAddrStreetGeneric))
+        aType = CCmsContactFieldItem::ECmsAddrStreetGeneric;
+    else if (!aDesc.Compare(KECmsAddrLocalGeneric))
+        aType = CCmsContactFieldItem::ECmsAddrLocalGeneric;
+    else if (!aDesc.Compare(KECmsAddrRegionGeneric))
+        aType = CCmsContactFieldItem::ECmsAddrRegionGeneric;
+    else if (!aDesc.Compare(KECmsAddrPostcodeGeneric))
+        aType = CCmsContactFieldItem::ECmsAddrPostcodeGeneric;
+    else if (!aDesc.Compare(KECmsAddrCountryGeneric))
+        aType = CCmsContactFieldItem::ECmsAddrCountryGeneric;
+    else if (!aDesc.Compare(KECmsVoipNumberGeneric))
+        aType = CCmsContactFieldItem::ECmsVoipNumberGeneric;
+    else if (!aDesc.Compare(KECmsAddrLabelHome))
+        aType = CCmsContactFieldItem::ECmsAddrLabelHome;
+    else if (!aDesc.Compare(KECmsAddrPOHome))
+        aType = CCmsContactFieldItem::ECmsAddrPOHome;
+    else if (!aDesc.Compare(KECmsAddrExtHome))
+        aType = CCmsContactFieldItem::ECmsAddrExtHome;
+    else if (!aDesc.Compare(KECmsAddrStreetHome))
+        aType = CCmsContactFieldItem::ECmsAddrStreetHome;
+    else if (!aDesc.Compare(KECmsAddrLocalHome))
+        aType = CCmsContactFieldItem::ECmsAddrLocalHome;
+    else if (!aDesc.Compare(KECmsAddrRegionHome))
+        aType = CCmsContactFieldItem::ECmsAddrRegionHome;
+    else if (!aDesc.Compare(KECmsAddrPostcodeHome))
+        aType = CCmsContactFieldItem::ECmsAddrPostcodeHome;
+    else if (!aDesc.Compare(KECmsAddrCountryHome))
+        aType = CCmsContactFieldItem::ECmsAddrCountryHome;
+    
+    else if (!aDesc.Compare(KECmsAddrLabelWork))
+        aType = CCmsContactFieldItem::ECmsAddrLabelWork;
+    else if (!aDesc.Compare(KECmsAddrPOWork))
+        aType = CCmsContactFieldItem::ECmsAddrPOWork;
+    else if (!aDesc.Compare(KECmsAddrExtWork))
+        aType = CCmsContactFieldItem::ECmsAddrExtWork;
+    else if (!aDesc.Compare(KECmsAddrStreetWork))
+        aType = CCmsContactFieldItem::ECmsAddrStreetWork;
+    else if (!aDesc.Compare(KECmsAddrLocalWork))
+        aType = CCmsContactFieldItem::ECmsAddrLocalWork;
+    else if (!aDesc.Compare(KECmsAddrRegionWork))
+        aType = CCmsContactFieldItem::ECmsAddrRegionWork;
+    else if (!aDesc.Compare(KECmsAddrPostcodeWork))
+        aType = CCmsContactFieldItem::ECmsAddrPostcodeWork;
+    else if (!aDesc.Compare(KECmsAddrCountryWork))
+        aType = CCmsContactFieldItem::ECmsAddrCountryWork;
+    
+    else if (!aDesc.Compare(KECmsImpp))
+        aType = CCmsContactFieldItem::ECmsImpp;
+    else if (!aDesc.Compare(KECmsFullName))
+        aType = CCmsContactFieldItem::ECmsFullName;
+    else if (!aDesc.Compare(KECmsNote))
+        aType = CCmsContactFieldItem::ECmsNote;
+    else if (!aDesc.Compare(KECmsNickname))
+        aType = CCmsContactFieldItem::ECmsNickname;
+    else if (!aDesc.Compare(KECmsJobTitle))
+        aType = CCmsContactFieldItem::ECmsJobTitle;
+    else if (!aDesc.Compare(KECmsDepartment))
+        aType = CCmsContactFieldItem::ECmsDepartment;
+    else if (!aDesc.Compare(KECmsBirthday))
+        aType = CCmsContactFieldItem::ECmsBirthday;
+    else if (!aDesc.Compare(KECmsAnniversary))
+        aType = CCmsContactFieldItem::ECmsAnniversary;
+    else if (!aDesc.Compare(KECmsCompanyName))
+        aType = CCmsContactFieldItem::ECmsCompanyName;    
+    else if (!aDesc.Compare(KECmsAssistantNumber))
+        aType = CCmsContactFieldItem::ECmsAssistantNumber;
+    else if (!aDesc.Compare(KECmsCarPhone))
+        aType = CCmsContactFieldItem::ECmsCarPhone;
+    else if (!aDesc.Compare(KECmsPagerNumber))
+        aType = CCmsContactFieldItem::ECmsPagerNumber;
+    else if (!aDesc.Compare(KECmsPushToTalk))
+        aType = CCmsContactFieldItem::ECmsPushToTalk;
+    else if (!aDesc.Compare(KECmsShareView))
+        aType = CCmsContactFieldItem::ECmsShareView;
+    else
+        return KErrNotFound;
+    return KErrNone;
+    }
+ 
+ // ---------------------------------------------------------------------------
+ // CCCAppCommLauncherHeaderTextOrder::MapContactFieldToClipDirection
+ // ---------------------------------------------------------------------------
+ //
+ AknTextUtils::TClipDirection CCCAppCommLauncherHeaderTextOrder::MapContactFieldToClipDirection(CCmsContactFieldItem::TCmsContactField aType)
+     {
+     switch (aType)
+         {
+         case CCmsContactFieldItem::ECmsMobilePhoneGeneric:
+         case CCmsContactFieldItem::ECmsMobilePhoneWork:
+         case CCmsContactFieldItem::ECmsMobilePhoneHome:
+         case CCmsContactFieldItem::ECmsLandPhoneGeneric:
+         case CCmsContactFieldItem::ECmsLandPhoneWork:
+         case CCmsContactFieldItem::ECmsLandPhoneHome:
+         case CCmsContactFieldItem::ECmsVideoNumberGeneric:
+         case CCmsContactFieldItem::ECmsVideoNumberWork:
+         case CCmsContactFieldItem::ECmsVideoNumberHome:
+         case CCmsContactFieldItem::ECmsFaxNumberHome:
+         case CCmsContactFieldItem::ECmsFaxNumberWork:
+         case CCmsContactFieldItem::ECmsEmailGeneric:
+         case CCmsContactFieldItem::ECmsEmailWork:
+         case CCmsContactFieldItem::ECmsEmailHome:
+         case CCmsContactFieldItem::ECmsVoipNumberGeneric:
+         case CCmsContactFieldItem::ECmsVoipNumberHome:
+         case CCmsContactFieldItem::ECmsVoipNumberWork:
+         case CCmsContactFieldItem::ECmsSipAddress:
+         case CCmsContactFieldItem::ECmsImpp:
+         case CCmsContactFieldItem::ECmsAssistantNumber:
+         case CCmsContactFieldItem::ECmsCarPhone:
+         case CCmsContactFieldItem::ECmsPagerNumber:
+         case CCmsContactFieldItem::ECmsPushToTalk:
+         case CCmsContactFieldItem::ECmsShareView:
+             return AknTextUtils::EClipFromBeginning;
+         default:
+             return AknTextUtils::EClipFromEnd;
+         }
+     }