diff -r 000000000000 -r eb1f2e154e89 textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayout.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayout.h Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,678 @@ +/* +* Copyright (c) 2005-2008 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 peninput ui layout +* +*/ + + +#ifndef C_CFEPUILAYOUT_H +#define C_CFEPUILAYOUT_H + +// INCLUDES +#include +#include "peninputuilayoutownerinf.h" +#include "peninputuilayoutbase.h" +#ifdef RD_TACTILE_FEEDBACK +#include +#endif //RD_TACTILE_FEEDBACK +#include "peninputlayoutminterface.h" +#include "peninputlayoutbasecontrol.h" +#include "peninputcmdparam.h" + +class CFepUiCursor; + +class CControlGroup; +class CDragBar; +class CFepUiLayoutRootCtrl; +class CCoeControl; +const TInt KMaxDragBarNum = 4; + + +/** + * class CFepUiLayout + * + * This is main class for Fep UI framework. + * + * @lib peninputlayoutcontrol.lib + * @since S60 v4.0 + */ +class CFepUiLayout : public CBase, + public MPenUiLayoutBase, + public MEventObserver + { +public: + /** + * Destructor. + * + * @since S60 v4.0 + */ + IMPORT_C virtual ~CFepUiLayout(); + + /** + * BaseConstructL + * Does the base construction. Derivated class must call this when constructed. + * + * @since S60 v4.0 + */ + IMPORT_C virtual void BaseConstructL(); + + /** + * AddControlL + * Add a control to layout. + * + * @since S60 v4.0 + * @param aControl The control to be added. The ownership transferred to layout + * @param aEventObserverFlag ETrue if layout is this control's event observer. + * Otherwise not. Default value is ETrue. + */ + IMPORT_C void AddControlL(CFepUiBaseCtrl* aControl, + TBool aEventObserverFlag = ETrue); + + /** + * AddControlL + * Add a control to layout. + * + * @since S60 v4.0 + * @param aControl The control to be added. The ownership transferred to layout + * @param aEventObserverFlag ETrue if layout is this control's event observer. + * Otherwise not. Default value is ETrue. + */ + IMPORT_C void AddControlL(CCoeControl* aControl, + TBool aEventObserverFlag = ETrue); + + /** + * RemoveControl + * Remove a control from layout. + * + * @since S60 v4.0 + * @param aControl The control to be removed. + */ + IMPORT_C void RemoveControl(CFepUiBaseCtrl* aControl); + + /** + * RemoveControl + * Remove a control from layout. + * + * @since S60 v4.0 + * @param aControl The control to be removed. + */ + IMPORT_C void RemoveControl(CCoeControl* aControl); + + + /** + * Get ui layout control list + * + * @since S60 v4.0 + * @return The control list. + */ + inline const RPointerArray& ControlList(); + + /** + * Report layout event to layout owner + * + * @since S60 v4.0 + * @param aEventType the event type + * @param aEventData Event data + */ + IMPORT_C void SignalOwner(TInt aEventType, + const TDesC& aEventData = KNullDesC); + + + /** + * Test whether the position is valid. + * This is used to test the target position when draging controls to some place + * + * @since S60 v4.0 + * @param aRect The rect to be checked. + * @param aDragbar The dragbar being dragged + * @param aVInfo The valid information in vertial dirtection. ETrue is vertical + * moving is valid.It's only used when aRect is not valid but moving in + * vertical direction is valid. + * @param aHInfo The valid information in horizontal dirtection. ETrue is + * horizontal moving is valid.It's only used when aRect is not + * valid but moving in vertical direction is valid. + * @param aFlag ETrue if whole layout is moving, otherwise, only components moving + * @return ETue if aRect is a valid position. Otherwise, EFalse. + */ + IMPORT_C virtual TBool IsValidDestination(const TRect& aRect, + CDragBar* aDragBar, + TBool& aVInfo,TBool& aHInfo, + TBool aFlag); + + /** + * Enable whole layout moved by a dragbar. + * + * @since S60 v4.0 + * @param aDragBar The dragging bar drags the layout + */ + IMPORT_C void EnableLayoutMoving(CDragBar* aDragbar); + + + /** + * Get ui layout root control + * + * @since S60 v4.0 + * @param aPos The new position. + */ + inline CFepUiLayoutRootCtrl* RootControl(); + + /** + * Get the layout owner + * + * @since S60 v4.0 + * @return The layout owner + */ + inline MLayoutOwner* LayoutOwner(); + + /** + * Set the layout size. It will update region-aware control's valid region + * It will call owner's LayoutSizeChanged if size changed. + * + * @since S60 v4.0 + * @param aRect The layout size. + */ + IMPORT_C void SetRect(const TRect& aRect); + + /** + * Set the layout shadow size. Shadow will draw between shadow rect and + * layout rect. Ui layout rect is then changed to shadow rect. + * + * @since S60 v4.0 + * @param aRect The layout shadow size. + */ + 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.The rect's coordinate is relative to layout. + * @param aIndex The index position for shadow rect + */ + IMPORT_C void SetShadowAreaRect(const TRect& aRect, + TShadowBitmapIndex aIndex); + + + /** + * set layout's 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. See CFepUiBaseCtrl's + * SetShadowBmp the defination of TShadowBitmapIndex + */ + IMPORT_C void SetShadowBmp(CFbsBitmap* aBmp,CFbsBitmap* aMaskBmp, + TShadowBitmapIndex aIndex); + + + /** + * Set whole screen size. + * + * @since S60 v4.0 + * @param aSize The screen size + */ + inline void SetScreenSize(const TSize& aSize); + + /** + * get whole screen size. + * + * @since S60 v4.0 + * @return The screen size + */ + inline const TSize& ScreenSize(); + + /** + * Lock a area + * + * @since S60 v4.0 + * @param aRect The locked area + * @param aOwner The owner of the locked area + */ + IMPORT_C void LockArea(const TRect& aRect, CFepUiBaseCtrl* aOwner); + + /** + * unlock a area + * + * @since S60 v4.0 + * @param aRect The locked area + * @param aCtrl The owner of the locked area + */ + IMPORT_C void UnLockArea(const TRect& aRect, CFepUiBaseCtrl* aCtrl); + + /** + * get the locked area + * + * @since S60 v5.0 + * @reeturn return current locked area. + */ + inline const TRect& LockedArea(); + + /** + * get the locked area owner + * + * @since S60 v5.0 + * @reeturn return current locked area owner. + */ + inline const CFepUiBaseCtrl* LockareaOwner() const; + + /** Update layout area, cause flush in screen + * + * @since S60 V4.0 + * @param aCtrl The control who requires the update + * @param aRect the rect to be flushed in screen + * @param aUpdateFlag ETrue if full update. + * @param aImmedFlag flag tells whethere updating is executing immediately + */ + IMPORT_C void UpdateArea(const CFepUiBaseCtrl* aCtrl,const TRect& aRect, + TBool aUpdateFlag,TBool aImmedFlag = EFalse); + + /** + * Call back function. Called when cursor in input context field changed by pointer. + * Just signal layout owner this event in default implementation + * + * @since S60 v4.0 + * @param aCursorSel Current cursor selection in input context field + */ + IMPORT_C virtual void SetAppEditorCursor(const TCursorSelection& aCursorSel, + TBool aReqMoreText = EFalse); + + /** + * Get layout status. Layout is only ready after initialized. + * @since S60 v4.0 + * + * @return The layout status + */ + inline TBool LayoutReady(); + + //from base class MPenUiLayoutBase + + /** + * From MPenUiLayoutBase + * Init. + * Do layout initialization. It's called by layout owner + * + * @since S60 v4.0 + * @return The layout rect including the shadow rect + */ + IMPORT_C TRect Init(); + + /** + * From MPenUiLayoutBase + * HandleEventL. Handle UI event. + * There are only 3 kinds of UI event right now: raw event, + * pointer and pointer buffer event. + * + * @since S60 v4.0 + * @param aType The event type. See TEventType + * @param aEventData The event data. + * @return The control which processes the event + */ + IMPORT_C TBool HandleEventL(TEventType aType, const TAny* aEventData); + + /** + * From MPenUiLayoutBase + * HandleCommand. Handle layout command event. + * + * @since S60 v4.0 + * @param aCmd Command Id. + * @param aData Data for command. + * @return precessing result. Errors when return value small than 0. + */ + IMPORT_C TInt HandleCommand(TInt aCmd, TUint8* aData) ; + + /** + * From MPenUiLayoutBase + * Draw layout. + * + * @since S60 v4.0 + */ + IMPORT_C virtual void Draw() ; + + /** + * From MPenUiLayoutBase + * OnResourceChange. Inform layout the system resource changed. + * + * @since S60 v4.0 + * @param aType the event type + * @return KErrNone if successfully size changing. + */ + IMPORT_C virtual TInt OnResourceChange(TInt aType); + + /** + * From MPenUiLayoutBase + * HandleAppInfoChange. Inform UI that application infomation changed. + * + * @since S60 v5.0 + * @param aInfo The information. + * @param aType The information type + */ + IMPORT_C virtual void HandleAppInfoChange(const TDesC& aInfo, TPeninputAppInfo aType); + + /** + * Handle editor text coming + * Called by animation dll when app editor text is coming. + * If a ui layout has a editor area, it must implements this function to get the text + * + * @since S60 v4.0 + * @param aData The fep input context field data + * @return KErrNone is operation succeeded. + */ + IMPORT_C virtual TInt OnAppEditorTextComing(const TFepInputContextFieldData& aData); + + /* + * From MPenUiLayoutBase + * Get the max editor length which the input context field can hold + * + * @since S60 v4.0 + * @return The editor length + */ + IMPORT_C virtual TInt GetInputContextFieldMaxLen(); + + /** + * Get layout start position + * + * @since S60 v4.0 + * @return The layout start position + */ + IMPORT_C virtual TPoint Position(); + /** + * Get layout area + * + * @since S60 v4.0 + * @return The layout size in rect + */ + IMPORT_C virtual TRect Rect(); + + /** + * From MPenUiLayoutBase + * Destroy layout + * + * @since S60 v4.0 + * @return The layout size in rect + */ + IMPORT_C virtual void Destroy(); + + /** + * From MPenUiLayoutBase + * OnActivate. Called by owner when the layout is going to be shown. + * + * @since S60 v4.0 + */ + IMPORT_C void OnActivate(); + + /** + * From MPenUiLayoutBase + * OnDeActivate. Called by owner when the layout is going to be hidden + * + * @since S60 v4.0 + */ + IMPORT_C void OnDeActivate(); + /** + * SemiTransparencyRequired. Tell whether this layout requires semi-transparency. + * This is to save memory used in mask bitmap. If transparency not deeded, + * We use black-white bitmap. + * + * @since S60 v4.0 + * @return ETrue if layout require transparency, otherwise EFalse. + */ + IMPORT_C TBool SemiTransparencyRequired(); + + /** + * Set layout position + * + * @since S60 v4.0 + * @param The layout position + */ + IMPORT_C void SetLayoutPos(const TPoint& aPt); + + IMPORT_C TInt GetEnabledPluginMode( ); + + /** + * RegisterFeedbackArea. Register the area which requires tactile feedback. + * Note, if two control have the same area, you need to register twice. + * + * @since S60 v4.0 + * @param aId The unique id of this area + * @param aRect The tactile area. + */ + IMPORT_C void RegisterFeedbackArea(TInt aId,const TRect& aRect); + + /** + * DeRegisterFeedbackArea. Remove the area which has required tactile feedback. + * Nothing happends if the area not registered before. + * + * @since S60 v4.0 + * @param aId The unique id of this area. Don't use negative id. + * @param aRect The tactile area. + */ + IMPORT_C void DeRegisterFeedbackArea(TInt aId,const TRect& aRect); + + /** + * ChangeFeedbackArea. Change the area which has required tactile feedback. + * + * @since S60 v4.0 + * @param aId The unique id of this area + * @param aNew The new registered area + * @param aOld Previous area for tactile feedback. + */ + IMPORT_C void ChangeFeedbackArea(TInt aId,const TRect& aNew,const TRect& aOld); + + /** + * This function can be used to check, whether touch feedback is + * supported at all in the device. + * + * @since S60 v4.0 + * @return ETrue if touch feedback is supported in this device. + */ + IMPORT_C TBool SupportTactileFeedback(); + + /** + * Gives instant feedback. + * + * Notice that the feedback might not be actually played, if + * for example user has disabled the feedback from the settings. + * + * @since S60 v4.0 + * @param aType - The logical feedback type to play. + */ + IMPORT_C void DoTactileFeedback(TInt aType); + + /** + * Gives instant feedback. + * + * Notice that the feedback might not be actually played, if + * for example user has disabled the feedback from the settings. + * + * @since S60 v4.0 + * @param aType - The logical feedback type to play. + * @param aVibraEnable - Enable Audio Feedback. + * @param aAudioEnable - Enable Vibra Feedback. + */ + IMPORT_C void DoTactileFeedback(TInt aType, TBool aVibraEnable, TBool aAudioEnable); + + /** + * Create the cursor. There is only one cursor within a pen ui. + * + * + * @since S60 v4.0 + * @return The cursor instance + */ + IMPORT_C CFepUiCursor* CreateCursor(); + + /** + * SetPositionFromOutside. Inform UI that the position is change from outside of UI. + * + * @since S60 v5.0 + * @param aInfo The information. + * @param aType The information type + */ + IMPORT_C void SetPositionFromOutside(const TPoint& aNewPos); + + + /** + * RegisterFeedbackArea. Register the area which requires tactile feedback. + * Note, if two control have the same area, you need to register twice. + * + * @since S60 v4.0 + * @param aId The unique id of this area + * @param aRect The tactile area. + */ + //Advanced Tactile feedback REQ417-47932 + IMPORT_C void RegisterFeedbackArea(TInt aId,const TRect& aRect, TInt aTactileType); + + + /** + * ChangeFeedbackType. Change the tactile feedback which has required tactile feedback. + * + * @since S60 v4.0 + * @param aId The unique id of this feedback type + * @param aRect The area + * @param aNewTactileType new feedback type. + * + */ + //Advanced Tactile feedback REQ417-47932 + IMPORT_C void ChangeFeedbackType(TInt aId, TInt aNewTactileType); + +protected: + /** + * Constructor + * + * @since S60 v4.0 + * @param aLayoutOwner The layout owner + */ + IMPORT_C CFepUiLayout(MLayoutOwner* aLayoutOwner); + + /** + * OnSkinChange. Called when system skin changed. + * + * @since S60 v4.0 + * @return KErrNone if successfully handling. + */ + IMPORT_C virtual TInt OnSkinChange(); + +private: + + /** + * Handle raw key event. Call back function. Called when raw key event happens + * Do nothing in default implementation + * + * @since S60 v4.0 + * @param aKeyEvent Key event + * @return EFalse if the key has not been processed. Otherwise ETrue. + * If key is not processed, it will be passed to CONE's control stack. + */ + IMPORT_C virtual TBool HandleRawKeyEventL(const TRawEvent& aKeyEvent); + + /** + * Handle pointer down/up event while this event is outside of the layout + * Do nothing in default implementation + * + * @since S60 v4.0 + * @param aEvent The raw event + * @return EFalse if the event needs forward on. Otherwise ETrue. + */ + IMPORT_C virtual TBool OnPointerEventOutsideLayout(const TRawEvent& aEvent); + + /** + * IsSemiTransparencyRequired. Tell whether one of the contorl require transparency. + * + * @since S60 v4.0 + * @param aCtrlList The control list + * @return ETrue if layout require transparency, otherwise EFalse. + */ + TBool IsSemiTransparencyRequired(const RPointerArray& aCtrlList); + + /** + * SizeChanged. Called when screen size changed. + * + * @since S60 v4.0 + * @param aData the event data + * @return KErrNone if successfully size changing. + */ + IMPORT_C virtual TInt SizeChanged(const TAny* aData); + + /** + * Send editor text and cursor pos + * + * @since S60 v4.0 + * @param aData Editor text and cursor pos information + */ + void SendEditorTextAndCursorPosL(TUint8* aData); + +private: + /** + * Layout dragging position. Same as iLayoutPos, but only used when layout is + * dragging. + * + */ + TPoint iLayoutDraggingPos; + + /** + * screen size + */ + TSize iScreenSize; + + /** + * Root control. It's a control group. + * Own + */ + CFepUiLayoutRootCtrl* iRootCtrl; + + /** + * Layout owner. + * Not own + */ + MLayoutOwner* iLayoutOwner; + /** + * layout dragbar number. + */ + TInt iDragbarNum; + /** + * dragbar list + */ + CDragBar* iDragbarList[KMaxDragBarNum]; + + /** + * locked area. There may be one locked area which only the locker can + * update the area. + */ + TRect iLockedArea; + + /** + * The owner of the locked area + */ + CFepUiBaseCtrl* iLockedAreaOwner; + + /** + * State indicates layout ready to be drawn + */ + TInt iLayoutReady; + + /** + * Reserved item1 + */ + TInt iReserved1; + + /** + * Flag for tactile feedback support + */ + TBool iTactileSupported; +}; + +#include "peninputlayout.inl" + +#endif C_CFEPUILAYOUT_H + +// End of file