photosgallery/slideshow/view/src/shwslideshowview.cpp
branchRCL_3
changeset 25 191387a8b767
parent 18 bcb43dc84c44
child 30 a60acebbbd9d
--- a/photosgallery/slideshow/view/src/shwslideshowview.cpp	Wed Apr 14 15:57:24 2010 +0300
+++ b/photosgallery/slideshow/view/src/shwslideshowview.cpp	Tue Apr 27 16:37:53 2010 +0300
@@ -67,6 +67,10 @@
 #include <glxtexturemanager.h>
 #include <glxerrormanager.h>             
 #include <glxthumbnailattributeinfo.h>   
+#include <glxicons.mbg>
+#include <AknIconUtils.h>
+#include <glxuistd.h>
+
 namespace
     {
     _LIT(KShwSlideshowViewResource,"shwslideshowview.rsc");
@@ -201,8 +205,8 @@
 	// Show the dialog, we show it non blocking so no use for the return value
 	iWaitDialog->RunLD();
 	// set the callback to be engine start
-	iAsyncCallBack->Set( 
-	    TShwCallBack< CShwSlideshowView, StartEngineL >( this ) );
+    iAsyncCallBack->Set(TShwCallBack<CShwSlideshowView,
+            &CShwSlideshowView::StartEngineL> (this));
     // if both lists are ready
     if( iInputListReady && iPlayListReady )
         {
@@ -325,7 +329,9 @@
     
 	iEnv = iUiUtility->Env();
    	iDisplay = iUiUtility->Display();
-
+   	iScrnSize = iUiUtility->DisplaySize();
+   	iGridIconSize = iUiUtility->GetGridIconSize();
+   	
     // Construct the volume control
     iVolumeControl = CShwSlideshowVolumeControl::
         NewL( *iEnv,
@@ -354,8 +360,8 @@
     iPopulateListCallBack = new( ELeave )
         CAsyncCallBack( CActive::EPriorityStandard );
     // set the callback for the media list population
-    iPopulateListCallBack->Set(
-        TShwCallBack< CShwSlideshowView, PopulateListL >( this ) );
+    iPopulateListCallBack->Set(TShwCallBack<CShwSlideshowView,
+            &CShwSlideshowView::PopulateListL> (this));
     iMSKPressed = EFalse;
     iLSKPressed = EFalse;
     }
@@ -434,6 +440,10 @@
 		{
 	    iHdmiController = CGlxHdmiController::NewL();
 		}
+	if(!iTvConnection)
+		{
+		iTvConnection = CGlxTv::NewL( *this );
+		}
     // Engine related construction
     // Instantiate the slideshow engine, with this class as its observer
     __ASSERT_DEBUG( !iEngine, Panic( EGlxPanicAlreadyInitialised ) );
@@ -464,8 +474,8 @@
 
     // Request asynch callback that will end up in ShowProgressDialogL
     // once the active scheduler runs
-    iAsyncCallBack->Set( 
-        TShwCallBack< CShwSlideshowView, ShowProgressDialogL >( this ) );
+    iAsyncCallBack->Set(TShwCallBack<CShwSlideshowView,
+            &CShwSlideshowView::ShowProgressDialogL> (this));
     iAsyncCallBack->CallBack();
 
     iDisplay->Roster().ShowL( *iGestureControlGroup,KAlfRosterShowAtTop );
@@ -494,6 +504,11 @@
         delete iHdmiController;
         iHdmiController = NULL;
         }
+    if(iTvConnection)
+        {
+        delete iTvConnection;
+        iTvConnection = NULL;
+        }
 
     //check if we have engine active object starting
     if( iPopulateListCallBack->IsActive() )
@@ -1291,8 +1306,60 @@
     if ( (item.Category() != EMPXVideo) 
             && (error == KErrNone) )
         {
-        GLX_LOG_INFO("CShwSlideshowView::SetImageToHDMIL - CGlxHdmi - Setting the Image");
-        iHdmiController->SetImageL(item.Uri());
+        GLX_LOG_INFO("CShwSlideshowView::SetImageToHDMIL - CGlxHdmi - Fetch FS thumbnail");
+        TMPXAttribute fsTnAttrib = TMPXAttribute(KGlxMediaIdThumbnail,
+                GlxFullThumbnailAttributeId(ETrue, iScrnSize.iWidth,
+                        iScrnSize.iHeight));
+        const CGlxThumbnailAttribute* fsValue = item.ThumbnailAttribute(
+                fsTnAttrib);
+        if (fsValue)
+            {
+            GLX_LOG_INFO("CShwSlideshowView::SetImageToHDMIL - CGlxHdmi - Setting FS Bitmap");
+            CFbsBitmap* fsBitmap = new (ELeave) CFbsBitmap;
+            CleanupStack::PushL(fsBitmap);
+            fsBitmap->Duplicate( fsValue->iBitmap->Handle());
+            
+            GLX_LOG_INFO2("CShwSlideshowView::SetImageToHDMIL - CGlxHdmi - FS Bitmap Size width=%d, height=%d", 
+                    fsBitmap->SizeInPixels().iWidth, fsBitmap->SizeInPixels().iHeight);
+            iHdmiController->SetImageL(item.Uri(),fsBitmap);
+            CleanupStack::PopAndDestroy(fsBitmap);
+            }
+        else
+            {
+            GLX_LOG_INFO("CShwSlideshowView::SetImageToHDMIL - CGlxHdmi - Fetch Grid thumbnail");
+            TMPXAttribute gridTnAttrib = TMPXAttribute(KGlxMediaIdThumbnail,
+                    GlxFullThumbnailAttributeId(ETrue, iGridIconSize.iWidth,
+                            iGridIconSize.iHeight));
+            const CGlxThumbnailAttribute* gridvalue = item.ThumbnailAttribute(
+                    gridTnAttrib);
+
+            if (gridvalue)
+                {
+                GLX_LOG_INFO("CShwSlideshowView::SetImageToHDMIL - CGlxHdmi - Setting Grid Bitmap");
+                CFbsBitmap* gridBitmap = new (ELeave) CFbsBitmap;
+                CleanupStack::PushL(gridBitmap);
+                gridBitmap->Duplicate( gridvalue->iBitmap->Handle());
+                
+                GLX_LOG_INFO2("CShwSlideshowView::SetImageToHDMIL - CGlxHdmi - gridBitmap Size width=%d, height=%d", 
+                        gridBitmap->SizeInPixels().iWidth, gridBitmap->SizeInPixels().iHeight);
+                iHdmiController->SetImageL(item.Uri(),gridBitmap);
+                CleanupStack::PopAndDestroy(gridBitmap);
+                }
+            else
+                {
+                GLX_LOG_INFO("CShwSlideshowView::SetImageToHDMIL - CGlxHdmi - Setting Null Bitmap");
+                TFileName resFile(KDC_APP_BITMAP_DIR);
+                resFile.Append(KGlxIconsFilename);
+                CFbsBitmap* defaultBitmap = new (ELeave) CFbsBitmap;
+                CleanupStack::PushL(defaultBitmap);
+                defaultBitmap = AknIconUtils::CreateIconL(resFile,
+                        EMbmGlxiconsQgn_prop_image_notcreated);
+                GLX_LOG_INFO2("CShwSlideshowView::SetImageToHDMIL - CGlxHdmi - Default Size width=%d, height=%d", 
+                        defaultBitmap->SizeInPixels().iWidth, defaultBitmap->SizeInPixels().iHeight);
+                iHdmiController->SetImageL(item.Uri(),defaultBitmap);
+                CleanupStack::PopAndDestroy(defaultBitmap); 
+                }
+            }
         }
     else
         {
@@ -1371,4 +1438,26 @@
     ProcessCommandL(EAknSoftkeyExit);
     }
 
+// ---------------------------------------------------------------------------
+//
+// HandleTvStatusChangedL
+// ---------------------------------------------------------------------------
+//
+void CShwSlideshowView::HandleTvStatusChangedL(TTvChangeType aChangeType )
+	{
+	TRACER("CShwSlideshowView::HandleTvConnectionStatusChangedL");
+    // This is a common function for both HDMI and TV-out status changes 
+    // (see CGlxTv::HandleTvConnectionStatusChangedL)
+    if ((aChangeType == ETvConnectionChanged)
+            && (!iTvConnection->IsHDMIConnected()
+                   	&& !iTvConnection->IsConnected()))
+	         {
+                 GLX_LOG_INFO("CShwSlideshowView::HandleTvConnectionStatusChangedL- Acessory Not Connected");
+	         //Issue pause command if not already paused
+                 if (!iPauseHandler->IsSlideShowEngineStatePaused())
+                    {
+	              ProcessCommandL(EShwSlideshowCmdPause);
+	            }
+		}
+	}