diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookui/Phonebook2/UIControls/inc/CPbk2FieldListBoxModel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/UIControls/inc/CPbk2FieldListBoxModel.h Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,361 @@ +/* +* Copyright (c) 2005-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: Phonebook 2 field list box model. +* +*/ + + +#ifndef CPBK2FIELDLISTBOXMODEL_H +#define CPBK2FIELDLISTBOXMODEL_H + +// INCLUDES +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class CPbk2IconArray; +class CDesC16Array; +class MPbk2ClipListBoxText; +class MPbk2FieldAnalyzer; +class CPbk2FieldFormatter; +class CVPbkContactManager; +class CPbk2PresentationContactField; +class CPbk2PresentationContactFieldCollection; +class MPbk2FieldPropertyArray; +class MVPbkFieldType; +class CPbk2ContactFieldDynamicProperties; +//class CPbk2PresenceIconInfo; + + +// CLASS DECLARATION + +/** + * Phonebook 2 list box model row. + * + * @internal Only Phonebook 2 internal use supported! + */ +NONSHARABLE_CLASS(CPbk2FieldListBoxRow) : public CBase + { + public: // Constructors and destructor + + /** + * Creates a new instance of this class. + * + * @return A new instance of this class. + */ + static CPbk2FieldListBoxRow* NewL(); + + /** + * Destructor. + */ + ~CPbk2FieldListBoxRow(); + + public: // Interface + + /** + * Returns the number of columns in this row. + * + * @return Number of columns in this row. + */ + TInt ColumnCount() const; + + /** + * Returns the descriptor at the given position. + * + * @param aColumnIndex Column index. + * @return The descriptor at the given index. + */ + TPtrC At( + TInt aColumnIndex ) const; + + /** + * Appends a given column to the row. + * + * @param aColumnText Column to append. + */ + void AppendColumnL( + const TDesC& aColumnText ); + + /** + * Returns the total descriptor length of all the columns. + * + * @return Total row length. + */ + TInt TotalLength() const; + + /** + * Returns the maximum column length of this row. + * + * @return Maximum column length. + */ + TInt MaxColumnLength() const; + + private: // Implementation + CPbk2FieldListBoxRow(); + + private: // Data + /// Own: Column array + RPointerArray iColumns; + }; + +/** + * Phonebook 2 field list box model. + * + * @internal Only Phonebook 2 internal use supported! + */ +NONSHARABLE_CLASS(CPbk2FieldListBoxModel) : public CBase, + public MDesCArray + { + public: // Types + + /** + * Column indexes. + */ + enum TColumnIndex + { + /// Icon column + EIconColumn = 0, + /// Label column + ELabelColumn, + /// Content column + EContentColumn + }; + + public: // Data structures + + // structure to keep presence icon position in the common icon array + struct TPresenceIconPosInIconArray + { + // position of the icon in the common icon array + TPbk2IconId iIconId; + // service name + const TDesC16& iServiceName; + TPresenceIconPosInIconArray( const TDesC16& aServiceName ): + iServiceName ( aServiceName ) + { + } + }; + + /** + * Construction parameters for CPbk2FieldListBoxModel. + */ + class TParams + { + public: // Construction + /** + * Constructor. + * + * @param aFieldCollection Array of fields to display. + * @param aContactManager Virtual Phonebook + * contact manager. + * @param aFieldProperties Field properties. + * @param aTimeFormat Time formatting string + * to use. + * @param aIconArray Icon array to use. + * @param aFieldAnalyzer Interface for + * analyzing fields. + * @param aDynamicProperties Dynamic field properties. + * @param aCommMethod Communication method type selected + */ + TParams ( + const CPbk2PresentationContactFieldCollection& + aFieldCollection, + const CVPbkContactManager& aContactManager, + const MPbk2FieldPropertyArray& aFieldProperties, + const TDesC& aTimeFormat, + const CPbk2IconArray& aIconArray, + const MPbk2FieldAnalyzer* aFieldAnalyzer, + const CPbk2ContactFieldDynamicProperties* aDynamicProperties, + const TBool aFieldContentNeedToBeDuplicated, + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aCommMethod = VPbkFieldTypeSelectorFactory::EEmptySelector) : + iFields( aFieldCollection ), + iContactManager( aContactManager ), + iFieldProperties( aFieldProperties ), + iTimeFormat( aTimeFormat ), + iIconArray( aIconArray ), + iDefaultIconId( EPbk2qgn_prop_nrtyp_empty ), + iFieldAnalyzer( aFieldAnalyzer ), + iDynamicProperties( aDynamicProperties ), + iFieldContentNeedToBeDuplicated( aFieldContentNeedToBeDuplicated ), + iCommMethod( aCommMethod ) + { + } + + public: // Data + /// Ref: Array of fields to display + const CPbk2PresentationContactFieldCollection& iFields; + /// Ref: Virtual Phonebook contact manager + const CVPbkContactManager& iContactManager; + /// Ref: Field properties + const MPbk2FieldPropertyArray& iFieldProperties; + /// Ref: Time formatting string + const TDesC& iTimeFormat; + /// Ref: Icon array + const CPbk2IconArray& iIconArray; + /// Own: Default icon id + TPbk2AppIconId iDefaultIconId; + /// Ref: Interface for analyzing field + const MPbk2FieldAnalyzer* iFieldAnalyzer; + /// Own: Dynamic properties for contact fields + const CPbk2ContactFieldDynamicProperties* iDynamicProperties; + /// Own: The flag indicates the field content need to be duplicated + const TBool iFieldContentNeedToBeDuplicated; + /// Own: Communication method type selected + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector iCommMethod; + }; + + public: // Constructors and destructor + + /** + * Creates a new instance of this class. + * + * @param aParams List box model parameters. + * @param aFieldCollectionArray Array of store contact fields arrays. + * @return A new instance of this class. + */ + static CPbk2FieldListBoxModel* NewL( + TParams& aParams, + const TArray* + aFieldCollectionArray = NULL, + const TArray* aPresenceIconsPos = NULL ); + + /** + * Destructor. + */ + ~CPbk2FieldListBoxModel(); + + public: // Interface + + /** + * Appends a given row to the end of the model. + * + * @param aLine The row to append. + */ + void AppendRowL( + CPbk2FieldListBoxRow* aLine ); + + /** + * Sets the text clipper to given clipper. + * + * @param aTextClipper The clipper to set. + */ + void SetClipper( + MPbk2ClipListBoxText& aTextClipper ); + + /** + * Formats fields. Needs to be call after construction. + */ + void FormatFieldsL(); + + /** + * Returns the index of the listbox selected item from the model + * point of view, i.e. taking into account duplicates. + * + * @param aListboxIndex Listbox selected item index + * @return Model index of the selected item + */ + TInt GetModelIndex( TInt aListboxIndex ); + + public: // From MDesCArray + TInt MdcaCount() const; + TPtrC16 MdcaPoint( + TInt aIndex ) const; + + private: // Implementation + CPbk2FieldListBoxModel( + TParams& aParams, + const TArray* + aFieldCollectionArray, + const TArray* aPresenceIconsPos ); + void ConstructL( + TParams& aParams ); + void FormatFieldL( + const CPbk2PresentationContactField& aField, + TParams& aParams ); + void FormatAddressFieldL( + const CPbk2PresentationContactField& aField, + TParams& aParams ); + void ExpandBuffersL( + const CPbk2FieldListBoxRow& aRow ); + TPtr ExpandColumnBufferL( + TInt aRequiredLength ); + void ClipText( + const CPbk2PresentationContactField& aField, + TInt aIndex, + TPtr& aColumnText, + TInt aColumnIndex ) const; + void AppendFieldLabelL( + const CPbk2PresentationContactField& aField, + CPbk2FieldListBoxRow& aRow, + TPtr& aColumnBuf ); + void AppendAddressFieldLabelL( + const CPbk2PresentationContactField& aField, + CPbk2FieldListBoxRow& aRow, + TPtr& aColumnBuf ); + void AppendFieldContentL( + const CPbk2PresentationContactField& aField, + const MVPbkFieldType& aFieldType, + CPbk2FieldListBoxRow& aRow, + TPtr& aColumnBuf ); + void AppendAddressFieldContentL( + const CPbk2PresentationContactField& aField, + CPbk2FieldListBoxRow& aRow, + TPtr& aColumnBuf ); + void AppendIconsToBeginningL( + const CPbk2PresentationContactField& aField, + const MVPbkFieldType& aFieldType, + CPbk2FieldListBoxRow& aRow, + TParams& aParams ); + void AppendAddressIconsToBeginningL( + const CPbk2PresentationContactField& aField, + CPbk2FieldListBoxRow& aRow, + TParams& aParams ); + void AppendIconsToEndL( + const CPbk2PresentationContactField& aField, + CPbk2FieldListBoxRow& aRow, + TParams& aParams ); + TBool DuplicatesExist( TPtrC aContent ); + TBool DuplicatesAddressExist( TPtrC aContent, TInt aIndex ); + TBool IsGeoFieldForAddressL( + const CPbk2PresentationContactField& aField ); + + private: // Data + /// Own: Text row array + CArrayPtrFlat iRows; + /// Own: Buffer storing one formatted listbox row + HBufC* iLineBuf; + /// Own: Buffer for storing one formatted listbox column + HBufC* iColumnBuf; + /// Own: Field content formatter + CPbk2FieldFormatter* iFieldFormatter; + /// Ref: Object for clipping text + MPbk2ClipListBoxText* iTextClipper; + /// Own: Dynamic field properties + const CPbk2ContactFieldDynamicProperties* iDynamicProperties; + /// Own: Parameters + TParams iParams; + /// Ref: Field collection array for additional contacts + const TArray* + iFieldCollectionArray; + /// Own: array of duplicates in the rows + RArray iDuplicatesArray; + /// Ref: Presence icons pos in common icons array + const TArray* iPresenceIconsPos; + }; + +#endif // CPBK2FIELDLISTBOXMODEL_H + +// End of File