textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvirtualkeyctrl.h
/*
* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0""
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: header file of virtual keyboard key information and control
*
*/
#ifndef C_CVIRTUALKEYBOARD_KEY_CTRL_H
#define C_CVIRTUALKEYBOARD_KEY_CTRL_H
#include "peninputlayoutvkb.h"
#include "peninputlayoutbasecontrol.h"
class CVirtualKeyboard;
class CVirtualKey;
//class CVirtualKeyCtrl
//Internal used by virtual keyboard
NONSHARABLE_CLASS(CVirtualKeyCtrl) : public CFepUiBaseCtrl
{
protected:
//internal event type
enum TVirtualKeyEventType
{
EVirtualKeyControlUp, //key up event on virtual key
EVirtualKeyControlDown, //key down event on virtual key
};
public:
/**
* Factory function.
*
* @since S60 V5.0
* @param aKeyboard The keyboard contains the key
* @param aKeyInfo The virtual key information data
* @return An instance of CVirtualKeyCtrl class
*/
static CVirtualKeyCtrl* NewL(CVirtualKeyboard* aKeyboard,CVirtualKey* aKeyInfo);
/**
* Destructor
*
* @since S60 V5.0
*/
~CVirtualKeyCtrl();
//from base class CFepUiBaseCtrl
/**
* From CFepUiBaseCtrl
* Draw control
*
* @since S60 V5.0
*/
virtual void Draw();
/**
* 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 V5.0
* @param aPoint current pointer position
*/
virtual void HandlePointerLeave(const TPoint& aPoint);
/**
* From CFepUiBaseCtrl
* Handle pointer enter event.
* This will be called only when it's got pointer down event previously then
* pointer leaves but now comes back without pointer up event.
*
* @since S60 V5.0
* @param aPoint current pointer position
*/
virtual void HandlePointerEnter(const TPoint& aPoint);
/**
* 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.
*/
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
*/
virtual CFepUiBaseCtrl* HandlePointerUpEventL(const TPoint& aPoint);
/**
* From CFepUiBaseCtrl
* Cancel pointer down event.
* This will be called when a control has pointer down but pointer up
* event happens in other ways.
*
* @since S60 V4.0
* @param aFocusedFlag ETrue if got focused, otherwise EFalse
*/
virtual void CancelPointerDownL();
inline CVirtualKeyboard* Keyboard();
inline CVirtualKey* VirtualKey();
TBool Contains(const TPoint& aPt);
void SetVirtualKeyImgID(TVirtualKeyDrawInfo aVirtualKeyDrawInfo);
protected:
/**
* 2nd phase constructor
*
* @since S60 V5.0
*/
void ConstructL();
/**
* Report key event to outside
*
* @since S60 V5.0
* @param aEventType The event type for current key event
*/
void ReportKeyEvent(TControlEvent aEventType);
/**
* Constructor
*
* @since S60 V5.0
* @param aKeyboard The key board contains the key
* @param aKeyInfo The virtual key information
*/
CVirtualKeyCtrl(CVirtualKeyboard* aKeyboard,CVirtualKey *aKeyInfo);
private:
/**
* Draw dimmed key
*
* @since S60 V5.0
*/
void DrawDimKey();
/**
* Draw highlighed key
*
* @since S60 V5.0
*/
void DrawHighlightKey();
/**
* Draw key in normal state (non-highlight/non-dimmed)
*
* @since S60 V5.0
*/
void DrawNormalStateKey();
/**
* Draw key text
*
* @since S60 V5.0
*/
void DrawKeyText(CFbsBitGc* aGc);
/**
* Redraw and update the key
*
* @since S60 V5.0
*/
void ReDraw();
/**
* Draw a key area with the given bitmap
*
* @since S60 V5.0
* @param aDestRect The rect to be drawn
* @param aSourceRect The source area in the bitmap
* @param aBmp The bitmap used
* @param aMask The mask bitmap
* @param aInvertFlag The flag controls the mask effect. See DrawBitmapMasked.
*/
void DrawBmp(const TRect& aDestRect,const TRect& aSourceRect,
const CFbsBitmap* aBmp,CFbsBitmap* aMask,
TBool aInvertFlag = EFalse);
void DrawBmp(CFbsBitGc* aGc, const TRect& aDestRect,const TRect& aSourceRect,
const CFbsBitmap* aBmp,CFbsBitmap* aMask,
TBool aInvertFlag = EFalse);
/**
* Get the control event for given internal event type
*
* @since S60 V5.0
* @param aEvent Internal event type
* @return The event type after conversion.
*/
virtual TControlEvent GetKeyEventType(TVirtualKeyEventType aEvent);
TBool MaskBmpContains(const TPoint& aPt);
CFbsBitmap* MaskBmp();
void DrawIrregularKey(TVirtualKeyIrregularKeyState aKeyState,
TVirtualKeyIrregularKeyState aKeyStateMask);
private:
/**
* virtual key information
* Not own
*/
CVirtualKey* iKeyInfo;
/**
* virtual keyboard
* Not own
*/
CVirtualKeyboard* iKeyboard;
/**
* scan code. This is used to when searching key by scancode.
*/
TInt iScanCode;
TVirtualKeyDrawInfo iVirtualKeyDrawInfo;
protected:
void UpdateChangedArea(TBool aFlag);
private:
CFbsBitGc* GetGc();
TRect GetRect();
friend class CVirtualKeyboard;
};
inline CVirtualKeyboard* CVirtualKeyCtrl::Keyboard()
{
return iKeyboard;
}
inline CVirtualKey* CVirtualKeyCtrl::VirtualKey()
{
return iKeyInfo;
}
//class CVirtualRawKeyCtrl
/*
CVirtualRawKeyCtrl differes with CVirtualKeyCtrl in that when pressed, it generates
raw key event ( by simulating) which works just like a hardware key
*/
NONSHARABLE_CLASS(CVirtualRawKeyCtrl) : public CVirtualKeyCtrl
{
public:
/**
* Factory function.
*
* @since S60 V5.0
* @param aKeyboard The keyboard contains the key
* @param aKeyInfo The virtual key information data
* @return An instance of CVirtualKeyCtrl class
*/
static CVirtualRawKeyCtrl* NewL(CVirtualKeyboard* aKeyboard,CVirtualKey* aKeyInfo);
/**
* Cancel pointer down event.
* This will be called when a control has pointer down but pointer up
* event happens in other ways. If overrided, this base implementation
* must be called in order to report the event.
*
* @since S60 V4.0
* @param aFocusedFlag ETrue if got focused, otherwise EFalse
*/
virtual void CancelPointerDownL();
/**
* 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 V5.0
* @param aPoint current pointer position
*/
virtual void HandlePointerLeave(const TPoint& aPoint);
private:
/**
* Constructor
*
* @since S60 V5.0
* @param aKeyboard The keyboard contains the key
* @param aKeyInfo The virtual key information data
*/
CVirtualRawKeyCtrl(CVirtualKeyboard* aKeyboard,CVirtualKey* aKeyInfo);
//from base CVirtualKeyCtrl
/**
* Get the control event for given internal event type
*
* @since S60 V5.0
* @param aEvent Internal event type
* @return The event type after conversion.
*/
virtual TControlEvent GetKeyEventType(TVirtualKeyEventType aEvent);
};
#endif //C_CVIRTUALKEYBOARD_KEY_CTRL_H
//end of file