menufw/menufwui/mmwidgets/src/mmitemsdatacache.cpp
changeset 0 f72a12da539e
child 4 4d54b72983ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/menufw/menufwui/mmwidgets/src/mmitemsdatacache.cpp	Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 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:
+* Version     : 2 << Don't touch! Updated by Synergy at check-out.
+*
+*/
+
+#include "mmitemsdatacache.h"
+#include "mmcacheforitem.h"
+
+const TInt KItemCacheArrGranularity = 20;
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMmItemsDataCache* CMmItemsDataCache::NewLC()
+    {
+    CMmItemsDataCache* self = new (ELeave) CMmItemsDataCache();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMmItemsDataCache* CMmItemsDataCache::NewL()
+    {
+    CMmItemsDataCache* self = NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMmCacheForItem* CMmItemsDataCache::GetItemCacheL( TInt aItemIndex )
+    {
+    ASSERT( aItemIndex >= 0 );
+    while ( iItemCacheArr.Count() <= aItemIndex )
+        {
+        CMmCacheForItem* cacheForItem = CMmCacheForItem::NewLC( *this );
+        iItemCacheArr.AppendL( cacheForItem );
+        CleanupStack::Pop( cacheForItem );
+        }
+    return iItemCacheArr[aItemIndex];
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMmItemsDataCache::GetTemplateIdentifierL( const TDesC8& aTemplateName )
+    {
+    TInt identifier = KErrNotFound;
+    
+    // this looks very primitive, but RPointerArray::FindL just compares pointers
+    // so I guess there is no other way
+    TInt templateCount = iTemplateNames.Count();
+    for ( TInt i = 0; i < templateCount; ++i )
+        {
+        if ( iTemplateNames[i]->Compare( aTemplateName ) == 0 )
+            {
+            identifier = i;
+            break;
+            }
+        }
+    
+    if ( identifier == KErrNotFound )
+        {
+        HBufC8* templateNameCopy = HBufC8::NewLC( aTemplateName.Length() );
+        templateNameCopy->Des().Copy( aTemplateName );
+        iTemplateNames.AppendL( templateNameCopy );
+        CleanupStack::Pop( templateNameCopy );
+        identifier = iTemplateNames.Count() - 1;
+        }
+    return identifier;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CMmItemsDataCache::GetTemplateNameByIdentifier(
+        TInt aTemplateIdentifier ) const
+    {
+    return *( iTemplateNames[aTemplateIdentifier] );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMmItemsDataCache::Invalidate()
+    {
+    const TInt count = iItemCacheArr.Count();
+    for ( TInt i = 0; i < count; ++i )
+        {
+        iItemCacheArr[i]->SetValid( EFalse );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMmItemsDataCache::Trim( TInt aItemCount )
+    {
+    __ASSERT_ALWAYS( aItemCount >= 0, User::Invariant() );
+    for ( TInt i = iItemCacheArr.Count() - 1; i >= aItemCount; --i )
+        {
+        CMmCacheForItem* cache = iItemCacheArr[i];
+        iItemCacheArr.Remove( i );
+        delete cache;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMmItemsDataCache::~CMmItemsDataCache()
+    {
+    iItemCacheArr.ResetAndDestroy();
+    iItemCacheArr.Close();
+    iTemplateNames.ResetAndDestroy();
+    iTemplateNames.Close();
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CMmItemsDataCache::CMmItemsDataCache()
+    : iItemCacheArr( KItemCacheArrGranularity )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CMmItemsDataCache::ConstructL()
+    {
+    }