diff -r e1b950c65cb4 -r 837f303aceeb epoc32/include/mw/eikedwin.h --- a/epoc32/include/mw/eikedwin.h Wed Mar 31 12:27:01 2010 +0100 +++ b/epoc32/include/mw/eikedwin.h Wed Mar 31 12:33:34 2010 +0100 @@ -2,9 +2,9 @@ * Copyright (c) 1997-1999 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 "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members +* under the terms of "Eclipse Public License v1.0" * which accompanies this distribution, and is available -* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". +* at the URL "http://www.eclipse.org/legal/epl-v10.html". * * Initial Contributors: * Nokia Corporation - initial contribution. @@ -63,6 +63,8 @@ class CAknPointerEventSuppressor; class CSmileyManager; class CSmileyCustomWrap; +class CAknEdwinPhysicsHandler; +class CEdwinAsyncFormat; // Forward declaration of now removed (Series 60 2.0) custom drawer class for CEikEdwin class CEikAvkonCustomDraw; @@ -324,7 +326,22 @@ * @return value of current ClearDirection */ TInt ClearDirection() const; + + /** + * Enables kinetic scrolling. + */ + void EnableKineticScrollingL(); + /** + * Enables physics. + */ + void EnablePhysicsL(); + + /** + * Initializes physics. + */ + void InitPhysicsL(); + public: // from MCenRepNotifyHandlerCallback void HandleNotifyInt(TUint32 aId, TInt aNewValue); @@ -338,7 +355,8 @@ enum TFlagIndices { ESkinBackgroundControlContextHasBeenSetIndex = 0, - ESuppressBackgroundDrawing + ESuppressBackgroundDrawing, + EKineticScrollingEnabled }; class TAknEdwinPictographDrawer : public MAknPictographAnimatorCallBack { @@ -394,15 +412,73 @@ EDrawing }; TInt iDrawInvoked; - TInt iThumbPos; -#ifdef FF_AVKON_EMOTION_ICON_ENABLED + TInt iThumbPos; // own CSmileyManager* iSmiley; CSmileyCustomWrap* iSmileyWrap; TBool iInlineEditing; TBool iDisableConvertInFormat; -#endif - }; + TCursorSelection iVisibleRange; + CEdwinAsyncFormat* iAsyncFormat; + + /** + * Pointer to CEikEdwin. + * Not own. + */ + CEikEdwin* iEdwin; + + /** + * Scrolled offset if using rate scroll way. + */ + TInt iScrolledDelta; + + /** + * If ETrue, uses rate scroll. Otherwise uses original way. + */ + TBool iUseRateScroll; + + /** + * Used with each step of dragging scrollbar to record + * the thumb position before dragging action + */ + TInt iScrollbarPosition; + + /** + * Physics handler. Used only when physics feature is enabled. + * Own. + */ + CAknEdwinPhysicsHandler* iPhysicsHandler; + + /** + * Content has moved down so that empty space + * above the editor content is visible. + */ + TBool iStartBorderExceeded; + + /** + * Content has moved up so that empty space + * below the editor content is visible. + */ + TBool iEndBorderExceeded; + + /** + * Amount of pixels out of border. In practice width + * of empty space above or below editor content. + */ + TInt iPixelsOutOfBorder; + + /** + * If ETrue, text cursor was visible before drag or flick started. + * Used to store cursor state so that it is possible to enable cursor + * again when dragging, flicking or bounce stops. + */ + TBool iCursorWasVisible; + + /** + * If ETrue, ongoing scrolling is caused by moving scrollbar thumb. + */ + TBool iScrolledByScrollBar; + }; public: @@ -1479,6 +1555,15 @@ * @c EFalse otherwise. */ IMPORT_C TBool IsReadOnly() const; + + /** + * Gets editor flags from the editor. + * @return editor flags if existed + * @or return KErrNotFound + */ + IMPORT_C TInt CEikEdwin::AknEditorFlags(); + + /** * Determines whether the document being edited is read only. Displays @@ -1690,6 +1775,9 @@ * @param aHeight The maximum Edwin height. */ IMPORT_C void SetMaximumHeight(TInt aHeight); + + void OnEditorStateFlagChange( TInt aOldFlag, TInt aNewFlag ); + void ReportChinesePopupEventL( TBool aChinesePopupOpen ); public: // new utility methods @@ -2231,26 +2319,42 @@ */ IMPORT_C void SetSuppressFormatting( TBool aSuppressed ); -#ifdef FF_AVKON_EMOTION_ICON_ENABLED + /** + * Enables kinetic scrolling in editor. + * + * Note that when kinetic scrolling is enabled, it is + * no longer possible to disable it with this function. + * + * @since S60 v5.2 + * @param aEnable ETrue if kinetic scrolling should be enabled. + */ + IMPORT_C void EnableKineticScrollingL( TBool aEnable ); + public: void EnableSmileySupportL( TBool aEnableSmiley ); TBool IsSmileyEnabled() const; void DrawSmileyInTextL( CBitmapContext& aGc, CFont& aFont, - const TDesC& aText, TPoint& aPt ); + const TDesC& aText, const TPoint& aPt ); void ConvertVisibleTextForSmileyL( TBool aTextToCode ); void HandleScrollForSmileyL(); TBool AdjustCursorForSmileyL( TInt aOldCursor, TCursorSelection& aSelect ); + TRect AdjustDrawRectForSmiley( const TRect& aRect ) const; + void GetClipRegionForSmiley( RRegion& rgn, CFont& aFont, const TDesC& aText, + const TPoint& aPt, const TRect& aRect ) const; + HBufC* ExtractTextLC( TCursorSelection aSelect ); + void ConvertSmileyIconToTextL( TInt aStartPos, TDes& aText ); private: void ConvertTextForSmileyL( TCursorSelection aSelect, TBool aTextToCode, TBool aRedraw = ETrue ); void TrimText( TDes& aText ); TCursorSelection GetVisibleTextRangeL(); - HBufC* ExtractTextLC( TCursorSelection aSelect ); void ExtendedRangeForSmiley( TCursorSelection& aSelect ); - void ConvertSmileyForDeleteL( TInt aDocPos, TBool aBackSpace ); + TBool ConvertSmileyForDeleteL( TInt aDocPos, TBool aBackSpace ); void ConvertSmileyForDeleteL( const TCursorSelection &aSelect ); -#endif + TBool AdjustCursorPosByMovementL( TCursorPosition::TMovementType aMovement, + TBool aSelect ); + void HandleSelectionForSmiley( TCursorSelection aSelect ); protected: @@ -2307,7 +2411,8 @@ */ EPhoneNumberGrouping = 0x00000020, ESuppressNotifyDraw = 0x00000040, - ESuppressFormatting = 0x00000080 // Suppresses calls to formatting + ESuppressFormatting = 0x00000080, // Suppresses calls to formatting + ESkipBackgroundDrawer = 0x00000100 }; protected: // from MEditObserver @@ -2630,7 +2735,28 @@ void SetVKBStatus(); void ScrollViewToCursorLineL(); void PerformRecordedOperationL(); - void ScrollIfAtTopOrBottom(); + void ScrollIfAtTopOrBottomL(); + void SetSelectionVisibilityL(TBool isVisable); + + /** + * Sets scrollbars with kinetic scrolling. + */ + void SetKineticScrollingScrollBarsL(); + + /** + * Sets vertical scrollbar model with kinetic scrolling. + * + * @param aVertModel Vertical scrollbar model + */ + void SetKineticScrollingScrollBarModel( + TEikScrollBarModel& aVertModel ) const; + + /** + * Enables rate scrolling in editor. + * + * @param aEnable ETrue if rate scrolling should be enabled. + */ + void EnableRateScrolling( TBool aEnable ); private: @@ -2742,6 +2868,12 @@ * metrics used for the scroll bar calculations. */ void CalculateLineMetricsForBandFormattingL(); + + /** + * check the selection content is visible character or not + */ + TBool IsSelectionVisible(); + protected: // from MObjectProvider @@ -2816,6 +2948,84 @@ * @return TRgb for the color to be used for background. */ TRgb EditorBackgroundColor(TRgb& aConditionalColor) const; + +public: + /** + * Can be used by custom drawers to check if background drawing should be + * performed. This is meant to be used only if editor has + * MCoeControlBackground object attached. + * + * @return ETrue if custom drawer shouldn't draw background. + */ + TBool SkipBackgroundDrawer() const; + + /** + * Scrolls view by amount of pixels. + * Stops scrolling when beginning or end of content exceeded. + * This function should be used when scrolling starts from inside content + * (in other words in normal situation when begin- or end-border has not + * yet exceeded) + * + * @param aPixelsToScroll Amount of pixels to scroll + * @param aBorderExceeded returns ETrue if border was exceeded + * @param aRestOfPixels Amount of pixels not scrolled because border + * was exceeded + * + * @return Amount of scrolled pixels. + */ + TInt ScrollView( TInt aPixelsToScroll, TBool& aBorderExceeded, + TInt& aRestOfPixels ); + + /** + * Scrolls view by amount of pixels. + * + * This function should be used to scroll when we have already + * exceeded begin- or end-border (we are out of borders). + * This function supports scrolling so that there can be empty space + * above or below the editor content (used in bounce effect). + * Stops scrolling when we return back to inside borders. + * + * @param aPixelsToScroll Amount of pixels to scroll + * @param aEndOfBounce returns ETrue if content scrolled back + * to inside of borders + * @param aRestOfPixels Amount of pixels not scrolled + * + * @return Amount of scrolled pixels. + */ + TInt ScrollViewWithBounce( TInt aPixelsToScroll, TBool& aEndOfBounce, + TInt& aRestOfPixels ); + + /** + * Returns amount of pixels how much we are out of borders. + * + * @return Amount of pixels scrolled out of borders. + */ + TInt PixelsOutOfBorder() const; + + /** + * Handles scrollbar events with kinetic scrolling. + * + * @param aScrollBar The scrollbar. + */ + void HandleScrollEventWithPhysics( CEikScrollBar* aScrollBar ); + + /** + * If cursor is visible, disables it and stores cursor visibility info. + */ + void StoreCursorState(); + + /** + * Show cursor again if needed (based on stored cursor visibility info). + */ + void RestoreCursorState(); + + /** + * Returns ETrue if kinetic scrolling is enabled. + * + * @return ETrue if kinetic scrolling is enabled. + */ + TBool KineticScrollingEnabled() const; + protected: