phonebookui/Phonebook/View/src/CPbkImageManager.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/View/src/CPbkImageManager.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2002 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: 
+*       Provides Phonebook Image manager methods.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbkImageManager.h"  // This class
+#include "MPbkThumbnailOperationObservers.h"
+#include "MPbkImageOperationObservers.h"
+#include "CPbkThumbnailManagerImpl.h"
+#include "TPbkImageLoadParameters.h"
+#include "CPbkObserverAdapter.h"
+#include <CPbkContactEngine.h>
+#include <CPbkContactItem.h>
+#include <TPbkContactItemField.h>
+
+/// Unnamed namespace for local definitions
+namespace {
+    
+    // LOCAL CONSTANTS AND MACROS
+    enum TPbkImageManagerPanic
+        {
+        // Panic code if CPbkImageManager initialization parameters 
+        // are not valid
+        EPbkImageManagerInvalidArgument = 1
+        };
+
+    static void Panic(TPbkImageManagerPanic aReason)
+        {
+        _LIT(KPanicText, "CPbkImageManager");
+        User::Panic(KPanicText, aReason);
+        }
+} // namespace
+
+// ================= MEMBER FUNCTIONS =======================
+
+CPbkImageManager::CPbkImageManager(CPbkContactEngine& aEngine) :
+    iEngine(aEngine)
+    {
+    }
+
+inline void CPbkImageManager::ConstructL()
+    {
+    iPbkObserverAdapter = CPbkObserverAdapter::NewL();
+    }
+
+EXPORT_C CPbkImageManager* CPbkImageManager::NewL(CPbkContactEngine& aEngine)
+    {
+    CPbkImageManager* self = new(ELeave) CPbkImageManager(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self); 
+    return self;
+    }
+
+CPbkImageManager::~CPbkImageManager()
+    {
+    delete iPbkObserverAdapter;
+    }
+
+EXPORT_C MPbkImageOperation* CPbkImageManager::GetImageAsyncL(
+        TPbkFieldId aFieldId,
+        MPbkImageGetObserver& aObserver, 
+        const CPbkContactItem& aContactItem)
+    {
+    __ASSERT_ALWAYS(aFieldId == EPbkFieldIdCodImageID ||
+        aFieldId == EPbkFieldIdThumbnailImage, 
+        Panic(EPbkImageManagerInvalidArgument));
+
+    iPbkObserverAdapter->SetPbkImageGetObserver(aObserver);    
+    MPbkThumbnailReader* reader = PbkThumbnailOperationFactory::CreateReaderLC
+        (aContactItem, iPbkObserverAdapter->PbkThumbnailGetObserver(), aFieldId);
+    if (reader)
+        {
+        reader->StartReadL();
+        CleanupStack::Pop();  // reader
+        }
+    return reader;
+
+    }
+
+EXPORT_C MPbkImageOperation* CPbkImageManager::GetImageAsyncL(
+        TPbkFieldId aFieldId,
+        MPbkImageGetObserver& aObserver, 
+        const CPbkContactItem& aContactItem,
+        TPbkImageLoadParameters& aParams)
+    {
+    __ASSERT_ALWAYS(aFieldId == EPbkFieldIdCodImageID ||
+        aFieldId == EPbkFieldIdThumbnailImage,
+        Panic(EPbkImageManagerInvalidArgument));
+
+    iPbkObserverAdapter->SetPbkImageGetObserver(aObserver);
+    MPbkThumbnailReader* reader = PbkThumbnailOperationFactory::CreateReaderLC(
+        aContactItem, iPbkObserverAdapter->PbkThumbnailGetObserver(),aFieldId);
+    if (reader)
+        {
+        TSize KNullSize(0,0);
+        if (aParams.iSize == KNullSize)
+            {
+            // Parameters are at defaults, don't pass them
+            reader->StartReadL();
+            }
+        else
+            {
+            // Frame number parameter has no meaning here.
+            aParams.iFrameNumber = 0; 
+            reader->StartReadL(&aParams);
+            }
+        CleanupStack::Pop();  // reader
+        }
+    return reader;
+    }
+
+EXPORT_C MPbkImageOperation* CPbkImageManager::GetImageAsyncL(
+        TPbkFieldId aFieldId,
+        MPbkImageGetImageObserver& aObserver, 
+        const CPbkContactItem& aContactItem)
+    {
+    __ASSERT_ALWAYS(aFieldId == EPbkFieldIdCodImageID ||
+        aFieldId == EPbkFieldIdThumbnailImage,
+        Panic(EPbkImageManagerInvalidArgument));
+
+    iPbkObserverAdapter->SetPbkImageGetImageObserver(aObserver);
+    MPbkThumbnailReader* reader = PbkThumbnailOperationFactory::
+        CreateImageReaderLC(aContactItem, 
+            iPbkObserverAdapter->PbkThumbnailGetImageObserver(), aFieldId);
+    if (reader)
+        {
+        reader->StartReadL();
+        CleanupStack::Pop();  // reader
+        }
+
+    return reader;
+    }
+
+EXPORT_C MPbkImageOperation* CPbkImageManager::SetImageAsyncL(
+        TPbkFieldId aFieldId,
+        MPbkImageSetObserver& aObserver, 
+        CPbkContactItem& aContactItem, 
+        const CFbsBitmap& aBitmap)
+    {
+    __ASSERT_ALWAYS(aFieldId == EPbkFieldIdCodImageID ||
+        aFieldId == EPbkFieldIdThumbnailImage, 
+        Panic(EPbkImageManagerInvalidArgument));
+
+    iPbkObserverAdapter->SetPbkImageSetObserver(aObserver);
+    MPbkThumbnailWriter* writer = PbkThumbnailOperationFactory::CreateWriterLC(
+        aContactItem, iEngine.FieldsInfo(), 
+        iPbkObserverAdapter->PbkThumbnailSetObserver(), aFieldId);
+    writer->StartWriteL(aBitmap);
+    CleanupStack::Pop();  // writer
+    return writer;
+    }
+
+EXPORT_C MPbkImageOperation* CPbkImageManager::SetImageAsyncL(
+        TPbkFieldId aFieldId,
+        MPbkImageSetObserver& aObserver, 
+        CPbkContactItem& aContactItem, 
+        const TDesC8& aImageBuffer)
+    {
+    __ASSERT_ALWAYS(aFieldId == EPbkFieldIdCodImageID ||
+        aFieldId == EPbkFieldIdThumbnailImage, 
+        Panic(EPbkImageManagerInvalidArgument));
+
+    iPbkObserverAdapter->SetPbkImageSetObserver(aObserver);
+    MPbkThumbnailWriter* writer = PbkThumbnailOperationFactory::CreateWriterLC(
+        aContactItem, iEngine.FieldsInfo(), 
+        iPbkObserverAdapter->PbkThumbnailSetObserver(), aFieldId);
+    writer->StartWriteL(aImageBuffer);
+    CleanupStack::Pop();  // writer
+    return writer;
+    }
+
+EXPORT_C MPbkImageOperation* CPbkImageManager::SetImageAsyncL(
+        TPbkFieldId aFieldId,
+        MPbkImageSetObserver& aObserver, 
+        CPbkContactItem& aContactItem, 
+        const TDesC& aFileName)
+    {
+    __ASSERT_ALWAYS(aFieldId == EPbkFieldIdCodImageID ||
+        aFieldId == EPbkFieldIdThumbnailImage, 
+        Panic(EPbkImageManagerInvalidArgument));
+
+    iPbkObserverAdapter->SetPbkImageSetObserver(aObserver);
+    MPbkThumbnailWriter* writer = PbkThumbnailOperationFactory::CreateWriterLC(
+        aContactItem, iEngine.FieldsInfo(), 
+        iPbkObserverAdapter->PbkThumbnailSetObserver(), aFieldId);
+    writer->StartWriteL(aFileName);
+    CleanupStack::Pop();  // writer
+    return writer;
+
+    }
+
+EXPORT_C TBool CPbkImageManager::HasImage(
+        TPbkFieldId aFieldId,
+        const CPbkContactItem& aContactItem) const
+    {
+    __ASSERT_ALWAYS(aFieldId == EPbkFieldIdCodImageID ||
+        aFieldId == EPbkFieldIdThumbnailImage, 
+        Panic(EPbkImageManagerInvalidArgument));
+
+    const TPbkContactItemField* field = aContactItem.FindField(aFieldId);
+    return (field && !field->IsEmptyOrAllSpaces());
+    }
+
+EXPORT_C void CPbkImageManager::RemoveImage(
+        TPbkFieldId aFieldId,
+        CPbkContactItem& aContactItem)
+    {
+    __ASSERT_ALWAYS(aFieldId == EPbkFieldIdCodImageID ||
+        aFieldId == EPbkFieldIdThumbnailImage, 
+        Panic(EPbkImageManagerInvalidArgument));
+
+    TPbkContactItemField* field = aContactItem.FindField(aFieldId);
+    if (field)
+        {
+        aContactItem.RemoveField(aContactItem.FindFieldIndex(*field));
+        }
+    }
+
+//  End of File