--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/collectionframework/thumbnailcreator/inc/glxtntaskmanager.h Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,151 @@
+/*
+* 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 <glxmediaid.h>
+#include <e32base.h>
+
+// 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<CGlxtnTask> iTasks;
+
+ /**
+ * Task that is currently being run.
+ */
+ CGlxtnTask* iCurrentTask;
+ };
+
+#endif // C_GLXTNTASKMANAGER_H