diff -r 45459746d5e8 -r 27f2d7aec52a engine/collectionframework/thumbnailcreator/inc/glxtntaskmanager.h --- a/engine/collectionframework/thumbnailcreator/inc/glxtntaskmanager.h Mon Sep 27 15:13:20 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,150 +0,0 @@ -/* -* 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: Task manager for multiple tasks. Allows asynchronosity and -* tracking/callback for long running tasks. -* -*/ - - - -/** - * @internal reviewed 30/07/2007 by Simon Brooks - */ - -#ifndef C_GLXTNTASKMANAGER_H -#define C_GLXTNTASKMANAGER_H - -#include "glxtnstd.h" -#include -#include - -// Forward declarations -class CGlxtnTask; -class MGlxtnThumbnailStorage; - -/** - * Active object which maintains a priority queue of long running tasks, and - * provides callback upon task completion or error. - * - * The highest priority task in the queue which has @ref CGlxtnTask::TState "state" - * EStarting is started and the task manager's RunL then delegates to the task's - * RunL until the task is complete, or is cancelled. The task is then deleted - * and another task is started, if any are ready to start. - * - * The task manager's DoCancel and RunError methods also delegate to the current - * task, if any. - * - * @ingroup glx_thumbnail_creator - */ -NONSHARABLE_CLASS(CGlxtnTaskManager) : public CActive - { -public: - enum TExecutionOrder - { - ELastOut, // Old tasks with the same priority get executed before the new task - EFirstOut // New task gets executed before other tasks with the same priority - }; -public: - /** - * Static constructor. - */ - static CGlxtnTaskManager* NewL(); - - /** - * Destructor. - */ - ~CGlxtnTaskManager(); - -public: - /** - * @returns CVieTask task at an index - */ - - inline CGlxtnTask* Task(TInt aIndex) const { return iTasks[aIndex]; }; - - /** - * Returns the highest priority task with the id. - * If there are multiple tasks with same id and priority, - * returns the one of those that will be executed first - */ - CGlxtnTask* Task(const TGlxtnTaskId& aId) const; - - /** - * Adds a task to the task list. If no task is currently running, the task - * is started. - * - * @param aTask Task to add. Takes ownership, task is deleted if a leave occurs. - * - * @param aExecutionOrder -if ELastOut, the tast gets added to the bottom - * of the queue of the tasks with the same priority - * as the new tasks. This means that the task is - * executed after the previously added tasks (with - * same priority) have been run. - * -if EFirstOut, the task gets added to the top, - * and will be executed before the other tasks - * with the same priority (unless more tasks added - * later, of course) - */ - void AddTaskL(CGlxtnTask* aTask, TExecutionOrder aExecutionOrder = ELastOut); - - /** - * Cancel all tasks relating to a given media item. - * @param aItemId ID of media item. - */ - void CancelTasks(const TGlxMediaId& aItemId); - - /** - * Cancel all tasks using a given storage. - * @param aClient Reference to thumbnail storage. - */ - void CancelTasks(MGlxtnThumbnailStorage* aStorage); - - /** - * Gets the total task count - * - * @return TInt task count - */ - inline TInt TaskCount() const { return iTasks.Count(); }; - -protected: - /** - * Constructors - */ - CGlxtnTaskManager(); - void ConstructL(); - -private: // From CActive - void RunL(); - void DoCancel(); - TInt RunError(TInt aError); - -private: - /** - * Issue a self-completing request causing RunL to be called. - */ - void AsyncRun(); - -private: - /** - * Task list in priority order - */ - RPointerArray iTasks; - - /** - * Task that is currently being run. - */ - CGlxtnTask* iCurrentTask; - }; - -#endif // C_GLXTNTASKMANAGER_H