textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h
changeset 0 eb1f2e154e89
child 5 a47de9135b21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1193 @@
+/*
+* Copyright (c) 2005-2006 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:  header file of virtual keyboard control
+*
+*/
+
+#ifndef C_CVIRTUALKEYBOARD_H
+#define C_CVIRTUALKEYBOARD_H
+
+#include <AknsConstants.h>
+#include <AknLayout2Def.h>
+#include <AknsItemID.h>
+
+#include "peninputlayoutbutton.h"
+#include "peninputlayoutctrlgroup.h"
+class CVirtualKey;
+class CVirtualKeyCtrl;
+class CBubbleCtrl;
+class CPenInputColorIcon;
+   
+#define INVALID_COLOR_GROUP -1
+   
+typedef struct TVirtualKeyEventData_Tag
+    {
+    TKeyEvent       iKeyEvent; //key event
+    TPtrC           iKeyData;  //data associated with the key
+    CVirtualKey*    iKey;	   // virtual key
+    } TVirtualKeyEventData;
+    
+enum TVirtualKeyBmpType
+    {
+    EKeyBmpNormal,
+    EKeyBmpNormalMask,
+    EKeyBmpHighlight,
+    EKeyBmpHighlightMask,
+    EKeyBmpDim,
+    EkeyBmpDimMask,
+    EKeyBmpLastType = EkeyBmpDimMask
+    };
+    
+enum TVirtualKeyTextPos
+    {
+    EPosLeft,
+    EPosRight1,
+    EPosRight2,
+    EPosRight3,
+    EPosLast = EPosRight3
+    };
+    
+enum TVirtualKeyIrregularKeyType
+    {
+    EKeyLeftDown,
+    EKeyMiddleUp,
+    EKeyMiddleDown,
+    EKeyRightDown,
+    EKeyRightUp
+    };
+
+enum TVirtualKeyIrregularKeyState
+    {
+    EKeyStateNormal,
+    EKeyStateNormalMask,
+    EKeyStatePressed,
+    EKeyStatePressedMask,
+    EKeyStateDimmed,
+    EKeyStateDimmedMask
+    };
+
+struct TVirtualKeyDrawInfo
+    {
+    TAknsItemID iVKDimLeftImgID;
+    TAknsItemID iVKDimMiddleImgID;
+    TAknsItemID iVKDimRightImgID;
+
+    TAknsItemID iVKLeftImgID;
+    TAknsItemID iVKMiddleImgID;
+    TAknsItemID iVKRightImgID;
+    
+    TAknsItemID iVKPressedLeftImgID;
+    TAknsItemID iVKPressedMiddleImgID;
+    TAknsItemID iVKPressedRightImgID;
+    
+    TRgb iVKHighlightColor;
+    
+    TBool iSupportSkin;
+    
+    TVirtualKeyDrawInfo(TAknsItemID aVKDimLeftImgID,
+                          TAknsItemID aVKDimMiddleImgID,
+                          TAknsItemID aVKDimRightImgID,
+                          
+                          TAknsItemID aVKLeftImgID,
+                          TAknsItemID aVKMiddleImgID,
+                          TAknsItemID aVKRightImgID,
+                      
+                          TAknsItemID aVKPressedLeftImgID,
+                          TAknsItemID aVKPressedMiddleImgID,
+                          TAknsItemID aVKPressedRightImgID,
+
+                          TRgb aVKHighlightColor,
+                          TBool aSupportSkin = EFalse)
+        {
+        
+        iVKDimLeftImgID = aVKDimLeftImgID;
+        iVKDimMiddleImgID = aVKDimMiddleImgID;
+        iVKDimRightImgID = aVKDimRightImgID;
+            
+        iVKLeftImgID = aVKLeftImgID;
+        iVKMiddleImgID = aVKMiddleImgID;
+        iVKRightImgID = aVKRightImgID;
+
+        iVKPressedLeftImgID = aVKPressedLeftImgID;
+        iVKPressedMiddleImgID = aVKPressedMiddleImgID;
+        iVKPressedRightImgID = aVKPressedRightImgID;      
+        
+        iVKHighlightColor = aVKHighlightColor;
+        
+        iSupportSkin = aSupportSkin;
+            
+        };
+        
+    TVirtualKeyDrawInfo()
+        {
+        iSupportSkin = EFalse;
+        };
+    };    
+
+//class CVirtualKeyboard
+/**
+ *  CVirtualKeyboard
+ *
+ *  Keyboard control, it consist of virtual keys
+ *
+ *  @lib feplayoutcontrol.lib  
+ *  @since S60 V4.0
+ */
+class CVirtualKeyboard : public CControlGroup
+    {
+protected:    
+    enum TVirtualKeyEvent 
+    	{
+    	EVirtualKeyDown,
+    	EVirtualKeyUp
+    	};
+public: 
+    /**
+     * class factory function
+     *
+     * @since S60 V4.0     
+     * @param aRect The keyboard position relative to layout
+     * @param aUiLayout The layout contains the keyboard. Owner ship not transferred.
+     * @param aControlId Id for this keyboard control
+     * @param aFontSpec The font used for key drawing.
+     */
+    IMPORT_C static CVirtualKeyboard* NewL(const TRect& aRect, 
+                                           CFepUiLayout* aUiLayout,
+                                           TInt aControlId,
+                                           const TFontSpec& aFontSpec,
+                                           TBool aIrregular = EFalse);
+                                                        
+    /**
+     * class factory function
+     *
+     * @since S60 V4.0     
+     * @param aRect The keyboard position relative to layout
+     * @param aUiLayout The layout contains the keyboard. Owner ship not transferred.
+     * @param aControlId Id for this keyboard control
+     * @param aFont The font used for key drawing.
+     */
+    IMPORT_C static CVirtualKeyboard* NewL(const TRect& aRect, 
+                            CFepUiLayout* aUiLayout,TInt aControlId,
+                                           CFont* aFont,
+                                           TBool aIrregular = EFalse);
+
+    /**
+     * Destructor
+     *
+     * @since S60 V4.0     
+     */
+    IMPORT_C virtual ~CVirtualKeyboard();
+
+    /**
+     * Add a key to keyboard
+     *
+     * @since S60 V4.0     
+     * @param aKey The key to be added
+     */    
+    IMPORT_C virtual void AddKeyL(CVirtualKey* aKey);
+
+    /**
+     * Add a raw key to keyboard. Raw key works like a hardware key which
+     * will generates( by simulating) raw key event when it's pressed.
+     *
+     * @since S60 V4.0     
+     * @param aKey The key to be added
+     */    
+    IMPORT_C virtual void AddRawKeyL(CVirtualKey* aKey);
+    
+    /**
+     * Create and add a key to keyboard
+     *
+     * @since S60 V4.0     
+     * @param aCode The key code for the adding key
+     * @param aScanCode The scancode for the adding key
+     * @param aRect The key position. Relative to key board
+     * @param aTextRect The rect for key drawing
+     * @param aBaseline The baseline for char drawing
+     * @param aHighlightBmpIdx The bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.
+     * @param aHighlightMaskIdx The mask bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.
+     */    
+    IMPORT_C void CreateKeyL(TUint aCode, TUint aScanCode, const TRect& aRect,
+                                const TRect& aTextRect, TInt aBaseline,
+                                TInt aHighlightBmpIdx = -1,
+                                TInt aHighlightMaskBmpId = -1);
+
+    /**
+     * Create and add a key to keyboard
+     *
+     * @since S60 V4.0     
+     * @param aCode The key code for the adding key
+     * @param aScanCode The scancode for the adding key
+     * @param aRect The key position. Relative to key board
+     * @param aTextRect The rect for key drawing
+     * @param aBaseline The baseline for char drawing
+     * @param aHighlightBmpIdx The bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.
+     * @param aHighlightMaskIdx The mask bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.      
+     */    
+    IMPORT_C void CreateKeyL(const TDesC& aCode, TUint aScanCode, 
+                             const TRect& aRect,const TRect& aTextRect, 
+                             TInt aBaseline, TInt aHighlightBmpIdx = -1,
+                             TInt aHighlightMaskBmpId = -1);
+
+    /**
+     * Create and add a raw key to keyboard
+     *
+     * @since S60 V4.0     
+     * @param aCode The key code for the adding key
+     * @param aScanCode The scancode for the adding key
+     * @param aRect The key position. Relative to key board
+     * @param aTextRect The rect for key drawing
+     * @param aBaseline The baseline for char drawing
+     * @param aHighlightBmpIdx The bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.
+     * @param aHighlightMaskIdx The mask bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.
+     */    
+    IMPORT_C void CreateRawKeyL(TUint aCode, TUint aScanCode, const TRect& aRect,
+                                const TRect& aTextRect, TInt aBaseline,
+                                TInt aHighlightBmpIdx = -1,
+                                TInt aHighlightMaskBmpId = -1);
+
+    /**
+     * Create and add a raw key to keyboard
+     *
+     * @since S60 V4.0     
+     * @param aCode The key code for the adding key
+     * @param aScanCode The scancode for the adding key
+     * @param aRect The key position. Relative to key board
+     * @param aTextRect The rect for key drawing
+     * @param aBaseline The baseline for char drawing
+     * @param aHighlightBmpIdx The bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.
+     * @param aHighlightMaskIdx The mask bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.      
+     */    
+    IMPORT_C void CreateRawKeyL(const TDesC& aCode, TUint aScanCode, 
+                             const TRect& aRect,const TRect& aTextRect, 
+                             TInt aBaseline, TInt aHighlightBmpIdx = -1,
+                             TInt aHighlightMaskBmpId = -1);
+           
+    IMPORT_C void CreateRawKeyL(RPointerArray<HBufC>& aUnicodesList,
+                                TInt aScanCode,
+                                const TRect& aRect);
+
+    /**
+     * Remove a key from keyboard. Key is not destroyed.
+     *
+     * @since S60 V4.0     
+     * @param aKey The key to be removed
+     */                                 
+    IMPORT_C void RemoveKey(CVirtualKey* aKey);                    
+
+    /**
+     * Remove a key from keyboard. Key is not destroyed.
+     *
+     * @since S60 V4.0     
+     * @param aIndex The key index. Index is not checked.
+     */                                 
+    inline void RemoveKey(TInt aIndex);                    
+
+
+    /* Set the font for candidate
+     *
+     * @since S60 V4.0
+     * @param aFontSpec the font spec to be used.
+     */                                                   
+    IMPORT_C void SetFont(const TFontSpec& aFontSpec);
+    
+    /**
+     * Set font information
+     *
+     * @since S60 V4.0          
+     * @param aFont The font info for key drawing.Ownership not transferred
+     */
+    IMPORT_C void SetFont(const CFont* aFont);    
+    
+    /**
+     * Set key font color information.
+     *     
+     * @since S60 V4.0          
+     * @param aFontColor The font color info for key drawing.
+     */
+    IMPORT_C void SetFontColor( const TRgb aFontColor );
+    
+    /**
+     * Dim key
+     *
+     * @since S60 V4.0          
+     * @param aKey The key to be dimmed
+     */    
+    IMPORT_C void DimKey(CVirtualKey* aKey,TBool aFlag);
+    
+    IMPORT_C void EnableKeyFeedback( CVirtualKey* aKey, TBool aEnable );
+    
+    /**
+     * Set key dim bitmap
+     *
+     * @since S60 V4.0          
+     * @param aBitmap The dim bitmap
+     */
+    inline void SetDimKeyBmp(CFbsBitmap* aBitmap);
+
+    /**
+     * Set key dim mask bitmap
+     *
+     * @since S60 V4.0          
+     * @param aBitmap The dim mask bitmap
+     */
+    inline void SetDimKeyMaskBmp(CFbsBitmap* aBitmap);
+    
+    /**
+     * Add key higilight bitmap
+     * @since S60 V4.0
+     * @param aBmp The key hight light bitmap. Owner ship transferred.
+     */
+    IMPORT_C void AddKeyHighLightBitmapL(CFbsBitmap* aBmp);
+    
+    /**
+     * Remove highlight bitmap by index. The bitmap itself is not destroyed.
+     * @since S60 V4.0
+     * @param aIndex. 
+     */
+    IMPORT_C void RemoveKeyHighLightBitmap(TInt aIndex);    
+
+    /**
+     * Add key highlight mask bitmap
+     * @since S60 V4.0
+     * @param aBmp The key hight light mask bitmap. Owner ship transferred.
+     */
+    IMPORT_C void AddKeyHighLightMaskBitmapL(CFbsBitmap* aBmp);    
+    
+    /**
+     * Remove highlight bitmap by index. The bitmap itself is not destroyed.
+     * @since S60 V4.0
+     * @param aIndex. 
+     */
+    IMPORT_C void RemoveKeyHighLightMaskBitmap(TInt aIndex);    
+    
+    /**
+     * Set fading parameter. Key pressing effect is done by fading the key.
+     * 
+     * @since S60 V4.0
+     * @param aBlackMap Black map fading parameter. 
+     *      See CBitmapContext::SetFadingParameters for more information
+     * @param aWhiteMap White map fading parameter
+     */                                                                 
+    inline void SetFadingParameters(TUint8 aBlackMap, TUint8 aWhiteMap);    
+
+    /**
+     * Return key array
+     *
+     * @since S60 V4.0
+     * @return The key array
+     */    
+    inline const RPointerArray<CVirtualKey>& KeyArray();
+    
+    /**
+     * Return highlight bmp list
+     *
+     * @since S60 V4.0
+     * @return highlight bmp list
+     */    
+    inline const RPointerArray<CFbsBitmap>& KeyHighlightBmpList();
+    
+    /**
+     * Return highlight mask bmp list
+     *
+     * @since S60 V4.0
+     * @return highlight mask bmp list
+     */        
+    inline const RPointerArray<CFbsBitmap>& KeyHighlightMaskBmpList();
+    
+    inline void SetKeySkinId(TVirtualKeyBmpType aBmpType, TAknsItemID aSkinId);
+    inline TAknsItemID KeySkinId(TVirtualKeyBmpType aBmpType);
+    inline void SetTextLineLayout(TAknTextLineLayout aTextLine, TVirtualKeyTextPos aPos);
+    inline TAknTextLineLayout TextLineLayout(TVirtualKeyTextPos aPos);
+    inline void SetTextLineLayout(TAknTextLineLayout aTextLine);
+    inline TAknTextLineLayout TextLineLayout();
+    inline TBool TextLineLayoutSet(TVirtualKeyTextPos aPos);
+    inline void SetDrawOpaqueBackground(TBool aNeedDraw);
+    /**
+     * Set keyboard text color group
+     *
+     * @since S60 V4.0
+     * @param color group index
+     */        
+    inline void SetKeyTextColorGroup(TInt aColorGroup);
+    inline TInt KeyTextColorGroup() const;
+    //from base class CFepUiBaseCtrl    
+   
+    /**
+     * From CFepUiBaseCtrl
+     * Draw control
+     *
+     * @since S60 V4.0
+     */                       
+    IMPORT_C virtual void Draw();     
+
+    IMPORT_C void SetRect(const TRect& aRect);    
+    
+    /**
+     * Add key higilight bitmap
+     * @since S60 V4.0
+     * @param aBmp The key hight light bitmap. Owner ship transferred.
+     */
+    IMPORT_C void AddIrregularKeyBitmapL(TVirtualKeyIrregularKeyType aKeyType,
+                                         TVirtualKeyIrregularKeyState aKeyState,
+                                         CFbsBitmap* aBmp);
+    
+    /**
+     * Remove highlight bitmap by index. The bitmap itself is not destroyed.
+     * @since S60 V4.0
+     * @param aIndex. 
+     */
+    IMPORT_C void RemoveIrregularKeyBitmapL(TVirtualKeyIrregularKeyType aKeyType,
+                                            TVirtualKeyIrregularKeyState aKeyState);
+                                            
+    /**
+     * Remove highlight bitmap by index. The bitmap itself is not destroyed.
+     * @since S60 V4.0
+     * @param aIndex. 
+     */
+    IMPORT_C CFbsBitmap* IrregularKeyBitmap(TVirtualKeyIrregularKeyType aKeyType,
+                                            TVirtualKeyIrregularKeyState aKeyState);
+                                            
+                                            
+                                            
+    IMPORT_C TBool IsIrregularKeyBoard();
+                                                                                          
+    IMPORT_C void SetIrregularKeyBoard(TBool aIrregular);
+     
+    /**
+     * Add nonirregular key bitmap
+     * @since S60 V4.0
+     * @param aBmp The key bitmap. Owner ship transferred.
+     */
+    IMPORT_C void SetNonIrregularKeyBitmapL(TVirtualKeyBmpType aBmpType, CFbsBitmap* aBmp);
+    
+    /**
+     * Get non irregularkey bitmap by index. The bitmap itself is not destroyed.
+     * @since S60 V4.0
+     * @param aIndex. 
+     */
+    IMPORT_C CFbsBitmap* NonIrregularKeyBitmap(TVirtualKeyBmpType aBmpType);
+    
+    /**
+     * Hide or show the bubble.
+     * @param aFlag. 
+     * @since S60 V4.0
+     */
+    IMPORT_C void ShowBubble(TBool aFlag);
+    
+    /**
+     * Set bubble bitmap effect.
+     * @since S60 V4.0
+     * @param aBmpId. 
+     * @param aMaskBmpId. 
+     * @param aBgSkinId. 
+     */
+    IMPORT_C void SetBubbleBitmapParam(CFbsBitmap* aBmpId,
+                                       CFbsBitmap* aMaskBmpId,
+                                       TAknsItemID aBgSkinId);
+
+    /**
+     * Test that keep pointer down effect or not when the pointer is down and moving
+     * @since S60 V4.0
+     */    
+    IMPORT_C TBool GowithPointerDown();    
+
+    /**
+     * Set keeping pointer down effect when the pointer is down and moving
+     * @since S60 V4.0
+     * @param aFlag. 
+     */    
+    IMPORT_C void SetGowithPointerDown(TBool aFlag);
+        
+    /**
+     * Set the size of bubble
+     *
+     * @since S60 V4.0          
+     * @param aSize The size of bubble
+     */ 
+    IMPORT_C void SetBubbleSize(const TSize& aSize);
+
+    /**
+     * Set the margin between the bottom of bubble and top of the key
+     *
+     * @since S60 V4.0          
+     * @param aSize The size of bubble
+     */ 
+    IMPORT_C void SetBubbleVerticalMargin(TInt aMargin);
+
+    /**
+     * Set text format
+     *
+     * @since S60 V4.0          
+     * @param aTextFormat The format of text on bubble 
+     */ 
+    IMPORT_C void SetTextFormat(TAknTextLineLayout aTextFormat);
+    /**
+     * Set the size of bubble frame inner rect
+     *
+     * @since S60 V4.0          
+     * @param aSize The size of bubble frame inner rect
+     */ 
+    IMPORT_C void SetFrameDiff(TInt aLeftDiff,TInt aTopDiff,TInt aRightDiff,TInt aBottomDiff);    
+
+    IMPORT_C void SetVirtualKeyImgID(TVirtualKeyDrawInfo aVirtualKeyDrawInfo);
+	
+    /**
+     * Set shift icon showing on the key
+     *
+     * @since S60 V4.0          
+     * @param aIcon shift icon
+     */ 	
+	IMPORT_C void SetShiftIcon( CPenInputColorIcon* aIcon );
+	inline CPenInputColorIcon* ShiftIcon();
+    
+protected:                          
+
+    /**
+     * 2nd phase constructor
+     *
+     * @since S60 V4.0     
+     */          
+    IMPORT_C void ConstructL();
+    
+    /**
+     * Default constructor
+     *
+     * @since S60 V4.0     
+     * @param aRect The keyboard position relative to layout
+     * @param aUiLayout The layout contains the keyboard. Owner ship not transferred.
+     * @param aControlId Id for this keyboard control
+     * @param aFontSpect The font used for key drawing
+     */          
+     IMPORT_C CVirtualKeyboard(const TRect& aRect,CFepUiLayout* aUiLayout,TInt aControlId,
+                                const TFontSpec& aFontSpec, TBool aIrregular = EFalse);    
+
+
+    /**
+     * 
+     * find the key in a position
+     *
+     * @since S60 V4.0
+     * @param aPoint The point position relative the layout
+     * @return The first key which contains the point
+     */
+    //const CVirtualKey* FindKeyByPosition(const TPoint& aPt);
+    
+    CVirtualKeyCtrl* FindKeyCtrlByPosition(const TPoint& aPt);
+                                
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer down event
+     *
+     * @since S60 V4.0
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */                                        
+    //IMPORT_C virtual CFepUiBaseCtrl* HandlePointerDownEventL(const TPoint& aPoint);
+    
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer up event
+     *
+     * @since S60 V4.0
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */                  
+    //IMPORT_C virtual CFepUiBaseCtrl* HandlePointerUpEventL(const TPoint& aPoint);
+    
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer move event
+     *
+     * @param aPoint The point
+     * @since S60 V4.0 position relative the layout
+     * @return The control which handles the event.     
+     */                  
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerMoveEventL(const TPoint& aPt);    
+
+    /**
+     * From CFepUiBaseCtrl
+     * Handle pointer levae event. 
+     * This will be called only when it's got pointer down event before and 
+     * now pointer leaves without pointer up event
+     *
+     * @since S60 V4.0
+     * @param aPoint current pointer position
+     */    
+    //IMPORT_C void HandlePointerLeave(const TPoint& aPoint);           
+private:
+    /**
+     * 
+     * Add a key control to keyboard
+     *
+     * @since S60 V4.0
+     * @param aKeyCtrl The key to be added
+     */            
+    void AddKeyControlL(CVirtualKeyCtrl* aKeyCtrl);
+    
+    /**
+     * 
+     * Remove a key control from keyboard. The control is removed and should be used 
+     * later
+     *
+     * @since S60 V4.0
+     * @param aKeyCtrl The key to be removed.
+     */            
+    void RemoveKeyControl(CVirtualKeyCtrl* aKeyCtrl);
+    
+    /**
+     * 
+     * Draw a key
+     *
+     * @since S60 V4.0
+     * @param aKey The key to be drawn
+     */        
+    void DrawKey(const CVirtualKey* aKey);
+    
+    /**
+     * 
+     * Set a key event and report to observer
+     *
+     * @since S60 V4.0
+     * @param aType The general virtuak key event type, i.e, up or down
+     */        
+    //IMPORT_C virtual void ReportKeyEvent(TVirtualKeyEvent aType);
+    
+    //void ReportKeyEvent(TVirtualKeyEvent aType, CVirtualKey* aKey);
+
+    /**
+     * 
+     * Draw indication when key is pressed
+     *
+     * @since S60 V4.0
+     * @param aKey The key to be drawn
+     * @param aPressedFlag The flag indicates whether the key is pressed.
+     *        Default value is ETrue, show pressed key
+     */    
+    //void DrawIndication(const CVirtualKey* aKey, TBool aPressedFlag = ETrue);
+    
+    /**
+     * 
+     * Change the feedback area
+     *
+     * @since S60 V4.0
+     * @param aId The unique id for this area
+     * @param aNewRect The new feedback area
+     * @param aOldRect The old feedback area
+     */        
+    //void ChangeFeedbackArea(TInt aId,const TRect& aNewRect,const TRect& aOldRect);    
+    
+    /**
+     * 
+     * De-register the feedback area
+     *
+     * @since S60 V4.0
+     * @param aId The unique id for this area
+     * @param aRect The feedback area
+     */      
+    //void DeRegisterFeedbackArea(TInt aId,const TRect& aRect);
+    
+    CVirtualKeyCtrl* FindCtrlForKey(const CVirtualKey* aKey);
+    
+    
+    CVirtualKeyCtrl* CreateKeyCtrlL(CVirtualKey* aKeyInfo, TBool aRawKeyFlag);
+    
+protected:
+    /**
+     * Current pressed key.
+     * Not own
+     */               
+    CVirtualKey* iPressedKey;
+private:
+    
+    void ConstructIrregularBmps();
+    
+    void ConstructOneIrregularBmp(RPointerArray<CFbsBitmap>& iBmpList); 
+                                  
+    void DestroyIrregularBmps();                                     
+                                     
+    void DrawBubble(CVirtualKey* aKey);
+    
+    void ClearBubble(TBool aSetZeroSize);
+    
+private:
+    /**
+     * Virtuak Key array
+     */
+    RPointerArray<CVirtualKey> iKeyArray;    
+    
+    /**
+     * Font information for key drawing
+     */     
+    TFontSpec iFontSpec;
+
+    /**
+     * Fading parameter. Used for pressed key effect
+     */          
+    TUint8 iFadingParamBlack;
+    
+    /**
+     * Fading parameter. Used for pressed key effect
+     */              
+    TUint8 iFadingParamWhite;
+
+    /**
+     * High light bitmap list for different size of keys
+     */                  
+    RPointerArray<CFbsBitmap> iKeyHighLightBmpList;
+    
+    /**
+     * bitmap list for different size of keys
+     */                  
+    RPointerArray<CFbsBitmap> iNonIrregularKeyBmpList;
+	
+    /**
+     * High light mask bitmap list for different size of keys
+     */                  
+    RPointerArray<CFbsBitmap> iKeyHighLightMaskBmpList;
+
+    RPointerArray<CFbsBitmap> iKeyLeftDownBmpList;
+
+    RPointerArray<CFbsBitmap> iKeyMiddleUpBmpList;
+
+    RPointerArray<CFbsBitmap> iKeyMiddleDownBmpList;
+
+    RPointerArray<CFbsBitmap> iKeyRightDownBmpList;
+
+    RPointerArray<CFbsBitmap> iKeyRightUpBmpList;
+     
+    /**
+     * Font object for key drawing
+     * Ownership depends on flag iFontOwnership.
+     */          
+    CFont* iFont;    
+
+    /**
+     * Dim key bitmap.
+     * own
+     */                   
+    CFbsBitmap* iDimKeyBmp;
+    
+    /**
+     * Dim key mask bitmap.
+     * own
+     */    
+    CFbsBitmap* iDimKeyMaskBmp;  
+
+    /**
+     *  Flag ownership flag. ETrue if CFont object is owned by this control.
+     */
+    TBool iFontOwnership;
+            
+    /**
+     * Item text display color.
+     */
+    TRgb  iFontColor;
+    
+    /**
+     * Reserve item
+     */    
+    TInt iReserver1;
+    
+    TAknsItemID iKeyNormalSkinId;
+    TAknsItemID iKeyHighlightSkinId;
+    TAknsItemID iKeyDimSkinId;
+    RArray<TAknTextLineLayout> iTextLineLayout;
+    RArray<TBool> iTextLineSet;
+    TBool iNeedDrawBackground;
+
+    /**
+     * Unused key pool. When key is removed from key board, it's added to the pool.
+     * This is a patch for current vkb UI implementation, as they will remove keys 
+     * when a key is handling pointer event.
+     */            
+    RPointerArray<CVirtualKeyCtrl> iUnUsedKeyCtrlPool;
+    
+    /**
+     * Unused raw key pool. When key is removed from key board, it's added to the pool.
+     * This is a patch for current vkb UI implementation, as they will remove keys 
+     * when a key is handling pointer event.
+     */                
+    RPointerArray<CVirtualKeyCtrl> iUnUsedRawKeyCtrlPool;
+    
+    TBool iIrregularKey;
+
+	CBubbleCtrl* iBubbleCtrl;
+	
+	TInt iBubbleVerticalMargin;
+	
+	TBool iGowithPointerDown;
+	
+	TSize iBubbleSize;
+
+	TAknTextLineLayout iVKBTextLineLayout;
+	/**
+	*  Flag to control whether to show bubble
+	*/
+	TBool iIsShowBubble;
+	
+	/**
+     * Keypad text color group
+     */    
+    TInt iKeyTextColorGroup;
+	
+	/**
+     * The shift icon showing on the key
+     */      
+    CPenInputColorIcon* iShiftIcon;
+friend class CVirtualKeyCtrl;
+friend class CVirtualRawKeyCtrl;
+//friend class CVirtualKey;    
+    };
+
+//class CVirtualKey
+/**
+ * CVirtualKey
+ *
+ * Key on virtual key board. A virtual key is similar to the key in hard keyboard.
+ * It will report virtual key up/down event when pressed up/down with a TkeyEvent data
+ *
+ * @lib feplayoutcontrol.lib  
+ * @since S60 V4.0
+ */
+class CVirtualKey : public CBase
+    {
+
+public:
+    /**
+     * Factory function
+     * This is used for those languange whose character needs more unicodes.
+     *
+     * @since S60 V4.0     
+     * @param aCode The code this key stands for. 
+     * @param aScanCode The scan code for this key
+     * @param aRect The position of the key relative to keyboard
+     * @param aCharRect The rect when key is drawn
+     * @param aBaseLine The baseline for key drawing
+     * @param aHighlightBmpIdx The bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.
+     * @param aHighlightMaskIdx The mask bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.                        
+     */
+    IMPORT_C static CVirtualKey* NewL(TUint aCode, TInt aScanCode,
+                                 const TRect& aRect, const TRect& aCharRect, 
+                                 TInt aBaseLine, TInt aHighlightBmpIdx = -1,
+                                 TInt aHighlightMaskBmpId = -1);
+
+    /**
+     * Factory function
+     * This is used for those languange whose character needs more unicodes.
+     *
+     * @since S60 V4.0     
+     * @param aCode The code this key stands for. 
+     * @param aScanCode The scan code for this key
+     * @param aRect The position of the key relative to keyboard
+     * @param aCharRect The rect when key is drawn
+     * @param aBaseLine The baseline for key drawing
+     * @param aHighlightBmpIdx The bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.
+     * @param aHighlightMaskIdx The mask bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.                        
+     */
+    IMPORT_C static CVirtualKey* NewL(const TDesC& aCode, TInt aScanCode,
+                               const TRect& aRect, const TRect& aCharRect, 
+                               TInt aBaseLine, TInt aHighlightBmpIdx = -1,
+                               TInt aHighlightMaskBmpId = -1);
+
+    IMPORT_C static CVirtualKey* NewL(RPointerArray<HBufC>& aUnicodesList,
+                                      TInt aScanCode,
+                                      const TRect& aRect);
+
+    /**
+     * Destructor
+     *
+     * @since S60 V4.0     
+     */
+    IMPORT_C virtual ~CVirtualKey();
+    
+    IMPORT_C void SetUnicodesL(RPointerArray<HBufC>& aUnicodesList);
+
+
+    /**
+     * Return key position
+     *
+     * @since S60 V4.0
+     * @return The key position relative to key board
+     */    
+    inline const TRect& Rect() const; 
+    /**
+     * Set key position
+     *
+     * @since S60 V4.0
+     * @param The key position
+     */    
+    IMPORT_C void SetRect(const TRect& aRect); 
+    
+    /**
+     * Get key code
+     *
+     * @since S60 V4.0
+     * @return The key code
+     */
+    inline TUint KeyCode() const;
+    
+    /**
+     * Get key code data. Support for multi language
+     *
+     * @since S60 V4.0
+     * @return The key codes
+     */
+    inline const TDesC& KeyUnicodes() const;
+    const TDesC& KeyUnicodes(TVirtualKeyTextPos aPos) const;
+    
+    /**
+     * Get key scancode
+     *
+     * @since S60 V4.0
+     * @return The key scancode
+     */
+    inline TInt ScanCode() const;    
+    
+    /**
+     * Get key display code
+     *
+     * @since S60 V4.0
+     * @return The key scancode
+     */
+    inline TUint DisplayCode() const;
+
+    /**
+     * Set key display code
+     *
+     * @since S60 V4.0
+     * @param aCode The display code
+     */
+    inline void SetDisplayCode(TUint aCode);
+    /**
+     * Get key highlight image index
+     *
+     * @since S60 V4.0
+     * @return The index for key highligh image
+     */
+    inline TInt HighlightBmpIndex();    
+    
+    /**
+     * Get key highlight mask image index
+     *
+     * @since S60 V4.0
+     * @return The index for key highligh mask image
+     */
+    inline TInt HighlightMaskBmpIndex();       
+     
+    /**
+     * Dim a key
+     *
+     * @since S60 V4.0
+     * @param aFlag The dim status
+     */
+    inline void SetDimmed(TBool aFlag);    
+    
+    /**
+     * Get the key dim status
+     *
+     * @since S60 V4.0
+     * @return The dim status
+     */
+     inline TBool Dimmed() const;        
+    
+    /**
+     * set key to be a latch key
+     *
+     * @since S60 V4.0
+     * @param aFlag The key latch style flag. ETrue if set to latch key.
+     */
+     inline void SetLatchKey(TBool aFlag);
+    
+    /**
+     * test whether this key a latch key
+     *
+     * @since S60 V4.0
+     * @return ETrue if the key is a latch key. Otherwise EFalse
+     */    
+     inline TBool IsLatchKey();
+    
+    /**
+     * set key latch state
+     *
+     * @since S60 V4.0
+     * @param The latch key state.
+     */    
+     IMPORT_C void SetLatched(TBool aFlag);
+     
+     IMPORT_C TVirtualKeyIrregularKeyType IrregualrKeyType();
+     
+     IMPORT_C void SetIrregualrKeyType(TVirtualKeyIrregularKeyType aKeyType);
+    /**
+     * get key latch state
+     *
+     * @since S60 V4.0
+     * @return The key latch state. ETrue if latched
+     */    
+     inline TBool Latched();
+
+     inline void SetInnerRect(const TRect& aRect);
+     inline TRect InnerRect();
+     TBool UnicodesListEmpty(TInt& aIdx);
+
+    /**
+     * Set keyboard to key
+     *
+     * @since S60 V4.0
+     * @param The keyboard which contains the key.
+     */    
+//     inline void SetKeyboard(CVirtualKeyboard* aKeyboard);
+    
+     IMPORT_C void SetDisplayUnicodeL( const TDesC& aDspUnicode );
+     inline TDesC* DisplayUnicode() const;
+     
+     IMPORT_C void HideKeyCtrl( TBool aHide ); 
+     inline void SetKeyData( const TDesC& aKeyData );
+     inline void SetKeyScancode( TInt aScancode );
+protected:            
+    /**
+     * 2nd phase constructor
+     *
+     * @since S60 V4.0     
+     */          
+    void ConstructL(const TDesC& aCodeData);
+    
+    void ConstructL(const RPointerArray<HBufC>& aUnicodesList);
+
+private:
+    /**
+     * Default constructor
+     *
+     * @since S60 V4.0     
+     * @param aCode The code this key stands for
+     * @param aScanCode The scan code for this key
+     * @param aRect The position of the key relative to keyboard
+     * @param aCharRect The rect when key is drawn
+     * @param aBaseLine The baseline for key drawing
+     * @param aHighlightBmpIdx The bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.
+     * @param aHighlightMaskIdx The mask bitmap index for highlighging key
+                        background. Bitmap is stored in virtual key board.                        
+     */
+    CVirtualKey(TUint aCode, TInt aScanCode, const TRect& aRect, TInt aHighlightBmpIdx,
+                 TInt aHighlightMaskBmpId);
+
+    CVirtualKey(TInt aScanCode,
+                const TRect& aRect);
+private:
+    /**
+     * Create a key control
+     *
+     * @since S60 V5.0     
+     * @param aKeyInfo The virtual key information
+     * @param aRawKeyFlag Flag indicates whether a raw key is needed
+     * @return The created key control
+     */
+    CVirtualKeyCtrl* CreateKeyCtrlL(CVirtualKey* aKeyInfo,TBool aRawKeyFlag);    
+private:
+    /**
+     * Key event attribute for this key        
+     */
+    TUint       iCode;
+    TUint       iScanCode;
+    /**
+     * The position relative to the keyboard. Not relative to the layout.
+     * This is the valid region when pointer event effected to this key.
+     */
+    TRect   iRect;
+    
+    TRect   innerRect;
+
+    /**
+     * The hight light bitmap index for this key. Bitmap is owned by keyboard
+     * High light bitmap is used when key does not have background bitmap itself,
+     * pressed/highlight effect is down by show the highlight bitmap then draws text
+     * on top of the bitmap. See DrawIndication.
+     * 
+     * The assumption is that when this index is >= 0 , then fading effect
+     * is not used. Key pressing effect is then implemented by bitmap.
+     */    
+    TInt iHighlightBmpIndex;
+    
+    /**
+     * The hight light mask bitmap index for this key
+     */    
+    TInt iHighlightMaskBmpIndex;    
+    
+    /*
+     * Dim status
+     */
+    TBool iDimmed;    
+     
+    /*
+    * Latch key flag    
+    */ 
+    TBool iIsLatchKey;
+    
+    /*
+    * Latch key state
+    */ 
+    TBool iLatched;    
+    
+    /**
+     * unicode data for the key. By default it only contains the key code.
+     * But for some languages, a character may need several unicodes. 
+     */    
+    HBufC* iCodeData;   
+    RPointerArray<HBufC> iUnicodesList;    
+    /**
+     * Unicode data for the key display. Some special character need additional
+     * unicode to display. It's different than its unicode.
+     */
+    HBufC* iDisplayCodeData;
+
+    /**
+     * Keyboard which contains the key					     
+     */    
+    //CVirtualKeyboard* iKeyboard;    
+    /**
+     * Key control created for this key information by key board
+     */        
+    CVirtualKeyCtrl* iKeyCtrl;    
+    
+    TVirtualKeyIrregularKeyType iIrregularKeyType;
+    /**
+     * Reserve item
+     */    
+    TInt iReserver1;
+    
+    /**
+     * Reserve item
+     */    
+    TInt iReserver2;
+    
+friend class CVirtualKeyCtrl;
+friend class CVirtualKeyboard;   
+    };
+//end of CVirtualKey
+    
+#include <peninputlayoutvkb.inl>
+#endif //C_CVIRTUALKEYBOARD_H
\ No newline at end of file