--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/mmsui/notmtmsrc/MMBoxArray.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,347 @@
+/*
+* Copyright (c) 2004 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: Implementation of the CMMBoxArray class
+*
+*/
+
+
+
+// INCLUDES
+#include <msvapi.h> // for CMsvSession
+#include <msvids.h> // for KMsvRootIndexEntryId
+#include <gulutil.h> // for KColumnListSeparator
+#include <txtetext.h> // for CEditableText
+#include <mmsconst.h> // for KUidMsgMMSNotification
+#include "MMBoxArray.h"
+#include "NotMtmUiData.h"
+#include "MmsMtmConst.h" // For Logs
+
+// LOCAL CONSTANTS AND MACROS
+const TInt KMMBoxBitmapIndex = 1;
+const TInt KMMBoxHighPriorityIconIndex = 2;
+const TInt KMMBoxLowPriorityIconIndex = 3;
+const TInt KMMBoxMaxDisplayTextLength = 80;
+const TInt KMMBoxMaxVisibleChars = 30;
+
+//
+//
+// CMMBoxArray
+//
+//
+
+// ----------------------------------------------------
+// CMMBoxArray::CMMBoxArray
+// ----------------------------------------------------
+CMMBoxArray::CMMBoxArray( CMsvSession& aSession, CNotMtmUiData& aUiData ):
+ iSession( aSession ),
+ iUiData( aUiData )
+ {
+ }
+
+// ----------------------------------------------------
+// CMMBoxArray::NewL
+// ----------------------------------------------------
+CMMBoxArray* CMMBoxArray::NewL( CMsvSession& aSession, CNotMtmUiData& aUiData )
+ {
+ CMMBoxArray* self = new (ELeave) CMMBoxArray(aSession, aUiData);
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------
+// CMMBoxArray::ConstructL
+// ----------------------------------------------------
+void CMMBoxArray::ConstructL()
+ {
+ LOGTEXT(_L8("MMBoxArray: Construct start"));
+ TMsvSelectionOrdering ordering = TMsvSelectionOrdering(
+ KMsvNoGrouping,
+ EMsvSortByDateReverse,
+ EFalse );
+
+ iFolderEntry = CMsvEntry::NewL(
+ iSession,
+ KMsvRootIndexEntryId,
+ ordering );
+
+ iListBoxText = HBufC::NewL( KMMBoxMaxDisplayTextLength );
+ LOGTEXT(_L8("MMBoxArray: Construct end"));
+ }
+
+// ----------------------------------------------------
+// CMMBoxArray::~CMMBoxArray
+// ----------------------------------------------------
+CMMBoxArray::~CMMBoxArray()
+ {
+ LOGTEXT(_L8("MMBoxArray: Destructor"));
+ delete iFolderEntry;
+ delete iListBoxText;
+ }
+
+// ----------------------------------------------------
+// CMMBoxArray::MdcaCount
+// ----------------------------------------------------
+TInt CMMBoxArray::MdcaCount() const
+ {
+ LOGTEXT(_L8("MMBoxArray: MdcaCount"));
+ TInt retVal = 0;
+ CMsvEntrySelection* msgSel = NULL;
+ TRAP_IGNORE( msgSel = iFolderEntry->ChildrenWithMtmL( KUidMsgMMSNotification ) );
+ retVal = msgSel->Count( );
+ delete msgSel;
+ return retVal;
+ }
+
+// ----------------------------------------------------
+// CMMBoxArray::MdcaPoint
+// ----------------------------------------------------
+TPtrC CMMBoxArray::MdcaPoint(TInt aIndex) const
+ {
+ LOGTEXT(_L8("MMBoxArray: MdcaPoint"));
+ TPtr tempText = iListBoxText->Des();
+ tempText.Zero();
+
+ TMsvId childId = EntryId( aIndex );
+
+ TMsvId service=-1;
+ TMsvEntry child;
+ TInt error = iSession.GetEntry( childId, service, child );
+
+ if( error )
+ {
+ tempText.AppendNum( KMMBoxBitmapIndex ); // index of the bitmap to be shown
+ tempText.Append( KColumnListSeparator );
+ tempText.Append( CEditableText::ESpace );
+ tempText.Append( KColumnListSeparator );
+ tempText.Append( CEditableText::ESpace );
+ return tempText;
+ }
+ else
+ {
+ // construct listbox-string
+ // bitmap
+ LOGTEXT(_L8("MMBoxArray: MdcaPoint Add bitmapindex"));
+ tempText.AppendNum( KMMBoxBitmapIndex ); // index of the bitmap to be shown
+
+ tempText.Append( KColumnListSeparator );
+
+ // sender-information
+ if ( child.iDetails.Length() > KMMBoxMaxVisibleChars )
+ {
+ LOGTEXT(_L8("MMBoxArray: MdcaPoint Add sender1"));
+ tempText.Append( child.iDetails.Left( KMMBoxMaxVisibleChars-1 ) );
+ tempText.Append( CEditableText::EEllipsis );
+ }
+ else if ( child.iDetails.Length( ) > 0 )
+ {
+ LOGTEXT(_L8("MMBoxArray: MdcaPoint Add sender2"));
+ tempText.Append( child.iDetails );
+ }
+ else
+ {
+ // append space, needed by list box
+ LOGTEXT(_L8("MMBoxArray: MdcaPoint Add sender3"));
+ tempText.Append( CEditableText::ESpace );
+ }
+
+ tempText.Append( KColumnListSeparator );
+
+ HBufC* statusText = NULL;
+
+ TRAPD( err, statusText = iUiData.StatusTextL( child ) );
+ if( !err )
+ { // No error, status is fine
+ TRAP_IGNORE( CleanupStack::PushL( statusText ) );
+ if ( statusText->Length( ) > KMMBoxMaxVisibleChars )
+ {
+ LOGTEXT(_L8("MMBoxArray: MdcaPoint Add status1"));
+ tempText.Append( statusText->Left( KMMBoxMaxVisibleChars-1 ) );
+ tempText.Append( CEditableText::EEllipsis );
+ }
+ else if ( statusText->Length( ) > 0 )
+ {
+ LOGTEXT(_L8("MMBoxArray: MdcaPoint Add status2"));
+ tempText.Append( statusText->Des() );
+ }
+ else
+ {
+ LOGTEXT(_L8("MMBoxArray: MdcaPoint Add status3"));
+ tempText.Append( CEditableText::ESpace );
+ }
+ CleanupStack::PopAndDestroy( statusText );
+ }
+ else
+ { // status leaved -> enter just space
+ tempText.Append( CEditableText::ESpace );
+ }
+
+ if ( child.Priority() == EMsvHighPriority )
+ {
+ tempText.Append( KColumnListSeparator );
+ tempText.AppendNum( KMMBoxHighPriorityIconIndex );
+ }
+ else if ( child.Priority() == EMsvLowPriority )
+ {
+ tempText.Append( KColumnListSeparator );
+ tempText.AppendNum( KMMBoxLowPriorityIconIndex );
+ }
+ }
+ LOGTEXT( _L8("MMBoxArray: MdcaPoint result") );
+
+ return tempText;
+ }
+
+
+// ----------------------------------------------------
+// CMMBoxArray::EntryId
+// ----------------------------------------------------
+TMsvId CMMBoxArray::EntryId( TInt aIndex ) const
+ {
+ LOGTEXT(_L8("MMBoxArray: EntryId"));
+ TMsvId retVal = 0;
+ CMsvEntrySelection* msgSel = NULL;
+ TRAP_IGNORE(msgSel = iFolderEntry->ChildrenWithMtmL( KUidMsgMMSNotification ) );
+ retVal = msgSel->At( aIndex );
+ delete msgSel;
+ return retVal;
+ }
+
+// ----------------------------------------------------
+// CMMBoxArray::Entry
+// ----------------------------------------------------
+TMsvEntry CMMBoxArray::Entry( TInt aIndex ) const
+ {
+ LOGTEXT(_L8("MMBoxArray: Entry"));
+ TMsvId service=-1;
+ TMsvId indexId = EntryId( aIndex );
+ TMsvEntry child;
+ iSession.GetEntry( indexId, service, child );
+ return child;
+ }
+
+// ----------------------------------------------------
+// CMMBoxArray::RefreshArrayL
+// ----------------------------------------------------
+void CMMBoxArray::RefreshArrayL( TMsvId aFolderId )
+ {
+ LOGTEXT(_L8("MMBoxArray: RefreshArray"));
+ iFolderEntry->SetEntryL( KMsvDraftEntryId );
+ iFolderEntry->SetEntryL( aFolderId );
+ }
+
+// ----------------------------------------------------
+// CMMBoxArray::SortType
+// ----------------------------------------------------
+TMMBoxSortType CMMBoxArray::SortType( ) const
+ {
+ LOGTEXT(_L8("MMBoxArray: SortType"));
+ TMsvSelectionOrdering ordering = iFolderEntry->SortType( );
+
+ TMMBoxSortType type = EMMBoxSortByDate;
+
+ switch( ordering.Sorting( ) )
+ {
+ case EMsvSortByDate:
+ case EMsvSortByDateReverse:
+ break;
+ case EMsvSortByDetails:
+ case EMsvSortByDetailsReverse:
+ type = EMMBoxSortByName;
+ break;
+ case EMsvSortByDescription:
+ case EMsvSortByDescriptionReverse:
+ default:
+ type = EMMBoxSortBySubject;
+ break;
+ }
+ return type;
+ }
+
+// ----------------------------------------------------
+// CMMBoxArray::SetSortType
+// ----------------------------------------------------
+TMsvSelectionOrdering CMMBoxArray::SetSortType( const TMMBoxSortType& aType )
+ {
+ LOGTEXT(_L8("MMBoxArray: SetSortType start"));
+ TMsvSorting type;
+
+ switch ( aType )
+ {
+ case EMMBoxSortByDate:
+ type = EMsvSortByDateReverse;
+ break;
+ case EMMBoxSortByName:
+ type = EMsvSortByDetails;
+ break;
+ case EMMBoxSortBySubject:
+ default:
+ type = EMsvSortByDescription;
+ break;
+ }
+
+ if( aType == SortType( ) )
+ {
+ TRAP_IGNORE( ReverseSortingL( ) );
+ }
+ else
+ {
+ TMsvSelectionOrdering ordering = TMsvSelectionOrdering(
+ KMsvNoGrouping,
+ type,
+ EFalse );
+ TRAP_IGNORE( iFolderEntry->SetSortTypeL( ordering ) );
+ }
+ LOGTEXT(_L8("MMBoxArray: SetSortType end"));
+ return iFolderEntry->SortType( );
+ }
+
+// ----------------------------------------------------
+// CMMBoxArray::ReverseSorting
+// ----------------------------------------------------
+void CMMBoxArray::ReverseSortingL( )
+ {
+ LOGTEXT(_L8("MMBoxArray: ReverseSorting"));
+ TMsvSelectionOrdering ordering = iFolderEntry->SortType( );
+ TMsvSorting type = ordering.Sorting( );
+
+ switch( type )
+ {
+ case EMsvSortByDate:
+ type = EMsvSortByDateReverse;
+ break;
+ case EMsvSortByDateReverse:
+ type = EMsvSortByDate;
+ break;
+ case EMsvSortByDetails:
+ type = EMsvSortByDetailsReverse;
+ break;
+ case EMsvSortByDetailsReverse:
+ type = EMsvSortByDetails;
+ break;
+ case EMsvSortByDescription:
+ type = EMsvSortByDescriptionReverse;
+ break;
+ case EMsvSortByDescriptionReverse:
+ type = EMsvSortByDescription;
+ break;
+ default: // If not found -> return from the function
+ return;
+ }
+ ordering.SetSorting( type );
+ iFolderEntry->SetSortTypeL( ordering );
+ }
+
+// End of File