textandlocutils/inlinetext/inc/InlineTextBase.h
changeset 37 6be019398652
--- /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