messagingappbase/mce/src/MceDeliveryReportAdapter.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/mce/src/MceDeliveryReportAdapter.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2002 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:  
+*     This class formats data from engine to listbox
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <avkon.rsg>
+#include <MceLogEng.rsg>
+#include <calslbs.h>  // TextUtils
+#include <StringLoader.h>
+
+#include <featmgr.h>
+#include <NumberGrouping.h>
+
+#include "MceDeliveryReportAdapter.h"
+#include "MceLogEngine.h"
+#include "MceUtils.h"
+
+// security data caging
+#include <data_caging_path_literals.hrh>
+#include <bldvariant.hrh>
+
+// CONSTANTS
+const TInt KTinyBufferLength = 5;
+const TInt KSmallBufferLength = 30;
+const TInt KMediumBufferLength = 128;
+const TInt KLargeBufferLength = 256;
+const TInt KInitConcItem = 0;
+const TInt KFirstConcItemPos = 0;
+const TInt KSecondConcItemPos = 2;
+const TInt KConcItemLength = 1;
+const TInt KPhoneNumberMaxLen = 48;
+const TInt KListBoxCellId = 1;
+
+// LOCAL CONSTANTS AND MACROS
+
+_LIT( KMceDirAndFile,"mcelogeng.rSC" );
+
+_LIT(KSmsEventType, "0\t");
+_LIT(KMmsEventType, "1\t");
+_LIT(KTab, "\t");
+
+#ifdef RD_MSG_NAVIPANE_IMPROVEMENT
+_LIT( KSeparator, "  " );
+#else
+_LIT( KSeparator, " - " );
+#endif // RD_MSG_NAVIPANE_IMPROVEMENT
+// ================= MEMBER FUNCTIONS =======================
+
+
+// Two-phased constructor.
+CMceDeliveryReportAdapter* CMceDeliveryReportAdapter::NewL
+                            ( CMceLogEngine* aModel,
+                              CEikFormattedCellListBox *aListBox )
+    {
+    CMceDeliveryReportAdapter* self = new( ELeave ) CMceDeliveryReportAdapter( aModel, aListBox );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// C++ default constructor can NOT contain any code that
+// might leave.
+//
+CMceDeliveryReportAdapter::CMceDeliveryReportAdapter( CMceLogEngine* aModel, 
+                                                      CEikFormattedCellListBox *aListBox  )
+        : iModel( aModel ),        
+        iResourceLoader( *CCoeEnv::Static() ),
+        iListBox( aListBox )
+    {
+    TTime universal;
+    TTime home;
+
+    universal.UniversalTime();
+    home.HomeTime();
+    TInt err = home.MinutesFrom( universal, iInterval );
+
+    if( err )
+        {
+        iInterval = 0;
+        }
+    }
+
+// Symbian OS default constructor can leave.
+void CMceDeliveryReportAdapter::ConstructL()
+    {
+    // security data caging
+    TParse fp;
+    fp.Set( KMceDirAndFile, &KDC_APP_RESOURCE_DIR , NULL );
+    TFileName filename = fp.FullName();
+
+    iResourceLoader.OpenL( filename );
+    CEikonEnv* env = CEikonEnv::Static();
+
+    iBuffer = HBufC::NewL( KLargeBufferLength );
+    iTimeText = HBufC::NewL( KMediumBufferLength );
+    iPendingText = env->AllocReadResourceL( R_MCE_LOG_ENG_PENDING_TEXT );
+    iRead = env->AllocReadResourceL( R_MCE_LOG_ENG_READ_TEXT );  
+    iFailedText = env->AllocReadResourceL( R_MCE_LOG_ENG_FAILED_TEXT );
+    iDeliveredText = env->AllocReadResourceL( R_MCE_LOG_ENG_DELIVERED_TEXT );
+    iTimeFormat = env->AllocReadResourceL( R_QTN_TIME_USUAL_WITH_ZERO );
+    
+#ifdef RD_MSG_NAVIPANE_IMPROVEMENT    
+    iTimeDateFormat = env->AllocReadResourceL( R_QTN_DATE_WITHOUT_YEAR_WITH_ZERO );
+#else
+    iTimeDateFormat = env->AllocReadResourceL( R_QTN_DATE_SHORT_WITH_ZERO );
+#endif // RD_MSG_NAVIPANE_IMPROVEMENT
+
+    iModel->GetStandardStrings( iFailed, iPending );
+
+    iConcItems = new( ELeave ) CArrayFixFlat<TInt>( 1 );
+    iConcItems->AppendL( KInitConcItem );
+    iConcItems->AppendL( KInitConcItem );
+
+    iConcText = StringLoader::LoadL( R_MCE_LOG_ENG_CONCATENATED_TEXT,
+                                            *iConcItems );
+
+    // CenRep key KCRUidNumberGrouping / KNumberGrouping is used to check if
+    // number grouping is supported
+    if( AknLayoutUtils::LayoutMirrored() || MceUtils::NumberGroupingEnabled() )
+        {
+        iNumberGrouping = CPNGNumberGrouping::NewL( KPhoneNumberMaxLen );
+        }
+    }
+
+    
+// Destructor
+CMceDeliveryReportAdapter::~CMceDeliveryReportAdapter()
+    {
+    delete iBuffer;
+    delete iPendingText;
+    delete iFailedText;
+    delete iDeliveredText;
+    delete iTimeFormat;
+    delete iTimeDateFormat;
+    delete iTimeText;
+    delete iConcItems;
+    delete iConcText;   
+    delete iRead;   
+    iResourceLoader.Close();
+
+    delete iNumberGrouping;
+    }
+
+
+// from MDesCArray
+TInt  CMceDeliveryReportAdapter::MdcaCount () const 
+    {
+    return iModel->Count();
+    }
+    
+// from MDesCArray  
+TPtrC16  CMceDeliveryReportAdapter::MdcaPoint( TInt aIndex ) const
+    {
+    TPtr des = iBuffer->Des();
+    /// Double Graphics Style " <SMS/MMS 0/1> \t<Remote Party>\t<time>" - "<Status>" 
+        
+    const CLogEvent* event = iModel->Event( aIndex );
+    
+    /// Event type ICON index
+    if( event->EventType() == KLogShortMessageEventTypeUid )
+        {
+        des.Format( KSmsEventType );
+        }
+    else
+        {
+        des.Format( KMmsEventType );
+        }
+
+    // If there is a "name" then we show it.
+    if( event->RemoteParty().Length() &&
+       ( event->RemoteParty() != event->Number() ) ) 
+        {
+        des.Append( event->RemoteParty() );
+        }
+    else
+        {
+        if( iNumberGrouping )
+            {
+            if( event->Number().Length() <= iNumberGrouping->MaxDisplayLength() )
+                {
+                iNumberGrouping->Set( event->Number() );
+                TBuf<KMediumBufferLength> buf( iNumberGrouping->FormattedNumber() );
+                AknTextUtils::ClipToFit
+                                (   buf
+                                ,   AknTextUtils::EClipFromBeginning
+                                ,   iListBox
+                                ,   aIndex
+                                ,   KListBoxCellId
+                                );
+                // Arabic & Hebrew conversion if needed.
+                AknTextUtils::LanguageSpecificNumberConversion( buf ); 
+                des.Append( buf );
+                }
+            else
+                {
+                TBuf<KMediumBufferLength> buf( event->Number() );
+                // Arabic & Hebrew conversion if needed.
+                AknTextUtils::LanguageSpecificNumberConversion( buf ); 
+                des.Append( buf );
+                }
+            }
+        else
+            {
+            TBuf<KMediumBufferLength> buf(event->Number());
+            AknTextUtils::ClipToFit
+                                (   buf
+                                ,   AknTextUtils::EClipFromBeginning
+                                ,   iListBox
+                                ,   aIndex
+                                ,   KListBoxCellId
+                                );
+            // Arabic & Hebrew conversion if needed.
+            AknTextUtils::LanguageSpecificNumberConversion( buf ); 
+            des.Append( buf );
+            }
+        }
+
+    des.Append(KTab);
+    TTime currentTime;
+    currentTime.HomeTime();
+
+    TTime time( event->Time() + iInterval );
+    TPtr timePtr = iTimeText->Des();
+
+    TTimeIntervalHours timeDiff;
+    currentTime.HoursFrom( time, timeDiff );
+
+    HBufC* tmpTimeFormat;
+    if( currentTime.DayNoInYear() != time.DayNoInYear() )
+        {
+        tmpTimeFormat = iTimeDateFormat;
+        }
+    else 
+        {
+        tmpTimeFormat = iTimeFormat;
+        }
+    TRAPD( err, time.FormatL( timePtr, *tmpTimeFormat ) );
+    if( err == KErrNone )
+        {
+        AknTextUtils::LanguageSpecificNumberConversion( timePtr ); 
+        des.Append( timePtr );
+        }
+    des.Append( KSeparator );
+
+    if( event->Status() == iPending )
+        {
+        if( iModel->PurgeData( event, iConcItems ) > 1 )
+            {            
+            TBuf<KSmallBufferLength> numBuf;
+            TBuf<KTinyBufferLength> item;
+
+            numBuf.Copy( *iConcText );
+            item.Num( iConcItems->At( 1 ) );
+            numBuf.Replace( KSecondConcItemPos, KConcItemLength, item );
+            item.Num( iConcItems->At( 0 ) );
+            numBuf.Replace( KFirstConcItemPos, KConcItemLength, item );
+            des.Append( numBuf );
+            }
+        des.Append( *iPendingText );
+        }
+    else if( event->Status() == iFailed )
+        {
+        des.Append( *iFailedText );
+        }       
+    else if( event->Status() == KLogsMsgReadText )  
+        {
+        des.Append( *iRead );
+        }       
+    else
+        {
+        des.Append( *iDeliveredText );
+        }
+       
+    return iBuffer->Des();
+    }
+
+//  End of File