/*
* 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: Phonebook 2 contact view list box model.
*
*/
// INCLUDE FILES
#include <CPbk2ContactIconsUtils.h>
// Phonebook 2
#include <CPbk2IconArray.h>
#include <CPbk2StoreProperty.h>
#include <CPbk2StoreViewDefinition.h>
#include <CPbk2StorePropertyArray.h>
#include <MPbk2ContactUiControlExtension.h>
#include <CPbk2UIExtensionManager.h>
#include <MPbk2UIExtensionIconSupport.h>
#include <Pbk2UIControls.rsg>
#include <Pbk2PresentationUtils.h>
#include "Pbk2NamesListExUID.h"
// Virtual Phonebook
#include <MVPbkContactViewBase.h>
#include <MVPbkContactStore.h>
#include <MVPbkContactStoreProperties.h>
#include <MVPbkViewContact.h>
#include <CVPbkContactViewDefinition.h>
#include <CVPbkContactManager.h>
#include <MVPbkFieldType.h>
#include <MVPbkBaseContactField.h>
#include <CVPbkFieldTypeSelector.h>
#include <MVPbkBaseContactFieldCollection.h>
#include <MVPbkContactFieldData.h>
// System includes
#include <eikenv.h>
#include <barsread.h>
EXPORT_C CPbk2ContactIconsUtils* CPbk2ContactIconsUtils::NewL(
CPbk2StorePropertyArray& aStoreProperties,
MPbk2ContactUiControlExtension* aUiExtension )
{
CPbk2ContactIconsUtils* self = new(ELeave) CPbk2ContactIconsUtils(
aStoreProperties,
aUiExtension);
return self;
}
CPbk2ContactIconsUtils::~CPbk2ContactIconsUtils()
{
}
CPbk2ContactIconsUtils::CPbk2ContactIconsUtils(
CPbk2StorePropertyArray& aStoreProperties,
MPbk2ContactUiControlExtension* aUiExtension ):
iStoreProperties(aStoreProperties),
iUiExtension(aUiExtension)
{
}
EXPORT_C CPbk2IconArray* CPbk2ContactIconsUtils::CreateListboxIconArrayL(
TInt aResourceId)
{
TResourceReader reader;
CCoeEnv::Static()->CreateResourceReaderLC( reader, aResourceId );
CPbk2IconArray* iconArray = CPbk2IconArray::NewL( reader );
CleanupStack::PushL( iconArray );
// Add icons from UI extensions
CPbk2UIExtensionManager* extManager = CPbk2UIExtensionManager::InstanceL();
extManager->PushL();
extManager->IconSupportL().AppendExtensionIconsL( *iconArray );
CleanupStack::PopAndDestroy(); // extManager
CleanupStack::Pop( iconArray );
CleanupStack::PopAndDestroy(); // reader
return iconArray;
}
EXPORT_C void CPbk2ContactIconsUtils::GetIconIdsForContactL(
const MVPbkViewContact& aViewContact,
RArray<TPbk2IconId>& aIconArray ) const
{
CleanupClosePushL( aIconArray );
aIconArray.Reset();
// get dynamic icons from ui extension
if ( iUiExtension )
{
const TArray<TPbk2IconId>& ids =
iUiExtension->GetDynamicIconsL( &aViewContact );
for (TInt i = 0; i < ids.Count(); ++i)
{
aIconArray.AppendL( ids[i] );
}
}
// find icon from view definition
TVPbkContactViewType viewType = aViewContact.ParentView().Type();
const TInt propCount = iStoreProperties.Count();
TBool propertyFound = EFalse;
TBool viewIconFound = EFalse;
for (TInt i = 0; i < propCount && !propertyFound; ++i)
{
// Find store property for the view contact
const CPbk2StoreProperty& prop = iStoreProperties.At(i);
if (aViewContact.MatchContactStore(prop.StoreUri().UriDes()))
{
propertyFound = ETrue;
TArray<const CPbk2StoreViewDefinition*> pbk2Defs = prop.Views();
const TInt defCount = pbk2Defs.Count();
for (TInt j = 0; j < defCount && !viewIconFound; ++j)
{
// if types are same use item icon
if (viewType == pbk2Defs[j]->ViewDefinition().Type())
{
aIconArray.AppendL( pbk2Defs[j]->ViewItemIconId() );
viewIconFound = ETrue;
}
}
}
}
CleanupStack::Pop();
}
// End of File