diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/remotecontactlookup/contactactionservice/inc/CFscContactNameFormatterBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/remotecontactlookup/contactactionservice/inc/CFscContactNameFormatterBase.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,197 @@ +/* +* 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: A base class for contact name formatters + * +*/ + + +#ifndef CFSCCONTACTNAMEFORMATTERBASE_H +#define CFSCCONTACTNAMEFORMATTERBASE_H + +// INCLUDES +#include +#include +#include "TFscSortOrderFieldMapper.h" + +// FORWARD DECLARATIONS +class CPbk2SortOrderManager; +class MVPbkFieldTypeList; +class CVPbkFieldTypeRefsList; +class CVPbkFieldTypeSelector; +class TResourceReader; + +// CLASS DECLARATION + +/** + * A base class for contact name formatters + * + */ +NONSHARABLE_CLASS( CFscContactNameFormatterBase ) +: public CBase, +public MPbk2ContactNameFormatter + { +public: // Constructors and destructor + + /** + * Destructor. + */ + virtual ~CFscContactNameFormatterBase(); + +public: // Functions from MPbk2ContactNameFormatter + + HBufC* GetContactTitleOrNullL( + const MVPbkBaseContactFieldCollection& aContactFields, + TUint32 aFormattingFlags); + HBufC* GetContactTitleL( + const MVPbkBaseContactFieldCollection& aContactFields, + TUint32 aFormattingFlags); + virtual void GetContactTitle( + const MVPbkBaseContactFieldCollection& aContactFields, + TDes& aTitle, + TUint32 aFormattingFlags) = 0; + virtual void GetContactTitleForFind( + const MVPbkBaseContactFieldCollection& aContactFields, + TDes& aTitle, + TUint32 aFormattingFlags) = 0; + + const TDesC& UnnamedText() const; + TBool IsTitleField( + const MVPbkBaseContactField& aContactField) const; + TBool IsTitleFieldType( + const MVPbkFieldType& aFieldType) const; + virtual CVPbkBaseContactFieldTypeListIterator* ActualTitleFieldsLC( + CVPbkFieldTypeRefsList& aFieldTypeList, + const MVPbkBaseContactFieldCollection& aContactFields ) = 0; + virtual TInt MaxTitleLength( + const MVPbkBaseContactFieldCollection& aContactFields, + const TUint32 aFormattingFlags) = 0; + virtual TInt MaxTitleLengthForFind( + const MVPbkBaseContactFieldCollection& aContactFields, + const TUint32 aFormattingFlags) = 0; + virtual TBool IsFindSeparatorChar( TChar aCh ) = 0; + +protected: // New functions + + /** + * Field mapper returns fields from the given contact fields + * in the order defined by iSortOrderManager. Must be called + * from sub class functions + * @param aContactFields current fields + */ + void SetFieldMapper( + const MVPbkBaseContactFieldCollection& aContactFields ); + + /** + * Get contact title according to given sort order positions + * + * @param aTitle a descriptor for adding data + * @param aFormattingFlags flags from the client + * @param aStartingPosition the index of the first type + * in the sort order that is used for title + * @param aEndingPosition the index of the last type + * in the sort order that is used for title + */ + void DoGetContactTitle( + TDes& aTitle, + TUint32 aFormattingFlags, + const TInt aStartingPosition, + const TInt aEndingPosition); + + /** + * Returns the maximum length of the title + * + * @param aFormattingFlags flags from the client + * @param aStartingPosition the index of the first type + * in the sort order that is used for title + * @param aEndingPosition the index of the last type + * in the sort order that is used for title + */ + TInt DoCalculateMaxTitleLength( + const TUint32 aFormattingFlags, + const TInt aStartingPosition, + const TInt aEndingPosition); + + /** + * Return non empty title field types + * + * @param aFieldTypeList target list where field types are appended + * @param aStartingPosition the index of the first type + * in the sort order that is used for title + * @param aEndingPosition the index of the last type + * in the sort order that is used for title + */ + void DoAppendNonEmptyTitleFieldTypesL( + CVPbkFieldTypeRefsList& aFieldTypeList, + const TInt aStartingPosition, + const TInt aEndingPosition); + + /** + * Check if title fields are empty + * + * @param aStartingPosition the index of the first type + * in the sort order that is used for title + * @param aEndingPosition the index of the last type + * in the sort order that is used for title + * @return ETrue if title fields are empty else EFalse + */ + TBool AreTitleFieldsEmpty( + const TInt aStartingPosition, + const TInt aEndingPosition ) const; + +protected: + + /** + * C++ default constructor. + */ + CFscContactNameFormatterBase( + const MVPbkFieldTypeList& aMasterFieldTypeList, + const CPbk2SortOrderManager& aSortOrderManager); + + /** + * By default Symbian 2nd phase constructor is protected. + */ + void BaseConstructL( const TDesC& aUnnamedText, + CVPbkFieldTypeSelector* aTitleFieldSelector ); + +private: // Implementation + TBool RequiresSeparatorBetweenNames( + const TDesC& aLhs, + const TDesC& aRhs) const; + void TakePartOfName( + const MVPbkBaseContactField* aField, + TDes& aTitle, + const TUint32 aFormattingFlags, + const TBool aUseSeparator) const; + void CalculatePartOfName( + const MVPbkBaseContactField* aField, + TInt& aLength, + const TUint32 aFormattingFlags, + const TBool aUseSeparator) const; + +protected: // Data + /// Own: Field mapper + TFscSortOrderFieldMapper iFieldMapper; + +private: // Data + const MVPbkFieldTypeList& iMasterFieldTypeList; + /// Ref: Sort order manager + const CPbk2SortOrderManager& iSortOrderManager; + /// Own: Text for unnamed contacts + HBufC* iUnnamedText; + /// Own: Title field selector + CVPbkFieldTypeSelector* iTitleFieldSelector; + }; + +#endif // CFSCCONTACTNAMEFORMATTERBASE_H +// End of File