--- /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