photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp
branchRCL_3
changeset 24 ea65f74e6de4
parent 19 420f6808bf21
--- a/photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp	Thu Jul 15 18:39:01 2010 +0300
+++ b/photosgallery/controllers/imageviewer/src/glximageviewermanager.cpp	Thu Aug 19 09:55:03 2010 +0300
@@ -26,6 +26,7 @@
 #include <caf/content.h>
 #include <driveinfo.h>
 #include <coeutils.h>
+#include <coemain.h>
 
 _LIT( KPrivateFolder, "\\Private\\" );
 _LIT( KGifFileMime, "image/gif" );
@@ -121,6 +122,7 @@
         User::Leave(KErrNotSupported);    
         }
     iImageUri = aFileName.AllocL();  
+    CreateImageDecoderL();
     }
 
 // ---------------------------------------------------------------------------
@@ -137,6 +139,8 @@
     delete iFile;
     iFile = NULL;
 
+	CloseImageDecoder();
+
     if (iIsPrivateGif)
         {
         iManager->DeleteFile(iImageUri->Des());
@@ -208,3 +212,51 @@
         }
     SetImageUriL( filePath );
     }
+
+// ---------------------------------------------------------------------------
+// CloseImageDecoder
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CGlxImageViewerManager::CloseImageDecoder()
+    {
+    TRACER("void CGlxImageViewerManager::CloseImageDecoder()");
+    if (iImageDecoder)
+        {
+        delete iImageDecoder;
+        iImageDecoder = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CreateImageDecoderL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CGlxImageViewerManager::CreateImageDecoderL()
+    {
+    TRACER("void CGlxImageViewerManager::CreateImageDecoderL()");
+
+    CloseImageDecoder();
+
+    TInt err = KErrNone;
+    if (IsPrivate())
+        {
+        if (&ImageFileHandle())
+            {
+            GLX_DEBUG1("CGlxImageViewerManager::CreateImageDecoderL() FH");
+            TRAP(err, iImageDecoder = CImageDecoder::FileNewL(
+                    ImageFileHandle(), ContentAccess::EPeek));
+            }
+        }
+    else
+        {
+        if (ImageUri())
+            {
+            GLX_DEBUG1("CGlxImageViewerManager::CreateImageDecoderL() FN");
+            TRAP(err, iImageDecoder = CImageDecoder::FileNewL(
+                    CCoeEnv::Static()->FsSession(), ImageUri()->Des()));
+            }
+        }
+
+    GLX_DEBUG2("CGlxImageViewerManager::CreateImageDecoderL() err(%d)", err);
+    User::LeaveIfError(err);
+    }