diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookui/Phonebook2/Presentation/src/CPbk2JapaneseContactNameFormatter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/Presentation/src/CPbk2JapaneseContactNameFormatter.cpp Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,265 @@ +/* +* 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: +* Japanese contact name formatter. +* +*/ + + +#include "CPbk2JapaneseContactNameFormatter.h" +#include +#include +#include + +namespace { + +enum TNameOrder + { + ETopContactOrderNumber = 0, + EReadingFirstPart, + EReadingSecondPart, + ENameFirstPart, + ENameSecondPart + }; +} // namespace + +// ----------------------------------------------------------------------------- +// CPbk2JapaneseContactNameFormatter::CPbk2JapaneseContactNameFormatter +// ----------------------------------------------------------------------------- +// +CPbk2JapaneseContactNameFormatter::CPbk2JapaneseContactNameFormatter( + const MVPbkFieldTypeList& aMasterFieldTypeList, + const CPbk2SortOrderManager& aSortOrderManager) + : CPbk2ContactNameFormatterBase( aMasterFieldTypeList, + aSortOrderManager ) + { + } + +// ----------------------------------------------------------------------------- +// CPbk2JapaneseContactNameFormatter::NewL +// ----------------------------------------------------------------------------- +// +CPbk2JapaneseContactNameFormatter* CPbk2JapaneseContactNameFormatter::NewL + ( + const MVPbkFieldTypeList& aMasterFieldTypeList, + const CPbk2SortOrderManager& aSortOrderManager, + CVPbkFieldTypeSelector* aTitleFieldSelector, + const TDesC& aUnnamedText + ) + { + CPbk2JapaneseContactNameFormatter* self = + new(ELeave) CPbk2JapaneseContactNameFormatter( + aMasterFieldTypeList, aSortOrderManager ); + CleanupStack::PushL(self); + self->ConstructL( aUnnamedText, aTitleFieldSelector ); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CPbk2JapaneseContactNameFormatter::ConstructL +// ----------------------------------------------------------------------------- +// +inline void CPbk2JapaneseContactNameFormatter::ConstructL + (const TDesC& aUnnamedText, + CVPbkFieldTypeSelector* aTitleFieldSelector ) + { + // Base class takes ownership of aTitleFieldSelector. + // Must not leave after BaseConstructL + BaseConstructL( aUnnamedText, aTitleFieldSelector ); + } + +// ----------------------------------------------------------------------------- +// CPbk2JapaneseContactNameFormatter::~CPbk2JapaneseContactNameFormatter +// ----------------------------------------------------------------------------- +// +CPbk2JapaneseContactNameFormatter::~CPbk2JapaneseContactNameFormatter() + { + } + +// ----------------------------------------------------------------------------- +// CPbk2JapaneseContactNameFormatter::GetContactTitle +// ----------------------------------------------------------------------------- +// +void CPbk2JapaneseContactNameFormatter::GetContactTitle + (const MVPbkBaseContactFieldCollection& aContactFields, + TDes& aTitle, TUint32 aFormattingFlags) + { + aTitle.Zero(); + SetFieldMapper( aContactFields ); + + // Try to create title using last/first name. + DoGetContactTitle(aTitle, aFormattingFlags, + ENameFirstPart, ENameSecondPart ); + + // If no last/first name, use reading fields + if ( aTitle.Length() == 0 && + AreTitleFieldsEmpty( ENameFirstPart, ENameSecondPart ) ) + { + DoGetContactTitle(aTitle, aFormattingFlags, + EReadingFirstPart, EReadingSecondPart ); + } + + // If there there was no data use rest of the fields + if ( aTitle.Length() == 0 && + AreTitleFieldsEmpty( EReadingFirstPart, EReadingSecondPart ) ) + { + // 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 + } + } + +// ----------------------------------------------------------------------------- +// CPbk2JapaneseContactNameFormatter::GetContactTitleForFind +// ----------------------------------------------------------------------------- +// +void CPbk2JapaneseContactNameFormatter::GetContactTitleForFind + (const MVPbkBaseContactFieldCollection& aContactFields, + TDes& aTitle, TUint32 aFormattingFlags) + { + aTitle.Zero(); + SetFieldMapper( aContactFields ); + + // Try to use the name fields "reading first part", "reading second part", + // "first part" and "second part" + DoGetContactTitle( aTitle, aFormattingFlags, + EReadingFirstPart, ENameSecondPart ); + + // If there there was no data in the name fields then + // use the rest of the fields in the sort order for the find + if ( aTitle.Length() == 0 && + AreTitleFieldsEmpty( EReadingFirstPart, ENameSecondPart ) ) + { + // Find the next title 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 + } + } + +// ----------------------------------------------------------------------------- +// CPbk2JapaneseContactNameFormatter::ActualTitleFieldsLC +// See CPbk2JapaneseContactNameFormatter::GetContactTitle. +// ----------------------------------------------------------------------------- +// +CVPbkBaseContactFieldTypeListIterator* +CPbk2JapaneseContactNameFormatter::ActualTitleFieldsLC( + CVPbkFieldTypeRefsList& aFieldTypeList, + const MVPbkBaseContactFieldCollection& aContactFields) + { + aFieldTypeList.Reset(); + + SetFieldMapper( aContactFields ); + + DoAppendNonEmptyTitleFieldTypesL( + aFieldTypeList, + ENameFirstPart, + ENameSecondPart); + + if( aFieldTypeList.FieldTypeCount() == 0 ) + { + DoAppendNonEmptyTitleFieldTypesL( + aFieldTypeList, + EReadingFirstPart, + EReadingSecondPart); + } + + if( aFieldTypeList.FieldTypeCount() == 0 ) + { + const TInt count = iFieldMapper.FieldCount(); + DoAppendNonEmptyTitleFieldTypesL( + aFieldTypeList, + ENameSecondPart+1, + count-1); + } + + return CVPbkBaseContactFieldTypeListIterator::NewLC( + aFieldTypeList, + aContactFields); + } + +// ----------------------------------------------------------------------------- +// CPbk2JapaneseContactNameFormatter::MaxTitleLength +// ----------------------------------------------------------------------------- +// +TInt CPbk2JapaneseContactNameFormatter::MaxTitleLength + (const MVPbkBaseContactFieldCollection& aContactFields, + const TUint32 aFormattingFlags) + { + TInt result = 0; + SetFieldMapper( aContactFields ); + + // Last/First name + result = DoCalculateMaxTitleLength + (aFormattingFlags, ENameFirstPart, ENameSecondPart); + + // Last/First name reading + if (result == 0) + { + result = DoCalculateMaxTitleLength + ( aFormattingFlags, EReadingFirstPart, EReadingSecondPart ); + } + + 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; + } + +// ----------------------------------------------------------------------------- +// CPbk2JapaneseContactNameFormatter::MaxTitleLengthForFind +// ----------------------------------------------------------------------------- +// +TInt CPbk2JapaneseContactNameFormatter::MaxTitleLengthForFind + (const MVPbkBaseContactFieldCollection& aContactFields, + const TUint32 aFormattingFlags) + { + TInt result = 0; + SetFieldMapper( aContactFields ); + + const TInt count = iFieldMapper.FieldCount(); + result = DoCalculateMaxTitleLength + ( aFormattingFlags, EReadingFirstPart, ENameSecondPart ); + + // Rest of the title fields + if( result == 0 ) + { + result = DoCalculateMaxTitleLength + ( aFormattingFlags, ENameSecondPart + 1, count - 1 ); + } + + return result; + } + +// ----------------------------------------------------------------------------- +// CPbk2JapaneseContactNameFormatter::IsFindSeparatorChar +// ----------------------------------------------------------------------------- +// +TBool CPbk2JapaneseContactNameFormatter::IsFindSeparatorChar( TChar aCh ) + { + return aCh.IsSpace(); + } + + +// End of File