--- /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();
+ }