phonebookui/Phonebook2/UIControls/inc/CPbk2FieldListBoxModel.h
branchRCL_3
changeset 63 f4a778e096c2
parent 0 e686773b3f54
--- /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