--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimModel.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2003 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: Takes care of storing and serving the bitmaps
+* to be animated along with their properties
+*
+*/
+
+
+
+
+
+#include "CBmpAnimModel.h"
+
+
+// C'tor
+CBmpAnimModel::CBmpAnimModel()
+ {
+ }
+
+
+// D'tor
+CBmpAnimModel::~CBmpAnimModel()
+ {
+ // Delete item array
+ if (iItems)
+ {
+ iItems->ResetAndDestroy();
+ }
+ delete iItems;
+ }
+
+
+// Two-phase constructor, initialises member arrays and stuff
+void CBmpAnimModel::ConstructL(CBmpAnimSettings* aSettings)
+ {
+ // Create item array
+ iItems = new(ELeave) CArrayPtrFlat<CBmpAnimItem>(
+ KBmpAnimItemArrayGranularity);
+
+ iSettings = aSettings;
+ }
+
+
+// Number of items query
+TInt CBmpAnimModel::NumberOfItems() const
+ {
+ return iItems ? iItems->Count() : 0;
+ }
+
+
+// Add an item to the end of the array
+void CBmpAnimModel::AppendItemL(CBmpAnimItem* aItem)
+ {
+ // Sanity check
+ if (!iItems)
+ {
+ ASSERT(EFalse);
+ return;
+ }
+
+ // Stash it in
+ iItems->AppendL(aItem);
+ }
+
+
+// Insert an item at <aIndex>. Space must be reserved.
+void CBmpAnimModel::InsertItemL(TInt aIndex, CBmpAnimItem* aItem)
+ {
+ if ((iItems) && (aIndex >= 0) && (aIndex <= NumberOfItems()))
+ {
+ // Squeeze it in
+ iItems->InsertL(aIndex, aItem);
+ }
+ else
+ {
+ ASSERT(EFalse);
+ }
+ }
+
+
+// Delete item at <aIndex>
+void CBmpAnimModel::DeleteItemL(TInt aIndex)
+ {
+ if ((iItems) && (aIndex >= 0) && (aIndex <= NumberOfItems()))
+ {
+ // Grab hold of the item for deletion, remove from array
+ // and compress the array
+ CBmpAnimItem* ptr = iItems->At(aIndex);
+ iItems->Delete(aIndex);
+ delete ptr;
+ iItems->Compress();
+ }
+ else
+ {
+ ASSERT(EFalse);
+ }
+ }
+
+
+// Delete all Items
+void CBmpAnimModel::DeleteAll()
+ {
+ if (iItems)
+ {
+ iItems->ResetAndDestroy();
+ }
+ }
+
+
+// Get item at position <aIndex>
+CBmpAnimItem* CBmpAnimModel::ItemAt(TInt aIndex) const
+ {
+ if ((iItems) && (aIndex >= 0) && (aIndex < NumberOfItems()))
+ {
+ return iItems->At(aIndex);
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+
+
+// Get next item in animation sequence. Returns NULL at the end of the
+// sequence (or if there are no items at all), and wraps around to the
+// beginning, so that next call again returns an item.
+CBmpAnimItem* CBmpAnimModel::NextItem(TBool& aWrapped)
+ {
+ CBmpAnimItem* pItem = ItemAt(iCurrentItem++);
+
+ if (pItem)
+ {
+ aWrapped = EFalse;
+ }
+ else
+ {
+ // Apparently there are no more items - wrap around and set indicator
+ iCurrentItem = 0;
+ aWrapped = ETrue;
+
+ pItem = ItemAt(iCurrentItem++);
+ }
+
+ return pItem;
+ }
+
+
+// Reserve space for <aCount> Items
+void CBmpAnimModel::SetReserveL(TInt aCount)
+ {
+ if ((iItems) && (aCount >= NumberOfItems()))
+ {
+ iItems->SetReserveL(aCount);
+ }
+ }
+
+
+// --- private functions ---
+// End of File