phonebookui/Phonebook2/Presentation/src/CPbk2StoreProperty.cpp
changeset 0 e686773b3f54
child 3 04ab22b956c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/Presentation/src/CPbk2StoreProperty.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 2005-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:  Phonebook 2 store property.
+*
+*/
+
+
+#include <CPbk2StoreProperty.h>
+
+// Phonebook 2
+#include "CPbk2LocalizedText.h"
+#include <CPbk2StoreViewDefinition.h>
+#include <CPbk2FieldPropertyArray.h>
+#include <CPbk2StorePropertyContentStoreName.h>
+
+// System includes
+#include <barsread.h>
+#include <coemain.h>
+
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::CPbk2StoreProperty
+// --------------------------------------------------------------------------
+//
+CPbk2StoreProperty::CPbk2StoreProperty()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::~CPbk2StoreProperty
+// --------------------------------------------------------------------------
+//
+CPbk2StoreProperty::~CPbk2StoreProperty()
+    {
+    delete iStoreUri;
+    delete iStoreName;
+    iStoreViews.ResetAndDestroy();
+    iLocalizedTexts.ResetAndDestroy();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::NewL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2StoreProperty* CPbk2StoreProperty::NewL()
+    {
+    return new ( ELeave ) CPbk2StoreProperty;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::NewLC
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2StoreProperty* CPbk2StoreProperty::NewLC
+        ( TResourceReader& aReader )
+    {
+    CPbk2StoreProperty* self = new ( ELeave ) CPbk2StoreProperty;
+    CleanupStack::PushL( self );
+    self->ConstructL( aReader );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::NewLC
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2StoreProperty* CPbk2StoreProperty::NewLC
+        ( const CPbk2StoreProperty& aProperty )
+    {
+    CPbk2StoreProperty* self = new ( ELeave ) CPbk2StoreProperty;
+    CleanupStack::PushL( self );
+    self->ConstructL( aProperty );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPbk2StoreProperty::ConstructL( TResourceReader& aReader )
+    {
+    aReader.ReadInt8(); // read version number
+    iStoreUri = aReader.ReadHBufCL();
+    iStoreName = aReader.ReadHBufCL();
+    iFlags = aReader.ReadUint32();
+    TInt viewCount = aReader.ReadInt16();
+    while (viewCount-- > 0 )
+        {
+        iStoreViews.AppendL(CPbk2StoreViewDefinition::NewLC(aReader));
+        CleanupStack::Pop(); // CPbk2StoreView::NewLC(aReader)
+        }
+    iMemoryInfoTypes = aReader.ReadUint32();
+    iFieldPropertiesResId = aReader.ReadInt32();
+    TInt textCount = aReader.ReadInt16();
+    while ( textCount-- > 0 )
+        {
+        iLocalizedTexts.AppendL( CPbk2LocalizedText::NewL( aReader ) );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPbk2StoreProperty::ConstructL( const CPbk2StoreProperty& aProperty )
+    {
+    iStoreUri = aProperty.StoreUri().UriDes().AllocL();
+    iStoreName = aProperty.StoreName().AllocL();
+
+    iFlags = aProperty.Flags();
+    TArray<const CPbk2StoreViewDefinition*> views = aProperty.Views();
+    TInt viewCount = views.Count();
+    for (TInt i = 0; i < viewCount; ++i)
+        {
+        iStoreViews.AppendL(CPbk2StoreViewDefinition::NewLC(*views[i]));
+        CleanupStack::Pop(); // CPbk2StoreView::NewLC(aReader)
+        }
+    iMemoryInfoTypes = aProperty.MemoryInfoTypes();
+    iFieldPropertiesResId = aProperty.FieldPropertiesResId();
+    CreateLocalizedTextsL( aProperty );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::StoreUri
+// --------------------------------------------------------------------------
+//
+EXPORT_C TVPbkContactStoreUriPtr CPbk2StoreProperty::StoreUri() const
+    {
+    return TVPbkContactStoreUriPtr(*iStoreUri);
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::StoreName
+// --------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CPbk2StoreProperty::StoreName() const
+    {
+    return *iStoreName;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::MemoryInfoTypes
+// --------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CPbk2StoreProperty::MemoryInfoTypes() const
+    {
+    return iMemoryInfoTypes;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::Views
+// --------------------------------------------------------------------------
+//
+EXPORT_C TArray<const CPbk2StoreViewDefinition*>
+        CPbk2StoreProperty::Views() const
+    {
+    return iStoreViews.Array();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::Flags
+// --------------------------------------------------------------------------
+//
+EXPORT_C TUint32 CPbk2StoreProperty::Flags() const
+    {
+    return iFlags;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::FieldPropertiesResId
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CPbk2StoreProperty::FieldPropertiesResId() const
+    {
+    return iFieldPropertiesResId;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::SetStoreUriL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2StoreProperty::SetStoreUriL(const TDesC& aStoreUri)
+    {
+    HBufC* temp = aStoreUri.AllocL();
+    delete iStoreUri;
+    iStoreUri = temp;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::SetStoreNameL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2StoreProperty::SetStoreNameL(const TDesC& aStoreName)
+    {
+    HBufC* temp = aStoreName.AllocL();
+    delete iStoreName;
+    iStoreName = temp;    
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::AppendViewDefinitionL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2StoreProperty::AppendViewDefinitionL
+        ( CPbk2StoreViewDefinition* aViewDefinition )
+    {
+    iStoreViews.AppendL( aViewDefinition );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::SetMemoryInfoTypes
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2StoreProperty::SetMemoryInfoTypes(TUint32 aInfoTypes)
+    {
+    iMemoryInfoTypes = aInfoTypes;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::SetFlags
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2StoreProperty::SetFlags(TUint32 aFlags)
+    {
+    iFlags = aFlags;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::SetFieldPropertiesResId
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2StoreProperty::SetFieldPropertiesResId
+        ( TInt aFieldPropertiesResId )
+    {
+    iFieldPropertiesResId = aFieldPropertiesResId;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::FindView
+// --------------------------------------------------------------------------
+//
+EXPORT_C const CPbk2StoreViewDefinition* CPbk2StoreProperty::FindView
+        ( TPbk2ContactViewType aViewType ) const
+    {
+    const CPbk2StoreViewDefinition* result = NULL;
+
+    const TInt count = iStoreViews.Count();
+    for (TInt i = 0; i < count; ++i)
+        {
+        if (iStoreViews[i]->ViewType() == aViewType)
+            {
+            result = iStoreViews[i];
+            break;
+            }
+        }
+
+    return result;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::CreateStoreSpecificFieldPropertiesL
+// --------------------------------------------------------------------------
+//
+EXPORT_C MPbk2FieldPropertyArray*
+    CPbk2StoreProperty::CreateStoreSpecificFieldPropertiesL
+        ( const MVPbkFieldTypeList& aFieldTypeList ) const
+    {
+    CPbk2FieldPropertyArray* props = NULL;
+    if ( iFieldPropertiesResId )
+        {
+        TResourceReader reader;
+        CCoeEnv::Static()->CreateResourceReaderLC
+            (reader, iFieldPropertiesResId);
+        props = CPbk2FieldPropertyArray::NewL(aFieldTypeList, reader,
+            CCoeEnv::Static()->FsSession() );
+        CleanupStack::PopAndDestroy(); // reader
+        }
+    return props;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::RetrieveContentLC
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2Content* CPbk2StoreProperty::RetrieveContentLC
+        ( TPbk2ContentId aContext ) const
+    {
+    CPbk2Content* content = NULL;
+
+    if ( aContext == EPbk2MemInfoPhone || aContext == EPbk2CopyQueryItem )
+        {        
+        // Both EPbk2MemInfoPhone and EPbk2CopyQueryItem use same kind of 
+        // content
+        content =  new ( ELeave ) CPbk2StorePropertyContentStoreName
+            (  iLocalizedTexts.Array(), aContext );
+        CleanupStack::PushL( content );
+        }
+
+    return content;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2StoreProperty::CreateLocalizedTextsL
+// --------------------------------------------------------------------------
+//
+void CPbk2StoreProperty::CreateLocalizedTextsL( 
+        const CPbk2StoreProperty& aProperty )
+    {        
+    // Remember to make copies of all supported content types.
+    // Check RetrieveContentLC() to see all supported types.
+    
+    // Copy EPbk2MemInfoPhone
+    CPbk2Content* content = 
+        aProperty.RetrieveContentLC( EPbk2MemInfoPhone );
+    CPbk2StorePropertyContentStoreName* propContent = 
+        dynamic_cast<CPbk2StorePropertyContentStoreName*>( content );
+    if ( propContent )
+        {
+        TInt uid = propContent->Uid();
+        HBufC* text = propContent->StoreName().AllocLC();
+        iLocalizedTexts.AppendL( CPbk2LocalizedText::NewL( uid, text ) );
+        CleanupStack::Pop( text ); 
+        // CPbk2LocalizedText::NewL has taken the ownership of text
+        }
+    CleanupStack::PopAndDestroy( content ); 
+    
+    // Copy EPbk2CopyQueryItem
+    content = 
+        aProperty.RetrieveContentLC( EPbk2CopyQueryItem );
+    propContent = 
+        dynamic_cast<CPbk2StorePropertyContentStoreName*>( content );
+    if ( propContent )
+        {
+        TInt uid = propContent->Uid();
+        HBufC* text = propContent->StoreName().AllocLC();
+        iLocalizedTexts.AppendL( CPbk2LocalizedText::NewL( uid, text ) );
+        CleanupStack::Pop( text ); 
+        // CPbk2LocalizedText::NewL has taken the ownership of text
+        }
+    CleanupStack::PopAndDestroy( content );
+        
+    }
+    
+// End of File