ui/uiengine/medialistwrapper/src/glxmlwrapper_p.cpp
changeset 29 2c833fc9e98f
parent 26 c499df2dbb33
child 33 1ee2af37811f
--- a/ui/uiengine/medialistwrapper/src/glxmlwrapper_p.cpp	Mon May 03 12:31:32 2010 +0300
+++ b/ui/uiengine/medialistwrapper/src/glxmlwrapper_p.cpp	Fri May 14 15:52:22 2010 +0300
@@ -68,13 +68,13 @@
 // ---------------------------------------------------------------------------
 //
 GlxMLWrapperPrivate* GlxMLWrapperPrivate::Instance(GlxMLWrapper* aMLWrapper,
-    int aCollectionId, int aHierarchyId, TGlxFilterItemType aFilterType)
+    int aCollectionId, int aHierarchyId, TGlxFilterItemType aFilterType,QString uri)
     {
     TRACER("GlxMLWrapperPrivate::NewLC()");
 
     GlxMLWrapperPrivate* self = new GlxMLWrapperPrivate(aMLWrapper);
    if(self){
-	   TRAPD(err,self->ConstructL(aCollectionId, aHierarchyId, aFilterType));
+	   TRAPD(err,self->ConstructL(aCollectionId, aHierarchyId, aFilterType,uri));
 	   if(err != KErrNone){
 		   delete self;
 		   self = NULL;
@@ -102,16 +102,22 @@
     iListThumbnailContext = NULL;
     iFocusGridThumbnailContext = NULL;
     iFocusFsThumbnailContext = NULL;
+    iFilmStripThumbnailContext = NULL;
+    iFavouriteContext = NULL;    
     }
 
 // ---------------------------------------------------------------------------
 // Symbian 2nd phase constructor can leave.
 // ---------------------------------------------------------------------------
 //  
-void GlxMLWrapperPrivate::ConstructL(int aCollectionId, int aHierarchyId, TGlxFilterItemType aFilterType)
+void GlxMLWrapperPrivate::ConstructL(int aCollectionId, int aHierarchyId, TGlxFilterItemType aFilterType,QString uri)
     {
     TRACER("GlxMLWrapperPrivate::ConstructL");
-	if(aCollectionId != KGlxAlbumsMediaId)
+     if(aCollectionId == KGlxCollectionPluginFavoritesAlbumId)
+         {
+         CreateMediaListFavoritesItemL(aCollectionId, aHierarchyId,aFilterType,uri);
+         }
+     else if(aCollectionId != KGlxAlbumsMediaId)
 		{
 		CreateMediaListL(aCollectionId, aHierarchyId,aFilterType);
 		}
@@ -121,7 +127,7 @@
 		CreateMediaListAlbumItemL(aCollectionId, aHierarchyId,aFilterType);
 		}
 	iMLGenericObserver = CGlxMLGenericObserver::NewL(*iMediaList,this);
-	iBlockyIteratorForFocus.SetRangeOffsets(0,0);
+	iBlockyIteratorForFilmStrip.SetRangeOffsets(0,0);
     }
 
 // ---------------------------------------------------------------------------
@@ -135,6 +141,7 @@
 	RemovePtFsContext();
 	RemoveLsFsContext();
 	RemoveListContext();
+	RemoveFavouriteContext();
 	delete iMLGenericObserver;
 	iMLGenericObserver = NULL;
 	if (iMediaList)
@@ -154,15 +161,45 @@
 		{  
 		TRAP(err, SetThumbnailContextL(aContextMode) ); //todo add a trap here
 		}
-	else 
+	else if(aContextMode == GlxContextFavorite)
+	    {
+	    TRAP(err,SetFavouriteContextL());
+	    }
+	else
 		{
 		TRAP(err, SetListContextL(aContextMode) );
 		}
+	
 	GLX_LOG_INFO1("GlxMLWrapperPrivate::SetContextMode error %d", err);
 	iContextMode = aContextMode;
 	}
 
 // ---------------------------------------------------------------------------
+// SetFavouriteContextL
+// ---------------------------------------------------------------------------
+//
+void GlxMLWrapperPrivate::SetFavouriteContextL()
+    {
+    iFavouriteContext = CGlxDefaultAttributeContext::NewL();
+    iFavouriteContext->AddAttributeL( KMPXMediaGeneralCount );
+    iMediaList->AddContextL( iFavouriteContext, KGlxFetchContextPriorityLow );
+    }
+	
+// ---------------------------------------------------------------------------
+// RemoveFavouriteContext
+// ---------------------------------------------------------------------------
+//
+void GlxMLWrapperPrivate::RemoveFavouriteContext()
+    {
+    if(iFavouriteContext )
+        {
+        iMediaList->RemoveContext(iFavouriteContext);
+        delete iFavouriteContext;
+        iFavouriteContext = NULL;        
+        }
+	}
+
+// ---------------------------------------------------------------------------
 // SetListContextL
 // ---------------------------------------------------------------------------
 //
@@ -178,7 +215,9 @@
 			    iTitleAttributeContext->SetRangeOffsets( KListDataWindowSize, 
 						KListDataWindowSize );
 			    iTitleAttributeContext->AddAttributeL( KMPXMediaGeneralTitle );
-				iMediaList->AddContextL( iTitleAttributeContext, KMaxTInt );
+			    iTitleAttributeContext->AddAttributeL( KGlxMediaGeneralSlideshowableContent );
+			    iTitleAttributeContext->AddAttributeL( KGlxMediaGeneralSystemItem );
+				iMediaList->AddContextL( iTitleAttributeContext, KGlxFetchContextPriorityNormal );
 				}
 			if(NULL == iSubtitleAttributeContext)
 				{
@@ -187,7 +226,7 @@
 						 KListDataWindowSize );
 				iSubtitleAttributeContext->AddAttributeL( 
 								 KGlxMediaCollectionPluginSpecificSubTitle );
-				iMediaList->AddContextL( iSubtitleAttributeContext, KMaxTInt );
+				iMediaList->AddContextL( iSubtitleAttributeContext, KGlxFetchContextPriorityNormal );
 
 				}
             if(NULL == iListThumbnailContext)
@@ -207,7 +246,9 @@
                 iTitleAttributeContext = CGlxDefaultListAttributeContext::NewL();
                 iTitleAttributeContext->SetRangeOffsets( KListDataWindowSize, KListDataWindowSize );
                 iTitleAttributeContext->AddAttributeL( KMPXMediaGeneralTitle );
-                iMediaList->AddContextL( iTitleAttributeContext, KMaxTInt );
+                iTitleAttributeContext->AddAttributeL( KGlxMediaGeneralSlideshowableContent );
+                iTitleAttributeContext->AddAttributeL( KGlxMediaGeneralSystemItem );
+                iMediaList->AddContextL( iTitleAttributeContext, KGlxFetchContextPriorityNormal );
             }
         iSelectionListContextActivated = ETrue;
         }
@@ -236,8 +277,8 @@
     }
 	
 	if(aContextMode == GlxContextLsFs && !iLsFsContextActivated) {
-		if(!iGridContextActivated) {
-			CreateGridContextL();
+		if(iGridContextActivated) {
+            RemoveGridContext();
 		}
 		if(iPtFsContextActivated) {
 			RemovePtFsContext();
@@ -246,8 +287,8 @@
 	}
 	
 	if(aContextMode == GlxContextPtFs && !iPtFsContextActivated) {
-		if(!iGridContextActivated) {
-			CreateGridContextL();
+		if(iGridContextActivated) {
+            RemoveGridContext();
 		}
 		if(iLsFsContextActivated) {
 			RemoveLsFsContext();
@@ -306,14 +347,22 @@
             }
         if(!iFocusGridThumbnailContext)
             {
-            iFocusGridThumbnailContext = CGlxThumbnailContext::NewL( &iBlockyIteratorForFocus ); // set the thumbnail context for Focus Grid
+            iFocusGridThumbnailContext = CGlxDefaultThumbnailContext::NewL(); // set the thumbnail context for Focus Grid
+            iFocusGridThumbnailContext->SetRangeOffsets(0,0);
             iFocusGridThumbnailContext->SetDefaultSpec( KGridTNWIdth, KGridTNHeight );  //todo get these image sizes from  the layout.
             }
 
+        if(!iFilmStripThumbnailContext)
+            {
+            iFilmStripThumbnailContext = CGlxThumbnailContext::NewL( &iBlockyIteratorForFilmStrip ); // set the thumbnail context for Focus Grid
+            iFilmStripThumbnailContext->SetDefaultSpec( KGridTNWIdth, KGridTNHeight );  //todo get these image sizes from  the layout.
+            }
+
         // show static items if required
         iMediaList->SetStaticItemsEnabled(EFalse);
-        iMediaList->AddContextL(iFocusFsThumbnailContext, 7 );      // Temp will change this number  
-        iMediaList->AddContextL(iFocusGridThumbnailContext, 8 );    // Temp will change this number  
+        iMediaList->AddContextL(iFocusFsThumbnailContext, 8 );      // Temp will change this number  
+        iMediaList->AddContextL(iFocusGridThumbnailContext, 9 );    // Temp will change this number
+        iMediaList->AddContextL(iFilmStripThumbnailContext, 7 );    // Temp will change this number 
         iMediaList->AddContextL(iLsFsThumbnailContext, KGlxFetchContextPriorityGridViewFullscreenVisibleThumbnail );
         iLsFsContextActivated = ETrue;
         }
@@ -341,18 +390,26 @@
             {
             iFocusFsThumbnailContext = CGlxDefaultThumbnailContext::NewL(); 
             iFocusFsThumbnailContext->SetRangeOffsets(0,0);
-            iFocusFsThumbnailContext->SetDefaultSpec( KFullScreenTNLSWidth, KFullScreenTNLSHeight );  //todo get these image sizes from  the layout.
+            iFocusFsThumbnailContext->SetDefaultSpec( KFullScreenTNPTWidth, KFullScreenTNPTHeight );  //todo get these image sizes from  the layout.
             }
         if(!iFocusGridThumbnailContext)
             {
-            iFocusGridThumbnailContext = CGlxThumbnailContext::NewL( &iBlockyIteratorForFocus ); // set the thumbnail context for Focus Grid
+            iFocusGridThumbnailContext = CGlxDefaultThumbnailContext::NewL(); // set the thumbnail context for Focus Grid
+            iFocusGridThumbnailContext->SetRangeOffsets(0,0);
             iFocusGridThumbnailContext->SetDefaultSpec( KGridTNWIdth, KGridTNHeight );  //todo get these image sizes from  the layout.
             }
 
+        if(!iFilmStripThumbnailContext)
+            {
+            iFilmStripThumbnailContext = CGlxThumbnailContext::NewL( &iBlockyIteratorForFilmStrip ); // set the thumbnail context for Focus Grid
+            iFilmStripThumbnailContext->SetDefaultSpec( KGridTNPTWIdth, KGridTNPTHeight );  //todo get these image sizes from  the layout.
+            }
+
         // show static items if required
         iMediaList->SetStaticItemsEnabled(EFalse);
-        iMediaList->AddContextL(iFocusFsThumbnailContext, 7 );      // Temp will change this number  
-        iMediaList->AddContextL(iFocusGridThumbnailContext, 8 );    // Temp will change this number  
+        iMediaList->AddContextL(iFocusFsThumbnailContext, 8 );      // Temp will change this number  
+        iMediaList->AddContextL(iFocusGridThumbnailContext, 9 );    // Temp will change this number  
+        iMediaList->AddContextL(iFilmStripThumbnailContext, 7 );    // Temp will change this number 
         iMediaList->AddContextL(iPtFsThumbnailContext, KGlxFetchContextPriorityGridViewFullscreenVisibleThumbnail );
         iPtFsContextActivated = ETrue;
         }
@@ -398,6 +455,12 @@
             delete iFocusGridThumbnailContext;
             iFocusGridThumbnailContext = NULL;
 		    }
+		if(iFilmStripThumbnailContext)
+		    {
+		    iMediaList->RemoveContext(iFilmStripThumbnailContext);
+		    delete iFilmStripThumbnailContext;
+		    iFilmStripThumbnailContext = NULL;
+		    }		    
 	    
 		iLsFsContextActivated = EFalse;
 		}
@@ -428,6 +491,12 @@
             delete iFocusGridThumbnailContext;
             iFocusGridThumbnailContext = NULL;
             }
+        if(iFilmStripThumbnailContext)
+            {
+            iMediaList->RemoveContext(iFilmStripThumbnailContext);
+            delete iFilmStripThumbnailContext;
+            iFilmStripThumbnailContext = NULL;
+            }
 	        
 		iPtFsContextActivated = EFalse;
 		}
@@ -535,10 +604,35 @@
 	
 	GLX_LOG_INFO1("GlxMLWrapperPrivate::MediaListL  - Path level = %d",
 	                                                     path->Levels());
-	
-	CleanupStack::PopAndDestroy(path);
+		CleanupStack::PopAndDestroy(path);    
 	}
 
+// ---------------------------------------------------------------------------
+// CreateMediaListL() for Favorites Album 
+// Creates a collection path
+// Create a filter as requested filtertype
+// Creates the medialist
+// ---------------------------------------------------------------------------
+void GlxMLWrapperPrivate::CreateMediaListFavoritesItemL(int aCollectionId, int aHierarchyId, TGlxFilterItemType aFilterType,QString uri) 
+    {
+    TRACER("GlxMLWrapperPrivate::CreateMediaListFavoritesItemL");
+    Q_UNUSED(aHierarchyId); 
+    // Create path to the list of images and videos
+    CMPXCollectionPath* path = CMPXCollectionPath::NewL();
+    CleanupStack::PushL( path );
+    path->AppendL(KGlxCollectionPluginAlbumsImplementationUid);
+    path->AppendL( TMPXItemId(KGlxCollectionFavoritesId) );
+    path->Set( 0 );
+    TPtrC16 str(reinterpret_cast<const TUint16*>(uri.utf16()));
+    HBufC *ptr = str.Alloc();
+    CMPXFilter* filter = TGlxFilterFactory::CreateURIFilterL(*ptr);  
+    CleanupStack::PushL(filter);
+    iMediaList =  MGlxMediaList::InstanceL( *path, 
+            TGlxHierarchyId(KGlxCollectionPluginAlbumsDllUid), filter );
+    CleanupStack::PopAndDestroy( filter );
+    CleanupStack::PopAndDestroy( path );       
+    }
+
 /*
  * retrieveItemIcon
  */
@@ -604,6 +698,62 @@
     GLX_LOG_INFO1("### GlxMLWrapperPrivate::RetrieveItemIcon value-Index is %d and have returned empty icon",aItemIndex);
     return NULL;
 }
+
+QImage GlxMLWrapperPrivate::RetrieveItemImage(int aItemIndex, GlxTBContextType aTBContextType)
+    {
+    TInt itemHeight = 0;
+    TInt itemWidth = 0;
+    switch (aTBContextType)
+        {
+        case GlxTBContextGrid: 
+            {
+            itemHeight = KGridTNHeight;
+            itemWidth = KGridTNWIdth;
+            }
+            break;
+        case GlxTBContextPtFs: 
+            {
+            itemHeight = KFullScreenTNPTHeight;
+            itemWidth = KFullScreenTNPTWidth;
+            }
+            break;
+        case GlxTBContextLsFs: 
+            {
+            itemHeight = KFullScreenTNLSHeight;
+            itemWidth = KFullScreenTNLSWidth;
+            }
+            break;
+        }
+    const TGlxMedia& item = iMediaList->Item( aItemIndex );
+    TMPXAttribute thumbnailAttribute(KGlxMediaIdThumbnail, 
+            GlxFullThumbnailAttributeId( ETrue,itemWidth,itemHeight ) );      
+    const CGlxThumbnailAttribute* value = item.ThumbnailAttribute(
+            thumbnailAttribute );
+    TInt tnError = GlxErrorManager::HasAttributeErrorL(
+                      item.Properties(), KGlxMediaIdThumbnail );
+    TSize iconSize(itemWidth, itemHeight);
+
+    if (value && value->iBitmap != NULL)
+        {
+        value->iBitmap->LockHeap();
+        TUint32 *tempData = value->iBitmap->DataAddress();
+        uchar *data = (uchar *)(tempData);  
+        int bytesPerLine = value->iBitmap->ScanLineLength(value->iBitmap->SizeInPixels().iWidth , value->iBitmap->DisplayMode());
+        QImage image = QImage(data, value->iBitmap->SizeInPixels().iWidth, value->iBitmap->SizeInPixels().iHeight, bytesPerLine, QImage::Format_RGB16).convertToFormat(QImage::Format_ARGB32_Premultiplied);
+        value->iBitmap->UnlockHeap();
+        return image;
+         }
+    else if( tnError == KErrCANoRights) 
+        {
+        //handle DRM case
+        }
+    else if( tnError ) 
+        {
+        return QImage(GLXICON_CORRUPT);
+        }
+
+     return QImage();
+    }
 // ---------------------------------------------------------------------------
 //  RetrieveListTitle
 // ---------------------------------------------------------------------------
@@ -629,6 +779,33 @@
 }
 
 // ---------------------------------------------------------------------------
+//  Retrieve number of image contained by album list
+// ---------------------------------------------------------------------------
+//
+int GlxMLWrapperPrivate::RetrieveListItemCount(int aItemIndex)
+{
+    const TGlxMedia& item = iMediaList->Item( aItemIndex );
+    int count = 0;
+    TBool ret = item.GetSlideshowPlayableContainedItemCount(count);
+    if(ret)
+        return count;
+    else 
+        return 0;
+}
+
+// ---------------------------------------------------------------------------
+//  Retrieve the item is system item or not
+// ---------------------------------------------------------------------------
+//
+bool GlxMLWrapperPrivate::isSystemItem( int aItemIndex )
+{
+    const TGlxMedia& item = iMediaList->Item( aItemIndex );
+    TBool systemItem = false;
+    item.GetSystemItem( systemItem );
+    return systemItem ;
+}
+
+// ---------------------------------------------------------------------------
 //  RetrieveItemUri
 // ---------------------------------------------------------------------------
 //
@@ -1015,7 +1192,7 @@
     QImage image(data, aBitmap->SizeInPixels().iWidth, aBitmap->SizeInPixels().iHeight, bytesPerLine, QImage::Format_RGB16);
         
     QPixmap pixmap = QPixmap::fromImage(image);
-    if ( aBitmap->SizeInPixels().iWidth > itemWidth || aBitmap->SizeInPixels().iHeight ) {
+    if ( aBitmap->SizeInPixels().iWidth > itemWidth || aBitmap->SizeInPixels().iHeight > itemHeight ) {
         pixmap = pixmap.scaled( itemWidth, itemHeight, Qt::KeepAspectRatio );
     }