phonebookui/Phonebook2/xSPExtensionManager/src/CxSPViewData.cpp
branchRCL_3
changeset 20 f4a778e096c2
parent 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/xSPExtensionManager/src/CxSPViewData.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,281 @@
+/*
+* Copyright (c) 2005-2007 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 FILES
+#include <CxSPViewData.h>
+
+// System includes
+#include <s32mem.h>
+
+
+/// Unnamed namespace for local definitions
+namespace {
+
+/**
+ * Stream buffer which counts number of bytes written to it.
+ */
+class TCalcLengthStreamBuf : public MStreamBuf
+    {
+    public: // Construction
+
+        /**
+         * Constructor.
+         */
+        inline TCalcLengthStreamBuf() :
+                iBytesWritten( 0 )
+            {
+            }
+
+        /**
+         * Returns the number of bytes written.
+         *
+         * @return  Number of bytes written.
+         */
+        inline TInt BytesWritten() const
+            {
+            return iBytesWritten;
+            }
+
+    private: // From MStreamBuf
+
+        void DoWriteL( const TAny* /*aPtr*/, TInt aLength )
+            {
+            // Just count the bytes
+            iBytesWritten += aLength;
+            }
+
+    private: // Data
+        /// Ref: Count of bytes written to this streambuf
+        TInt iBytesWritten;
+    };
+
+
+} /// namespace
+
+
+
+
+CxSPViewData::CxSPViewData() :
+        iEComId( 0 ),
+        iOriginalViewId( KErrNotFound ),
+        iIconId( KErrNotFound ),
+        iMaskId( KErrNotFound )
+    {
+    }
+
+CxSPViewData::~CxSPViewData()
+    {
+    delete iIconFile;
+    delete iViewName;
+    }
+
+EXPORT_C CxSPViewData* CxSPViewData::NewL()
+    {
+    CxSPViewData* self = new ( ELeave ) CxSPViewData;
+    return self;
+    }
+
+EXPORT_C CxSPViewData* CxSPViewData::NewL( const TDesC8& aBuf )
+    {
+    CxSPViewData* self = new ( ELeave ) CxSPViewData;
+    CleanupStack::PushL( self );
+    self->ConstructL( aBuf );
+    CleanupStack::Pop( self );
+    return self;    
+    }
+
+void CxSPViewData::ConstructL( const TDesC8& aBuf )
+    {
+    UnpackL( aBuf );
+    }
+
+
+EXPORT_C TUint32 CxSPViewData::EComId() const
+	{
+	return iEComId;
+	}
+
+EXPORT_C TInt32 CxSPViewData::OriginalViewId() const
+	{
+	return iOriginalViewId;
+	}
+
+EXPORT_C TInt32 CxSPViewData::IconId() const
+	{
+	return iIconId;
+	}
+
+EXPORT_C TInt32 CxSPViewData::MaskId() const
+	{
+	return iMaskId;
+	}
+
+EXPORT_C const TDesC& CxSPViewData::IconFile() const
+	{
+	if( iIconFile )
+		{
+		return *iIconFile;
+		}
+	else
+		{
+		return KNullDesC();
+		}
+	}
+
+EXPORT_C const TDesC& CxSPViewData::ViewName() const
+	{
+	if( iViewName )
+		{
+		return *iViewName;
+		}
+	else
+		{
+		return KNullDesC();
+		}
+	}
+	
+EXPORT_C void CxSPViewData::SetEComId( TUint32 aEComId )
+	{
+	iEComId = aEComId;
+	}
+
+EXPORT_C void CxSPViewData::SetOriginalViewId( TInt32 aOriginalViewId )
+	{
+	iOriginalViewId = aOriginalViewId;
+	}
+
+EXPORT_C void CxSPViewData::SetIconId( TInt32 aIconId )
+	{
+	iIconId = aIconId;
+	}
+
+EXPORT_C void CxSPViewData::SetMaskId( TInt32 aMaskId )
+	{
+	iMaskId = aMaskId;
+	}
+
+EXPORT_C void CxSPViewData::SetIconFileL( const TDesC& aIconFile )
+	{
+	delete iIconFile;
+	iIconFile = NULL;
+	iIconFile = aIconFile.AllocL();
+	}
+
+EXPORT_C void CxSPViewData::SetViewNameL( const TDesC& aViewName )
+	{
+	{
+	delete iViewName;
+	iViewName = NULL;
+	iViewName = aViewName.AllocL();
+	}
+	}
+
+EXPORT_C void CxSPViewData::Reset()
+    {
+    iEComId = 0;
+    iOriginalViewId = KErrNotFound;
+    iIconId = KErrNotFound;
+    iMaskId = KErrNotFound;
+    delete iIconFile;
+    iIconFile = NULL;
+    delete iViewName;
+    iViewName = NULL;
+    }
+
+EXPORT_C HBufC8* CxSPViewData::PackL() const
+    {
+    // Calculate needed buffer size using TCalcLengthStreamBuf
+    TCalcLengthStreamBuf countBuf;     
+    RWriteStream countStream( &countBuf );
+    // This can't leave because we are using TCalcLengthStreamBuf
+    ExternalizeL( countStream );
+
+    // Allocate a buffer and a stream
+    HBufC8* buf = HBufC8::NewLC( countBuf.BytesWritten() );
+    TPtr8 bufPtr = buf->Des();
+    RDesWriteStream stream( bufPtr );
+    stream.PushL();
+
+    // Write this object to buf through stream
+    ExternalizeL( stream );
+
+    stream.CommitL();
+    CleanupStack::PopAndDestroy(); // stream
+    CleanupStack::Pop(); // buf
+    return buf;
+    }
+
+EXPORT_C void CxSPViewData::UnpackL( const TDesC8& aPack )
+    {
+    RDesReadStream stream( aPack );
+    stream.PushL();
+    InternalizeL( stream );
+    CleanupStack::PopAndDestroy(); // stream
+    }
+
+void CxSPViewData::ExternalizeL( RWriteStream& aStream ) const
+    {
+    aStream.WriteUint32L( iEComId );
+    aStream.WriteInt32L( iOriginalViewId );
+    aStream.WriteInt32L( iIconId );
+    aStream.WriteInt32L( iMaskId );
+    
+    if( iIconFile )
+    	{
+    	aStream.WriteUint16L( iIconFile->Length() );
+    	aStream.WriteL( *iIconFile );
+    	}
+   	else
+   		{
+   		aStream.WriteUint16L( KNullDesC().Length() );
+   		aStream.WriteL( KNullDesC() );
+   		}
+
+	if( iViewName )
+    	{
+    	aStream.WriteUint16L( iViewName->Length() );
+    	aStream.WriteL( *iViewName );
+    	}
+   	else
+   		{
+   		aStream.WriteUint16L( KNullDesC().Length() );
+   		aStream.WriteL( KNullDesC() );
+   		}    
+    }
+
+void CxSPViewData::InternalizeL( RReadStream& aStream )
+    {
+    Reset();
+
+	iEComId = aStream.ReadUint32L();
+	iOriginalViewId = aStream.ReadInt32L();
+	iIconId = aStream.ReadInt32L();
+	iMaskId = aStream.ReadInt32L();
+
+	TInt length = aStream.ReadUint16L();
+	iIconFile = HBufC::NewL( length );
+	TPtr iconFilePtr = iIconFile->Des();
+    aStream.ReadL( iconFilePtr, length );
+
+	length = aStream.ReadUint16L();
+	iViewName = HBufC::NewL( length );
+	TPtr viewNamePtr = iViewName->Des();
+    aStream.ReadL( viewNamePtr, length );    
+    }
+
+//  End of File