classicui_plat/item_finder_api/inc/ItemFinder.h
changeset 0 2f259fa3e83a
child 7 08e69e956a8c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_plat/item_finder_api/inc/ItemFinder.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,314 @@
+/*
+* 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 "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:  Plugin utility used for automatic tags ( http, email, phone numbers )
+*                syntax highlighting in text viewers
+*
+*
+*/
+
+
+
+#ifndef ITEMFINDER_H
+#define ITEMFINDER_H
+
+// INCLUDES
+#include <mparser.h>                       // for MParser
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class CEikRichTextEditor;
+class CFindItemEngine;
+class CItemFinderAsyncParser;
+class CSchemeResolver;
+class CFindItemEngine;
+
+// CLASS DECLARATION
+class MItemFinderObserver
+    {
+    public:
+        virtual void HandleParsingComplete() = 0;
+    };
+
+/**
+* Parser plugin
+*/
+NONSHARABLE_CLASS(CItemFinder) :
+    public CBase,
+    public MParser
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Destructor.
+        */
+        ~CItemFinder();
+
+    public: // definitions
+    
+        enum TItemType
+            {
+            ENoneSelected = 0,
+            EUrlAddress = 1,
+            EEmailAddress = 2,
+            EPhoneNumber = 4,
+            EUriScheme =8
+            };
+
+        enum TFindDirection
+            {
+            EInit = 0,
+            ENextDown = 1,
+            ENextUp = 2,
+            EInitDown = 3,
+            EInitUp = 4
+            };
+
+        /*class CFindItemDef: public CBase // @deprecated since 3.2
+            {
+            public:
+                ~CFindItemDef(){ if ( iItemDescriptor ) delete iItemDescriptor; }
+                TItemType iItemType;
+                HBufC* iItemDescriptor;
+                TInt iDisplayLength;
+            };*/
+
+        class CFindItemExt: public CBase // replaces CFindItemDef.
+            {
+            public:
+                IMPORT_C ~CFindItemExt();// { if ( iItemDescriptor ) delete iItemDescriptor; }
+                TItemType iItemType;
+                HBufC* iItemDescriptor;
+                TInt iStart;
+                TInt iEnd;
+            };
+
+    public: // New functions
+        /**
+        * @since Series 60 2.6
+        * Creates instance of ItemFinder and adds it to editor parser list (TLS)
+        * Must be called before editor creation in order to have effect
+        *
+        * @param    aFindFlags   Find mode ( defaults to all )
+        * @return                New instance
+        */
+        IMPORT_C static CItemFinder* NewL( TInt aFindFlags = EUrlAddress|EEmailAddress|EPhoneNumber );
+
+        /**
+        * @since Series 60 2.6
+        * Notify item finder to move focus to next item or scroll display
+        *
+        * @param    aDirection   Direction ( ENextDown or ENextUp )
+        * @return                EFalse if command had no effect, ETrue otherwise
+        */
+        IMPORT_C TBool NextItemOrScrollL( TFindDirection aDirection );
+
+        /**
+        * @since Series 60 2.6
+        * Sets the find mode, can be used for initialize parsers for current position after eg screen size change
+        * Refreshes parser data if editor and text set.
+        *
+        * @param    aFindFlags      Any combination of (EUrlAddress|EEmailAddress|EPhoneNumber)
+        */
+        IMPORT_C void SetFindModeL( TInt aFindFlags );
+
+        /**
+        * @since Series 60 2.6
+        * Set pointer to applications instance of CEikRichTextEditor.
+        * If editor is not set, all methods return immediately
+        * Editor should have texts installed when application sets the pointer
+        * Refreshes parser data if text is set.
+        *
+        * @param    aEditor Pointer array pointing applications editor instance
+        */
+        IMPORT_C void SetEditor( CEikRichTextEditor** aEditor );
+
+    public: // From MParser
+
+        IMPORT_C TBool ParseThisText(
+            const CRichText& aTextObj,
+            TBool aAllowBack,
+            TInt aStartScan,
+            TInt aScanLength,
+            TInt& aStartTag,
+            TInt& aTagLength );
+
+        IMPORT_C const TDesC& CreateDoItText(
+            const CRichText& aTextObj,
+            TInt aStartText,
+            TInt aLength );
+
+        IMPORT_C void ActivateThisTextL(
+            const CRichText& aTextObj,
+            TInt aStartText,
+            TInt aLength );
+
+        IMPORT_C TBool ReformatOnRecognise() const;
+
+        IMPORT_C TBool ReformatOnRollover() const;
+
+        IMPORT_C void GetRecogniseFormat( TCharFormat& aFormat );
+
+        IMPORT_C void GetRolloverFormat( TCharFormat& aFormat );
+
+        IMPORT_C TBool ConfirmCursorOverTag(
+            const CRichText& aTextObj,
+            TInt aTagStart,
+            TInt aTagLen,
+            TInt aCurPos );
+
+        IMPORT_C void Release();
+
+        IMPORT_C void MParser_Reserved_2();
+
+    public: // new methods
+        /**
+        * @since Series 60 2.6
+        * Returns document position of next item in given direction.
+        * Needed if application wants to control the scrolling and
+        * NextItemOrScrollL() is thus not suitable.
+        *
+        * @param    aDirection   Direction ( ENextDown or ENextUp )
+        * @return                Start position of next tag, KErrNotFound if
+        *                        no tag found from given direction
+        */
+        IMPORT_C TInt PositionOfNextItem( TFindDirection aDirection );
+
+        /**
+        * @since Series 60 2.6
+        * Deletes current item descriptor and sets type to ENoneSelected
+        */
+        IMPORT_C void ResetCurrentItem();
+
+        /**
+        * @since Series 60 2.6
+        *
+        * Creates item descriptor starting from aStart and sets the item type
+        * to CurrentItem().iItemType, if default value is not overridden
+        * uses internal members to resolve type.
+        * Method does NOT any formatting to editor.
+        *
+        * @param    aStart   Position from which tag to be recognized should start
+        *                    Default value uses internal members
+        */
+        IMPORT_C void ResolveAndSetItemTypeL( TInt aStart = KErrNotFound );
+
+        /**
+        * @since Series 60 2.6
+        *
+        * Sets external observer (Must implement MItemFinderObserver) to which notify when parsing is completed.
+        * There is no need to set an observer if ItemFinder implements scrolling in editor.
+        * Must be called before SetEditor in order to have effect.
+        *
+        * @param    aObserver   Observer which will be notified about the praser state changes
+        */
+        IMPORT_C void AddObserver( MItemFinderObserver& aObserver );
+
+        /**
+        * @since Series 60 3.2
+        *
+        * Tells whether the point tapped inside the editor text body was hit some find item.
+        * Also updates the current item selection and cursor position when necessary.
+        *
+        * @param    aTappedPoint Tapped point relative to the upper left point of the editor text body control.
+        * @return   ETrue if some find item inside editor text body was tapped. Otherwise EFalse.
+        */
+        IMPORT_C TBool ItemWasTappedL( const TPoint aTappedPoint );
+
+        /**
+        * @since Series 60 3.2
+        * Sets the given external links (hyperlinks) and refreshes the text buffer.
+        * Validites the links by their type.
+        *
+        * @param    aLinks a pointer list of external link objects ordered by start position (lowest first).
+        * @return   KErrNone if successfull operation, otherwise system-wide error code.
+        */
+        IMPORT_C TInt SetExternalLinks( CArrayPtrFlat<CFindItemExt>* aLinks );
+
+        /**
+        * @since Series 60 3.2
+        * Returns reference to currently selected item, if none selected iItemType = ENoneSelected
+        * Please note that method does not check whether the editor has focus or not, it will return
+        * last selected item even the highlight is not visible as editor is not focused
+        * Unlike CurrentItem() that contains the length, this method also contains position of the item.
+        *
+        * @return   currently selected item
+        */
+        IMPORT_C CFindItemExt& CurrentItemExt();
+
+        /**
+        * @since Series 60 3.2
+        * Returns the current selection of the text buffer on the screen.
+        *
+        * @return   current selection of the text buffer on the screen.
+        */
+        IMPORT_C TPtrC CurrentSelection();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CItemFinder( TInt aFindFlags );
+
+        // utilities
+        TInt EngineFlags();
+        void InsertPrefixToUrl();
+        TBool SchemeSupported( const TDesC& aScheme );
+
+        TBool CallbackToExtObserver();
+
+        /**
+        * 2nd phase constructor.
+        */
+        void ConstructL();
+
+        void DoResolveAndSetItemTypeL( const CFindItemExt* aItem );
+
+        TInt MinLengthForItemType( TInt aItemType );
+
+        TInt GetMinDigitsToFindL();
+
+        TInt RefreshEditor();
+
+    private:    // Data
+
+        CEikRichTextEditor** iEditor; // Not owned
+        TInt iFlags;
+
+        CFindItemExt* iCurrentItemExt;
+        CArrayPtrFlat<CFindItemExt>* iExternalLinks;
+
+        TInt iCurrentStart;
+        TInt iCurrentEnd;
+
+        TFindDirection iPreviousDirection;
+        TInt iFirstVisible;
+
+        CItemFinderAsyncParser* iAsyncParser;
+
+        CSchemeResolver* iSchemeResolver;
+
+        TBool iMarkedArrayComplete;
+
+        MItemFinderObserver* iExternalObserver; // not owned
+
+        friend class CItemFinderAsyncParser;
+
+        TInt iMinDigitsToFind;
+    };
+
+#endif      // ITEMFINDER_H
+
+// End of File