diff -r 000000000000 -r 4e91876724a2 photosgallery/viewframework/medialists/inc/glxitemlist.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/medialists/inc/glxitemlist.h Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,207 @@ +/* +* Copyright (c) 2008-2009 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: List of media items +* +*/ + + + + +#ifndef __C_GLXITEMLIST_H__ +#define __C_GLXITEMLIST_H__ + +#include +#include "glxmedia.h" + +// Forward declarations +class CMPXCollectionPath; +class MGlxItemListObserver; +class MGlxMediaUser; +class MGlxMediaPool; + +namespace NGlxItemList + { + class MListModificationStrategy; + class TDifferenceInfo; + } + +/** + * CGlxItemList + * + * List that has media items + * + * @author Aki Vanhatalo + * + * @internal reviewed 17/07/2007 by Kimmo Hoikka + * + * @ingroup mlm_media_list_manager_design + */ +NONSHARABLE_CLASS( CGlxItemList ) : public CBase + { +public: + /** + * Constructor + * @param aIdSpaceId id of id space in which list item ids are + * @param aObserver Observer to be notified of item addition/removal + * @param aMediaUser User class of media objects - media objects that + * this list links to will be linked to the user, so that + * cache manager is able to quickly access the media lists + * that use particular media objects + */ + static CGlxItemList* NewL( const TGlxIdSpaceId& aIdSpaceId, + MGlxItemListObserver& aObserver, MGlxMediaUser& aMediaUser ); + + /** + * Destructor + */ + ~CGlxItemList(); + + /** + * @return id space id + */ + inline const TGlxIdSpaceId& IdSpaceId() const; + + /** + * Synchronises the list with new path + * Sends added/removed notifications as necessary + * Note: Does not send "perfect" notification if the order of the items + * has been changed. Hence, this function cannot be reliably used when + * sort order has changed + * + * @param aSource path with item ids. + * @param aMediaPool interface from which to ask for media items + */ + void SetContentsL( const CMPXCollectionPath& aSource, const MGlxMediaPool& aMediaPool ); + + /** + * Remove an item form the list + * Sends removed notification + * + * @param aItemId Id of item to remove + * @param aIdSpaceId Id space of the item + */ + void Remove( const TGlxIdSpaceId& aIdSpaceId, const TGlxMediaId& aItemId ); + + /** + * Remove any pointers to the media object at the specified index + * @param aIndex index of media object from which to remove a reference + */ + void RemoveReference( TInt aIndex ); + + /** + * @return count of items in the list + */ + inline TInt Count() const; + + /** + * @return item at index + */ + inline TGlxMedia& Item( TInt aIndex ); + + /** + * @param aId Id of item for which index is needed + * @return index of item with id aId or KErrNotFound + */ + TInt Index( const TGlxIdSpaceId& aIdSpaceId, const TGlxMediaId& aId ) const; + +private: + /** + * Constructor + * @param aIdSpaceId id of id space in which list item ids are + * @param aObserver Observer to be notified + * @param aMediaUser User class of media objects - media objects that + * this list links to will be linked to the user, so that + * cache manager is able to quickly access the media lists + * that use particular media objects + */ + CGlxItemList( const TGlxIdSpaceId& aIdSpaceId, + MGlxItemListObserver& aObserver, MGlxMediaUser& aMediaUser ); + + /** + * Process differences between source and current list + * @param aSource source list + * @param aStrategy strategy object that contains the logic of how to + * process the differences that are found + */ + void ProcessDifferences( const CMPXCollectionPath& aSource, + NGlxItemList::MListModificationStrategy& aStrategy ); + + /** + * Find the first matches in the source and current lists. + * @param aInfo object that contains start-search-from indexes in source + * and current list + * @param aSource source list + * @param aSourceMatchIndex On return, contains the index of matching + * source item, or if not found, the count of + * source list. (Returning count simplifies + * client functions algorithm) + * @param aTargetMatchIndex On return, contains the index of matching + * target item, or if not found, the count of + * target (current) list. (Returning count + * simplifies client functions algorithm) + */ + void FindMatchingItems( const NGlxItemList::TDifferenceInfo& aInfo, + const CMPXCollectionPath& aSource, TInt& aSourceMatchIndex, + TInt& aTargetMatchIndex ); + + /** + * Process difference that would require removing items to eliminate. + * Forwards the actual "remove" request to the modification strategy + * @param aTargetMatchIndex Index until which items need to be removed + * @param aInfo Info of indexes needed to remove the items. + * Strategy can modify these indexes + * @param aStrategy strategy object that contains the logic of how to + * process the differences that are found + */ + void ProcessRemove( TInt aTargetMatchIndex, NGlxItemList::TDifferenceInfo& aInfo, + NGlxItemList::MListModificationStrategy& aStrategy ); + + /** + * Process difference that would require inserting items to eliminate. + * Forwards the actual "insert" request to the modification strategy + * @param aSourceMatchIndex Index to which items need to be copies + * @param aInfo Info of indexes needed to insert the items. + * Strategy can modify these indexes + * @param aStrategy strategy object that contains the logic of how to + * process the differences that are found + */ + void ProcessInsert( TInt aSourceMatchIndex, NGlxItemList::TDifferenceInfo& aInfo, + NGlxItemList::MListModificationStrategy& aStrategy ); + + /** + * @return item at index, non-const + */ + inline TGlxMedia& operator[] ( TInt aIndex ); + +private: + /// Media items in this list + RArray< TGlxMedia > iItems; + + /// The id of the "space" of unique item ids + TGlxIdSpaceId iIdSpaceId; + + /// User of media objects. Used for building a link from media object + /// (CGlxMedia) to its used when building a link from item (TGlxMedia) + /// to media object + MGlxMediaUser& iMediaUser; + + /// Observer for changes + MGlxItemListObserver& iObserver; + + __DECLARE_TEST; + }; + +#include "glxitemlist.inl" + +#endif // __C_GLXITEMLIST_H__