--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/inc/CPbk2ThumbnailManager.h Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 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: Thumbnail manager for the social phonebook.
+*
+*/
+
+#ifndef CPBK2THUMBNAILMANAGER_H_
+#define CPBK2THUMBNAILMANAGER_H_
+
+// external includes
+#include <e32base.h>
+#include <MVPbkSingleContactOperationObserver.h>
+#include <MPbk2ImageOperationObservers.h>
+#include <MVPbkContactViewObserver.h>
+#include <TPbk2IconId.h>
+#include "MPbk2FilteredViewStack.h"
+
+//FORWARD declaration
+class CPbk2ImageManager;
+class CVPbkContactManager;
+class MVPbkContactOperationBase;
+class MVPbkContactLink;
+class MVPbkStoreContact;
+class MVPbkBaseContact;
+class MVPbkFieldType;
+class CPbk2TmItem;
+class CPbk2IconArray;
+
+//internal state of the loader
+enum TTMLoadingState
+ {
+ ELoading,
+ EIdle
+ };
+
+// state for determining whether to optimize or not
+enum TTMOptimizationState
+ {
+ EOptimize,
+ ENoOptimization
+ };
+
+/*
+ * Observer class for the manager
+ */
+class MPbk2ThumbnailManagerObserver
+ {
+public:
+
+ /*
+ * This is called after all thumbnails from the loading queue is loaded.
+ */
+ virtual void LoadingFinished() = 0;
+
+ /*
+ * Informs observer that loading of thumbnail is complete
+ * Param@ aError, KErrNone if success, KErrNotFound if not found.
+ * param@ index on listbox or KErrNotFound if not found
+ */
+ virtual void ThumbnailLoadingComplete( TInt aError, TInt aIndex ) = 0;
+
+ /*
+ * Informs the observer that thumbnail has been deleted from the manager's array. Listbox index is the index
+ * that is given when thumbnail is asked to be loaded
+ */
+ virtual void ThumbnailRemoved( const MVPbkContactLink& aLink, TInt aIndex ) = 0;
+
+ };
+
+
+/*
+ * Class for loading contact thumbnails
+ */
+NONSHARABLE_CLASS( CPbk2ThumbnailManager ) : public CBase,
+ public MVPbkSingleContactOperationObserver,
+ public MPbk2ImageGetObserver,
+ public MVPbkContactViewObserver,
+ public MPbk2FilteredViewStackObserver
+ {
+public: // constructor & destructor
+
+ IMPORT_C static CPbk2ThumbnailManager* NewL( CVPbkContactManager& aContactManager );
+ virtual ~CPbk2ThumbnailManager();
+
+
+public: // new functions
+
+ /*
+ * Sets observer for the manager
+ */
+ void SetObserver( MPbk2ThumbnailManagerObserver& aObserver );
+
+ /*
+ * Removes observer
+ */
+ void RemoveObserver();
+
+
+ /*
+ * Returns icon index from Pbk2IconArray for double listbox index.
+ * If icon is not set, default icon index is returned
+ */
+ TInt GetPbkIconIndexL( TInt aListboxIndex, const MVPbkContactLink& aContactLink );
+
+ /*
+ * Setter for default icon ID
+ */
+ void SetDefaultIconId( TPbk2IconId aDefaultIconId );
+
+ /*
+ * Returns default icon id
+ */
+ const TPbk2IconId& GetDefaultIconId();
+
+ /*
+ * Setter for Pbk2IconArray. Thumbnail manager doesn't own the array.
+ */
+ void SetPbkIconArray( CPbk2IconArray* aIconArray );
+
+ /*
+ * Removes icon array from the manager. Doesn't destroy the arrray
+ */
+ void RemoveIconArray();
+
+ /*
+ * Returns number of loaded thumbnails
+ */
+ TInt ThumbnailCount();
+
+ /**
+ * Reset thumbnail manager. Clear cache and cancel all ongoing operations.
+ * NOTICE: Does not remove icons from icon array.
+ */
+ void Reset();
+
+ /*
+ * Setter for thumbnail icon size
+ */
+ void SetThumbnailIconSize( TSize aSize );
+
+ /*
+ * Getter for thumbnail icon size
+ */
+ const TSize& GetThumbnailIconSize();
+
+ /**
+ * Set view for thumbnail manager. Thumbnail manager will start observing the
+ * view and update it's internal state accordingly. Remove view by setting it
+ * to NULL.
+ */
+ void SetContactViewL( MPbk2FilteredViewStack* aView );
+
+private: // new functions
+
+ /**
+ * Removes contact from loader's array and deletes the thumbnail.
+ */
+ void RemoveThumbnail( const MVPbkContactLink& aContactLink, TInt aListboxIndex );
+
+ /*
+ * reset listbox indexes to match the array order
+ */
+ void ResetIndexes();
+
+ /*
+ * Removes allready loaded thumbnail from the last position of the priorization array.
+ * Removes also image from Pbk2IconArray and iContactThumbnails.
+ */
+ void MakeRoomForNextThumbnail();
+
+ /*
+ * Starts loading of the contact thumbnails.
+ */
+ void StartLoading();
+
+ /*
+ * Loads the thumbnail for the contact
+ */
+ void DoLoadThumbnail( MVPbkBaseContact& aContact );
+
+ /*
+ * Duplicates the bitmap handle
+ */
+ CFbsBitmap* DuplicateBitmapL( CFbsBitmap* aSourceBitmap );
+
+ /*
+ * Reads file type for the contact image
+ */
+ void ReadFieldTypeL();
+
+ /**
+ * Append bitmap into icon array
+ */
+ void AppendIconL( TPbk2IconId& aIcon, CFbsBitmap* aBitmap );
+
+ /*
+ * Icon indexes must be updated after icon(s) are removed from the icon array
+ */
+ void UpdateIconIndexes( );
+
+ /**
+ * Handle view ready events
+ */
+ void DoContactViewReadyL( MVPbkContactViewBase& aView );
+
+ /**
+ * Create empty thumbnail item array reflecting the aView.
+ */
+ void PreCreateThumbnailArrayL( MVPbkContactViewBase& aView );
+
+ /**
+ * Flush cached thumbnails and cancel all ongoing and scheduled operations.
+ * Remove icons from icon array if available.
+ */
+ void FlushCache();
+
+private: // From MVPbkSingleContactOperationObserver
+ void VPbkSingleContactOperationComplete(
+ MVPbkContactOperationBase& aOperation,
+ MVPbkStoreContact* aContact );
+
+ void VPbkSingleContactOperationFailed(
+ MVPbkContactOperationBase& aOperation,
+ TInt aError );
+
+private: // From MPbk2ImageGetObserver
+ void Pbk2ImageGetComplete(
+ MPbk2ImageOperation& aOperation,
+ CFbsBitmap* aBitmap );
+ void Pbk2ImageGetFailed(
+ MPbk2ImageOperation& aOperation,
+ TInt aError );
+
+private: // From MVPbkContactViewObserver
+ void ContactViewReady( MVPbkContactViewBase& aView );
+ void ContactViewUnavailable( MVPbkContactViewBase& aView );
+ void ContactAddedToView(
+ MVPbkContactViewBase& aView,
+ TInt aIndex,
+ const MVPbkContactLink& aContactLink );
+ void ContactRemovedFromView(
+ MVPbkContactViewBase& aView,
+ TInt aIndex,
+ const MVPbkContactLink& aContactLink );
+ void ContactViewError(
+ MVPbkContactViewBase& aView,
+ TInt aError,
+ TBool aErrorNotified );
+
+private: // From MPbk2FilteredViewStackObserver
+ void TopViewChangedL( MVPbkContactViewBase& aOldView );
+ void TopViewUpdatedL();
+ void BaseViewChangedL();
+ void ViewStackError( TInt aError );
+ void ContactAddedToBaseView(
+ MVPbkContactViewBase& aBaseView,
+ TInt aIndex,
+ const MVPbkContactLink& aContactLink );
+
+
+private: //constructors
+ CPbk2ThumbnailManager( CVPbkContactManager& aContactManager );
+ void ConstructL();
+
+private: //data
+
+ //OWN: thumbnail size
+ TSize iIconSize;
+
+ // internal state
+ TTMLoadingState iState;
+
+ /// Own: thumbnails
+ RPointerArray<CPbk2TmItem> iContactThumbnails;
+
+ /// Own: Loading queue for the thumbnails
+ RPointerArray<CPbk2TmItem> iLoadingQueue;
+
+ /// Own: Thumbnail manager
+ CPbk2ImageManager* iManager;
+
+ // ref:
+ CVPbkContactManager& iContactManager;
+
+ /// Own: Retrieve operation
+ MVPbkContactOperationBase* iRetrieveOperation;
+
+ /// Own: Store contact
+ MVPbkStoreContact* iStoreContact;
+
+ /// Own: Asynchronous thumbnail operation
+ MPbk2ImageOperation* iThumbOperation;
+
+ // REF: observer for the loader
+ MPbk2ThumbnailManagerObserver* iObserver;
+
+ /// Ref: Field type
+ const MVPbkFieldType* iFieldType;
+
+ //REF: listbox icon array
+ CPbk2IconArray* iIconArray;
+
+ // default icon index and id
+ TInt iDefaultIconIndex;
+ TPbk2IconId iDefaultIconId;
+ // icon index counter
+ TInt iIconIdCounter;
+ // loading priority.
+ RArray<MVPbkContactLink*> iPriorityArray;
+ /// Own: Holds the item whose thumbnail load is in progress
+ /// This item needs to be removed when its safe
+ CPbk2TmItem* iInProgressItemToBeRemoved;
+ /// Not own. Filtered view of contacts.
+ MPbk2FilteredViewStack* iView;
+ /// Flag whether cache is clean. Used to prevent unnecessary work when cleaning
+ /// is requested repeatedly
+ TBool iIsCacheClean;
+ };
+
+#endif /* CPBK2THUMBNAILMANAGER_H_ */