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