phonebookui/Phonebook2/Presentation/src/CPbk2StorePropertyArray.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /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