mobilemessaging/mmsui/notmtmsrc/MMBoxArray.cpp
changeset 0 72b543305e3a
--- /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