diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookui/Phonebook2/xSPExtensionManager/src/CxSPViewData.cpp --- /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 + +// System includes +#include + + +/// 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