diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/inc/AknTextWrapper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/inc/AknTextWrapper.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,210 @@ +/* +* Copyright (c) 2002 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: Avkon text wrapper implementation class +* +* +*/ + + + +#ifndef AKNTEXTWRAPPER_H +#define AKNTEXTWRAPPER_H + +// INCLUDES +#include +#include "AknLineBreaker.h" +#include "AknBidiTextUtils.h" + +// FORWARD DECLARATIONS + +class CFont; + +// CONSTANTS + +struct TAknLocVariant + { + TInt iStart; + TInt iEnd; + }; + +const TInt KAknMaxLocVariants = 5; + +// CLASS DECLARATION + +/** +* Text wrapper implementation class +* +* @lib avkon.dll +* @since 2.0 +* +* @internal +*/ +class TAknTextWrapper + { + public: + + enum // used with bit flags, values must be powers of two + { + EClip = 0x0001, + EConvertToVisual = 0x0002, + EReserveVisualBuffer = 0x0004, + EWrapAllText = 0x0008, + // internal flags + EClipRequired = 0x4000, + EFits = 0x8000 + }; + + public: // Constructors and destructor + + /** + * C++ default constructor. + */ + TAknTextWrapper( + TDes& aStringToWrap, + const CArrayFix* aLineWidthArray, + const CFont& aFont, + CArrayFix& aWrappedArray, + TInt aLineWidth, + TInt aFlags, + AknBidiTextUtils::TParagraphDirectionality aDirectionality ); + + /** + * Destructor. + */ + ~TAknTextWrapper(); + + public: // New functions + + /** + * Wrap implementation. + * + * @return If flag EReserveVisualBuffer was set, allocated visual buffer. + * Otherwise, NULL. + */ + HBufC* WrapToArrayL(); + + /** + * Chop implementation. + * + * @return If flag EReserveVisualBuffer was set, allocated visual buffer. + * Otherwise, NULL. + */ + HBufC* ChopToArrayAndClipL(); + + /* + * Separates localisation variants from the given text. + * Those variants are separated with the character 0x0001. + * They are sorted in descending order of character count + * and returned in the array aVariants. + * + * @param aText + * @param aVariants Pointer to an array containing room for at least + * 'KAknMaxLocVariants' elements. + * + * @ret Number of the localisation variants returned in aVariants. + * The minimum value is 1 and the maximum value is KAknMaxLocVariants. + */ + static TInt GetLocVariants( + const TDesC& aText, TAknLocVariant* aVariants ); + + private: // New functions + + HBufC* DoOperationL( TInt aOp ); + HBufC* DoWrapToArrayL(); + HBufC* DoChopToArrayAndClipL(); + + /* + * Finds last legal position to break the line in given text, + * according to the given line width. + * + * If a legal breaking position is found, iBreakPos is set to it. + * + * @param aText text + * @param aFitsInLine max amount of characters fitting in line + * @param aLineWidth line width in pixels + * @param aReplaceSoftHyphen whether to replace soft hyphen with real hyphen or not, + * if the line is broken after a soft hyphen + * + * @return ETrue if a legal breaking position was found, EFalse otherwise. + */ + TBool GetWrappingPosition( + const TDesC& aText, + TInt aFitsInLine, + TInt aLineWidth, + TBool aReplaceSoftHyphen ); + + /* + * Appends the given line in the result array. + * + * @param aLine line to be appended + */ + void AppendToArrayL( const TDesC& aLine ); + + /* + * Finds the first explicit line break character in given text. + * + * @param aText text + * + * @return offset of first explicit line break character or KErrNotFound + */ + TInt FindLineBreak( const TDesC& aText ); + + /* + * Examines character at position iNextLineStart in descriptor iText + * and if character is recognized as a separator, increases iNextLineStart + * by 1. In case of combination CR+LF, iNextLineStart is increased by 2. + */ + void PassLineBreak(); + + /* + * Inserts ellipsis in given text in the last possible position so that + * the line fits in the given pixel width. If flag EConvertToVisual is set, + * this method returns the position of where ellipsis would be added, but + * does not actually add it. It will be added in logical to visual + * conversion. + * + * @param aText text + * @param aLineWidth line width in pixels + * + * @return If EConvertToVisual flag is set, + * position of where ellipsis should be inserted. + * otherwise, position after the inserted ellipsis. + */ + TInt InsertEllipsis( const TDesC& aText, TInt aLineWidth ); + + HBufC* ConvertToVisualIfRequiredL(); + + TBool ResultFits(); + + private: // Data + + TDes& iSourceString; + const CArrayFix* iLineWidthArray; + const CFont& iFont; + CArrayFix& iResultArray; + TInt iLineWidth; + TInt iFlags; + AknBidiTextUtils::TParagraphDirectionality iDirectionality; + + TAknLineBreaker iBreaker; + const TDesC& iSeparators; + + TPtrC iText; + TInt iBreakPos; + TInt iNextLineStart; + }; + +#endif // AKNTEXTWRAPPER_H + +// End of File