textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbasecontrol.h
changeset 0 eb1f2e154e89
child 18 c8fb4cf7b3ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbasecontrol.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1383 @@
+/*
+* Copyright (c) 2005-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 base controls
+*
+*/
+
+
+#ifndef C_CFEPUIBASECTRL_H
+#define C_CFEPUIBASECTRL_H
+
+#include <e32base.h>
+#include <w32std.h>
+#include <w32adll.h>
+#include <peninputuilayoutownerinf.h>
+#include <peninputuilayoutbase.h>
+#include <peninputlayoutminterface.h>
+
+class CFepUiLayout;
+class CLayoutTimer;
+class CCandidateWnd;
+class CFepUiLayoutRootCtrl;
+class CCoeControl;
+
+const TInt KDefaultFrameWidth = 1;
+// There are 8 shadow bitmaps
+const TInt KShadowBitmapTotalNum = 8;
+//for mask bitmap
+const TUint32 KTransparentColor = 0x0;
+const TUint32 KOpaqueColor = 0xffffff;
+
+#define KDEFAULTBASELINERATIO 3/4
+//base control type
+typedef TInt64 TControlType;
+
+//UI layout leave code
+enum TUiLayoutErrorCode
+    {
+    EUiLayoutNotReady = -2000,
+    EUiLayoutOwnerNotReady,
+    EUiLayoutBadControlIndex,
+    EUiLayoutBadEvent,
+    EUiLayoutBadControlType,
+    EUiLayoutCandiateNumIsNotSet,    
+    EUiLayoutFuncNotImplemented,
+    EUiLayoutBadKeyBmpIndex,
+    EUiLayoutNoShadowBmp,
+    EUiLayoutNoKey,
+    EUiGeneralIndexError,
+    EUiFullscreenWithoutHWRWnd,
+    EUiLayoutBadParentType,
+    EUiNullParam,
+    EUiCursorNoOwner,
+    EUiNoparent
+    };
+
+//define base control types
+//Derived class should not re-assign new ctrl type.
+enum TStockBaseCtrlType
+    {
+    ECtrlBaseCtrl           = 0x0001,
+    ECtrlTactileFeedback    = 0x0002,    
+    ECtrlHwrWnd             = 0x0004 | ECtrlBaseCtrl,     //HWR writing window 
+    ECtrlTransparentHwrWnd  = 0x0008 | ECtrlHwrWnd,       //HWR transparent window
+    ECtrlCandidateList      = 0x0010 | ECtrlBaseCtrl,     //Candidate list
+    ECtrlButton             = 0x0020 | ECtrlBaseCtrl | ECtrlTactileFeedback,     //Button
+    ECtrlDragBar            = 0x0040 | ECtrlButton,       //drag bar
+    ECtrlControlGroup       = 0x0080 | ECtrlBaseCtrl/* | ECtrlTactileFeedback*/,      //control group    
+//    ECtrlButtonGroup        = 0x0080 | ECtrlControlGroup,       //button group    
+    ECtrlEditAreaBase       = 0x0100 | ECtrlBaseCtrl | ECtrlTactileFeedback,		//editor base
+    ECtrlInputContextArea   = 0x0200 | ECtrlEditAreaBase,   //input context area
+    ECtrlVirtualKeyboard    = 0x0400 | ECtrlBaseCtrl,   	//virtual keyboard
+    ECtrlPopupWindow		= 0x0800 | ECtrlBaseCtrl,   	//pop up window
+    ECtrlPopupChoiceList	= 0x1000 | ECtrlPopupWindow | ECtrlTactileFeedback,   	//pop up choice list
+    //ECtrlVirtualItutKeypad  = 0x2000 | ECtrlVirtualKeyboard,
+    ECtrlVirtualKey         = 0x2000 | ECtrlBaseCtrl | ECtrlTactileFeedback,       //virtual key control
+    ECtrlVirtualItutKey     = 0x4000 | ECtrlVirtualKey,		//virtual itut key control
+    ECtrlBackgroundCtrl	    = 0x8000,
+    ECtrlCursor             = 0x00010000 | ECtrlBaseCtrl,   //editor cursor
+    
+    //Add more stock controls here. E.g ECtrlOskKey for VKB key
+    ECtrlWndBasedCtrl           = 0x00040000,
+    EUserCtrlBase = 0x00080000
+    };
+
+//button type
+enum TButtonBmpType
+    {    
+    EBtnBmpNonActive ,                //bitmap for non active control
+    EBtnBmpNonActivePressed,      //bitmap for pressed active control, 
+
+    EBtnBmpActive,                //bitmap for active control
+    EBtnBmpActivePressed,         //bitmap for pressed active control
+                                
+    EBtnBmpDisabled,              //bitmap for disabled control
+    EBtnBmpDimmed = EBtnBmpDisabled,    
+
+    EBtnBmpMovingIndicator,
+
+    EBtnBmpLastType = EBtnBmpMovingIndicator                 
+    };
+
+//control event type
+enum TControlEvent
+    {
+    EEventButtonDown,               //for button
+    EEventButtonUp,                 //for button
+    EEventDraggingStart,             //for drag bar
+    EEventDragging,                   //for drag bar
+    EEventDraggingEnd,                //for drag bar
+    EEventVirtualKeyUp,             //for virtual key
+    EEventVirtualKeyDown,           //for virtual key
+    EEventHwrStrokeStarted,         //for hwr window
+    EEventHwrStrokeFinished,        //for hwr window
+    EEventHwrCharacterTimerOut,     //for hwr window
+    EEventCandidateSelected,        //for candidate window
+    EEventButtonLongPress,          //for dragbar long press event  
+
+    EEventSizeChanged,              //for base control size change
+    EEventRegionUpdated,            //region has been updated
+
+    EEventSetAppCursorSelection,    //for app cursor selection changing
+
+    EEventControlFocusGained,
+    EEventControlFocusLost,
+    
+    //Cancel button down event, this happends when button up in another control
+    EEventButtonDownCanceled,  
+    EEventHwrStrokeCanceled,     
+    
+    EEventControlDestroyed,
+    
+    EEventChoiceSelected,
+    EEventPointerLeftControl,      //Pointer leaves a control after button down
+    EEventPointerEnterControl,      //pointer re-enters a control after button down
+    
+    EEventVirtualKeyLatched,    //pointer down in a latched virtual key
+    EEventVirtualKeyUnLatched,      //point down in a unlatched virtaul key
+    EEventICFSelectionChanged,  //ICF selection has been changed   
+    EEventRawKeyDownEvent,		//raw ITU-T key down event  
+    EEventRawKeyUpEvent,		//raw ITU-T key up event  
+    EEventPointerDownOnNomatch, //pointer down on ICF nomatch range
+    EEventPointerDownOnInline, // pointer down on ICF inline, but not in nomatch range
+    EEventCapturePointer,
+    EEventIcfPointerUpEvent,		   //Point up in icfevent
+    EEventTooltipPointerUp,
+    EEventTooltipPointerLeave,
+    EEventTooltipPointerEnter,
+    EEventCommitUnderLine,
+    EEventInsertSpace,
+    EEventControlExtBase = 1000,    //extended event for common control
+    EEventControlUserBase = 2000    //user event starts from here
+    };
+    
+//shadow bitmap index
+/****************************************************************************/
+// A shadow is drawn by 8 bitmaps. Their position is defined here
+//
+//      tl  tm  tr
+//      lm      rm
+//      bl  bm  br
+//
+/****************************************************************************/
+
+enum TShadowBitmapIndex
+    {
+    KShadowBmpTl,   //top left bitmap
+    KShadowBmpTm,   //top middle bitamp     
+    KShadowBmpTr,   //top right bitmap
+
+    KShadowBmpLm,   //left middle bitmap
+    KShadowBmpRm,   //right middle bitmap    
+        
+    KShadowBmpBl,   //bottom left bitmap
+    KShadowBmpBm,   //bottom middle bitmap    
+    KShadowBmpBr,   //bottom right bitmap   
+    };
+
+/**
+ *  CFepUiBaseCtrl
+ *
+ *  Base control for all FEP UI layout controls.
+ *
+ *  @lib feplayoutcontrol.lib
+ *  @since S60 v4.0
+ */
+class CFepUiBaseCtrl : public CBase, public MPositionObserver,
+                        public MOnResourceChangFunctions
+    {
+friend class CControlGroup;    
+friend class CInsertionPoint;
+public:
+    enum TZOrder
+        {
+        EOrderBackground = 1500, //order for background control
+        EOrderNomal = 1000, //default z-order for control
+        EOrderFront = 500,  // front order for control
+        EOrderTopMost = 0  // for top most control
+        };
+
+public:
+    /**
+     * Constructor
+     *
+     * @since S60 V4.0
+     * @param aRect The rectangle area for this control
+     * @param aUiLayout Ui layout who contains this control. Ownership not transferred
+     * @param aControlId control Id
+     */    
+    IMPORT_C CFepUiBaseCtrl(const TRect& aRect,CFepUiLayout* aUiLayout,
+                                                            TInt aControlId);
+
+    /**
+     * Constructor. Used internally by CControlGroup
+     *
+     * @since S60 V4.0
+     * @param aControl The control to be added. The control must set its extent
+     *                  before added to the layout.
+     * @param aUiLayout Ui layout who contains this control. Ownership not transferred               
+     * @param aOwnership The ownership of the window control. ETrue if it's transfered 
+     * to this control
+     */                                                                    
+     CFepUiBaseCtrl(CCoeControl* aControl, CFepUiLayout* aUiLayout,TBool aOwnership = ETrue);
+                                                            
+    /**
+     * Do base contruction. Allocate event data buffer
+     * Each derived control must call this in its contruction time
+     * 
+     * @since S60 v4.0
+     */
+    IMPORT_C void BaseConstructL();    
+
+    /**
+     * Destructor.
+     *
+     * @since S60 V4.0        
+     */    
+    IMPORT_C virtual ~CFepUiBaseCtrl();           
+        
+    /**
+     * Pure virtual function, draws the control
+     *
+     * @since S60 V4.0
+     */               
+     IMPORT_C virtual void Draw();
+     
+    /**
+     * Redraws the content in a control
+     *
+     * @since S60 V4.0
+     * @param aRect The rect to be redrawed
+     */               
+     IMPORT_C virtual void ReDrawRect(const TRect& aRect);     
+        
+    /**
+     * Capture or release the pointer. 
+     * After capturing, all UI layout event will be processed by this control
+     *
+     * @since S60 V4.0
+     * @param aFlag The flag indicates capturing or releasing.
+     * @return The control which captures the pointer before.
+     */               
+    IMPORT_C CFepUiBaseCtrl* CapturePointer(TBool aFlag = ETrue);
+
+    /**
+     * Clear the whole control area
+     *
+     * @since S60 V4.0
+     */        
+    IMPORT_C void Clear();
+   
+    /**
+     * Clear a area in the control
+     *
+     * @since S60 V4.0
+     * @param aRect The rect to be cleared.
+     */                        
+    IMPORT_C void ClearRect(const TRect& aRect);
+
+    /**
+     * Hide or shoe control. A hiden control will not handle the event.
+     *
+     * @since S60 V4.0
+     * @param aFlag ETrue if want to hide the control.
+     */                                               
+    IMPORT_C virtual void Hide(TBool aFlag);
+
+    /**
+     * Bring the control to top most in current control group and show it.
+     *
+     * @since S60 V5.0
+     */                                               
+    IMPORT_C void BringToTop();
+
+    /**
+     * Bring the control to back most in current control group and show it.
+     *
+     * @since S60 V5.0
+     */                                                   
+    IMPORT_C void BringToBack();
+    /*
+     * Set background bitmap
+     *
+     * @since S60 V4.0
+     * @param aBmp The background bitmap. Ownership transferred to control
+     */
+    IMPORT_C virtual void SetBackgroundBitmapL(CFbsBitmap* aBmp);
+    
+    /**
+     * Set background mask bitmap
+     *
+     * @since S60 V4.0
+     * @param aBmp The background bitmap. Ownership transferred to control
+     */
+    IMPORT_C virtual void SetBackgroundMaskBitmapL(CFbsBitmap* aBmp);
+
+    /**
+     * Check whether this control contains the point
+     *
+     * @since S60 V4.0
+     * @param aPoint The point to be checked
+     * @return ETrue if control valid region contains the point, otherwise EFalse
+     */
+    IMPORT_C virtual TBool Contains(const TPoint& aPt);
+
+    /**
+     * Set control's rectangle
+     *
+     * @since S60 V4.0
+     * @param aRect The new control area
+     */                                       
+    IMPORT_C virtual void SetRect(const TRect& aRect);
+    
+    /**
+     * Set shadow rect. Shadow rect defines the outside rect of the control.
+     * The shadow is drawn between this rect and control's rect using bitmaps
+     *
+     * @since S60 V4.0
+     * @param aRect The shadow rect. Shadow rect must bigger than control's
+     *        rect, otherwise no effect.
+     */    
+    IMPORT_C void SetShadowRect(const TRect& aRect);        
+
+    /**
+     * Set shadow rect for a shadow area.
+     * The nth shadow is drawn in this shadow rect
+     *
+     * @since S60 V4.0
+     * @param aRect The shadow rect.
+     * @param aIndex The index position for shadow rect 
+     */        
+    IMPORT_C void SetShadowAreaRect(const TRect& aRect, TShadowBitmapIndex aIndex);
+
+    /**
+     * Add event obeserver.
+     * The observer will get notified when control event happens.
+     *
+     * @since S60 V4.0
+     * @param aObserver An event obeserver. Ownership not transferred
+     */                                       
+    IMPORT_C void AddEventObserver(MEventObserver* aObserver);
+            
+    /**
+     * Remove event obeserver
+     *
+     * @since S60 V4.0
+     * @param aObserver An event obeserver to be removed.
+     */                                                       
+    IMPORT_C void RemoveEventObserver(MEventObserver* aObserver);
+    
+    /**
+     * Report event to event observer
+     *
+     * @since S60 V4.0
+     * @param aEventType the event type
+     * @param aEventData Event data
+     */
+    IMPORT_C void ReportEvent(TInt aEventType, const TDesC& aEventData = KNullDesC);
+    
+    /**
+     * Update control's valid region when other control hiding or displaying.
+     * This is usually used for HWR window to change it's writing area.
+     *
+     * @since S60 V4.0
+     * @param aCtrl The control whose displaying status changed
+     * @param bFlag ETrue if control is hiden, otherwise EFalse
+     */        
+    IMPORT_C virtual void UpdateValidRegion(CFepUiBaseCtrl* aCtrl,TBool aRemoveFlag);
+    
+    /**
+     * Move conntrol
+     *
+     * @since S60 V4.0
+     * @param aOffset The offset to be moved
+     */                
+    IMPORT_C virtual void Move(const TPoint& aOffset);
+
+    /**
+     * Set control active
+     *
+     * @since S60 V4.0
+     * @param aFlag The active flag. ETrue if active, otherwise EFalse
+     */                                
+    IMPORT_C virtual void SetActive(TBool aFlag);   
+
+
+    /**
+     * 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);
+    
+    /**
+     * Handle pointer move event
+     *
+     * @since S60 V4.0
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */                  
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerMoveEventL(const TPoint& aPoint);
+    
+    /**
+     * 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);
+           
+    
+    /**
+     * 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
+     */                                
+    IMPORT_C virtual void CancelPointerDownL();
+    
+    /**
+     * 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 virtual void HandlePointerLeave(const TPoint& aPoint);
+    
+    /**
+     * Handle pointer enter event. 
+     * This will be called only when it's got pointer down event before and 
+     * pointer leaves but now comes back without pointer up event.
+     *
+     * @since S60 V4.0
+     * @param aPoint current pointer position     
+     */
+    IMPORT_C virtual void HandlePointerEnter(const TPoint& aPoint);    
+    
+
+    /**
+     * Register to layout to require updaing control valid region constantly.
+     *
+     * @since S60 v4.0
+     * @param aRequiredFlag Register or deregister. ETrue if register.
+     */        
+    IMPORT_C void RequireRegionUpdateL(TBool aRequiredFlag);
+    
+    /**
+     * Set Tactile Feedback Type
+     * Advanced Tactile feedback REQ417-47932
+     * 
+     * @since S60 v4.0
+     * @param aTactileType.
+     */
+    IMPORT_C void SetTactileFeedbackType(TInt aTactileType);
+    
+    /**
+    * Return control type
+    *
+    * @since S60 V4.0
+    * @return The control type
+    */                               
+    inline TControlType ControlType();
+    
+    /**
+    * Return tactile feedback type
+    *
+    * Advanced Tactile feedback REQ417-47932
+    * @return the tactile feedback type
+    */                               
+    inline TInt TactileFeedbackType() const;
+
+    
+    /**
+     * Get control Id
+     *
+     * @since S60 V4.0
+     * @return The control id
+     */                                       
+    inline TInt ControlId();
+    
+    /**
+     * Get control size in rect
+     *
+     * @since S60 V4.0
+     * @return The control size in rect
+     */                                      
+    inline const TRect& Rect();    
+        
+    /**
+     * Get valid region. A valid region is that the region responds to pointer.
+     *
+     * @since S60 V4.0
+     * @return The control valid region
+     */
+    inline const RRegion& Region();    
+    /**
+     * Set background color
+     *
+     * @since S60 V4.0
+     * @param aCol Background color to be used
+     */                                       
+    inline void SetBkColor(const TRgb& aCol);
+   
+    /**
+     * Set mask background color
+     *
+     * @since S60 V4.0        
+     * @param aCol The mask back ground color
+     */
+    inline void SetMaskBkCol(const TRgb& aCol);
+   
+    /**
+     * Set pen size
+     *
+     * @since S60 V4.0
+     * @param aSize New pen size
+    */                                       
+    inline void SetPenSize(const TSize& aSize);
+    
+    /**
+     * Get pen size
+     *
+     * @since S60 V4.0
+     * @return Pen size
+     */                
+    inline const TSize& PenSize();        
+  
+    /**
+     * Set pen color
+     *
+     * @since S60 V4.0
+     * @param aCol New pen color    
+     */                                       
+    inline void SetPenColor(const TRgb& aCol) ;
+
+    /**
+     * Set border size
+     *
+     * @since S60 V4.0
+     * @param aSize New border size
+    */                                       
+    inline void SetBorderSize(const TSize& aSize);
+    
+    /**
+     * Get border size
+     *
+     * @since S60 V4.0
+     * @return Border size
+     */                
+    inline const TSize& BorderSize();    
+ 
+    /**
+     * Set pen color
+     *
+     * @since S60 V4.0
+     * @param aCol New border color    
+     */                                       
+    inline void SetBorderColor(const TRgb& aCol) ;
+
+
+    /**
+     * Get pen color
+     *
+     * @since S60 V4.0
+     * @return border color    
+     */                                       
+    inline const TRgb& BorderColor() ;
+  
+    /**
+     * Get hide flag
+     *
+     * @since S60 V4.0
+     * @return ETrue if control is hiden, otherwise EFalse
+     */                                              
+    inline TBool Hiden();
+        
+    /**
+     * Get initialization status
+     *
+     * @since S60 V4.0
+     * @return Control initialization status. ETrue if initialized, otherwise EFalse.
+     */
+    inline TBool Ready();
+
+    /**
+     * set control drawing status. It won't be drawn if not ready
+     *
+     * @since S60 V4.0
+     * @param aReadyFlag The control ready flag
+     */
+    inline void SetReady(TBool aReadyFlag);
+            
+    /**
+     * Test whether the control belongs one kind of control class
+     *
+     * @since S60 V4.0
+     * @param aCtrlClass The control class type
+     * @return ETrue if the control belongs to the class, otherwise EFalse
+     */
+    inline TBool IsKindOfControl(TStockBaseCtrlType aCtrlClass);       
+
+
+    /**
+     * Get active status
+     *
+     * @since S60 V4.0
+     * @return active status
+     */    
+    inline TBool IsActive();
+
+    /**
+     * Set control type
+     *
+     * @since S60 V4.0
+     * @param aCtrlType The control type
+     */        
+    inline void SetControlType(TControlType aCtrlType);
+
+    /**
+     * get control pointer down status
+     *
+     * @since S60 V4.0
+     * @return The pointer down status. ETrue if has pointer down
+     */    
+    inline TBool PointerDown();
+
+    /**
+     * change control pointer down status
+     *     
+     * @since S60 V4.0
+     * @param aFlag The pointer down flag.
+     */    
+    inline void SetPointerDown(TBool aFlag);
+   
+    
+    /**
+     * Set control valid region
+     *     
+     * @since S60 V4.0
+     * @param aRegion The new control region
+     */   
+    inline void SetRegion(const RRegion& aRegion);
+    
+    /**
+     * Tell whether it allows other control moving on top of it
+     *
+     * @since S60 V4.0
+     * @return Overlap flag
+     */
+    inline TBool AllowOverlap();
+    
+    /**
+     * Set overlap flag
+     *
+     * @since S60 V4.0
+     * @param aFlag The new overlap falg
+     */
+    inline void SetAllowOverlap(TBool aFlag);
+    
+    
+    // from base class MPositionObserver
+
+    /**
+     * From MPositionObserver
+     * Handle position change event.
+     * It's called to change the position after it's being dragging 
+     *
+     * @since S60 V4.0
+     * @param aOffset The moving offset
+     * @return The flag whether this observer has processed the event. ETrue if processed.
+     */            
+    IMPORT_C TBool HandlePositionChange(const TPoint& aOffset);
+    
+    /**
+     * From MPositionObserver
+     * Get observer's area to be moved when position changed
+     *
+     * @since S60 V4.0
+     * @return The rect of observer's moving area
+     */            
+    IMPORT_C const TRect& MovingArea();
+    
+    /**
+     * From MPositionObserver
+     * Tell whether this observer is a fep base control
+     *
+     * @since S60 v4.0
+     * @return ETrue if this observer is a control, otherwise, EFalse.
+     */
+    IMPORT_C TBool IsFepBaseControl();   
+
+    /**
+     * Get shadow rect
+     * @since S60 V4.0
+     * @return control shadow rect
+     */                        
+    inline const TRect& ShadowRect();
+
+    /**
+     * set control shadow bitmap and mask bmp
+     * @since S60 V4.0
+     * @param The shadow background bitmap. Ownership transferred
+     * @param The shadow background mask bitmap. Ownership transferred
+     * @param aIndex The shadow bitmap position index
+     */   
+    IMPORT_C void SetShadowBmp(CFbsBitmap* aBmp,CFbsBitmap* aMaskBmp,
+                                TShadowBitmapIndex aIndex);
+    
+    /**
+     * OnActivate. Called when the layout is going to be shown.
+     *
+     * @since S60 v4.0
+     */        
+    IMPORT_C virtual void OnActivate();
+    
+    /**
+     * OnDeActivate. Called when the layout is going to be hidden
+     *
+     * @since S60 v4.0
+     */        
+    IMPORT_C virtual void OnDeActivate();
+    /**
+     * Update layout area, cause screen update. However the updating is buffered until 
+     * refresh timer time out.
+     *
+     * @since S60 V4.0
+     * @param aRect the rect to be flushed in screen
+     * @param aUpdateFlag ETrue if full update.
+     */
+    IMPORT_C void UpdateArea(const TRect& aRect,TBool aUpdateFlag= EFalse); 
+
+    /**
+     * Update layout area immediately
+     *
+     * @since S60 V4.0
+     * @param aRect the rect to be flushed in screen
+     * @param aUpdateFlag ETrue if full update.
+     */
+    IMPORT_C void UpdateAreaImmed(const TRect& aRect,TBool aUpdateFlag= EFalse); 
+    
+    /**
+     * Get shadow area rect
+     *
+     * @since S60 V4.0
+     * @param aIndex The index for shadow rect
+     */
+    inline TRect ShadowAreaRect(TShadowBitmapIndex aIndex);
+    
+    /**
+     * Call back function when layout starts dragging
+     *
+     * @since S60 V4.0
+     */
+    IMPORT_C virtual void OnLayoutDraggingStart();
+
+    /**
+     * Call back function when layout ends dragging
+     *
+     * @since S60 V4.0
+     */
+    IMPORT_C virtual void OnLayoutDraggingEnd();
+    
+    /**
+     * Get window based control
+     *
+     * @since S60 V4.0
+     * @return The window based control associated with this control
+     */
+    inline CCoeControl* WndBasedControl();
+    
+    // from base class MOnResourceChangFunctions
+    
+    /**
+     * From MOnResourceChangFunctions
+     * Set resource Id
+     *
+     * @since S60 V4.0
+     * @param aResId The resource id;
+     */                
+    IMPORT_C void SetResourceId(TInt32 aResId);    
+    
+    /**
+     * Get hide flag
+     *
+     * @since S60 V4.0
+     * @return ETrue if all controls are hiden, otherwise EFalse
+     */ 
+    IMPORT_C TBool WholeHiden();
+    
+    /**
+     * From MOnResourceChangFunctions
+     * Construct from resource
+     *
+     * @since S60 V4.0
+     */                
+    IMPORT_C void ConstructFromResourceL();
+    
+    /**
+     * Get resource Id
+     *
+     * @since S60 V4.0
+     * @return The resource id;
+     */                
+    inline TInt32 ResourceId();
+    
+    IMPORT_C void SetParent(CFepUiBaseCtrl* aParent);
+    
+    inline CFepUiBaseCtrl* ParentCtrl();
+    
+    /**
+     * Get the associated CCoeControl control
+     *
+     * @since S60 V5.0
+     * @return The CCoeControl it contains;
+     */                    
+    inline CCoeControl* WndControl();
+    
+    /**
+     * Simulates a internal raw event. The event is handled inside pen input ui,
+     * will not go for window server.
+     *
+     * @since S60 V5.0
+     * @param aPtEvent The simulated raw event
+     */
+    IMPORT_C void SimulateRawEvent(const TRawEvent& aEvent);    
+    
+    IMPORT_C void SetOrdinalPos(TInt aPos);
+    
+    inline TInt OrderPos() const;
+    
+    TInt AbsOrderPos();
+    
+    /**
+     * Check whether this control is on top of another control. If a control is on top of another
+     * it will draw later so it will overwrite the overlapped area.
+     *
+     * @since S60 V5.0
+     * @param aCtrl The compared control
+     * @return ETrue if this control is on top of the specified  one. 
+     */    
+    TBool IsOnTopOf(CFepUiBaseCtrl* aCtrl);
+    
+    /**
+     * Check whether this control has overlapped area with another one
+     *
+     * @since S60 V5.0
+     * @param aCtrl The compared control
+     * @return ETrue if this control has overlapped area with the specified  one. 
+     */        
+    TBool Overlapped(CFepUiBaseCtrl* aCtrl);
+    
+    /**
+     * Compare order pos
+     *
+     * @since S60 V5.0
+     * @return ETrue if this control is on top of the specified one.
+     */                                                   
+    TBool CompareOrder(CFepUiBaseCtrl* aCtrl);
+    
+    
+    /**
+     * Compare order pos for two control within the same control grop
+     *
+     * @since S60 V5.0
+     * @return ETrue if this control is on top of the specified one.
+     */                                                       
+    TBool CompareOrderInSameGroup(CFepUiBaseCtrl* aCtrl);
+    
+protected:
+         
+    /**
+     * Draw bitmap to control rect
+     *
+     * @param aBitmap The given bitmap
+     * @param aStretchFlag The flag tells whether this bitmap should be stretched
+     */  	
+	IMPORT_C void DrawBitmap(const CFbsBitmap* aBitmap,TBool aStretchFlag);    
+     
+    /**
+     * Draw bitmap to control rect
+     *
+     * @param aRect The drawn rect
+     * @param aBitmap The given bitmap
+     * @param aStretchFlag The flag tells whether this bitmap should be stretched
+     */  	
+	IMPORT_C void DrawBitmap(const TRect aRect, const CFbsBitmap* aBitmap,TBool aStretchFlag);    
+    
+    /**
+     * Get background color
+     *
+     * @since S60 V4.0
+     * @return Background color
+     */                        
+    inline const TRgb& BkColor();
+
+    /**
+     * get mask background color
+     *
+     * @since S60 V4.0        
+     * @return The mask back ground color
+     */
+    inline const TRgb& MaskBkCol();       
+    
+    /**
+    * Get pen color
+    * @since S60 V4.0
+    * @return Pen colore
+    */                        
+    inline const TRgb& PenColor();
+
+    /**
+     * Get Ui layout
+     *
+     * @since S60 V4.0
+     * @return The ui layout
+     */        
+    inline CFepUiLayout* UiLayout();  
+    
+    /**
+     * Get ui layout root control
+     *
+     * @since S60 v4.0
+     * @param aPos The new position. 
+     */                        
+    inline CFepUiLayoutRootCtrl* RootControl();        
+    
+    /**
+     * get graphics context for sprite or window
+     * @since S60 V4.0
+     * @return The graphic context
+     */
+    inline CBitmapContext* BitGc();
+
+    /**
+     * get Bitmap device for sprite or window
+     * @since S60 V4.0
+     * @return The bitmap device
+     */
+    inline CFbsBitmapDevice* BitmapDevice();
+
+    /**
+     * get Mask bitmap device for sprite or window
+     * @since S60 V4.0
+     * @return The mask bitmap device
+     */
+    inline CFbsBitmapDevice* MaskBitmapDevice();
+    
+    /**
+     * get control background mask bmp
+     * @since S60 V4.0
+     * @return The background mask bitmap
+     */
+    inline CFbsBitmap* BkMaskBmp();
+    
+    /**
+     * get control background  bmp
+     * @since S60 V4.0
+     * @return The background bitmap
+     */
+    inline CFbsBitmap* BackgroundBmp();
+
+    /**
+     * set control background  bmp
+     * @since S60 V4.0
+     * @param The background bitmap to be set. Ownership transferred.
+     */   
+    inline void SetBackgroundBmp(CFbsBitmap* aBmp);
+
+    /**
+     * set control background mask bmp
+     * @since S60 V4.0
+     * @param The background mask bitmap to be set. Ownership transferred
+     */   
+    inline void SetBackgroundMaskBmp(CFbsBitmap* aBmp);  
+    /**
+     * Draw shadow
+     *
+     * @since S60 V4.0
+     */   
+    IMPORT_C void DrawShadow();
+    
+    /**
+     * Do base contruction. Allocate event data buffer
+     * Each derived control must call this in its contruction time
+     * 
+     * @since S60 v4.0
+     * @param aRoot The root control.
+     */
+    void BaseConstructL(CFepUiLayoutRootCtrl* aRoot);
+    
+    /**
+     * Draw mask background
+     * 
+     * @since S60 v4.0
+     * @param aBmpStretchFlag Flag tells whether the bitmap will be stretched
+     * to fit the rect. Default value is ETrue.
+     */    
+    IMPORT_C void DrawMaskBackground(TBool aBmpStretchFlag = ETrue);
+    
+    /**
+     * Draw opaque mask background. Draw an opaque ground.
+     * 
+     * @since S60 v4.0
+     * @param aBmpStretchFlag Flag tells whether the bitmap will be stretched
+     * to fit the rect. Default value is ETrue.
+     */        
+    IMPORT_C void DrawOpaqueMaskBackground(TBool aBmpStretchFlag = ETrue);
+    
+    /**
+     * Draw opaque mask background. Draw an opaque ground.
+     * 
+     * @since S60 v4.0
+     * @param aBmpStretchFlag Flag tells whether the bitmap will be stretched
+     * @param aRect Rect to be draw
+     * to fit the rect. Default value is ETrue.
+     */        
+    IMPORT_C void DrawOpaqueMaskBackground(const TRect aRect, TBool aBmpStretchFlag = ETrue);
+    
+    /**
+     * Draw transparent mask background
+     * 
+     * @since S60 v4.0
+     * @param aBmpStretchFlag Flag tells whether the bitmap will be stretched
+     * to fit the rect. Default value is ETrue.
+     */           
+    IMPORT_C void DrawTransparentMaskBackground(const TRect& aRect, TBool aBmpStretchFlag = ETrue);
+
+    /**
+     * Draw background.
+     * 
+     * @since S60 v4.0
+     * @param aBmpStretchFlag Flag tells whether the bitmap will be stretched
+     * to fit the rect. Default value is ETrue.
+     */            
+    IMPORT_C void DrawBackground(TBool aBmpStretchFlag = ETrue);   
+
+    /**
+     * Draw background.
+     * 
+     * @since S60 v4.0
+     * @param aBmpStretchFlag Flag tells whether the bitmap will be stretched
+     * @param aRect Rect to be draw
+     * to fit the rect. Default value is ETrue.
+     */            
+    IMPORT_C void DrawBackground(const TRect aRect,TBool aBmpStretchFlag = ETrue);  
+        
+    /**
+     * Test whether control is able to be drawn. e.g, is ready or shown?
+     * 
+     * @since S60 v4.0
+     * @return ETrue if able to be drawn.
+     */                
+	IMPORT_C TBool AbleToDraw();    
+	
+    /**
+     * Draw background to device
+     * 
+     * @since S60 v4.0
+     * @param aRect The device rect to be filled.
+     * @param aDevie The device to be drawn
+     * @param aBmp The background bmp
+     * @param aBrushCol The brush color
+     * @param aPenCol The pen color
+     * @param aBmpStretchFlag The stretch flag for drawing bitmap.
+     */  	
+    void DrawBackgroundToDevice(TRect aRect,CFbsDevice *aDevice, CFbsBitmap* aBmp, 
+    		const TRgb& aBrushCol, const TRgb& aPenCol,TBool aBmpStretchFlag);
+	
+    /**
+     * Enable region update
+     * 
+     * @since S60 v5.0     
+     */	
+    inline void EnableRegionUpdating();
+    
+    /**
+     * Enable region update
+     * 
+     * @since S60 v5.0     
+     */    
+    inline void DisableRegionUpdating();
+    
+    /**
+     * Get the clip region 
+     * 
+     * @since S60 v5.0     
+     * @return The clip region
+     */                
+    IMPORT_C const TRegion& ValidClipRegion(); 
+    
+    //From CBase
+    /**
+     * Get the extension
+     *
+     * @since S60 v5.0
+     * @param aExtensionId Extension UID
+     * @param a0 The extension returned
+     * @param a1 Any passed in parameter.
+     * @return Operation result. Implementation dependent
+     */													     
+    virtual IMPORT_C TInt Extension_(TUint aExtensionId, TAny *&a0, TAny *a1);    
+    /**
+     * Handle system resource change
+     *
+     * @since S60 V5.0
+     * @param aType The system resource change type
+     */
+    virtual IMPORT_C void HandleResourceChange(TInt aType);
+
+    /**
+     * Handle pen UI graphic device size change event
+     *
+     * @since S60 V5.0
+     */
+    virtual IMPORT_C void GraphicDeviceSizeChanged();
+    
+    inline void SetHidenFlag(TBool aFlag);
+private:
+    /**
+     * Draw shadow bitmap
+     *
+     * @since S60 V4.0
+     * @param aRect The rect to be drawn
+     * @param aIndex The shadow bitmap position index
+     */   
+    void DrawShadowBitmap(const TRect& aRect,TInt aIndex);
+    
+protected:
+    /**
+     * Indicate whether the pointer has leaved a control
+     */    
+    TBool iPointerLeft;
+    /**
+     * Control rect. It's relative to ui layout 
+     */
+    TRect iRect;        
+
+    /**
+     * Control shadow rect. It's relative to ui layout 
+     */
+    TRect iShadowRect;        
+
+    /**
+     * Shadow area rect
+     */
+    TRect iShadowAreaRect[KShadowBitmapTotalNum]; 
+
+    /**
+     * CCoeControl based control
+     * Own
+     */ 
+    CCoeControl* iWndControl;
+
+    /**
+     * The resource Id associatied with this control
+     */
+    TInt32 iResourceId;
+
+    /**
+     * Control border color
+     */
+    TRgb iBorderColor;
+    
+    /**
+     * Control border size
+     */
+    TSize iBorderSize;
+    
+    /** 
+     * Valid region which reacts to the pointer event
+     */
+    RRegion iValidRegion;   
+
+    /**
+     * Parent control
+     * Not own
+     */
+    CFepUiBaseCtrl* iParentCtrl;
+
+    /**
+     * Flag indicates whether rect changed should report to parent
+     */
+    TBool iUpdateFlagEnabled;
+
+    /**
+     * The actual drawing region. so drawing won't happend outside of the region.
+     */    
+    RRegion iClipRegion; 
+    
+private:    
+    /**
+     * Control id
+     */
+    TInt iControlId;
+    /**
+     * Control type. 
+     * User derivated control should starts from EUserCtrlBase
+     */
+    TControlType iControlType;
+
+    /**
+     * Background color
+     */
+    TRgb iBackgroundCol;
+
+    /**
+     * Maks backgroud color
+     */
+    TRgb iMaskBkCol;
+
+    /**
+     * pen size
+     */
+    TSize iPenSize;
+
+    /**
+     * Pen color
+     */
+    TRgb iPenColor;
+
+    /**
+     * Flag indicates whether the control is hiden
+     */
+    TBool iHiden;
+    
+    /* 
+     * Event type of current event
+     */
+    TEventType iEventType;
+
+    /**
+     * flag to show whether pen has beed pressed down in this control
+     */
+    TBool iPointerDown;
+    
+    /**
+     * flag to indicate whehter this control is ready to drawn
+     */
+    TBool iReady;
+    
+    
+    /**
+     * control active status.
+     */
+    TBool iIsActive;    
+    
+    /**
+     * Flag tells whether a draging component can be moved on top of this control
+     */
+    TBool iAllowOverlap;
+    
+    /** 
+     * event observer list
+     */
+    RPointerArray<MEventObserver> iEventObserverList;               
+
+    //pointer members
+
+    /**
+     * Background bitmap
+     * Own.
+     */
+    CFbsBitmap* iBackgroundBmp;
+
+    /**
+     * Background mask bitmap
+     * Own.
+     */
+    CFbsBitmap* iBkMaskBmp;
+
+    /**
+     * The ui layout which contains this control
+     * Not own.
+     */
+    CFepUiLayout* iUiLayout;
+    
+    /** 
+     * Root control. It's a control group.
+     * Not Own
+     */
+    CFepUiLayoutRootCtrl* iRootCtrl;        
+    /**
+     * Shadow bitmaps.
+     * Own
+     */ 
+    CFbsBitmap* iShadowBmp[2*KShadowBitmapTotalNum+1];
+
+    /**
+     * Layout owner
+     * Not own
+     */
+    MLayoutOwner* iLayoutOwner;
+    
+    /**
+     * Ownership of the window control. If true, it will delete the window control during
+     * destruction.
+     */
+    TBool iOwnWndCtrl;    
+    
+    
+    //When pop up shown, the locked area will be also reduced from control.
+    RRegion iClipRegionWithoutLockedArea;     
+    
+    
+    TInt iOrdinalPos; 
+    /**
+     * Reservered
+     */
+    TInt iReservered1;
+
+    /**
+     * Reservered
+     */
+    TInt iReservered2;   
+    
+    NONSHARABLE_CLASS(CFepUiBaseCtrlExtension)
+    	{
+    	public: 
+    		
+		CFepUiBaseCtrlExtension(TInt aTactileType);
+		
+		/**
+		 * Set Tactile Feedback Type
+		 * Advanced Tactile feedback REQ417-47932
+		 */
+		void SetTactileFeedbackType(TInt aTactileType);
+		
+		/**
+		* Return tactile feedback type
+		*
+		* Advanced Tactile feedback REQ417-47932
+		* @return the tactile feedback type
+		*/  
+		IMPORT_C TInt TactileFeedbackType();
+		
+    	private:
+        /**
+         * Tactile Feedback type
+         */
+        TInt iTactileType;
+    	};
+    };
+//end of class CFepUiBaseCtrl
+#include "peninputlayoutbasecontrol.inl"
+#endif //C_CFEPUIBASECTRL_H