uiacceltk/hitchcock/tsrc/alfperfapp/src/alfperfappsuiteepgcontrol.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/tsrc/alfperfapp/src/alfperfappsuiteepgcontrol.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,488 @@
+/*
+* Copyright (c) 2008 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:  
+*
+*/
+
+
+// INCLUDES
+#include <alf/alfenv.h>
+
+#include <alf/AlfGridLayout.h>
+#include <alf/AlfViewportLayout.h>
+
+#include <alf/alftextvisual.h>
+#include <alf/alfimagevisual.h>
+
+#include <alf/AlfTextStyleManager.h>
+#include <alf/AlfTextStyle.h>
+
+#include "AlfPerfAppSuiteEPGControl.h"
+#include "AlfPerfAppSuiteHelper.h"
+#include "AlfPerfAppSuiteTestCaseScroll.h"
+
+// ============================= MEMBER FUNCTIONS ==============================
+
+TInt DurationInMinutes( TTime aStart, TTime aEnd )
+	{
+	TTimeIntervalMinutes duration;
+	aEnd.MinutesFrom( aStart, duration );
+	return duration.Int();
+	}
+
+TProgram::TProgram()
+	{
+	iName.Zero();
+	}
+
+TProgram::TProgram( const TDesC& aName, const TDesC& aStart, const TDesC& aEnd )
+	:iName( aName ),
+	iStart( aStart ),
+	iEnd( aEnd )
+	{
+	}
+
+TInt TProgram::DurationInMinutes()
+	{
+	return ::DurationInMinutes( iStart, iEnd ); 
+	}
+
+CAlfPerfAppSuiteEPGControl::CAlfPerfAppSuiteEPGControl(CAlfPerfAppSuiteTestCaseScroll* aScrollControl)
+    : iScrollControl(aScrollControl)
+	{
+	
+	}
+		
+CAlfPerfAppSuiteEPGControl::~CAlfPerfAppSuiteEPGControl()
+	{
+#ifdef ENABLE_TEXTSTYLES
+	CAlfTextStyleManager& styleManager = Env().TextStyleManager();
+	for( TInt i=0; i<iTextStyles.Count(); i++ )
+		{
+		styleManager.DeleteTextStyle( iTextStyles[i] );
+		}
+	iTextStyles.Close();
+#endif	
+	}
+		
+void CAlfPerfAppSuiteEPGControl::ConstructL( 
+	        CAlfEnv& aEnv, 
+	        const TSize& aVisibleArea,
+	        CAlfLayout* aParentLayout )
+	{
+	iLoadedImages = 0;
+	iVisibleArea = aVisibleArea;
+	CAlfControl::ConstructL( aEnv );
+	
+#ifdef ENABLE_TEXTSTYLES
+	CreateTextStylesL();
+#endif	
+	
+	// Construct a base layout to add a background
+	CAlfLayout* baseLayout = CAlfLayout::AddNewL( *this, aParentLayout );
+  	TAlfPerfAppSuiteHelper::AddGradientBrushL( baseLayout, KRgbBlue, KRgbWhite );
+  	TAlfPerfAppSuiteHelper::AddDropShadowBrushL( baseLayout, KRgbWhite, 1 );	
+	
+	// Create grid layout
+	CAlfGridLayout* gridLayout = 
+		CAlfGridLayout::AddNewL( *this, 1, 1, baseLayout );
+	gridLayout->SetPadding( 10 );
+	
+	// Get texture manager
+	CAlfTextureManager& textureManager = Env().TextureManager();
+	
+    // Add heading row
+	CAlfTextVisual* headingTextVisual =	CAlfTextVisual::AddNewL( *this, gridLayout );
+	headingTextVisual->SetTextL( _L("Tuubi EPG") );
+#ifdef ENABLE_TEXTSTYLES
+	headingTextVisual->SetTextStyle( iTextStyles[ETextStyleTitle] );
+	headingTextVisual->SetColor( KRgbWhite );
+#endif
+	RArray<TInt> rowHeights;
+	rowHeights.Append( 50 );
+	
+	// Define time window to show
+	TTime start( _L("181500.") );
+	TTime end( _L("201500.") );
+		
+	// HEADER
+	RArray<TProgram> programs;
+	// NOTE: Programs must start and end at the same time for them to be correctly
+	//       aligned on screen. Our total time window here is 24*60 min.
+	programs.Append( TProgram( _L("---"),   _L("000000."), _L("174500.") ) );	
+	programs.Append( TProgram( _L("18:00"), _L("174500."), _L("181500.") ) );
+	programs.Append( TProgram( _L("18:30"), _L("181500."), _L("184500.") ) );
+	programs.Append( TProgram( _L("19:00"),	_L("184500."), _L("191500.") ) );
+	programs.Append( TProgram( _L("19:30"),	_L("191500."), _L("194500.") ) );
+	programs.Append( TProgram( _L("20:00"),	_L("194500."), _L("201500.") ) );
+	programs.Append( TProgram( _L("20:30"),	_L("201500."), _L("204500.") ) );
+	programs.Append( TProgram( _L("21:00"),	_L("204500."), _L("211500.") ) );
+	programs.Append( TProgram( _L("---"),   _L("211500."), _L("235959.") ) );
+	TAlfImage empty;
+	TInt textStyle = 0;
+#ifdef ENABLE_TEXTSTYLES
+	textStyle = iTextStyles[ETextStyleTime];
+#endif
+	AddRowL( gridLayout, empty, programs, start, end, textStyle, EFalse );
+    programs.Reset();
+    rowHeights.Append( 50 );	
+
+
+    aEnv.TextureManager().AddLoadObserverL( this );
+    
+    _LIT( KImage1, "mtv3.png" );
+    _LIT( KImage2, "nelonen.png" );
+    _LIT( KImage3, "jim.png" );
+    _LIT( KImage4, "mtv3_scifi.png" );
+    _LIT( KImage5, "discoveryhd.png" );
+    _LIT( KImage6, "nationalgeographic.jpg" );
+    
+	// MTV3
+    TAlfImage mtv3Image( 
+    		textureManager.LoadTextureL(
+    		        KImage1,
+    				EAlfTextureFlagRetainResolution,
+    				KAlfAutoGeneratedTextureId ) );
+    
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("000000."), _L("180000.") ) );	
+	programs.Append( TProgram( _L("Emmerdale"),
+			_L("180000."), _L("183000.") ) );
+	programs.Append( TProgram( _L("T.i.l.a."),
+			_L("183000."), _L("190000.") ) );
+	programs.Append( TProgram( _L("Seitsemän Uutiset"),
+			_L("190000."), _L("191500.") ) );
+	programs.Append( TProgram( _L("Kauppalehden talousuutiset"),
+			_L("191500."), _L("192500.") ) );
+	programs.Append( TProgram( _L("Päivän sää"),
+			_L("192500."), _L("193000.") ) );
+	programs.Append( TProgram( _L("Salatut elämät"),
+			_L("193000."), _L("200000.") ) );
+	programs.Append( TProgram( _L("45min Special: Kuninkaalliset kulissien takana"),
+			_L("200000."), _L("210000.") ) );
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("210000."), _L("235959.") ) );
+#ifdef ENABLE_TEXTSTYLES
+	textStyle = iTextStyles[ETextStyleProgram];
+#endif	
+	AddRowL( gridLayout, mtv3Image, programs, start, end, textStyle );
+    programs.Reset();
+    rowHeights.Append( 100 );
+    
+    // NELONEN
+    TAlfImage nelonenImage( 
+    		textureManager.LoadTextureL(
+    		        KImage2,
+    				EAlfTextureFlagRetainResolution,
+    				KAlfAutoGeneratedTextureId ) );
+    
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("000000."), _L("180000.") ) );	
+	programs.Append( TProgram( _L("Leijonamies"),
+			_L("180000."), _L("183000.") ) );
+	programs.Append( TProgram( _L("Tanssi, jos osaat!"),
+			_L("183000."), _L("193000.") ) );
+	programs.Append( TProgram( _L("Nelosen uutiset"),
+			_L("193000."), _L("194500.") ) );
+	programs.Append( TProgram( _L("Nelosen sää"),
+			_L("194500."), _L("195000.") ) );
+	programs.Append( TProgram( _L("IS Urheilu-uutiset"),
+			_L("195000."), _L("195500.") ) );
+	programs.Append( TProgram( _L("B-Studio"),
+			_L("195500."), _L("200000.") ) );
+	programs.Append( TProgram( _L("Unelmien poikamies - upseeri ja herrasmies"),
+			_L("200000."), _L("210000.") ) );
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("210000."), _L("235959.") ) );		
+#ifdef ENABLE_TEXTSTYLES
+	textStyle = iTextStyles[ETextStyleProgram];
+#endif	
+	AddRowL( gridLayout, nelonenImage, programs, start, end, textStyle );
+    programs.Reset();
+    rowHeights.Append( 100 );   
+    
+    // JIM
+    TAlfImage jimImage( 
+    		textureManager.LoadTextureL(
+    		        KImage3,
+    				EAlfTextureFlagRetainResolution,
+    				KAlfAutoGeneratedTextureId ) );    
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("000000."), _L("180000.") ) );
+	programs.Append( TProgram( _L("Hyvää ruokahalua"),
+			_L("180000."), _L("183000.") ) );	
+	programs.Append( TProgram( _L("Kiinteistökauppaa maailmalla"),
+			_L("183000."), _L("190000.") ) );
+	programs.Append( TProgram( _L("Autoklassikot"),
+			_L("190000."), _L("193000.") ) );
+	programs.Append( TProgram( _L("Huvila & Huussi Extra"),
+			_L("193000."), _L("200000.") ) );
+	programs.Append( TProgram( _L("Fifth Gear"),
+			_L("200000."), _L("203000.") ) );
+	programs.Append( TProgram( _L("Fifth Gear"),
+			_L("203000."), _L("210000.") ) );
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("210000."), _L("235959.") ) );		
+#ifdef ENABLE_TEXTSTYLES
+	textStyle = iTextStyles[ETextStyleProgram];
+#endif	
+	AddRowL( gridLayout, jimImage, programs, start, end, textStyle );
+    programs.Reset();
+    rowHeights.Append( 100 );
+    
+    // MTV3 scifi
+    TAlfImage mtv3scifiImage( 
+    		textureManager.LoadTextureL(
+    		        KImage4,
+    				EAlfTextureFlagRetainResolution,
+    				KAlfAutoGeneratedTextureId ) );       
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("000000."), _L("180500.") ) );    
+	programs.Append( TProgram( _L("Doctor Who"),
+			_L("180500."), _L("183000.") ) );	
+	programs.Append( TProgram( _L("Doctor Who"),
+			_L("183000."), _L("185500.") ) );
+	programs.Append( TProgram( _L("Andromeda"),
+			_L("185500."), _L("194000.") ) );
+	programs.Append( TProgram( _L("Babylon 5"),
+			_L("194000.."), _L("202500.") ) );
+	programs.Append( TProgram( _L("Star Trek: Deep Space Nine"),
+			_L("202500."), _L("211000.") ) );
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("211000."), _L("235959.") ) );		
+#ifdef ENABLE_TEXTSTYLES
+	textStyle = iTextStyles[ETextStyleProgram];
+#endif	
+	AddRowL( gridLayout, mtv3scifiImage, programs, start, end, textStyle );
+    programs.Reset();
+    rowHeights.Append( 100 );  
+    
+    // DISCOVERY HD
+    TAlfImage discoveryChannelImage( 
+    		textureManager.LoadTextureL(
+    		        KImage5,
+    				EAlfTextureFlagRetainResolution,
+    				KAlfAutoGeneratedTextureId ) );       
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("000000."), _L("180000.") ) );    
+	programs.Append( TProgram( _L("Tuunaajat"),
+			_L("180000."), _L("190000.") ) );	
+	programs.Append( TProgram( _L("Valmistuksen salat"),
+			_L("190000."), _L("193000.") ) );
+	programs.Append( TProgram( _L("Valmistuksen salat"),
+			_L("193000."), _L("200000.") ) );
+	programs.Append( TProgram( _L("Myytinmurtajat"),
+			_L("200000.."), _L("210000.") ) );
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("210000."), _L("235959.") ) );		
+#ifdef ENABLE_TEXTSTYLES
+	textStyle = iTextStyles[ETextStyleProgram];
+#endif	
+	AddRowL( gridLayout, discoveryChannelImage, programs, start, end, textStyle );
+    programs.Reset();
+    rowHeights.Append( 100 );  
+    
+    // NATIONAL GEOGRAPHIC
+    TAlfImage nationalgeographicImage( 
+    		textureManager.LoadTextureL(
+    		        KImage6,
+    				EAlfTextureFlagRetainResolution,
+    				KAlfAutoGeneratedTextureId ) );       
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("000000."), _L("180000.") ) );    
+	programs.Append( TProgram( _L("Nat Geo Junior: the Snake Wranglers: Snake Saviour"),
+			_L("180000."), _L("183000.") ) );	
+	programs.Append( TProgram( _L("Nat Geo Junior: Get Outta Town: Washington Dc"),
+			_L("183000."), _L("190000.") ) );
+	programs.Append( TProgram( _L("Premiere: Ape Genius"),
+			_L("190000."), _L("200000.") ) );
+	programs.Append( TProgram( _L("Great Wall of China: Protecting the Dragon"),
+			_L("200000.."), _L("210000.") ) );
+	programs.Append( TProgram( _L("TV-chät"),
+			_L("210000."), _L("235959.") ) );		
+#ifdef ENABLE_TEXTSTYLES
+	textStyle = iTextStyles[ETextStyleProgram];
+#endif	
+	AddRowL( gridLayout, nationalgeographicImage, programs, start, end, textStyle );
+    programs.Reset();
+    rowHeights.Append( 100 );      
+    
+    // Apply rows
+    gridLayout->SetRows( rowHeights.Count() );
+    gridLayout->SetRowsL( rowHeights );        
+        
+    // Set grid size
+    gridLayout->SetFlag( EAlfVisualFlagManualSize );
+  	TAlfRealSize size;
+  	size.iWidth = iVisibleArea.iWidth;
+  	for( TInt i=0; i<rowHeights.Count(); i++ )
+  		{
+  		size.iHeight += rowHeights[i];
+  		}
+  	gridLayout->SetSize( size, 0 );
+
+  	// Cleanup
+  	rowHeights.Close(); 
+  	programs.Close();
+	}
+
+const TInt KNumberOfImages = 6;
+// -----------------------------------------------------------------------------
+// Notify observers that all images have been loaded.
+// -----------------------------------------------------------------------------
+//
+void CAlfPerfAppSuiteEPGControl::TextureLoadingCompleted(
+        CAlfTexture& /*aTexture*/, TInt /*aTextureId*/, TInt aErrorCode)
+    {
+    // inform if there is any error
+    if( aErrorCode != KErrNone )
+        {
+        iScrollControl->ImagesLoaded( aErrorCode );
+        }
+    
+    iLoadedImages++;
+    if (iLoadedImages == KNumberOfImages)
+        {
+        iScrollControl->ImagesLoaded( KErrNone );
+        }
+    }
+
+#ifdef ENABLE_TEXTSTYLES
+void CAlfPerfAppSuiteEPGControl::CreateTextStylesL()
+	{
+	CAlfTextStyleManager& styleManager = Env().TextStyleManager();
+
+    // Create text styles
+    for( TInt i=0; i<ENumberOfTextStyles; i++ )
+    	{
+    	iTextStyles.Append( styleManager.CreatePlatformTextStyleL() );
+    	}
+
+    // NOTE: This will leak memory
+    // styles are destroyed in TextStyleManager destructor but this is not enough...
+
+    CAlfTextStyle* style = NULL;
+    style = styleManager.TextStyle( iTextStyles[ETextStyleTitle] );
+    style->SetTextSizeInTwips( 120 );
+
+    style = styleManager.TextStyle( iTextStyles[ETextStyleTime] );
+    style->SetTextSizeInTwips( 100 );
+    
+    style = styleManager.TextStyle( iTextStyles[ETextStyleProgram] );
+    style->SetTextSizeInTwips( 80 );    
+	}
+#endif
+
+
+void CAlfPerfAppSuiteEPGControl::AddRowL( 
+		CAlfLayout* aParentLayout,
+		TAlfImage& aChannelImage,
+		RArray<TProgram>& aPrograms,
+		const TTime& aTimeWindowStart,
+		const TTime& aTimeWindowEnd,
+		TInt aTextStyle,
+		TBool aSetBorders
+		)
+	{
+	// Create grid layout
+	CAlfGridLayout* gridLayout = 
+		CAlfGridLayout::AddNewL( *this, 1, 1, aParentLayout );
+	
+	// Set borders
+	if( aSetBorders )
+		{
+		TAlfPerfAppSuiteHelper::AddBorderBrushL( gridLayout, KRgbWhite );
+		}	
+
+    // Add channel image
+    CAlfImageVisual* imageVisual = CAlfImageVisual::AddNewL( *this, gridLayout );
+    imageVisual->SetImage( aChannelImage );
+    imageVisual->SetScaleMode( CAlfImageVisual::EScaleFitInside );   
+    imageVisual->SetPadding( 2 );
+    RArray<TInt> columnWeights;
+    columnWeights.Append( 1 );
+
+    // Add programs
+    AddProgramsL( gridLayout, aPrograms, aTimeWindowStart, aTimeWindowEnd, aTextStyle, aSetBorders );
+    columnWeights.Append( 9 );
+        
+    // Apply columns
+	gridLayout->SetColumns( columnWeights.Count() );
+	gridLayout->SetColumnsL( columnWeights );        
+	    
+	// Cleanup
+	columnWeights.Close();        
+	}
+
+void CAlfPerfAppSuiteEPGControl::AddProgramsL( 
+		CAlfLayout* aParentLayout,
+		RArray<TProgram>& aPrograms,
+		const TTime& aTimeWindowStart,
+		const TTime& aTimeWindowEnd,
+		TInt aTextStyle,
+		TBool aSetBorders
+		)
+	{
+	
+	// Use viewport layout as a base layout
+	CAlfViewportLayout* viewPortLayout 
+		= CAlfViewportLayout::AddNewL( *this, aParentLayout );
+	
+	// Set borders
+	if( aSetBorders )
+		{
+		TAlfPerfAppSuiteHelper::AddBorderBrushL( viewPortLayout, KRgbWhite );
+		}
+	
+	// Virtual size is 1,1 which represents a 24*60 minute time window.
+	viewPortLayout->SetVirtualSize( TAlfRealSize(1.0f,1.0f), 0 );
+	
+	// Calculate how much is visible by the time window.
+	TReal32 displayWindowSize = DurationInMinutes( aTimeWindowStart, aTimeWindowEnd );
+	TReal32 maxWindowSize = 24*60;
+	TReal32 relelativeWindowSize = displayWindowSize / maxWindowSize;
+	viewPortLayout->SetViewportSize( TAlfRealSize( relelativeWindowSize, 1.0f ), 0 );
+	
+	// Calculate the offset from beginning.
+	TReal32 displayWindowOffset = DurationInMinutes( aPrograms[0].iStart, aTimeWindowStart );
+	TReal32 pos = displayWindowOffset / maxWindowSize;
+	viewPortLayout->SetViewportPos( TAlfRealPoint( pos, 0.0f ), 0 );
+	
+	// Create grid layout
+	CAlfGridLayout* gridLayout = 
+		CAlfGridLayout::AddNewL( *this, aPrograms.Count(), 1, viewPortLayout );
+
+	// Add the programs using the duration of the program as column weight.
+	RArray<TInt> columnWeights;
+	for( TInt i=0; i<aPrograms.Count(); i++ )
+		{
+		CAlfTextVisual* textVisual = CAlfTextVisual::AddNewL( *this, gridLayout );
+		textVisual->SetTextL( aPrograms[i].iName );
+#ifdef ENABLE_TEXTSTYLES
+		textVisual->SetTextStyle( aTextStyle );
+#endif
+		textVisual->SetWrapping( CAlfTextVisual::ELineWrapBreak );
+		if( aSetBorders )
+			{
+			TAlfPerfAppSuiteHelper::AddBorderBrushL( textVisual, TRgb(0xdddddd) );
+			}		
+		columnWeights.Append( aPrograms[i].DurationInMinutes() );
+		}
+	
+	// Set column weights
+	gridLayout->SetColumnsL( columnWeights );
+	
+	// Cleanup
+	columnWeights.Close();
+	}