idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/inc/xnnewstickercontrol.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/inc/xnnewstickercontrol.h Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,554 @@
+/*
+* Copyright (c) 2002-2006 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: Text scrolling functionality.
+*
+*/
+
+
+#ifndef XNNEWSTICKERCONTROL_H
+#define XNNEWSTICKERCONTROL_H
+
+// INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CXnNewstickerAdapter;
+class CFont;
+
+// CLASS DECLARATION
+
+/**
+* @ingroup group_xnnewstickerfactory
+*
+* Newsticker control for XUIKON text scrolling functionality.
+*
+* @lib xn3newstickerfactory.dll
+* @since Series 60 3.2
+*/
+class CXnNewstickerControl : public CBase
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ * @param aAdapter Parent control
+ * @param aLoops Max number of loops to be executed
+ * @param aScrollAmount The amount of pixels scrolled per iteration
+ * @param aScrollDelay The interval between iterations
+ * @param aStartDelay The delay before the animation starts
+ * @return Pointer to this.
+ */
+ static CXnNewstickerControl* NewL(CXnNewstickerAdapter* aAdapter);
+
+ /**
+ * Sets newsticker scroll amount.
+ * @param aScrollAmount A scroll amount.
+ * @return void
+ */
+ void SetScrollAmount(TInt aScrollAmount);
+
+ /**
+ * Sets the rect of the visible area.
+ * @param aContentRect The visible rect.
+ * @return void
+ */
+ void SetNewstickerRect(TRect& aContentRect);
+
+ /**
+ * Checks whether a western layout is used.
+ * @return Returns true if wesern layout is in use.
+ */
+ TBool IsWestern();
+
+ // Routed from MXnNewstickerInterface.
+
+ /**
+ * Append new title to the end of the title list.
+ * @param aTitle The new title to add.
+ */
+ void AppendTitleL(const TDesC& aTitle);
+
+ /**
+ * Insert new title to the end of the title list.
+ * @param aTitle The new title to add.
+ * @param aIndex The place to add the title.
+ */
+ void InsertTitleL(const TDesC& aTitle, TInt aIndex);
+
+ /**
+ * Update title in the title list.
+ * @param aTitle The new title to add.
+ * @param aIndex The place to add the title.
+ */
+ void UpdateTitleL(const TDesC& aTitle, TInt aIndex);
+
+ /**
+ * Delete the title.
+ * @param aIndex The title index to delete.
+ */
+ void DeleteTitleL(TInt aIndex);
+
+ /**
+ * Returns index of the currently selected title.
+ * @return The index of the current title.
+ */
+ TInt CurrentTitleIndex();
+
+ /**
+ * Return the title of the given index.
+ * @param aIndex The index to return the title.
+ * @return The title of the given index.
+ */
+ const TDesC& Title(TInt aIndex);
+
+ /**
+ * Set the separator image for all titles.
+ * @param aIcon The separator image. This must be mif icon.
+ * @return KErrNone if successful, KErrArgument if the icon is not mif.
+ */
+ TInt SetSeparatorImageL(CGulIcon* aIcon);
+
+ /**
+ * Delete all titles.
+ */
+ void ClearTitles();
+
+ /**
+ * Append the SVG title to be shown.
+ * @param aByteData The SVG data.
+ */
+ void AppendSvgTitleL(const TDesC8& aByteData);
+
+ /**
+ * Insert the SVG title to be shown.
+ * @param aByteData The SVG data.
+ */
+ void InsertSvgTitleL(const TDesC8& aByteData, TInt aIndex);
+
+ /**
+ * Return the current svg title.
+ * @return The current svg title.
+ */
+ const TDesC8& CurrentSvgTitle();
+
+ /**
+ * Return the number of titles in the list.
+ * @return The number of titles in the list.
+ */
+ TInt TitleCount() const;
+
+ /**
+ * Move to the next title.
+ */
+ void MoveToNextL();
+
+ /**
+ * Move to the previous title.
+ */
+ void MoveToPrevL();
+
+ /**
+ * Move to first title
+ */
+ void MoveToFirstL();
+
+ /**
+ * Move to last title
+ */
+ void MoveToLastL();
+
+ /**
+ * Move to the previous title.
+ */
+ void MoveToCurrent();
+
+ /**
+ * Sets font for bitmap graphic context.
+ * @param aFont Font family.
+ */
+ void SetFont(CFont* aFont);
+
+ /**
+ * Sets text color for bitmap graphic context.
+ * @param aColor Color in RGB format.
+ */
+ void SetTextColor(TRgb aColor);
+
+ /**
+ * Sets the underline style for all subsequently drawn text.
+ * @param aStyle Underline style, which can be either on of off.
+ */
+ void SetTextUnderlineStyle(TFontUnderline aStyle);
+
+ /**
+ * Sets the strikethrough style for all subsequently drawn text.
+ * @param aStyle Strikethrough style, which can be either on of off.
+ */
+ void SetTextStrikethroughStyle(TFontStrikethrough aStyle);
+
+ /**
+ * Destructor
+ */
+ virtual ~CXnNewstickerControl();
+
+ /**
+ * Creates background bitmap
+ */
+ void CreateBufferBitmapL();
+
+ /**
+ * Advance text and issue a callback to parent
+ */
+ void DoScrollL();
+
+ /**
+ * Blit visible stuff to d-buffer. Drawing direction is left-to-right.
+ */
+ void PrepareToDrawLtrL();
+
+ /**
+ * Blit visible stuff to d-buffer. Drawing direction is right-to-left.
+ */
+ void PrepareToDrawRtlL();
+
+ /**
+ * Blit double buffer to gc.
+ */
+ void Draw();
+
+ /**
+ * Blit double buffer to gc. Draws only the last title truncated.
+ */
+ void DrawStatic();
+
+ /**
+ * Sets iFirstdrawingOffset as a start position.
+ */
+ void SetBeginningState();
+
+ /**
+ * Return the font
+ * @return font
+ */
+ inline const CFont* Font() { return iFont; };
+
+ /**
+ * Return the text color.
+ * @return Text color.
+ */
+ inline const TRgb TextColor() { return iTextColor; };
+
+ /**
+ * Return font underline flag.
+ * @return Font underline flag.
+ */
+ inline const TFontUnderline TextUnderlineStyle() { return iUnderlining; };
+
+ /**
+ * Return the font strikethrough flag.
+ * @return Font strikethrough flag.
+ */
+ inline const TFontStrikethrough TextStrikethroughStyle() { return iStrikethrough; };
+
+ /**
+ * Set scroll looping property
+ */
+ void SetScrollLooping( TBool aLoop );
+
+ /**
+ * Return scroll looping property
+ * @return TBool
+ */
+ TBool ScrollLooping();
+
+ /**
+ * @return ETrue if all the text fits on the drawing rect. In that case no scrolling and
+ * text alignment should be used
+ */
+ TBool TextFitInNewstickerRect();
+
+ /**
+ * @param aAlignment ( ELayoutAlignCenter, ELayoutAlignLeft or ELayoutAlignRight )
+ * ELayoutAlignLeft default in western, ELayoutAlignRight in AH.
+ */
+ void SetTextAlignment(TInt aAlignment);
+
+ /**
+ * @return ETrue if the current text fits on
+ * the drawing rect (when scrolling behaviour is scroll-alternate)
+ * EFalse otherwise.
+ * If this is ETrue then no scrolling and text alignment should be used
+ */
+ TBool CalculateCurrentTextFitInNewstickerRect();
+
+ private:
+
+ CXnNewstickerControl(CXnNewstickerAdapter* aAdapter);
+
+ void ConstructL();
+
+ /**
+ * Calculate the indexes and offset after new title has been inserted.
+ * @param aIndex The inserted index.
+ */
+ void CountIndexAfterInsertL(TInt aIndex);
+
+ /**
+ * @return ETrue if all the text fits on the drawing rect (when scrolling behaviour is slide)
+ * EFalse otherwise.
+ * If this is ETrue then no scrolling and text alignment should be used
+ */
+ TBool CalculateTextFitInNewstickerRect();
+
+ /**
+ * @return text alignment from properties if text fits to the rect or scroll behaviour is alternate.
+ * otherwise returns default alignment value (left in western, right in AH).
+ */
+ CGraphicsContext::TTextAlign TextAlignment();
+ /**
+ * Get the index of the next title that has content
+ *
+ * @param aStartSearch The index where to start search
+ * @param aBackwards Search backwards
+ *
+ * @return The next index that has content or -1 if nothing was found
+ */
+ TInt GetNextTitleWithContent( TInt aStartSearch, TBool aBackwards = EFalse );
+
+ TBool IsVisibleTitles();
+
+ private: // Data
+
+ /**
+ * Helper class containing the title text and its length in pixels.
+ *
+ * @lib xnnewstickerfactory.dll
+ * @since Series 60 3.2
+ */
+ class CTitleData : public CBase
+ {
+ public:
+
+ /**
+ * Destructor
+ */
+ virtual ~CTitleData();
+
+ /**
+ * Two-phased constructor.
+ * @param aTitle The title text.
+ * @param aLenghtInPixels The lenght of title text in pixels.
+ * @return Pointer to this.
+ */
+ static CTitleData* NewL(const TDesC& aTitle, TInt aLenghtInPixels);
+
+ /**
+ * Two-phased constructor.
+ * @param aTitle The title text.
+ * @param aLenghtInPixels The lenght of title text in pixels.
+ * @return Pointer to this.
+ */
+ static CTitleData* NewLC(const TDesC& aTitle, TInt aLenghtInPixels);
+
+ /**
+ * Two-phased constructor.
+ * @param aByteData The SVG title.
+ * @param aLenghtInPixels The lenght of title text in pixels.
+ * @return Pointer to this.
+ */
+ static CTitleData* NewL(const TDesC8& aByteData);
+
+ /**
+ * Two-phased constructor.
+ * @param aByteData The SVG title.
+ * @param aLenghtInPixels The lenght of title text in pixels.
+ * @return Pointer to this.
+ */
+ static CTitleData* NewLC(const TDesC8& aByteData);
+
+ /**
+ * Return the title text.
+ * @return The title text.
+ */
+ const TDesC& TitleText();
+
+ /**
+ * Set new title text
+ */
+ void SetTitleTextL(const TDesC& aTitle);
+
+ /**
+ * Return the title text lenght in pixels.
+ * @return The title text lenght in pixels.
+ */
+ TInt TitleTextLengthInPixels();
+
+ /**
+ * Return the title text lenght in pixels.
+ * @param aLenghtInPixels The lenght of title text in pixels.
+ */
+ void SetTitleTextLengthInPixels(TInt aLenghtInPixels);
+
+ /**
+ * ETrue if the title is svg, EFalse if it is text.
+ * @return ETrue if the title is svg, EFalse if it is text.
+ */
+ TBool IsSvgTitle();
+
+ /**
+ * Return the svg title data.
+ * @return The svg title data.
+ */
+ const TDesC8& SvgTitleData();
+
+ private:
+
+ CTitleData(TInt aLenghtInPixels = 0);
+
+ void ConstructL(const TDesC& aTitle);
+
+ void ConstructL(const TDesC8& aByteData);
+
+ private: // Data
+
+ /**
+ * ETrue if the title is SVG, EFalse if it is text.
+ */
+ TBool iTitleIsSvg;
+
+ /**
+ * The title text. Owned.
+ */
+ HBufC* iText;
+
+ /**
+ * The svg title. Owned.
+ */
+ HBufC8* iData;
+
+ /**
+ * The title text length in pixels.
+ */
+ TInt iTextLenghtInPixels;
+ };
+
+ /**
+ * List of titles to show.
+ */
+ RPointerArray<CTitleData> iTitles;
+
+ /**
+ * The index of the title which is drawn first.
+ */
+ TInt iFirstDrawingTitleIndex;
+
+ /**
+ * The number of pixels of the first title and separator image which
+ * have already been shown. In other words, the number of the pixels
+ * that are not visible in the screen. The iFirstDrawingTitleIndex
+ * is updated when:
+ * iFirstDrawingOffset > iTextLenghtInPixels + iSeparatorImageWidth
+ */
+ TInt iFirstDrawingOffset;
+
+ /**
+ * The width of the.separator image.
+ */
+ TInt iImageWidthInPixels;
+
+ /**
+ * The index of the title which is selected if user activates the
+ * control.
+ */
+ TInt iCurrentTitleIndex;
+
+ /**
+ * The separator image.
+ * Owned.
+ */
+ CGulIcon* iSeparatorimage;
+
+ /**
+ * The separator image including the gap between image and text.
+ * Owned.
+ */
+ TInt iSeparatorImageWidth;
+
+ /**
+ * Font
+ * Not own.
+ */
+ CFont* iFont;
+
+ /**
+ * Baseline for the text.
+ */
+ TInt iTextBaseline;
+
+ /**
+ * Color for the text
+ */
+ TRgb iTextColor;
+
+ /**
+ * Whether to use underlining for the text
+ */
+ TFontUnderline iUnderlining;
+
+ /**
+ * Whether to use strikethrough for the text
+ */
+ TFontStrikethrough iStrikethrough;
+
+ /**
+ * A rect in which the scrolling text is shown.
+ */
+ TRect iContentRect;
+
+ /**
+ * Amount of pixels the text moves in a tick.
+ */
+ TInt iSpeed;
+
+ /**
+ * Whether the scrolling texts will loop or not.
+ * If false, the scrolling will end at the last index.
+ */
+ TBool iScrollLooping;
+
+ /**
+ * Whether the text direction is LTR or RTL.
+ */
+ TBool iIsWestern;
+
+ /**
+ * Parent control adapter
+ * Not own.
+ */
+ CXnNewstickerAdapter* iAdapter;
+
+ /**
+ * ETrue if there is only one title, it fits in the rect and
+ * scroll behaviour is slide
+ */
+ TBool iTextFitInNewstickerRect;
+ /**
+ * Text alignment from the properties
+ */
+ TInt iTextAlignment;
+ };
+
+#endif // XNNEWSTICKERCONTROL_H
+
+// End of File