diff -r 000000000000 -r eb1f2e154e89 textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h --- /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 +#include +#include + +#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& 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& KeyArray(); + + /** + * Return highlight bmp list + * + * @since S60 V4.0 + * @return highlight bmp list + */ + inline const RPointerArray& KeyHighlightBmpList(); + + /** + * Return highlight mask bmp list + * + * @since S60 V4.0 + * @return highlight mask bmp list + */ + inline const RPointerArray& 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& iBmpList); + + void DestroyIrregularBmps(); + + void DrawBubble(CVirtualKey* aKey); + + void ClearBubble(TBool aSetZeroSize); + +private: + /** + * Virtuak Key array + */ + RPointerArray 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 iKeyHighLightBmpList; + + /** + * bitmap list for different size of keys + */ + RPointerArray iNonIrregularKeyBmpList; + + /** + * High light mask bitmap list for different size of keys + */ + RPointerArray iKeyHighLightMaskBmpList; + + RPointerArray iKeyLeftDownBmpList; + + RPointerArray iKeyMiddleUpBmpList; + + RPointerArray iKeyMiddleDownBmpList; + + RPointerArray iKeyRightDownBmpList; + + RPointerArray 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 iTextLineLayout; + RArray 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 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 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& aUnicodesList, + TInt aScanCode, + const TRect& aRect); + + /** + * Destructor + * + * @since S60 V4.0 + */ + IMPORT_C virtual ~CVirtualKey(); + + IMPORT_C void SetUnicodesL(RPointerArray& 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& 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 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 +#endif //C_CVIRTUALKEYBOARD_H \ No newline at end of file