phonebookengines/VirtualPhonebook/VPbkSimStore/src/TStoreContactField.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/src/TStoreContactField.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,253 @@
+/*
+* 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:  An adapter between virtual phonebook framework 
+*                and VPbkSimStoreImpl field
+*
+*/
+
+
+// INCLUDES
+#include "TStoreContactField.h"
+#include "CContact.h"
+#include "CContactLink.h"
+#include "CContactStore.h"
+#include "CFieldTypeMappings.h"
+#include <MVPbkBaseContact.h>
+#include <MVPbkContactStoreProperties.h>
+#include <CVPbkSimCntField.h>
+#include <CVPbkSimContact.h>
+#include <VPbkSimStoreCommon.h>
+
+namespace VPbkSimStore {
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::TStoreContactField
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+TStoreContactField::TStoreContactField()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::SetParentContact
+// -----------------------------------------------------------------------------
+//
+void TStoreContactField::SetParentContact( CContact& aParentContact )
+    {
+    iParentContact = &aParentContact;
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::SetSimField
+// -----------------------------------------------------------------------------
+//
+void TStoreContactField::SetSimField( CVPbkSimCntField& aSimField )
+    {
+    iSimField = &aSimField;
+    iFieldData.SetField( aSimField );
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::ParentObject
+// -----------------------------------------------------------------------------
+//
+MVPbkObjectHierarchy& TStoreContactField::ParentObject() const
+    {
+    return *iParentContact;
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::ParentContact
+// -----------------------------------------------------------------------------
+//
+MVPbkBaseContact& TStoreContactField::ParentContact() const
+    {
+    return *iParentContact;
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::MatchFieldType
+// -----------------------------------------------------------------------------
+//
+const MVPbkFieldType* TStoreContactField::MatchFieldType( 
+    TInt /*aMatchPriority*/ ) const
+    {
+    return iParentContact->Store().FieldTypeMappings().Match( 
+        iSimField->Type() );
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::BestMatchingFieldType
+// -----------------------------------------------------------------------------
+//
+const MVPbkFieldType* TStoreContactField::BestMatchingFieldType() const
+    {
+    TInt dummy = 0;
+    return MatchFieldType( dummy );
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::FieldData
+// -----------------------------------------------------------------------------
+//
+const MVPbkContactFieldData& TStoreContactField::FieldData() const
+    {
+    return iFieldData;
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::IsSame
+// -----------------------------------------------------------------------------
+//
+TBool TStoreContactField::IsSame( const MVPbkBaseContactField& aOther ) const
+    {
+    if ( &ParentContact() == &aOther.ParentContact() )
+        {
+        return iSimField == static_cast<const TStoreContactField&>
+            ( aOther ).iSimField; 
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::SupportsLabel
+// -----------------------------------------------------------------------------
+//
+TBool TStoreContactField::SupportsLabel() const
+    {
+    // Currently sim store doesn't support field labels. However, it's possible
+    // to use labels in additional numbers of the USIM (EF AAS) if the lower
+    // level software and USIM card supports it.
+    return 
+        iParentContact->ParentStore().StoreProperties().SupportsFieldLabels();
+    }
+    
+// -----------------------------------------------------------------------------
+// TStoreContactField::FieldLabel
+// -----------------------------------------------------------------------------
+//
+TPtrC TStoreContactField::FieldLabel() const
+    {
+    return KNullDesC();
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::SetFieldLabelL
+// -----------------------------------------------------------------------------
+//
+void TStoreContactField::SetFieldLabelL( const TDesC& /*aText*/ )
+    {
+    User::Leave( KErrNotSupported );
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::MaxLabelLength
+// -----------------------------------------------------------------------------
+//
+TInt TStoreContactField::MaxLabelLength() const
+    {
+    // SIM store doesn't support label editing. Return 0 as documented in
+    // MVPbkStoreContactField API
+    return 0;
+    }
+    
+// -----------------------------------------------------------------------------
+// TStoreContactField::FieldData
+// -----------------------------------------------------------------------------
+//
+MVPbkContactFieldData& TStoreContactField::FieldData()
+    {
+    return iFieldData;
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::CloneLC
+// -----------------------------------------------------------------------------
+//
+MVPbkStoreContactField* TStoreContactField::CloneLC() const
+    {
+    TStoreContactField* clone =
+        new (ELeave) TStoreContactField;
+    clone->SetParentContact(*this->iParentContact);
+    clone->SetSimField(*this->iSimField);
+    CleanupDeletePushL(clone);
+    return clone;
+    }
+
+// -----------------------------------------------------------------------------
+// TStoreContactField::CreateLinkLC
+// -----------------------------------------------------------------------------
+//    
+MVPbkContactLink* TStoreContactField::CreateLinkLC() const
+    {
+    MVPbkContactLink* ret = NULL;
+    if ( iParentContact->SimContact().SimIndex() != KVPbkSimStoreFirstFreeIndex )
+        {
+        TInt index = KErrNotFound;
+        
+        // Find the index of this field in the parent contact
+        const TInt count = iParentContact->SimContact().FieldCount();
+        for (TInt i = 0; i < count; ++i)
+            {
+            if (&iParentContact->SimContact().FieldAt(i) == iSimField)
+                {
+                index = i;
+                break;
+                }
+            }
+        ret = CContactLink::NewLC(
+                iParentContact->Store(), 
+                iParentContact->SimContact().SimIndex(),
+                index);
+        }
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// TContactNewField::TContactNewField
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+TContactNewField::TContactNewField( CVPbkSimCntField* aSimField ) 
+    {
+    // This instance has an ownership of the aSimField now
+    TStoreContactField::SetSimField( *aSimField );
+    iOwnsField = ETrue;
+    }
+
+// Destructor
+TContactNewField::~TContactNewField() 
+    {
+    if ( iOwnsField )
+        {
+        delete TStoreContactField::SimField();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TContactNewField::SimField
+// -----------------------------------------------------------------------------
+//
+CVPbkSimCntField* TContactNewField::SimField()
+    {
+    iOwnsField = EFalse;
+    return TStoreContactField::SimField();
+    }
+}  // namespace VPbkSimStore
+