textrendering/textformatting/inc/unified_editor.h
changeset 0 1fb32624e06b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/textformatting/inc/unified_editor.h	Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,314 @@
+/*
+* Copyright (c) 2000-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:
+*
+* Description: 
+*
+*/
+
+
+
+
+#ifndef __UNIFIED_EDITOR_H__
+#define __UNIFIED_EDITOR_H__ 1
+
+#include <tagma.h>
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <tagma_internal.h>
+#endif
+
+/*
+The header file for MUnifiedEditor, an interface that unifies editing operations on backing text and layout,
+which are traditionally separated between ETEXT (backing text) and FORM (layout). It is not dependent
+on FORM or ETEXT, although there is an implementation (TFormAndTextEditor) using those components.
+*/
+
+/**
+Base class for optional interfaces
+@internalComponent
+*/
+class MTmOptionalInterface
+
+	{
+	};
+
+/**
+UIDs for standard optional interfaces
+@internalComponent
+*/
+const TUint KUidMUnifiedEditorStyleSupport = 0x100092B6;
+const TUint KUidMUnifiedEditorPictureSupport = 0x100092B7;
+const TUint KUidMUnifiedEditorFieldSupport = 0x100092B8;
+const TUint KUidMUnifiedEditorClipboardSupport = 0x100095EF;
+
+/**
+An interface class for text editing.
+
+An object that supports text editing has some backing text - zero or more Unicode characters - and
+character and paragraph formats applicable to ranges of these characters. A paragraph is a sequence of characters
+terminating either at the end of the document or after the next paragraph separator, whichever comes first.
+
+The format for a given position is derived from up to three formatting layers. The base layer is the lowest and
+provides default attributes. These may be optionally overridden by attributes from a named style, and these in
+turn may be overridden by specific formatting. Text editing objects may support any or none of these layers; they
+may in fact ignore all attempts to set format attributes.
+@internalComponent
+*/
+class MUnifiedEditor
+
+	{
+public:
+	/**
+	 * constants used when getting formats
+	 */
+	enum TFormatLevel
+		{
+		ESpecific,			// format applied by the user
+		EEffective			// the actual format: a combination of base and specific formats
+		};
+	class MStyleSupport : public MTmOptionalInterface
+	/**
+	An optional interface to support styles
+	@internalComponent
+	*/
+		{
+	public:
+		/**
+		 * Creates a style.
+		 */
+		virtual TInt CreateStyleL(const RTmStyle& /*aStyle*/) { return KErrNotSupported; }
+		/**
+		 * Sets the attributes of a style.
+		 */
+		virtual TInt ChangeStyleL(const RTmStyle& /*aStyle*/) { return KErrNotSupported; }
+		/**
+		 * Applies the named style to the specified run of text.
+		 */
+		virtual TInt SetStyleL(TInt aPos, TInt aLength, const TDesC& aName) = 0;
+		/**
+		 * Renames a style.
+		 */
+		virtual TInt RenameStyleL(const TDesC& /*aOldName*/,const TDesC& /*aNewName*/) { return KErrNotSupported; }
+		/**
+		 * Deletes the named style.
+		 */
+		virtual TInt DeleteStyleL(const TDesC& /*aName*/) { return KErrNotSupported; }
+		/**
+		 * Get the number of named styles.
+		 */
+		virtual TInt StyleCount() const = 0;
+		/**
+		 * Gets the style set at the document position aPos. If no style is set
+		 * there return an empty string and the run length over which no style
+		 * applies.
+		 */
+		virtual void GetStyle(TInt aPos, TPtrC& aName, TInt& aRunLength) const = 0;
+		/**
+		 * Gets the attributes of a named style by completing aStyle from its
+		 * name.
+		 */
+		virtual TInt GetStyleByNameL(const TDesC& aName, RTmStyle& aStyle) const = 0;
+		/**
+		 * Gets the name and attributes of a style by index; use this in
+		 * conjunction with StyleCount to enumerate existing styles.
+		 */
+		virtual TInt GetStyleByIndexL(TInt aIndex, RTmStyle& aStyle) const = 0;
+		};
+
+	/**
+	An optional interface to support embedded pictures
+	@internalComponent
+	*/
+	class MPictureSupport : public MTmOptionalInterface
+
+		{
+	public:
+		/**
+		 * Inserts a picture, passing ownership in.
+		 */
+		virtual void InsertPictureL(TInt aPos, const TPictureHeader& aPictureIn) = 0;
+		/**
+		 * Deletes picture character in the text at aPos, if any. Ownership of
+		 * any picture is passed to the caller, therefore Picture(aPos,
+		 * aPictureOut) must have been called previously, and
+		 * aPictureOut.DeletePicture() must be called in the future to avoid a
+		 * memory leak.
+		 * If the character at aPos is a picture character, it will be deleted,
+		 * regardless of whether or not a picture was actually attatched.
+		 */
+		virtual void DropPictureL(TInt aPos) = 0;
+		/**
+		 * Gets the picture if any at aPos. No picture is indicated by
+		 * aPictureOut.iPictureType containing KUidNull.
+		 * Ownership of the picture is retained. Note that aPictureOut is
+		 * merely overwritten by this function: aPictureOut.DeletePicture() is
+		 * NOT called!
+		 */
+		virtual void Picture(TInt aPos, TPictureHeader& aPictureOut) const = 0;
+		};
+
+	/**
+	An optional interface to support clipboard operations
+	@internalComponent 
+	*/
+	class MClipboardSupport : public MTmOptionalInterface
+	
+		{
+	public:
+		/**
+		 * Copy the text and formatting specified to the stream, updating
+		 * the dictionary as appropriate.
+		 */
+		virtual void CopyToStoreL(CStreamStore& aStore, CStreamDictionary& aDictionary,
+			TInt aPos, TInt aLength) const = 0;
+		/**
+		 * Insert text and formatting from the stream at aPos.
+		 */
+		virtual void PasteFromStoreL(const CStreamStore& aStore,
+			const CStreamDictionary& aDictionary, TInt aPos) = 0;
+		};
+
+	// VIRTUAL FUNCTIONS
+
+	// getters
+
+	/**
+	 * Returns the optional interface with the specified UID, or 0 if it is not
+	 * supported.
+	 */
+	virtual MTmOptionalInterface* Interface(TUint /*aId*/) { return NULL; }
+	/**
+	 * Returns the length of the document in characters, not including any
+	 * notional final paragraph separator.
+	 */
+	virtual TInt DocumentLength() const = 0;
+	/**
+	 * Gets some text starting at aPos. The amount of text returned may be as
+	 * much or as little as is convenient to the implementation, but must be
+	 * at least one character. The text is raw Unicode text including any
+	 * paragraph separators.
+	 */
+	virtual void GetText(TInt aPos,TPtrC& aText) const = 0;
+	/**
+	 * Gets the base character and paragraph formats
+	 */
+	virtual void GetBaseFormatL(TTmCharFormat& aCharFormat,RTmParFormat& aParFormat) const = 0;
+	/**
+	 * Gets the specific or effective character format and the run over which
+	 * that format applies.
+	 */
+	virtual void GetCharFormat(TInt aPos,TFormatLevel aLevel,
+							   TTmCharFormatLayer& aFormat,TInt& aRunLength) const = 0;
+	/**
+	 * Gets the specific or effective paragraph format and the run over which
+	 * that format applies.
+	 */
+	virtual void GetParFormatL(TInt aPos,TFormatLevel aLevel,
+							   RTmParFormatLayer& aFormat,TInt& aRunLength) const = 0;
+
+	// setters
+
+	/**
+	 * Inserts text at aPos, optionally applying the specified character and
+	 * paragraph formats. Unspecified attributes take the format at the
+	 * insertion point; what this means in detail is implementation-dependent.
+	 */
+	virtual void InsertTextL(TInt aPos,const TDesC& aText,
+							 const TDesC* aStyle = NULL,
+							 const TTmCharFormatLayer* aCharFormat = NULL,
+							 const RTmParFormatLayer* aParFormat = NULL) = 0;
+	/**
+	 * Deletes aLength characters starting at aPos.
+	 */
+	virtual void DeleteTextL(TInt aPos,TInt aLength) = 0;
+	/**
+	 * Sets the base character and paragraph formats
+	 */
+	virtual void SetBaseFormatL(const TTmCharFormat& aCharFormat,const RTmParFormat& aParFormat) = 0;
+	/**
+	 * Sets specific character attributes beginning at aPos for aLength characters.
+	 */
+	virtual void SetCharFormatL(TInt aPos,TInt aLength,const TTmCharFormatLayer& aFormat) = 0;
+	/**
+	 * Sets specific paragraph attributes beginning at aPos for aLength characters.
+	 */
+	virtual void SetParFormatL(TInt aPos,TInt aLength,const RTmParFormatLayer& aFormat) = 0;
+	/**
+	 * Deletes specific character attributes beginning at aPos for aLength characters.
+	 */
+	virtual void DeleteCharFormatL(TInt aPos,TInt aLength) = 0;
+	/**
+	 * Deletes specific paragraph attributes beginning at aPos for aLength characters.
+	 */
+	virtual void DeleteParFormatL(TInt aPos,TInt aLength) = 0;
+
+	// NON-VIRTUAL FUNCTIONS
+	/**
+	 * Reads text into a writable descriptor.
+	 *
+	 * @see GetText(TInt, TPtrC) const
+	 */
+	IMPORT_C void GetText(TInt aPos, TDes& aText) const;
+	/**
+	 * Returns the interface for manipulating styles, if applicable.
+	 */
+	inline MStyleSupport* StyleSupport();
+	inline const MStyleSupport* StyleSupport() const;
+	/**
+	 * Returns the interface for manipulating pictures, if applicable.
+	 */
+	inline MPictureSupport* PictureSupport();
+	inline const MPictureSupport* PictureSupport() const;
+	/**
+	 * Returns the interface for clipboard operations, if applicable.
+	 */
+	inline MClipboardSupport* ClipboardSupport();
+	inline const MClipboardSupport* ClipboardSupport() const;
+	};
+
+// inline functions
+
+MUnifiedEditor::MStyleSupport* MUnifiedEditor::StyleSupport()
+	{
+	return static_cast<MStyleSupport*>(Interface(KUidMUnifiedEditorStyleSupport));
+	}
+
+const MUnifiedEditor::MStyleSupport* MUnifiedEditor::StyleSupport() const
+	{
+	return static_cast<MStyleSupport*>(
+		const_cast<MUnifiedEditor*>(this)->Interface(KUidMUnifiedEditorStyleSupport));
+	}
+
+MUnifiedEditor::MPictureSupport* MUnifiedEditor::PictureSupport()
+	{
+	return static_cast<MPictureSupport*>(Interface(KUidMUnifiedEditorPictureSupport));
+	}
+
+const MUnifiedEditor::MPictureSupport* MUnifiedEditor::PictureSupport() const
+	{
+	return static_cast<MPictureSupport*>(
+		const_cast<MUnifiedEditor*>(this)->Interface(KUidMUnifiedEditorPictureSupport));
+	}
+
+MUnifiedEditor::MClipboardSupport* MUnifiedEditor::ClipboardSupport()
+	{
+	return static_cast<MClipboardSupport*>(Interface(KUidMUnifiedEditorClipboardSupport));
+	}
+
+const MUnifiedEditor::MClipboardSupport* MUnifiedEditor::ClipboardSupport() const
+	{
+	return static_cast<MClipboardSupport*>(
+		const_cast<MUnifiedEditor*>(this)->Interface(KUidMUnifiedEditorClipboardSupport));
+	}
+
+#endif // __UNIFIED_EDITOR_H__