--- /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