diff -r 000000000000 -r e686773b3f54 phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFieldInfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFieldInfo.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,168 @@ +/* +* Copyright (c) 2004-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: The virtual phonebook field info +* +*/ + + +#include "CFieldInfo.h" + +#include +#include + +namespace VPbkCntModel { + +const TInt KFieldInfoGranularity = 8; + +CFieldInfo::CFieldInfo() + { + } + +inline void CFieldInfo::ConstructL(TResourceReader& aReader) + { + iFieldStorageType = aReader.ReadInt32(); + iContentType = CContentType::NewL(); + const TUid contactFieldUid = TUid::Uid(aReader.ReadInt32()); + iContentType->SetMapping(TUid::Uid(aReader.ReadInt32())); + if (contactFieldUid != KUidContactFieldNone) + { + iContentType->AddFieldTypeL(contactFieldUid); + } + TInt count = aReader.ReadInt16(); + while (--count >= 0) + { + iContentType->AddFieldTypeL(TUid::Uid(aReader.ReadInt32())); + } + iCategory = aReader.ReadInt32(); + iFieldName = aReader.ReadHBufCL(); + iFlags = aReader.ReadInt32(); + } + +CFieldInfo* CFieldInfo::NewL(TResourceReader& aReader) + { + CFieldInfo* self = new(ELeave) CFieldInfo; + CleanupStack::PushL(self); + self->ConstructL(aReader); + CleanupStack::Pop(self); + return self; + } + +CFieldInfo::~CFieldInfo() + { + delete iFieldName; + delete iContentType; + } + +inline TBool CFieldInfo::IsEqualFlags(const CContactItemField& aField) const + { + TUint flags = 0; + if (aField.IsHidden()) + { + flags |= EContactFieldFlagHidden; + } + if (aField.IsReadOnly()) + { + flags |= EContactFieldFlagReadOnly; + } + // Do not check synchronize flag as ctnmodel modifies it + if (aField.IsDisabled()) + { + flags |= EContactFieldFlagDisabled; + } + return ((flags & iFlags) == flags); + } + +TBool CFieldInfo::IsEqualType(const CContactItemField& aField) const + { + return + (iFieldStorageType == aField.StorageType() && + iContentType->IsEqual( aField.ContentType() ) && + TUint(iCategory) == aField.UserFlags() && + IsEqualFlags(aField)); + } + +TBool CFieldInfo::IsEqualLabel(const CContactItemField& aField) const + { + return + ((!iFieldName && aField.Label().Length()==0) || + (iFieldName && aField.Label()==*iFieldName)); + } + +CContactItemField* CFieldInfo::CreateFieldL() const + { + CContactItemField* field = CContactItemField::NewLC(iFieldStorageType, + *iContentType); + + field->SetUserFlags( iCategory ); + if ( iFieldName ) + { + field->SetLabelL( *iFieldName ); + } + if ( iFlags & EContactFieldFlagHidden ) + { + field->SetHidden( ETrue ); + } + if ( iFlags & EContactFieldFlagReadOnly ) + { + field->SetReadOnly( ETrue ); + } + if ( iFlags & EContactFieldFlagSynchronize ) + { + field->SetSynchronize( ETrue ); + } + if ( iFlags & EContactFieldFlagDisabled ) + { + field->SetDisabled( ETrue ); + } + CleanupStack::Pop(field); + return field; + } + +CFieldsInfo::CFieldsInfo() : + CArrayPtrFlat(KFieldInfoGranularity) + { + } + +inline void CFieldsInfo::ConstructL(TResourceReader& aReader) + { + AppendFieldsL(aReader); + } + +CFieldsInfo* CFieldsInfo::NewL(TResourceReader& aReader) + { + CFieldsInfo* self = new(ELeave) CFieldsInfo; + CleanupStack::PushL(self); + self->ConstructL(aReader); + CleanupStack::Pop(self); + return self; + } + +void CFieldsInfo::AppendFieldsL(TResourceReader& aReader) + { + TInt count = aReader.ReadInt16(); + while (--count >= 0) + { + CFieldInfo* fieldInfo = CFieldInfo::NewL(aReader); + CleanupStack::PushL(fieldInfo); + AppendL(fieldInfo); + CleanupStack::Pop(fieldInfo); + } + } + +CFieldsInfo::~CFieldsInfo() + { + ResetAndDestroy(); + } + +} // VPbkCntModel