photosgallery/collectionframework/thumbnailcreator/thumbnailcomposerplugin/glxthumbnailcomposerplugin.h
changeset 0 4e91876724a2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/collectionframework/thumbnailcreator/thumbnailcomposerplugin/glxthumbnailcomposerplugin.h	Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,194 @@
+/*
+* 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:    Thumbnail Composer  plugin
+*
+*/
+
+
+
+
+/**
+ * @internal reviewed 12/07/2007 by Simon Brooks
+ */
+
+#ifndef __CTHUMBNAILCOMPOSERPLUGIN_H__
+#define __CTHUMBNAILCOMPOSERPLUGIN_H__
+
+#include <ComposerPlugin.h>
+#include <MdEObject.h>
+#include <MpxCollectionObserver.h>
+class MMPXCollectionUtility;
+class CMPXCollectionPath;
+class CGlxThumbnailComposerPlugin;
+
+/**
+ * Timer to allow inactivity delay if background generation task is cancelled
+ */
+class CGlxThumbnailCompeserInactivityTimer : public CTimer
+    {
+    public:
+        ~CGlxThumbnailCompeserInactivityTimer();
+        static CGlxThumbnailCompeserInactivityTimer* NewL(TInt aPriority, CGlxThumbnailComposerPlugin& aCallback);
+        void After(TTimeIntervalMicroSeconds32 aInterval);
+    private:
+        CGlxThumbnailCompeserInactivityTimer(TInt aPriority, CGlxThumbnailComposerPlugin& aCallback);
+    private: // from CActive
+        void RunL();
+        void DoCancel();
+        TInt RunError(TInt aError);
+    private:
+        CGlxThumbnailComposerPlugin& iCallback;
+    };
+
+
+/**
+ * Composer plugin to initiate background generation when new items are
+ * harvested by the MDS harvester.
+ *
+ * @author David Holland
+ */
+NONSHARABLE_CLASS( CGlxThumbnailComposerPlugin ) :
+                  public CComposerPlugin, MMPXCollectionObserver 
+    {
+    public:
+        /**
+        * Construction
+        */
+        static CGlxThumbnailComposerPlugin* NewL();
+
+        /**
+        * Destruction
+        */
+        ~CGlxThumbnailComposerPlugin();
+
+    private:    // From CComposerPlugin
+
+        TBool IsComposingComplete();
+        void SetObservers();
+        void RemoveObservers();
+
+    private:    // From MMdEObjectObserver
+
+#ifdef RD_MDS_2_0
+        void HandleObjectAdded(CMdESession& aSession,
+                                const RArray<TItemId>& aObjectIdArray);
+        void HandleObjectModified(CMdESession& aSession,
+                                const RArray<TItemId>& aObjectIdArray);
+        void HandleObjectRemoved(CMdESession& aSession,
+                                const RArray<TItemId>& aObjectIdArray);
+#else
+        /**
+         * See @ref MMdEObjectObserver::HandleObjectNotification
+         */
+        void HandleObjectNotification(CMdESession& aSession, 
+		    				TObserverNotificationType aType,
+				    		const RArray<TItemId>& aObjectIdArray);
+#endif
+
+    private:    // From MMPXCollectionObserver
+
+        void HandleCollectionMediaL( const CMPXMedia& aMedia, TInt aError );
+        void HandleCollectionMessage( CMPXMessage* aMsg, TInt aErr );
+        void HandleOpenL( const CMPXMedia& aEntries,
+                            TInt aIndex, TBool aComplete, TInt aError );
+        void HandleOpenL( const CMPXCollectionPlaylist& aPlaylist,
+                            TInt aError );
+        void HandleCommandComplete( CMPXCommand* aCommandResult,
+                                    TInt aError );
+
+    private:
+
+        /**
+        * Private constructor
+        */	
+        CGlxThumbnailComposerPlugin();
+
+        /**
+        * 2nd phase construction
+        */	
+        void ConstructL();
+
+        /**
+        * Add observers to MdE session.
+        */
+        void SetObserversL();
+
+        void DoHandleCollectionMessageL( const CMPXMessage& aMsg );
+
+        /**
+        * Send next media request to the collection.
+        */
+        void RequestItemL();
+
+    public:
+        /**
+        * Open "all" collection with thumbnail loadability filter.
+        */
+        void DoOpenCollectionL();
+
+        /**
+        * Send next media request to the collection.
+        */
+        void DoRequestItemL();
+
+        /**
+        * Free resources and go to idle state.
+        */
+        void ReturnToIdle();
+
+        /**
+        * Delay display state check, if screen is on. 
+        */
+        void DelayDisplayStateCheck();
+        
+        /**
+        * Callback for iCollectionCloser
+        */
+        void CloseCollection();
+
+    public:
+        /**
+        * Enumeration of states for the plugin.
+        */
+        enum TComposerState
+            {
+            EStateIdle,
+            EStateFirstOpening,
+            EStateOpening,
+            EStateActiveLarge,
+            EStateActiveSmall,
+            EStateCleanup,
+            EStateClosing
+            };
+
+        /** Current state of the plugin */
+        TComposerState iState;
+
+    private:
+        /** Isolated collection utility (owned) */
+        MMPXCollectionUtility* iCollectionUtility;
+
+        /** Path from collection (owned) */
+        CMPXCollectionPath* iPath;
+
+        /** Index of item to thumbnail */
+        TInt iCurrentIndex;
+
+        /** Timer to restart Background Harvesting once inactive */
+        CGlxThumbnailCompeserInactivityTimer* iInactivityTimer;
+        
+        TInt iLastError;
+    };
+
+#endif // __CTHUMBNAILCOMPOSERPLUGIN_H__