--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_plat/editors_api/inc/EIKRTED.H Fri Jul 23 17:08:56 2010 +0800
@@ -0,0 +1,639 @@
+/*
+* Copyright (c) 1997-1999 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:
+*
+*/
+
+
+#if !defined(__EIKRTED_H__)
+#define __EIKRTED_H__
+
+#if !defined(__EIKGTED_H__)
+#include <eikgted.h>
+#endif
+
+#if !defined(__APPARC_H__)
+#include <apparc.h>
+#endif
+
+#if !defined(__TXTMRTSR_H__)
+#include <txtmrtsr.h>
+#endif
+
+#if !defined(__GDI_H__)
+#include <gdi.h>
+#endif
+
+class CRichText;
+class TResourceReader;
+class TPictureHeader;
+class CEikRubberBand;
+class CBufStore;
+class CStreamStore;
+class CApaDoor;
+class CEikParserManager;
+class MEikRichTextEditorParserObserver;
+class MParser;
+
+/**
+ * Rich text editor.
+ *
+ * This is an edit window that supports rich text, including embedded objects
+ * represented either by icons or glass doors.
+ *
+ * @since Symbian 5.0
+ */
+class CEikRichTextEditor : public CEikGlobalTextEditor,
+ public MApaEmbeddedDocObserver,
+ public MRichTextStoreResolver,
+ public MPictureFactory
+ {
+
+public:
+
+ /**
+ * Identifies how an embedded object should be represented.
+ *
+ * One of these values is specified when the object is inserted.
+ */
+ enum TObjectFormat
+ {
+ /** The object is always represented by an icon */
+ EAlwaysIconic,
+
+ /**
+ * The object is represented by a glass door, if possible, or by icon,
+ * if not.
+ */
+ EGlassIfPossible
+ };
+
+ /**
+ * Edit window attribute flags specific to the rich text editor.
+ *
+ * These may be specified during construction in addition to the values
+ * contained in the @c TFlags enum in class @c CEikEdwin.
+ */
+ enum // user flag
+ {
+ /**
+ * All embedded objects are represented by icon rather than
+ * glass doors.
+ */
+ EShowAllPicturesAsIconic =0x00100000,
+
+ /**
+ * The editor has no text parsers.
+ *
+ * Text parsers are used to recognise and tag special text strings,
+ * e.g. URLs.
+ */
+ ENoTextParsers =0x00200000,
+
+ /**
+ * When pasting text into the editor, the text is
+ * stripped of all formatting.
+ *
+ * @since 3.2
+ */
+ EPasteAsPlainText =0x00400000
+ };
+
+public:
+
+ /**
+ * C++ default constructor.
+ */
+ IMPORT_C CEikRichTextEditor();
+
+ /**
+ * C++ constructor.
+ *
+ * @param aBorder Border for the rich text editor.
+ */
+ IMPORT_C CEikRichTextEditor(const TGulBorder& aBorder);
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CEikRichTextEditor();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ *
+ * Completes construction of the rich text editor.
+ *
+ * The editor's paragraph and character formatting are set to default
+ * values, unless the @c CEikEdwin::EUserSuppliedText flag is specified
+ * in @c aEdwinFlags.
+ *
+ * @param aParent If not NULL, the editor's parent control.
+ * If NULL, the editor has no parent.
+ * @param aNumberOfLines The number of lines visible in the editor.
+ * This controls the editor's height.
+ * @param aTextLimit The maximum number of characters that can be entered
+ * into the editor.
+ * @param aEdwinFlags Edit window attribute flags.
+ * See @c CEikEdwin::TFlags().
+ * @param aFontControlFlags = EGulFontControlAll Flags that specify which
+ * font-related controls should not appear in font dialogs launched
+ * from the edit window. For instance @c EGulFontControlBold removes
+ * the bold checkbox control. The default shows all. For possible
+ * values, see @c gulftflg.hrh.
+ * @param aFontNameFlags = EGulNoSymbolFonts The font flags. These control
+ * whether symbol and monospace fonts should be displayed in font
+ * dialogs launched from the edit window. For possible values, see
+ * @c gulftflg.hrh.
+ */
+ IMPORT_C void ConstructL(const CCoeControl* aParent,
+ TInt aNumberOfLines,
+ TInt aTextLimit,
+ TInt aEdwinFlags,
+ TInt aFontControlFlags=EGulFontControlAll,
+ TInt aFontNameFlags=EGulNoSymbolFonts);
+
+ /**
+ * Gets a pointer to the rich text object owned by the editor.
+ *
+ * @return Pointer to the rich text object.
+ */
+ IMPORT_C CRichText* RichText() const;
+
+ /**
+ * Launches an insert object dialog (@c CEikInsertObjectDialog),
+ * and inserts a default document of the application type selected
+ * by the user.
+ *
+ * The object can be displayed either as a glass door, if supported,
+ * or as an icon, and the inserted object is opened for editing.
+ *
+ * Displays an info message and leaves if the editor's text limit
+ * has been reached.
+ *
+ * @param aFormat Specifies whether the embedded document should be
+ * displayed as an icon or as a glass door.
+ */
+ IMPORT_C void InsertObjectL(TObjectFormat aFormat);
+
+ /**
+ * Launches an insert object dialog (@c CEikInsertObjectDialog),
+ * and inserts a default document of the application type selected
+ * by the user.
+ *
+ * The object is displayed as a glass door rather than as an icon,
+ * if supported and the inserted object is opened for editing.
+ *
+ * Displays an info message and leaves if the editor's text limit
+ * has been reached.
+ *
+ * Default is @c EGlassIfPossible.
+ */
+ IMPORT_C void InsertObjectL(); // defaults to EGlassIfPossible
+
+ /**
+ * Creates and inserts a default document of the specified
+ * application type.
+ *
+ * @c CApaProcess::AddNewDocumentL() is used to create the document.
+ *
+ * The object can be displayed either as a glass door, if supported,
+ * or as an icon, and the inserted object is opened for editing.
+ *
+ * Displays an info message and leaves if no suitable application DLL
+ * can be found, or if the editor's text limit has been reached.
+ *
+ * @since Symbian 7.0
+ * @param aAppDllName Filename of the application DLL.
+ * @param aAppDllUid UID of the application. The default is @c KNullUid.
+ * @param aFormat Specifies whether the embedded document should be
+ * displayed as an icon or as a glass door.
+ */
+ IMPORT_C void InsertObjectL(const TDesC& aAppDllName,
+ TUid aAppDllUid,
+ TObjectFormat aFormat);
+
+ /**
+ * Creates and inserts a new embedded object of the specified type.
+ *
+ * First, an attempt is made to find an extended picture factory that
+ * supports the insertion of pictures of the specified type. If one is
+ * not found, the function leaves; if one is found, the picture is inserted
+ * at the cursor position.
+ *
+ * Displays an info message and leaves if the editor's text limit has
+ * been reached.
+ *
+ * @since Symbian 6.1
+ * @param aPictureType The picture type.
+ * @param aData The base address of the data.
+ * @leave KErrNotSupported No picture factory which supports the specified
+ * type is available in the control's @c Uikon
+ * environment.
+ */
+ IMPORT_C void InsertObjectL(TUid aPictureType,
+ CBase* aData);
+
+ /**
+ * Re-edits the embedded object at the cursor position.
+ *
+ * If there is no embedded object at the cursor position, or if there is a
+ * selection, an info message is displayed.
+ *
+ * If there is a valid object at the cursor position, it is opened for
+ * editing (or for viewing if the editor is read-only).
+ */
+ IMPORT_C void ReEditObjectL();
+
+ /**
+ * Gets the document position and checks whether there is an embedded
+ * object at the cursor position.
+ *
+ * If there is no embedded object at the cursor position, or if there
+ * is a selection, an info message is displayed.
+ *
+ * @return The document position of the embedded object, or
+ * @c KErrNotFound if there is no embedded object at the cursor
+ * position, or if there is a selection
+ */
+ IMPORT_C TInt ObjectCursorPos() const;
+
+ /**
+ * Tests whether there is an embedded object at the cursor position.
+ *
+ * If there is one, it is opened for editing (or for viewing if the editor
+ * is read-only).
+ *
+ * @return @c ETrue if there is an embedded object at the cursor
+ * position and it could be opened. @c EFalse if there is no
+ * embedded object at the cursor position, or if the object has
+ * a NULL UID.
+ */
+ IMPORT_C TBool CheckForObjectL();
+
+ /**
+ * Launches a format object dialog (@c CEikFormatObjectDialog) if there
+ * is an embedded object at the cursor position, and the object supports
+ * being displayed as a glass door.
+ *
+ * If the object does not support being displayed as a glass door, an
+ * object information dialog (@c CEikObjectInfoDialog) is launched instead.
+ *
+ * If the embedded object's associated application cannot be found, an
+ * info message is displayed and the function leaves.
+ *
+ * The function has no effect if there is no embedded object at the cursor
+ * position.
+ */
+ IMPORT_C void EditPictureFormatL();
+
+ /**
+ * Handles a change to the format of an embedded object, by updating the
+ * view, the scroll bars and reporting the event to its observers.
+ *
+ * There is no need to call this function after calling
+ * @c EditPictureFormatL().
+ */
+ IMPORT_C void PictureFormatChangedL();
+
+ /**
+ * Gets a pointer to the embedded object located at the specified position.
+ *
+ * If the object is not in memory, the function loads it.
+ *
+ * If the object's associated application cannot be found, an info message
+ * is displayed and the function leaves.
+ *
+ * @param aDoor On return, the embedded document's wrapper object (icon or
+ * glass door).
+ * @param aDoc On return, the embedded document.
+ * @param aDocPos The document position in the editor at which the embedded
+ * object is located.
+ */
+ IMPORT_C void GetEmbeddedAppL(CApaDoor*& aDoor,
+ CApaDocument*& aDoc,
+ TInt aDocPos);
+
+ /**
+ * Changes all embedded objects displayed as glass doors into temporarily
+ * iconic.
+ *
+ * The function operates throughout the editor.
+ *
+ * Only needed when pictures are temporarily iconic.
+ *
+ * Has no effect if there are no embedded objects in the editor or if the
+ * @c EShowAllPicturesAsIconic attribute flag was set during construction.
+ */
+ IMPORT_C void UpdatePictureFormatL();
+
+ /**
+ * Changes all embedded objects displayed as glass doors into temporarily
+ * iconic.
+ *
+ * The function operates over a specified range of characters.
+ *
+ * Has no effect if there are no embedded objects in the editor or if the
+ * @c EShowAllPicturesAsIconic attribute flag was set during construction.
+ *
+ * Only needed when pictures are temporarily iconic.
+ *
+ * @param aStartPos The start position.
+ * @param aLength The number of characters, beginning at @c aStartPos over
+ * which the function operates.
+ */
+ IMPORT_C void UpdatePictureFormatL(TInt aStartPos,TInt aLength);
+
+ /**
+ * Changes the size of the icons used to represent embedded objects.
+ *
+ * Any existing iconic doors can be updated to the new size by calling
+ * @c UpdatePictureSizeL().
+ *
+ * @param aSize The new iconic door size in twips.
+ */
+ IMPORT_C void SetDefaultIconicDoorSize(const TSize& aSize);
+
+ /**
+ * Gets the size of iconic doors.
+ *
+ * @return The size of iconic doors.
+ */
+ IMPORT_C const TSize& DefaultIconicDoorSize() const;
+
+ /**
+ * Changes the size of all icons representing embedded objects to the
+ * default iconic door size.
+ *
+ * Also updates any objects currently displayed as glass doors, so that
+ * if displayed as icons, they will use the correct size.
+ *
+ * The function operates throughout the editor.
+ */
+ IMPORT_C void UpdatePictureSizeL();
+
+ /**
+ * Changes the size of all icons representing embedded objects to the
+ * default iconic door size.
+ *
+ * Also updates any objects currently displayed as glass doors, so that
+ * if displayed as icons, they will use the correct size.
+ *
+ * The function operates over a specified range of characters.
+ *
+ * @param aStartPos The start position.
+ * @param aLength The number of characters, beginning at @c aStartPos over
+ * which the function operates.
+ */
+ IMPORT_C void UpdatePictureSizeL(TInt aStartPos,TInt aLength);
+
+ /**
+ * Sets a parser observer.
+ *
+ * If the @c CEikEdwin::ENoTextParsers attribute flag was specified on
+ * construction, this function has no effect.
+ *
+ * Its @c HandleCursorOverParserL() function is called when the cursor is
+ * positioned over text that has been tagged by the parser, for instance
+ * a URL.
+ *
+ * @param aObserver The parser observer.
+ */
+ IMPORT_C void SetParserObserver(
+ MEikRichTextEditorParserObserver* aObserver);
+
+ /**
+ * Activate/Disable phone number grouping.
+ *
+ * @param aEnable @c ETrue if phone number grouping is to be activated,
+ * @c EFalse otherwise.
+ */
+ IMPORT_C void SetPhoneNumberGrouping( TBool aEnable );
+
+public: // from CCoeControl
+
+ /**
+ * From @c CCoeControl.
+ *
+ * Handles key events.
+ *
+ * Has no effect (apart from returning @c EKeyWasConsumed) if the
+ * @c CEikEdwin::EDisplayOnly attribute flag was specified on construction.
+ *
+ * Handles rich text-specific hot keys, for instance to insert an object;
+ * otherwise calls @c CEikGlobalTextEditor::OfferKeyEventL().
+ *
+ * @param aKeyEvent The key event.
+ * @param aType The type of the event. The editor only consumes events of
+ * type @c EEventKey.
+ * @return Indicates whether or not the editor consumed the
+ * key event.
+ */
+ IMPORT_C TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+ /**
+ * From @c CCoeControl.
+ *
+ * Handles pointer events inside the editor.
+ *
+ * Has no effect if the @c CEikEdwin::EDisplayOnly attribute flag was
+ * specified on construction.
+ *
+ * @param aPointerEvent The pointer event to be handled.
+ */
+ IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+ /**
+ * From @c CCoeControl.
+ *
+ * Completes the construction of the rich text editor from a resource file.
+ *
+ * The editor's paragraph and character formatting are set to default
+ * values, unless the @c CEikEdwin::EUserSuppliedText flag is specified in
+ * the resource.
+ *
+ * @param aReader A resource reader positioned for reading from an
+ * RTXTED resource.
+ */
+ IMPORT_C void ConstructFromResourceL(TResourceReader& aReader);
+
+ /**
+ * From @c CCoeControl.
+ *
+ * Activates the editor so that it is ready for use.
+ *
+ * For instance, the text view is created, the editor is set to observe its
+ * rich text object, the editor's parser manager is set up, which handles
+ * the changes that occur when the cursor is moved over tagged text
+ * (for instance a URL), and all embedded objects are set to be displayed
+ * as icons, of the default size.
+ */
+ IMPORT_C void ActivateL();
+
+private:
+
+ /**
+ * From CAknControl.
+ */
+ IMPORT_C void* ExtensionInterface( TUid aInterface );
+
+public: // from CEikEdwin
+
+ /**
+ * From @c CEikEdwin.
+ *
+ * Copies the contents of one text object into another.
+ *
+ * @param[in] aInText The rich text object to copy.
+ * @param[out] aOutText On return, contains a copy of @c aInText.
+ * @panic 26 In debug mode, if either @c aInText or @c aOutText is @c NULL.
+ */
+ IMPORT_C void CopyDocumentContentL(CGlobalText& aInText,CGlobalText& aOutText);
+
+protected:
+
+ /**
+ * Internal flags used for indicating operations.
+ */
+ enum // internal flags
+ {
+ /** Crop from left. */
+ ECropFromLeft =0x00010000,
+
+ /** Crop from right. */
+ ECropFromRight =0x00020000,
+
+ /** Crop from top. */
+ ECropFromTop =0x00040000,
+
+ /** Crop from bottom. */
+ ECropFromBottom =0x00080000,
+
+ /** Object is being re-edited. */
+ EReEditingObject =0x00100000
+ };
+
+protected: // from CCoeControl
+
+ /**
+ * From @c CCoeControl.
+ *
+ * Writes the internal state to the specified stream.
+ *
+ * @param aWriteStream Target stream.
+ */
+ IMPORT_C void WriteInternalStateL(RWriteStream& aWriteStream) const;
+
+protected: // from MEditObserver
+
+ /**
+ * From @c MEditObserver.
+ *
+ * This member is internal an not meant to be used.
+ *
+ * @param aStartEdit Start position for editing.
+ * @param aEditLength The length of the edited object.
+ */
+ IMPORT_C void EditObserver(TInt aStartEdit,TInt aEditLength);
+
+private: // from CoeControl
+
+ IMPORT_C void Draw(const TRect& aRect) const;
+
+ IMPORT_C void Reserved_2();
+
+private: // from CEikEdwin
+
+ IMPORT_C void HandleTextPastedL(TInt aStartPos,TInt& aLength);
+ IMPORT_C void Reserved_3();
+
+private: // from MApaEmbeddedDocObserver
+
+ IMPORT_C void NotifyExit(TExitMode aMode);
+
+private: // from MRichTextStoreResolver
+
+ IMPORT_C const CStreamStore& StreamStoreL(TInt aPos) const;
+
+private: // from MPictureFactory
+
+ IMPORT_C void NewPictureL(TPictureHeader& aHdr,const CStreamStore& aDeferredPictureStore) const;
+
+private:
+
+ void CommonConstructL();
+
+ static TInt InsertEmbeddedDocL(TAny *aThis);
+
+ static TInt DeleteEmbeddedDoc(TAny *aThis);
+
+ static TInt UpdateEmbeddedDocL(TAny* aThis);
+
+ static TInt TryDeleteEmbeddedDocL(TAny *aThis);
+
+ void InsertPictureL(const TPictureHeader& aPictureHeader);
+
+ void DoInsertPictureL(TBool& aFormatHasChanged,const TPictureHeader& aPictureHeader);
+
+ void DoReEditObjectL(TInt aDocPos);
+
+ void RoomForObjectL();
+
+ void InsertObjectL(CApaDocument* aDoc,TObjectFormat aFormat);
+
+ void SetTextObserver(CRichText& aText);
+
+ inline void DoReportEdwinEventL(MEikEdwinObserver::TEdwinEvent aEventType);
+
+protected:
+
+ /**
+ * Default size of iconic door.
+ */
+ TSize iDefaultIconicDoorSize;
+
+private:
+
+ TPictureHeader iEmbeddedDoc;
+
+ CIdle* iEmbeddedDocUpdate;
+
+ CBufStore* iBufStore;
+
+ CEikParserManager* iParserManager;
+
+private:
+
+ friend class CEikParserManager;
+
+public: // new methods
+
+ /**
+ * Force everything to be parsed.
+ */
+ IMPORT_C void RefreshParsersL();
+
+ };
+
+class MEikRichTextEditorParserObserver
+ {
+public:
+ virtual void HandleCursorOverParserL(const TDesC& aDoItText)=0;
+ };
+
+inline void CEikRichTextEditor::DoReportEdwinEventL(MEikEdwinObserver::TEdwinEvent aEventType)
+ {ReportEdwinEventL(aEventType);}
+
+#endif // __EIKRTED_H__
+
+// End of file