--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/inc/AknTitlePaneLabel.h Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,496 @@
+/*
+* Copyright (c) 2005-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: Title pane's label.
+*
+*/
+
+
+#ifndef C_AKNTITLEPANELABEL_H
+#define C_AKNTITLEPANELABEL_H
+
+// INCLUDES
+#include <eiklabel.h>
+#include <AknUtils.h>
+
+// FORWARD DECLARATIONS
+class TAknLayoutText;
+
+// CLASS DECLARATION
+
+/**
+ * This class is the text label which is used in title pane to display
+ * texts.
+ *
+ * @lib avkon.lib
+ */
+NONSHARABLE_CLASS( CAknTitlePaneLabel ) : public CEikLabel,
+ public MCoeForegroundObserver
+ {
+public:
+
+ /**
+ * Supported effects:
+ *
+ * EEffectNone: No effect is applied, drawing is done as in CEikLabel::Draw()
+ *
+ * EEffectFadeToLeft: Text is faded to left using alpha blending.
+ *
+ * EEffectFadeToRight: Text is faded to right using alpha blending.
+ *
+ * EEffectDefaultScroll: Default scrolling effect. Text is scrolled in the
+ * text window and when end or beginning of the text
+ * is visible the scrolling direction is reversed.
+ *
+ * EEffectDefaultScrollWithFade: Same as EEffectDefaultScroll but text is
+ * faded from the scrolling area start and end.
+ *
+ * EEffectLoopScroll: Loop scrolling effect. Text is scrolled in the
+ * text window and when whole text has been scrolled
+ * it starts again from the other side.
+ *
+ * EEffectLoopScrollWithFade: Same as EEffectLoopScroll but text is faded
+ * from the scrolling area start and end.
+ *
+ * EEffectFadeOut: Text is transformed gradually from opaque to transparent.
+ *
+ * EEffectFadeIn: Text is transformed gradually from transparent to opaque.
+ *
+ * EEffectScrollOnceWithFade: Text is scrolled once and during scrolling
+ * text is faded a bit from both ends.
+ *
+ * EEffectPause: Does nothing but waits.
+ *
+ * EEffectToggleScrolledTextTruncation: Toggles wheter text is drawn
+ * as truncated or not.
+ *
+ */
+ enum TAknTitlePaneLabelEffect
+ {
+ EEffectNone = 0,
+ EEffectFadeToLeft,
+ EEffectFadeToRight,
+ EEffectDefaultScroll,
+ EEffectDefaultScrollWithFade,
+ EEffectLoopScroll,
+ EEffectLoopScrollWithFade,
+ EEffectFadeOut,
+ EEffectFadeIn,
+ EEffectScrollOnceWithFade,
+ EEffectPause,
+ EEffectToggleScrolledTextTruncation
+ };
+
+ /**
+ * Struct for holding effect related data.
+ */
+ struct SAknTitleLableEffect
+ {
+ SAknTitleLableEffect() : iEffect( 0 ),
+ iEffectDuration( 0 ),
+ iEffectRect( 0, 0, 0, 0 ),
+ iLabelRect( 0, 0, 0, 0 ),
+ iTitleText( NULL ),
+ iObserver( NULL )
+ {};
+
+ TInt iEffect;
+ TInt iEffectDuration;
+ TRect iEffectRect;
+ TRect iLabelRect;
+ TAknLayoutText iTextLayout;
+ TAknTextLineLayout iTextLayoutLine;
+ HBufC* iTitleText; // not owned
+ CCoeControl* iObserver; // not owned
+ };
+
+
+ /**
+ * Constructor
+ */
+ CAknTitlePaneLabel();
+
+ /**
+ * Destructor
+ */
+ ~CAknTitlePaneLabel();
+
+ /**
+ * Sets given effect active.
+ *
+ * @param aEffect The effect to be activated
+ * (@see TAknTitlePaneLabelEffect).
+ * @param aEffectRect The rect where effect is to be activated.
+ * @param aEffectDuration Duration of the effect.
+ * @param aTextLayout TextLayout for title text.
+ * @param aTextLayoutLine LayoutLine for title text.
+ * @param aTitleText The text.
+ */
+ void SetTextEffect( TInt aEffect,
+ TRect aEffectRect,
+ TInt aEffectDuration,
+ TRect aLabelRect,
+ TAknLayoutText aTextLayout,
+ TAknTextLineLayout aTextLayoutLine,
+ HBufC* aTitleText,
+ CCoeControl* aObserver = NULL );
+
+ /**
+ * Returns currently active text effect id.
+ * @return Currently active text effect id.
+ */
+ TInt TextEffect();
+
+ /**
+ * Returns title text as bitmap if available. Otherwise NULL.
+ * @return Title text drawn to a bitmap.
+ * Ownership of bitmap is not transferred.
+ */
+ CFbsBitmap* TextAsBitmap();
+
+ /**
+ * Returns title text as mask bitmap if available. Otherwise NULL.
+ * @return Title text drawn to a bitmap.
+ * Ownership of bitmap is not transferred.
+ */
+ CFbsBitmap* TextAsMask();
+
+ /**
+ * Returns currently active text length in pixels.
+ * @return Text lenght in pixels
+ */
+ TInt TextLength();
+
+ /**
+ * Initializes and clears effect queue.
+ */
+ void InitEffectQueueL();
+
+ /**
+ * Adds given effect to queue.
+ *
+ * @param aEffect The effect to be added.
+ */
+ void AddToEffectQueueL( SAknTitleLableEffect aEffect );
+
+ /**
+ * Activates effect queue. All effects from queue are executed.
+ */
+ void ActivateEffectQueue();
+
+protected: // from @c CEikLabel
+
+ /**
+ * Actually draws the text to screen.
+ */
+ void Draw( const TRect& aRect ) const;
+
+ /**
+ * Handles a change to the control's resources of type aType
+ * which are shared across the environment, e.g. color scheme change.
+ *
+ * @param aType Event type.
+ */
+ void HandleResourceChange( TInt aType );
+
+public:
+
+ /**
+ * Enables Japanese pictograph support.
+ *
+ * @param aInterface Interface to be used in drawing the pictographs,
+ * ownership is not transferred.
+ */
+ void SetPictographInterface( CAknPictographInterface& aInterface );
+
+ /**
+ * Marks given text as invalid. It is no more used for drawing text.
+ */
+ void InvalidateText();
+
+ /**
+ * Tells whether effect queue is empty.
+ *
+ * @return @c ETrue if queue is empty, @c EFalse otherwise.
+ */
+ TBool EffectQueueIsEmpty();
+
+ /**
+ * Replaces control characters in the title text
+ * with a space (0x20) character.
+ *
+ * @param[in,out] aText Text which control characters are
+ * to be replaced.
+ *
+ * @param aReplaceLinefeeds Determine if linefeeds (0x0A) and and paragraph
+ * separatoirs (0x2029) are also converted just
+ * like other control characters.
+ *
+ */
+ void ReplaceControlCharacters( HBufC* aText, TBool aReplaceLinefeeds );
+
+private: // from @c MCoeForegroundObserver
+
+ /**
+ * Activates timer if needed.
+ */
+ void HandleGainingForeground();
+
+ /**
+ * Cancels timer if active.
+ */
+ void HandleLosingForeground();
+
+private:
+
+ /**
+ * Initializes effect, creates needed bitmap contextes etc.
+ */
+ void InitEffectL();
+
+ /**
+ * Initializes timer for e.g. scrolling effect
+ *
+ * @param aDelay Initial delay before the first timer event
+ * in microseconds.
+ * @param aInterval Interval between the consequent events
+ * in microseconds.
+ */
+ void InitTimerL( TInt aDelay, TInt aInterval );
+
+ /**
+ * Cancels timer for e.g. scrolling effect
+ */
+ void CancelTimer();
+
+ /**
+ * Clears and initalizes bitmaps that are used for drawing the text.
+ */
+ void InitBitmaps() const;
+
+ /**
+ * Draws the text without the truncation character (@c KEllipsis).
+ * This is used with long texts that are scrolled, so that the
+ * text is not truncated before the scrolling starts, but is
+ * afterwards.
+ * This function calls @c CEikLabel::Draw().
+ *
+ * @param aRect Passed to @c CEikLabel::Draw().
+ */
+ void DrawWithoutTruncationL( const TRect& aRect );
+
+ /**
+ * Main function for drawing with effects. This method selects the proper
+ * subroutine based on active effect. This function is intended to be used
+ * instead of @c CEikLabel::Draw() functionality.
+ *
+ * If no effect is currently specified, this will call @c CEikLabel::Draw().
+ *
+ * @param aRect Passed to @c CEikLabel::Draw() if no effect is
+ * active.
+ */
+ void DrawWithEffect( const TRect& aRect ) const;
+
+ /**
+ * Draws the text into bitmap context using selected effect.
+ */
+ void DrawTextWithEffect() const;
+
+ /**
+ * Draws the text into bitmap context using fade effect. Text is
+ * faded by using alphablending.
+ */
+ void DrawTextWithFadeEffect() const;
+
+ /**
+ * Draws the text into bitmap context using scroll effect. Text is
+ * scrolled one pixels every time timer expires.
+ */
+ void DrawTextWithScrollEffect() const;
+
+ /**
+ * Draws the text into bitmap context using scroll effect. Text is
+ * scrolled one pixels every time timer expires. Additionally text is
+ * faded from both sides to give scrolling a smoother look.
+ */
+ void DrawTextWithScrollAndFadeEffect() const;
+
+ /**
+ * Static funtion which is called when timer expires.
+ */
+ static TInt EffectEvent( TAny* aPtr );
+
+ /**
+ * Funtion which is called when timer expires.
+ */
+ void DoEffectEvent();
+
+ /**
+ * Funtions which manipulate text when timer event happens.
+ */
+ TBool DoDefaultScrollEffectEvent();
+ TBool DoLoopScrollEffectEvent();
+ TBool DoScrollOnceEffectEvent();
+ TBool DoFadeInEffectEvent();
+ TBool DoFadeOutEffectEvent();
+ TBool DoPauseEffectEvent();
+ TBool DoToggleScrolledTextTruncationEffectEvent();
+
+ /**
+ * Test wheter text fits to screen at once.
+ *
+ * @return @c ETrue if truncation is needed,
+ * @c EFalse otherwise.
+ */
+ TBool TextNeedsTruncation() const;
+
+ /**
+ * Test wheter selected effect requires timed events.
+ *
+ * @param aEffect Effect to be checked
+ * (@see TAknTitlePaneLabelEffect).
+ *
+ * @return @c ETrue if timed events are needed,
+ * @c EFalse otherwise.
+ */
+ TBool EffectEventsNeeded( TInt aEffect ) const;
+
+ /**
+ * Test wheter selected effect requires bitmap devices.
+ *
+ * @param aEffect Effect to be checked
+ * (@see TAknTitlePaneLabelEffect).
+ *
+ * @return @c ETrue if bitmap devices are needed,
+ * @c EFalse otherwise.
+ */
+ TBool EffectBitmapsNeeded( TInt aEffect ) const;
+
+ /**
+ * Calculates suitable step for scrolling text.
+ *
+ * @return Step size in pixels
+ */
+ TInt ScrollStepInPixels() const;
+
+ /**
+ * Sets next effect from queue active.
+ */
+ void NextEffect();
+
+ /**
+ * Creates scrolling text from given text.
+ *
+ * @param[in] aOriginalText The text from which the scrolling text
+ * will be created from
+ */
+ void CreateScrollingTextL( const HBufC* aOriginalText );
+
+
+private: // Member variables
+
+ /** Currently active effect */
+ TInt iEffect;
+
+ /** Previously active effect */
+ TInt iPreviousEffect;
+
+ /** Area where currently active effect is applied */
+ TRect iEffectRect;
+
+ /** Area where scrolling is applied */
+ TRect iScrollRect;
+
+ /** Size of this control when effect was last time set active */
+ TSize iEffectLabelSize;
+
+ /** Timer for effects that require changes often (scroll) */
+ CPeriodic* iEffectTimer;
+
+ /** Duration of the effects */
+ TInt iEffectDuration;
+
+ /** Current position of scrolling text */
+ TInt iScrollPosition;
+
+ /** Interval for scrolling text updates */
+ TInt iScrollInterval;
+
+ /** Amount of pixels scrolling text is shifed each time that timer expires */
+ TInt iScrollStep;
+
+ /** Determines the scrolling direction of the text */
+ TBool iScrollDirectionBackwards;
+
+ /** Alpha value for fade out text */
+ TInt iFadeInOutValue;
+
+ /** Alpha value for fade in text */
+ TInt iFadeInOutStep;
+
+ /** Phase where operator name effect is at the moment */
+ TInt iOperatorNamePhase;
+
+ /** Title text, not owned */
+ HBufC* iTitleText;
+
+ /** Scrolled text without truncations but always in visual order, owned */
+ HBufC* iScrollingText;
+
+ /** Title text layout */
+ TAknLayoutText iTextLayout;
+
+ /** Title text layoutline */
+ TAknTextLineLayout iTextLayoutLine;
+
+ /** Calculated length of the text in pixels */
+ TInt iTextLength;
+
+ /** Bitmap where text with effect is draw into */
+ CFbsBitmap* iBitmap;
+
+ /** Bitmap device where text with effect is draw into */
+ CFbsBitmapDevice* iBitmapDevice;
+
+ /** Bitmap context where text with effect is draw into */
+ CFbsBitGc* iBitmapGc;
+
+ /** Mask where texts mask with effect is draw into */
+ CFbsBitmap* iMask;
+
+ /** Mask device where texts mask with effect is draw into */
+ CFbsBitmapDevice* iMaskDevice;
+
+ /** Mask context where texts mask with effect is draw into */
+ CFbsBitGc* iMaskGc;
+
+ /**
+ * Not owned. Observer, whose DrawNow() -method gets called if effect
+ * has changed text outlook.
+ */
+ CCoeControl* iObserver;
+
+ /** Queue which can store multiple effects. */
+ CArrayFixFlat<SAknTitleLableEffect>* iEffectQueue;
+
+ /** Number of the next effect to be executed from effect queue */
+ TInt iNextEffectInEffectQueue;
+
+ /** The pictograph interface used to draw Japanese pictographs, not owned */
+ CAknPictographInterface* iPictographInterface;
+
+ /** Whether or not the current language is LTR (ETrue) or RTL (EFalse) */
+ TBool iWesternText;
+ };
+
+#endif // C_AKNTITLEPANELABEL_H