photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp
changeset 2 7d9067c6fcb1
parent 0 4e91876724a2
child 9 6b87b143d312
--- a/photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp	Thu Jan 07 12:46:23 2010 +0200
+++ b/photosgallery/viewframework/views/listview/src/glxpreviewthumbnailbinding.cpp	Mon Jan 18 20:19:20 2010 +0200
@@ -31,9 +31,9 @@
 
 const TInt KInitialThumbnailsTimeDelay(100000);
 const TInt KWaitCount(5);
-const TInt KThumbnailStartTimeDelay(2000000);
-const TInt KThumbnailIntervalTimeDelay(2000000);
-const TInt KPreviewThumbnailFetchCount(18);
+const TInt KThumbnailStartTimeDelay(250000);
+const TInt KThumbnailIntervalTimeDelay(50000);
+const TInt KPreviewThumbnailFetchCount(1);
 
 // ----------------------------------------------------------------------------
 // NewL
@@ -83,9 +83,19 @@
     CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
     iGridIconSize = uiUtility->GetGridIconSize();
     uiUtility->Close() ;
+    
+    // Filter that filters out any GIF, corrupted images     
+    iPreviewFilter = TGlxFilterFactory::CreatePreviewFilterL();    
+    iThumbnailIterator.SetRange(KPreviewThumbnailFetchCount);
+    iThumbnailContext = new (ELeave) CGlxAttributeContext(&iThumbnailIterator); 
+    TMPXAttribute tnAttr( KGlxMediaIdThumbnail,
+                        GlxFullThumbnailAttributeId(ETrue,
+                            iGridIconSize.iWidth,iGridIconSize.iHeight) );
+    iThumbnailContext->SetDefaultSpec(iGridIconSize.iWidth,
+                                                iGridIconSize.iHeight);
+    iThumbnailContext->AddAttributeL(tnAttr);
     }
 
-
 // ----------------------------------------------------------------------------
 // Destructor
 // ----------------------------------------------------------------------------
@@ -98,11 +108,11 @@
 		{
         iMediaList->RemoveMediaListObserver( this );
         iMediaList->RemoveContext(iThumbnailContext);
-        delete iThumbnailContext;
         iMediaList->Close();
         iMediaList = NULL;
 		}
-		
+    delete iThumbnailContext;
+    delete iPreviewFilter;
 	// cancel any outstanding request of the timer
 	if(iTimer->IsActive())
 	    {
@@ -139,13 +149,6 @@
                 CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
                 bitmap->Duplicate( value->iBitmap->Handle());
                 iObserver.PreviewTNReadyL(bitmap, NULL,iProgressIndex);
-                iProgressIndex++;
-                if (iProgressIndex >= KPreviewThumbnailFetchCount || 
-                    iProgressIndex >= iPreviewItemCount.Count() ||
-                    iProgressIndex >= iMediaList->Count())
-                    {
-                    iProgressIndex = 0;
-                    }
                 }
     	    }
        	}
@@ -177,12 +180,6 @@
 			CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
 			bitmap->Duplicate( value->iBitmap->Handle());
 			iObserver.PreviewTNReadyL(bitmap, NULL,iProgressIndex);
-			iProgressIndex++;
-			if (iProgressIndex >= KPreviewThumbnailFetchCount || 
-				iProgressIndex >= iMediaList->Count())
-				{
-				iProgressIndex = 0;
-				}
 			}
 		else
 			{
@@ -223,11 +220,12 @@
 // ----------------------------------------------------------------------------
 //    
 void CGlxPreviewThumbnailBinding::HandleItemChangedL(const CMPXCollectionPath& aPath,
-        TBool aPopulateListTNs )
+        TBool aPopulateListTNs, TBool aBackwardNavigation)
     {
     TRACER("CGlxPreviewThumbnailBinding::HandleItemChangedL");
     iTimerTicked = EFalse;
     iPopulateListTNs = aPopulateListTNs;
+    iBackwardNavigation = aBackwardNavigation;
     iProgressIndex = KErrNone;
 
     // remove and close old medialist   
@@ -238,29 +236,14 @@
 	    iTrialCount = 0;
 	    iMediaList->RemoveMediaListObserver( this );
         iMediaList->RemoveContext(iThumbnailContext);
-        delete iThumbnailContext;
-        iThumbnailContext = NULL;
         iMediaList->Close();
         iMediaList = NULL;
 	    }
 	    
-	// Filter that filters out any GIF, corrupted images    
-    CMPXFilter* filter = NULL;
-    filter = TGlxFilterFactory::CreatePreviewFilterL(); 
-    CleanupStack::PushL( filter );
-    // create new medialist with the required filter which filters out all DRM, GIFS and corrupt 
-    // thumbnial
-	iMediaList = MGlxMediaList::InstanceL( aPath ,KGlxIdNone, filter);
-	iThumbnailContext = CGlxThumbnailContext::NewL( &iThumbnailIterator ); // set the thumbnail context
-	iThumbnailIterator.SetRange( KPreviewThumbnailFetchCount ); // request for fifiteen thumbnails
-	iThumbnailContext->SetDefaultSpec( iGridIconSize.iWidth,iGridIconSize.iHeight );
-	iMediaList->AddContextL(iThumbnailContext ,KGlxFetchContextPriorityNormal );
+    iMediaList = MGlxMediaList::InstanceL(aPath, KGlxIdNone, iPreviewFilter);
+    iMediaList->AddContextL(iThumbnailContext, KGlxFetchContextPriorityNormal);
 	// adding the medialist to observ any changes or updates done
 	iMediaList->AddMediaListObserverL(this);
-	CleanupStack::PopAndDestroy( filter );
-	
-	//Start the timer
-	StartTimer(iPopulateListTNs);
     }
 
 // ----------------------------------------------------------------------------
@@ -282,32 +265,34 @@
         
     if (iPopulateListTNs)
         {
-        iTimer->Start(KInitialThumbnailsTimeDelay, KInitialThumbnailsTimeDelay, 
-            TCallBack(IsTimeL,this));   
+        if (iBackwardNavigation)
+            {
+            iTimer->Start(KThumbnailIntervalTimeDelay, KThumbnailIntervalTimeDelay/KWaitCount,
+                    TCallBack(IsTimeL,this));
+            }
+        else
+            {
+            iTimer->Start(KThumbnailStartTimeDelay, 
+                    KInitialThumbnailsTimeDelay, TCallBack(IsTimeL,this));
+            }
         }
-    else
+     }
+
+// ----------------------------------------------------------------------------
+// StopTimer - Stop the timer
+// ----------------------------------------------------------------------------
+//    
+void CGlxPreviewThumbnailBinding::StopTimer()
+    {
+    TRACER("CGlxPreviewThumbnailBinding::StopTimer");
+        
+    if (iTimer && iTimer->IsActive())
         {
-        iTimer->Start(KThumbnailStartTimeDelay, KThumbnailIntervalTimeDelay,
-            TCallBack(IsTimeL,this));               
+        iTimer->Cancel();
         }
     }
 
 // ----------------------------------------------------------------------------
-// HasFirstThumbnail
-// ----------------------------------------------------------------------------
-// 
- TBool CGlxPreviewThumbnailBinding::HasFirstThumbnail( const RArray< TMPXAttribute >& aAttributes )
-     {
-     TRACER("CGlxPreviewThumbnailBinding::HasFirstThumbnail");
-     TMPXAttribute thumbnailAttribute(KGlxMediaIdThumbnail, 
-                                          GlxFullThumbnailAttributeId( ETrue, 
-                                               iGridIconSize.iWidth,
-                                                   iGridIconSize.iHeight) );
-                                                          
-     TIdentityRelation< TMPXAttribute > match ( &TMPXAttribute::Match );
-     return ( KErrNotFound != aAttributes.Find( thumbnailAttribute, match ) );    
-     }
-// ----------------------------------------------------------------------------
 // HandleItemAddedL
 // ----------------------------------------------------------------------------
 // 
@@ -428,3 +413,15 @@
     {
     
     }
+
+// ----------------------------------------------------------------------------
+// HandlePopulatedL
+// ----------------------------------------------------------------------------
+//
+void CGlxPreviewThumbnailBinding::HandlePopulatedL( MGlxMediaList* /*aList*/ )
+    {
+    TRACER("CGlxPreviewThumbnailBinding::HandlePopulatedL()");
+    //Start the timer
+    StartTimer(iPopulateListTNs);
+    }
+