fmradio/fmradio/inc/fmradioalfmediaidle.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 11 May 2010 16:13:56 +0300
branchRCL_3
changeset 11 97dcae98e602
parent 0 f3d95d9c00ab
permissions -rw-r--r--
Revision: 201016 Kit: 201019

/*
* 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:  Definition of the class CFMRadioAlfMediaIdle.
*
*/


#ifndef FMRADIOALFMEDIAIDLE_H_
#define FMRADIOALFMEDIAIDLE_H_

// INCLUDES

#include <AknUtils.h>
#include <alf/alfcontrol.h>
#include <alf/alfanchorlayout.h>

#include "fmradioidlecontrolinterface.h"

// FORWARD DECLARATIONS

class CAlfGradientBrush;
class CAlfEnv;
class CAlfVisual;

// CONSTANTS

// CLASS DEFINITIONS

/**
* CFMRadioAlfMediaIdle class
* 
* Class launches animated information in the defined subregion of the display. 
*/ 
NONSHARABLE_CLASS(CFMRadioAlfMediaIdle) : public CAlfControl,
                                          public MFMRadioIdleControlInterface
	{
public:		// Constructors and destructor

		/** Display orientations. */
		enum TOrientation
			{
			EPortrait = 0x4A, 
			ELandscape,
			EOrientationNone
			};
			
		/**
	    * Epoc two-phased constructor.
	    * @param aEnv Reference to Alfred environment instance.
        * @return Pointer to this media idle component.
	    */
		static CFMRadioAlfMediaIdle* NewL( CAlfEnv& aEnv );
		/**
        * Destructor
        */
		virtual ~CFMRadioAlfMediaIdle();
public: 	// Functions from base classes		
		/**
 	    * From CAlfControl, takes care of alfred event handling.
 	    */
		TBool OfferEventL( const TAlfEvent& aEvent );	
		
public:		// New functions
		
		/** Media idle modes. */
		enum TMediaIdleMode
			{
			EOnlyBackgroundText = 0xB0, 
			EBackgroundTextAndMediaIdleItems
			};
				
		/**
 	    * Adds media idle item text to be used in the media idle
 	    * @param aMediaIdleItemText Text of the media idle item
 	    */								   
		void AddMediaIdleContentL( const TDesC& aMediaIdleItemText );
		/**
	    * Removes all media idle item texts
		*/			
		void ResetMediaIdleContent();
		/**
	    * Returns number of media idle content items
	    * @return content count
		*/	
		TInt MediaIdleContentCount() const;
		/**
	    * Sets the mode request for mode change. The mode 
	    * will be changed as soon as possible. 
	    * @param aRequestedMode Requested mode
		*/
		void SetModeChangeRequestL( TMediaIdleMode aRequestedMode );
		/**
	    * Retrieves the media idle mode
		*/
		CFMRadioAlfMediaIdle::TMediaIdleMode Mode();
		/**
 	    * Sets primary color for the media idle
 	    * @param aColor The color that is used as primary color of media idle
 	    */
		void SetPrimaryColor( const TRgb& aColor );
		/**
 	    * Sets secondary color for the media idle
 	    * @param aColor The color that is used as secondary color of media idle
 	    */
		void SetSecondaryColor( const TRgb& aColor ); 

		/**
 	    * Return orientation of the display
 	    */
		CFMRadioAlfMediaIdle::TOrientation Orientation();
		/**
 	    * Set orientation of the display
 	    * @param aOrientation The display orientation
 	    */
		void SetOrientation( TOrientation aOrientation );		
		/** 
		* Calculates display layout
	    */			
		void UpdateLayout();
		/** 
		* Adds PS name to the media idle item array
	    */	
        void AddPsNameToMediaIdleL( const TDesC& aPsName );

private:
		/**
		* C++ default constructor
		*/
		CFMRadioAlfMediaIdle( );
		/**
	    * EPOC second phase constructor.
	    * @param aEnv Reference to the Hitchcock environment instance.
	    */
		void ConstructL( CAlfEnv& aEnv );
		
private:	// New functions

		/** Scroll directions for the media idle item. */
		enum TMediaIdleItemScrollDirection
			{	
			EScrollLeftToRight = 0xA0,
			EScrollRightToLeft,
			EScrollNone
			};
			
        /** States of media idle. */
        enum TMediaIdleState
            {
            ERunning = 0xA0,
            EStopped
            };
            
        /** Custom events for the media idle. */
        enum TMediaIdleCustomEvent
            {
            EMediaIdleItemTransformationEnd = 0x5B,
            EMediaIdleBackgroundTextScrollEnd,
            EMediaIdleFadeOutAnimationEnd,
            EMediaIdleChangeMode,
            EMediaIdleEventNone
            };
        
        /**
        * Launches media idle immediately.
        */	
        void StartMediaIdleL();	
		/**
 	    * Creates media idle with passed number of the media idle items
 	    * @param aNumberOfMediaIdleItems Number of the media idle items
 	    */
		void AddMediaIdleL( const TInt aNumberOfMediaIdleItems );
		/**
 	    * Creates the media idle item to the passed media idle view port.
 	    * @param aMediaIdle The view port of the media idle
 	    * @param aMediaIdleItemText Text of the media idle item
 	    * @param aMediaIdleItemHasBackground TBool to indicate background visibility
 	    * @param aBackgroundColor The background color of the media idle item
 	    * @param aBackgroundOpacity The background opacity of the media idle item
 	    */
		CAlfTextVisual* AddMediaIdleItemL( CAlfLayout* aMediaIdle, 
										   const TDesC& aMediaIdleItemText, 
									       TBool aMediaIdleItemHasBackground = EFalse, 
										   const TRgb& aBackgroundColor = KRgbWhite, 
										   const TReal aBackgroundOpacity = 0.5f );
		/**
 	    * Initializes the media idle items
 	    * @param aNumberOfMediaIdleItems Number of the media idle items
 	    */
		void InitializeMediaIdleItemsL( const TInt aNumberOfMediaIdleItems );
		/**
 	    * Sets defined animation to the created media idle items
 	    */
		void AnimateMediaIdleItems();		
		/**
 	    * Retrieves text from randomly chousen media idle item
 	    */	
		HBufC* GetRandomMediaIdleContentL();
		/**
 	    * Sets color, opacity and scaling settings to the media idle item
 	    * @param aMediaIdleItem The media idle item 
 	    * @param aMediaIdleItemText Text of the media idle item
 	    * @param aTextStyleId Text style for text of the media idle item
 	    */		   
		void SetMediaIdleItemSettingsL( CAlfTextVisual* aMediaIdleItem, const TDesC& aMediaIdleItemText, const TInt aTextStyleId );
		/**
 	    * Sets translating animations to the media idle item
 	    * @param aMediaIdleItem The media idle item 
 	    */
		void SetMediaIdleItemAnimation( CAlfTextVisual* aMediaIdleItem );
		/**
	    * Sets the media idle mode
		*/
		void SetMode( TMediaIdleMode aMode );
		/**
	    * Sets image to display
	    * @param aBitmapFileName Full path to image file
	    * @param aAbsoluteRect   Rect of the image
	    * @param aBorders 		 
	    * @param aParentLayout   
	    */
		void SetImageByAbsoluteRectL( const TDesC& aBitmapFileName,
									  const TRect& aAbsoluteRect,
									  TBool aBorders,
									  CAlfLayout* aParentLayout = 0 );		
		/**
	    * Fades in media idle
	    * @param aNow If ETrue shows media idle immediately otherwise
	    * fades with defined fading duration
		*/
		void MediaIdleFadeIn( TBool aNow = EFalse );
		/**
	    * Fades out media idle
	    * @param aNow If ETrue hides media idle immediately otherwise
	    * fades with defined fading duration
		*/
		void MediaIdleFadeOut( TBool aNow = EFalse );
		
		/**
 	    * @param aVisual a pointer to the visual object
 	    * @param aTransitionTime Duration for reaching the target.
 	    * @param aEventAfterScrollingEnd custom even that will be sent when transition time is end
 	    */
		void SetScrollingToBackgroundText( CAlfTextVisual* aVisual,
							    TInt aTransitionTime,
							    TMediaIdleCustomEvent aEventAfterScrollingEnd = EMediaIdleEventNone ) ;		
		/**
	    * Sets fade-in animation to the CAlfVisual.
	    * @param aVisual a pointer to the visual object
	    * @param aFadingTime Time duration after the visual object has been faded in.
	    *                    Fading duration in milliseconds 
	    * @param aOpacity Target opacity value
	    */
		void FadeIn( CAlfVisual* aVisual, TInt aFadingTime, TReal aOpacity = 1.0f ) const;
		/**
	    * Sets fade-out animation to the CAlfVisual.
	    * @param aVisual a pointer to the visual object
	    * @param aFadingTime Time duration after the visual object has been faded out.
	    *                    Fading duration in milliseconds 
	    * @param aOpacity Target opacity value
	    */
		void FadeOut( CAlfVisual* aVisual, TInt aFadingTime, TReal aOpacity = 0.0f ) const;
		/**
 	    * Translates the visual object with passed arguments
 	    * @param aTextVisual a pointer to the visual object 
 	    * @param aX Translation value in the horizontal direction
 	    * @param aY Translation value in the vertical direction
 	    */
		void Translate( CAlfTextVisual* aTextVisual, const TAlfTimedValue& aX, const TAlfTimedValue& aY );		
		/**
 	    * Removes all transformations of the visual object such as the scaling and translating.
 	    * @param aTextVisual a pointer to the visual object 
 	    */
		void LoadTextVisualIdentity( CAlfTextVisual* aTextVisual );
		/**
	    * Sets absolute rect of the anchor by top left and bottom right points.
	    * @param aAnchor Anchor layout for setting placement
	    * @param aOrdinal Index of visual element
	    * @param aTopLeftPosition Top left point of the rect
	    * @param aBottomRightPosition Bottom right point of the rect
	    */
        void SetAbsoluteCornerAnchors( CAlfAnchorLayout* aAnchor,
                                       TInt aOrdinal,
                                       const TPoint& aTopLeftPosition,
                                       const TPoint& aBottomRightPosition );
        /*
         * Transformation end event received
         */
		void HandleMediaIdleItemTransformationEndEventL( const TAlfEvent& aEvent );
        
		/**
		 * Background text scroll end event received
		 */
        void HandleBackgroundTextScrollEndEventL( const TAlfEvent& aEvent );
        
        /**
         ** Create fonts for media idle; based on a list of relative font sizes
         */
        void CreateFontsL();
        
        /**
         * Create a background idle text visual
         */
        void CreateBackgroundTextL();
        /**
         * Stops media idle
         */
        void StopAndFadeOutMediaIdle();
        
        // from MFMRadioIdleControlInterface
        void Show();
        
        /**
        * from MFMRadioIdleControlInterface
        */            
        void Hide();
        
        /**
        * from MFMRadioIdleControlInterface
        */        
        void Deactivate();

private:	// Data 	    
        /** Status flag for knowing should the fonts be recreated or not */
        TOrientation iFontsOrientation;
		/** Display orientation */
	    TOrientation iOrientation;

	    /** Layout for media idle */
	    TAknLayoutRect iMediaIdleLayout; 
	    /** Text style id of the media idle background text */
        TInt iMediaIdleItemBackgroundTextStyleId;
        /** States of media idle */
		TMediaIdleState iMediaIdleState;
		/** Keeps track of the current media idle mode */
		TMediaIdleMode  iMediaIdleMode;
		/** Keeps track of the requested mode */
		TMediaIdleMode  iMediaIdleRequestedMode;
	    /** Counts the items that have finished their transformations for mode change */
		TInt iItemsTransformationEndEventCounter;
		
	    /** Color to be used for the media idle items */
	    TRgb iMediaIdlePrimaryColor;
	    /** Color to be used for the media idle items */
	    TRgb iMediaIdleSecondaryColor;
	    /** Scroll direction for the media idle item */
	    TMediaIdleItemScrollDirection iScrollDirection;
	    	
		/** Array for the strings of the media idle items */
        CDesCArrayFlat* iMediaIdleItemArray;
		/** Array for the text styles of the media idle items */
        RArray<TInt> iTextStyleIdArray;
	    /** Scroll direction for the media idle background text */
	    TMediaIdleItemScrollDirection iBackgroundTextScrollDirection;		 	   
	    /** Indicates whether the instance is fully constructed */  
	    TBool iIsConstructed;
	    /** the latest PS name added to the media idle item array. Owned */
	    HBufC* iPsName;
	    /** The last size for font creation */
	    TInt iFontReferenceHeight;
	};

#endif /*FMRADIOALFMEDIAIDLE_H_*/