phonebookengines/VirtualPhonebook/VPbkSimStore/src/CContactLink.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CContactLink.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,186 @@
+/*
+* 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:  Implements a contact link to sim contact
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CContactLink.h"
+
+#include "CContactStore.h"
+#include "CContact.h"
+#include "CViewContact.h"
+#include "CContactView.h"
+#include "CVPbkSimContact.h"
+
+#include <MVPbkContactStoreProperties.h>
+#include <s32mem.h>
+
+
+namespace VPbkSimStore {
+
+const TInt KBytesToWord( 4 );
+const TInt KBytesToFieldId( 4 );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CContactLink::CContactLink
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CContactLink::CContactLink(CContactStore& aStore )
+:   iStore( aStore )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CContactLink::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CContactLink::ConstructL( TInt aSimIndex, TInt aFieldId )
+    {
+    iSimIndex = aSimIndex;
+    iFieldId = aFieldId;
+    }
+
+// -----------------------------------------------------------------------------
+// CContactLink::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CContactLink::ConstructL( RReadStream& aReadStream )
+    {
+    iSimIndex = aReadStream.ReadInt32L();
+    iFieldId = aReadStream.ReadInt32L();
+    }
+
+// -----------------------------------------------------------------------------
+// CContactLink::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CContactLink* CContactLink::NewLC( CContactStore& aStore, 
+    TInt aSimIndex, TInt aFieldId )
+    {
+    CContactLink* self = new( ELeave ) CContactLink( aStore );
+    CleanupStack::PushL( self );
+    self->ConstructL( aSimIndex, aFieldId );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CContactLink::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CContactLink* CContactLink::NewLC( CContactStore& aStore, 
+    RReadStream& aReadStream )
+    {
+    CContactLink* self = new( ELeave ) CContactLink( aStore );
+    CleanupStack::PushL( self );
+    self->ConstructL( aReadStream );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CContactLink::IsValid
+// -----------------------------------------------------------------------------
+//
+TBool CContactLink::IsValid( const MVPbkContactStore& aStore,
+    const MVPbkContactLink& aLink )
+    {
+    return &aStore == &aLink.ContactStore();
+    }
+
+// -----------------------------------------------------------------------------
+// CContactLink::ContactStore
+// -----------------------------------------------------------------------------
+//
+MVPbkContactStore& CContactLink::ContactStore() const
+    {
+    return iStore;
+    }
+  
+// -----------------------------------------------------------------------------
+// CContactLink::IsSame
+// -----------------------------------------------------------------------------
+//  
+TBool CContactLink::IsSame( const MVPbkContactLink& aOther ) const
+    {
+    TBool result = EFalse;
+    if ( &ContactStore() == &aOther.ContactStore() )
+        {
+        const CContactLink& other = 
+            static_cast<const CContactLink&>(aOther);
+        result = ( other.SimIndex() == SimIndex() && other.FieldId() == FieldId() );
+        }
+    return result;
+    }
+    
+// -----------------------------------------------------------------------------
+// CContactLink::RefersTo
+// -----------------------------------------------------------------------------
+//    
+TBool CContactLink::RefersTo( const MVPbkBaseContact& aContact ) const
+    {
+    TBool result = EFalse;
+    const CContact* contact = dynamic_cast<const CContact*>(&aContact);
+    if ( contact )
+        {
+        if ( &ContactStore() == &contact->ParentStore() )
+            {
+            result = ( SimIndex() == contact->SimContact().SimIndex() );
+            }
+        }
+    else 
+        {
+        const CViewContact* contact = dynamic_cast<const CViewContact*>(&aContact);
+        if ( contact && (&ContactStore() == &contact->View().ContactStore()) )
+            {
+            result = ( SimIndex() == contact->SimIndex() );
+            }
+        }
+    return result;
+    }
+
+const MVPbkContactLinkPacking& CContactLink::Packing() const
+    {
+    return *this;
+    }
+    
+MVPbkContactLink* CContactLink::CloneLC() const
+    {
+    return CContactLink::NewLC( iStore, iSimIndex, iFieldId );
+    }
+
+TInt CContactLink::InternalPackedSize() const
+    {
+    return ( KBytesToWord + KBytesToFieldId );                        
+    }
+
+void CContactLink::PackInternalsL( RWriteStream& aStream ) const
+    {
+    aStream.WriteInt32L( iSimIndex ); // SIM index
+    aStream.WriteInt32L( iFieldId ); // Field id
+    }
+
+
+} // namespace VPbkSimStore
+
+//  End of File