appfw/uiftestfw/src/appfwk_test_AppUi.cpp
author William Roberts <williamr@symbian.org>
Fri, 23 Apr 2010 14:37:17 +0100
branchRCL_3
changeset 22 c82a39b81a38
parent 0 2e3d3ce01487
permissions -rw-r--r--
Rework addition of Symbian splash screen to reduce the source impact (uses SVG from Bug 2414) Notes: by using the OPTION SOURCEDIR parameter in the mifconv extension instructions, I can arrange to use the same source file name in sfimage, without having to export over the original Nokia file. This means that the name inside splashscreen.mbg is the same, which removes the need for the conditional compilation in SplashScreen.cpp, and gets rid of sf_splashscreen.mmp.

// Copyright (c) 2005-2009 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:
//

/**
 @file
 @test
 @internalComponent - Internal Symbian test code 
*/


#include <techview/eikmenub.h>
#include <techview/eikbtgpc.h>
#include <eikenv.h>
#include <hal.h>

#include "appfwk_test_AppUi.h"


EXPORT_C void PreallocateHALBuffer()
	{
	HAL::SEntry* pE=NULL;
	TInt entries=0;
	HAL::GetAll(entries, pE);
	User::Free(pE);
	}

EXPORT_C void CloseAllPanicWindowsL()
	{
	RWsSession	ws;
	User::LeaveIfError(ws.Connect());

	TInt wgFocus = ws.GetFocusWindowGroup();

	const TUint32 ENullWsHandle = 0xFFFFFFFF;	// Events delivered to this handle are thrown away
	RWindowGroup wg = RWindowGroup(ws);

	wg.Construct(ENullWsHandle);
	TInt wgId = wg.Identifier();

	TWsEvent event;
	event.SetType(EEventKey);
	TKeyEvent *keyEvent = event.Key();
	keyEvent->iCode = EKeyEscape;
	keyEvent->iScanCode = EStdKeyEscape;
	keyEvent->iModifiers = 0;

	TInt limit = 0;
	for(limit = 0; wgFocus != wgId && (limit < 50); limit++)
	{
		ws.SendEventToAllWindowGroups(event);
		wgFocus = ws.GetFocusWindowGroup();
		RDebug::Print(_L("CloseAllPanicWindowsL() - EKeyEscape sent to Windows Group"));
	}

	// close everything
	wg.Close();
	ws.Close();
	}


EXPORT_C CAutoTestManager::CAutoTestManager(MAutoTestApp* aAutoTestApp) :
	CActive(EPriorityIdle), iAutoTestApp(aAutoTestApp)
	{
	}


EXPORT_C CAutoTestManager::~CAutoTestManager()
	{
	Cancel();
	}
	

EXPORT_C CAutoTestManager* CAutoTestManager::NewL(MAutoTestApp* aAutoTestApp)
	{
     CAutoTestManager *theTestManager=new (ELeave) CAutoTestManager(aAutoTestApp);
     CActiveScheduler::Add(theTestManager);
	 return theTestManager;
	}


void CAutoTestManager::RunL()
	{
	__ASSERT_DEBUG(iAutoTestApp, User::Panic(KPanicNullPointer, KNullPointer));
	iAutoTestApp->RunTestStepL(++iNumStep);
	StartAutoTest();
	}
	

void CAutoTestManager::DoCancel()
	{
	}


/**
  Init active object and set it active
 */
EXPORT_C void CAutoTestManager::StartAutoTest()
	{
	TRequestStatus *pS=(&iStatus);
	User::RequestComplete(pS,0);
	SetActive();
	}


/**
  This function must be called after all test cases will be completed 	
 */
EXPORT_C void CAutoTestManager::FinishAllTestCases(TTestResult aResult)
	{
	iResult = aResult;
	if(aResult != EPass)
		{
		RDebug::Print(_L("\nTest completed with error %d"), aResult);
		}
	CCoeEnv::Static()->Flush();
	CBaActiveScheduler::Exit();
	}
	
	
/**
  This function will set the internal test state variable to the user defined state.
 */
EXPORT_C void CAutoTestManager::SetTestCaseNumber(TInt aNumber)
	{
	iNumStep = aNumber;
	}


EXPORT_C CTestCoeAppUi::CTestCoeAppUi(CTmsTestStep* aStep) :
		iStep(aStep) 
	{
	}


EXPORT_C CTestCoeAppUi::~CTestCoeAppUi()
	{
	if(iAutoTestManager)
		{
		iAutoTestManager->Cancel();
		}
	delete iAutoTestManager;
	}
	

/**
  Read thread local storage read and free thread local storage STL is used for storage  Auto attribute,  
  it sets in an export function void ProcessParam(TAny* aParam)	
 */
EXPORT_C void CTestCoeAppUi::ConstructL()
	{
	iAutoTestManager = CAutoTestManager::NewL(this);
	
	CCoeAppUi::ConstructL();
	}


EXPORT_C CTestAppUi::CTestAppUi(CTmsTestStep* aStep, const	TDesC& aRes, TInt aResourceHotKeysId,  TInt aResourceMenuBarId, TInt aResourceToolBarId) :
		CEikAppUi(),
		iResourceHotKeysId(aResourceHotKeysId), 
		iResourceMenuBarId(aResourceMenuBarId),
		iResourceToolBarId(aResourceToolBarId),
		iStep(aStep)
	{
	iRes.Copy(aRes);
	}


EXPORT_C CTestAppUi::~CTestAppUi()
	{
	if(iResourceFileFlag)
		{
		CCoeEnv::Static()->DeleteResourceFile(iResourceFileFlag); 
		}
	
	if(iAutoTestManager)
		{
		iAutoTestManager->Cancel();
		}
	delete iAutoTestManager;
	
	if(iMenuBar)
		{
		RemoveFromStack(iMenuBar);
		}
	delete iMenuBar;
	
	if(iToolBar)
		{
		RemoveFromStack(iToolBar);
		}
	delete iToolBar;
	}


/**
   Load resource, create toolbar & menubar, read and free thread local storage	
 */
EXPORT_C void CTestAppUi::ConstructL()
	{
	iAutoTestManager = CAutoTestManager::NewL(this);
	
	if(iStep == 0)
		{
		BaseConstructL(ENoAppResourceFile);
		}
	else
		{
		CCoeAppUi::ConstructL();
		}

	if(iRes.Length() > 0)
		{
		CCoeEnv* coeEnv = CCoeEnv::Static();
		TBuf8<256>	buf;
		buf.Copy(iRes);
		iResourceFileFlag=coeEnv->AddResourceFileL(iRes);
		}

	if(iResourceMenuBarId)
		{
		iMenuBar = new (ELeave) CEikMenuBar;
		iMenuBar->ConstructL(this,iResourceHotKeysId,iResourceMenuBarId);
		iMenuBar->MakeVisible(ETrue);
		AddToStackL(iMenuBar);
		}

	if(iResourceToolBarId)
		{
		iToolBar=CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::EToolbar, CEikButtonGroupContainer::EVertical, this, iResourceToolBarId);
		const TRect boundingRect = ClientRect(); // make toolband stretch to the screen width by default
		iToolBar->SetBoundingRect(boundingRect);
		iToolBar->MakeVisible(ETrue);
		AddToStackL(iToolBar);
		}
	}


/**
   Reduce client rectangle	
 */
EXPORT_C void CTestAppUi::ReduceRect(TRect& aRect) const
	{
	if(iMenuBar)
		{
		iMenuBar->ReduceRect(aRect);
		}

	if(iToolBar)
		{
		iToolBar->ReduceRect(aRect);
		}
	}


/**
  Hide menu from screen and pass on to the parent method
 */
EXPORT_C void CTestAppUi::ProcessCommandL(TInt aCommand)
	{
 	if (iMenuBar && iMenuBar->IsVisible())
		{
		iMenuBar->StopDisplayingMenuBar();
		}
	if(aCommand != EEikCmdCanceled)
		{
		CEikAppUi::ProcessCommandL(aCommand);
		}
	}


TInt  E32Dll()
	{
	return 0;
	}