javauis/lcdui_akn/lcdui/inc/CMIDTextEditor.h
branchRCL_3
changeset 14 04becd199f91
child 18 9ac0a0a7da70
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDTextEditor.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,861 @@
+/*
+* Copyright (c) 2009 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:
+*
+* Defines the Text Editor native side component
+*
+*/
+
+
+#ifndef CMIDTEXTEDITOR_H
+#define CMIDTEXTEDITOR_H
+
+// EXTERNAL INCLUDES
+#include <e32base.h>
+#include <MMIDTextEditor.h>
+#include <MMIDCustomComponent.h>
+
+#ifdef RD_TACTILE_FEEDBACK
+#include <peninputclient.h>
+#endif // RD_TACTILE_FEEDBACK
+
+#include <coecobs.h>
+#include <reflcdui.h>
+
+// FORWARD DECLARATIONS
+class CMIDTextEditorEdwin;
+class CMIDEditingStateIndicator;
+class CMIDEdwinUtils;
+class CCoeControl;
+class MMIDCustomComponentContainer;
+class CMIDUtils;
+class MMIDFont;
+
+// CLASS DESCRIPTION
+/**
+ * Defines the Text Editor native side component.
+ */
+NONSHARABLE_CLASS(CMIDTextEditor) :
+        public CBase,
+        public MMIDTextEditor,
+        public MMIDCustomComponent,
+        public MDirectContent,
+        public MCoeControlObserver
+{
+public: // Type definitions
+
+    class TCtorParams
+    {
+    public:
+        // Maximum size of the editor.
+        TInt iMaxSize;
+        // The width of the editor in pixels.
+        TInt iWidth;
+        // The height of the editor in pixels or in rows.
+        TInt iHeight;
+        // Indicates if the size is in pixels or in rows.
+        TBool iHeightInRows;
+        // The shared CMIDUtils instance. Not owned.
+        CMIDUtils* iUtils;
+
+        TCtorParams::TCtorParams() :
+                iMaxSize(0),
+                iWidth(0),
+                iHeight(0),
+                iHeightInRows(EFalse),
+                iUtils(NULL) {}
+    };
+
+public: // Constructors and destructor
+
+    /**
+     * Two-phased constructor. Creates an instance from this class
+     * The caller takes the ownership of the returned instance
+     *
+     * @param aParams The construction parameters of this class.
+     * @return New instance from this class
+     */
+    static CMIDTextEditor* NewL(const TCtorParams& aParams);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CMIDTextEditor();
+
+public: // From MMIDCustomComponent
+
+    /**
+     * Returns the count of controls in this custom component.
+     *
+     * Note that the count must not change during the lifetime
+     * of the object. The count of all components is updated
+     * when it is added to the custom component container.
+     *
+     * This is done in order to improve the performance when counting
+     * countrols.
+     *
+     * @return The count of controls in this custom component.
+     * @since S60 5.0
+     */
+    TInt CustomComponentControlCount() const;
+
+    /**
+     * Returns an UI control of this custom component.
+     *
+     * The index specifies which component is requested. The method
+     * works similar to CCoeControl::ComponentControl() method. The
+     * ownership of the control is NOT transferred to the caller.
+     *
+     * @param aIndex The index of the control to be retrieved.
+     * @return The UI control of this custom component.
+     * @since S60 5.0
+     */
+    CCoeControl* CustomComponentControl(TInt aIndex);
+
+    /**
+     * Indicates that the container is about to be disposed.
+     *
+     * The custom component does not have to remove itself
+     * from the container since the container removes all components
+     * when disposing.
+     *
+     * @since S60 5.0
+     */
+    void CustomComponentContainerDisposing();
+
+    /**
+     * Handles traversing.
+     *
+     * Used when pressing key down and up.
+     *
+     * @param aEvent Key Event.
+     * @since S60 5.0
+     */
+    void TraverseL(const TKeyEvent& aEvent);
+
+    /**
+     * Processes the received pointer event.
+     *
+     * @param  aPointerEvent The pointer event. iPosition will be reset to the
+     *         parent window position. iParentPosition will be invalid for the
+     *         container.
+     * @since S60 5.0
+     */
+    void ProcessPointerEventL(const TPointerEvent& aPointerEvent);
+
+    /**
+     * Gets the current touch-enabled state
+     *
+     * @return true if the editor is touch-enabled, false otherwise
+     * @since S60 5.0
+     */
+    TBool IsTouchEnabled();
+
+public: // From MMIDTextEditor
+
+    /**
+     * Specifies whether or not the editor will receive touch-events.
+     *
+     * @param enabled true to enabled touch-event, false to disable
+     * @since S60 5.0
+     */
+    void SetTouchEnabled(TBool aEnabled);
+
+    /**
+     * Sets the observer for this text editor component.
+     *
+     * The observer is notified when an action is about to happen
+     * in the text editor.
+     *
+     * The ownership of the object is not transferred to this component.
+     *
+     * @param aObserver The text editor observer or <code>NULL</code>
+     *        if the observer should be removed.
+     * @since S60 5.0
+     */
+    void SetObserver(MMIDTextEditorObserver* aObserver);
+
+    /**
+     * Sets the size of this text editor.
+     *
+     * Note: Calling this function may result in a call to
+     *        CMIDTextEditorEdwin::SizeChanged().
+     *
+     * @param aWidth
+     *          The width of the editor in pixels.
+     * @param aHeight
+     *          The height of the editor in pixels.
+     * @since S60 5.0
+     */
+    void SetEditorSize(TInt aWidth, TInt aHeight);
+
+    /**
+     * Returns the size of this editor.
+     *
+     * @return The size of this editor.
+     * @since S60 5.0
+     */
+    TSize EditorSize() const;
+
+    /**
+     * Sets the parent of this text editor component. The parent must
+     * implement the custom component container interface in order to
+     * provide necessary services for registering custom UI components.
+     *
+     * The ownership of the parent is not transffered to this object.
+     *
+     * @param aComponentContainer The parent MIDP custom component
+     *        container.
+     * @since S60 5.0
+     */
+    void SetParentL(MMIDCustomComponentContainer* aComponentContainer);
+
+    /**
+     * Sets the direct container of this text editor component.
+     *
+     * Note that the text editor does not necessary need to have direct
+     * container. If the parent component is responsible for somekind of
+     * custom drawing using direct screena access, this method can be used
+     * to register the direct container.
+     *
+     * The text editor adds itself to the direct container so that it
+     * is not able to draw on top of the text editor when direct content
+     * is added to the screen.
+     *
+     * @param aDirectContainer The direct container of this compoennt if
+     *        any. <code>NULL</code> removes the current container.
+     * @since S60 5.0
+     */
+    void SetDirectContainerL(MDirectContainer* aDirectContainer);
+
+    /**
+     * Sets the elevation of this text editor component.
+     *
+     * If the specified elevation exeeds to amount of items in the
+     * custom component container, the item becomes the topmost item
+     * in the custom component stack.
+     *
+     * Note that the elevation requsted may not be the actual elevation
+     * of the item (if, for example, the elevation is higher than the
+     * amount of all items, the elevation is set to the top).
+     *
+     * @param aElevation The new elevation (Z-position) of this item.
+     * @since S60 5.0
+     */
+    void SetElevationL(TInt aElevation);
+
+    /**
+     * Returns the elevation of this text editor component.
+     *
+     * @return The elevation of this text editor component.
+     * @since S60 5.0
+     */
+    TInt Elevation();
+
+    /**
+     * Sets this text editor component visible if it is hidden.
+     *
+     * Depending on the current status of the text editor, this operation
+     * is no-op if there is nothing to do. (i.e. the text editor is set
+     * hidden when it is already hidden).
+     *
+     * @param aVisible Indicates the visibility status of the text editor.
+     * @since S60 5.0
+     */
+    void SetVisibleL(TBool aVisible);
+
+    /**
+     * Returns the visibility status of the editor.
+     *
+     * @return <code>ETrue</code> if the editor is visible and
+     *         <code>EFalse</code> if not.
+     * @since S60 5.0
+     */
+    TBool IsVisible() const;
+
+    /**
+     * Sets the position of this text editor component.
+     *
+     * Note: Calling this function results in a call to
+     *          CMIDTextEditorEdwin::PositionChanged().
+     *
+     * @param aX The x coordinate of the anchor point.
+     * @param aY The y coordinate of the anchor point.
+     * @since S60 5.0
+     */
+    void SetPosition(TInt aX, TInt aY);
+
+    /**
+     * Sets the focus status of this text editor component.
+     *
+     * Setting the fucus to a text editor starts the editor to capture key
+     * events. The key events are comsumed by the editor and the parent
+     * will not possibly receive events at that time.
+     *
+     * @param aFocusState If <code>true</code>, the text editor component
+     *        will start capturing key events from its parent. If
+     *        <code>false</code> the focues is removed from this text
+     *        editor.
+     * @since S60 5.0
+     */
+    void SetFocusStateL(TBool aFocusState);
+
+    /**
+     * Gets the focus status of this text editor component.
+     *
+     * @return focus state of text component.
+     * @since S60 5.0
+     */
+    TInt GetFocusState();
+
+    /**
+     * Returns the content of this text editor in a new <code>HBufC</code>
+     * descriptor. The ownership of the returned value is transferred to
+     * the caller.
+     *
+     * @param The content of the editor in a new <code>HBufC</code>
+     * descriptor.
+     * @since S60 5.0
+     */
+    HBufC* ContentL();
+
+    /**
+     * Sets a new content to this text editor.
+     *
+     * The content replaces any previous content in this text editor.
+     * Note that if the current set of text constraints does not allow
+     * the new content, the method leaves with <code>KErrArgument</code>.
+     *
+     * @param aContent The new content for this text editor.
+     * @since S60 5.0
+     */
+    void SetContentL(const TDesC& aContent);
+
+    /**
+     * Inserts a content into the current content of this text editor.
+     *
+     * The content is inserted just prior to the character indicated by
+     * the position parameter, where zero specifies the first character of
+     * the content in this text editor.
+     *
+     * If position is less than or equal to zero, the insertion occurs at
+     * the beginning of the content. If position is greater than or equal
+     * to the current size of the content, the insertion occurs
+     * immediately after the end of the content.
+     *
+     * @param aContent The content to be inserted.
+     * @param aPosition The position at which the insertion starts.
+     * @since S60 5.0
+     */
+    void InsertContentL(const TDesC& aContent, TInt aPosition);
+
+    /**
+     * Deletes the content from this text editor.
+     *
+     * The content is deleted based on the given offset and length. If the
+     * resulting content is not valid for the current set of constraints,
+     * this method leaves with <code>KErrArgument</code>
+     *
+     * The offset and length must specify a valid range within the
+     * content.
+     *
+     * @param aOffset The beginning of the region to be deleted.
+     * @param aLength The number of characters to be deleted.
+     * @since S60 5.0
+     */
+    void DeleteContentL(TInt aOffset, TInt aLength);
+
+    /**
+     * Returns the length of the current content in this text editor.
+     *
+     * @return The length of the current content.
+     * @since S60 5.0
+     */
+    TInt ContentLength() const;
+
+    /**
+     * Returns the height of the full content in this text editor.
+     *
+     * @return The height of the full content.
+     * @since S60 5.0
+     */
+    TInt ContentHeight() const;
+
+    /**
+     * Returns the line margin height of this text editor.
+     *
+     * @return The line margin height of this text editor.
+     * @since S60 5.0
+     */
+    TInt LineMarginHeight() const;
+
+    /**
+     * Returns the topmost pixel position of the topmost visible line in
+     * the editor.
+     *
+     * The returned y coordinate value must be relative to the whole
+     * content height, not just the visible part.
+     *
+     * @return The topmost pixel position of the visible content.
+     * @since S60 5.0
+     */
+    TInt VisibleContentPosition() const;
+
+    /**
+     * Sets the selection in this text editor.
+     *
+     * The selection begins from <code>aIndex</code> and continues
+     * the amount of characters specified by <code>aLength</code>.
+     *
+     * The selected area is highlighted with current highlight
+     * colors.
+     *
+     * The index and length must specify a valid range within the content.
+     *
+     * @param aIndex The beginning of the range to be selected.
+     * @param aLength The length of the range to be selected.
+     * @since S60 5.0
+     */
+    void SetSelectionL(TInt aIndex, TInt aLength);
+
+    /**
+     * Returns the current selection in this text editor in a new
+     * <code>HBufC</code> descriptor.
+     *
+     * The ownership of the returned value is transferred to the caller.
+     *
+     * @return The current selection int the editor in a new
+     *         <code>HBufC</code> descriptor.
+     * @since S60 5.0
+     */
+    HBufC* SelectionL();
+
+    /**
+     * Sets the constraints of this text editor. If the constraints are
+     * not valid for the current content of the editor, the content is set
+     * to empty.
+     *
+     * @param aConstraints The new set of constraints. Note that
+     *        validation of the input must be done in the client side
+     *        (i.e. in the Java side).
+     * @since S60 5.0
+     */
+    void SetConstraintsL(TUint aConstraints);
+
+    /**
+     * Sets the multiline status of this text editor component.
+     *
+     * TextEditor is by default single-line editor, which means that user
+     * is not possible to insert line breaks to the editor. A possible Enter
+     * (or similar) key event should be passed in this case to the parent object
+     * as a normal key event for client to handle it as appropriately. A single-line
+     * editor will have horizontal scrolling of text if it is possible to enter text
+     * that does not fit to the editor. This may happen if maximum size is large enough
+     * for the width of the editor.
+     * In multi-line editor user is able to insert line breaks but also word
+     * wrapping is enabled automatically on word boundaries.
+     *
+     * @param aMultiline <code>true</code> if multi-line editor,
+     *        <code>false</code> if single-line editor.
+     */
+    void SetMultilineL(TBool aMultiline);
+
+    /**
+     * Gets the multiline status of this text editor component.
+     *
+     * @return <code>true</code> if multi-line editor,
+     *        <code>false</code> if single-line editor.
+     */
+    virtual TBool IsMultiline();
+
+    /**
+     * Sets a hint to the implementation as to the input mode that should
+     * be used when the user initiates editing of this text editor.
+     *
+     * The character subset parameter names and subset of Unicode characters
+     * that is used by the implementation to choose an initial input mode.
+     *
+     * If an empty string is passed, the implementation uses the default
+     * character set.
+     *
+     * @param aCharacterSubset The character subset for the initial input
+     *        mode.
+     * @since S60 5.0
+     */
+    void SetInitialInputModeL(const TDesC& aCharacterSubset);
+
+    /**
+     * Sets the maximum size of this text editor.
+     *
+     * If the maximum size is less than the length of the current content,
+     * the content is truncated from the end to fit into the new maximum
+     * size.
+     *
+     * If the content is truncated and the resulting new content is not
+     * valid for the current input constraints, this method leaves with
+     * <code>KErrArgument</code>.
+     *
+     * @param aMaxSize The new maximum size for this text editor.
+     * @return The actual size that the editor accepted. May be smaller
+     *         than the requested maximum size.
+     * @since S60 5.0
+     */
+    TInt SetMaxSizeL(TInt aMaxSize);
+
+    /**
+     * Sets a new position for the cursor within this text editor.
+     *
+     * Note that the index must be valid (i.e. within the limit
+     * of the current content length).
+     *
+     * @param aIndex The new index for the cursor.
+     * @since S60 5.0
+     */
+    void SetCursorPositionL(TInt aIndex);
+
+    /**
+     * Returns the current position of the cursor in the text editor.
+     *
+     * @return The current position of the cursor in the text editor.
+     * @since S60 5.0
+     */
+    TInt CursorPosition() const;
+
+    /**
+     * Sets the color for the specified color type defined in TColorType.
+     *
+     * @param aColor The color to be set.
+     * @param aColorType The type of the color to be set.
+     * @since S60 5.0
+     */
+    void SetColorL(const TRgb& aColor, TColorType aColorType);
+
+    /**
+     * Gets the color of the specified color type defined in TColorType.
+     *
+     * @param aColorType The type of the color to get.
+     *
+     * @return The color of the type.
+     * @since S60 5.0
+     */
+    TInt GetColor(TColorType aColorType);
+
+    /**
+     * Sets a new font for this text editor.
+     *
+     * @param aFont The new font.
+     * @since S60 5.0
+     */
+    void SetFontL(MMIDFont* aFont);
+
+    /**
+     * Sets the preferred touch input mode.
+     *
+     * The modes must map to values defined in Pen Input Client API.
+     * The specified touch input mode becomes the preferred touch input
+     * mode for the current application.
+     *
+     * @see AknFepGlobalEnums.h
+     *
+     * @param aInputMode. The preferred touch input mode.
+     * @since S60 5.0
+     */
+    void SetPreferredTouchInputMode(TInt aInputMode);
+
+    /**
+     * Gets the preferred touch input mode which is currently active.
+     *
+     * @see AknFepGlobalEnums.h
+     *
+     * @return The preferred touch input mode.
+     * @since S60 5.0
+     */
+    TInt PreferredTouchInputMode();
+
+    /**
+     * Sets the disabled touch input modes.
+     *
+     * The modes must map to values defined in Pen Input Client API.
+     * The specified modes are disabled from the on screen touch
+     * input UI and cannot be selected by the user.
+     *
+     * @see AknFepGlobalEnums.h
+     *
+     * @param aInputModes The modes to be disabled.
+     * @since S60 5.0
+     */
+    void SetDisabledTouchInputModes(TInt aInputModes);
+
+    /**
+     * Gets the disabled touch input modes which are currently not
+     * available in the touch input UI.
+     *
+     * @see AknFepGlobalEnums.h
+     *
+     * @return The disabled touch input modes.
+     * @since S60 5.0
+     */
+    TInt DisabledTouchInputModes();
+
+    /**
+     * Sets the custom indicator's visibility.
+     *
+     * Note that the visibility of the indiator cannot be
+     * controlled if the editor is not visible. In that case
+     * this method is a no-op.
+     *
+     * @param aVisible Defines the visibility of the custom indicator.
+     * @since S60 5.0
+     */
+    void SetIndicatorVisibilityL(TBool aVisible);
+
+    /**
+     * Sets the custom indicator's position.
+     *
+     * Position is relative to the parent object of this text editor.
+     *
+     * @param aX The x coordinate of the anchor point.
+     * @param aY The y coordinate of the anchor point.
+     * @since S60 5.0
+     */
+    void SetIndicatorPosition(TInt aX, TInt aY);
+
+    /**
+     * Returns the size of the area needed for drawing the custom
+     * editing state indicator.
+     *
+     * Currently, the size cannot be adjusted through this interface.
+     *
+     * @return The size of the custom editing state indicator.
+     * @since S60 5.0
+     */
+    TSize IndicatorSize() const;
+
+    /**
+     * Sets the editor to use default indicator container.
+     *
+     * @since S60 5.0
+     */
+    void SetDefaultIndicatorsL();
+
+    /**
+     * Handles fullscreen state of parent Canvas.
+     *
+     * @since S60 5.0
+     */
+    void HandleFullscreenModeChange();
+
+    /**
+     * Handles changes of screen orientation.
+     *
+     * @since S60 5.0
+     */
+    void HandleResolutionChange();
+
+    /**
+     * Sets the caret in the Editor at x, y location.
+     *
+     * @param x
+     *      The x coordinate of the wanted caret position.
+     *
+     * @param y
+     *      The y coordinate of the wanted caret position.
+     */
+    void SetCaretXYL(TInt aX, TInt aY);
+
+public: // From MMIDComponent
+
+    /**
+     * Invoked by the framework to clean up any  resources used by the
+     * implementation.
+     *
+     * Typically, the implementation will do "delete this" but is clearly
+     * not restricted to
+     *
+     * @since S60 5.0
+     */
+    void Dispose();
+
+public: // From MDirectContent
+
+    /**
+     * Notify content that container window rect is available.
+     *
+     * @param aRect Rwindow rect on which content can be displayed
+     * @since S60 5.2
+     */
+    void MdcContainerWindowRectChanged(const TRect& /*aRect*/);
+
+    /**
+     * Notify content that container visiblity has changed. The content
+     * must not be displayed when it's container is invisible.
+     *
+     * @param aVisible ETrue if the container is visible, EFalse if it is
+     *        invisible.
+     * @since S60 5.0
+     */
+    void MdcContainerVisibilityChanged(TBool aVisible);
+
+    /**
+     * Notify content that the container bounds have changed.
+     *
+     * @param aRect Maximum area the content can occupy in screen
+     *        co-ordinates. The content should be clipped to this area.
+     * @since S60 5.0
+     */
+    void MdcContentBoundsChanged(const TRect& aRect);
+
+    /**
+     * Notify content that its display area has changed.
+     * This should only be called when the content is displayed on an
+     * Item.
+     *
+     * @param aDisplayRect Display area in Item co-ordinates.
+     * @param aScreenRect Display area in screen co-ordinates.
+     * @since S60 5.0
+     */
+    void MdcItemContentRectChanged(
+        const TRect& aContentRect, const TRect& aScreenRect);
+
+    /**
+     * Notify content that container is about to be destoryed.
+     *
+     * @since S60 5.0
+     */
+    void MdcContainerDestroyed();
+
+    /**
+     * Aborts DSA.
+     *
+     * @since S60 5.0
+     */
+    void MdcAbortDSA();
+
+    /**
+     * Resumes DSA.
+     *
+     * @since S60 5.0
+     */
+    void MdcResumeDSA();
+
+
+public: // From MCoeControlObserver
+
+    /**
+     * Handles an event from an observed control.
+     *
+     * This function is called when a control for which this control is
+     * the observer calls CCoeControl::ReportEventL(). It should be
+     * implemented by the observer control, and should handle all events
+     * sent by controls it observes.
+     *
+     * @param aControl The control that sent the event.
+     * @param aEventType The event type.
+     * @since S60 5.0
+     */
+    void HandleControlEventL(
+        CCoeControl* aControl,
+        TCoeEvent aEventType);
+
+private: // New methods
+
+    /**
+     * Updates the indicator's position based on the editor's current
+     * position.
+     *
+     * Nothing is done if indicator position is user defined.
+     *
+     * @since S60 5.0
+     */
+    void UpdateIndicatorPosition();
+
+    /**
+     * Returns a converted content.
+     *
+     * The method performs locale, language and phone number specific
+     * conversion for the given text. The ownership is transferred to
+     * the caller.
+     *
+     * The returned value is left to the cleanup stack.
+     *
+     * @param aContent The content to be converted.
+     * @return The converted content.
+     * @since S60 5.0
+     */
+    HBufC* ConvertedContentLC(const TDesC& aContent);
+
+private: // Construtors
+
+    /**
+     * Returns result of connecting to pen input server
+     *
+     * @return ETrue if connected, EFalse otherwise.
+     * @since S60 5.0
+     */
+    TBool isConnected();
+
+    /**
+     * C++ constructor.
+     */
+    CMIDTextEditor();
+
+    /**
+     * Second phase constructor
+     *
+     * @param aParams The construction parameters of this class.
+     */
+    void ConstructL(const TCtorParams& aParams);
+
+private: // Data
+
+    // The current set of constraints.
+    TUint iConstraints;
+    // True if editor was created with row count and size is not changed.
+    TBool iRowCountActive;
+    // Row count that has been used to initialize the text editor.
+    TUint iRowCount;
+    // Editing state indicator container. Owned.
+    CMIDEditingStateIndicator* iEditingStateIndicator;
+    // Text editor control. Owned.
+    CMIDTextEditorEdwin* iTextEdwin;
+    // Editor window utils. Owned.
+    CMIDEdwinUtils* iEdwinUtils;
+    // Container for this object. Not owned.
+    MMIDCustomComponentContainer* iComponentContainer;
+    // Container for the direct content. Not owned.
+    MDirectContainer* iDirectContainer;
+    // Text editor observer. Not owned.
+    MMIDTextEditorObserver* iObserver;
+    // Text editor focus state.
+    TBool iFocusState;
+    // Indicates receiveing of pointer events on focused editor.
+    TBool iTouchEnabled;
+    // The shared CMIDUtils instance. Not owned.
+    CMIDUtils* iUtils;
+    // Nonscaled CMIDFont. This is needed for corect scaling. Owned.
+    MMIDFont* iNonScaledFont;
+    // Nonscaled position of CMIDTextEditor. This is needed for corect scaling.
+    TPoint iNonScaledPosition;
+    // Nonscaled editor size. This is needed for correct scaling.
+    TSize iNonScaledEditorSize;
+
+#ifdef RD_TACTILE_FEEDBACK
+    // True if editor is already connected to the pen input server
+    TBool iPenInputServerConnected;
+    // Pen input client for touch input handling.
+    RPeninputServer iPenServer;
+#endif // RD_TACTILE_FEEDBACK
+};
+
+#endif // CMIDTEXTEDITOR_H
+
+// End of file