graphics/wserv/src/T_DataWsBitmap.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphics/wserv/src/T_DataWsBitmap.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,351 @@
+/*
+* 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 "T_DataWsBitmap.h"
+#include "T_GraphicsUtil.h"
+
+/*@{*/
+_LIT(KDataClassname, "CWsBitmap");
+
+//Commands
+_LIT(KCmdnew,						"new");
+_LIT(KCmdDestructor,				"~CWsBitmap");
+_LIT(KCmdDestructorGeneral,			"~");
+_LIT(KCmdCreate,					"Create");
+_LIT(KCmdDuplicate,					"Duplicate");
+_LIT(KCmdLoad,						"Load");
+_LIT(KCmdInternalizeL,				"InternalizeL");
+_LIT(KCmdReset,						"Reset");
+
+// Fields
+_LIT(KFldDispMode,					"dispmode");
+_LIT(KFldFileName,					"filename");
+_LIT(KFldHandle,					"handle");
+_LIT(KFldHandle_Name,				"handle_name");
+_LIT(KFldId,						"id");
+_LIT(KFldShareIfLoaded,				"shareifloaded");
+_LIT(KFldSizeInPixels,				"sizeinpixels");
+_LIT(KFldUseClosedStream,			"use_closed_stream");
+_LIT(KFldWs,						"ws");
+
+///	Logging
+_LIT(KLogError,						"Error=%d");
+_LIT(KLogMissingParameter,			"Missing parameter '%S'");
+/*@}*/
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CT_DataWsBitmap* CT_DataWsBitmap::NewL()
+	{
+	CT_DataWsBitmap*	ret=new (ELeave) CT_DataWsBitmap();
+	CleanupStack::PushL(ret);
+	ret->ConstructL();
+	CleanupStack::Pop(ret);
+	return ret;
+	}
+
+CT_DataWsBitmap::CT_DataWsBitmap()
+:	CT_DataFbsBitmap()
+,	iWsBitmap(NULL)
+	{
+	}
+
+void CT_DataWsBitmap::ConstructL()
+	{
+	CT_DataFbsBitmap::ConstructL();
+	}
+
+CT_DataWsBitmap::~CT_DataWsBitmap()
+	{
+	DestroyData();
+	}
+
+void CT_DataWsBitmap::SetObjectL(TAny* aAny)
+	{
+	DestroyData();
+	iWsBitmap = static_cast<CWsBitmap*> (aAny);
+	}
+
+void CT_DataWsBitmap::DestroyData()
+	{
+	delete iWsBitmap;
+	iWsBitmap=NULL;
+	}
+
+void CT_DataWsBitmap::DisownObjectL()
+	{
+	iWsBitmap = NULL;
+	}
+
+MWsClientClass* CT_DataWsBitmap::GetClientClass() const
+	{
+	return iWsBitmap;
+	}
+
+
+/**
+* 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_DataWsBitmap::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	ret = ETrue;
+
+	if ( aCommand==KCmdDestructor || aCommand==KCmdDestructorGeneral )
+		{
+		DoCmdDestructor();
+		}
+	else if ( aCommand==KCmdnew || aCommand==KDataClassname )
+		{
+		DoCmdnewL(aSection);
+		}
+	else if ( aCommand==KCmdCreate )
+		{
+		DoCmdCreate(aSection);
+		}
+	else if ( aCommand==KCmdDuplicate )
+		{
+		DoCmdDuplicateL(aSection);
+		}
+	else if ( aCommand==KCmdLoad )
+		{
+		DoCmdLoad(aSection);
+		}
+	else if ( aCommand==KCmdInternalizeL )
+		{
+		DoCmdInternalizeL(aSection);
+		}
+	else if ( aCommand==KCmdReset )
+		{
+		DoCmdReset();
+		}
+	else if ( !CT_DataWsClientClass::DoCommandL(*this, aCommand, aSection, aAsyncErrorIndex) )
+		{
+		CT_DataFbsBitmap::SetObjectL(iWsBitmap);
+		ret = CT_DataFbsBitmap::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
+		CT_DataFbsBitmap::DisownObjectL();
+		}
+
+	return ret;
+	}
+
+
+void CT_DataWsBitmap::DoCmdnewL(const TDesC& aSection)
+	{
+	DestroyData();
+
+	// Get test data for command input parameter(s)
+	TPtrC	wsName;
+	RWsSession* ws=NULL;
+	if ( GetStringFromConfig(aSection, KFldWs, wsName) )
+		{
+		ws = static_cast<RWsSession*>(GetDataObjectL(wsName));
+		}
+
+	TInt	err=KErrNone;
+	if ( ws!=NULL )
+		{
+		// Execute command and log parameters
+		INFO_PRINTF1(_L("execute new CWsBitmap(RWsSession)"));
+		TRAP( err, iWsBitmap = new (ELeave) CWsBitmap(*ws));
+		}
+	else
+		{
+		// Execute command and log parameters
+		INFO_PRINTF1(_L("execute new CWsBitmap()"));
+		TRAP( err, iWsBitmap = new (ELeave) CWsBitmap());
+		}
+
+	if ( err!=KErrNone )
+		{
+		ERR_PRINTF2(KLogError, err);
+		SetError(err);
+		}
+	}
+
+
+void CT_DataWsBitmap::DoCmdDestructor()
+	{
+	// Execute command and log parameters
+	INFO_PRINTF1(_L("execute ~CWsBitmap()"));
+	delete iWsBitmap;
+	iWsBitmap=NULL;
+	}
+
+
+void CT_DataWsBitmap::DoCmdCreate(const TDesC& aSection)
+	{
+	TBool	dataOk=ETrue;
+
+	// Get test data for command input parameter(s)
+	TSize	datSizeInPixels;
+	if ( !GetSizeFromConfig(aSection, KFldSizeInPixels, datSizeInPixels) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldSizeInPixels);
+		SetBlockResult(EFail);
+		}
+
+	TDisplayMode	datDispMode;
+	if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KFldDispMode, datDispMode) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldDispMode);
+		SetBlockResult(EFail);
+		}
+
+	if ( dataOk )
+		{
+		// Execute command and log parameters
+		INFO_PRINTF1(_L("execute Create(TSize, TDisplayMode)"));
+		TInt	returnCode = iWsBitmap->Create	(datSizeInPixels, datDispMode);
+
+		// Check the command return code, if !=KErrNone then stop this command
+		if ( returnCode!=KErrNone )
+			{
+			ERR_PRINTF2(KLogError, returnCode);
+			SetError(returnCode);
+			}
+		}
+	}
+
+
+void CT_DataWsBitmap::DoCmdDuplicateL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::Duplicate()"));
+	TInt	handle=GetHandle();
+	TPtrC	objectName;
+	if ( GetStringFromConfig(aSection, KFldHandle_Name(), objectName) )
+		{
+		CDataWrapperBase*	wrapper=static_cast<CDataWrapperBase*>(GetDataWrapperL(objectName));
+		handle=wrapper->GetHandle();
+		}
+	else
+		{
+		GetIntFromConfig(aSection, KFldHandle(), handle);
+		}
+
+	// call Duplicate()
+	TInt	err = iWsBitmap->Duplicate(handle);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Duplicate error: %d"), err);
+		SetError(err);
+		}
+	}
+
+
+void CT_DataWsBitmap::DoCmdLoad(const TDesC& aSection)
+	{
+	TBool	dataOk=ETrue;
+
+	// Get test data for command input parameter(s)
+	TPtrC	datFileName;
+	if ( !GetStringFromConfig(aSection, KFldFileName, datFileName) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldFileName);
+		SetBlockResult(EFail);
+		}
+
+	TInt	datId;
+	if ( !GetIntFromConfig(aSection, KFldId, datId) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldId);
+		SetBlockResult(EFail);
+		}
+
+	TBool	datShareIfLoaded;
+	if ( !GetBoolFromConfig(aSection, KFldShareIfLoaded, datShareIfLoaded) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldShareIfLoaded);
+		SetBlockResult(EFail);
+		}
+
+	if ( dataOk )
+		{
+		// Execute command and log parameters
+		INFO_PRINTF1(_L("execute Load(TDesC, TInt32, TBool)"));
+		TInt	returnCode = iWsBitmap->Load(datFileName, datId, datShareIfLoaded);
+
+		// Check the command return code, if !=KErrNone then stop this command
+		if ( returnCode!=KErrNone )
+			{
+			ERR_PRINTF2(KLogError, returnCode);
+			SetError(returnCode);
+			}
+		}
+	}
+
+
+void CT_DataWsBitmap::DoCmdInternalizeL(const TDesC& aSection)
+	{
+	// Get test data for command input parameter(s)
+	TBool	datUseClosedStream=EFalse;
+	GetBoolFromConfig(aSection, KFldUseClosedStream, datUseClosedStream);
+
+	TPtrC	datFileName;
+	if ( !GetStringFromConfig(aSection, KFldFileName, datFileName) )
+		{
+		ERR_PRINTF2(KLogMissingParameter, &KFldUseClosedStream);
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		CDirectFileStore*	readstore = CDirectFileStore::OpenL(FileServer(), datFileName, EFileStream | EFileRead);
+		CleanupStack::PushL(readstore);
+		TInt				popCount=1;
+
+		TStreamId			headerid = readstore->Root();
+		RStoreReadStream	readstrm;
+		if ( !datUseClosedStream )
+			{
+			readstrm.OpenL(*readstore, headerid);
+			CleanupClosePushL(readstrm);
+			popCount=2;
+			}
+
+		// Execute command and log parameters
+		INFO_PRINTF1(_L("execute InternalizeL(RReadStream)"));
+		TRAPD(err, iWsBitmap->InternalizeL(readstrm));
+		if ( err!=KErrNone )
+			{
+			ERR_PRINTF2(KLogError, err);
+			SetError(err);
+			}
+
+		// Cleanup
+		CleanupStack::PopAndDestroy(popCount, readstore);
+		}
+	}
+
+
+void CT_DataWsBitmap::DoCmdReset()
+	{
+	// Execute command and log parameters
+	INFO_PRINTF1(_L("execute Reset()"));
+	iWsBitmap->Reset();
+	}