uiacceltk/hitchcock/tsrc/alfperfapp/src/alfperfappsuitetestcasescroll.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/tsrc/alfperfapp/src/alfperfappsuitetestcasescroll.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,235 @@
+/*
+* 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 <AknUtils.h>
+
+#include <alf/AlfEnv.h>
+#include <alf/AlfDisplay.h>
+#include <alf/alfimageloaderutil.h>
+#include <alf/alftexturemanager.h>
+#include <alf/alfevent.h>
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfviewportlayout.h>
+#include <alf/alfgridlayout.h>
+#include <alf/alfdecklayout.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfgradientbrush.h>
+#include <alf/alfborderbrush.h>
+#include <alf/AlfBrushArray.h>
+#include <alf/AlfTextStyle.h>
+
+#include <alfperfapp_imagetest.mbg>
+
+#include "AlfPerfApp.hrh"
+#include "AlfPerfAppSuiteTestCaseScroll.h"
+#include "AlfPerfAppSuitePeopleControl.h"
+#include "AlfPerfAppSuiteEPGControl.h"
+#include "AlfPerfAppSuiteTestCase.h"
+#include "alfperfappconfigconstants.h"
+
+
+
+
+// ============================= MEMBER FUNCTIONS ==============================
+
+CAlfPerfAppSuiteTestCaseScroll::CAlfPerfAppSuiteTestCaseScroll(CAlfPerfAppSuiteTestCase* aAppSuiteTestCase)
+    :iAppSuiteTestCase(aAppSuiteTestCase)
+    {
+    }
+
+CAlfPerfAppSuiteTestCaseScroll::~CAlfPerfAppSuiteTestCaseScroll()
+    {
+    }
+
+void CAlfPerfAppSuiteTestCaseScroll::ConstructL(
+        CAlfEnv& aEnv, TInt aCaseId, const TRect& aVisibleArea )
+    {
+    CAlfPerfAppSuiteTestCaseControl::ConstructL( aEnv, aCaseId, aVisibleArea );
+
+    // Setup scrolling cycle lenght
+    switch( aCaseId )
+    	{
+    	case EAlfPerfAppSuiteCaseScrollContinuousPortrait:
+    	case EAlfPerfAppSuiteCaseScrollContinuousLandscape:
+    		iCycleLenght = KCycleLenghtContinuous;
+    		break;
+
+    	case EAlfPerfAppSuiteCaseScrollIncrementalPortrait:
+    	case EAlfPerfAppSuiteCaseScrollIncrementalLandscape:
+    		iCycleLenght = KCycleLenghtIncremental;
+    		break;
+
+    	default:
+    		User::Leave( KErrNotFound );
+    		break;
+    	}
+    
+    // Use a viewport layout as a base
+    iViewPortLayout = CAlfViewportLayout::AddNewL( *this );
+    
+   	// Visible viewport is full screen
+   	iViewPortLayout->SetViewportSize( aVisibleArea.Size(), 0 );
+   	
+    // Then use a gird to hold suites
+    CAlfGridLayout* baseGridLayout = CAlfGridLayout::AddNewL( *this, 1, 1, iViewPortLayout );
+
+    // Construct suites
+    
+    iLoadedImages = 0;
+    iSuiteCount = 3;
+    // EPG suite
+   	CAlfPerfAppSuiteEPGControl* epg = new (ELeave) CAlfPerfAppSuiteEPGControl(this);
+   	epg->ConstructL( aEnv, aVisibleArea.Size(), baseGridLayout );
+   	aEnv.ControlGroup( KAlfPerfAppSuiteControlGroup ).AppendL( epg );
+	
+	// PEOPLE suite
+   	CAlfPerfAppSuitePeopleControl* people = new (ELeave) CAlfPerfAppSuitePeopleControl(this);
+   	people->ConstructL( aEnv, aVisibleArea.Size(), baseGridLayout );
+   	aEnv.ControlGroup( KAlfPerfAppSuiteControlGroup ).AppendL( people );
+	
+    // Another EPG suite
+   	epg = new (ELeave) CAlfPerfAppSuiteEPGControl(this);
+   	epg->ConstructL( aEnv, aVisibleArea.Size(), baseGridLayout );
+   	aEnv.ControlGroup( KAlfPerfAppSuiteControlGroup ).AppendL( epg );
+	
+   	// Set correct number of columns to grid
+   	baseGridLayout->SetColumns( iSuiteCount );
+
+   	// Virtual viewport depends on the number of suites
+   	TSize size = iVisibleArea.Size();
+   	size.iWidth = iVisibleArea.Width()*iSuiteCount;
+   	iViewPortLayout->SetVirtualSize( size, 0 );
+
+   	// TextureLoadingCompleted() call back is handled now in epg, people control classes.
+   	// so no need of explicit wait in this thread.
+   	// ImagesLoaded() does the request completion functionlaity. 
+    }
+
+void CAlfPerfAppSuiteTestCaseScroll::ImagesLoaded( TInt aErrorCode )
+    {
+    // inform if there is any error
+    if( aErrorCode != KErrNone )
+        {
+        iAppSuiteTestCase->ImagesLoaded( aErrorCode );
+        }
+    
+    iLoadedImages++;
+    if (iLoadedImages == iSuiteCount)
+        {
+        iAppSuiteTestCase->ImagesLoaded(KErrNone);
+        }
+    }
+
+void CAlfPerfAppSuiteTestCaseScroll::DoStartExecuteL()
+    {
+    NextCycleL();
+    }
+
+void CAlfPerfAppSuiteTestCaseScroll::SetVisibleArea(
+        const TRect& /*aVisibleArea*/ )
+    {
+    if ( IsExecutionOngoing() )
+        {
+        Env().CancelCustomCommands( this, KAlfPerfAppSuiteCmdNext );
+        TRAPD( err, NextCycleL() );
+        if ( err != KErrNone )
+            {
+            CompleteNow( err );
+            }
+        }
+    }
+
+TBool CAlfPerfAppSuiteTestCaseScroll::OfferEventL( const TAlfEvent& aEvent )
+    {
+    if ( aEvent.IsCustomEvent() &&
+         aEvent.CustomParameter() == KAlfPerfAppSuiteCmdNext )
+        {
+        TRAPD( err, NextCycleL() );
+        if ( err != KErrNone )
+            {
+            CompleteNow( err );
+            }
+        return ETrue;
+        }
+
+    return CAlfPerfAppSuiteTestCaseControl::OfferEventL( aEvent );
+    }
+
+void CAlfPerfAppSuiteTestCaseScroll::NextCycleL()
+    {
+    switch( iCaseId )
+    	{
+    	case EAlfPerfAppSuiteCaseScrollContinuousPortrait:
+    	case EAlfPerfAppSuiteCaseScrollContinuousLandscape:
+    		{
+    	    if( iCycleCounter == KNumberOfRepeats )
+    	    	{
+    	    	CompleteNow( KErrNone );
+    	    	return;
+    	    	}
+
+    	    // Bounce between first and last suites
+    	    if( iCycleCounter % 2 )
+    	    	{
+    	    	iViewPortPos = TAlfRealPoint( 0, 0 );
+    	    	}
+    	    else
+    	    	{
+    	    	iViewPortPos = TAlfRealPoint( iVisibleArea.Width()*(iSuiteCount-1), 0 );
+    	    	}
+    		}
+    		break;
+
+    	case EAlfPerfAppSuiteCaseScrollIncrementalPortrait:
+    	case EAlfPerfAppSuiteCaseScrollIncrementalLandscape:
+    		{
+    	    if( iCycleCounter == (iSuiteCount*2*KNumberOfRepeats)-1 )
+    	    	{
+    	    	CompleteNow( KErrNone );
+    	    	return;
+    	    	}
+
+    	    // Bounce between suites
+    	    if( (iCycleCounter / (iSuiteCount-1)) % 2 )
+    	    	{
+    	    	iViewPortPos.iX -= iVisibleArea.Width();
+    	    	}
+    	    else
+    	    	{
+    	    	iViewPortPos.iX += iVisibleArea.Width();
+    	    	}
+    		}
+    		break;
+
+    	default:
+    		CompleteNow( KErrNotFound );
+    		return;
+    	}
+
+    iViewPortLayout->SetViewportPos( iViewPortPos, iCycleLenght );
+
+    iCycleCounter++;
+
+    TAlfCustomEventCommand command( KAlfPerfAppSuiteCmdNext, this );
+    User::LeaveIfError( Env().Send( command, iCycleLenght ) );
+    }
+
+// end of file
+