diff -r e8c1ea2c6496 -r 8758140453c0 graphics/wserv/src/T_DataDirectScreenAccess.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphics/wserv/src/T_DataDirectScreenAccess.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,439 @@ +/* +* 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 the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include +#include "T_GraphicsUtil.h" +#include "T_DataDirectScreenAccess.h" +#include "T_DataFbsScreenDevice.h" +#include "T_DataFbsBitGc.h" + +_LIT(KDataClassname, "CDirectScreenAccess"); +_LIT(KCmdDestructor, "~CDirectScreenAccess"); +_LIT(KCmdDestructorGeneral, "~"); + +//command +_LIT( KCmdNewL, "NewL" ); +_LIT( KCmdStart, "StartL" ); +_LIT( KCmdGc, "Gc" ); +_LIT( KCmdScreenDevice, "ScreenDevice" ); +_LIT( KCmdDrawRegion, "DrawingRegion" ); +_LIT( KCmdSetPriority, "SetPriority" ); +_LIT( KCmdBringAppFg, "Util_BringAppFg" ); + +// Fields +_LIT( KRWsSessionObj, "ws"); +_LIT( KCWsScreenDeviceObj, "scrdev"); +_LIT( KRWindowObj, "win"); +_LIT( KAppName, "app"); +_LIT( KPriorityObj, "Priority"); +_LIT( KFldGc, "gc"); +_LIT( KFldScreenDevice, "ScreenDevice"); +_LIT( KFldDrawRegion, "region1"); +_LIT( KWantedReasonObj, "reason"); + +//Error +_LIT( KErrNewL, "Create CDirectScreenAccess object failed."); +_LIT( KErrGc, "Execute CDirectScreenAccess::Gc failed. return value is NULL"); +_LIT( KErrScreenDevice, "Execute CDirectScreenAccess::ScreenDevices failed. return value is NULL"); +_LIT( KErrDrawRegion, "Execute CDirectScreenAccess::DrawRegion failed. return value is NULL"); +_LIT( KErrDrawRegionSetting, "Set DrawRegion failed."); +_LIT( KErrAbortNowReason, "the AbortNow's reason do not match the expected value."); +_LIT( KErrRestartReason, "the Restart's reason do not match the expected value."); +_LIT( KLogMissingParameter, "Missing parameter '%S'"); +_LIT( KLogMissingWrapper,"Missing Wrapper class '%S'"); + +//info +_LIT( KInfoNewL, "NewL() has been called."); +_LIT( KInfoStartL, "StartL() has been called"); +_LIT( KInfoGc, "Gc() has been called" ); +_LIT( KInfoScreenDevice, "ScreenDevice() has been called" ); +_LIT( KInfoDrawRegion, "DrawingRegion() has been called" ); +_LIT( KInfoSetPriority, "SetPriority() has been called" ); +_LIT( KInfoAbortNow, "AbortNow has been called, with the reason=%d"); +_LIT( KInfoRestart, "Restart has been called, with the reason=%d"); +_LIT( KInfoDestructor, "execute ~CDirectScreenAccess()"); + +const RDirectScreenAccess::TTerminationReasons KDefaultReason = RDirectScreenAccess::ETerminateRegion; + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// +/** + * Protected constructor. First phase construction + */ +CT_DataDirectScreenAccess::CT_DataDirectScreenAccess() : + iDirectScreenAccess(NULL), + iWantedReason(KDefaultReason) + { + } +/** + * Public destructor + */ +CT_DataDirectScreenAccess::~CT_DataDirectScreenAccess() + { + DestroyData(); + } + +/** + * Two phase constructor + */ +CT_DataDirectScreenAccess* CT_DataDirectScreenAccess::NewL() + { + CT_DataDirectScreenAccess* self = new (ELeave) CT_DataDirectScreenAccess(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +/** + * Second phase construction + */ +void CT_DataDirectScreenAccess::ConstructL() + { + //nothing to do here. + } + +/** + * Set the object that the data wraps + * + * @param aObject object that the wrapper is testing + * + */ +void CT_DataDirectScreenAccess::SetObjectL(TAny* aAny) + { + DestroyData(); + iDirectScreenAccess = static_cast (aAny); + } + +/** + * The object will no longer be owned by this + * + * @leave KErrNotSupported if the the function is not supported + */ +void CT_DataDirectScreenAccess::DisownObjectL() + { + iDirectScreenAccess = NULL; + } + +void CT_DataDirectScreenAccess::DestroyData() + { + delete iDirectScreenAccess; + iDirectScreenAccess = NULL; + } + +/** + * Process a command read from the ini file + * + * @param aCommand the command to process + * @param aSection the entry in the ini file requiring the command to be processed + * @param aAsyncErrorIndex index of command. used for async calls + * + * @return ETrue if the command is processed + */ +TBool CT_DataDirectScreenAccess::DoCommandL(const TTEFFunction& aCommand, + const TTEFSectionName& aSection, const TInt aAsyncErrorIndex) + { + TBool result = ETrue; + + if ( !aCommand.Compare( KCmdNewL ) || !aCommand.Compare( KDataClassname ) ) + { + DoCmdnewL(aSection); + } + else if ( !aCommand.Compare(KCmdDestructor) || !aCommand.Compare(KCmdDestructorGeneral ) ) + { + DoCmdDestructor(); + } + else if ( !aCommand.Compare( KCmdStart ) ) + { + DoCmdStartL(aSection); + } + else if ( !aCommand.Compare( KCmdGc ) ) + { + DoCmdGcL(aSection); + } + else if ( !aCommand.Compare( KCmdScreenDevice ) ) + { + DoCmdScreenDeviceL(aSection); + } + else if ( !aCommand.Compare( KCmdDrawRegion ) ) + { + DoCmdDrawRegion(aSection); + } + else if ( !aCommand.Compare( KCmdSetPriority ) ) + { + DoCmdSetPriority(aSection); + } + else if ( !aCommand.Compare( KCmdBringAppFg ) ) + { + DoCmdBringAppFgL(aSection); + } + else + { + CDataWrapperActive::DoCommandL(aCommand, aSection, aAsyncErrorIndex); + } + + return result; + } + +/** + * test AbortNow() + */ +void CT_DataDirectScreenAccess::AbortNow(RDirectScreenAccess::TTerminationReasons aReason) + { + INFO_PRINTF2(KInfoAbortNow , aReason); + DecOutstanding(); + if( iWantedReason != aReason ) + { + ERR_PRINTF1(KErrAbortNowReason); + SetBlockResult(EFail); + } + + } + +/** + * Test Restart() + */ +void CT_DataDirectScreenAccess::Restart(RDirectScreenAccess::TTerminationReasons aReason) + { + INFO_PRINTF2(KInfoRestart , aReason); + DecOutstanding(); + if( iWantedReason != aReason ) + { + ERR_PRINTF1(KErrRestartReason); + SetBlockResult(EFail); + } + + } + +/** + * Helper method to get RWsSession + */ +RWsSession* CT_DataDirectScreenAccess::GetRWSessionL(const TDesC& aSection) + { + RWsSession* iClient( NULL ); //Window Session Client + TPtrC objectName; + + if ( GetStringFromConfig(aSection, KRWsSessionObj(), objectName) ) + { + iClient = static_cast(GetDataObjectL(objectName)); + } + + return iClient; + } + +/** + * Helper method to get CWsScreenDevice + */ +CWsScreenDevice* CT_DataDirectScreenAccess::GetDevicesL(const TDesC& aSection) + { + CWsScreenDevice* device = NULL; + + if ( !CT_GraphicsUtil::GetWsScreenDeviceL(*this, aSection, KCWsScreenDeviceObj, device) ) + { + ERR_PRINTF2(KLogMissingParameter , &KCWsScreenDeviceObj); + SetBlockResult(EFail); + } + + return device; + } + + +/** + * Helper method to get RWindow + */ +RWindow* CT_DataDirectScreenAccess::GetWindowL(const TDesC& aSection) + { + RWindow* window( NULL ); + TPtrC objectName; + + if( GetStringFromConfig(aSection, KRWindowObj, objectName)) + { + window = static_cast(GetDataObjectL(objectName)); + } + + return window; + + } + + +/** +* Test NewL() +*/ +void CT_DataDirectScreenAccess::DoCmdnewL(const TDesC& aSection) + { + // Execute command and log parameters + DestroyData(); + INFO_PRINTF1(KInfoNewL); + iDirectScreenAccess = CDirectScreenAccess::NewL(*GetRWSessionL(aSection), + *GetDevicesL(aSection), *GetWindowL(aSection), *this ); + + if(!iDirectScreenAccess) + { + ERR_PRINTF1(KErrNewL); + SetBlockResult(EFail); + } + + } + +/** +* Test Destructor() +*/ +void CT_DataDirectScreenAccess::DoCmdDestructor() + { + INFO_PRINTF1(KInfoDestructor); + delete iDirectScreenAccess; + iDirectScreenAccess = NULL; + } + +/** +* Test StartL() +*/ +void CT_DataDirectScreenAccess::DoCmdStartL(const TDesC& aSection) + { + INFO_PRINTF1(KInfoStartL); + if ( !CT_GraphicsUtil::ReadTerminateReason(*this , aSection , KWantedReasonObj, iWantedReason) ) + { + ERR_PRINTF2(KLogMissingParameter , &KWantedReasonObj); + SetBlockResult(EFail); + } + + iDirectScreenAccess->StartL(); + IncOutstanding(); + } + +/** +* Test Gc() +*/ +void CT_DataDirectScreenAccess::DoCmdGcL(const TDesC& aSection) + { + // Execute command and log parameters + INFO_PRINTF1(KInfoGc); + + TPtrC aGcName; + if(GetStringFromConfig(aSection, KFldGc, aGcName) ) + { + CFbsBitGc* iGc = iDirectScreenAccess->Gc(); + if(!iGc) + { + INFO_PRINTF1(KErrGc); + SetError(KErrNotFound); + } + else + { + SetDataObjectL(aGcName , iGc); + } + } + else + { + ERR_PRINTF2(KLogMissingParameter , &KFldGc); + } + + } + +/** +* Test ScreenDevice() +*/ +void CT_DataDirectScreenAccess::DoCmdScreenDeviceL(const TDesC& aSection) + { + // Execute command and log parameters + INFO_PRINTF1(KInfoScreenDevice); + TPtrC aScreenDeviceName; + if(GetStringFromConfig(aSection, KFldScreenDevice, aScreenDeviceName)) + { + CFbsScreenDevice* aScreenDevice = iDirectScreenAccess->ScreenDevice(); + if(!aScreenDevice) + { + ERR_PRINTF1(KErrScreenDevice); + SetError(KErrNotFound); + } + else + { + SetDataObjectL(aScreenDeviceName , aScreenDevice); + } + + } + else + { + ERR_PRINTF2(KLogMissingParameter , &KFldScreenDevice); + } + + } + +/** +* Test DrawRegion() +*/ +void CT_DataDirectScreenAccess::DoCmdDrawRegion(const TDesC& aSection) + { + // Execute command and log parameters + INFO_PRINTF1(KInfoDrawRegion); + TRegion* region; + region = iDirectScreenAccess->DrawingRegion(); + + if(!region) + { + ERR_PRINTF1(KErrDrawRegion); + SetError(KErrNotFound); + } + // Compare the region. + // read the exepected region size + TRect temp; + if( GetRectFromConfig(aSection ,KFldDrawRegion, temp )) + { + //compare the region + TRect temp2 = (*region)[0]; + + if(temp != temp2) + { + ERR_PRINTF1(KErrDrawRegionSetting); + SetBlockResult(EFail); + } + } + + } + +/** +* Test AbortNow() and Restart() by SetPriority() +*/ +void CT_DataDirectScreenAccess::DoCmdSetPriority(const TDesC& aSection) + { + INFO_PRINTF1(KInfoSetPriority); + CActive::TPriority priority; + IncOutstanding(); + if ( !CT_GraphicsUtil::ReadPriority(*this , aSection , KPriorityObj, priority) ) + { + ERR_PRINTF2(KLogMissingParameter , &KPriorityObj); + SetBlockResult(EFail); + } + iDirectScreenAccess->SetPriority(priority); + } + +/** +* Test AbortNow() and Restart() by bring a app to foreground +*/ +void CT_DataDirectScreenAccess::DoCmdBringAppFgL(const TDesC& aSection) + { + // Execute command and log parameters + TPtrC sessionKeyName(KRWsSessionObj); + TPtrC appKeyName(KAppName); + IncOutstanding(); + if ( !CT_GraphicsUtil::BringAppForegroundL(*this , aSection , sessionKeyName, appKeyName) ) + { + ERR_PRINTF2(KLogMissingParameter , &sessionKeyName); + SetBlockResult(EFail); + } + } +