diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstdetailsviewplugin/src/cvimpstfieldpropertyarray.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstdetailsviewplugin/src/cvimpstfieldpropertyarray.cpp Wed Sep 01 12:33:36 2010 +0100 @@ -0,0 +1,209 @@ +/* +* Copyright (c) 2008 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: a single field with type + * +*/ + + +#include "cvimpstfieldpropertyarray.h" + +#include "cvimpstfieldproperty.h" +#include "vimpstdetailsview.hrh" + +// Virtual Phonebook +#include +#include +#include +#include +// System includes +#include +#include "uiservicetabtracer.h" +_LIT(KColon,":"); + +// --------------------------------------------------------------------------- +// CVIMPSTFieldPropertyArray::CVIMPSTFieldPropertyArray +// --------------------------------------------------------------------------- +// +inline CVIMPSTFieldPropertyArray::CVIMPSTFieldPropertyArray(MVPbkStoreContact& aContact ): + iContact( aContact ) + { + } + +// --------------------------------------------------------------------------- +// CVIMPSTFieldPropertyArray::ConstructL +// --------------------------------------------------------------------------- +// +inline void CVIMPSTFieldPropertyArray::ConstructL( + const MVPbkFieldTypeList& aSupportedFieldTypeList,TResourceReader& aReader, + TBool aPresenceSupported, + TDesC& aServiceName, TStoreType aStoreType) + { + ReadFieldPropertiesL( aReader, aSupportedFieldTypeList, aPresenceSupported , aServiceName, aStoreType); + } + +// --------------------------------------------------------------------------- +// CVIMPSTFieldPropertyArray::NewL +// --------------------------------------------------------------------------- +// + CVIMPSTFieldPropertyArray* CVIMPSTFieldPropertyArray::NewL + (const MVPbkFieldTypeList& aSupportedFieldTypeList, MVPbkStoreContact& aContact, + TResourceReader& aReader, + TBool aPresenceSupported, + TDesC& aServiceName, TStoreType aStoreType ) + { + CVIMPSTFieldPropertyArray* self = new(ELeave) CVIMPSTFieldPropertyArray( aContact ); + CleanupStack::PushL(self); + self->ConstructL( aSupportedFieldTypeList ,aReader, aPresenceSupported, aServiceName, aStoreType); + CleanupStack::Pop(self); + return self; + } +// --------------------------------------------------------------------------- +// CVIMPSTFieldPropertyArray::~CVIMPSTFieldPropertyArray +// --------------------------------------------------------------------------- +// +CVIMPSTFieldPropertyArray::~CVIMPSTFieldPropertyArray() + { + iFieldProperties.ResetAndDestroy(); + } + +// --------------------------------------------------------------------------- +// CVIMPSTFieldPropertyArray::Count +// --------------------------------------------------------------------------- +// +TInt CVIMPSTFieldPropertyArray::Count() const + { + return iFieldProperties.Count(); + } + +// --------------------------------------------------------------------------- +// CVIMPSTFieldPropertyArray::At +// --------------------------------------------------------------------------- +// + CVIMPSTFieldProperty& CVIMPSTFieldPropertyArray::At + (TInt aIndex) const + { + return *iFieldProperties[aIndex]; + } + +// --------------------------------------------------------------------------- +// CVIMPSTFieldPropertyArray::GetFieldById +// --------------------------------------------------------------------------- +// + CVIMPSTFieldProperty* CVIMPSTFieldPropertyArray::GetFieldById( TInt aFieldId ) + { + CVIMPSTFieldProperty* retField = NULL; + + TInt count = Count(); + + for( TInt i=0; i< count; i++ ) + { + CVIMPSTFieldProperty* field = iFieldProperties[i]; + if( field && field->FieldId() == aFieldId ) + { + retField = field; + break; + } + } + return retField; + } + + +// --------------------------------------------------------------------------- +// CVIMPSTFieldPropertyArray::ReadFieldPropertiesL +// --------------------------------------------------------------------------- +// + void CVIMPSTFieldPropertyArray::ReadFieldPropertiesL( + TResourceReader& aReader, + const MVPbkFieldTypeList& aSupportedFieldTypeList, + TBool aPresenceSupported, + TDesC& aServiceName, TStoreType aStoreType) + { + TRACER_AUTO; + // aSupportedFieldTypeList is a list of the supported field type of the used store + const TInt count = aReader.ReadInt16(); + + for (TInt i = 0; i < count; ++i) + { + // do not change the order of reading from aReader + const TInt fieldTypeResId = aReader.ReadInt32(); + TInt fieldId = aReader.ReadInt8(); + TInt maxLength = aReader.ReadInt16(); + TInt iconId = aReader.ReadInt8(); + HBufC* defaultLabel = aReader.ReadHBufCL(); + if( !defaultLabel ) + { + defaultLabel = KNullDesC().AllocL(); + } + CleanupStack::PushL(defaultLabel); + const MVPbkFieldType* fieldType = aSupportedFieldTypeList.Find( fieldTypeResId ); + + if( fieldId == EVIMPSTFieldIdStatusMsg && aPresenceSupported ) // currently not supported + { + CVIMPSTFieldProperty* property = CVIMPSTFieldProperty::NewLC( fieldId, iconId, maxLength, *defaultLabel ); + iFieldProperties.AppendL( property ); + CleanupStack::Pop(property);// property + } + else if( fieldType ) + { + MVPbkStoreContactFieldCollection& fieldCollection = iContact.Fields(); + TInt fieldCount = fieldCollection.FieldCount(); + for( TInt i=0; i< fieldCount; i++ ) + { + MVPbkStoreContactField& field = fieldCollection.FieldAt( i ); + const MVPbkFieldType* type = field.BestMatchingFieldType() ; + if( fieldType == type ) + { + if( fieldId == EVIMPSTFieldIdImpp ) + { + const MVPbkContactFieldData& fieldData = field.FieldData(); + const MVPbkContactFieldUriData& uri = MVPbkContactFieldUriData::Cast(fieldData); + TPtrC xspId = uri.Uri(); + TInt index = xspId.Find( KColon ); + if( index>0 ) + { + TPtrC servicename = xspId.Left(index); + if( servicename.Compare(aServiceName) == 0) + { + CVIMPSTFieldProperty* property = CVIMPSTFieldProperty::NewLC( fieldId, iconId, maxLength, *defaultLabel ); + property->SetStoredFieldL( field ); + iFieldProperties.AppendL( property ); + CleanupStack::Pop(property); //property + } + } + } + else if( fieldId == EVIMPSTFieldIdDisplayName || + fieldId == EVIMPSTFieldIdFirstName || + fieldId == EVIMPSTFieldIdLastName ) + { + CVIMPSTFieldProperty* property = CVIMPSTFieldProperty::NewLC( fieldId, iconId, maxLength, *defaultLabel ); + property->SetStoredFieldL( field ); + iFieldProperties.AppendL( property ); + CleanupStack::Pop(property); //property + } + else if( aStoreType == EStoreServer ) //append all fields to details view if it is server store + { + CVIMPSTFieldProperty* property = CVIMPSTFieldProperty::NewLC( fieldId, iconId, maxLength, *defaultLabel ); + property->SetStoredFieldL( field ); + iFieldProperties.AppendL( property ); + CleanupStack::Pop(property); //property + } + } + } + } + CleanupStack::PopAndDestroy(defaultLabel); + } + + } + +// End of File