--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayouteditareabase.h Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,677 @@
+/*
+* 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_CFEPLAYOUTEDITAREABASE_H
+#define C_CFEPLAYOUTEDITAREABASE_H
+
+#include <e32std.h>
+#include <e32base.h>
+#include <w32std.h>
+#include <frmtlay.h>
+#include <fepbase.h>
+#include <fepitfr.h>
+#include <eikdialg.h>
+#include <eikenv.h>
+
+#include "peninputlayoutbasecontrol.h"
+#include <bidivisual.h>
+
+// FORWARD DECLARATIONS
+class CInsertionPoint;
+
+const TInt KCursorSelectionGap = 4;
+
+/**
+ * Base class for lightweight Edwin-like editing area
+ *
+ * This is not an actual
+ * control and it never actually gains focus, but it simulates it with its
+ * own cursor. This is because the FEP must never take focus, because otherwise
+ * it will mess up the functionality of the underlying application.
+ *
+ * @lib feplayouteng.lib
+ * @since S60 v4.0
+ */
+class CFepLayoutEditAreaBase : public CFepUiBaseCtrl
+ {
+public:
+ // Constructors and destructor
+ /**
+ * Destructor.
+ *
+ * @since S60 v4.0
+ */
+ IMPORT_C virtual ~CFepLayoutEditAreaBase();
+
+ /**
+ * Draws the text buffer into the given graphic context
+ *
+ * @since S60 v4.0
+ * @param aGc The graphic context
+ * @param aRect Invalid rectangle. Edit area is redrawn only if
+ * the invalid rectangle intersects with the rectangle of the edit area
+ */
+ IMPORT_C virtual void DrawContent(CBitmapContext* aGc, const TRect& aRect);
+
+ /**
+ * Sets the position, where caret is in the buffer.
+ *
+ * @since S60 v4.0
+ * @param aPositionOfInsertionPointInBuffer The position
+ */
+ IMPORT_C void SetPositionOfInsertionPointInBuffer(
+ TInt& aPositionOfInsertionPointInBuffer);
+
+ /**
+ * Sets the position, where caret is in the buffer,
+ * including the start of the selection.
+ *
+ * @since S60 v4.0
+ * @param aPositionOfInsertionPointInBuffer The position
+ */
+ void SetPositionOfInsertionPointInBuffer(
+ TInt& aPositionOfInsertionPointInBuffer,
+ TInt& aPositionOfAnchorInBuffer);
+
+
+ /**
+ * Adjust cursor position when pointer down or move
+ *
+ * @since S60 v4.0
+ * @param aPositionOfInsertionPointInBuffer The position
+ * @return None
+ */
+ IMPORT_C virtual void AdjustSelectedCompositionText(TInt& aPositionOfInsertionPointInBuffer);
+
+ /**
+ * Returns the cursor position relative to parent window
+ *
+ * @since S60 v4.0
+ * @return Postition of cursor as pixels
+ */
+ IMPORT_C TPoint PositionOfInsertionPointOnWindow();
+
+ /**
+ * Returns the selected text.
+ *
+ * @since S60 v4.0
+ * @return Selection range of the text
+ */
+ inline TCursorSelection Selection() const;
+
+ /**
+ * Sets the text color.
+ *
+ * @since S60 v4.0
+ * @param aColor RGB-value of the text color
+ */
+ IMPORT_C void SetTextColor(const TRgb aColor);
+
+ /**
+ * Tests if the field has focus.
+ *
+ * @since S60 v4.0
+ * @return ETrue if it has focus, otherwise EFalse
+ */
+ IMPORT_C TBool IsFocused();
+
+ IMPORT_C void SetTextAlignmentL(TInt aAlignment);
+
+ /**
+ * Sets the text to be displayed
+ *
+ * @since S60 v4.0
+ * @param cursorSel Current cursor selection
+ * @param aText The text to be set in fep ui
+ * @return None
+ */
+ IMPORT_C void SetTextL( const TFepInputContextFieldData& aData );
+
+ /**
+ * Sets dim
+ *
+ * @since S60 v4.0
+ * @param aDimFlag Dim flag, ETrue for dim
+ * @return None
+ */
+ IMPORT_C void SetDimmed(TBool aDimFlag);
+
+ /**
+ * Get dim
+ *
+ * @since S60 v4.0
+ * @return ETrue for dim otherwise EFlase
+ */
+ inline TBool IsDimmed() const;
+
+ /**
+ * Sets the cursor
+ *
+ * @since S60 v4.0
+ * @param cursorSel Current cursor selection
+ * @return None
+ */
+ IMPORT_C void UpdateCursorSelection(const TCursorSelection& aCursorSel);
+
+ /**
+ * Update content when scrolling
+ *
+ * @since S60 v4.0
+ * @param cursorSel Current cursor selection
+ * @return None
+ */
+ virtual void UpdateContent(const TCursorSelection& aCursorSel) = 0;
+
+ /**
+ * Set the font for text drawing
+ *
+ * @since S60 v4.0
+ * @param aFontSpect font information
+ */
+ IMPORT_C void SetFont(const TFontSpec& aFontSpec);
+
+ /**
+ * Set the font for text drawing
+ *
+ * @since S60 v4.0
+ * @param aFont The font to be used.Ownership not transferred
+ */
+ IMPORT_C void SetFont(const CFont* aFont);
+
+ /**
+ * Set editor focus
+ *
+ * @since S60 v4.0
+ * @param aFlag current focus. Default value is ETrue
+ */
+ IMPORT_C void SetFocus(TBool aFlag = ETrue);
+
+ /**
+ * Set cursor visibility
+ *
+ * @since S60 v4.0
+ * @param aFlag ETrue for visisble, EFalse for invisible
+ */
+ IMPORT_C void SetCursorVisible(TBool aCursorVisibleFlag = ETrue,
+ TBool aCursorSelVisibleFlag = EFalse);
+
+ /**
+ * Get the text length of buffer
+ *
+ * @since S60 v4.0
+ * @return The buffer length
+ */
+ inline TInt TextLength() const;
+
+ /**
+ * Get cursor visibility
+ *
+ * @since S60 v4.0
+ * @return ETrue for visisble, EFalse for invisible
+ */
+ IMPORT_C TBool CursorVisible() const;
+
+ //from base class CFepUiBaseCtrl
+ /**
+ * From CFepUiBaseCtrl
+ * Draw control
+ *
+ * @since S60 v4.0
+ */
+ IMPORT_C void Draw();
+
+ /**
+ * From CFepUiBaseCtrl
+ * Sets the rectangle for the edit area.
+ *
+ * @since S60 v4.0
+ * @param aRect The rectangle
+ */
+ IMPORT_C void SetRect(TRect aRect);
+
+ /**
+ * From CFepUiBaseCtrl
+ * Move conntrol
+ *
+ * @since S60 V4.0
+ * @param aOffset The offset to be moved
+ */
+ IMPORT_C void Move(const TPoint& aOffset);
+
+ /**
+ * From CFepUiBaseCtrl
+ * Handle pointer down event
+ *
+ * @since S60 4.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 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);
+
+ /**
+ * 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
+ * Update rect area
+ *
+ * @since S60 v4.0
+ * @param aRect the rect to be flushed in screen
+ * @param aUpdateFlag ETrue if full update.
+ */
+ //void UpdateArea(const TRect& aRect,TBool aUpdateFlag = EFalse);
+
+
+ /**
+ * 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
+ */
+ IMPORT_C 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 V4.0
+ * @param aPoint current pointer position
+ */
+ IMPORT_C virtual void HandlePointerLeave(const TPoint& aPoint);
+
+ /**
+ * From CFepUiBaseCtrl
+ * 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);
+
+ /**
+ * OnActivate. Called when the layout is going to be shown.
+ *
+ * @since S60 v4.0
+ */
+ IMPORT_C void OnActivate();
+
+ /**
+ * OnDeActivate. Called when the layout is going to be hidden
+ *
+ * @since S60 v4.0
+ */
+ IMPORT_C void OnDeActivate();
+
+ /**
+ * From CFepUiBaseCtrl
+ * Call back function when layout starts dragging
+ *
+ * @since S60 V4.0
+ */
+ IMPORT_C void OnLayoutDraggingStart();
+
+ /**
+ * From CFepUiBaseCtrl
+ * Call back function when layout ends dragging
+ *
+ * @since S60 V4.0
+ */
+ IMPORT_C void OnLayoutDraggingEnd();
+
+ /**
+ * Get the editor max length.
+ * This is the max char length which this editor can holds
+ *
+ * @since S60 V4.0
+ * @return The editor max length
+ */
+ IMPORT_C virtual TInt GetEditorFieldMaxLen();
+
+ /**
+ * 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);
+
+
+ inline void SetTextIsSecret( TBool aIsSecret );
+
+ inline TBool TextIsSecret() const;
+
+protected: // Methods
+
+ /**
+ * C++ default constructor.
+ *
+ * @since S60 v4.0
+ * @param aRect Control area
+ * @param aUiLayout The layout which contains this control
+ * @param aControlId The control Id
+ */
+ IMPORT_C CFepLayoutEditAreaBase(TRect aRect,CFepUiLayout* aUiLayout,TInt aControlId);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ *
+ * @since S60 v4.0
+ * @param aVisibleCursor ETrue if visible cursor is required
+ */
+ IMPORT_C void BaseConstructL();
+
+ /**
+ * Handles taps, i.e. moves insertion point and selects text.
+ *
+ * @since S60 v4.0
+ * @param aPointerEvent Information about the pointer event.
+ */
+ //IMPORT_C virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+ /**
+ * Prepares the field for losing focus.
+ *
+ * @since S60 v4.0
+ */
+ IMPORT_C virtual void PrepareForFocusLoss();
+
+ /**
+ * Prepares the field for gaining focus.
+ *
+ * @since S60 v4.0
+ * @return The operation status. ETrue if successfully.
+ */
+ IMPORT_C virtual TBool PrepareForFocusGain();
+
+ /**
+ * Returns the position in buffer for given x-coordinate
+ *
+ * @since S60 v4.0
+ * @param aX X-coordinate
+ * @return Position in buffer
+ */
+ IMPORT_C TInt PositionInDisplayText(TInt aX) const;
+
+ /**
+ * Calcuate display text
+ *
+ * @since S60 v4.0
+ * @return None
+ */
+ void CalculateDisplayTextL();
+
+ /**
+ * Gives coordinates of the character relative to the parent
+ * window.
+ *
+ * @since S60 v4.0
+ * @param aCharacterIndex index of the character in iRenderBuffer
+ * @return Position as TPoint relative to the parent window,
+ */
+ IMPORT_C TPoint PositionInWindow(TInt aCharacterIndex);
+
+ /**
+ * Scrolls selection to the left exposing more text
+ *
+ * @since S60 v4.0
+ */
+ void ScrollLeft();
+
+ /**
+ * Scrolls selection to the right exposing more text
+ *
+ * @since S60 v4.0
+ */
+ void ScrollRight();
+
+private: // Methods
+
+ /**
+ * Draw selected text
+ *
+ * @since S60 v4.0
+ */
+ TRect DrawSelection();
+
+ void UpdateText( const TFepInputContextFieldData& aData );
+
+ static TInt UpdateSecretText( TAny* aEditArea );
+
+ void IncreaseBufferL(TInt aLength);
+
+ TInt PositionInVisualText(TInt aX);
+
+ TPoint PositionInVisualWindow(TInt aCharacterIndex) const;
+
+ TInt CursorDistance(TInt aX) const;
+
+ TBidiText::TDirectionality CharDirection( TChar aChar ) const;
+
+ void AdjustPostionInVisualText( const TInt cursorDistance, TInt& retVal );
+
+
+
+ /**
+ * 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);
+
+ TInt TextWidth( TInt aStart, TInt aEnd );
+
+protected: // Data
+
+ /**
+ * cursor information for the selected txt
+ */
+ TCursorSelection iSelectedCompositionText;
+
+ /**
+ * Corrected Rect of edit area.
+ *This have to be used when calculating width or does charachters fit
+ */
+ TRect iCorrectedRect;
+
+ /**
+ * Display text start position in the original text
+ */
+ TInt iDisplayTextOffset;
+
+ /**
+ * Color of letters in the keyboard
+ */
+ TRgb iTextColor;
+
+ /**
+ * The part of iBuffer that is shown in the edit area rectancle
+ */
+ TPtrC iDisplayText;
+
+ TPtrC iVisualText;
+
+ TCursorSelection iDisplayTextCurSel;
+
+ /**
+ * Flag to indicate that text is being scrolled
+ */
+ TBool iScrolling;
+
+ /**
+ * Flag telling whether the field has focus
+ */
+ TBool iHasFocus;
+
+ /**
+ * Font spec for text drawing
+ */
+ TFontSpec iFontSpec;
+
+ /**
+ * Pointer down flag -- should be removed???
+ */
+ //TBool iPointerDown;
+
+ /**
+ * Buffer for text to display
+ * Own
+ */
+ HBufC* iBuffer;
+
+ HBufC* iVisualBuffer;
+
+ /**
+ * the insertion point, i.e. caret
+ * Own
+ */
+ CInsertionPoint* iInsertionPoint;
+
+ /**
+ * Font for text drawing. Ownership depends on iFontOwnership flag.
+ */
+ CFont* iFont;
+
+ /**
+ * The control which captures the pointer before
+ */
+ CFepUiBaseCtrl* iPreCaptureCtrl;
+
+ /**
+ * Flag ownership flag. ETrue if CFont object is owned by this control.
+ */
+ TBool iFontOwnership;
+
+ /*
+ * Cursor visibility
+ */
+ TBool iCursorVisible;
+
+ /*
+ * Cursor selection
+ */
+ TBool iCursorSelVisible;
+
+ /*
+ * Editor is dimmed
+ */
+ TBool iDimmed;
+
+ /*
+ * Editor is in dragging state
+ */
+ TBool iInDragging;
+
+ CPeriodic* iSecretTextTimer;
+
+ TCursorSelection iUncommittedText;
+
+ TInt iRelativePos;
+
+ TBool iTextIsSecret;
+
+ TBidiText::TDirectionality iTextDirection;
+
+ TBool iMfneEditor;
+
+ TBool isCenter;
+
+private:
+ 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;
+
+ /**
+ * Reserved item1
+ */
+ TInt iReserved1;
+
+ /**
+ * Reserved item2
+ */
+ TInt iReserved2;
+ };
+
+#include <peninputlayouteditareabase.inl>
+#endif // C_CFEPLAYOUTEDITAREABASE_H
+
+// End of File