--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/ImumInSettingsDataAttribute.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,349 @@
+/*
+* Copyright (c) 2002 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: ImumInSettingsDataAttribute.cpp
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+
+#include "ImumInSettingsDataAttribute.h"
+#include "ImumInSettingsDataCtrl.h"
+#include "ImumUtilsLogging.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::NewL()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataAttribute* CImumInSettingsDataAttribute::NewL(
+ const TUint aAttributeId,
+ const TInt aAttributeType,
+ const TUint aAttributeSize,
+ const TAny* aAttributeValue,
+ const TAny* aAttributeDefault )
+ {
+ CImumInSettingsDataAttribute* self = NewLC(
+ aAttributeId,
+ aAttributeType,
+ aAttributeSize,
+ aAttributeValue,
+ aAttributeDefault );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CImumInSetting::NewLC()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataAttribute* CImumInSettingsDataAttribute::NewLC(
+ const TUint aAttributeId,
+ const TInt aAttributeType,
+ const TUint aAttributeSize,
+ const TAny* aAttributeValue,
+ const TAny* aAttributeDefault )
+ {
+ CImumInSettingsDataAttribute* self =
+ new ( ELeave ) CImumInSettingsDataAttribute();
+ CleanupStack::PushL( self );
+ self->ConstructL(
+ aAttributeId,
+ aAttributeType,
+ aAttributeSize,
+ aAttributeValue,
+ aAttributeDefault );
+
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::CImumInSettingsDataAttribute()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataAttribute::CImumInSettingsDataAttribute()
+ :
+ iType( 0 ),
+ iSize( 0 ),
+ iValue( NULL ),
+ iDefault( NULL )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::~CImumInSettingsDataAttribute()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataAttribute::~CImumInSettingsDataAttribute()
+ {
+ Cleanup();
+ iValue = NULL;
+ iDefault = NULL;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CImumInSettingsDataAttribute::ConstructL(
+ const TUint aAttributeId,
+ const TInt aAttributeType,
+ const TUint aAttributeSize,
+ const TAny* aAttributeValue,
+ const TAny* aAttributeDefault )
+ {
+ SetAttributeL(
+ aAttributeId,
+ aAttributeType,
+ aAttributeSize,
+ aAttributeValue,
+ aAttributeDefault );
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::Cleanup()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataAttribute::Cleanup()
+ {
+ // Delete attribute data accoding to its type
+ if ( ImumInSettingsDataCtrl::IsText( iType ) )
+ {
+ DeleteText();
+ }
+ else if ( iType == ECmpTInt64 )
+ {
+ DeleteNumber<TInt64>();
+ }
+ else
+ {
+ DeleteNumber<TInt>();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::DeleteText()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataAttribute::DeleteText()
+ {
+ // Doing the deletion. Both value and default must be deleted from
+ // the memory as both of the items are objects.
+ if ( iType == ECmpNormal )
+ {
+ delete reinterpret_cast<HBufC*>( iValue );
+ delete reinterpret_cast<HBufC*>( iDefault );
+ }
+ else if ( iType == ECmpNormal8 )
+ {
+ delete reinterpret_cast<HBufC8*>( iValue );
+ delete reinterpret_cast<HBufC8*>( iDefault );
+ }
+ else
+ {
+ // This just can't simply happen, since it would be a number
+ }
+
+ iValue = NULL;
+ iDefault = NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::SetAttributeL()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataAttribute::SetAttributeL(
+ const TUint aAttributeId,
+ const TInt aAttributeType,
+ const TUint aAttributeSize,
+ const TAny* aAttributeValue,
+ const TAny* aAttributeDefault )
+ {
+ // Make sure that previous item is cleaned up
+ Cleanup();
+
+ iId = aAttributeId;
+ iType = aAttributeType;
+ iSize = aAttributeSize;
+
+ AllocL( aAttributeValue, aAttributeDefault );
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::AllocL()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataAttribute::AllocL(
+ const TAny* aValue,
+ const TAny* aDefault )
+ {
+ // Allocate data only if the values contains valid information
+ if ( aValue && aDefault )
+ {
+ // Create copy of the text
+ if ( ImumInSettingsDataCtrl::IsText( iType ) )
+ {
+ iValue = reinterpret_cast<const TDes*>( aValue )->AllocL();
+ iDefault = reinterpret_cast<const TDes*>( aDefault )->AllocL();
+ }
+ else if ( iType == ECmpTInt64 )
+ {
+ DoAllocL<TInt64>( aValue, aDefault );
+ }
+ else
+ {
+ DoAllocL<TInt>( aValue, aDefault );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::CloneL()
+// ---------------------------------------------------------------------------
+//
+CImumInSettingsDataAttribute* CImumInSettingsDataAttribute::CloneL()
+ {
+ return NewL( iId, iType, iSize, iValue, iDefault );
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::Copy()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataAttribute::Copy(
+ const CImumInSettingsDataAttribute& aAttribute )
+ {
+ TRAP_IGNORE( SetAttributeL(
+ aAttribute.iId,
+ aAttribute.iType,
+ aAttribute.iSize,
+ aAttribute.iValue,
+ aAttribute.iDefault ) );
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::Reset()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataAttribute::Reset()
+ {
+ // Copy the value in the
+ if ( iType == ECmpNormal )
+ {
+ // Only copy if the descriptor contents differ
+ if( reinterpret_cast<TDes*>( iValue )->Compare(
+ *reinterpret_cast<TDesC*>( iDefault ) ) )
+ reinterpret_cast<TDes*>( iValue )->Copy(
+ *reinterpret_cast<TDesC*>( iDefault ) );
+ }
+ else if ( iType == ECmpNormal8 )
+ {
+ // Only copy if the descriptor contents differ
+ if( reinterpret_cast<TDes8*>( iValue )->Compare(
+ *reinterpret_cast<TDesC8*>( iDefault ) ) )
+ reinterpret_cast<TDes8*>( iValue )->Copy(
+ *reinterpret_cast<TDesC8*>( iDefault ) );
+ }
+ else
+ {
+ memmove( iValue, iDefault, iSize );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::operator==()
+// ---------------------------------------------------------------------------
+//
+TBool CImumInSettingsDataAttribute::operator==(
+ const CImumInSettingsDataAttribute& aAttribute )
+ {
+ return ( iValue == aAttribute.iValue );
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::operator!=()
+// ---------------------------------------------------------------------------
+//
+TBool CImumInSettingsDataAttribute::operator!=(
+ const CImumInSettingsDataAttribute& aAttribute )
+ {
+ return ( iValue != aAttribute.iValue );
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::SetId()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataAttribute::SetId( const TUint aId )
+ {
+ iId = aId;
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::IdCompare()
+// ---------------------------------------------------------------------------
+//
+TBool CImumInSettingsDataAttribute::IdCompare(
+ const CImumInSettingsDataAttribute& aLeft,
+ const CImumInSettingsDataAttribute& aRight )
+ {
+ return ( aLeft.Id() == aRight.Id() );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::Id()
+// ---------------------------------------------------------------------------
+//
+TUint CImumInSettingsDataAttribute::Id() const
+ {
+ return iId;
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::Type()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataAttribute::Type() const
+ {
+ return iType;
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataAttribute::Log()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataAttribute::Log() const
+ {
+ IMUM_CONTEXT( CImumInSettingsDataAttribute::Log, 0, KLogDataAttr );
+ IMUM_IN();
+
+ IMUM0( 0, "------------------------------------------------------" );
+ IMUM1( 0, "Attribute: 0x%x", this );
+ IMUM1( 0, "Attribute ID: 0x%x", iId );
+ IMUM1( 0, "Attribute type: 0x%x", iType );
+ IMUM1( 0, "Attribute size: 0x%x", iSize );
+ IMUM1( 0, "Attribute iValue; addr: 0x%x", iValue );
+ IMUM1( 0, "Attribute iDefault; addr: 0x%x", iDefault );
+ IMUM0( 0, "------------------------------------------------------" );
+
+ IMUM_OUT();
+ }
+
+
+// End of File