--- /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 <e32base.h>
+#include <TPbk2AppIconId.h>
+#include <bamdesca.h>
+#include <VPbkFieldTypeSelectorFactory.h>
+
+// 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<HBufC> 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<CPbk2PresentationContactFieldCollection*>*
+ aFieldCollectionArray = NULL,
+ const TArray<TPresenceIconPosInIconArray>* 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<CPbk2PresentationContactFieldCollection*>*
+ aFieldCollectionArray,
+ const TArray<TPresenceIconPosInIconArray>* 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<CPbk2FieldListBoxRow> 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<CPbk2PresentationContactFieldCollection*>*
+ iFieldCollectionArray;
+ /// Own: array of duplicates in the rows
+ RArray<TInt> iDuplicatesArray;
+ /// Ref: Presence icons pos in common icons array
+ const TArray<TPresenceIconPosInIconArray>* iPresenceIconsPos;
+ };
+
+#endif // CPBK2FIELDLISTBOXMODEL_H
+
+// End of File