diff -r 000000000000 -r 72b543305e3a mobilemessaging/mmsui/notmtmsrc/MMBoxArray.cpp --- /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 // for CMsvSession +#include // for KMsvRootIndexEntryId +#include // for KColumnListSeparator +#include // for CEditableText +#include // 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