diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/Presentation/src/CPbk2ImageManager.cpp --- /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 +#include + +// 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