phonebookui/Phonebook2/Presentation/src/CPbk2ImageManager.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/Presentation/src/CPbk2ImageManager.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,227 @@
+/*
+* Copyright (c) 2005-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: 
+*       Provides Phonebook2 image manager methods.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CPbk2ImageManager.h"
+
+// From Phonebook2
+#include "MPbk2ImageOperationObservers.h"
+#include "CPbk2ImageManagerImpl.h"
+
+// From Virtual Phonebook
+#include "CVPbkContactManager.h"
+#include "MVPbkFieldType.h"
+#include <MVPbkStoreContact.h>
+#include <MVPbkContactFieldData.h>
+
+// From System
+
+// Unnamed namespace for local definitions
+namespace
+	{	
+	/**
+	 * Finds field index from contact.
+	 *
+	 * @param aContactManager   Reference to contact manager.
+	 * @param aContact          Reference to contact,
+	 * @param aFieldType        Reference to field type.
+	 * @return Found field index. KErrNotFound if field cannot be found.
+	 */
+	TInt FindFieldIndex(
+		CVPbkContactManager& aContactManager,
+		const MVPbkBaseContact& aContact,
+		const MVPbkFieldType& aFieldType)
+		{
+		const MVPbkBaseContactFieldCollection& fields = aContact.Fields();	
+		const TInt fieldCount = fields.FieldCount();
+	    
+	    const TInt maxMatchPriority = 
+	    	aContactManager.FieldTypes().MaxMatchPriority();
+	    for (TInt matchPriority = 0; 
+	    	matchPriority <= maxMatchPriority; 
+	    	++matchPriority)
+	        {            
+	        for (TInt i = 0; i < fieldCount; ++i)
+	            {
+	            const MVPbkFieldType* fieldType = 
+	                    fields.FieldAt(i).MatchFieldType(matchPriority);
+	            if (fieldType && fieldType->IsSame(aFieldType))
+	                {
+	                return i;
+	                }
+	            }
+	        }    
+	    return KErrNotFound;
+		}		
+	} // unnamed namespace
+
+// ================= MEMBER FUNCTIONS =======================
+
+// --------------------------------------------------------------------------
+// CPbk2ImageManager::CPbk2ImageManager
+// --------------------------------------------------------------------------
+//
+inline CPbk2ImageManager::CPbk2ImageManager
+        (CVPbkContactManager& aContactManager)
+        : iContactManager(aContactManager)
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ImageManager::~CPbk2ImageManager
+// --------------------------------------------------------------------------
+//
+CPbk2ImageManager::~CPbk2ImageManager()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ImageManager::NewL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2ImageManager* CPbk2ImageManager::NewL(
+        CVPbkContactManager& aContactManager)
+    {
+    CPbk2ImageManager* self = 
+        new(ELeave) CPbk2ImageManager(aContactManager);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self); 
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ImageManager::ConstructL
+// --------------------------------------------------------------------------
+//
+inline void CPbk2ImageManager::ConstructL()
+    {
+    }
+    
+// --------------------------------------------------------------------------
+// CPbk2ImageManager::GetImageAsyncL
+// --------------------------------------------------------------------------
+//
+EXPORT_C MPbk2ImageOperation* CPbk2ImageManager::GetImageAsyncL
+	(TPbk2ImageManagerParams* aParams,
+	 MVPbkBaseContact& aContact,
+	 const MVPbkFieldType& aFieldType,
+	 MPbk2ImageGetObserver& aObserver)
+    {
+    MPbk2ImageReader* reader = Pbk2ImageOperationFactory::CreateReaderLC
+        (iContactManager, aContact, aObserver, aFieldType);
+    if (reader)
+        {
+        reader->StartReadL(aParams);
+        CleanupStack::Pop();  // reader
+        }
+    return reader;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ImageManager::SetImageAsyncL
+// --------------------------------------------------------------------------
+//
+EXPORT_C MPbk2ImageOperation* CPbk2ImageManager::SetImageAsyncL(
+        MVPbkStoreContact& aContact,
+        const MVPbkFieldType& aFieldType,
+    	MPbk2ImageSetObserver& aObserver,
+    	const CFbsBitmap& aBitmap)
+    {
+    MPbk2ImageWriter* writer = Pbk2ImageOperationFactory::CreateWriterLC
+        (iContactManager, aContact, aObserver, aFieldType);
+    if ( writer )
+        {
+        writer->StartWriteL(aBitmap);
+        CleanupStack::Pop();  // writer
+        }    
+    return writer;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ImageManager::SetImageAsyncL
+// --------------------------------------------------------------------------
+//
+EXPORT_C MPbk2ImageOperation* CPbk2ImageManager::SetImageAsyncL(
+        MVPbkStoreContact& aContact,
+        const MVPbkFieldType& aFieldType,
+    	MPbk2ImageSetObserver& aObserver,
+    	const TDesC8& aImageBuffer)
+    {
+    MPbk2ImageWriter* writer = Pbk2ImageOperationFactory::CreateWriterLC
+        (iContactManager, aContact, aObserver, aFieldType);
+    writer->StartWriteL(aImageBuffer);
+    CleanupStack::Pop();  // writer
+    return writer;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ImageManager::SetImageAsyncL
+// --------------------------------------------------------------------------
+//
+EXPORT_C MPbk2ImageOperation* CPbk2ImageManager::SetImageAsyncL(
+        MVPbkStoreContact& aContact,
+        const MVPbkFieldType& aFieldType,
+    	MPbk2ImageSetObserver& aObserver,
+    	const TDesC& aFileName)
+    {
+    MPbk2ImageWriter* writer = Pbk2ImageOperationFactory::CreateWriterLC
+        (iContactManager, aContact, aObserver, aFieldType);
+    writer->StartWriteL(aFileName);
+    CleanupStack::Pop();  // writer
+    return writer;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ImageManager::HasImage
+// --------------------------------------------------------------------------
+//
+EXPORT_C TBool CPbk2ImageManager::HasImage
+        (const MVPbkBaseContact& aContact, 
+   		const MVPbkFieldType& aFieldType) const
+    {
+    TInt fieldId = FindFieldIndex(iContactManager, aContact, aFieldType);
+    if ( fieldId != KErrNotFound )
+        {
+        const MVPbkBaseContactField& field = aContact.Fields().FieldAt(fieldId);
+        if ( !field.FieldData().IsEmpty() )
+            {
+            return ETrue;
+            }
+        }
+	return EFalse;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ImageManager::RemoveImage
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2ImageManager::RemoveImage(
+	MVPbkStoreContact& aContact,
+    const MVPbkFieldType& aFieldType)
+    {    
+    TInt index(FindFieldIndex(iContactManager, aContact, aFieldType));
+    if (index != KErrNotFound)
+    	{
+	    aContact.RemoveField(index);    	
+    	}
+    }
+
+//  End of File