textinput/peninputcommonctrls/inc/peninputdropdownlist/peninputdropdownlist.h
changeset 0 eb1f2e154e89
child 7 a47de9135b21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrls/inc/peninputdropdownlist/peninputdropdownlist.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1418 @@
+/*
+* Copyright (c) 2002-2005 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:  drop-down list control
+*
+*/
+
+
+#ifndef C_CFEPCTRLDROPDOWNLIST_H
+#define C_CFEPCTRLDROPDOWNLIST_H
+
+// INCLUDES
+#include <e32std.h>
+#include <w32std.h>
+#include <barsread.h>
+#include <peninputdropdownlistcontext.h>
+#include <peninputlayoutbasecontrol.h>
+#include <AknsUtils.h>
+
+
+/** class forward decalaration */
+class CCandidate;
+class CPages;
+class CBitmapDb;
+class CListManager;
+class MEventObserver;
+class CBubbleCtrl;
+class TAknTextLineLayout;
+
+/** The max length for fixed text */
+const TInt KMaxFixedTextNumber = 32;
+const TInt KDropDownListCtrlType = EUserCtrlBase | ECtrlBaseCtrl;
+
+/**
+ *  The interface dealing with outer event from any control except the list
+ *
+ *  The interface dealing with outer event from any control except the list
+ *
+ *  @lib FepCtrlDropdownList.lib
+ *  @since S60 v3.2
+ */
+class MListEventHandler
+    {
+    
+public:
+
+    /**
+     * The method will be called when there is event from any control except from the list
+     *
+     * @since S60 v3.2
+     * @param aEventType The event type
+     * @param aCtrl The control who sends out the event
+     * @param aEventData The data relative with the event
+     */    
+    virtual void HandleListOuterEvent(TInt aEventType, CFepUiBaseCtrl* aCtrl, 
+                                      const TDesC& aEventData);  
+    
+    };
+
+/**
+ *  The drop-down list control
+ *
+ *  The drop-down list control
+ *
+ *  @lib FepCtrlDropdownList.lib
+ *  @since S60 v3.2
+ */
+class CFepCtrlDropdownList : public CFepUiBaseCtrl,  
+                             public MFepCtrlDropdownListContext,
+                             public MEventObserver
+    { 
+
+public: // internal type definition
+    /**
+     *  The type of list, expandable or no-expandable
+     *
+     *  The type of list, expandable or no-expandable
+     *
+     *  @lib FepCtrlDropdownList.lib
+     *  @since S60 v3.2
+     */ 
+    enum TListType
+        {
+        EListExpandable,
+        EListExpandableWithBubble,
+        EListNoExpandable,
+        EListNoExpandableWithBubble,
+        EListExpandableWithoutIcon,
+        EListExpandableRollWithIcon,
+		EListExpandableRollWithIconWithBubble,
+        EListExpandableMultiRowWithoutIcon      
+        };
+
+    enum TCandTruncateType
+        {
+        // beginning part of candidate are hide
+        ECandTruncateFromBeginning,
+        // end part of candidate are shown as ellipsis
+        ECandTruncateAsEllipsis,
+        // end part of candidate are hide
+        ECandTruncateFromEnd
+        };
+
+    enum TExpandType
+        {
+        ECandExpandUpward,
+        ECandExpandDownward
+        };
+
+    // horizontal direction of candidate list: shrink and expanded
+    enum THDirection
+        {
+        ECandFromLToR,
+        ECandFromRToL
+        };
+
+public: //Method
+
+    /**
+     * Destructor
+     *
+     * @since S60 v3.2
+     * @return None.
+     */ 
+    IMPORT_C virtual ~CFepCtrlDropdownList();
+
+    /**
+     * Create one CFepCtrlDropdownList object
+     *
+     * @since S60 v3.2
+     * @param aTopLeftPoint The top left point of the drop down list
+     * @param aUiLayout The layout plugin
+     * @param aControlId This control ID
+     * @param aReader The reader from which the bitmaps ID can be read
+     * @param aCellWidth The width of one basic cell
+     * @param aCellHeight The height of one basic cell
+     * @param aNaviWidth The width of navidation
+     * @param aColNum The number of columns in one row
+     * @param aRowNum The number of rows
+     * @param aFont The font used to draw the text
+     * @param aHandler The handle which will deal with outer event to this control
+     * @param aAlignment The alighment used to draw text
+     * @param aTextMargin if alignment is not ECenter, the margin is used      
+     * @param aBorderColor The color of border
+     * @param aBgColor The color of background
+     * @param aNavigationBgColor The background color of navigation area
+     * @param aTextColor The color of text
+     * @param aSpecialTextColor The color of special text
+     * @param aHighLightTextColor The color of highlight text
+     * @param aHighLightBgColor The background color of high light
+     * @param aButtonDownBgColor The background color when button pressing
+     * @return The CFepCtrlDropdownList object.
+     */        
+    IMPORT_C static CFepCtrlDropdownList* NewL(const TPoint& aTopLeftPoint,
+                                                CFepUiLayout* aUiLayout,
+                                                TInt aControlId,
+                                                TResourceReader& aReader,
+                                                const TInt aCellWidth,
+                                                const TInt aCellHeight,
+                                                const TInt aNaviWidth,
+                                                const TInt aColNum,
+                                                const TInt aRowNum,
+                                                const CFont* aFont = NULL,
+                                                MListEventHandler* aHandler = NULL,
+                                                const CGraphicsContext::TTextAlign aAlignment = CGraphicsContext::ECenter,
+                                                const TInt aTextMargin = 3,
+                                                const TRgb aBorderColor = KRgbBlack,
+                                                const TRgb aBgColor = TRgb(0xeeeeee),
+                                                const TRgb aNavigationBgColor = TRgb(0xeeeeee), 
+                                                const TRgb aTextColor = KRgbBlack,
+                                                const TRgb aSpecialTextColor = KRgbBlack,
+                                                const TRgb aHighLightTextColor = KRgbBlack,
+                                                const TRgb aHighLightBgColor = TRgb(0xcccccc),
+                                                const TRgb aButtonDownBgColor = KRgbGray);
+    IMPORT_C static CFepCtrlDropdownList* NewL(CFepUiLayout* aUiLayout,
+                                               TInt aControlId,
+                                               TInt aResId,
+                                               TPoint aTopLeftPoint,
+                                               TSize aCellSize,
+                                               TInt aColNum,
+                                               TInt aRowNum);
+
+    IMPORT_C static CFepCtrlDropdownList* NewL(CFepUiLayout* aUiLayout,
+                                               TInt aControlId,
+                                               TInt aResId,
+                                               TPoint aTopLeftPoint,
+                                               const CFont* aFont,
+                                               TSize aCellSize,
+                                               TInt aNaviWidth,
+                                               TInt aColNum,
+                                               TInt aRowNum,
+                                               TInt aSpinBtnHeight,
+                                               TInt aHorizontalCellMargin = 0,
+                                               TInt aVerticalCellMargin = 0,
+                                               THDirection aDirection = ECandFromLToR,
+                                               TBool aPageShown = ETrue);
+
+    /**
+     * Create one CFepCtrlDropdownList object, need to pop up yourself
+     *
+     * @since S60 v3.2
+     * @param aTopLeftPoint The top left point of the drop down list
+     * @param aUiLayout The layout plugin
+     * @param aControlId This control ID
+     * @param aReader The reader from which the bitmaps ID can be read
+     * @param aCellWidth The width of one basic cell
+     * @param aCellHeight The height of one basic cell
+     * @param aNaviWidth The width of navidation
+     * @param aColNum The number of columns in one row
+     * @param aRowNum The number of rows
+     * @param aFont The font used to draw the text
+     * @param aHandler The handle which will deal with outer event to this control
+     * @param aAlignment The alighment used to draw text
+     * @param aTextMargin if alignment is not ECenter, the margin is used      
+     * @param aBorderColor The color of border
+     * @param aBgColor The color of background
+     * @param aNavigationBgColor The background color of navigation area
+     * @param aTextColor The color of text
+     * @param aSpecialTextColor The color of special text
+     * @param aHighLightTextColor The color of highlight text
+     * @param aHighLightBgColor The background color of high light
+     * @param aButtonDownBgColor The background color when button pressing
+     * @return The CFepCtrlDropdownList object.
+     */        
+    IMPORT_C static CFepCtrlDropdownList* NewLC(const TPoint& aTopLeftPoint,
+                                                CFepUiLayout* aUiLayout,
+                                                TInt aControlId,
+                                                TResourceReader& aReader,
+                                                const TInt aCellWidth,
+                                                const TInt aCellHeight,
+                                                const TInt aNaviWidth,
+                                                const TInt aColNum,
+                                                const TInt aRowNum,
+                                                const CFont* aFont = NULL,
+                                                MListEventHandler* aHandler = NULL,
+                                                const CGraphicsContext::TTextAlign aAlignment = CGraphicsContext::ECenter,
+                                                const TInt aTextMargin = 3,
+                                                const TRgb aBorderColor = KRgbBlack,
+                                                const TRgb aBgColor = TRgb(0xeeeeee),
+                                                const TRgb aNavigationBgColor = TRgb(0xeeeeee), 
+                                                const TRgb aTextColor = KRgbBlack,
+                                                const TRgb aSpecialTextColor = KRgbBlack,
+                                                const TRgb aHighLightTextColor = KRgbBlack,
+                                                const TRgb aHighLightBgColor = TRgb(0xcccccc),
+                                                const TRgb aButtonDownBgColor = KRgbGray);
+
+    /**
+     * Size change function
+     *
+     * @since S60 v3.2
+     * @param aCellWidth The width of one basic cell
+     * @param aCellHeight The height of one basic cell
+     * @param aNaviWidth The width of navidation
+     * @param aTopLeftPoint The top left point of the drop down list
+     * @param aColNum The number of columns in one row
+     * @param aRowNum The number of rows
+     * @return None.
+     */                                                   
+    IMPORT_C void SizeChanged(const TInt aCellWidth, const TInt aCellHeight, 
+                               const TInt aNaviWidth, const TPoint aTopLeftPoint = TPoint(0,0),
+                               const TInt aColNum = 0, const TInt aRowNum = 0);
+    
+    /**
+     * Set top left point of the list
+     *
+     * @since S60 v3.2
+     * @param aTopLeftPoint The top left point of the drop down list
+     * @return None.
+     */                                                   
+    IMPORT_C void SetTopLeftPoint(const TPoint aTopLeftPoint);
+    
+    /**
+     * Set the width of one basic cell
+     *
+     * @since S60 v3.2
+     * @param aCellWidth The width of one basic cell
+     * @return None.
+     */                                                   
+    IMPORT_C void SetCellWidth(const TInt aCellWidth);
+
+    /**
+     * Set the height of one basic cell
+     *
+     * @since S60 v3.2
+     * @param aCellHeight The height of one basic cell
+     * @return None.
+     */                                                   
+    IMPORT_C void SetCellHeight(const TInt aCellHeight);
+
+    /**
+     * Set width of navigation 
+     *
+     * @since S60 v3.2
+     * @param aNaviWidth The width of navidation
+     * @return None.
+     */                                                   
+    IMPORT_C void SetNaviWidth(const TInt aNaviWidth);
+    IMPORT_C void SetSpinBtnHeight(const TInt aHeight);
+    IMPORT_C void SetCellMargin(const TInt aHorizontalMargin, const TInt aVerticalMargin);
+   
+    /**
+     * Set column numbers
+     *
+     * @since S60 v3.2
+     * @param aColNum The number of columns in one row
+     * @return None.
+     */                                                   
+    IMPORT_C void SetColNum(const TInt aColNum);
+    
+    /**
+     * Set or unset highlight for cells.
+     *
+     * @since S60 v3.2
+     * @param aCellIndex Which cell would be set
+     * @param aHighlight The flag of highlight, set highlight if ETrue, otherwise cancel highlight
+     * @return None.
+     */  
+    IMPORT_C void SetHighlightCell(const TInt aCellIndex, TBool aHighlight = ETrue,
+                                   const TBool aIsDraw = ETrue );
+
+    
+    /**
+     * Set row numbers
+     *
+     * @since S60 v3.2
+     * @param aRowNum The number of rows
+     * @return None.
+     */                                                  
+    IMPORT_C void SetRowNum(const TInt aRowNum);
+    
+    /**
+     * Set border color
+     *
+     * @since S60 v3.2
+     * @param aBorderColor The border color
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetBorderColor(TRgb aBorderColor, TBool aReDraw = EFalse);
+
+    /**
+     * Set background color for the whole area
+     *
+     * @since S60 v3.2
+     * @param aBgColor The background color
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetBgColor(TRgb aBgColor, TBool aReDraw = EFalse);
+
+    /**
+     * Set background for navigation area
+     *
+     * @since S60 v3.2
+     * @param aNavigationBgColor The background color of navigation area
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetNavigationBgColor(TRgb aNavigationBgColor, TBool aReDraw = EFalse);
+
+    /**
+     * Set text color
+     *
+     * @since S60 v3.2
+     * @param aTextColor The color used to draw text
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetTextColor(TRgb aTextColor, TBool aReDraw = EFalse);
+
+    /**
+     * Set color for special text
+     *
+     * @since S60 v3.2
+     * @param aSpecialTextColor The color used to draw special text
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetSpecialTextColor(TRgb aSpecialTextColor, TBool aReDraw = EFalse);
+
+    /**
+     * Set color for high light text
+     *
+     * @since S60 v3.2
+     * @param aHighLightTextColor The color used to draw high light text
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetHighLightTextColor(TRgb aHighLightTextColor, TBool aReDraw = EFalse);
+
+    /**
+     * Set background color for highlight
+     *
+     * @since S60 v3.2
+     * @param aHighLightBgColor The background color of high light area
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetHighLightBgColor(TRgb aHighLightBgColor, TBool aReDraw = EFalse);
+   
+    /**
+     * The method will be called when there is event from any control except from the list
+     *
+     * @since S60 v3.2
+     * @param aFont The font used to draw text
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetFont(const CFont* aFont, TBool aReDraw = EFalse);
+
+    /**
+     * Set text alignment
+     *
+     * @since S60 v3.2
+     * @param aAlignment The alignment used to draw text
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetTextAlighment(const CGraphicsContext::TTextAlign aAlignment, 
+                                   TBool aReDraw = EFalse);
+
+    /**
+     * Set text margin if alignment is not ECenter
+     *
+     * @since S60 v3.2
+     * @param aTextMargin the margin used to draw text
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetTextMargin(const TInt aTextMargin, TBool aReDraw = EFalse);
+    
+    /**
+     * set secondary list
+     *
+     * @since S60 v3.2
+     * @param aIndex the cell index need to set new color
+     * @param aBgColor The background color
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void SetSecondaryList(RArray<TInt>& aIndexList, TBool aReDraw = EFalse);
+    
+    /**
+     * Set event handler when there is out event coming
+     *
+     * @since S60 v3.2
+     * @param aHandler The event handler, which has implemented the interface of MListEventHandler
+     * @return None.
+     */                                                   
+    IMPORT_C void SetListEventHandler(MListEventHandler* aHandler);
+
+    /**
+     * Set event id when candidate is selected
+     *
+     * @since S60 v3.2
+     * @param aEventId The event id when candidate is selected
+     * @return The CListMultiRowWithIcon pointer.
+     */                                                   
+    IMPORT_C void SetEventIdForCandidateSelected(TInt aEventId);
+    
+    /**
+     * Set event id when need to get next page candidate
+     *
+     * @since S60 v3.2
+     * @param aEventId The event id need next page candidate
+     * @return None
+     */
+    IMPORT_C void SetEventIdForNextPageCandidate(TInt aEventId);
+    
+    /**
+     * Set event id when need to get previous page candidate
+     *
+     * @since S60 v3.2
+     * @param aEventId The event id need previous page candidate
+     * @return None
+     */
+    IMPORT_C void SetEventIdForPreviousPageCandidate(TInt aEventId);
+    
+    /**
+     * Set event id when need to judge if candidate exist
+     *
+     * @since S60 v3.2
+     * @param aEventId The event id judge if candidate exist
+     * @return None
+     */
+    IMPORT_C void SetEventIdForCandidateExisted(TInt aEventId);
+    
+    /**
+     * Set candidates for the list
+     *
+     * @since S60 v3.2
+     * @param aCandidates the candidates array
+     * @param aListType The list type used when redraw
+     * @param aFixedText The fixed text(only used in English)
+     * @return None.
+     */                                                   
+    IMPORT_C void SetCandidatesL(const RPointerArray<HBufC>& aCandidates, 
+                                 const TListType aListType  = EListExpandable,
+                                 const TDesC& aFixedText = KNullDesC16);
+
+    IMPORT_C void SetCandTruncateType(
+                                const TCandTruncateType aTruncateType = ECandTruncateFromEnd);
+                                 
+    /**
+     * Add candidates for the list
+     *
+     * @since S60 v3.2
+     * @param aCandidates the candidates array
+     * @param aListType The list type used when redraw
+     * @return None.
+     */
+    IMPORT_C void AddCandidatesL(const RPointerArray<HBufC>& aCandidates,
+                                 const TListType aListType  = EListExpandable);
+
+    /**
+     * Reset and clear all candidates in the list and redraw the list
+     *
+     * @since S60 v3.2
+     * @param aListType The list type used when redraw
+     * @return None.
+     */                                              
+    IMPORT_C void ResetAndClear(const TListType aListType = EListNoExpandable);
+
+
+    /**
+     * Fold the expanding list
+     *
+     * @since S60 v3.2
+     * @return None.
+     */                                                   
+    IMPORT_C void FoldList();
+
+// from base class CFepUiBaseCtrl  
+
+    /**
+     * Draw the list
+     *
+     * @since S60 v3.2
+     * @return None
+     */                         
+    IMPORT_C void Draw();                                
+
+    /**
+     * Active the control
+     *
+     * @since S60 v3.2
+     * @return None
+     */                         
+    IMPORT_C void SetActive(TBool aActiveFlag);
+    
+    /**
+     * Get rect of the drop down list
+     *
+     * @since S60 v3.2
+     * @return The rect of the drop down list
+     */  
+    IMPORT_C const TRect& Rect();
+
+    /**
+     * Handle pointer down event
+     *
+     * @since S60 v3.2
+     * @param aPoint The point position relative the layout
+     */                                        
+    IMPORT_C CFepUiBaseCtrl* HandlePointerDownEventL(const TPoint& aPoint);
+    
+    /**
+     * Handle pointer move event
+     *
+     * @since S60 v3.2
+     * @param aPoint The point position relative the layout
+     */                  
+    IMPORT_C CFepUiBaseCtrl* HandlePointerMoveEventL(const TPoint& aPoint);
+    
+    /**
+     * Handle pointer up event
+     *
+     * @since S60 v3.2
+     * @param aPoint The point position relative the layout
+     */                  
+    IMPORT_C CFepUiBaseCtrl* HandlePointerUpEventL(const TPoint& aPoint);
+
+    /**
+     * Handle pointer leave event
+     *
+     * @since S60 v3.2
+     * @param aPoint The point position relative the layout
+     */                  
+    IMPORT_C void HandlePointerLeave(const TPoint& aPoint);
+
+// from interface MEventObserver  
+
+    /**
+     * Handle event 
+     * @since Series 60 3.1
+     * @param aEventType The event type
+     * @param aCtrl The control who sends the event
+     * @param aEventData The event data
+     * @return None
+     */  
+    IMPORT_C void HandleControlEvent(TInt aEventType, CFepUiBaseCtrl* aCtrl, 
+                                     const TDesC& aEventData);
+
+// from base class CFepUiBaseCtrl   
+   
+    /**
+     * Move the drop down list
+     * @since Series 60 3.1
+     * @param aOffset The offset point
+     * @return None
+     */     
+    IMPORT_C void Move(const TPoint& aOffset);
+
+    /**
+     * Hide the control
+     * @since Series 60 3.1
+     * @return None
+     */     
+    IMPORT_C void OnDeActivate();  
+
+    /**
+     * Hide or show dropdown list.
+     *     
+     * @param aFlag ETrue if want to hide the control.
+     */                                               
+    IMPORT_C void Hide( TBool aFlag );      
+    
+// from interface MContext
+
+    /**
+     * Get the candidate count
+     *
+     * @since S60 v3.2
+     * @return the candidate count.
+     */                                                   
+    IMPORT_C TInt CandidateCount() const;
+
+    /**
+     * Enable multi color or not
+     *
+     * @since S60 v3.2
+     * @param aEnable Enable mutil color if ETrue, otherwise disable
+     * @param aReDraw Redraw if ETrue, otherwise not redraw
+     * @return None.
+     */                                                   
+    IMPORT_C void EnableSecondary(TBool aEnable, TBool aReDraw = EFalse);
+
+    /**
+     * Get the flag of enable or disable multi color
+     *
+     * @since S60 v3.2
+     * @return ETrue if enable, or EFalse.
+     */                                                     
+    IMPORT_C TBool IsEnableSecondary() const;
+    
+    /**
+     * This function creates drop down list from resource, before calling 
+     * this function, caller should set resource id of drop down list first
+     * 
+     * @since S60 v3.2
+     * @return None
+     */
+    IMPORT_C void ConstructFromResourceL();
+
+    /**
+     * Get secondary list
+     *
+     * @since S60 v3.2
+     * @return color array.
+     */                                                   
+    const RArray<TInt>& GetSecondaryList() const;
+
+    /**
+     * Draw mask for the appointed rect
+     * @since Series 60 3.1
+     * @param aRect The rect which will be redrawn
+     * @return None
+     */     
+    void DrawMask(TRect aRect);
+
+    /**
+     * Active bitmap context
+     * @since Series 60 3.1
+     * @return None
+     */         
+    void ActivateBitmapContext();
+    
+    /**
+     * Get the graphics context
+     * @since Series 60 3.1
+     * @return The graphics context
+     */ 
+    CFbsBitGc* Gc();
+
+    /**
+     * Get the first candidate visible
+     *
+     * @since S60 v3.2
+     * @return The first candidate index.
+     */
+    TInt GetFirstCandidateIndex();
+
+    /**
+     * Get the first candidate visible
+     *
+     * @since S60 v3.2
+     * @return The last candidate index.
+     */
+    TInt GetLastCandidateIndex();
+
+    /**
+     * Set the first candidate visible
+     *
+     * @since S60 v3.2
+     * @return None.
+     */
+    void SetFirstCandidateIndex(TInt aFirstIndex);
+
+    /**
+     * Set the first candidate visible
+     *
+     * @since S60 v3.2
+     * @return None.
+     */
+    void SetLastCandidateIndex(TInt aLastIndex);
+    
+    /**
+     * Get the appointed candidate
+     * @since Series 60 3.1
+     * @param aIndex The index which will be check out
+     * @return The appointed candidate
+     */ 
+    CCandidate* GetCandidate(TInt aIndex);
+    
+    /**
+     * Get top left point
+     * @since Series 60 3.1
+     * @return The top left point
+     */ 
+    TPoint GetTopLeftPoint();
+    
+    /**
+     * Get cell width
+     * @since Series 60 3.1
+     * @return The cell width
+     */ 
+    TInt GetCellWidth();
+    
+    /**
+     * Get cell height
+     * @since Series 60 3.1
+     * @return The cell height
+     */ 
+    TInt GetCellHeight();
+    
+    /**
+     * Get navigation width
+     * @since Series 60 3.1
+     * @return The navigation width
+     */ 
+    TInt GetNaviWidth();
+    
+    TInt GetSpinBtnHeight();
+    TInt GetCellHorizontalMargin();
+    TInt GetCellVerticalMargin();
+    TInt ListType();
+    TInt OneRowStartCandIdx();
+    void SetOneRowStartCandIdx(TInt aOriginalCandIdx);
+    TInt GetOriginalFirstCandIdx();
+    void SetOriginalFirstCandIdx(TInt aOriginalFirstCandIdx);
+    TInt CandTruncateType();
+    CList* ActiveList();
+    void SetUpdateListReDrawFlag(TBool aReDraw);
+    TBool GetUpdateListRedrawFlag();
+    IMPORT_C void SetFuzzyBoundry(TInt aFuzzyBoundry);
+    TInt FuzzyBoundry();
+    TInt CandExpandType();
+    IMPORT_C void SetCandExpandType(const TExpandType aType = ECandExpandDownward);
+    TInt CandHDirection();
+    inline void SetHDirection(const THDirection aDirection = ECandFromLToR);
+
+    // when drop down list is expandable, decide pageup/pagedown shown or not 
+    TBool PageCtrlShown();
+    inline void SetPageCtrlShown(TBool aShown = ETrue);
+
+    /**
+     * Get columns number
+     * @since Series 60 3.1
+     * @return The top left point
+     */ 
+    TInt GetColNum();
+
+    /**
+     * Get rows number
+     * @since Series 60 3.1
+     * @return The top left point
+     */ 
+    TInt GetRowNum();
+
+    /**
+     * Get the font used to draw text
+     * @since Series 60 3.1
+     * @return The font used to draw text
+     */ 
+    const CFont* GetFont();
+    
+    /**
+     * Get alignment used to draw the text
+     * @since Series 60 3.1
+     * @return The alignment used to draw the text
+     */ 
+    CGraphicsContext::TTextAlign GetAlignment();
+
+    /**
+     * Get text margin used to draw the text
+     * @since S60 v3.2
+     * @return The margin used to draw the text
+     */ 
+    TInt GetTextMargin();
+        
+    /**
+     * Get background color
+     * @since Series 60 3.1
+     * @return The background color
+     */ 
+    TRgb GetBgColor();
+
+    /**
+     * Get button down color
+     * @since Series 60 3.1
+     * @return The background color
+     */ 
+    TRgb GetButtonDownBgColor();    
+        
+    /**
+     * Get border color
+     * @since Series 60 3.1
+     * @return The border color
+     */ 
+    TRgb GetBorderColor();
+    
+    /**
+     * Get text color
+     * @since Series 60 3.1
+     * @return The text color
+     */ 
+    TRgb GetTextColor();    
+        
+    /**
+     * Get background color for highlight area
+     * @since Series 60 3.1
+     * @return The background color for highlight area
+     */ 
+    TRgb GetHighLightBgColor();
+    
+    /**
+     * Get high light text color
+     * @since Series 60 3.1
+     * @return The high light text color
+     */ 
+    TRgb GetHighLightTextColor();
+    
+    /**
+     * Get special text color
+     * @since Series 60 3.1
+     * @return The special text color
+     */ 
+    TRgb GetSpecialTextColor();
+    
+    /**
+     * Get fixed text
+     * @since Series 60 3.1
+     * @return The fixed text
+     */ 
+    TDesC GetFixedText();
+
+    /**
+     * Get highlight cell list
+     * @since Series 60 3.1
+     * @return The highlight cell list
+     */
+    const RArray<TInt>& GetHighlightList() const;
+
+    /**
+     * Get page manager
+     * @since Series 60 3.1
+     * @return The page manager
+     */
+    CPages* GetPages();
+
+    /**
+     * Get bitmap manager
+     * @since Series 60 3.1
+     * @return The bitmap manager
+     */    
+    CBitmapDb* GetBitmapDb();
+        
+    /**
+     * Report event when candidate is selected
+     * @since Series 60 3.1
+     * @param aCandidate The candidate string
+     * @param aSelectedIndex The index of the selected candidate
+     * @return None
+     */
+    void ReportCandidateSelectEventL(const TDesC& aCandidate, const TInt aSelectedIndex);
+    
+    /**
+     * Invalidate some rect and redraw it
+     * @since Series 60 3.1
+     * @param aRect The rect which will be redrawn
+     * @param aUpdateAll Update all or not
+     * @return None
+     */
+    void Invalidate(const TRect& aRect,TBool aUpdateAll = EFalse); 
+
+    /**
+     * Change active list
+     *
+     * @since S60 v3.2
+     * @param aList The new active list
+     * @param aLastIndex The last visible candidate index  
+     * @return None.
+     */
+    void ChangeActiveList(CList* aList, TInt aLastIndex = 0); 
+    
+    /**
+     * Get pen size
+     *
+     * @since S60 v3.2
+     * @return The pen size.
+     */
+    const TSize GetPenSize();
+                                                                  
+    /**
+     * Set pointer capture
+     *
+     * @since S60 v3.2
+     * @param aFlag ETrue to capture pointer, otherwise EFalse
+     * @return None.
+     */
+    void SetCapture(TBool aFlag);
+    
+    /**
+     * Notify get next candidate page
+     *
+     * @since S60 v3.2
+     * @return None.
+     */
+    void NotifyGetNextPage();
+    
+    /**
+     * Notify get previous candidate page
+     *
+     * @since S60 v3.2
+     * @return None.
+     */
+    void NotifyGetPreviousPage();
+    
+    /**
+     * Notify close candidate page
+     *
+     * @since S60 v3.2
+     * @return None.
+     */
+    void NotifyClosePage();    
+    
+    /**
+     * Set flag of if next candidate after last page eixsted
+     *
+     * @since S60 v3.2
+     * @param aFlag ETrue if candidate exist, otherwise EFalse
+     * @return None
+     */
+    IMPORT_C void SetFlagCandidateExist(TBool aFlag);
+
+    /**
+     * Judge if next candidate existed
+     *
+     * @since S60 v3.2
+     * @return ETrue if candidate exist, otherwise EFalse
+     */
+    TBool NextCandidateExist();
+
+    /**
+     * Auto change active list
+     *
+     * @since S60 v3.2
+     * @param aLastIndex The last visible candidate index  
+     * @return None.
+     */
+    void AutoChangeActiveList( TInt aLastIndex = 0 ); 
+    
+    /**
+     * Set dropdown list image ID
+     *
+     * @since S60 v3.2
+     * @param TDropdownListDrawInfo image information
+     * @return None.
+     */
+	IMPORT_C void SetDropdownListImgID(TDropdownListDrawInfo aDropdownListDrawInfo);
+	
+    /**
+     * Show preview bubble
+     *
+     * @since S60 v3.2
+     * @param aFlag Show/Hide flag
+     * @return None.
+     */	
+	IMPORT_C void ShowBubble(TBool aFlag);
+	
+    /**
+     * Set bubble bitmap param
+     *
+     * @since S60 v3.2
+     * @param aBmpId 
+     * @param aMaskBmpId
+     * @param aBgSkinId
+     * @return None.
+     */		
+	IMPORT_C void SetBubbleBitmapParam(CFbsBitmap* aBmpId,
+                                       CFbsBitmap* aMaskBmpId ,
+                                       TAknsItemID aBgSkinId );
+    
+    /**
+     * Set bubble text font
+     *
+     * @since S60 v3.2
+     * @param aFont Text font
+     * @return None.
+     */		                                   
+    IMPORT_C void SetBubbleTextFont(const CFont* aFont);                                  
+                                       
+    /**
+     * Set bubble text format
+     *
+     * @since S60 v3.2
+     * @param aTextFormat Text format
+     * @return None.
+     */		                                   	
+	IMPORT_C void SetTextFormat(TAknTextLineLayout aTextFormat);
+		
+    /**
+     * Set bubble text format
+     *
+     * @since S60 v3.2
+     * @param aLeftDiff
+     * @param aTopDiff
+     * @param aRightDiff
+     * @param aBottomDiff
+     * @return None.
+     */		                                   	
+	IMPORT_C void SetFrameDiff(TInt aLeftDiff, TInt aTopDiff,
+                               TInt aRightDiff,TInt aBottomDiff);
+	
+    /**
+     * Set bubble size
+     *
+     * @since S60 v3.2
+     * @param aSize
+     * @return None.
+     */		                                   		
+	IMPORT_C void SetBubbleSize(const TSize& aSize);
+	
+    /**
+     * show preview bubble
+     *
+     * @since S60 v3.2
+     * @param aRect
+     * @param aText
+     * @return None.
+     */		                                   		
+	void DrawBubble(const TRect aRect, const TDesC& aText);
+	
+    /**
+     * Hide preview bubble
+     *
+     * @since S60 v3.2
+     * @return None.
+     */		                                   		
+	void ClearBubble();
+
+    /**
+     * ReDraw preview bubble
+     *
+     * @since S60 v3.2
+     * @return None.
+     */		                                   		
+	void ReDrawBubble();
+	
+	CFepUiLayout* UiLayout();
+
+    /**
+     * Redraw dropdown list
+     *
+     * @since S60 v3.2
+     * @param aRect Redraw rect.
+     * @return None.
+     */		                                   		
+    IMPORT_C void ReDrawRect(const TRect& aRect);
+protected:    
+
+    /**
+     * Constructor
+     *
+     * @since S60 v3.2
+     * @param aTopLeftPoint The top left point of the drop down list
+     * @param aUiLayout The layout plugin
+     * @param aControlId This control ID
+     * @param aReader The reader from which the bitmaps ID can be read
+     * @param aCellWidth The width of one basic cell
+     * @param aCellHeight The height of one basic cell
+     * @param aNaviWidth The width of navidation
+     * @param aColNum The number of columns in one row
+     * @param aRowNum The number of rows
+     * @param aFont The font used to draw the text
+     * @param aHandler The handle which will deal with outer event to this control
+     * @param aAlignment The alignment used to draw text
+     * @param aTextMargin if alignment is not ECenter, the margin is used 
+     * @param aBorderColor The color of border
+     * @param aBgColor The color of background
+     * @param aNavigationBgColor The background color of navigation area
+     * @param aTextColor The color of text
+     * @param aSpecialTextColor The color of special text
+     * @param aHighLightTextColor The color of highlight text
+     * @param aHighLightBgColor The background color of high light
+     * @param aButtonDownBgColor The background color when button pressing
+     */
+    CFepCtrlDropdownList(const TPoint& aTopLeftPoint,
+                         CFepUiLayout* aUiLayout,
+                         TInt aControlId,
+                         const TInt aCellWidth,
+                         const TInt aCellHeight,
+                         const TInt aNaviWidth,
+                         const TInt aColNum,
+                         const TInt aRowNum,
+                         const CFont* aFont,
+                         MListEventHandler* aHandler,                               
+                         const CGraphicsContext::TTextAlign aAlignment,
+                         const TInt aTextMargin,
+                         const TRgb aBorderColor,
+                         const TRgb aBgColor,
+                         const TRgb aNavigationBgColor, 
+                         const TRgb aTextColor,
+                         const TRgb aSpecialTextColor,
+                         const TRgb aHighLightTextColor,
+                         const TRgb aHighLighttBgColor,
+                         const TRgb aButtonDownBgColor);
+                         
+    CFepCtrlDropdownList(CFepUiLayout* aUiLayout,
+                         TInt aControlId,
+                         TPoint aTopLeftPoint,
+                         TSize aCellSize,
+                         TInt aColNum,
+                         TInt aRowNum);
+                         
+    CFepCtrlDropdownList(CFepUiLayout* aUiLayout,
+                         TInt aControlId,
+                         TInt aResId,
+                         TPoint aTopLeftPoint,
+                         const CFont* aFont,
+                         TSize aCellSize,
+                         TInt aNaviWidth,
+                         TInt aColNum,
+                         TInt aRowNum,
+                         TInt aSpinBtnHeight,
+                         TInt aHorizontalCellMargin,
+                         TInt aVerticalCellMargin,
+                                               THDirection aDirection,
+                                               TBool aPageShown);
+                         
+
+        
+    /**
+     * 2nd construct function
+     * @since Series 60 3.1
+     * @param aTopLeftPoint The top left point
+     * @param aReader The reader from which the bitmaps ID can be read
+     * @return None
+     */ 
+    void ConstructL(const TPoint& aTopLeftPoint, TResourceReader& aReader);
+
+    void ConstructL(TPoint aTopLeftPoint, TInt aResId);
+    
+private:
+
+    /**
+     * The list manager
+     * Not own
+     */
+    CListManager* iListManager;
+        
+    /**
+     * The bitmap database
+     * Own
+     */
+    CBitmapDb* iBitmapDb;
+
+    /**
+     * The pages manager
+     * Own
+     */
+    CPages* iPages;
+
+    /**
+     * The candidate list
+     * Own
+     */
+    RPointerArray<CCandidate> iCandidatelist;
+    
+    /**
+     * The candidate color list
+     * Own
+     */
+    RArray<TInt> iSecondaryList;
+
+    /**
+     * The high light list
+     * Own
+     */
+    RArray<TInt> iHighlightList;
+
+    /**
+     * The flag of multi color enable or disable
+     */
+    TBool iEnableSecondary;
+      
+    /**
+     * The first candidate index in the list
+     */
+    TInt iFirstCandidateIndex;
+
+    /**
+     * The last candidate index in the list
+     */
+    TInt iLastCandidateIndex;
+
+    /**
+     * The font used to draw the text
+     * Own
+     */
+    const CFont* iFont;
+    
+    const CFont* iBubbleFont;
+
+    /**
+     * Cell width
+     */
+    TInt iCellWidth;
+
+    /**
+     * Cell height
+     */
+    TInt iCellHeight;
+
+    /**
+     * navigation width
+     */
+    TInt iNaviWidth;
+    
+    TInt iSpinBtnHeight;
+    TInt iCellHorizontalMargin;
+    TInt iCellVerticalMargin;
+    TInt iOriginalCandIdx;
+    TInt iOriginalFirstCandIdx;
+    TBool iUpdateListReDraw;
+
+    /**
+     * alignment used to draw the text
+     */
+    CGraphicsContext::TTextAlign iAlignment;
+
+    /**
+     * the margin used to draw the text if alignment is not ECenter
+     */
+    TInt iTextMargin;
+
+    /**
+     * The columns number
+     */
+    TInt iColNum;
+
+    /**
+     * The rows number
+     */
+    TInt iRowNum;
+
+    /**
+     * The border color
+     */
+    TRgb iBorderColor;
+
+    /**
+     * The background color of the whole list
+     */
+    TRgb iBgColor;
+
+    /**
+     * The navigation background color
+     */
+    TRgb iNavigationBgColor;
+
+    /**
+     * The text color
+     */
+    TRgb iTextColor;
+
+    /**
+     * The special text color
+     */
+    TRgb iSpecialTextColor;
+
+    /**
+     * The highlight text color
+     */
+    TRgb iHighLightTextColor;
+
+    /**
+     * The background color of highlight area 
+     */
+    TRgb iHighLightBgColor;
+
+    /**
+     * The background color when button down
+     */
+    TRgb iButtonDownBgColor;
+
+    /**
+     * The top left point the list
+     */
+    TPoint iTopLeftPoint;
+
+    /**
+     * The fixed text
+     */
+    TBuf<KMaxFixedTextNumber> iFixedText;
+    
+    /**
+     * The event ID for candidate selected
+     */
+    TInt iEventIdForCandidateSelected;
+    
+    /**
+     * The event ID for next page candidate
+     */
+    TInt iEventIdForNextPageCandidate;
+    
+    /**
+     * The event ID for previous page candidate
+     */
+    TInt iEventIdForPreviousPageCandidate;
+    
+    /**
+     * The event ID for judge if candidate existed
+     */
+    TInt iEventIdForCandidateExisted;
+
+    /**
+     * The event handler when out event coming
+     * Not own
+     */
+    MListEventHandler* iListEventHandler;
+
+    /**
+     * The first time construct flag of drop down list
+     */
+    TBool iFirstTimeConstruct;
+    
+    /**
+     * The flag to indicate that candidate existed or not at given position
+     */
+    TBool iCandidateExisted;
+    
+    /**
+     * The type of drop down list.
+     */
+    TListType iListType;
+
+    TCandTruncateType iCandTruncateType;
+
+    TInt iFuzzyBoundry;
+    
+    TExpandType iCandExpandType;
+    
+    THDirection iCandHDirection;
+    
+    TBool iPageCtrlShown;
+    
+    CBubbleCtrl* iBubbleCtrl;
+    
+    TBool iIsShowBubble;
+    
+    TSize iBubbleSize;
+    
+    TInt iBubbleVerticalMargin;
+    };    
+        
+#endif // C_CFEPCTRLDROPDOWNLIST_H
+
+inline void CFepCtrlDropdownList::SetHDirection(const THDirection aDirection)
+    {
+    iCandHDirection = aDirection;
+    }
+
+inline void CFepCtrlDropdownList::SetPageCtrlShown(TBool aShown)
+    {
+    iPageCtrlShown = aShown;
+    }
+// End Of File