--- 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 );
}