--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/uicomponents/inc/fsmarqueeclet.h Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,238 @@
+/*
+* Copyright (c) 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: A controlet class for doing marquee text scrolling.
+*
+*/
+
+
+#ifndef MARQUEECLET_H
+#define MARQUEECLET_H
+
+#include <e32base.h>
+#include <alf/alfeventhandler.h>
+
+// Forward declarations.
+class CAlfViewportLayout;
+class CAlfControl;
+
+/**
+ * A controlet for doing marquee scrolling.
+ *
+ * This class handles the logic and drawing for a
+ * marquee scrolling visual. When you initialise the clet,
+ * you pass in the type and direction of the scrolling. Also,
+ * you need to tell the clet the viewport that you want to scroll.
+ * To start the scrolling action, call StartScrolling.
+ */
+class TFsMarqueeClet: public MAlfEventHandler
+ {
+public:
+ /**
+ * The direction that the visual scrolls from.
+ * ie, EScrollFromLeft means the visual will appear on the left and move off to the right.
+ */
+ enum TScrollDirection
+ {
+ EScrollFromLeft = 0,
+ EScrollFromRight,
+
+ /** No scrolling direction set, do not scroll. */
+ EScrollNothing = -1
+ };
+
+ /**
+ * The animation type of the scrolling.
+ */
+ enum TScrollType
+ {
+ /** Bounce backwards and forwards continuously. */
+ EScrollBounce = 0,
+
+ /** Scroll continuously. Note that the visual contents must be duplicated twice for smooth scrolling effect. */
+ EScrollWrap,
+
+ /** Scroll forth then stop. */
+ EScrollForth
+ };
+
+public:
+
+ /* Constructors. */
+
+ /**
+ * Constructor.
+ *
+ */
+ TFsMarqueeClet(CAlfControl& aControl, CAlfViewportLayout& aViewport, TScrollDirection aDir = TFsMarqueeClet::EScrollFromRight, TScrollType aType = TFsMarqueeClet::EScrollWrap);
+
+ /**
+ * Destructor.
+ */
+ virtual ~TFsMarqueeClet();
+
+ /**
+ * Set the type of marquee.
+ *
+ * @param aType Type of scrolling.
+ */
+ void SetScrollType( const TScrollType aType );
+
+ /**
+ * The number of milliseconds to complete a full scroll cycle.
+ *
+ * The amount of time that the scrolling clet will use to scroll
+ * the entire contents of the visual.
+ * @param aTime The time in milliseconds that a complete scroll cycle will take.
+ */
+ void SetScrollSpeed(TInt aTime);
+
+ /**
+ * Sets the number of marquee's scroll cycles.
+ *
+ * @aRepetition Number of marquee cycles. Negative value - infinite loop.
+ */
+ void SetScrollRepetitions( TInt aRepetitions );
+
+ /**
+ * The function sets time for a pause after each cycle.
+ *
+ * @param aCycleDelay Time in miliseconds for a next cycle start delay.
+ */
+ void SetScrollCycleDelay ( TInt aCycleDelay );
+
+ /**
+ * Change the direction that the text scrolls from.
+ *
+ * Set the direction that the text will scroll from. For example, setting the direction to
+ * EScrollFromRight will mean that the visual will scroll in from the left and leave from the right
+ * edge of the viewport.
+ *
+ * @param aTime The time in milliseconds that a complete scroll cycle will take.
+ * @see TScrollDirection.
+ */
+ void SetScrollDirection(TScrollDirection aDir);
+
+ /**
+ * The area that we want to scroll.
+ *
+ * Sets the scrolling area.
+ * @param aScrollableArea The dimensions in pixels of the area to scroll.
+ */
+ void SetScrollableArea(TSize& aScrollableArea);
+
+ /**
+ * Begin scrolling with the specified speed, direction and type.
+ *
+ * Call this to begin or reset the scrolling behaviour of this marquee.
+ */
+ void StartScrolling();
+
+ /**
+ * Stop scrolling and reset the visual to its zero position.
+ */
+ void StopScrolling();
+
+protected:
+
+ /**
+ * Initiate scrolling once then stop.
+ */
+ void StartScrollingOnce();
+
+ /**
+ * Scroll continously forth. Generates update messages to retrigger itself forever.
+ */
+ void StartScrollingForth();
+
+ /**
+ * Scroll continuously in a loop. Generates update messages to retrigger itself forever.
+ */
+ void StartScrollingLoop();
+
+ /**
+ * Scroll continuously in a bouncing pattern. Generates update messages to retrigger itself forever.
+ */
+ void StartScrollingBounce();
+
+ /**
+ * The function cancels custom commands sent during scrolling process.
+ */
+ void CancelScrollingCommands();
+
+ /**
+ * Handles the events sent through the AlfScheduler. Implementation of
+ * MAlfEventHandler interface. The scheduled events are needed in order
+ * to update the scroll direction/position.
+ *
+ * @param aEvent The event sent to this list visualiser.
+ */
+ TBool OfferEventL(const TAlfEvent& aEvent);
+
+protected:
+
+ /**
+ * Custom events that drive the text wrapping/scrolling repeating.
+ */
+ enum TCustomEvent
+ {
+ ECustomEventScrollingFinished = 200,
+ ECustomEventScrollingPauseFinished,
+ ECustomEventScrollingStartPauseFinished
+ };
+
+ /**
+ * The viewport layout used by this clet for scrolling.
+ */
+ CAlfViewportLayout& iViewport;
+
+ /**
+ * The owning control of this clet.
+ */
+ CAlfControl& iControl;
+
+ /**
+ * Scroll direction of the marquee. (the direction it scrolls FROM).
+ */
+ TScrollDirection iDir;
+
+ /**
+ * Type of scrolling.
+ */
+ TScrollType iType;
+
+ /**
+ * The total area of the contents that we want to scroll. (Usually just the text extents).
+ */
+ TSize iScrollableArea;
+
+ /**
+ * The time for a complete scroll cycle (miliseconds).
+ */
+ TInt iTime;
+
+ /**
+ * Number of marquee cycles.
+ * Negative value - infinite loop.
+ */
+ TInt iRepetitions;
+
+ /**
+ * Cycle delay (miliseconds).
+ */
+ TInt iCycleDelay;
+
+ };
+
+
+#endif // MARQUEECLET_H