imaging/imagingfws/src/imageframebody.cpp
changeset 0 5752a19fdefe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imaging/imagingfws/src/imageframebody.cpp	Wed Aug 25 12:29:52 2010 +0300
@@ -0,0 +1,443 @@
+// 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:
+//
+
+#include "imageframebody.h"
+#include "ImageClientMain.h"
+
+/**
+Destructor for CImageFrame::CBody class.
+*/	
+CImageFrame::CBody::~CBody()
+	{
+	delete iFormat;
+	delete iLayout;	
+	}
+
+/**
+Returns the format of the CImageFrame::CBody.
+
+@return A const reference to the TFrameFormatBase object which describes the CImageFrame::CBody object format.
+*/	    
+const TFrameFormatBase& CImageFrame::CBody::FrameFormat() const
+	{
+	return *iFormat;
+	}	
+	
+/**
+Set the format of the CImageFrame::CBody.
+
+@param aFormat
+	   A const reference to TFrameFormatBase object used to set CImageFrame::CBody format.
+*/	
+void CImageFrame::CBody::SetFrameFormatL(const TFrameFormatBase& aFormat)
+	{
+	if (iFormat!=NULL)
+		{
+		delete iFormat;
+		iFormat = NULL;
+		}
+	iFormat = static_cast<TFrameFormatBase*>(aFormat.DuplicateL());	
+	}
+
+/**
+Returns the layout of the CImageFrame::CBody associated image data.
+
+@return A const reference to TFrameLayoutBase which describes CImageFrame::CBody object particular layout.
+*/
+const TFrameLayoutBase& CImageFrame::CBody::FrameLayout() const
+	{
+	return *iLayout;
+	}
+
+/**
+Set the layout of the CImageFrame::CBody associated image data.
+
+@param aFrameLayout
+	   A const reference to TFrameLayoutBase object used to set CImageFrame::CBody layout.
+
+@leave KErrNoMemory.
+*/		
+void CImageFrame::CBody::SetFrameLayoutL(const TFrameLayoutBase& aFrameLayout)
+	{
+	if (iLayout!=NULL)
+		{
+		delete iLayout;
+		iLayout = NULL;
+		}
+	iLayout = static_cast<TFrameLayoutBase*>(aFrameLayout.DuplicateL());
+	}
+
+/**
+Returns the size in pixels of the image the CImageFrame::CBody refers to.
+
+@return image size in pixels.
+*/
+const TSize& CImageFrame::CBody::FrameSizeInPixels() const
+	{
+	return iFrameSize;
+	}
+	
+/**
+Set the size in pixels of the image CImageFrame::CBody refers to.
+
+@param aFrameSize
+	   A const reference to TSize used to set CImageFrame::CBody format.
+*/	
+void CImageFrame::CBody::SetFrameSizeInPixels(const TSize& aFrameSize)
+	{
+	iFrameSize = aFrameSize;
+	}
+
+/**
+Provides a writable TDes8 reference to the data buffer. 
+Suitable both for reading and writing.
+ 
+@return writable TDes8 reference.
+*/	
+TDes8& CImageFrame::CBody::Data()
+	{
+	return iBufferPtr;
+	}
+	
+/**
+Provides a TDesC8 reference to the data buffer. 
+Suitable for reading of the data only.
+ 
+@return const TDesC8 reference.
+*/	
+const TDesC8& CImageFrame::CBody::Data() const
+	{
+	return iBufferPtr;
+	}
+
+/**
+Provides a RChunk reference. It will panic if the frame does not contain a chunk.
+ 
+@return RChunk reference.
+*/	
+RChunk& CImageFrame::CBody::DataChunk()
+	{
+	__ASSERT_ALWAYS((iDataChunk!=NULL), Panic(EInvalidValue));
+	return *iDataChunk;
+	}
+
+/**
+Returns the offset of the CImageFrame::CBody specific data within the buffer object.
+ 
+@return  data offset from CimageFrame buffer start.
+*/
+TInt CImageFrame::CBody::DataOffset() const
+	{
+	return iDataOffset;
+	}
+
+/**
+Returns whether the specific CImageFrame object contains a Chunk or not. 
+
+@return ETrue if the buffer is a chuk and EFalse of not. 
+*/
+TBool CImageFrame::CBody::IsChunk() const
+	{
+	return iIsChunk;
+	}
+	
+/**
+Returns the maximum buffer size as specified by the constructing entity.
+
+@return the maximum buffer size. 
+*/
+TInt CImageFrame::CBody::MaxBufferSize() const
+	{
+	return iMaxBufferSize;
+	}
+		
+/**
+Static factory function used to create a CImageFrame::CBody object.
+
+@param aHandle
+       a reference to the owning CImageFrame object.
+
+@param aBuffer
+       a reference to the TDesc8 object the CImageFrame::CBody wraps around
+
+@param aMaxBufferSize
+	   the maximum buffer size. 
+
+@return a pointer to a valid CImageFrame::CBody object.
+
+@leave  KErrArgument
+@leave  KErrNoMemory or other system wide error codes. 
+*/
+CImageFrame::CBody* CImageFrame::CBody::NewL(CImageFrame& aHandle, 
+ 											 const TDes8& aBuffer,
+ 											 TInt aMaxBufferSize)
+	{
+	CImageFrame::CBody* self =  new(ELeave) CImageFrame::CBody(aHandle, aBuffer); 
+	CleanupStack::PushL(self);
+	self->SetMaxSizeL(aMaxBufferSize);
+	self->SetDefaultFormatL();
+	CleanupStack::Pop();
+	return self;	
+	}
+
+/**
+Static factory function used to create a CImageFrame::CBody object.
+
+@param aHandle
+       a reference to the owning CImageFrame object.
+
+@param aBuffer
+       a reference to the TDesc8 object the CImageFrame::CBody wraps around.
+
+@param aMaxBufferSize
+	   the maximum buffer size. 
+
+@param aFrameSize
+       a reference to the TSize object to initialise the CImageFrame::CBody object.      
+
+@param aFrameFormat
+       a reference to the TFrameFormatBase to initialise the CImageFrame::CBody object.    
+
+@param aFrameLayout
+       a reference to the TFrameLayoutBase to initialise the CImageFrame::CBody object.
+
+@return a pointer to a valid CImageFrame::CBody object.       
+              
+@leave  KErrArgument
+@leave  KErrNoMemory or other system wide error code.
+*/						  
+CImageFrame::CBody* CImageFrame::CBody::NewL(CImageFrame& aHandle, 
+										 	 const TDes8& aBuffer, TInt aMaxBufferSize,
+						   					 const TSize& aFrameSize, 
+										 	 const TFrameFormatBase& aFrameFormat,
+											 const TFrameLayoutBase& aFrameLayout)
+	{
+	CImageFrame::CBody* self =  new(ELeave) CImageFrame::CBody(aHandle, aBuffer); 
+	CleanupStack::PushL(self);
+	self->SetMaxSizeL(aMaxBufferSize);
+	self->StoreAddParamL(aFrameSize, aFrameFormat, aFrameLayout);
+	CleanupStack::Pop();
+	return self;
+	}
+
+/**
+Static factory function used to create a CImageFrameRChunk object.
+
+@param aHandle
+       a reference to the owning CImageFrame object.
+
+@param aBuffer
+       a reference to the RChunk object the CImageFrameRChunk wraps around.
+
+@param aMaxBufferSize
+	   the maximum buffer size.       
+
+@param aDataOffset
+       The offset at which the data for this frame starts.       
+
+@return a pointer to a valid CImageFrame::CBody object.
+
+@leave  KErrArgument
+@leave  KErrNoMemory or other system wide error code.
+*/
+CImageFrame::CBody* CImageFrame::CBody::NewL(CImageFrame& aHandle, 
+											const RChunk* aBuffer, 
+											TInt aMaxBufferSize, 
+											TInt aDataOffset)
+	{
+	CImageFrame::CBody* self = new(ELeave) CImageFrame::CBody(aHandle); 
+	CleanupStack::PushL(self);
+	self->StoreChunkL(aBuffer, aMaxBufferSize, aDataOffset);
+	self->SetDefaultFormatL();
+	CleanupStack::Pop();
+	return self;	
+	}
+
+/**
+Static factory function used to create a CImageFrameRChunk object.
+
+@param aHandle
+       a reference to the owning CImageFrame object.
+
+@param aBuffer
+       a reference to the RChunk object the CImageFrameRChunk wraps around.
+
+@param aMaxBufferSize
+	   the maximum buffer size.            
+
+@param aDataOffset
+       The offset at which the data for this frame starts. 
+
+@param aFrameSize
+       a reference to the TSize object to initialise the CImageFrameRChunk object.
+
+@param aFrameFormat
+       a reference to the TFrameFormatBase to initialise the CImageFrameRChunk object. 
+
+@param aFrameLayout
+       a reference to the TFrameLayoutBase to initialise the CImageFrameRChunk object.      
+
+@return a pointer to a valid CImageFrame::CBody object.
+
+@leave  KErrArgument
+@leave  KErrNoMemory or other system wide error code.
+*/
+CImageFrame::CBody* CImageFrame::CBody::NewL(CImageFrame& aHandle,const RChunk* aBuffer, 
+											TInt aMaxBufferSize,
+											TInt aDataOffset, 
+											const TSize& aFrameSize,
+											const TFrameFormatBase& aFrameFormat,																	    	
+											const TFrameLayoutBase& aFrameLayout)
+	{
+	CImageFrame::CBody* self = new(ELeave) CImageFrame::CBody(aHandle); 
+	CleanupStack::PushL(self);
+	self->StoreChunkL(aBuffer, aMaxBufferSize, aDataOffset);
+	self->StoreAddParamL(aFrameSize, aFrameFormat, aFrameLayout);
+	CleanupStack::Pop();
+	return self;
+	}
+
+/**
+CImageFrame::CBody constructor.
+
+@param aHandle
+       a reference to the owning CImageFrame object.      
+*/			
+CImageFrame::CBody::CBody(CImageFrame& aHandle) : 
+						iHandle(aHandle),
+	  					iBufferPtr(0,0),
+	  					iIsChunk(ETrue)							
+	{
+	}
+	
+/**
+CImageFrame::CBody constructor.
+
+@param aHandle
+       a reference to the owning CImageFrame object.
+
+@param aBuffer
+       a reference to the TDes8 object the CImageFrame::Body object contains.      
+*/	
+CImageFrame::CBody::CBody(CImageFrame& aHandle, const TDes8& aBuffer) : 
+												iHandle(aHandle),			   
+												iBufferPtr((TUint8*)(aBuffer.Ptr()), aBuffer.Size(), aBuffer.MaxLength()),
+												iIsChunk(EFalse)
+												
+	{
+	}
+
+/**
+Stores the maximum size of the buffer
+
+@param aMaxBufferSize
+       buffer maximum size.
+
+@leave KErrArgument.      
+*/	
+void CImageFrame::CBody::SetMaxSizeL(TInt aMaxBufferSize)
+	{
+	if (aMaxBufferSize <= 0)
+		{
+		User::Leave(KErrArgument);
+		}
+	iMaxBufferSize = aMaxBufferSize;
+	}
+
+/** 
+Function used to store the chunk relevant information.
+
+@param aBuffer
+	   a pointer to a valid RChunk object.
+
+@param aMaxBufferSize
+		buffer maximum size.
+
+@param aDataOffset
+	   The offset of the data in the CImageFrame::CBody object from the start of the chunk. 
+
+@leave KErrArgument
+*/
+void CImageFrame::CBody::StoreChunkL(const RChunk* aBuffer, TInt aMaxBufferSize, TInt aDataOffset)
+	{
+	if (aBuffer == NULL)
+		{
+		User::Leave(KErrArgument);
+		}
+		
+	if (aDataOffset < 0)
+		{
+		User::Leave(KErrArgument);
+		}
+			
+	SetMaxSizeL(aMaxBufferSize);	
+	iDataOffset = aDataOffset;
+	iDataChunk = (RChunk*)aBuffer;
+	iBufferPtr.Set((iDataChunk->Base() + iDataOffset), iDataChunk->Size(), iDataChunk->MaxSize());
+	}
+	
+/**
+Initialise CImageFrame::CBody object.
+
+@param aSize
+	   a reference to a TSize object containing image size in pixels. 
+
+@param aFormat
+	   a reference to a TFrameFormatBase object containing image format information. 	
+
+@param aLayout
+	   a reference to FrameLayoutBase object containing image layout information.
+
+@leave KErrNoMemory
+*/	
+void CImageFrame::CBody::StoreAddParamL( const TSize& aSize, 
+					 				     const TFrameFormatBase& aFormat,								   
+									     const TFrameLayoutBase& aLayout)
+	{
+	iFrameSize = aSize;
+	if (iFormat!=NULL)
+		{
+		delete iFormat;
+		iFormat = NULL;
+		}
+	iFormat = (TFrameFormatBase*)aFormat.DuplicateL();
+	
+	if (iLayout!=NULL)
+		{
+		delete iLayout;
+		iLayout = NULL;
+		}
+	iLayout = (TFrameLayoutBase*)aLayout.DuplicateL();
+	}
+
+/**
+Sets default Frame Format and Frame Layout for this version of Image Frame
+
+@leave KErrNoMemory
+*/	
+void CImageFrame::CBody::SetDefaultFormatL()
+	{
+	iFormat = new (ELeave) TFrameFormat(KNullUid);
+	iLayout = new (ELeave) TFrameLayout(0);
+	}
+	
+/*
+Used for padding the BWINS def file.
+*/
+#ifdef __WINS__
+EXPORT_C void Reserved1()
+	{
+	}
+#endif // __WINS__