diff -r aaeeca1f15af -r e8d784ac1a4b scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimModel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimModel.cpp Wed Sep 01 12:30:40 2010 +0100 @@ -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( + 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 . 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 +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 +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 Items +void CBmpAnimModel::SetReserveL(TInt aCount) + { + if ((iItems) && (aCount >= NumberOfItems())) + { + iItems->SetReserveL(aCount); + } + } + + +// --- private functions --- +// End of File