--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/USIMExtension/src/CPsu2OwnNumberListBoxModel.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,405 @@
+/*
+* 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: Phonebook 2 own numbers list box model.
+*
+*/
+
+
+#include "CPsu2OwnNumberListBoxModel.h"
+
+// From Virtual Phonebook
+#include <MVPbkContactViewBase.h>
+#include <MVPbkViewContact.h>
+#include <MVPbkBaseContactFieldCollection.h>
+#include <MVPbkBaseContactField.h>
+#include <MVPbkContactFieldData.h>
+#include <MVPbkFieldType.h>
+#include <TVPbkFieldVersitProperty.h>
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkStoreContact.h>
+
+// System includes
+#include <coecntrl.h>
+#include <eikenv.h>
+
+// Debugging headers
+#include <Pbk2Debug.h>
+
+/// Unnamed namespace for local definitions
+namespace
+ {
+
+const TInt KOOBLimit = -1;
+const TInt KMaxListBoxBufferSize = 128;
+_LIT(KListBoxIconFormat, "%d\t");
+_LIT(KListBoxFieldSeparator, "\t");
+
+/**
+ * Checks from given array is there given field type name in it.
+ * @param aArray Array of field types.
+ * @param aName Field type name to look for.
+ * @return ETrue if name is found, EFalse if it is not.
+ */
+TBool ContainsFieldType(
+ TArray<TVPbkFieldVersitProperty> aArray,
+ TVPbkFieldTypeName aName )
+ {
+ TBool ret = EFalse;
+ const TInt size = aArray.Count();
+ for (TInt i=0; i<size; ++i)
+ {
+ if (aArray[i].Name() == aName)
+ {
+ ret = ETrue;
+ break;
+ }
+ }
+ return ret;
+ }
+
+/**
+ * Checks from given fields for given field type and prints
+ * it to given descriptor.
+ *
+ * @param aField Field collection.
+ * @param aPtr Descriptor.
+ * @param aType Field type name.
+ */
+void AddDataFormatL(
+ const MVPbkBaseContactFieldCollection& aFields,
+ TPtr& aPtr,
+ TVPbkFieldTypeName aType )
+ {
+ const TInt fieldCount( aFields.FieldCount() );
+ for( TInt i(0); i < fieldCount; ++i )
+ {
+ const MVPbkBaseContactField& field = aFields.FieldAt( i );
+ const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
+ if ( field.FieldData().DataType() == EVPbkFieldStorageTypeText )
+ {
+ if (fieldType &&
+ ContainsFieldType(fieldType->VersitProperties(), aType))
+ {
+ const MVPbkContactFieldTextData* textData =
+ &MVPbkContactFieldTextData::Cast( field.FieldData() );
+ aPtr.Append(textData->Text());
+ aPtr.Append(KListBoxFieldSeparator);
+ }
+ }
+ }
+ }
+
+#ifdef _DEBUG
+enum TPanicCode
+ {
+ EPanicPreCond_RefreshL = 1
+ };
+
+void Panic(TPanicCode aReason)
+ {
+ _LIT( KPanicText, "CPsu2OwnNumberListBoxModel" );
+ User::Panic( KPanicText, aReason );
+ }
+#endif // _DEBUG
+
+} //// namespace
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::CPsu2OwnNumberListBoxModel
+// --------------------------------------------------------------------------
+//
+CPsu2OwnNumberListBoxModel::CPsu2OwnNumberListBoxModel
+ ( MVPbkContactViewBase& aView, CCoeControl& aObserver ):
+ CActive(EPriorityStandard),
+ iView( aView ),
+ iObserver( aObserver )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::~CPsu2OwnNumberListBoxModel
+// --------------------------------------------------------------------------
+//
+CPsu2OwnNumberListBoxModel::~CPsu2OwnNumberListBoxModel()
+ {
+ iView.RemoveObserver( *this );
+ Cancel();
+ if ( iArray )
+ {
+ iArray->Reset();
+ }
+ delete iArray;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::ConstructL()
+ {
+ CActiveScheduler::Add( this );
+ iArray = new ( ELeave ) CDesCArraySeg( 1 );
+ iView.AddObserverL( *this );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::NewL
+// --------------------------------------------------------------------------
+//
+CPsu2OwnNumberListBoxModel* CPsu2OwnNumberListBoxModel::NewL
+ ( MVPbkContactViewBase& aView, CCoeControl& aObserver )
+ {
+ CPsu2OwnNumberListBoxModel* self =
+ new( ELeave ) CPsu2OwnNumberListBoxModel( aView, aObserver );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::MdcaCount
+// --------------------------------------------------------------------------
+//
+TInt CPsu2OwnNumberListBoxModel::MdcaCount() const
+ {
+ TInt result( 0 );
+ TRAPD( error, result = iView.ContactCountL() );
+ if ( error != KErrNone )
+ {
+ CEikonEnv::Static()->NotifyIdleErrorWhileRedrawing( error );
+ }
+ return result;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::MdcaPoint
+// --------------------------------------------------------------------------
+//
+TPtrC16 CPsu2OwnNumberListBoxModel::MdcaPoint(TInt aIndex) const
+ {
+ PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
+ ("CPsu2OwnNumberListBoxModel(%x)::MdcaPoint() Index=%d "),
+ this, aIndex);
+ if ( aIndex > KOOBLimit && aIndex < iArray->Count())
+ {
+ return (*iArray)[aIndex];
+ }
+ return KNullDesC();
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::AddToArrayL
+// --------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::AddToArrayL( MVPbkStoreContact* aContact )
+ {
+ PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
+ ("CPsu2OwnNumberListBoxModel(%x)::AddToArrayL() "), this);
+
+ if ( aContact )
+ {
+ aContact->PushL();
+ HBufC* buffer = HBufC::NewLC(KMaxListBoxBufferSize);
+ TPtr ptr( buffer->Des() );
+
+ ptr.Format(KListBoxIconFormat, 0 );
+ const MVPbkBaseContactFieldCollection& fields = aContact->Fields();
+ AddDataFormatL( fields, ptr, EVPbkVersitNameN );
+ AddDataFormatL( fields, ptr, EVPbkVersitNameTEL );
+ iArray->AppendL(ptr);
+ CleanupStack::PopAndDestroy( buffer );
+ CleanupStack::PopAndDestroy( aContact );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::ReadContactsL
+// --------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::ReadContactsL()
+ {
+ iCurrentContact = 0;
+ const MVPbkViewContact& contact = iView.ContactAtL(iCurrentContact);
+ contact.ReadL( *this );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::RefreshL
+// --------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::RefreshL()
+ {
+ __ASSERT_DEBUG( iArray, Panic(EPanicPreCond_RefreshL));
+
+ // Reset array
+ iArray->Reset();
+
+ if ( iView.ContactCountL() > 0 )
+ {
+ ReadContactsL();
+ }
+ else
+ {
+ iObserver.DrawDeferred();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::ContactOperationCompleted
+// --------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::ContactOperationCompleted
+ ( TContactOpResult aResult )
+ {
+ PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
+ ("CPsu2OwnNumberListBoxModel(%x)::ContactOperationCompleted() "),
+ this);
+
+ TRAPD( err, AddToArrayL( aResult.iStoreContact ) )
+ ++iCurrentContact;
+ if ( err != KErrNone )
+ {
+ CEikonEnv::Static()->HandleError( err );
+ }
+ else
+ {
+ IssueRequest();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::ContactOperationFailed
+// --------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::ContactOperationFailed(
+ TContactOp /*aOpCode*/,
+ TInt aErrorCode,
+ TBool /*aErrorNotified*/)
+ {
+ CEikonEnv::Static()->HandleError( aErrorCode );
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::RunL
+// --------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::RunL()
+ {
+ if ( iCurrentContact < iView.ContactCountL() )
+ {
+ const MVPbkViewContact& contact = iView.ContactAtL(iCurrentContact);
+ contact.ReadL( *this );
+ }
+ else
+ {
+ iObserver.DrawDeferred();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::DoCancel
+// --------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::DoCancel()
+ {
+ // Nothing to do
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::RunError
+// --------------------------------------------------------------------------
+//
+TInt CPsu2OwnNumberListBoxModel::RunError(TInt aError)
+ {
+ CCoeEnv::Static()->HandleError(aError);
+ return KErrNone;
+ }
+
+// --------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::IssueRequest
+// --------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::IssueRequest()
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, KErrNone);
+ SetActive();
+ }
+
+// -----------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::ContactViewReady
+// -----------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::ContactViewReady(
+ MVPbkContactViewBase& aView )
+ {
+ if ( &iView == &aView )
+ {
+ TRAPD( error, RefreshL() );
+ if ( error != KErrNone )
+ {
+ CCoeEnv::Static()->HandleError( error );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::ContactViewUnavailable
+// -----------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::ContactViewUnavailable(
+ MVPbkContactViewBase& /*aView*/ )
+ {
+ // Do nothing
+ }
+
+// -----------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::ContactAddedToView
+// -----------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::ContactAddedToView(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aIndex*/,
+ const MVPbkContactLink& /*aContactLink*/ )
+ {
+ // Do nothing
+ }
+
+// -----------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::ContactRemovedFromView
+// -----------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::ContactRemovedFromView(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aIndex*/,
+ const MVPbkContactLink& /*aContactLink*/ )
+ {
+ // Do nothing
+ }
+
+// -----------------------------------------------------------------------------
+// CPsu2OwnNumberListBoxModel::ContactViewError
+// -----------------------------------------------------------------------------
+//
+void CPsu2OwnNumberListBoxModel::ContactViewError(
+ MVPbkContactViewBase& /*aView*/,
+ TInt /*aError*/,
+ TBool /*aErrorNotified*/ )
+ {
+ // Do nothing
+ }
+
+// End of File