--- /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 <MVPbkFieldType.h>
+#include <MVPbkStoreContactField.h>
+#include <MVPbkStoreContact.h>
+#include <MVPbkContactFieldUriData.h>
+// System includes
+#include <barsread.h>
+#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