--- /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 <e32base.h>
+#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<TInt>* aLineWidthArray,
+ const CFont& aFont,
+ CArrayFix<TPtrC>& 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<TInt>* iLineWidthArray;
+ const CFont& iFont;
+ CArrayFix<TPtrC>& 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