phonebookui/Phonebook2/Presentation/src/CPbk2EmbeddedImage.cpp
changeset 0 e686773b3f54
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/Presentation/src/CPbk2EmbeddedImage.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,341 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*       Methods for Phonebook2 contact item field embedded image reader.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "Pbk2PresentationUtils.h"
+#include "CPbk2EmbeddedImage.h"
+#include "CPbk2ImageReader.h"
+#include "MPbk2ImageOperationObservers.h"
+#include "MVPbkBaseContactField.h"
+#include "MVPbkStoreContactField.h"
+#include "MVPbkContactFieldBinaryData.h"
+#include "CVPbkContactManager.h"
+#include "TVPbkFieldTypeMapping.h"
+#include "MVPbkFieldType.h"
+#include "CPbk2ImageData.h"
+
+#include <e32std.h>
+#include <eikappui.h>
+#include <imageconversion.h>
+#include <aknappui.h>   // CEikAppUi
+#include <AknUtils.h>   // TAknLayoutRect
+#include <barsread.h>   // TResourceReader
+#include <RPbk2LocalizedResourceFile.h>
+#include "Pbk2DataCaging.hrh"
+
+#include <Pbk2Presentation.rsg>
+
+/// Unnamed namespace for local definitions
+namespace {
+	
+#ifdef _DEBUG
+enum TPanicCode
+    {
+    EPanicReadPreCond_Constructor = 1,
+    EPanicReadPreCond_StartReadL,
+
+    EPanicWritePreCond_Constructor = 100,
+    EPanicWritePreCond_CreateImageWriterL,
+    EPanicWritePreCond_StoreImageL_CMdaImageDataWriteUtility
+    };
+#endif // _DEBUG
+
+
+// ==================== LOCAL FUNCTIONS ====================
+
+#ifdef _DEBUG
+void Panic(TPanicCode aPanicCode)
+    {
+    _LIT(KPanicText, "CPbkEmbeddedImage");
+    User::Panic(KPanicText, aPanicCode);
+    }
+#endif // _DEBUG
+
+}  // namespace
+
+
+// ================= MEMBER FUNCTIONS =======================
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageReader::CPbk2EmbeddedImageReader
+// --------------------------------------------------------------------------
+//
+inline CPbk2EmbeddedImageReader::CPbk2EmbeddedImageReader
+        (const MVPbkBaseContactField& aField, 
+        MPbk2ImageGetObserver& aObserver) :
+    CPbk2ImageReaderBase(aObserver),
+    iField(aField)
+    {
+    __ASSERT_DEBUG(iField.FieldData().DataType()==EVPbkFieldStorageTypeBinary, 
+        Panic(EPanicReadPreCond_Constructor));
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageReader::ConstructL
+// --------------------------------------------------------------------------
+//
+inline void CPbk2EmbeddedImageReader::ConstructL()
+    {
+    CPbk2ImageReaderBase::ConstructL();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageReader::NewLC
+// --------------------------------------------------------------------------
+//
+CPbk2EmbeddedImageReader* CPbk2EmbeddedImageReader::NewLC
+        (const MVPbkBaseContactField& aField,
+        MPbk2ImageGetObserver& aObserver)
+    {
+    CPbk2EmbeddedImageReader* self = 
+        new(ELeave) CPbk2EmbeddedImageReader(aField,aObserver);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageReader::~CPbk2EmbeddedImageReader
+// --------------------------------------------------------------------------
+//
+CPbk2EmbeddedImageReader::~CPbk2EmbeddedImageReader()
+    {
+    delete iImageBuffer;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageReader::StartReadL
+// --------------------------------------------------------------------------
+//
+void CPbk2EmbeddedImageReader::StartReadL(
+        const TPbk2ImageManagerParams* aParameters)
+    {
+    if (iImageBuffer)
+        {
+        delete iImageBuffer;
+        iImageBuffer = NULL;
+        }
+    	
+    iImageBuffer = 
+    	MVPbkContactFieldBinaryData::Cast(iField.FieldData()).BinaryData().AllocL();
+    	
+    __ASSERT_DEBUG(iImageBuffer && iImageBuffer->Length()>0, 
+        Panic(EPanicReadPreCond_StartReadL));
+    CancelRead();
+    
+    if (iImageBuffer)
+        {
+        ImageReader().ReadFromBufferL(*iImageBuffer, aParameters);
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageReader::ImageBuffer
+// --------------------------------------------------------------------------
+//    
+const TDesC8& CPbk2EmbeddedImageReader::ImageBuffer() const    
+	{
+	if (iImageBuffer)
+		{
+		return *iImageBuffer;		
+		}
+	return KNullDesC8;
+	}
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::CPbk2EmbeddedImageWriter
+// --------------------------------------------------------------------------
+//
+inline CPbk2EmbeddedImageWriter::CPbk2EmbeddedImageWriter
+        (CVPbkContactManager& aContactManager,
+        MVPbkStoreContactField& aField, 
+        MPbk2ImageSetObserver& aObserver) :
+    CPbk2ImageWriterBase(aObserver), 
+    iContactManager(aContactManager), 
+    iField(aField)   
+    {
+    __ASSERT_DEBUG(iField.FieldData().DataType()==EVPbkFieldStorageTypeBinary, 
+        Panic(EPanicWritePreCond_Constructor));
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::ConstructL
+// --------------------------------------------------------------------------
+//
+inline void CPbk2EmbeddedImageWriter::ConstructL()
+    {
+    CPbk2ImageWriterBase::ConstructL();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::NewLC
+// --------------------------------------------------------------------------
+//
+CPbk2EmbeddedImageWriter* CPbk2EmbeddedImageWriter::NewLC
+        (CVPbkContactManager& aContactManager,
+        MVPbkStoreContactField& aField, 
+        MPbk2ImageSetObserver& aObserver)
+    {
+    CPbk2EmbeddedImageWriter* self = 
+        new(ELeave) CPbk2EmbeddedImageWriter(
+            aContactManager, aField, aObserver );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::~CPbk2EmbeddedImageWriter
+// --------------------------------------------------------------------------
+//
+CPbk2EmbeddedImageWriter::~CPbk2EmbeddedImageWriter()
+    {
+    delete iBitmapBlob;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::CreateImageWriterL
+// --------------------------------------------------------------------------
+//
+CImageEncoder* CPbk2EmbeddedImageWriter::CreateImageWriterL()
+    {
+    __ASSERT_DEBUG(!iBitmapBlob, 
+        Panic(EPanicWritePreCond_CreateImageWriterL));
+
+    return CImageEncoder::DataNewL
+        (iBitmapBlob, CImageEncoder::EOptionNone, KImageTypeJPGUid);
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::StoreImageL
+// --------------------------------------------------------------------------
+//
+void CPbk2EmbeddedImageWriter::StoreImageL(const MPbk2ImageData& aImageData)
+    {
+    MVPbkContactFieldBinaryData::Cast(iField.FieldData())
+    	.SetBinaryDataL(aImageData.GetBufferL());
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::StoreImageL
+// --------------------------------------------------------------------------
+//    
+void CPbk2EmbeddedImageWriter::StoreImageL
+        (CImageEncoder& /*aImageWriter*/)
+    {
+    __ASSERT_DEBUG(iBitmapBlob, 
+        Panic(EPanicWritePreCond_StoreImageL_CMdaImageDataWriteUtility));
+    MVPbkContactFieldBinaryData::Cast(iField.FieldData())
+    	.SetBinaryDataL(*iBitmapBlob);    
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::DoCancel
+// --------------------------------------------------------------------------
+//
+void CPbk2EmbeddedImageWriter::DoCancel()
+    {
+    delete iBitmapBlob;
+    iBitmapBlob = NULL;
+
+    // Let base class do its own canceling
+    CPbk2ImageWriterBase::DoCancel();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::ImageSize
+// --------------------------------------------------------------------------
+//
+TSize CPbk2EmbeddedImageWriter::ImageSize() const
+    {
+    TBool isCodImage (EFalse);
+    TRAP_IGNORE(isCodImage = IsCodImageL());
+    	
+    if (isCodImage)
+    	{
+	    return (static_cast<CEikAppUi*>(CCoeEnv::Static()->AppUi()))->
+            ApplicationRect().Size();   
+    	}
+    else 
+    	{
+	    return KPbk2PersonalImageSize;    	
+    	}
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::IsCodImageL
+// --------------------------------------------------------------------------
+//    
+TBool CPbk2EmbeddedImageWriter::IsCodImageL() const
+	{
+    // If iField's type is 
+    // 		EVPbkNonVersitCodImage return ETrue otherwise EFalse.
+    
+    const MVPbkFieldTypeList& masterFieldTypeList = 
+    	iContactManager.FieldTypes();
+	RPbk2LocalizedResourceFile resFile(*CCoeEnv::Static());
+    resFile.OpenLC(KPbk2RomFileDrive, 
+                   KDC_RESOURCE_FILES_DIR,
+                   Pbk2PresentationUtils::PresentationResourceFile());
+    TResourceReader reader;
+    CCoeEnv::Static()->CreateResourceReaderLC(reader, R_CODIMAGE_FIELD_TYPE);
+    const TInt count = reader.ReadInt16();
+    TBool found(EFalse);
+    for (TInt i = 0; i < count && !found; ++i)
+        {
+        TVPbkFieldTypeMapping mapping(reader);
+        const MVPbkFieldType* fieldType = 
+            mapping.FindMatch(masterFieldTypeList);
+        if (!fieldType)
+            {
+            User::Leave(KErrNotFound);
+            }
+        if (IsSameFieldType(*fieldType))
+        	{
+        	found = ETrue;
+        	}
+        }
+    CleanupStack::PopAndDestroy(2); // resFile, CreateResourceReaderLC
+    
+	return found;	
+	}
+
+// --------------------------------------------------------------------------
+// CPbk2EmbeddedImageWriter::IsSameFieldType
+// --------------------------------------------------------------------------
+//	
+TBool CPbk2EmbeddedImageWriter::IsSameFieldType(
+        const MVPbkFieldType& aFieldType ) const
+	{
+    TInt maxMatchPriority(iContactManager.FieldTypes().MaxMatchPriority());
+    for ( TInt matchPriority = 0; 
+    	  matchPriority <= maxMatchPriority; 
+    	  ++matchPriority )
+        {            
+        const MVPbkFieldType* fieldType = 
+            iField.MatchFieldType(matchPriority);
+        if (fieldType && fieldType->IsSame(aFieldType))
+            {
+            return ETrue;
+            }
+        }	
+    return EFalse;
+    }
+
+//  End of File