diff -r 000000000000 -r 2f259fa3e83a classicui_plat/item_finder_api/inc/ItemFinder.h --- /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 // 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* 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* 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