--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsapitest/graphicssvs/fbserv/src/T_DataFbsBitmap.cpp Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,2296 @@
+/*
+* 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:
+*
+*/
+
+/**
+@test
+@internalComponent
+v
+This contains CT_DataFbsBitmap
+*/
+
+// User includes
+#include "T_DataFbsBitmap.h"
+#include "T_GraphicsUtil.h"
+
+// EPOC includes
+#include <graphics\bitmapuid.h>
+
+/*@{*/
+/// Parameters
+_LIT(KAlways, "always");
+_LIT(KBitmapId, "bitmap_id");
+_LIT(KBuffLength, "buff_length");
+_LIT(KDitherOffsetX, "dither_offset_x");
+_LIT(KDitherOffsetY, "dither_offset_y");
+_LIT(KExpectedBool, "expected_bool");
+_LIT(KExpectedInt, "expected_int");
+_LIT(KFbsBitmapName, "fbs_bitmap_name");
+_LIT(KFileName, "file_name");
+_LIT(KFileOffset, "file_offset");
+_LIT(KHeight, "height");
+_LIT(KHandle, "handle");
+_LIT(KWidth, "width");
+_LIT(KLength, "length");
+_LIT(KNullExpected, "null_expected");
+_LIT(KDevice, "device");
+_LIT(KNumberOfSources, "number_of_sources");
+_LIT(KPixels, "pixels");
+_LIT(KPointX, "point_x");
+_LIT(KPointY, "point_y");
+_LIT(KRectTlX, "rect_tl_x");
+_LIT(KRectTlY, "rect_tl_y");
+_LIT(KRectBrX, "rect_br_x");
+_LIT(KRectBrY, "rect_br_y");
+_LIT(KScanLineCoord, "scan_line_coord");
+_LIT(KSourceFileName0, "source_file_name_0"); // we don't need more than 3 sources for our test anyway.
+_LIT(KSourceFileName1, "source_file_name_1"); // So that this solution is ok
+_LIT(KSourceFileName2, "source_file_name_2");
+_LIT(KSourceBitmapId0, "source_bitmap_id_0");
+_LIT(KSourceBitmapId1, "source_bitmap_id_1");
+_LIT(KSourceBitmapId2, "source_bitmap_id_2");
+_LIT(KShareIfLoaded, "share_if_loaded");
+_LIT(KTwips, "twips");
+_LIT(KUseDitherOffset, "use_dither_offset");
+_LIT(KUseRFile, "use_rfile");
+_LIT(KUseClosedRFile, "use_closed_rfile");
+_LIT(KUseClosedStream, "use_closed_stream");
+_LIT(KUseRequestStatus, "use_request_status");
+_LIT(KUid, "uid");
+_LIT(KPalette, "palette");
+_LIT(KModifiable, "modifiable");
+_LIT(KEntries, "entries");
+_LIT(KRed, "red");
+_LIT(KGreen, "green");
+_LIT(KBlue, "blue");
+_LIT(KDisplayMode, "displaymode");
+_LIT(KBitmapfileCompressionScheme, "bitmap_compression_scheme");
+
+/// Commands
+_LIT(KCmdDisown, "disown");
+_LIT(KCmdNew, "new");
+_LIT(KCmdDestructor, "~");
+_LIT(KCmdCompress, "Compress");
+_LIT(KCmdCompressInBackground, "CompressInBackground");
+_LIT(KCmdCreate, "Create");
+_LIT(KCmdCreateHardwareBitmap, "CreateHardwareBitmap");
+_LIT(KCmdDataAddress, "DataAddress");
+_LIT(KCmdDataStride, "DataStride");
+_LIT(KCmdDisplayMode, "DisplayMode");
+_LIT(KCmdDuplicate, "Duplicate");
+_LIT(KCmdExternalizeL, "ExternalizeL");
+_LIT(KCmdExternalizeRectangleL, "ExternalizeRectangleL");
+_LIT(KCmdGetPalette, "GetPalette");
+_LIT(KCmdGetPixel, "GetPixel");
+_LIT(KCmdGetScanLine, "GetScanLine");
+_LIT(KCmdGetVerticalScanLine, "GetVerticalScanLine");
+_LIT(KCmdHandle, "Handle");
+_LIT(KCmdHardwareBitmapHandle, "HardwareBitmapHandle");
+_LIT(KCmdHeader, "Header");
+_LIT(KCmdHorizontalPixelsToTwips, "HorizontalPixelsToTwips");
+_LIT(KCmdHorizontalTwipsToPixels, "HorizontalTwipsToPixels");
+_LIT(KCmdInitialDisplayMode, "InitialDisplayMode");
+_LIT(KCmdInternalizeL, "InternalizeL");
+_LIT(KCmdIsCompressedInRAM, "IsCompressedInRAM");
+_LIT(KCmdIsFileInRom, "IsFileInRom");
+_LIT(KCmdIsLargeBitmap, "IsLargeBitmap");
+_LIT(KCmdIsMonochrome, "IsMonochrome");
+_LIT(KCmdIsRomBitmap, "IsRomBitmap");
+_LIT(KCmdLoad, "Load");
+_LIT(KCmdLoadAndCompress, "LoadAndCompress");
+_LIT(KCmdLockHeap, "LockHeap");
+_LIT(KCmdLockHeapLC, "LockHeapLC");
+_LIT(KCmdPaletteAttributes, "PaletteAttributes");
+_LIT(KCmdReset, "Reset");
+_LIT(KCmdResize, "Resize");
+_LIT(KCmdSave, "Save");
+_LIT(KCmdScanLineLength, "ScanLineLength");
+_LIT(KCmdSetDisplayMode, "SetDisplayMode");
+_LIT(KCmdSetPalette, "SetPalette");
+_LIT(KCmdSetRomBitmapL, "SetRomBitmapL");
+_LIT(KCmdSetScanLine, "SetScanLine");
+_LIT(KCmdSetSizeInTwips, "SetSizeInTwips");
+_LIT(KCmdSizeInPixels, "SizeInPixels");
+_LIT(KCmdSizeInTwips, "SizeInTwips");
+_LIT(KCmdStoreL, "StoreL");
+_LIT(KCmdSwapWidthAndHeight, "SwapWidthAndHeight");
+_LIT(KCmdUnlockHeap, "UnlockHeap");
+_LIT(KCmdVerticalPixelsToTwips, "VerticalPixelsToTwips");
+_LIT(KCmdVerticalTwipsToPixels, "VerticalTwipsToPixels");
+
+//?? SetRomBitmapL
+// Begin
+// End
+// GetDecompressionBuffer
+// GetAllBitmapHandles
+/*@}*/
+
+/**
+* Two phase constructor
+*/
+CT_DataFbsBitmap* CT_DataFbsBitmap::NewL()
+ {
+ CT_DataFbsBitmap* ret = new (ELeave) CT_DataFbsBitmap();
+ CleanupStack::PushL(ret);
+ ret->ConstructL();
+ CleanupStack::Pop(ret);
+ return ret;
+ }
+
+/**
+* Protected constructor. First phase construction
+*/
+CT_DataFbsBitmap::CT_DataFbsBitmap()
+: CDataWrapperBase()
+, iFbsBitmap(NULL)
+, iDisplayMode(ENone)
+, iPopWhenUnlocking(EFalse)
+, iCompressFailed(EFalse)
+, iActiveCompressInBackground(NULL)
+ {
+ }
+
+/**
+* Protected constructor. Second phase construction
+*/
+void CT_DataFbsBitmap::ConstructL()
+ {
+ iActiveCompressInBackground=CActiveCallback::NewL(*this);
+ }
+
+/**
+* Destructor.
+*/
+CT_DataFbsBitmap::~CT_DataFbsBitmap()
+ {
+ DestroyData();
+ delete iActiveCompressInBackground;
+ iActiveCompressInBackground=NULL;
+ }
+
+/**
+* Contains cleanup implementation
+*/
+void CT_DataFbsBitmap::DestroyData()
+ {
+ delete iFbsBitmap;
+ iFbsBitmap=NULL;
+ }
+
+/**
+* Return a pointer to the object that the data wraps
+*
+* @return pointer to the object that the data wraps
+*/
+TAny* CT_DataFbsBitmap::GetObject()
+ {
+ return iFbsBitmap;
+ }
+
+void CT_DataFbsBitmap::SetObjectL(TAny* aAny)
+ {
+ DestroyData();
+ iFbsBitmap=static_cast<CFbsBitmap*> (aAny);
+ }
+
+void CT_DataFbsBitmap::DisownObjectL()
+ {
+ iFbsBitmap=NULL;
+ }
+
+CFbsBitmap* CT_DataFbsBitmap::GetFbsBitmap() const
+ {
+ return iFbsBitmap;
+ }
+
+/**
+* Process a command read from the ini file
+*
+* @param aDataWrapper test step requiring command to be processed
+* @param aCommand the command to process
+* @param aSection the entry in the ini file requiring the command to be processed
+*
+* @return ETrue if the command is processed
+*/
+TBool CT_DataFbsBitmap::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+ {
+ TBool retVal = ETrue;
+
+ if (aCommand == KCmdNew)
+ {
+ DoCmdNewL();
+ }
+ else if (aCommand == KCmdDestructor)
+ {
+ DoCmdDestructor();
+ }
+ else if (aCommand == KCmdCompress)
+ {
+ DoCmdCompress(aSection);
+ }
+ else if (aCommand == KCmdCompressInBackground)
+ {
+ DoCmdCompressInBackground(aSection, aAsyncErrorIndex);
+ }
+ else if (aCommand == KCmdCreate)
+ {
+ DoCmdCreate(aSection);
+ }
+ else if (aCommand == KCmdCreateHardwareBitmap)
+ {
+ DoCmdCreateHardwareBitmap(aSection);
+ }
+ else if (aCommand == KCmdDataAddress)
+ {
+ DoCmdDataAddress(aSection);
+ }
+ else if (aCommand == KCmdDataStride)
+ {
+ DoCmdDataStride(aSection);
+ }
+ else if (aCommand == KCmdDisplayMode)
+ {
+ DoCmdDisplayMode(aSection);
+ }
+ else if (aCommand == KCmdDuplicate)
+ {
+ DoCmdDuplicateL(aSection);
+ }
+ else if (aCommand == KCmdExternalizeL)
+ {
+ DoCmdExternalizeL(aSection);
+ }
+ else if (aCommand == KCmdExternalizeRectangleL)
+ {
+ DoCmdExternalizeRectangleL(aSection);
+ }
+ else if (aCommand == KCmdGetPalette)
+ {
+ DoCmdGetPaletteL(aSection);
+ }
+ else if (aCommand == KCmdGetPixel)
+ {
+ DoCmdGetPixel(aSection);
+ }
+ else if (aCommand == KCmdGetScanLine)
+ {
+ DoCmdGetScanLineL(aSection);
+ }
+ else if (aCommand == KCmdGetVerticalScanLine)
+ {
+ DoCmdGetVerticalScanLineL(aSection);
+ }
+ else if (aCommand == KCmdHandle)
+ {
+ DoCmdHandle(aSection);
+ }
+ else if (aCommand == KCmdHardwareBitmapHandle)
+ {
+ DoCmdHardwareBitmapHandle(aSection);
+ }
+ else if (aCommand == KCmdHeader)
+ {
+ DoCmdHeader();
+ }
+ else if (aCommand == KCmdHorizontalPixelsToTwips)
+ {
+ DoCmdHorizontalPixelsToTwips(aSection);
+ }
+ else if (aCommand == KCmdHorizontalTwipsToPixels)
+ {
+ DoCmdHorizontalTwipsToPixels(aSection);
+ }
+ else if (aCommand == KCmdInitialDisplayMode)
+ {
+ DoCmdInitialDisplayMode(aSection);
+ }
+ else if (aCommand == KCmdInternalizeL)
+ {
+ DoCmdInternalizeL(aSection);
+ }
+ else if (aCommand == KCmdIsCompressedInRAM)
+ {
+ DoCmdIsCompressedInRAM(aSection);
+ }
+ else if (aCommand == KCmdIsFileInRom)
+ {
+ DoCmdIsFileInRom(aSection);
+ }
+ else if (aCommand == KCmdIsLargeBitmap)
+ {
+ DoCmdIsLargeBitmap(aSection);
+ }
+ else if (aCommand == KCmdIsMonochrome)
+ {
+ DoCmdIsMonochrome(aSection);
+ }
+ else if (aCommand == KCmdIsRomBitmap)
+ {
+ DoCmdIsRomBitmap(aSection);
+ }
+ else if (aCommand == KCmdLoad)
+ {
+ DoCmdLoadL(aSection);
+ }
+ else if (aCommand == KCmdLoadAndCompress)
+ {
+ DoCmdLoadAndCompressL(aSection);
+ }
+ else if (aCommand == KCmdLockHeap)
+ {
+ DoCmdLockHeap(aSection);
+ }
+ else if (aCommand == KCmdLockHeapLC)
+ {
+ DoCmdLockHeapLC(aSection);
+ }
+ else if (aCommand == KCmdPaletteAttributes)
+ {
+ DoCmdPaletteAttributes(aSection);
+ }
+ else if (aCommand == KCmdReset)
+ {
+ DoCmdReset();
+ }
+ else if (aCommand == KCmdResize)
+ {
+ DoCmdResize(aSection);
+ }
+ else if (aCommand == KCmdSave)
+ {
+ DoCmdSave(aSection);
+ }
+ else if (aCommand == KCmdScanLineLength)
+ {
+ DoCmdScanLineLength(aSection);
+ }
+ else if (aCommand == KCmdSetDisplayMode)
+ {
+ DoCmdSetDisplayMode(aSection);
+ }
+ else if (aCommand == KCmdSetPalette)
+ {
+ DoCmdSetPaletteL(aSection);
+ }
+ else if (aCommand == KCmdSetRomBitmapL)
+ {
+ DoCmdSetRomBitmapL(aSection);
+ }
+ else if (aCommand == KCmdSetScanLine)
+ {
+ DoCmdSetScanLineL(aSection);
+ }
+ else if (aCommand == KCmdSetSizeInTwips)
+ {
+ DoCmdSetSizeInTwipsL(aSection);
+ }
+ else if (aCommand == KCmdSizeInPixels)
+ {
+ DoCmdSizeInPixels(aSection);
+ }
+ else if (aCommand == KCmdSizeInTwips)
+ {
+ DoCmdSizeInTwips(aSection);
+ }
+ else if (aCommand == KCmdStoreL)
+ {
+ DoCmdStoreL(aSection);
+ }
+ else if (aCommand == KCmdSwapWidthAndHeight)
+ {
+ DoCmdSwapWidthAndHeight();
+ }
+ else if (aCommand == KCmdUnlockHeap)
+ {
+ DoCmdUnlockHeapL(aSection);
+ }
+ else if (aCommand == KCmdVerticalPixelsToTwips)
+ {
+ DoCmdVerticalPixelsToTwips(aSection);
+ }
+ else if (aCommand == KCmdVerticalTwipsToPixels)
+ {
+ DoCmdVerticalTwipsToPixels(aSection);
+ }
+ else if (aCommand == KCmdDisown)
+ {
+ DisownObjectL();
+ }
+ else
+ {
+ retVal=EFalse;
+ }
+
+ return retVal;
+ }
+
+
+/** Creates new CFbsBitmap class instance */
+void CT_DataFbsBitmap::DoCmdNewL()
+ {
+ INFO_PRINTF1(_L("Creates new CFbsBitmap class instance"));
+
+ // cleanup if already created
+ DestroyData();
+ iFbsBitmap=new (ELeave) CFbsBitmap();
+ }
+
+/** Calls static CFbsBitmap destructor */
+void CT_DataFbsBitmap::DoCmdDestructor()
+ {
+ DestroyData();
+ }
+
+/** Calls CFbsBitmap::Compress() */
+void CT_DataFbsBitmap::DoCmdCompress(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::Compress()"));
+
+ TInt err=KErrNone;
+ TBitmapfileCompressionScheme compressionScheme;
+ if ( CT_GraphicsUtil::ReadBitmapfileCompressionScheme(*this, aSection, KBitmapfileCompressionScheme(), compressionScheme) )
+ {
+ err=GetFbsBitmap()->Compress(compressionScheme);
+ }
+ else
+ {
+ // call Compress()
+ err=GetFbsBitmap()->Compress();
+ }
+ // check error code
+ if ( err!=KErrNone )
+ {
+ ERR_PRINTF2(_L("Compress error: %d"), err);
+ SetError(err);
+ iCompressFailed = ETrue;
+ }
+ else
+ {
+ iCompressFailed = EFalse;
+ };
+ }
+
+/** Calls CFbsBitmap::CompressInBackground() */
+void CT_DataFbsBitmap::DoCmdCompressInBackground(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::CompressInBackground()"));
+
+ // get a flag if to use requset status from parameters
+ TBool useRequestStatus = EFalse;
+ GetBoolFromConfig(aSection, KUseRequestStatus(), useRequestStatus);
+
+ TBitmapfileCompressionScheme compressionScheme;
+ TBool hasCompressionScheme=CT_GraphicsUtil::ReadBitmapfileCompressionScheme(*this, aSection, KBitmapfileCompressionScheme(), compressionScheme);
+
+ // call CompressInBackground()
+ if ( useRequestStatus )
+ {
+ if ( hasCompressionScheme )
+ {
+ GetFbsBitmap()->CompressInBackground(iActiveCompressInBackground->iStatus, compressionScheme);
+ }
+ else
+ {
+ GetFbsBitmap()->CompressInBackground(iActiveCompressInBackground->iStatus);
+ }
+ iActiveCompressInBackground->Activate(aAsyncErrorIndex);
+ IncOutstanding();
+ }
+ else
+ {
+ TInt err = KErrNone;
+
+ if ( hasCompressionScheme )
+ {
+ err=GetFbsBitmap()->CompressInBackground(compressionScheme);
+ }
+ else
+ {
+ err=GetFbsBitmap()->CompressInBackground();
+ }
+
+ // check error code
+ if ( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("Compress in background error: %d"), err);
+ SetError(err);
+ iCompressFailed = ETrue;
+ }
+ else
+ {
+ iCompressFailed = EFalse;
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::Create() */
+void CT_DataFbsBitmap::DoCmdCreate(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::Create()"));
+
+ // get size height from parameters
+ TInt height;
+ if(!GetIntFromConfig(aSection, KHeight(), height))
+ {
+ ERR_PRINTF2(_L("No %S"), &KHeight());
+ SetBlockResult(EFail);
+ }
+
+ // get size width from parameters
+ TInt width;
+ if(!GetIntFromConfig(aSection, KWidth(), width))
+ {
+ ERR_PRINTF2(_L("No %S"), &KWidth());
+ SetBlockResult(EFail);
+ }
+
+ // get display mode from parameters
+
+ TDisplayMode displayMode;
+ if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+ {
+ ERR_PRINTF1(_L("No display mode"));
+ SetBlockResult(EFail);
+ }
+ else
+ {
+ // call Create()
+ TInt err = GetFbsBitmap()->Create(TSize(width, height), displayMode);
+
+ // check error code
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Creation error: %d"), err);
+ SetError(err);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::CreateHardwareBitmap() */
+void CT_DataFbsBitmap::DoCmdCreateHardwareBitmap(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::CreateHardwareBitmap()"));
+
+ // get size height from parameters
+ TInt height;
+ if(!GetIntFromConfig(aSection, KHeight(), height))
+ {
+ ERR_PRINTF2(_L("No %S"), &KHeight());
+ SetBlockResult(EFail);
+ }
+
+ // get size width from parameters
+ TInt width;
+ if(!GetIntFromConfig(aSection, KWidth(), width))
+ {
+ ERR_PRINTF2(_L("No %S"), &KWidth());
+ SetBlockResult(EFail);
+ }
+
+ // get display mode from parameters
+ TDisplayMode displayMode;
+ if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+ {
+ ERR_PRINTF1(_L("No display mode"));
+ SetBlockResult(EFail);
+ }
+
+ // get application uid from parameters
+ TInt uidInt;
+ if(!GetIntFromConfig(aSection, KUid(), uidInt))
+ {
+ ERR_PRINTF2(_L("No %S"), &KUid());
+ SetBlockResult(EFail);
+ }
+
+ // call Create()
+ TInt err = GetFbsBitmap()->CreateHardwareBitmap(TSize(width, height), displayMode, TUid::Uid(uidInt));
+
+ // check error code
+ if ( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("Hardware bitmap creation error: %d"), err);
+ SetError(err);
+ }
+ }
+
+/** Calls CFbsBitmap::DataAddress() locking and unlocking heap by defined in parameters means */
+void CT_DataFbsBitmap::DoCmdDataAddress(const TDesC& aSection)
+ {
+ // call DataAddress()
+ TUint32* address=GetFbsBitmap()->DataAddress();
+ INFO_PRINTF2(_L("DataAddress %d"), address);
+
+ // validate returned value if needed
+ TInt expectedValue;
+ if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+ {
+ if (expectedValue != (TInt)address)
+ {
+ ERR_PRINTF1(_L("The returned value is not as expected"));
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::DataStride() */
+void CT_DataFbsBitmap::DoCmdDataStride(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::DataStride()"));
+
+ // call DataStride()
+ TInt value = GetFbsBitmap()->DataStride();
+ INFO_PRINTF2(_L("Data stride: %d"), value);
+
+ // validate returned value if needed
+ TInt expectedValue;
+ if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+ {
+ if (expectedValue != value)
+ {
+ ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
+ SetBlockResult(EFail);
+ }
+ }
+
+ // check the value is not NULL
+ if (value <= 0)
+ {
+ ERR_PRINTF2(_L("The data stride is not expected zero or less, value: %d"), value);
+ SetBlockResult(EFail);
+ }
+ }
+
+/** Checks CFbsBitmap::DisplayMode() value */
+void CT_DataFbsBitmap::DoCmdDisplayMode(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Checks CFbsBitmap::DisplayMode() value"));
+
+ // call DisplayMode()
+ iDisplayMode=GetFbsBitmap()->DisplayMode();
+ INFO_PRINTF2(_L("Display Mode %d"), iDisplayMode);
+
+ // get display mode from parameters
+ TDisplayMode expectedValue;
+ if ( CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), expectedValue) )
+ {
+ // check value against NULL
+ if ( iDisplayMode!=expectedValue )
+ {
+ ERR_PRINTF3(_L("The value is not as expected! expected: %d, actual: %d"), expectedValue, iDisplayMode);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::Duplicate() */
+void CT_DataFbsBitmap::DoCmdDuplicateL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::Duplicate()"));
+ TInt handle=GetHandle();
+ TPtrC objectName;
+ if ( GetStringFromConfig(aSection, KFbsBitmapName(), objectName) )
+ {
+ CDataWrapperBase* wrapper=static_cast<CDataWrapperBase*>(GetDataWrapperL(objectName));
+ handle=wrapper->GetHandle();
+ }
+ else
+ {
+ GetIntFromConfig(aSection, KHandle(), handle);
+ }
+
+ // call Duplicate()
+ TInt err = GetFbsBitmap()->Duplicate(handle);
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Duplicate error: %d"), err);
+ SetError(err);
+ }
+ }
+
+/** Calls CFbsBitmap::ExternalizeL() */
+void CT_DataFbsBitmap::DoCmdExternalizeL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::ExternalizeL()"));
+ ExternalizeImplL(aSection, TRect(), EFalse);
+ }
+
+/** Calls CFbsBitmap::ExternalizeRectangleL() */
+void CT_DataFbsBitmap::DoCmdExternalizeRectangleL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::ExternalizeRectangleL()"));
+
+ // get rectangle top left x-coordinate from parameters
+ TInt tlx;
+ if(!GetIntFromConfig(aSection, KRectTlX(), tlx))
+ {
+ ERR_PRINTF2(_L("No %S"), &KRectTlX());
+ SetBlockResult(EFail);
+ }
+
+ // get rectangle top left x-coordinate from parameters
+ TInt tly;
+ if(!GetIntFromConfig(aSection, KRectTlY(), tly))
+ {
+ ERR_PRINTF2(_L("No %S"), &KRectTlY());
+ SetBlockResult(EFail);
+ }
+
+ // get rectangle top left x-coordinate from parameters
+ TInt brx;
+ if(!GetIntFromConfig(aSection, KRectBrX(), brx))
+ {
+ ERR_PRINTF2(_L("No %S"), &KRectBrX());
+ SetBlockResult(EFail);
+ }
+
+ // get rectangle top left x-coordinate from parameters
+ TInt bry;
+ if(!GetIntFromConfig(aSection, KRectBrY(), bry))
+ {
+ ERR_PRINTF2(_L("No %S"), &KRectBrY());
+ SetBlockResult(EFail);
+ }
+
+ ExternalizeImplL(aSection, TRect(tlx, tly, brx, bry), ETrue);
+ }
+
+/** Calls CFbsBitmap::GetPalette() */
+void CT_DataFbsBitmap::DoCmdGetPaletteL(const TDesC& aSection)
+ {
+ // call GetPalette()
+ CPalette* palette = NULL;
+ TInt err = GetFbsBitmap()->GetPalette(palette);
+ INFO_PRINTF2(_L("Calls CFbsBitmap::GetPalette() %d"), palette);
+
+ // check error code
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("GetPalette error: %d"), err);
+ SetError(err);
+ }
+ else
+ {
+ // Verify palette
+ CPalette* expectedPalette = NULL;
+
+ if ( CT_GraphicsUtil::GetPaletteL(*this, aSection, KPalette(), expectedPalette) )
+ {
+ if ( palette != expectedPalette )
+ {
+ ERR_PRINTF3(_L("GetPalette palette %d not the expected palette %d"), palette, expectedPalette);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::GetPixel() */
+void CT_DataFbsBitmap::DoCmdGetPixel(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::GetPixel()"));
+
+ // get point x-coordinate from parameters
+ TInt pointX;
+ if(!GetIntFromConfig(aSection, KPointX(), pointX))
+ {
+ ERR_PRINTF2(_L("No %S"), &KPointX());
+ SetBlockResult(EFail);
+ }
+
+ // get point y-coordinate from parameters
+ TInt pointY;
+ if(!GetIntFromConfig(aSection, KPointY(), pointY))
+ {
+ ERR_PRINTF2(_L("No %S"), &KPointY());
+ SetBlockResult(EFail);
+ }
+
+ // call GetPixel()
+ TRgb color;
+ GetFbsBitmap()->GetPixel(color, TPoint(pointX, pointY));
+
+ INFO_PRINTF2(_L("Red %d"), color.Red());
+ INFO_PRINTF2(_L("Green %d"), color.Green());
+ INFO_PRINTF2(_L("Blue %d"), color.Blue());
+
+ TInt actual;
+ TInt expected;
+
+ if(GetIntFromConfig(aSection, KRed(), expected))
+ {
+ actual=color.Red();
+ if ( expected != actual )
+ {
+ ERR_PRINTF3(_L("Expected Red %d does not match actual %d"), expected, actual);
+ SetBlockResult(EFail);
+ }
+ }
+
+ if(GetIntFromConfig(aSection, KGreen(), expected))
+ {
+ actual=color.Green();
+ if ( expected != actual )
+ {
+ ERR_PRINTF3(_L("Expected Green %d does not match actual %d"), expected, actual);
+ SetBlockResult(EFail);
+ }
+ }
+
+ if(GetIntFromConfig(aSection, KBlue(), expected))
+ {
+ actual=color.Blue();
+ if ( expected != actual )
+ {
+ ERR_PRINTF3(_L("Expected Blue %d does not match actual %d"), expected, actual);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::GetScanLine() */
+void CT_DataFbsBitmap::DoCmdGetScanLineL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::GetScanLine()"));
+ TBool dataOk=ETrue;
+
+ // get point x coordinate from parameters
+ TInt pointX = 0;
+ if(!GetIntFromConfig(aSection, KPointX(), pointX))
+ {
+ ERR_PRINTF2(_L("No %S"), &KPointX());
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ // get point y coordinate from parameters
+ TInt pointY = 0;
+ if(!GetIntFromConfig(aSection, KPointY(), pointY))
+ {
+ ERR_PRINTF2(_L("No %S"), &KPointY());
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ // get length from parameters
+ TInt length = 0;
+ if(!GetIntFromConfig(aSection, KLength(), length))
+ {
+ ERR_PRINTF2(_L("No %S"), &KLength());
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ // get buffer length from parameters
+ TInt buffLength = 0;
+ if(!GetIntFromConfig(aSection, KBuffLength(), buffLength))
+ {
+ ERR_PRINTF2(_L("No %S"), &KBuffLength());
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ // get display mode from parameters
+ TDisplayMode displayMode;
+ if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+ {
+ ERR_PRINTF1(_L("No display mode"));
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ if ( dataOk )
+ {
+ // call GetScanLine()
+ TUint8* buffer = new (ELeave) TUint8[buffLength];
+ TPtr8 scanline(buffer, buffLength, buffLength);
+
+ GetFbsBitmap()->GetScanLine(scanline, TPoint(pointX, pointY), length, displayMode);
+
+ delete [] buffer;
+ }
+ }
+
+/** Calls CFbsBitmap::GetVerticalScanLine() */
+void CT_DataFbsBitmap::DoCmdGetVerticalScanLineL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::GetVerticalScanLine()"));
+ TBool dataOk=ETrue;
+
+ // get point x coordinate from parameters
+ TInt pointX = 0;
+ if(!GetIntFromConfig(aSection, KPointX(), pointX))
+ {
+ ERR_PRINTF2(_L("No %S"), &KPointX());
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ // get if to use dither offset flag from parameters
+ TBool useDitherOffset = EFalse;
+ if(!GetBoolFromConfig(aSection, KUseDitherOffset(), useDitherOffset))
+ {
+ ERR_PRINTF2(_L("No %S"), &KUseDitherOffset());
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ // get dither offset x coordinate from parameters
+ TInt ditherOffsetX = 0;
+ if(useDitherOffset && !GetIntFromConfig(aSection, KDitherOffsetX(), ditherOffsetX))
+ {
+ ERR_PRINTF2(_L("No %S"), &KDitherOffsetX());
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ // get dither offset y coordinate from parameters
+ TInt ditherOffsetY = 0;
+ if(useDitherOffset && !GetIntFromConfig(aSection, KDitherOffsetY(), ditherOffsetY))
+ {
+ ERR_PRINTF2(_L("No %S"), &KDitherOffsetY());
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ // get buffer length from parameters
+ TInt buffLength = 0;
+ if(!GetIntFromConfig(aSection, KBuffLength(), buffLength))
+ {
+ ERR_PRINTF2(_L("No %S"), &KBuffLength());
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ // get display mode from parameters
+ TDisplayMode displayMode;
+ if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+ {
+ ERR_PRINTF1(_L("No display mode"));
+ SetBlockResult(EFail);
+ dataOk=EFalse;
+ }
+
+ if ( dataOk )
+ {
+ // call GetVerticalScanLine()
+ TUint8* buffer = new (ELeave) TUint8[buffLength];
+ TPtr8 scanline(buffer, buffLength, buffLength);
+
+ if (useDitherOffset)
+ {
+ GetFbsBitmap()->GetVerticalScanLine(scanline, pointX, displayMode);
+ }
+ else
+ {
+ GetFbsBitmap()->GetVerticalScanLine(scanline, pointX, TPoint(ditherOffsetX, ditherOffsetY), displayMode);
+ }
+
+ delete [] buffer;
+ }
+ }
+
+/** Calls CFbsBitmap::Handle() */
+void CT_DataFbsBitmap::DoCmdHandle(const TDesC& aSection)
+ {
+
+ // call Handle()
+ TInt handle=GetFbsBitmap()->Handle();
+ INFO_PRINTF2(_L("Calls CFbsBitmap::Handle() %d"), handle);
+ SetHandle(handle);
+
+ // validate returned value if needed
+ TInt expectedValue;
+ if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+ {
+ if (expectedValue != handle)
+ {
+ ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, handle);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Checks CFbsBitmap::HardwareBitmapHandle() */
+void CT_DataFbsBitmap::DoCmdHardwareBitmapHandle(const TDesC& aSection)
+ {
+ // call HardwareBitmapHandle()
+ TInt handle=GetFbsBitmap()->HardwareBitmapHandle();
+ INFO_PRINTF2(_L("CFbsBitmap::HardwareBitmapHandle() %d"), handle);
+ SetHandle(handle);
+
+ // get if null expected flag from parameters
+ TBool nullExpected = EFalse;
+ if ( GetBoolFromConfig(aSection, KNullExpected(), nullExpected) )
+ {
+ // check value againts NULL
+ if ( (handle == NULL) != nullExpected )
+ {
+ ERR_PRINTF2(_L("The value is not as expected! value: %d"), handle);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::Header() */
+void CT_DataFbsBitmap::DoCmdHeader()
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::Header()"));
+
+ // call Header()
+ SEpocBitmapHeader header=GetFbsBitmap()->Header();
+ INFO_PRINTF2(_L("Header iBitmapSize &d"), header.iBitmapSize);
+ INFO_PRINTF2(_L("Header iBitsPerPixel &d"), header.iBitsPerPixel);
+ INFO_PRINTF2(_L("Header iColor &d"), header.iColor);
+ INFO_PRINTF2(_L("Header iCompression &d"), header.iCompression);
+ INFO_PRINTF2(_L("Header iPaletteEntries &d"), header.iPaletteEntries);
+ INFO_PRINTF3(_L("Header iSizeInPixels &d %d"), header.iSizeInPixels.iWidth, header.iSizeInPixels.iHeight);
+ INFO_PRINTF3(_L("Header iSizeInTwips &d %d"), header.iSizeInTwips.iWidth, header.iSizeInTwips.iHeight);
+ INFO_PRINTF2(_L("Header iStructSize &d"), header.iStructSize);
+ }
+
+/** Calls CFbsBitmap::HorizontalPixelsToTwips() */
+void CT_DataFbsBitmap::DoCmdHorizontalPixelsToTwips(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::HorizontalPixelsToTwips()"));
+
+ // get pixels from parameters
+ TInt pixels;
+ if(!GetIntFromConfig(aSection, KPixels(), pixels))
+ {
+ ERR_PRINTF2(_L("No %S"), &KPixels());
+ SetBlockResult(EFail);
+ }
+
+ // call HorizontalPixelsToTwips()
+ TInt value = GetFbsBitmap()->HorizontalPixelsToTwips(pixels);
+ INFO_PRINTF2(_L("Twips: %d"), value);
+
+ // validate returned value if needed
+ TInt expectedValue;
+ if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+ {
+ if (expectedValue != value)
+ {
+ ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::HorizontalTwipsToPixels() */
+void CT_DataFbsBitmap::DoCmdHorizontalTwipsToPixels(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::HorizontalTwipsToPixels()"));
+
+ // get twips from parameters
+ TInt twips;
+ if(!GetIntFromConfig(aSection, KTwips(), twips))
+ {
+ ERR_PRINTF2(_L("No %S"), &KTwips());
+ SetBlockResult(EFail);
+ }
+
+ // call HorizontalTwipsToPixels()
+ TInt value = GetFbsBitmap()->HorizontalTwipsToPixels(twips);
+ INFO_PRINTF2(_L("Pixels: %d"), value);
+
+ // validate returned value if needed
+ TInt expectedValue;
+ if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+ {
+ if (expectedValue != value)
+ {
+ ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Checks CFbsBitmap::InitialDisplayMode() value */
+void CT_DataFbsBitmap::DoCmdInitialDisplayMode(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Checks CFbsBitmap::InitialDisplayMode() value"));
+
+ // call InitialDisplayMode()
+ TInt actualValue = GetFbsBitmap()->InitialDisplayMode();
+ INFO_PRINTF2(_L("Initial Display Mode %d"), actualValue);
+
+ // get display mode from parameters
+ TDisplayMode expectedValue;
+ if ( CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), expectedValue) )
+ {
+ // check value againts NULL
+ if (actualValue != expectedValue)
+ {
+ ERR_PRINTF3(_L("The value is not as expected! expecyed: %d, actual: %d"), expectedValue, actualValue);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::InternalizeL() */
+void CT_DataFbsBitmap::DoCmdInternalizeL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::InternalizeL()"));
+
+ // get file name from parameters
+ TPtrC fileName;
+ if (!GetStringFromConfig(aSection, KFileName(), fileName))
+ {
+ ERR_PRINTF2(_L("No %S"), &KFileName());
+ SetBlockResult(EFail);
+ }
+
+ // get a flag if to use closed stream from parameters
+ TBool useClosedStream = EFalse;
+ if(!GetBoolFromConfig(aSection, KUseClosedStream(), useClosedStream))
+ {
+ ERR_PRINTF2(_L("No %S"), &KUseClosedStream());
+ SetBlockResult(EFail);
+ }
+
+ // ReadStore creation
+ CDirectFileStore* readstore = CDirectFileStore::OpenL(FileServer(), fileName, EFileStream | EFileRead);
+ CleanupStack::PushL(readstore);
+ TInt popCount=1;
+ TStreamId headerid = readstore->Root();
+ RStoreReadStream readstrm;
+
+ // close stream if defined by parameters
+ if (!useClosedStream)
+ {
+ readstrm.OpenL(*readstore, headerid);
+ CleanupClosePushL(readstrm);
+ popCount=2;
+ }
+
+ // call InternalizeL()
+ TRAPD(err, GetFbsBitmap()->InternalizeL(readstrm));
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Internalize error: %d"), err);
+ SetError(err);
+ }
+
+ // cleanup
+ CleanupStack::PopAndDestroy(popCount, readstore);
+ }
+
+/** Calls CFbsBitmap::IsCompressedInRAM() to check againt expected value */
+void CT_DataFbsBitmap::DoCmdIsCompressedInRAM(const TDesC& aSection)
+ {
+ // call IsCompressedInRAM() to get actual value
+ TBool actualValue = GetFbsBitmap()->IsCompressedInRAM();
+ INFO_PRINTF2(_L("CFbsBitmap::IsCompressedInRAM() %d"), actualValue);
+
+ // get expected value from parameters
+ TBool expectedValue = EFalse;
+ if ( GetBoolFromConfig(aSection, KExpectedBool(), expectedValue) )
+ {
+ if (actualValue != expectedValue)
+ {
+ ERR_PRINTF3(_L("Expected value doesn't match to actual! expected: %d, actual: %d"), expectedValue, actualValue);
+ if (!iCompressFailed)
+ {
+ SetBlockResult(EFail);
+ };
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::IsFileInRom() and check against expectation */
+void CT_DataFbsBitmap::DoCmdIsFileInRom(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::IsFileInRom() and check against expectation"));
+
+ // get file name from parameters
+
+ TPtrC fileName;
+ if ( !GetStringFromConfig(aSection, KFileName(), fileName) )
+ {
+ ERR_PRINTF2(_L("No %S"), &KFileName());
+ SetBlockResult(EFail);
+ }
+
+ // get flag if use RFile instance in Save() call from parameters
+ TBool useRFile = EFalse;
+ GetBoolFromConfig(aSection, KUseRFile(), useRFile);
+
+ TInt err = KErrNone;
+ TBool isFileInRom = EFalse;
+ TUint32* addressInRom = NULL;
+ if (useRFile)
+ {
+ // open rfile
+ RFile file;
+ err = file.Open(FileServer(), fileName, EFileShareReadersOnly);
+
+ // check if failed to open file
+ if ( err != KErrNone )
+ {
+ ERR_PRINTF2(_L("File open error: %d"), err);
+ SetBlockResult(EFail);
+ }
+ else
+ {
+ // call IsFileInRom()
+ isFileInRom = CFbsBitmap::IsFileInRom(file, addressInRom);
+
+ // close rfile
+ file.Close();
+ }
+ }
+ else
+ {
+ isFileInRom = CFbsBitmap::IsFileInRom(fileName, addressInRom);
+ }
+
+ // get expected value if is in ROM from parameters
+ TBool expectedIsFileInRom = EFalse;
+ if ( GetBoolFromConfig(aSection, KExpectedBool(), expectedIsFileInRom) )
+ {
+ // check the expectation
+ if (expectedIsFileInRom != isFileInRom)
+ {
+ ERR_PRINTF3(_L("The value is not as expected! expected: %d, actual: %d"), expectedIsFileInRom, isFileInRom);
+ SetBlockResult(EFail);
+ }
+ }
+
+ // check that address is not null if in rom
+ if ( isFileInRom && addressInRom == NULL )
+ {
+ ERR_PRINTF1(_L("The file is in ROM but returned address is NULL"));
+ SetBlockResult(EFail);
+ }
+ }
+
+/** Calls CFbsBitmap::IsLargeBitmap() */
+void CT_DataFbsBitmap::DoCmdIsLargeBitmap(const TDesC& aSection)
+ {
+ // call IsLargeBitmap()
+ TBool value = GetFbsBitmap()->IsLargeBitmap();
+ INFO_PRINTF2(_L("Is large bitmap: %d"), value);
+
+ // validate returned value if needed
+ TBool expectedBool;
+ if(GetIntFromConfig(aSection, KExpectedBool(), expectedBool))
+ {
+ if (expectedBool != value)
+ {
+ ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedBool, value);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::IsMonochrome() */
+void CT_DataFbsBitmap::DoCmdIsMonochrome(const TDesC& aSection)
+ {
+
+ // call IsMonochrome()
+ TBool value = GetFbsBitmap()->IsMonochrome();
+ INFO_PRINTF2(_L("Is monochrome: %d"), value);
+
+ // validate returned value if needed
+ TBool expectedBool;
+ if(GetIntFromConfig(aSection, KExpectedBool(), expectedBool))
+ {
+ if (expectedBool != value)
+ {
+ ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedBool, value);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::IsRomBitmap() and check against expectation */
+void CT_DataFbsBitmap::DoCmdIsRomBitmap(const TDesC& aSection)
+ {
+ // call IsRomBitmap()
+ TBool actualValue = GetFbsBitmap()->IsRomBitmap();
+ INFO_PRINTF2(_L("CFbsBitmap::IsRomBitmap() %d"), actualValue);
+
+ // get expected value if is in ROM from parameters
+ TBool expectedIsRomBitmap = EFalse;
+ if ( GetBoolFromConfig(aSection, KExpectedBool(), expectedIsRomBitmap) )
+ {
+ // check the expectation
+ if (expectedIsRomBitmap != actualValue)
+ {
+ ERR_PRINTF3(_L("The value is not as expected! expected: %d, actual: %d"), expectedIsRomBitmap, actualValue);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** CFbsBitmap::Load() Call */
+void CT_DataFbsBitmap::DoCmdLoadL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("CFbsBitmap::Load() Call"));
+ LoadOrLoadAndCompressL(aSection, EFalse);
+ }
+
+/** CFbsBitmap::LoadAndCompress() Call */
+void CT_DataFbsBitmap::DoCmdLoadAndCompressL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("CFbsBitmap::LoadAndCompress() Call"));
+ LoadOrLoadAndCompressL(aSection, ETrue);
+ }
+
+/** Calls static CFbsBitmap destructor */
+void CT_DataFbsBitmap::DoCmdLockHeap(const TDesC& aSection)
+ {
+ TBool always=EFalse;
+ GetBoolFromConfig(aSection, KAlways(), always);
+ GetFbsBitmap()->LockHeap(always);
+ }
+
+/** Calls static CFbsBitmap destructor */
+void CT_DataFbsBitmap::DoCmdLockHeapLC(const TDesC& aSection)
+ {
+ TBool always=EFalse;
+ GetBoolFromConfig(aSection, KAlways(), always);
+
+ GetFbsBitmap()->LockHeapLC(always);
+ iPopWhenUnlocking=ETrue;
+ }
+
+/** Calls CFbsBitmap::PaletteAttributes() */
+void CT_DataFbsBitmap::DoCmdPaletteAttributes(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::PaletteAttributes()"));
+
+ // call PaletteAttributes()
+ TBool modifiable;
+ TInt entries;
+ GetFbsBitmap()->PaletteAttributes(modifiable, entries);
+
+ INFO_PRINTF3(_L("Modifiable: %d, Number of entries: %d"), modifiable, entries);
+
+ // validate returned value if needed
+ TBool expectedModifiable;
+ if(GetBoolFromConfig(aSection, KModifiable(), expectedModifiable))
+ {
+ if (expectedModifiable != modifiable)
+ {
+ ERR_PRINTF3(_L("The returned modifaiable value is not as expected, expected: %d, actual: %d"), expectedModifiable, modifiable);
+ SetBlockResult(EFail);
+ }
+ }
+
+ // validate returned value if needed
+ TBool expectedEntries;
+ if(GetIntFromConfig(aSection, KEntries(), expectedEntries))
+ {
+ if (expectedEntries != entries)
+ {
+ ERR_PRINTF3(_L("The returned modifaiable value is not as expected, expected: %d, actual: %d"), expectedEntries, entries);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::Reset() */
+void CT_DataFbsBitmap::DoCmdReset()
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::Reset()"));
+
+ // call Reset()
+ GetFbsBitmap()->Reset();
+ }
+
+/** Calls CFbsBitmap::Resize() */
+void CT_DataFbsBitmap::DoCmdResize(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::Resize()"));
+
+ // get size height from parameters
+ TInt height;
+ if(!GetIntFromConfig(aSection, KHeight(), height))
+ {
+ ERR_PRINTF2(_L("No %S"), &KHeight());
+ SetBlockResult(EFail);
+ }
+
+ // get size width from parameters
+ TInt width;
+ if(!GetIntFromConfig(aSection, KWidth(), width))
+ {
+ ERR_PRINTF2(_L("No %S"), &KWidth());
+ SetBlockResult(EFail);
+ }
+
+ // call Resize()
+ TInt err = GetFbsBitmap()->Resize(TSize(width, height));
+
+ // check error code
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Resize error: %d"), err);
+ SetError(err);
+ }
+ }
+
+/** Calls CFbsBitmap::Save() */
+void CT_DataFbsBitmap::DoCmdSave(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::Save()"));
+
+ // get file name from parameters
+ TPtrC fileName;
+ if (!GetStringFromConfig(aSection, KFileName(), fileName))
+ {
+ ERR_PRINTF2(_L("No %S"), &KFileName());
+ SetBlockResult(EFail);
+ }
+
+ // get flag if use RFile instance in Save() call from parameters
+ TBool useRFile = EFalse;
+ if(!GetBoolFromConfig(aSection, KUseRFile(), useRFile))
+ {
+ ERR_PRINTF2(_L("No %S"), &KUseRFile());
+ SetBlockResult(EFail);
+ }
+
+ // get flag if use RFile instance in Load() call from parameters
+ TBool useClosedRFile = EFalse;
+ if(GetBoolFromConfig(aSection, KUseClosedRFile(), useClosedRFile))
+ {
+ if (useClosedRFile && !useRFile)
+ {
+ ERR_PRINTF3(_L("Cannot use %S parameter if %S is not set to TRUE"), &KUseClosedRFile(), &KUseRFile());
+ SetBlockResult(EFail);
+ }
+ }
+
+ TInt err = KErrNone;
+ if (useRFile)
+ {
+ // required to allow file handle to be adopted by another process
+ FileServer().ShareProtected();
+
+ // open or create rfile
+ RFile file;
+
+ if (!useClosedRFile)
+ {
+ err = file.Open(FileServer(), fileName, EFileWrite);
+
+ if (err == KErrNotFound)
+ {
+ err = file.Create(FileServer(), fileName, EFileWrite);
+
+ // check if failed to create file
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("File create error: %d"), err);
+ SetBlockResult(EFail);
+ }
+ }
+ else if (err != KErrNone)
+ {
+ // if failed to open file
+ ERR_PRINTF2(_L("File open error: %d"), err);
+ SetBlockResult(EFail);
+ }
+ }
+
+ // call Save()
+ err = GetFbsBitmap()->Save(file);
+
+ // close rfile
+ file.Close();
+ }
+ else
+ {
+ err = GetFbsBitmap()->Save(fileName);
+ }
+
+ // check error code
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Save error: %d"), err);
+ SetError(err);
+ }
+ }
+
+/** Calls CFbsBitmap::ScanLineLength() */
+void CT_DataFbsBitmap::DoCmdScanLineLength(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::ScanLineLength()"));
+
+ // get length from parameters
+ TInt length = 0;
+ if(!GetIntFromConfig(aSection, KLength(), length))
+ {
+ ERR_PRINTF2(_L("No %S"), &KLength());
+ SetBlockResult(EFail);
+ }
+
+ // get display mode from parameters
+ TDisplayMode displayMode;
+ if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+ {
+ ERR_PRINTF1(_L("No display mode"));
+ SetBlockResult(EFail);
+ }
+ else
+ {
+ TInt actualValue = CFbsBitmap::ScanLineLength(length, displayMode);
+ INFO_PRINTF2(_L("CFbsBitmap::ScanLineLength() %d"), actualValue);
+
+ TInt expectedValue = 0;
+ if ( GetIntFromConfig(aSection, KExpectedInt(), expectedValue) )
+ {
+ if (actualValue != expectedValue)
+ {
+ ERR_PRINTF3(_L("Expected value doesn't match to actual! expected: %d, actual: %d"), expectedValue, actualValue);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::SetDisplayMode() */
+void CT_DataFbsBitmap::DoCmdSetDisplayMode(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::SetDisplayMode()"));
+
+ // get display mode from parameters
+ TDisplayMode displayMode;
+ if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+ {
+ ERR_PRINTF1(_L("No display mode"));
+ SetBlockResult(EFail);
+ }
+ else
+ {
+ // call SetDisplayMode()
+ TInt err = GetFbsBitmap()->SetDisplayMode(displayMode);
+
+ // check error code
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Set display mode error: %d"), err);
+ SetError(err);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::SetPalette() by previously created palette */
+void CT_DataFbsBitmap::DoCmdSetPaletteL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::SetPalette() by previously created palette"));
+
+ // get CPalette object passed as a parameter
+ CPalette* palette = NULL;
+
+ CT_GraphicsUtil::GetPaletteL(*this, aSection, KPalette(), palette);
+
+ // call SetPalette()
+ GetFbsBitmap()->SetPalette(palette);
+ }
+
+/** Calls CFbsBitmap::SetRomBitmapL() by another bitmap */
+void CT_DataFbsBitmap::DoCmdSetRomBitmapL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::SetRomBitmapL() by another bitmap"));
+
+ // get fbsBitmap passed as a parameter
+ CFbsBitmap* otherFbsBitmap=NULL;
+
+ CT_GraphicsUtil::GetFbsBitmapL(*this, aSection, KFbsBitmapName(), otherFbsBitmap);
+
+ // get romPointer. If the bitmap is ROM bitmap then Handle() returns ROM pointer
+ CBitwiseBitmap* bitmapRomAddress=NULL;
+ if ( otherFbsBitmap!=NULL )
+ {
+ bitmapRomAddress=REINTERPRET_CAST(CBitwiseBitmap*, otherFbsBitmap->Handle());
+ }
+
+ // call SetRomBitmapL()
+ TInt bitmapSizeInBytes=0;
+ TRAPD(err, GetFbsBitmap()->SetRomBitmapL(bitmapRomAddress, bitmapSizeInBytes));
+
+ // check error code
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Set ROM bitmap error: %d"), err);
+ SetError(err);
+ }
+ }
+
+/** Calls CFbsBitmap::SetScanLine() */
+void CT_DataFbsBitmap::DoCmdSetScanLineL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::SetScanLine()"));
+
+ // get scanline coordinate from parameters
+ TInt coordinate = 0;
+ if(!GetIntFromConfig(aSection, KScanLineCoord(), coordinate))
+ {
+ ERR_PRINTF2(_L("No %S"), &KScanLineCoord());
+ SetBlockResult(EFail);
+ }
+
+ // get file name from parameters
+ TPtrC fileName;
+ if (!GetStringFromConfig(aSection, KFileName(), fileName))
+ {
+ ERR_PRINTF2(_L("No %S"), &KFileName());
+ SetBlockResult(EFail);
+ }
+
+ // open file
+ RFile file;
+ User::LeaveIfError(file.Open(FileServer(), fileName, EFileRead | EFileShareAny));
+ CleanupClosePushL(file);
+
+ // get size
+ TInt size = 0;
+ User::LeaveIfError(file.Size(size));
+
+ // read file
+ HBufC8* fileDataBuff = HBufC8::NewLC(size);
+ TPtr8 fileData = fileDataBuff->Des();
+
+ User::LeaveIfError(file.Read(fileData));
+
+ GetFbsBitmap()->SetScanLine(fileData, coordinate);
+
+ CleanupStack::PopAndDestroy(2, &file); // fileDataBuff, file
+ }
+
+/** Calls CFbsBitmap::SetSizeInTwips() by size parameter */
+void CT_DataFbsBitmap::DoCmdSetSizeInTwipsL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::SetSizeInTwips()"));
+
+ // get if to NULL device pointer flag from parameters
+ TPtrC device;
+ if ( GetStringFromConfig(aSection, KDevice(), device) )
+ {
+ CFbsBitmapDevice* bitmapDevice=static_cast<CFbsBitmapDevice*>(GetDataObjectL(device));
+ GetFbsBitmap()->SetSizeInTwips(bitmapDevice);
+ }
+ else
+ {
+ // get size height from parameters
+ TInt height;
+ if(!GetIntFromConfig(aSection, KHeight(), height))
+ {
+ ERR_PRINTF2(_L("No %S"), &KHeight());
+ SetBlockResult(EFail);
+ }
+
+ // get size width from parameters
+ TInt width;
+ if(!GetIntFromConfig(aSection, KWidth(), width))
+ {
+ ERR_PRINTF2(_L("No %S"), &KWidth());
+ SetBlockResult(EFail);
+ }
+
+ // call SetSizeInTwips()
+ GetFbsBitmap()->SetSizeInTwips(TSize(width, height));
+ }
+ }
+
+/** Calls CFbsBitmap::SizeInPixels() and checks the size */
+void CT_DataFbsBitmap::DoCmdSizeInPixels(const TDesC& aSection)
+ {
+ // call SizeInTwips()
+ TSize actualSize = GetFbsBitmap()->SizeInPixels();
+ INFO_PRINTF3(_L("CFbsBitmap::SizeInPixels() height %d, width %d"), actualSize.iHeight, actualSize.iWidth);
+
+ // get size height from parameters
+ TInt height;
+ if ( GetIntFromConfig(aSection, KHeight(), height) )
+ {
+ if ( actualSize.iHeight != height )
+ {
+ ERR_PRINTF3(_L("Height mismatch expected: %d, actual: %d"), height, actualSize.iHeight);
+ SetBlockResult(EFail);
+ }
+ }
+
+ // get size width from parameters
+ TInt width;
+ if ( GetIntFromConfig(aSection, KWidth(), width) )
+ {
+ // check that value is as expected
+ if ( actualSize.iWidth != width )
+ {
+ ERR_PRINTF3(_L("Width mismatch expected: %d, actual: %d"), width, actualSize.iWidth);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::SizeInTwips() and compares the result with expected */
+void CT_DataFbsBitmap::DoCmdSizeInTwips(const TDesC& aSection)
+ {
+ // call SizeInTwips()
+ TSize actualSize = GetFbsBitmap()->SizeInTwips();
+ INFO_PRINTF3(_L("CFbsBitmap::SizeInTwips() height %d, width %d"), actualSize.iHeight, actualSize.iWidth);
+
+ // get size height from parameters
+ TInt height;
+ if ( GetIntFromConfig(aSection, KHeight(), height) )
+ {
+ if ( actualSize.iHeight != height )
+ {
+ ERR_PRINTF3(_L("Height mismatch expected: %d, actual: %d"), height, actualSize.iHeight);
+ SetBlockResult(EFail);
+ }
+ }
+
+ // get size width from parameters
+ TInt width;
+ if ( GetIntFromConfig(aSection, KWidth(), width) )
+ {
+ // check that value is as expected
+ if ( actualSize.iWidth != width )
+ {
+ ERR_PRINTF3(_L("Width mismatch expected: %d, actual: %d"), width, actualSize.iWidth);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::StoreL() */
+void CT_DataFbsBitmap::DoCmdStoreL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::StoreL()"));
+
+ TInt numberOfFiles = 0;
+ TInt numberOfBitmapIds = 0;
+ TPtrC sourceFileName1;
+ TPtrC sourceFileName2;
+ TInt sourceBitmapId0 = -1;
+ TInt sourceBitmapId1 = -1;
+ TInt sourceBitmapId2 = -1;
+
+ // get file name from parameters
+ TPtrC fileName;
+ if (!GetStringFromConfig(aSection, KFileName(), fileName))
+ {
+ ERR_PRINTF2(_L("No %S"), &KFileName());
+ SetBlockResult(EFail);
+ }
+
+ // get flag if use RFile instance in Save() call from parameters
+ TBool useRFile = EFalse;
+ if(!GetBoolFromConfig(aSection, KUseRFile(), useRFile))
+ {
+ ERR_PRINTF2(_L("No %S"), &KUseRFile());
+ SetBlockResult(EFail);
+ }
+
+ // get flag if use RFile instance in Load() call from parameters
+ TBool useClosedRFile = EFalse;
+ if(GetBoolFromConfig(aSection, KUseClosedRFile(), useClosedRFile))
+ {
+ if (useClosedRFile && !useRFile)
+ {
+ ERR_PRINTF3(_L("Cannot use %S parameter if %S is not set to TRUE"), &KUseClosedRFile(), &KUseRFile());
+ SetBlockResult(EFail);
+ }
+ }
+
+ // get up to 3 source file names from parameters
+ TPtrC sourceFileName0;
+ if (GetStringFromConfig(aSection, KSourceFileName0(), sourceFileName0))
+ {
+ numberOfFiles++;
+ if (GetStringFromConfig(aSection, KSourceFileName1(), sourceFileName1))
+ {
+ numberOfFiles++;
+ if (GetStringFromConfig(aSection, KSourceFileName2(), sourceFileName2))
+ {
+ numberOfFiles++;
+ }
+ }
+ }
+
+ // get up to 3 source bitmap ids from parameters
+ if (GetIntFromConfig(aSection, KSourceBitmapId0(), sourceBitmapId0))
+ {
+ numberOfBitmapIds++;
+ if (GetIntFromConfig(aSection, KSourceBitmapId1(), sourceBitmapId1))
+ {
+ numberOfBitmapIds++;
+ if (GetIntFromConfig(aSection, KSourceBitmapId2(), sourceBitmapId2))
+ {
+ numberOfBitmapIds++;
+ }
+ }
+ }
+
+ // get number of sources argument from parameters
+ TInt numberOfSources;
+ if(!GetIntFromConfig(aSection, KNumberOfSources(), numberOfSources))
+ {
+ ERR_PRINTF2(_L("No %S"), &KNumberOfSources());
+ SetBlockResult(EFail);
+ }
+
+ // create array of file names
+ TFileName** sourceFiles = new (ELeave) TFileName*[numberOfFiles];
+ CleanupStack::PushL(sourceFiles);
+ if (numberOfFiles > 0) sourceFiles[0] = new (ELeave) TFileName(sourceFileName0);
+ if (numberOfFiles > 1) sourceFiles[1] = new (ELeave) TFileName(sourceFileName1);
+ if (numberOfFiles > 2) sourceFiles[2] = new (ELeave) TFileName(sourceFileName2);
+
+ // create array of bitmap ids
+ TInt32* bitmapIds = new (ELeave) TInt32[numberOfBitmapIds];
+ CleanupStack::PushL(bitmapIds);
+
+ if (numberOfBitmapIds > 0) bitmapIds[0] = sourceBitmapId0;
+ if (numberOfBitmapIds > 1) bitmapIds[1] = sourceBitmapId1;
+ if (numberOfBitmapIds > 2) bitmapIds[2] = sourceBitmapId2;
+
+ TInt err = KErrNone;
+ if (useRFile)
+ {
+ // required to allow file handle to be adopted by another process
+ FileServer().ShareProtected();
+
+ // open rfile
+ TBool openSuccess = EFalse;
+
+ RFile file;
+ err = file.Open(FileServer(), fileName, EFileWrite);
+
+ // check if ok, if not fount => try to create new file
+ if (err == KErrNone)
+ {
+ openSuccess = ETrue;
+ }
+ else if (err == KErrNotFound)
+ {
+ INFO_PRINTF1(_L("File doesn't exist, trying to create it."));
+
+ err = file.Create(FileServer(), fileName, EFileWrite);
+
+ // check if failed to create file
+ if (err == KErrNone)
+ {
+ openSuccess = ETrue;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("File create error: %d"), err);
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("File open error: %d"), err);
+ SetBlockResult(EFail);
+ }
+
+ // if ok => do store
+ if (openSuccess)
+ {
+ // if we use invalid RFile handle in our test
+ if (useClosedRFile)
+ {
+ file.Close();
+ }
+
+ // call StoreL()
+ TRAP(err, CFbsBitmap::StoreL(file, numberOfSources, (const TDesC**) sourceFiles, bitmapIds));
+
+ // check error code
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Store error: %d"), err);
+ SetError(err);
+ }
+
+ // close rfile
+ file.Close();
+ }
+ }
+ else
+ {
+ // call StoreL()
+ TRAP(err, CFbsBitmap::StoreL(fileName, numberOfSources, (const TDesC**) sourceFiles, bitmapIds));
+
+ // check error code
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Store error: %d"), err);
+ SetError(err);
+ }
+ }
+
+ // Iterate over the file name pointer array and cleanup
+ for (TInt i = 0; i < numberOfFiles; ++i)
+ {
+ delete sourceFiles[i];
+ }
+
+ // Cleanup the arrays allocated on the heap
+ CleanupStack::PopAndDestroy(2, sourceFiles);
+ }
+
+/** Calls CFbsBitmap::SwapWidthAndHeight() */
+void CT_DataFbsBitmap::DoCmdSwapWidthAndHeight()
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::SwapWidthAndHeight()"));
+
+ // call SwapWidthAndHeight()
+ TInt err = GetFbsBitmap()->SwapWidthAndHeight();
+
+ // check error code
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Swap width and height error: %d"), err);
+ SetError(err);
+ }
+ }
+
+/** Calls static CFbsBitmap destructor */
+void CT_DataFbsBitmap::DoCmdUnlockHeapL(const TDesC& aSection)
+ {
+
+ CFbsBitmap* bitmap=NULL;
+ if ( CT_GraphicsUtil::GetFbsBitmapL(*this, aSection, KFbsBitmapName(), bitmap) )
+ {
+ CFbsBitmap::UnlockHeap(bitmap);
+ }
+ else
+ {
+ TBool always=EFalse;
+ GetBoolFromConfig(aSection, KAlways(), always);
+
+ GetFbsBitmap()->UnlockHeap(always);
+ }
+
+ if ( iPopWhenUnlocking )
+ {
+ iPopWhenUnlocking=EFalse;
+ CleanupStack::Pop();
+ }
+ }
+
+/** Calls CFbsBitmap::VerticalPixelsToTwips() */
+void CT_DataFbsBitmap::DoCmdVerticalPixelsToTwips(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::VerticalPixelsToTwips()"));
+
+ // get pixels from parameters
+ TInt pixels;
+ if(!GetIntFromConfig(aSection, KPixels(), pixels))
+ {
+ ERR_PRINTF2(_L("No %S"), &KPixels());
+ SetBlockResult(EFail);
+ }
+
+ // call VerticalPixelsToTwips()
+ TInt value = GetFbsBitmap()->VerticalPixelsToTwips(pixels);
+ INFO_PRINTF2(_L("Twips: %d"), value);
+
+ // validate returned value if needed
+ TInt expectedValue;
+ if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+ {
+ if (expectedValue != value)
+ {
+ ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::VerticalTwipsToPixels() */
+void CT_DataFbsBitmap::DoCmdVerticalTwipsToPixels(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("Calls CFbsBitmap::VerticalTwipsToPixels()"));
+
+ // get twips from parameters
+ TInt twips;
+ if(!GetIntFromConfig(aSection, KTwips(), twips))
+ {
+ ERR_PRINTF2(_L("No %S"), &KTwips());
+ SetBlockResult(EFail);
+ }
+
+ // call VerticalTwipsToPixels()
+ TInt value = GetFbsBitmap()->VerticalTwipsToPixels(twips);
+ INFO_PRINTF2(_L("Pixels: %d"), value);
+
+ // validate returned value if needed
+ TInt expectedValue;
+ if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+ {
+ if (expectedValue != value)
+ {
+ ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+
+/** Calls CFbsBitmap::ExternalizeL() or CFbsBitmap::ExternalizeRectangleL(). Used by DoCmdExternalize() and DoCmdExternalizeRectangle() methods */
+void CT_DataFbsBitmap::ExternalizeImplL(const TDesC& aSection, const TRect& aRect, TBool aUseRect)
+ {
+ // get file name from parameters
+ TPtrC fileName;
+ if (!GetStringFromConfig(aSection, KFileName(), fileName))
+ {
+ ERR_PRINTF2(_L("No %S"), &KFileName());
+ SetBlockResult(EFail);
+ }
+
+ // get a flag if to use closed stream from parameters
+ TBool useClosedStream = EFalse;
+ if(!GetBoolFromConfig(aSection, KUseClosedStream(), useClosedStream))
+ {
+ ERR_PRINTF2(_L("No %S"), &KUseClosedStream());
+ SetBlockResult(EFail);
+ }
+
+ // create write store
+ CDirectFileStore* writestore = CDirectFileStore::ReplaceL(FileServer(), fileName, EFileStream | EFileWrite);
+ CleanupStack::PushL(writestore);
+ TInt popCount=1;
+ TUidType uidtype(KDirectFileStoreLayoutUid, KMultiBitmapFileImageUid);
+
+ writestore->SetTypeL(uidtype);
+
+ // create write stream
+ RStoreWriteStream writestrm;
+
+ // close stream set by parameters
+ if (!useClosedStream)
+ {
+ TStreamId headerid=writestrm.CreateL(*writestore);
+ CleanupClosePushL(writestrm);
+
+ ++popCount;
+ writestore->SetRootL(headerid);
+ }
+
+ if (aUseRect)
+ {
+ // call ExternalizeRectangleL()
+ TRAPD(err, GetFbsBitmap()->ExternalizeRectangleL(writestrm, aRect));
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Externalize rectangle error: %d"), err);
+ SetError(err);
+ }
+ }
+ else
+ {
+ // call ExternalizaL()
+ TRAPD(err, GetFbsBitmap()->ExternalizeL(writestrm));
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Externalize error: %d"), err);
+ SetError(err);
+ }
+ }
+
+ // cleanup
+ CleanupStack::PopAndDestroy(popCount, writestore);
+ }
+
+/** Calls CFbsBitmap::Load() or CFbsBitmap::LoadAndCompress(). Used by DoCmdLoad() and DoCmdLoadAndCompress() methods */
+void CT_DataFbsBitmap::LoadOrLoadAndCompressL(const TDesC& aSection, TBool aCompress)
+ {
+
+ // get bitmap id from parameters
+ TInt bitmapId;
+ if(!GetIntFromConfig(aSection, KBitmapId(), bitmapId))
+ {
+ ERR_PRINTF2(_L("No %S"), &KBitmapId());
+ SetBlockResult(EFail);
+ }
+
+ // get file name from parameters
+ TPtrC fileName;
+ if (!GetStringFromConfig(aSection, KFileName(), fileName))
+ {
+ ERR_PRINTF2(_L("No %S"), &KFileName());
+ SetBlockResult(EFail);
+ }
+
+ // get file offset from parameters
+ TInt fileOffset;
+ TBool useOffset = GetIntFromConfig(aSection, KFileOffset(), fileOffset);
+
+ // get share if loaded from parameters
+ TBool shareIfLoaded = EFalse;
+ GetBoolFromConfig(aSection, KShareIfLoaded(), shareIfLoaded);
+
+ // get flag if use RFile instance in Load() call from parameters
+ TBool useRFile = EFalse;
+ GetBoolFromConfig(aSection, KUseRFile(), useRFile);
+
+ // get flag if use RFile instance in Load() call from parameters
+ TBool useClosedRFile = EFalse;
+ GetBoolFromConfig(aSection, KUseClosedRFile(), useClosedRFile);
+
+ if (useClosedRFile && !useRFile)
+ {
+ ERR_PRINTF3(_L("Cannot use %S parameter if %S is not set to TRUE"), &KUseClosedRFile(), &KUseRFile());
+ SetBlockResult(EFail);
+ }
+
+ // load bitmap
+ TInt err = KErrNone;
+ if (useRFile)
+ {
+ // required to allow file handle to be adopted by another process
+ FileServer().ShareProtected();
+
+ // open rfile
+ RFile file;
+
+ // if we use invalid RFile handle in our test
+ if (!useClosedRFile)
+ {
+ User::LeaveIfError(file.Open(FileServer(), fileName, EFileShareReadersOnly));
+ CleanupClosePushL(file);
+ }
+
+ // do load
+ if (aCompress)
+ {
+ if (useOffset)
+ {
+ err = GetFbsBitmap()->LoadAndCompress(file, bitmapId, shareIfLoaded, fileOffset);
+ }
+ else
+ {
+ err = GetFbsBitmap()->LoadAndCompress(file, bitmapId, shareIfLoaded);
+ }
+ }
+ else
+ {
+ if (useOffset)
+ {
+ err = GetFbsBitmap()->Load(file, bitmapId, shareIfLoaded, fileOffset);
+ }
+ else
+ {
+ err = GetFbsBitmap()->Load(file, bitmapId, shareIfLoaded);
+ }
+ }
+
+ if (!useClosedRFile)
+ {
+ CleanupStack::PopAndDestroy(&file);
+ }
+ }
+ else
+ {
+ if (aCompress)
+ {
+ if (useOffset)
+ {
+ err = GetFbsBitmap()->LoadAndCompress(fileName, bitmapId, shareIfLoaded, fileOffset);
+ }
+ else
+ {
+ err = GetFbsBitmap()->LoadAndCompress(fileName, bitmapId, shareIfLoaded);
+ }
+ }
+ else
+ {
+ if (useOffset)
+ {
+ err = GetFbsBitmap()->Load(fileName, bitmapId, shareIfLoaded, fileOffset);
+ }
+ else
+ {
+ err = GetFbsBitmap()->Load(fileName, bitmapId, shareIfLoaded);
+ }
+ }
+ }
+
+ // check error code
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Load error: %d"), err);
+ SetError(err);
+ }
+ }
+
+/**
+ Virtual RunL - Called on completion of an asynchronous command
+ @see MTPActiveCallback
+ @param aActive Active Object that RunL has been called on
+ @pre N/A
+ @post N/A
+ @leave system wide error code
+*/
+void CT_DataFbsBitmap::RunL(CActive* aActive, const TInt aIndex)
+ {
+ if ( aActive==iActiveCompressInBackground )
+ {
+ RunCompressInBackground(aIndex);
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Stray signal"));
+ SetBlockResult(EFail);
+ }
+ DecOutstanding();
+ }
+
+/**
+ Virtual DoCancel - Request to cancel the asynchronous command
+ @see - MTPActiveCallback
+ @param aActive Active Object that DoCancel has been called on
+ @pre - N/A
+ @post - N/A
+ @leave system wide error code
+*/
+void CT_DataFbsBitmap::DoCancel(CActive* aActive, const TInt aIndex)
+ {
+ if ( aActive==iActiveCompressInBackground )
+ {
+ DoCancelCompressInBackground(aIndex);
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Stray signal"));
+ SetBlockResult(EFail);
+ }
+ DecOutstanding();
+ }
+
+void CT_DataFbsBitmap::RunCompressInBackground(const TInt aIndex)
+ {
+ TInt err=iActiveCompressInBackground->iStatus.Int();
+ INFO_PRINTF2(_L("RunCompressInBackground %d"), err);
+ if ( err!=KErrNone )
+ {
+ ERR_PRINTF2(_L("RunL Error %d"), err);
+ SetAsyncError(aIndex, err);
+ }
+ }
+
+void CT_DataFbsBitmap::DoCancelCompressInBackground(const TInt /*aIndex*/)
+ {
+ }