phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardlistboxmodel.cpp
branchRCL_3
changeset 21 b3431bff8c19
parent 15 e8e3147d53eb
child 23 5586b4d2ec3e
--- a/phonebookui/Phonebook2/ccapplication/ccamycardplugin/src/ccappmycardlistboxmodel.cpp	Mon Mar 15 12:39:26 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,501 +0,0 @@
-/*
- * Copyright (c) 2009 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:  Listbox model for MyCard details list
- *
- */
-
-#include <TPbk2StoreContactAnalyzer.h>
-#include <Pbk2UIControls.rsg>
-#include <Pbk2PresentationUtils.h>
-#include <CPbk2PresentationContact.h>
-#include <CPbk2PresentationContactField.h>
-#include <CPbk2PresentationContactFieldCollection.h>
-#include <CPbk2IconArray.h>
-#include <MPbk2FieldProperty.h>
-
-#include <CVPbkContactManager.h>
-#include <MVPbkFieldType.h>
-#include <MVPbkContactFieldTextData.h>
-#include <MVPbkContactFieldUriData.h>
-#include <MVPbkContactFieldDateTimeData.h>
-#include <MVPbkContactFieldData.h>
-#include <VPbkUtils.h>
-#include <VPbkEng.rsg>
-
-#include <aknlists.h>
-#include <avkon.rsg>
-
-#include "ccappmycardcommon.h"
-#include "ccappmycardlistboxmodel.h"
-#include "ccappmycardlistboxrow.h"
-#include <ccappmycardpluginrsc.rsg>
-
-
-/// Granularity of the row array
-const TInt KRowArrayGranularity = 4;
-
-/// Initial buffer size for temporary text buffers
-const TInt KBufferSize = 256;
-
-/// Disallowed characters in column text
-_LIT( KCharsToReplace, "\t" );
-
-/// Replacement character for invalid or graphical column characters
-_LIT( KReplacementChars, " " );
-const TText KReplacedChars = ' ';
-
-/// Content colum index
-const TInt KContentColumnIndex = 2;
-
-/// Column  separator
-const TText KColumnSeparator = '\t';
-
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::NewL
-// ---------------------------------------------------------------------------
-//
-CCCAppMyCardListBoxModel* CCCAppMyCardListBoxModel::NewL(CCCAppMyCard& aMyCard,
-        CCoeEnv& aCoeEnv, CEikListBox& aListBox, CPbk2IconArray& aIconArray)
-    {
-    CCA_DP(KMyCardLogFile, CCA_L("->CCCAppMyCardListBoxModel::NewL()") );
-
-    CCCAppMyCardListBoxModel* self = new (ELeave) CCCAppMyCardListBoxModel(
-            aMyCard, aCoeEnv, aListBox, aIconArray);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-
-    CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardListBoxModel::NewL()") );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::~CCCAppMyCardListBoxModel
-// ---------------------------------------------------------------------------
-//
-CCCAppMyCardListBoxModel::~CCCAppMyCardListBoxModel()
-    {
-    CCA_DP(KMyCardLogFile,
-            CCA_L("->CCCAppMyCardListBoxModel::~CCCAppMyCardListBoxModel()") );
-
-    iRows.ResetAndDestroy();
-    delete iLineBuf;
-    delete iColumnBuf;
-    iInxToPresentationIdx.Close();
-
-    CCA_DP(KMyCardLogFile,
-            CCA_L("<-CCCAppMyCardListBoxModel::~CCCAppMyCardListBoxModel()") );
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::CCCAppMyCardListBoxModel
-// ---------------------------------------------------------------------------
-//
-CCCAppMyCardListBoxModel::CCCAppMyCardListBoxModel(
-    CCCAppMyCard& aMyCard,
-    CCoeEnv& aCoeEnv,
-    CEikListBox& aListBox,
-    CPbk2IconArray& aIconArray ) :
-        iCoeEnv(aCoeEnv),
-        iMyCard(aMyCard),
-        iListBox(aListBox),
-        iIconArray(aIconArray),
-        iRows(KRowArrayGranularity)
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CCCAppMyCardListBoxModel::ConstructL()
-    {
-    iLineBuf = HBufC::NewL(KBufferSize);
-    iColumnBuf = HBufC::NewL(KBufferSize);
-
-    iMyCard.AddObserverL(this);
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::MyCardEventL
-// ---------------------------------------------------------------------------
-//
-void CCCAppMyCardListBoxModel::MyCardEventL(TEvent aEvent)
-    {
-    if( aEvent == MMyCardObserver::EEventContactLoaded)
-        {
-        CCA_DP( KMyCardLogFile,
-            CCA_L("->CCCAppMyCardListBoxModel::MyCardEventL EEventContactLoaded") );
-
-        iPresentationContact = &iMyCard.PresentationContactL();
-        AddDataL();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::MdcaCount
-// ---------------------------------------------------------------------------
-//
-TInt CCCAppMyCardListBoxModel::MdcaCount() const
-    {
-    return iRows.Count();
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::MdcaPoint
-// ---------------------------------------------------------------------------
-//
-TPtrC CCCAppMyCardListBoxModel::MdcaPoint(TInt aIndex) const
-    {
-    TPtr rowText( iLineBuf->Des() );
-    rowText.Zero();
-
-    const CCCAppMyCardListBoxRow& row = *iRows[aIndex];
-    const TInt columnCount = row.ColumnCount();
-    TInt fieldCount = iPresentationContact->PresentationFields().FieldCount();
-
-    for( TInt index = 0; index < columnCount; ++index )
-        {
-        TPtr columnText( iColumnBuf->Des() );
-        columnText.Copy( row.At(index) );
-
-        // Clip the column if required
-        if( index == KContentColumnIndex && 
-            row.IsClipRequired() && 
-            aIndex < fieldCount )
-            {
-            ClipFromBeginning( columnText, aIndex, index );
-            }
- 
-        // Append the column and separator to the formatted row
-        rowText.Append( columnText );
-        rowText.Append( KColumnSeparator );
-        }
-
-    return rowText;
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::FieldIndex
-// ---------------------------------------------------------------------------
-//
-TInt CCCAppMyCardListBoxModel::FieldIndex( TInt aIndex )
-    {
-    TInt* index = iInxToPresentationIdx.Find( aIndex );
-
-    if( index && *index >= 0 )
-        {
-        return iPresentationContact->PresentationFields().StoreIndexOfField( *index );
-        }
-    return KErrNotFound;
-    }
-
-// --------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::AddDataL
-// --------------------------------------------------------------------------
-//
-void CCCAppMyCardListBoxModel::AddDataL()
-    {
-    CCA_DP(KMyCardLogFile, CCA_L("->CCCAppMyCardListBoxModel::AddDataL()") );
-
-    iRows.ResetAndDestroy();
-    iInxToPresentationIdx.Close();
-
-    TInt listIdx = -1;
-
-    TInt fieldCount = iPresentationContact->PresentationFields().FieldCount();
-    for (TInt index = 0; index < fieldCount; index++)
-        {
-        CPbk2PresentationContactField& field =
-                iPresentationContact->PresentationFields().At(index);
-
-        // Get master field type list and match field's type against it
-        const MVPbkFieldType* fieldType = VPbkUtils::MatchFieldType(
-                iMyCard.ContactManager().FieldTypes(), field );
-
-        if( field.IsEditable() && fieldType && !IsHiddenField(fieldType) )
-            {
-            HBufC* label = GetLabelLC( field );
-
-            if( label->Length() )
-                {
-                CCCAppMyCardListBoxRow* row =
-                        CCCAppMyCardListBoxRow::NewL();
-                CleanupStack::PushL(row);
-
-                const MVPbkContactFieldData& fieldData = field.FieldData();
-
-                // Add icon
-                TBuf<20> buffer; // 20 should be enough for icon index
-                TInt iconIndex = iIconArray.FindIcon(
-                        field.FieldProperty().IconId() );
-                if( iconIndex != KErrNotFound)
-                    {
-                    buffer.AppendNum(iconIndex);
-                    }
-                row->AppendColumnL(buffer);
-
-                // add label.
-                row->AppendColumnL(*label);
-
-                // Add current index to Presentation Contact index array 
-                // to estimate the text is needed to clip or not.
-                iInxToPresentationIdx.InsertL(++listIdx, index);
-
-                // add field content.
-                switch (fieldData.DataType() )
-                    {
-                    case EVPbkFieldStorageTypeText:
-                        {
-                        HandleTextTypeFieldL(index, fieldData, row);
-                        break;
-                        }
-                    case EVPbkFieldStorageTypeDateTime:
-                        {
-                        HandleDateTimeTypeFieldL(fieldData, row);
-                        break;
-                        }
-                    case EVPbkFieldStorageTypeUri:
-                        {
-                        HandleUriTypeFieldL(index, fieldData, row);
-                        break;
-                        }
-                    }
-
-                // Expand row formatting buffer if required
-                ExpandBuffersL(row);
-
-                // Add the row if data ok to show to user.
-                iRows.AppendL(row);
-                CleanupStack::Pop(row);
-                }
-
-            CleanupStack::PopAndDestroy(label);
-            }
-        } // for
-
-    iListBox.HandleItemAdditionL();
-
-    CCA_DP(KMyCardLogFile, CCA_L("<-CCCAppMyCardListBoxModel::AddDataL()") );
-    }
-
-// --------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::IsHiddenField
-// --------------------------------------------------------------------------
-//
-TBool CCCAppMyCardListBoxModel::IsHiddenField(const MVPbkFieldType* aFieldType)
-    {
-    TInt resId = aFieldType->FieldTypeResId();
-    return ( resId == R_VPBK_FIELD_TYPE_SYNCCLASS ||
-             resId == R_VPBK_FIELD_TYPE_CALLEROBJIMG );
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::FieldAtLC
-// ---------------------------------------------------------------------------
-//
-MVPbkBaseContactField* CCCAppMyCardListBoxModel::FieldAtLC(TInt aIndex)
-    {
-    TInt *presentationIdx = iInxToPresentationIdx.Find(aIndex);
-
-    if( !presentationIdx)
-        {
-        return NULL;
-        }
-
-    TInt index = iPresentationContact->PresentationFields().StoreIndexOfField(
-            *presentationIdx);
-
-    if( index != KErrNotFound)
-        {
-        // Use FieldAtLC to avoid the unvalidity of the field after new
-        // FieldAt call.
-        return iMyCard.StoreContact().Fields().FieldAtLC(index);
-        }
-
-    return NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::IsFieldTypeL
-// ---------------------------------------------------------------------------
-//
-TBool CCCAppMyCardListBoxModel::IsFieldTypeL(
-    TInt aIndex, TInt aSelectorResId )
-    {
-    TBool ret = EFalse;
-    MVPbkBaseContactField* field = FieldAtLC(aIndex);
-
-    if( field )
-        {
-        TPbk2StoreContactAnalyzer analyzer( iMyCard.ContactManager(), NULL );
-        ret = analyzer.IsFieldTypeIncludedL( *field, aSelectorResId );
-        CleanupStack::PopAndDestroy(field);
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::HandleTextTypeFieldL
-// ---------------------------------------------------------------------------
-//
-void CCCAppMyCardListBoxModel::HandleTextTypeFieldL( 
-    TInt aIndex,
-    const MVPbkContactFieldData& aFieldData, 
-    CCCAppMyCardListBoxRow* aRow )
-    {
-    const TDesC& fieldText = MVPbkContactFieldTextData::Cast(aFieldData).Text();
-
-    // Check if clipping is required
-    if( IsFieldTypeL( aIndex, R_MYCARD_CLIP_FIELD_SELECTOR ) )
-        {
-        aRow->SetClipRequired( ETrue );
-        }
-    
-    TPtr columnBuf( iColumnBuf->Des() );
-    columnBuf.Set( ExpandColumnBufferL( fieldText.Length() ) );
-    columnBuf.Zero();
-
-    // replace listbox separator characters.
-    Pbk2PresentationUtils::AppendAndReplaceChars( columnBuf, fieldText,
-            KCharsToReplace, KReplacementChars );
-
-    // Replace characters that can not be displayed correctly.
-    Pbk2PresentationUtils::ReplaceNonGraphicCharacters( columnBuf, KReplacedChars );
-
-    aRow->AppendColumnL( columnBuf );
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::HandleDateTimeTypeFieldL
-// ---------------------------------------------------------------------------
-//
-void CCCAppMyCardListBoxModel::HandleDateTimeTypeFieldL(
-        const MVPbkContactFieldData& aFieldData, CCCAppMyCardListBoxRow* aRow)
-    {
-    const MVPbkContactFieldDateTimeData& date =
-            MVPbkContactFieldDateTimeData::Cast(aFieldData);
-
-    HBufC* dateFormat = 
-        iCoeEnv.AllocReadResourceLC( R_QTN_DATE_USUAL_WITH_ZERO );
-
-    TLocale locale;
-    TBuf<64> dateBuffer;
-    TTime time( date.DateTime() );
-    time.FormatL( dateBuffer, *dateFormat, locale );
-    CleanupStack::PopAndDestroy( dateFormat );
-
-    aRow->AppendColumnL( dateBuffer );
-    }
-
-// ---------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::HandleUriTypeFieldL
-// ---------------------------------------------------------------------------
-//
-void CCCAppMyCardListBoxModel::HandleUriTypeFieldL(TInt aIndex,
-        const MVPbkContactFieldData& aFieldData, CCCAppMyCardListBoxRow* aRow)
-    {
-    TBool isXspField = IsFieldTypeL( aIndex, R_MYCARD_CLIP_FIELD_SELECTOR );
-    if ( isXspField )
-        {
-        aRow->SetClipRequired( ETrue );
-        }
-    
-    const MVPbkContactFieldUriData& uri = 
-        MVPbkContactFieldUriData::Cast( aFieldData );
-
-    HBufC* tempBuf = uri.Text().AllocLC();
-    TPtr text = tempBuf->Des();
-    // Replace characters that can not be displayed correctly.
-    Pbk2PresentationUtils::ReplaceNonGraphicCharacters( text, KReplacedChars );
-    
-    aRow->AppendColumnL( text );
-    CleanupStack::PopAndDestroy( tempBuf );
-    }
-
-// --------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::ClipFromBeginning
-// --------------------------------------------------------------------------
-//
-TBool CCCAppMyCardListBoxModel::ClipFromBeginning(TDes& aBuffer,
-        TInt aItemIndex, TInt aSubCellNumber) const
-    {
-    // TODO: This could be better. Model should not care about the 
-    // type of the listbox.
-    CAknFormDoubleGraphicStyleListBox* listbox =
-        static_cast<CAknFormDoubleGraphicStyleListBox*> (&iListBox);
-
-    return AknTextUtils::ClipToFit( aBuffer, AknTextUtils::EClipFromBeginning,
-        listbox, aItemIndex, aSubCellNumber );
-    }
-
-// --------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::ExpandBuffersL
-// --------------------------------------------------------------------------
-//
-void CCCAppMyCardListBoxModel::ExpandBuffersL(CCCAppMyCardListBoxRow* aRow)
-    {
-    // Row formatting buffer
-    const TInt rowLength = aRow->TotalLength() + aRow->ColumnCount(); // for separator characters
-
-    if( rowLength > iLineBuf->Des().MaxLength() )
-        {
-        iLineBuf = iLineBuf->ReAllocL(rowLength);
-        }
-
-    ExpandColumnBufferL( aRow->MaxColumnLength() );
-    }
-
-// --------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::ExpandColumnBufferL
-// --------------------------------------------------------------------------
-//
-TPtr CCCAppMyCardListBoxModel::ExpandColumnBufferL(TInt aRequiredLength)
-    {
-    if( aRequiredLength > iColumnBuf->Des().MaxLength() )
-        {
-        iColumnBuf = iColumnBuf->ReAllocL(aRequiredLength);
-        }
-
-    return iColumnBuf->Des();
-    }
-
-// --------------------------------------------------------------------------
-// CCCAppMyCardListBoxModel::GetLabelLC
-// --------------------------------------------------------------------------
-//
-HBufC* CCCAppMyCardListBoxModel::GetLabelLC(
-        const CPbk2PresentationContactField& aField)
-    {
-    TPtr columnBuf( iColumnBuf->Des() );
-    columnBuf.Set( ExpandColumnBufferL(aField.FieldLabel().Length() ) );
-    columnBuf.Zero();
-
-    // replace listbox separator characters.
-    Pbk2PresentationUtils::AppendAndReplaceChars( columnBuf,
-        aField.FieldLabel(), KCharsToReplace, KReplacementChars );
-
-    // Replace characters that can not be displayed correctly
-    Pbk2PresentationUtils::ReplaceNonGraphicCharacters( 
-        columnBuf, KReplacedChars );
-
-    HBufC* data = HBufC::NewLC( columnBuf.Length() );
-    data->Des().Append( columnBuf );
-
-    return data;
-    }
-
-// End of File