--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/Presentation/src/CPbk2StorePropertyArray.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,242 @@
+/*
+* Copyright (c) 2002-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:
+* Field property for a Phonebook 2 field type.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbk2StorePropertyArray.h"
+
+// From Phonebook2
+#include "Pbk2PresentationUtils.h"
+#include "CPbk2StoreProperty.h"
+#include <RPbk2LocalizedResourceFile.h>
+#include <Pbk2Presentation.rsg>
+#include <Pbk2DataCaging.hrh>
+
+// From Virtual Phonebook
+
+// From System
+#include <barsread.h>
+#include <coemain.h>
+
+// ========================= MEMBER FUNCTIONS ===============================
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::CPbk2StorePropertyArray
+// --------------------------------------------------------------------------
+//
+CPbk2StorePropertyArray::CPbk2StorePropertyArray()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::~CPbk2StorePropertyArray
+// --------------------------------------------------------------------------
+//
+CPbk2StorePropertyArray::~CPbk2StorePropertyArray()
+ {
+ iStoreProperties.ResetAndDestroy();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::NewL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2StorePropertyArray* CPbk2StorePropertyArray::NewL(
+ TResourceReader& aReader)
+ {
+ CPbk2StorePropertyArray* self = new(ELeave) CPbk2StorePropertyArray;
+ CleanupStack::PushL(self);
+ self->ConstructFromResourceL(aReader);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::NewL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2StorePropertyArray* CPbk2StorePropertyArray::NewL()
+ {
+ CPbk2StorePropertyArray* self = new(ELeave) CPbk2StorePropertyArray;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPbk2StorePropertyArray::ConstructL()
+ {
+ RPbk2LocalizedResourceFile resFile(*CCoeEnv::Static());
+ resFile.OpenLC(KPbk2RomFileDrive,
+ KDC_RESOURCE_FILES_DIR,
+ Pbk2PresentationUtils::PresentationResourceFile());
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC
+ (reader, R_PHONEBOOK2_STORE_PROPERTIES);
+ ConstructFromResourceL(reader);
+
+ CleanupStack::PopAndDestroy(2); // reader, resFile
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::ConstructFromResourceL
+// --------------------------------------------------------------------------
+//
+void CPbk2StorePropertyArray::ConstructFromResourceL(TResourceReader& aReader)
+ {
+ TInt storePropertyCount = aReader.ReadInt16();
+ while (storePropertyCount--)
+ {
+ iStoreProperties.AppendL(CPbk2StoreProperty::NewLC(aReader));
+ CleanupStack::Pop(); // CPbk2StoreProperty::NewLC(aReader)
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::Count
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CPbk2StorePropertyArray::Count() const
+ {
+ return iStoreProperties.Count();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::At
+// --------------------------------------------------------------------------
+//
+EXPORT_C const CPbk2StoreProperty& CPbk2StorePropertyArray::At(TInt aIndex) const
+ {
+ return *iStoreProperties[aIndex];
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::FindProperty
+// --------------------------------------------------------------------------
+//
+EXPORT_C const CPbk2StoreProperty* CPbk2StorePropertyArray::FindProperty(
+ const TVPbkContactStoreUriPtr& aUriPtr) const
+ {
+ const CPbk2StoreProperty* result = NULL;
+
+ const TInt count = iStoreProperties.Count();
+ for (TInt i = 0; i < count; ++i)
+ {
+ if (iStoreProperties[i]->StoreUri().UriDes().Compare(aUriPtr.UriDes()) == 0)
+ {
+ result = iStoreProperties[i];
+ break;
+ }
+ }
+
+ return result;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::AppendFromResourceL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2StorePropertyArray::AppendFromResourceL(
+ TResourceReader& aReader)
+ {
+ CPbk2StorePropertyArray* newProps = CPbk2StorePropertyArray::NewL(aReader);
+ CleanupStack::PushL(newProps);
+ AppendFromArrayL(*newProps);
+ CleanupStack::PopAndDestroy(newProps);
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::AppendFromArrayL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2StorePropertyArray::AppendFromArrayL(
+ CPbk2StorePropertyArray& aPropertyArray)
+ {
+ const TInt count = aPropertyArray.Count();
+ for (TInt i = 0; i < count; ++i)
+ {
+ CPbk2StoreProperty* prop = CPbk2StoreProperty::NewLC(aPropertyArray.At(i));
+ AppendL(prop);
+ CleanupStack::Pop(prop);
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::AppendL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2StorePropertyArray::AppendL(CPbk2StoreProperty* aProperty)
+ {
+ RemoveDuplicates(*aProperty);
+ iStoreProperties.AppendL(aProperty);
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::DeleteProperty
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2StorePropertyArray::DeleteProperty(
+ const TVPbkContactStoreUriPtr& aUriPtr)
+ {
+ TInt index = FindPropertyIndex(aUriPtr);
+ if (index != KErrNotFound)
+ {
+ delete iStoreProperties[index];
+ iStoreProperties.Remove(index);
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::RemoveDuplicates
+// --------------------------------------------------------------------------
+//
+void CPbk2StorePropertyArray::RemoveDuplicates(CPbk2StoreProperty& aProperty)
+ {
+ TVPbkContactStoreUriPtr ptr(aProperty.StoreUri());
+ if (FindProperty(ptr))
+ {
+ DeleteProperty(ptr);
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2StorePropertyArray::FindPropertyIndex
+// --------------------------------------------------------------------------
+//
+TInt CPbk2StorePropertyArray::FindPropertyIndex(
+ const TVPbkContactStoreUriPtr& aUriPtr)
+ {
+ TInt result = KErrNotFound;
+ const TInt count = iStoreProperties.Count();
+ for (TInt i = 0; (i < count) && (result == KErrNotFound); ++i)
+ {
+ if (iStoreProperties[i]->StoreUri().UriDes().Compare(aUriPtr.UriDes()) == 0)
+ {
+ result = i;
+ }
+ }
+
+ return result;
+ }
+
+// End of File