photosgallery/viewframework/views/gridview/src/glxgridviewmlobserver.cpp
branchRCL_3
changeset 32 78ad99c24f08
parent 30 a60acebbbd9d
child 35 420f6808bf21
--- a/photosgallery/viewframework/views/gridview/src/glxgridviewmlobserver.cpp	Tue May 11 16:13:40 2010 +0300
+++ b/photosgallery/viewframework/views/gridview/src/glxgridviewmlobserver.cpp	Tue May 25 12:42:31 2010 +0300
@@ -91,9 +91,10 @@
     iDRMUtility = CGlxDRMUtility::InstanceL();
 
     CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    CleanupClosePushL(*uiUtility);
     iGridIconSize = uiUtility->GetGridIconSize();
     iItemsPerPage = uiUtility->VisibleItemsInPageGranularityL();
-    uiUtility->Close() ;
+    CleanupStack::PopAndDestroy(uiUtility);
     
     iQualityTnAttrib = TMPXAttribute (KGlxMediaIdThumbnail, 
         GlxFullThumbnailAttributeId( ETrue,  iGridIconSize.iWidth, 
@@ -103,7 +104,11 @@
         GlxFullThumbnailAttributeId( EFalse,  iGridIconSize.iWidth, 
                 iGridIconSize.iHeight ) );
     
-    iDiskErrorIntimated = EFalse ;
+    iIconsFileName.Append(KDC_APP_BITMAP_DIR);
+    iIconsFileName.Append(KGlxIconsFilename);
+    iIsDefaultIconSet = EFalse;
+    
+    iDiskErrorIntimated = EFalse;
     }
 
 // ---------------------------------------------------------------------------
@@ -139,7 +144,18 @@
 
     if ((aEndIndex - aStartIndex) > KRecreateGridSize)
         {
+#ifdef _DEBUG
+        TTime startTime;
+        GLX_LOG_INFO("CGlxGridViewMLObserver::HandleItemAddedL - ResizeL(+)");
+        startTime.HomeTime();
+#endif    
         iHgGrid->ResizeL(aList->Count());
+#ifdef _DEBUG
+        TTime stopTime;
+        stopTime.HomeTime();
+        GLX_DEBUG2("CGlxGridViewMLObserver::HandleItemAddedL - ResizeL(-) took <%d> us",
+                (TInt)stopTime.MicroSecondsFrom(startTime).Int64());
+#endif         
         }
     else
         {
@@ -213,8 +229,6 @@
         KErrNotFound != aAttributes.Find( iSpeedTnAttrib, match ))
         {
         const TGlxMedia& item = iMediaList.Item( aItemIndex );
-        TFileName resFile(KDC_APP_BITMAP_DIR);
-        resFile.Append(KGlxIconsFilename);
         TSize setSize = CHgGrid::PreferredImageSize();
 
         const CGlxThumbnailAttribute* qualityTn = item.ThumbnailAttribute(
@@ -250,15 +264,15 @@
             CFbsBitmap* bitmap = NULL;
             CFbsBitmap* mask = NULL;
             AknsUtils::CreateIconLC(AknsUtils::SkinInstance(), KAknsIIDNone,
-                    bitmap, mask, resFile,
+                    bitmap, mask, iIconsFileName,
                     EMbmGlxiconsQgn_prop_image_corrupted,
                     EMbmGlxiconsQgn_prop_image_corrupted_mask);
             __ASSERT_DEBUG(bitmap, Panic(EGlxPanicNullPointer));
             __ASSERT_DEBUG(mask, Panic(EGlxPanicNullPointer));
             
-            AknIconUtils::SetSize(bitmap, CHgGrid::PreferredImageSize(),
+            AknIconUtils::SetSize(bitmap, setSize,
                     EAspectRatioPreservedAndUnusedSpaceRemoved);
-            AknIconUtils::SetSize(mask, CHgGrid::PreferredImageSize(),
+            AknIconUtils::SetSize(mask, setSize,
                     EAspectRatioPreservedAndUnusedSpaceRemoved);
 
             iHgGrid->ItemL(aItemIndex).SetIcon(CGulIcon::NewL(bitmap, mask));
@@ -334,6 +348,7 @@
     TInt bitmapId  = EMbmGlxiconsQgn_prop_image_corrupted;
     TInt maskId = EMbmGlxiconsQgn_prop_image_corrupted_mask;	
     TInt flags     = CHgItem::EHgItemFlagsNone ;
+    TSize setSize = CHgGrid::PreferredImageSize();
     
     for ( TInt i = 0; i < iMediaList.Count(); i++ )
         {
@@ -366,19 +381,16 @@
                     break;  
                 }
             
-            TFileName resFile(KDC_APP_BITMAP_DIR);
-            resFile.Append(KGlxIconsFilename);
-
             CFbsBitmap* bitmap = NULL;
             CFbsBitmap* mask = NULL;
             AknsUtils::CreateIconLC(AknsUtils::SkinInstance(), KAknsIIDNone,
-                    bitmap, mask, resFile, bitmapId, maskId);
+                    bitmap, mask, iIconsFileName, bitmapId, maskId);
             __ASSERT_DEBUG(bitmap, Panic(EGlxPanicNullPointer));
             __ASSERT_DEBUG(mask, Panic(EGlxPanicNullPointer));
 
-            AknIconUtils::SetSize(bitmap, CHgGrid::PreferredImageSize(),
+            AknIconUtils::SetSize(bitmap, setSize,
                     EAspectRatioPreservedAndUnusedSpaceRemoved);
-            AknIconUtils::SetSize(mask, CHgGrid::PreferredImageSize(),
+            AknIconUtils::SetSize(mask, setSize,
                     EAspectRatioPreservedAndUnusedSpaceRemoved);
 
             iHgGrid->ItemL(i).SetIcon(CGulIcon::NewL(bitmap, mask), flags);
@@ -447,6 +459,9 @@
             GLX_DEBUG1("GridMLObserver::HandlePopulatedL() - SetEmptyTextL()");
             iHgGrid->DrawNow();
             }
+        
+        GLX_DEBUG1("GridMLObserver::HandlePopulatedL() - SetDefaultIconL()");
+        SetDefaultIconL(ETrue);
         }
     }
   
@@ -519,6 +534,13 @@
                 iHgGrid->RefreshScreen(aItemIndex);
                 }
             }
+        
+        if (!iIsDefaultIconSet)
+            {
+            GLX_DEBUG1("GridMLObserver::HandleAttributesAvailableL()"
+                     " SetDefaultIconL() - 1");
+            SetDefaultIconL(EFalse);
+            }
         }
     else if (aItemIndex > firstIndex && aItemIndex <= lastOnScreen)
         {
@@ -541,6 +563,13 @@
                     iHgGrid->RefreshScreen(lastOnScreen);
                     }
                 }
+            
+            if (!iIsDefaultIconSet)
+                {
+                GLX_DEBUG1("GridMLObserver::HandleAttributesAvailableL()"
+                         " SetDefaultIconL() - 2");
+                SetDefaultIconL(EFalse);
+                }
             }
         }
     
@@ -561,7 +590,6 @@
         }
     }
     
-    
 // ----------------------------------------------------------------------------
 // UpdateItemsL
 // ----------------------------------------------------------------------------
@@ -652,3 +680,63 @@
     iDiskErrorIntimated = ETrue;
     return;
     }
+
+// ----------------------------------------------------------------------------
+// SetDefaultIconL
+// ----------------------------------------------------------------------------
+// 
+void CGlxGridViewMLObserver::SetDefaultIconL(TBool aTransparent)
+    {
+    TRACER("CGlxGridViewMLObserver::SetDefaultIconL()");
+    GLX_LOG_INFO1("CGlxGridViewMLObserver::SetDefaultIconL() "
+            " aTransparent(%d)", aTransparent);
+    if (aTransparent)
+        {
+        CFbsBitmap* bitmap = new (ELeave) CFbsBitmap();
+		CleanupStack::PushL(bitmap);
+        CFbsBitmap* mask = new (ELeave) CFbsBitmap();
+		CleanupStack::PushL(mask);
+        TSize bmpSize = CHgGrid::PreferredImageSize();
+        bitmap->Create(bmpSize, EColor16M);
+        mask->Create(bmpSize, EGray256); // Gray mask
+        const TInt scanlineLength = bmpSize.iWidth; // 1 byte per pixel 
+        RBuf8 maskData;
+        maskData.Create(scanlineLength);
+        maskData.FillZ(scanlineLength); // Init with zero
+
+        mask->BeginDataAccess();
+        for (TInt y = 0; y < bmpSize.iHeight; y++)
+            {
+            mask->SetScanLine(maskData, y);
+            }
+
+        maskData.Close();
+        mask->EndDataAccess();
+        iHgGrid->SetDefaultIconL(CGulIcon::NewL(bitmap, mask));
+        CleanupStack::Pop(mask);
+        CleanupStack::Pop(bitmap);		
+        }
+    else if (!iIsDefaultIconSet)
+        {
+        CFbsBitmap* bitmap = NULL;
+        CFbsBitmap* mask = NULL;
+        TSize setSize = CHgGrid::PreferredImageSize();
+
+        AknsUtils::CreateIconLC(AknsUtils::SkinInstance(), KAknsIIDNone,
+                bitmap, mask, iIconsFileName,
+                EMbmGlxiconsQgn_prop_image_notcreated,
+                EMbmGlxiconsQgn_prop_image_notcreated_mask);
+        __ASSERT_DEBUG(bitmap, Panic(EGlxPanicNullPointer));
+        __ASSERT_DEBUG(mask, Panic(EGlxPanicNullPointer));
+
+        AknIconUtils::SetSize(bitmap, setSize,
+                EAspectRatioPreservedAndUnusedSpaceRemoved);
+        AknIconUtils::SetSize(mask, setSize,
+                EAspectRatioPreservedAndUnusedSpaceRemoved);
+
+        iHgGrid->SetDefaultIconL(CGulIcon::NewL(bitmap, mask));
+        CleanupStack::Pop(mask);
+        CleanupStack::Pop(bitmap);
+        iIsDefaultIconSet = ETrue;
+        }
+    }