--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textandlocutils/inlinetext/inc/InlineTextBase.h Fri Jun 11 15:33:54 2010 +0300
@@ -0,0 +1,248 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* Base classes used for holding inline text for the Form MTmInlineTextSource interface.
+*
+*/
+
+
+#ifndef INLINETEXTBASE_H
+#define INLINETEXTBASE_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <medobsrv.h>
+#include <inlinetext.h>
+
+// CONSTANTS
+enum TInlineTextPanic
+ {
+ EInlineTextBadInlineTextFetch,
+ EInlineTextStoreCorrupted
+ };
+
+#define KInlineTextParagraphDelimiter 0x2029
+
+GLREF_C void Panic(TInlineTextPanic aPanic);
+
+// CLASS DECLARATION
+
+class TTmDocPos;
+
+/**
+* This class is used to hold text that is being formatted into text via the inline text
+* interface.
+*
+* @lib InlineText
+* @since 3.2
+*/
+NONSHARABLE_CLASS(CInlineTextPositionedText): public CBase
+ {
+ public: // 2stage constructor and descructor
+ /**
+ * Fully constructs the object given position and text. A copy of the passed-in text is made
+ * on the heap, owned by the constructed object.
+ *
+ * @param aPosition TTmDocPos at which text is to be reported
+ * @param aInlineText Text to be returned at this position
+ *
+ * @return pointer to fully constructed object
+ */
+ static CInlineTextPositionedText* NewL( const TTmDocPos& aPosition, const TDesC& aInlineText );
+
+ /**
+ * Destructor
+ */
+ ~CInlineTextPositionedText();
+
+ public:
+
+ /**
+ * Access method to the position in the document of the inline text
+ * @return TTmDocPos of the inline text
+ */
+ const TTmDocPos& DocPos() const;
+
+ /**
+ * Access method to the text for the inline edit
+ * @return reference to an unmodifiable descriptor for the text held in this object
+ */
+ const TDesC& InlineText() const;
+
+ private:
+ /**
+ * C++ constructor
+ */
+ CInlineTextPositionedText( const TTmDocPos& aPosition );
+
+ /**
+ * This method completes the construction by allocating the text storage..
+ */
+ void ConstructL( const TDesC& aInlineText );
+
+ private:
+ TTmDocPos iDocPos;
+ HBufC* iText; // owned
+ };
+
+/**
+* Class to hold an array of inline texts for access
+*
+* @lib InlineText
+* @since 3.2
+*/
+NONSHARABLE_CLASS(CInlineTextStore) : public CArrayPtrFlat<CInlineTextPositionedText>
+ {
+ public: // 2-stage constructor and destructor
+ static CInlineTextStore* NewL();
+ ~CInlineTextStore();
+
+ public:
+ /**
+ * Clears and destroys all inline texts
+ */
+ void Clear();
+
+ /**
+ * Clears and destroys inline texts in a range of document positions. Range is taken
+ * to be inclusive.
+ * @param aStart First position from which and including inline texts are removed
+ * @param aEnd Final position up to which and including inline texts are removed
+ */
+ void ClearRange( const TTmDocPos& aStart, const TTmDocPos& aEnd );
+
+ /**
+ * Insert the inline text object into the store
+ * @param aInlineText object to add
+ */
+ void InsertInlineTextL( CInlineTextPositionedText* aInlineText );
+
+ /**
+ * Returns the pointer to the document position closest after or including the passed-in
+ * position.
+ * @param aDocPos position from which to look for inline texts
+ * @return pointer to document position at or closest after input position
+ * NULL if none is found
+ */
+ const TTmDocPos* NextInlineTextDocPos( const TTmDocPos& aDocPos ) const;
+
+ /**
+ * Searches for the input document position and returns the index in the Store
+ * @param aDocPos input document position
+ * @return index at which the input position is found
+ * -1 if the document position is not in the store
+ */
+ TInt IndexFromDocPos( const TTmDocPos& aDocPos ) const;
+
+ private:
+ /**
+ * Private constructor; no derivation permitted
+ */
+ CInlineTextStore();
+
+ /**
+ * Internal method for determining index of the position later or including
+ * the passed-in position
+ */
+ TInt NextIndexStartingAtDocPos( const TTmDocPos& aDocPos ) const;
+
+ private: // data members
+
+ };
+
+/**
+* Concrete implementation of MTmInlineTextSource, adding an edit observation interface
+* and common infrastructure for managing inline texts
+*
+* @lib InlineText
+* @since 3.2
+*/
+NONSHARABLE_CLASS(CInlineTextSource) : public CBase, public MTmInlineTextSource, public MEditObserver
+ {
+ public: // C++ constructor and destructor
+ CInlineTextSource(); // Class is intended for derivation
+ ~CInlineTextSource();
+
+ /**
+ * 2nd state constructor
+ */
+ void ConstructL();
+
+ public: // From MTmInlineTextSource
+
+ /**
+ * Reports the next position into which inline text should be inserted
+ *
+ * See inlinetext.h
+ */
+ virtual TInt GetNextInlineTextPosition(const TTmDocPos& aFrom, TInt aMaxLength, TTmDocPos& aNext);
+
+ /**
+ * Gets a view of the text to be inserted at aAt.
+ *
+ * See inlinetext.h
+ */
+ virtual TPtrC GetInlineText(const TTmDocPos& aAt);
+
+ public: // From MEditObserver
+
+ /**
+ * See medobsrv.h
+ *
+ * This class implements an empty implementation of this method. Implement in subclass only if
+ * action is to be taken upon edit - and if edit event is actually going to be supplied, which
+ * is only available in the context of CEikRichTextEditor
+ */
+ virtual void EditObserver(TInt aStart, TInt aExtent);
+
+ public:
+ // New methods
+
+ /**
+ * Framework method to inform subclasses what part of the document is currently being interrogated
+ * for inline edits.
+ * Currently this will be where formatting is performed and the store of inline texts updated.
+ * (In future, an edit observer interface of some kind will be used to trigger that)
+ *
+ * @param aFrom position from which to re-consider the formatting
+ * @param aTo position up to which to re-consider the formatting
+ */
+ virtual void CheckFormattingL(const TTmDocPos& aFrom, const TTmDocPos& aTo );
+
+ /**
+ * Non-virtual method for checking for inline text. Similar behaviour to GetInlineText, except
+ * that is it const, and will not panic (but just return EFalse) if there is no inline text
+ * at the input TTmDocPos.
+ *
+ * @param aAt Position at which to access inline text
+ * @param aPtrFound This contains the inline text if ETrue is returned
+ * @return EFalse if there is no inline text at the input position
+ */
+ TBool HasInlineTextAt( const TTmDocPos& aAt, TPtrC& aPtrFound ) const;
+
+ protected:
+
+ /**
+ * Access to the inline text store for derived classes
+ */
+ CInlineTextStore* InlineTextStore() const;
+
+ private:
+ CInlineTextStore* iInlineTextStore; // owned
+ };
+
+#endif
+
+// End of File