diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/remotecontactlookup/contactactionservice/src/CFscContactNameFormatter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/remotecontactlookup/contactactionservice/src/CFscContactNameFormatter.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,221 @@ +/* +* Copyright (c) 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 CFscContactNameFormatter. + * +*/ + + +#include "emailtrace.h" +#include "CFscContactNameFormatter.h" +#include +#include +#include + +namespace + { + + enum TNameOrder + { + ENameFirstPart = 0, + ENameSecondPart + }; + } // namespace + +// ----------------------------------------------------------------------------- +// CFscContactNameFormatter::CFscContactNameFormatter +// ----------------------------------------------------------------------------- +// +CFscContactNameFormatter::CFscContactNameFormatter( + const MVPbkFieldTypeList& aMasterFieldTypeList, + const CPbk2SortOrderManager& aSortOrderManager) : + CFscContactNameFormatterBase(aMasterFieldTypeList, aSortOrderManager) + { + FUNC_LOG; + } + +// ----------------------------------------------------------------------------- +// CFscContactNameFormatter::NewL +// ----------------------------------------------------------------------------- +// +CFscContactNameFormatter* CFscContactNameFormatter::NewL( + const TDesC& aUnnamedText, + const MVPbkFieldTypeList& aMasterFieldTypeList, + const CPbk2SortOrderManager& aSortOrderManager, + CVPbkFieldTypeSelector* aTitleFieldSelector) + { + FUNC_LOG; + CFscContactNameFormatter* self = new(ELeave) CFscContactNameFormatter + (aMasterFieldTypeList, aSortOrderManager); + CleanupStack::PushL(self); + self->ConstructL(aUnnamedText, aTitleFieldSelector); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CFscContactNameFormatter::ConstructL +// ----------------------------------------------------------------------------- +// +void CFscContactNameFormatter::ConstructL(const TDesC& aUnnamedText, + CVPbkFieldTypeSelector* aTitleFieldSelector) + { + FUNC_LOG; + // Base class takes ownership of aTitleFieldSelector. + // Must not leave after BaseConstructL + BaseConstructL(aUnnamedText, aTitleFieldSelector); + } + +// ----------------------------------------------------------------------------- +// CFscContactNameFormatter::~CFscContactNameFormatter +// ----------------------------------------------------------------------------- +// +CFscContactNameFormatter::~CFscContactNameFormatter() + { + FUNC_LOG; + } + +// ----------------------------------------------------------------------------- +// CFscContactNameFormatter::GetContactTitle +// ----------------------------------------------------------------------------- +// +void CFscContactNameFormatter::GetContactTitle( + const MVPbkBaseContactFieldCollection& aContactFields, TDes& aTitle, + TUint32 aFormattingFlags) + { + FUNC_LOG; + aTitle.Zero(); + SetFieldMapper(aContactFields); + + // Try to create title using first two fields of the sort order + // If the field type in the sort order is not defined as a title field + // then it's not used for title creation. + DoGetContactTitle(aTitle, aFormattingFlags, ENameFirstPart, + ENameSecondPart); + + // If there was no data in the first two fields then + // use the third and the rest of the fields in the sort order + // for title creation. + if (aTitle.Length() == 0 && AreTitleFieldsEmpty(ENameFirstPart, + ENameSecondPart) ) + { + // Find the next field in the sort order that has + // data to build the title + const TInt count = iFieldMapper.FieldCount(); + DoGetContactTitle(aTitle, aFormattingFlags, ENameSecondPart+1, count + -1); // zero-based + } + } + +// ----------------------------------------------------------------------------- +// CFscContactNameFormatter::GetContactTitleForFind +// ----------------------------------------------------------------------------- +// +void CFscContactNameFormatter::GetContactTitleForFind( + const MVPbkBaseContactFieldCollection& aContactFields, TDes& aTitle, + TUint32 aFormattingFlags) + { + FUNC_LOG; + aTitle.Zero(); + SetFieldMapper(aContactFields); + + const TInt count = iFieldMapper.FieldCount(); + DoGetContactTitle(aTitle, aFormattingFlags, ENameFirstPart, count-1); // zero-based + } + +// ----------------------------------------------------------------------------- +// CFscContactNameFormatter::ActualTitleFieldsLC +// See function CFscContactNameFormatter::GetContactTitle. +// ----------------------------------------------------------------------------- +// +CVPbkBaseContactFieldTypeListIterator* CFscContactNameFormatter::ActualTitleFieldsLC( + CVPbkFieldTypeRefsList& aFieldTypeList, + const MVPbkBaseContactFieldCollection& aContactFields) + { + FUNC_LOG; + aFieldTypeList.Reset(); + + SetFieldMapper(aContactFields); + + DoAppendNonEmptyTitleFieldTypesL(aFieldTypeList, ENameFirstPart, + ENameSecondPart); + + if (aFieldTypeList.FieldTypeCount() == 0) + { + const TInt count = iFieldMapper.FieldCount(); + DoAppendNonEmptyTitleFieldTypesL(aFieldTypeList, ENameSecondPart+1, + count-1); + } + + return CVPbkBaseContactFieldTypeListIterator::NewLC(aFieldTypeList, + aContactFields); + } + +// ----------------------------------------------------------------------------- +// CFscContactNameFormatter::MaxTitleLength +// ----------------------------------------------------------------------------- +// +TInt CFscContactNameFormatter::MaxTitleLength( + const MVPbkBaseContactFieldCollection& aContactFields, + const TUint32 aFormattingFlags) + { + FUNC_LOG; + TInt result = 0; + SetFieldMapper(aContactFields); + + result = DoCalculateMaxTitleLength(aFormattingFlags, ENameFirstPart, + ENameSecondPart); + + if (result == 0) + { + // Use the rest of the fields in sort order to + // build the title (ie. the company name) + const TInt count = iFieldMapper.FieldCount(); + result = DoCalculateMaxTitleLength(aFormattingFlags, ENameSecondPart + +1, count-1); // zero-based + } + + return result; + } + +// ----------------------------------------------------------------------------- +// CFscContactNameFormatter::MaxTitleLengthForFind +// ----------------------------------------------------------------------------- +// +TInt CFscContactNameFormatter::MaxTitleLengthForFind( + const MVPbkBaseContactFieldCollection& aContactFields, + const TUint32 aFormattingFlags) + { + FUNC_LOG; + TInt result = 0; + SetFieldMapper(aContactFields); + + const TInt count = iFieldMapper.FieldCount(); + result = DoCalculateMaxTitleLength(aFormattingFlags, ENameFirstPart, + count-1); // zero-based + + return result; + } + +// ----------------------------------------------------------------------------- +// CFscContactNameFormatter::IsFindSeparatorChar +// ----------------------------------------------------------------------------- +// +TBool CFscContactNameFormatter::IsFindSeparatorChar(TChar aCh) + { + FUNC_LOG; + return aCh.IsSpace(); + } + +// End of File +