emailcontacts/contactactionservice/inc/CFscFieldListBoxModel.h
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailcontacts/contactactionservice/inc/CFscFieldListBoxModel.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,292 @@
+/*
+* 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:  Field list box model.
+ *
+*/
+
+
+#ifndef CFSCFIELDLISTBOXMODEL_H
+#define CFSCFIELDLISTBOXMODEL_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "TFscAppIconId.h"
+#include <bamdesca.h>
+
+// FORWARD DECLARATIONS
+class CPbk2IconArray;
+class CDesC16Array;
+class MFscClipListBoxText;
+class MFscFieldAnalyzer;
+class CFscFieldFormatter;
+class CVPbkContactManager;
+class CFscPresentationContactField;
+class CFscPresentationContactFieldCollection;
+class MPbk2FieldPropertyArray;
+class MVPbkFieldType;
+class CFscContactFieldDynamicProperties;
+
+// CLASS DECLARATION
+
+/**
+ * Phonebook 2 list box model row.
+ *
+ * @internal Only Phonebook 2 internal use supported!
+ */
+NONSHARABLE_CLASS(CFscFieldListBoxRow) : public CBase
+    {
+public: // Constructors and destructor
+
+    /**
+     * Creates a new instance of this class.
+     *
+     * @return  A new instance of this class.
+     */
+    static CFscFieldListBoxRow* NewL();
+
+    /**
+     * Destructor.
+     */
+    ~CFscFieldListBoxRow();
+
+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
+    CFscFieldListBoxRow();
+
+private: // Data
+    /// Own: Column array
+    RPointerArray<HBufC> iColumns;
+    };
+
+/**
+ * Phonebook 2 field list box model.
+ *
+ * @internal Only Phonebook 2 internal use supported!
+ */
+NONSHARABLE_CLASS(CFscFieldListBoxModel) : public CBase,
+public MDesCArray
+    {
+public: // Types
+
+    /**
+     * Column indexes.
+     */
+    enum TColumnIndex
+        {
+        /// Icon column
+        EIconColumn = 0,
+        /// Label column
+        ELabelColumn,
+        /// Content column
+        EContentColumn
+        };
+
+public: // Data structures
+    /**
+     * Construction parameters for CFscFieldListBoxModel.
+     */
+    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.
+         */
+        TParams (
+                const CFscPresentationContactFieldCollection&
+                aFieldCollection,
+                const CVPbkContactManager& aContactManager,
+                const MPbk2FieldPropertyArray& aFieldProperties,
+                const TDesC& aTimeFormat,
+                const CPbk2IconArray& aIconArray,
+                const MFscFieldAnalyzer* aFieldAnalyzer,
+                const CFscContactFieldDynamicProperties* aDynamicProperties ):
+        iFields( aFieldCollection ),
+        iContactManager( aContactManager ),
+        iFieldProperties( aFieldProperties ),
+        iTimeFormat( aTimeFormat ),
+        iIconArray( aIconArray ),
+        iDefaultIconId( EPbk2qgn_prop_nrtyp_empty ),
+        iFieldAnalyzer( aFieldAnalyzer ),
+        iDynamicProperties( aDynamicProperties )
+            {
+            }
+
+    public: // Data
+        /// Ref: Array of fields to display
+        const CFscPresentationContactFieldCollection& 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
+        TFscAppIconId iDefaultIconId;
+        /// Ref: Interface for analyzing field
+        const MFscFieldAnalyzer* iFieldAnalyzer;
+        /// Own: Dynamic properties for contact fields
+        const CFscContactFieldDynamicProperties* iDynamicProperties;
+        };
+
+public: // Constructors and destructor
+
+    /**
+     * Creates a new instance of this class.
+     *
+     * @param aParams   List box model parameters.
+     * @return  A new instance of this class.
+     */
+    static CFscFieldListBoxModel* NewL(
+            TParams& aParams );
+
+    /**
+     * Destructor.
+     */
+    ~CFscFieldListBoxModel();
+
+public: // Interface
+
+    /**
+     * Appends a given row to the end of the model.
+     *
+     * @param aLine     The row to append.
+     */
+    void AppendRowL(
+            CFscFieldListBoxRow* aLine );
+
+    /**
+     * Sets the text clipper to given clipper.
+     *
+     * @param aTextClipper  The clipper to set.
+     */
+    void SetClipper(
+            MFscClipListBoxText& aTextClipper );
+
+    /**
+     * Formats fields. Needs to be call after construction.
+     */
+    void FormatFieldsL();
+
+public: // From MDesCArray
+    TInt MdcaCount() const;
+    TPtrC16 MdcaPoint(
+            TInt aIndex ) const;
+
+private: // Implementation
+    CFscFieldListBoxModel(
+            TParams& aParams );
+    void ConstructL(
+            TParams& aParams );
+    void FormatFieldL(
+            const CFscPresentationContactField& aField,
+            TParams& aParams );
+    void ExpandBuffersL(
+            const CFscFieldListBoxRow& aRow );
+    TPtr ExpandColumnBufferL(
+            TInt aRequiredLength );
+    void ClipTextL(
+            const CFscPresentationContactField& aField,
+            TInt aIndex,
+            TPtr& aColumnText,
+            TInt aColumnIndex ) const;
+    void AppendFieldLabelL(
+            const CFscPresentationContactField& aField,
+            CFscFieldListBoxRow& aRow,
+            TPtr& aColumnBuf );
+    void AppendFieldContentL(
+            const CFscPresentationContactField& aField,
+            const MVPbkFieldType& aFieldType,
+            CFscFieldListBoxRow& aRow,
+            TPtr& aColumnBuf );
+    void AppendIconsToBeginningL(
+            const CFscPresentationContactField& aField,
+            const MVPbkFieldType& aFieldType,
+            CFscFieldListBoxRow& aRow,
+            TParams& aParams );
+    void AppendIconsToEndL(
+            const CFscPresentationContactField& aField,
+            CFscFieldListBoxRow& aRow,
+            TParams& aParams );
+
+private: // Data
+    /// Own: Text row array
+    CArrayPtrFlat<CFscFieldListBoxRow> iRows;
+    /// Own: Buffer storing one formatted listbox row
+    HBufC* iLineBuf;
+    /// Own: Buffer for storing one formatted listbox column
+    HBufC* iColumnBuf;
+    /// Own: Field content formatter
+    CFscFieldFormatter* iFieldFormatter;
+    /// Ref: Object for clipping text
+    MFscClipListBoxText* iTextClipper;
+    /// Own: Dynamic field properties
+    const CFscContactFieldDynamicProperties* iDynamicProperties;
+    /// Own: Parameters
+    TParams iParams;
+    };
+
+#endif // CFscFieldListBoxModel_H
+// End of File