--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/ImumInSettingsDataArray.cpp Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,227 @@
+/*
+* 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: ImumInSettingsDataArray.cpp
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+
+#include "ImumInSettingsDataArray.h"
+#include "ImumDaErrorCodes.h"
+#include "ImumDaSettingsKeys.h"
+#include "ImumInSettingsKeys.h"
+#include "ImumInSettingsDataAttribute.h"
+#include "ImumMboxDefaultData.h"
+#include "ImumPanic.h"
+#include "ImumUtilsLogging.h"
+
+// EXTERNAL DATA STRUCTURES
+// EXTERNAL FUNCTION PROTOTYPES
+// CONSTANTS
+// MACROS
+// LOCAL CONSTANTS AND MACROS
+// MODULE DATA STRUCTURES
+// LOCAL FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataArray::CImumInSettingsDataArray()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataArray::CImumInSettingsDataArray()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataArray::~CImumInSettingsDataArray()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataArray::~CImumInSettingsDataArray()
+ {
+ iSettings.ResetAndDestroy();
+ iSettings.Close();
+
+ delete iSearchItem;
+ iSearchItem = NULL;
+ }
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataArray::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CImumInSettingsDataArray::ConstructL()
+ {
+ // This item is need to search the array for the specific id. Only required
+ // value is the id of the item, other can be ignored. The id is specified
+ // just before the search begins.
+ iSearchItem = CImumInSettingsDataAttribute::NewL(
+ 0, ECmpTInt32, 0, NULL, NULL );
+ }
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataArray::NewL()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataArray* CImumInSettingsDataArray::NewL()
+ {
+ CImumInSettingsDataArray* self = NewLC();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CImumInSettingsDataArray::NewLC()
+// ----------------------------------------------------------------------------
+//
+CImumInSettingsDataArray* CImumInSettingsDataArray::NewLC()
+ {
+ CImumInSettingsDataArray* self = new ( ELeave ) CImumInSettingsDataArray();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataArray::HasItem()
+// ---------------------------------------------------------------------------
+//
+TBool CImumInSettingsDataArray::HasItem(
+ const TUint aAttributeKey,
+ TInt& aIndex ) const
+ {
+ iSearchItem->SetId( aAttributeKey );
+ TIdentityRelation<CImumInSettingsDataAttribute> relation(
+ CImumInSettingsDataAttribute::IdCompare );
+
+ aIndex = iSettings.Find( iSearchItem, relation );
+
+ return ( aIndex >= 0 );
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataArray::GetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataArray::GetAttr(
+ const TUint aAttributeKey,
+ CImumInSettingsDataAttribute*& aAttribute ) const
+ {
+ // Try to find the key from the settings key list
+ TInt index = KErrNotFound;
+ TInt error = KErrNone;
+
+ // Find the item from the list
+ if ( HasItem( aAttributeKey, index ) )
+ {
+ aAttribute = iSettings[index];
+ }
+ else
+ {
+ error = TImumDaErrorCode::ESettingNotFound;
+ }
+
+ return error;
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataArray::SetAttr()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataArray::SetAttr(
+ CImumInSettingsDataAttribute& aAttribute )
+ {
+ TInt error = KErrNone;
+
+ // Try to find the key from the settings key list
+ TInt index = KErrNotFound;
+
+ // Find the item from the list
+ if ( !HasItem( aAttribute.Id(), index ) )
+ {
+ TRAP( error, iSettings.AppendL( &aAttribute ) );
+ }
+ // Key exists, replace the old value with the new one
+ else
+ {
+ delete iSettings[index];
+ iSettings.Remove( index );
+ iSettings.Insert( &aAttribute, index );
+ }
+
+ return error;
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataArray::ResetAttr()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataArray::ResetAttr( const TUint aAttributeKey )
+ {
+ CImumInSettingsDataAttribute* attr = NULL;
+ if ( GetAttr( aAttributeKey, attr ) == KErrNone )
+ {
+ attr->Reset();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataArray::ResetAll()
+// ---------------------------------------------------------------------------
+//
+void CImumInSettingsDataArray::ResetAll( const RArray<TUint>& /* aExcludeList */ )
+ {
+ // Start from the last item
+ TInt settingsCount = iSettings.Count() - 1;
+ for ( TInt setting = settingsCount; setting >= 0; --setting )
+ {
+ iSettings[setting]->Reset();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataArray::CloneL()
+// ---------------------------------------------------------------------------
+//
+CImumInSettingsDataArray* CImumInSettingsDataArray::CloneL() const
+ {
+ CImumInSettingsDataArray* clone = NewLC();
+
+ for ( TInt setting = iSettings.Count(); --setting >= 0; )
+ {
+ clone->iSettings.Append( iSettings[setting]->CloneL() );
+ }
+
+ CleanupStack::Pop( clone );
+
+ return clone;
+ }
+
+// ---------------------------------------------------------------------------
+// CImumInSettingsDataArray::Count()
+// ---------------------------------------------------------------------------
+//
+TInt CImumInSettingsDataArray::Count() const
+ {
+ return iSettings.Count();
+ }
+
+
+
+// End of File