textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutmultilineicf.h
changeset 0 eb1f2e154e89
child 3 f5a1e66df979
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutmultilineicf.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,888 @@
+/*
+* 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 base class for Edwin-like editing area
+*
+*/
+
+#ifndef C_PENINPUTLAYOUTMULTILINEICF_H
+#define C_PENINPUTLAYOUTMULTILINEICF_H
+
+#include "peninputlayoutctrlgroup.h"
+#include <coecntrl.h>
+#include <AknsItemID.h>
+#include <gdi.h>
+
+class CRichText;
+class CParaFormatLayer;
+class CCharFormatLayer;
+class CTextLayout;
+class CTextView;
+class CCoeEnv;
+class TCharFormat;
+class TCharFormatMask;
+class CInsertionPoint;
+class CFepLayoutMIcfCustomDraw;
+class CFepLayoutMIcfCustomWrap;
+class CBubbleCtrl;
+class CFepUiCursor;
+
+class CAknEdwinFormExtendedInterfaceProvider;
+class CAknInlineTextSource;
+
+class CFepLayoutMultiLineIcfEditor;
+class CTooltipBubbleCtrl;
+class CPeninputSmileyManager;
+
+
+class CFepLayoutMultiLineIcf : public CControlGroup, public MEventObserver
+    {
+public:
+    enum TArrowBtnEvent
+        {
+        EArrowLeft,
+        EArrowRight,
+        EArrowUp,
+        EArrowDown
+        };
+
+    enum TIcfState
+        {
+        EIcfNormal,
+        EIcfInline,
+        EIcfAutoComplete
+        };
+public:  
+
+    IMPORT_C static CFepLayoutMultiLineIcf* NewL(TRect aRect,
+                                                 CFepUiLayout* aUiLayout,
+                                                 TInt aControlId,
+                                                 TInt aFontHeight,
+                                                 TInt aMaxFontHeight,
+                                                 const CFont* aFont);
+
+    // EAttColor of charformat
+    IMPORT_C virtual void SetTextColorL(const TRgb aColor);
+
+    IMPORT_C virtual void SetAutoCompleteTextColor(const TRgb aColor);
+
+    // EAttFontHighlightColor of charformat
+    IMPORT_C virtual void SetTextSelColorL(const TRgb aColor);
+
+    // Tests if the field has focus. 
+    // return ETrue if it has focus, otherwise EFalse
+    IMPORT_C virtual TBool IsFocused();
+
+    // Sets the text to be displayed
+    // cursorSel Current cursor selection
+    // aText The text to be set in fep ui
+    IMPORT_C virtual void SetTextL(const TFepInputContextFieldData& aData);
+            
+    // Sets dim
+    // aDimFlag Dim flag, ETrue for dim
+    IMPORT_C virtual void SetDimmed(TBool aDimFlag);
+
+    IMPORT_C virtual void SetFontL(TInt aFontHeight, TInt aMaxFontHeight, const CFont* aFont);
+
+    // Set editor focus
+    IMPORT_C virtual void SetFocus(TBool aFlag = ETrue);    
+
+    // Set cursor visibility
+    // aFlag ETrue for visisble, EFalse for invisible
+    IMPORT_C virtual void SetCursorVisible( TBool aCursorVisibleFlag = ETrue );    
+
+    // Get cursor visibility
+    // return ETrue for visisble, EFalse for invisible
+    IMPORT_C virtual TBool CursorVisible() const;
+
+    IMPORT_C void SetRect(const TRect& aRect);
+
+    IMPORT_C virtual void SizeChangedL(const TRect& aRect,
+                               TInt aFontHeight,
+                               TInt aMaxFontHeight,
+                               const CFont* aFont);
+
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerDownEventL(const TPoint& aPoint);
+    
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerMoveEventL(const TPoint& aPoint);
+
+    IMPORT_C virtual CFepUiBaseCtrl* HandlePointerUpEventL(const TPoint& aPoint);
+    
+    IMPORT_C virtual void CancelPointerDownL();
+    
+    IMPORT_C virtual void HandlePointerLeave(const TPoint& aPoint);
+    
+    IMPORT_C virtual void HandleArrowBtnEventL(TArrowBtnEvent aEventType);
+    
+    IMPORT_C virtual void UpdateValidRegion(CFepUiBaseCtrl* aCtrl,TBool aRemoveFlag);
+    
+    IMPORT_C TBool Contains(const TPoint& aPt);
+
+    IMPORT_C virtual void SetOverLapState(TBool aSupportOverlap, TRect aRect = TRect(0, 0, 0, 0));
+    
+    IMPORT_C virtual void AddOverLapState(TRect aRect);
+
+    IMPORT_C virtual TInt GetEditorFieldMaxLen();
+    
+    IMPORT_C virtual void SetTextAlignmentL(TInt aAlignment, TInt aLanguage);
+
+    // Move conntrol, aOffset The offset to be moved
+    IMPORT_C void Move(const TPoint& aOffset);
+
+    IMPORT_C virtual void SetPromptTextL(const TDesC& aPromptText, TBool aCleanContent = ETrue );
+    
+    IMPORT_C virtual const HBufC* PromptText();
+
+
+    IMPORT_C virtual void InlineTextPos(TPoint& aPosBelow, TPoint& aPosRight);
+
+    IMPORT_C virtual void EnableTextSelection(TBool aEnable);
+    
+    IMPORT_C virtual void SetTextIsSecret(TBool aIsSecret);
+
+    IMPORT_C virtual TBool TextIsSecret() const;
+    
+    // ICF using frame as bg image
+    IMPORT_C virtual void SetBgImgSkinId(TAknsItemID aSkinId);
+
+    TAknsItemID BgImgSkinId() const;
+
+    // set whether there is line separator between prompt text and normal text
+    IMPORT_C  virtual void SetLineSeparatorAfterPrompt(TBool aLineSeparator);
+    
+    IMPORT_C  virtual void SetLanguageId( TInt aLanguageId );
+    
+    IMPORT_C virtual TBool NomatchState();
+    
+    IMPORT_C virtual TBool IsEmpty();
+
+    IMPORT_C virtual TBool InlineStateOn();
+    
+    IMPORT_C virtual void SetTextMargin
+        (TInt aLeftMargin, TInt aRightMargin, TInt aTopMargin, TInt aBottomMargin);
+    
+    IMPORT_C virtual void SetLineSpace( TInt aLineSpace );
+    
+    IMPORT_C virtual void ExtractText(TDes &aBuf, TInt aPos, TInt aLength);
+
+    IMPORT_C virtual CBubbleCtrl* MsgBubbleCtrl();
+    IMPORT_C virtual CBubbleCtrl* InfoBubbleCtrl();
+    IMPORT_C virtual void ShowBubble(const TDesC& aText, const TRect& aRect);
+    IMPORT_C virtual void ShowByteWarningBubble(const TDesC& aInfo);
+    IMPORT_C virtual void HideBubble();
+    IMPORT_C virtual void HideInfoBubble(); 
+    IMPORT_C virtual void SetMsgBubbleCtrlSize(const TSize& aSize);
+    IMPORT_C virtual void SetInfoBubbleCtrlSize(const TSize& aSize);
+    
+    IMPORT_C virtual void SetBackgroundBitmapL(CFbsBitmap* aBmp);
+    
+    void DrawIcfBackground( CFbsBitGc& aGc, const TRect& aDrawnRect, 
+                            TBool aBmpStretchFlag = ETrue );
+    IMPORT_C virtual void UpdateSecretTextL();
+    
+    IMPORT_C virtual void ReDrawRect(const TRect& aRect);
+    
+    IMPORT_C void SetNumberGrouping(TBool aIsNumberGrouping);
+
+    /**
+     * Return the pointer to Toolitp control
+     * 
+     * @return the pointer to Toolitp control
+     */
+    IMPORT_C CTooltipBubbleCtrl* TooltipBubbleCtrl();
+
+    /**
+     * Show tooltip of ICF
+     * 
+     * @param aText The text to be displayed in ICF
+     * @return None
+     */
+    IMPORT_C void ShowTooltipL( const TDesC& aText );
+    
+
+    /**
+     * Hide tooltip of ICF
+     * 
+     * @param aText The text to be displayed in ICF
+     * @param aPos The position of tooltip
+     * @return None
+     */
+    IMPORT_C void HideTooltip();
+    
+protected:  // Methods
+
+    /**
+     * Handle control event 
+     *
+     * @since S60 v4.0
+     * @param aEventType The event type
+     * @param aCtrl The control who sends the event
+     * @param aEventData The event data
+     */            
+    IMPORT_C virtual void HandleControlEvent(TInt aEventType, CFepUiBaseCtrl* aCtrl,
+                                                const TDesC& aEventData);
+
+    IMPORT_C virtual void PrepareForFocusLoss();
+
+    IMPORT_C virtual TBool PrepareForFocusGain();    
+
+    IMPORT_C CFepLayoutMultiLineIcf(CFepUiLayout* aUiLayout,
+                           TInt aControlId);
+
+    IMPORT_C void BaseConstructL(TRect aRect,
+                                 TInt aFontHeight, 
+                                 TInt aMaxFontHeight, 
+                                 const CFont* aFont);
+
+private:    // Methods
+	/**
+	 * Find what is the control of aPoint. 
+	 *	 
+	 * @param aPoint The position to be checked
+	 */
+	CFepUiBaseCtrl* ControlForPoints( const TPoint& aPoint );
+	
+private:  // Data
+    CFepLayoutMultiLineIcfEditor* iIcfEditor;
+    CBubbleCtrl* iMsgBubble;        
+    CTooltipBubbleCtrl* iTooltip;
+    CBubbleCtrl* iInfoBubble; 
+    };
+
+
+NONSHARABLE_CLASS(CFepLayoutMultiLineIcfEditor) : public CFepUiBaseCtrl
+    {
+public:
+
+    IMPORT_C static CFepLayoutMultiLineIcfEditor* NewL(TRect aRect,
+                                                 CFepUiLayout* aUiLayout,
+                                                 TInt aControlId,
+                                                 TInt aFontHeight,
+                                                 TInt aMaxFontHeight,
+                                                 const CFont* aFont);
+
+    virtual ~CFepLayoutMultiLineIcfEditor();
+
+    // EAttColor of charformat
+    void SetTextColorL(const TRgb aColor);
+
+    void SetAutoCompleteTextColor(const TRgb aColor);
+
+    // EAttFontHighlightColor of charformat
+    void SetTextSelColorL(const TRgb aColor);
+
+    // Tests if the field has focus. 
+    // return ETrue if it has focus, otherwise EFalse
+    TBool IsFocused();
+
+    // Sets the text to be displayed
+    // cursorSel Current cursor selection
+    // aText The text to be set in fep ui
+    void SetTextL(const TFepInputContextFieldData& aData);
+            
+    // Sets dim
+    // aDimFlag Dim flag, ETrue for dim
+    void SetDimmed(TBool aDimFlag);
+
+    void SetFontL(TInt aFontHeight, TInt aMaxFontHeight, const CFont* aFont);
+
+    // Set editor focus
+    void SetFocus(TBool aFlag = ETrue);    
+
+    // Set cursor visibility
+    // aFlag ETrue for visisble, EFalse for invisible
+    void SetCursorVisible(TBool aCursorVisibleFlag = ETrue);    
+
+    // Get cursor visibility
+    // return ETrue for visisble, EFalse for invisible
+    TBool CursorVisible() const;
+
+    void Draw();
+	
+	void ReDrawRect(const TRect& aRect);
+	
+    void SetRectL(const TRect& aRect);
+
+    void SizeChangedL(const TRect& aRect,
+                               TInt aFontHeight,
+                               TInt aMaxFontHeight,
+                               const CFont* aFont);
+
+    virtual CFepUiBaseCtrl* HandlePointerDownEventL(const TPoint& aPoint);
+    
+    virtual CFepUiBaseCtrl* HandlePointerMoveEventL(const TPoint& aPoint);
+
+    virtual CFepUiBaseCtrl* HandlePointerUpEventL(const TPoint& aPoint);
+    
+    virtual void CancelPointerDownL();
+    
+    virtual void HandlePointerLeave(const TPoint& aPoint);
+    
+    void OnActivate();
+    
+    void OnDeActivate();
+            
+    void HandleArrowBtnEventL(CFepLayoutMultiLineIcf::TArrowBtnEvent aEventType);
+    
+    void UpdateValidRegion(CFepUiBaseCtrl* aCtrl,TBool aRemoveFlag);
+    
+    TBool Contains(const TPoint& aPt);
+
+    void SetOverLapState(TBool aSupportOverlap, TRect aRect = TRect(0, 0, 0, 0));
+    
+    void AddOverLapState(TRect aRect);
+
+    virtual TInt GetEditorFieldMaxLen();
+    
+    void SetTextAlignmentL(TInt aAlignment, TInt aLanguage);
+
+    // Move conntrol, aOffset The offset to be moved
+    void Move(const TPoint& aOffset);
+
+    void SetPromptTextL(const TDesC& aPromptText, TBool aCleanContent );
+    
+    const HBufC* PromptText();
+
+
+    void InlineTextPos(TPoint& aPosBelow, TPoint& aPosRight);
+
+    inline void EnableTextSelection(TBool aEnable);
+    
+    inline void SetTextIsSecret(TBool aIsSecret);
+
+    inline TBool TextIsSecret() const;
+    
+    // ICF using frame as bg image
+    inline void SetBgImgSkinId(TAknsItemID aSkinId);
+
+    TAknsItemID BgImgSkinId() const;
+
+    // set whether there is line separator between prompt text and normal text
+    inline void SetLineSeparatorAfterPrompt(TBool aLineSeparator);
+    
+    inline void SetLanguageId( TInt aLanguageId );
+    
+    inline TBool NomatchState();
+    
+    IMPORT_C TBool IsEmpty();
+
+    inline TBool InlineStateOn();
+    
+    inline void SetTextMargin
+        (TInt aLeftMargin, TInt aRightMargin, TInt aTopMargin, TInt aBottomMargin);
+    
+    inline void SetLineSpace( TInt aLineSpace );
+    
+    IMPORT_C void ExtractText(TDes &aBuf, TInt aPos, TInt aLength);
+
+    IMPORT_C CBubbleCtrl* MsgBubbleCtrl();
+    IMPORT_C CBubbleCtrl* InfoBubbleCtrl();
+    IMPORT_C void ShowBubble(const TDesC& aText, const TRect& aRect);
+    IMPORT_C void ShowByteWarningBubble(const TDesC& aInfo);
+    IMPORT_C void HideBubble();
+    IMPORT_C void HideInfoBubble();
+    IMPORT_C void SetMsgBubbleCtrlSize(const TSize& aSize);
+    IMPORT_C void SetInfoBubbleCtrlSize(const TSize& aSize);
+    
+    // For addition of ITI features on FSQ
+    void ShowTooltipL(const TDesC& aText);
+    void HideTooltip();
+    /**
+     * Returen the auto-completion state
+     * 
+     * @return ETrue: AutoCompletion state is On
+     *         EFalse: AutoCompletion state is Off
+     */
+    inline TBool AutoCompletionStateOn() const;
+
+    
+    void DrawIcfBackground( CFbsBitGc& aGc, const TRect& aDrawnRect, 
+                            TBool aBmpStretchFlag = ETrue );
+    inline void SetMsgBubble(CBubbleCtrl* aCtrl);
+    inline void SetInfoBubble(CBubbleCtrl* aCtrl);
+    inline void SetTooltip(CTooltipBubbleCtrl* aCtrl);
+    
+    IMPORT_C virtual void PrepareForFocusLoss();
+
+    IMPORT_C virtual TBool PrepareForFocusGain();    
+
+    /**
+     * Handle pen UI graphic device size change event
+     *
+     * @since S60 V5.0
+     */
+    virtual IMPORT_C void GraphicDeviceSizeChanged();
+    void UpdateSecretTextL();
+    
+    void SetNumberGroupingL(TBool aIsNumberGrouping);
+    
+    /**
+     * remove padding in custom draw text.
+     * 
+     * @since S60 v5.0 
+     * @param aText text to be drawn
+     * @return None
+     */
+    void TrimCustomDrawText( TDes& aText );
+    
+    /**
+     * test if smiley is enabled
+     * 
+     * @since S60 v5.0
+     * @return ETrue if smiley is enabled
+     */
+    TBool SmileyEnabled();
+    
+    /**
+     * Get smiley manager
+     *  
+     * @since S60 v5.0
+     * @return smiley manager
+     */
+    CPeninputSmileyManager* SmileyManager();
+    
+    
+    /**
+     * Calculate draw region, excluding smiley icons   
+     * 
+     * @since S60 v5.0
+     * @param aRgn clip region
+     * @param aGc graphic context 
+     * @param aFont font to draw text
+     * @param aText text to be drawn
+     * @param aBasePoint base point if text (left,bottom)
+     * @param aTopLine top margin of text
+     * @param aBottomLine bottom margin of text
+     */
+    void CalcSmileyClipRegionL( RRegion& aRgn, CGraphicsContext& aGc, 
+                                CFont& aFont, const TDesC& aText, 
+                                TPoint& aBasePoint,
+                                TInt aTopLine, TInt aBottomLine );
+    
+    /**
+     * Draw smiley icons, called by custom draw interface 
+     * 
+     * @since S60 v5.0
+     * @param aGc graphic context 
+     * @param aFont font to draw text
+     * @param aText text to be drawn
+     * @param aBasePoint base point if text (left,bottom)
+     * @param aTopLine top margin of text
+     * @param aBottomLine bottom margin of text
+     */
+    void CustomDrawSmileyL( CGraphicsContext& aGc, CFont& aFont,  
+                            const TDesC& aText, TPoint& aBasePoint, 
+                            TInt aTopLine, TInt aBottomLine );
+    
+private:    // Methods
+
+    CFepLayoutMultiLineIcfEditor(TRect aRect,
+                           CFepUiLayout* aUiLayout,
+                           TInt aControlId);
+
+    void BaseConstructL(TInt aFontHeight, 
+                        TInt aMaxFontHeight,
+                        const CFont* aFont);
+
+    void InitTextLayoutL();
+
+    // set text margin to view rect
+    //void SetTextMarginL();
+
+    void RecalcualteTextPositionL();
+                           
+    inline TBool TextSelectionOn();
+
+    void SetInlineStateL(TBool aInline, 
+                         TInt aStartPos = 0, 
+                         TInt aEndPos = 0, 
+                         TBool aNoMatchState = EFalse, 
+                         const TDesC& aNoMatchText = KNullDesC);
+
+    void SetAutoCompleteStateL(TBool aAutoComplete, 
+                               TInt aStartPos = 0, 
+                               TInt aMidPos = 0,
+                               TInt aEndPos = 0);
+
+    void SetSpecialStateL(TBool aStateOn, 
+                          TInt aStartPos, 
+                          TInt aEndPos, 
+                          TInt& aPreStartPos,
+                          TInt& aPreEndPos,
+                          TTextFormatAttribute aAttribute,
+                          TBool aNoMatchState = EFalse,
+                          const TDesC& aNoMatchText = KNullDesC);
+
+    inline TBool AutoCompleteStateOn();
+    
+    /**
+     * Save current cursor state
+     *
+     * @since S60 v4.0
+     * @param aCtrl The control which may affects the cursor shown state
+     */    
+    void SaveCursorState(CFepUiBaseCtrl* aCtrl);
+    
+    /**
+     * Restore cursor state when overlapped area is removed.
+     *
+     * @since S60 v4.0
+     * @param aCtrl The control which may affects the cursor shown state     
+     */    
+    void RestoreCursorState(CFepUiBaseCtrl* aCtrl);        
+
+    /**
+     * Restore cursor state when overlapped area is removed.
+     *
+     * @since S60 v4.0
+     * @param aIndex The control index in the list which may affects the cursor shown state     
+     */    
+    void RestoreCursorState(TInt aIndex);        
+
+    /**
+     * Find whether the given control is one of the overlapped control.
+     *
+     * @since S60 v4.0
+     * @return The index in the list. KErrNotFound if not fouond
+     */    
+    TInt FindOverlappedCtrl(CFepUiBaseCtrl* aCtrl);
+    
+    TBool IsTextPosValid(TInt aPos);
+    
+    void UpdateTextL(const TFepInputContextFieldData& aData);
+    
+    static TInt UpdateSecretTextL(TAny* aEditArea);
+    
+    void SetSelectionL(TCursorSelection aCurSel);
+
+    void UpdateNoMatchTextL(TInt aPos, const TDesC& aNoMatchText, TBool aNoMatchState);
+    
+    void RemoveOverlappedCtrlIfNeeded();
+
+    void DeletePromptTextL();
+
+    void RecalculatePosByNewPromptTextL(const TDesC& aNewPromptText);
+
+    void AdjustIcfDataForPromptText(TFepInputContextFieldData& aData);
+
+    // used when need to set cursor pos to fep
+    void AdjustFepCursorPosForPromptText(  TBool aSyncCursor = EFalse );
+    
+    // judge if a given pos belong to prompt text
+    TBool BelongToPromptText(TInt aPos);
+
+    void SetPromptTextFormatL(TInt aPromptTextLen);
+
+    void SetCursorSizeAndType();
+
+    TFontSpec CursorFontSpec();
+    
+    // convert current cursor pos to TPoint, aCaretPos carry 
+    // the TPoint info on return
+    void CalculateCursorPos(TPoint& aCaretPos);
+    
+    void AdjustBmpDeviceIfNeeded();
+    
+    void ApplyFormatL();
+    
+    void AdjustPromptTextL();
+    
+    TInt TextWidth( const TDesC& aText );
+    
+    void ResetApplyFont();
+    
+    void TryDisplayMaxTextL(TInt aCursorPos);
+    
+    TBool MoveCursorL( const TPoint& aPt, TInt& aCursorPos );
+    
+    void ResetViewHeightL();
+    
+    void SetMfneTextL(const TFepInputContextFieldData& aData);
+    
+    void DrawMfneText();
+    
+    void SetMsgBubbleRect();
+    void SetInfoBubbleRect();
+    
+    void HideBubbleTemp();
+    
+    TBool HighlightOverlapWithBubble( const TRect& aRect );
+    
+    void AdjustSelectionL( const TCursorSelection& aCurSel );
+    
+    void ApplyLineSpaceFormatL( TInt aLineHeight );
+    void CalcPromptTextRectL();        
+            
+    inline void SetCursorSelVisibility( TBool aCursorSelVisible );
+
+private:  // Data
+
+    struct TOverlappedInfo
+        {
+        /*
+         * The control overlapped with ICF cursor
+         */
+        CFepUiBaseCtrl* iCtrl;
+
+        /*
+         * keep the cursor on state.
+         */            
+        TBool iCursorStateBeforeOverlapped;
+        } ;
+
+    /**
+     * list of controls which overlapped with ICF
+     */    
+    RArray<TOverlappedInfo> iOverlappedCtrlList;
+    
+    TBool iHasFocus;
+
+    // The control which captures the pointer before
+    CFepUiBaseCtrl* iPreCaptureCtrl;
+
+    // Cursor visibility
+    TBool iCursorVisible;
+
+    // Cursor selection
+    TBool iCursorSelVisible;
+
+    // Editor is dimmed
+    TBool iDimmed;
+
+	CRichText* iRichText;
+	CParaFormatLayer* iParaFormatLayer;
+	CCharFormatLayer* iCharFormatLayer;
+	// text layout and view stuff
+	CTextLayout* iLayout;
+	CTextView* iTextView;
+
+	TBool iEnableTextSelection;
+	RWindow* iWin;
+	CCoeEnv* iCoeEnv;
+
+	TRgb iTextColor;
+	TRgb iTextSelColor;
+	TRgb iTextAutoColor;
+
+	TCharFormat iCharFormat;
+	TCharFormatMask iCharFormatMask;
+
+	TRect iViewRect;
+	TBool iTextSelectionOn;
+    RArray<TRect> iOverLapRects;
+    TBool iSupportOverLap;
+
+    TBool iTextIsSecret;
+    TBool iAutoComplete;
+
+    CFepUiCursor* iInsertionPoint;
+
+    TBool iTextInited;
+    TInt iMaxFontHeight;
+    TInt iFontHeight;
+
+    CPeriodic* iSecretTextTimer;
+
+    TBool iPntDownOnInline;
+
+    TInt iPreInlineStartPos;
+    TInt iPreInlineEndPos;
+    TInt iPreAutoStartPos;
+    TInt iPreAutoEndPos;
+    TInt iPreTextSelStartPos;
+    TInt iPreTextSelEndPos;
+    TAknsItemID iBgSkinId;
+    TBool iSkinIdSet;
+
+    CFepLayoutMIcfCustomDraw* iCustomDraw;
+    CFepLayoutMIcfCustomWrap* iTextWrapper;
+    
+    TBool iNoMatchState;
+    const CFont* iFont;
+    HBufC* iInitPromptText;
+    HBufC* iPromptText;
+    TInt iPromptTextLen;
+    TBool iLineSeparator;
+    TInt iHorizontalMargin;
+
+    // following member variable used to calculate curosr position
+	TInt iWeight;                           // width of vertical cursors, height of horizontal ones
+
+	TBool iLeadingEdge;
+	
+	TCursorSelection iCursorSel;
+    
+    /**
+     * The last cursor position
+     */
+    TInt iLastCursorPos;
+    
+    TInt iState;
+    
+    TInt iLeftMargin;
+    CBubbleCtrl* iMsgBubble;
+    CBubbleCtrl* iInfoBubble;
+    TInt iRightMargin;
+    TInt iTopMargin;
+    TInt iBottomMargin;
+    
+    TInt iLineSpace;
+    TSize iLastDeviceSize;
+    TBool iFormatChange;
+    TInt iFormatLineHeight;
+    HBufC* iMfneIcfData;
+    TBool iRtlMfneEditor;
+    
+    TInt iLineNumber;
+    TInt iLineMaxCount;
+    
+    TBool iHideBubbleTemp;
+    TBool iHideInfoBubbleTemp;
+    TBool iSycnFepData;
+	TInt iPreLanguageID;
+	
+	CGraphicsContext::TTextAlign iTextAlign;
+	TInt iAlignment;
+	
+	CAknEdwinFormExtendedInterfaceProvider* iFormExtendedInterfaceProvider;
+	CAknInlineTextSource* iPhoneNumberFormatter;
+	
+	TInt iOffset;
+    TRect iPromptTextRect;
+	TInt iMaxIcfEditorHeight;
+	TBool iSynCursor;
+	RBuf iOldMfneText;
+	CTooltipBubbleCtrl* iTooltip;
+	
+	/**
+	 * Smiley manager
+	 * own
+	 */
+	CPeninputSmileyManager* iSmileyManager;
+    };
+    
+inline void CFepLayoutMultiLineIcfEditor::EnableTextSelection(TBool aEnable)
+    {
+    iTextSelectionOn = aEnable;
+    }
+
+inline TBool CFepLayoutMultiLineIcfEditor::TextSelectionOn()
+    {
+    return iTextSelectionOn;
+    }
+
+inline TBool CFepLayoutMultiLineIcfEditor::InlineStateOn()
+    {
+    return iState == CFepLayoutMultiLineIcf::EIcfInline;
+    }
+    
+inline void CFepLayoutMultiLineIcfEditor::SetTextIsSecret(TBool aIsSecret)
+    {
+    iTextIsSecret = aIsSecret;
+    }
+
+inline TBool CFepLayoutMultiLineIcfEditor::TextIsSecret() const
+    {
+    return iTextIsSecret;
+    }
+
+inline TBool CFepLayoutMultiLineIcfEditor::AutoCompleteStateOn()
+    {
+    return iAutoComplete;
+    }
+
+inline void CFepLayoutMultiLineIcfEditor::SetBgImgSkinId(TAknsItemID aSkinId)
+    {
+    iBgSkinId = aSkinId;
+    iSkinIdSet = ETrue;
+    }
+
+inline void CFepLayoutMultiLineIcfEditor::SetLineSeparatorAfterPrompt(TBool aLineSeparator)
+    {
+    if ( aLineSeparator )
+        {
+        iLineSeparator = aLineSeparator;
+        }
+    else
+        {
+        iLineSeparator = ( iPreLanguageID == ELangUrdu || iPreLanguageID == ELangArabic || 
+                       iPreLanguageID == ELangFarsi || iPreLanguageID == ELangHebrew );
+        }
+    }
+
+inline void CFepLayoutMultiLineIcfEditor::SetLanguageId( TInt aLanguageId )
+    {
+    if (iPreLanguageID == aLanguageId)
+        return;
+    iPreLanguageID = aLanguageId;
+    iLineSeparator = ( aLanguageId == ELangUrdu || aLanguageId == ELangArabic || 
+                       aLanguageId == ELangFarsi || aLanguageId == ELangHebrew );
+    }
+
+inline TBool CFepLayoutMultiLineIcfEditor::NomatchState()
+    {
+    return iNoMatchState;
+    }
+
+inline void CFepLayoutMultiLineIcfEditor::SetTextMargin
+    (TInt aLeftMargin, TInt aRightMargin, TInt aTopMargin, TInt aBottomMargin)
+    {
+    if( iLeftMargin == aLeftMargin &&
+        iRightMargin == aRightMargin &&
+        iTopMargin == aTopMargin &&
+        iBottomMargin == aBottomMargin )
+        {
+        return;        
+        }
+
+    //iFormatChange = ETrue;
+    iLeftMargin = aLeftMargin;
+    iRightMargin = aRightMargin;
+    iTopMargin = aTopMargin;
+    iBottomMargin = ( aBottomMargin >= 0 )? aBottomMargin : 0;
+    }
+
+inline void CFepLayoutMultiLineIcfEditor::SetLineSpace( TInt aLineSpace )    
+    {
+    if( iLineSpace != aLineSpace )   
+        {
+        iLineSpace = aLineSpace;
+        //iFormatChange = ETrue;
+        }
+    }
+    
+inline void CFepLayoutMultiLineIcfEditor::SetMsgBubble(CBubbleCtrl* aCtrl)
+    {
+    iMsgBubble = aCtrl;
+    }
+    
+inline void CFepLayoutMultiLineIcfEditor::SetInfoBubble(CBubbleCtrl* aCtrl)
+    {
+    iInfoBubble = aCtrl;
+    }
+inline void CFepLayoutMultiLineIcfEditor::SetTooltip(CTooltipBubbleCtrl* aCtrl)
+    {
+    iTooltip = aCtrl;
+    }
+
+inline TBool CFepLayoutMultiLineIcfEditor::AutoCompletionStateOn() const
+    {
+    return iState == CFepLayoutMultiLineIcf::EIcfAutoComplete;
+    }
+    
+inline void CFepLayoutMultiLineIcfEditor::SetCursorSelVisibility( TBool aCursorSelVisible )
+    {
+    iCursorSelVisible = aCursorSelVisible;
+    }
+
+#endif // C_PENINPUTLAYOUTMULTILINEICF_H
\ No newline at end of file