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 Wed Sep 01 12:29:52 2010 +0100
@@ -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 <CVPbkContactFieldIterator.h>
+#include <MVPbkFieldType.h>
+#include <CVPbkFieldTypeRefsList.h>
+
+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
+