messagingappbase/mce/src/MceMessageListContainer.cpp
branchRCL_3
changeset 60 7fdbb852d323
child 71 17302fa075e1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/mce/src/MceMessageListContainer.cpp	Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,1542 @@
+/*
+* 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:  
+*     List container user by message view.
+*     Derived from CMceMessageListContainer.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "mceui.h"
+#include "MceMessageListContainer.h"
+#include "MceMessageListbox.h"
+#include "MceMessageListView.h"
+#include "MceMessageListItemArray.h"
+#include "MceBitmapResolver.h"
+#include "MceCommands.hrh"
+#include "MceIds.hrh"
+#include <mce.rsg>
+#include "McePropertySubscriber.h"
+#include <PtiEngine.h>
+#include <AvkonInternalCRKeys.h> // KCRUidAvkon
+
+#include <msvids.h>
+#include <msvuids.h>      // KUidMsvMessageEntry
+
+#include <bldvariant.hrh>
+
+#include <csxhelp/mce.hlp.hrh>
+#include <csxhelp/mbxs.hlp.hrh>
+#include "MceIds.h"
+#include <MuiuMsvUiServiceUtilities.h>
+
+#include <commonphoneparser.h>
+#include <featmgr.h>
+
+// For Muiu split
+#include <muiumsvuiserviceutilitiesinternal.h>
+
+// CONSTANTS
+
+const TInt KMceTextBufferLength        = 10; // text buffer length
+const TInt KMceListContainerGranuality = 4;
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------
+// Constructor
+// ----------------------------------------------------
+CMceMessageListContainer::CMceMessageListContainer( 
+    CMceMessageListView& aParentView ) 
+    :
+    CMceMessageListContainerBase( aParentView )
+    {
+    }
+
+// ----------------------------------------------------
+// Destructor
+// ----------------------------------------------------
+CMceMessageListContainer::~CMceMessageListContainer()
+    {
+    delete iT9Interface;
+    delete iT9Timer;      
+    
+    if (iQwertyModeStatusSubscriber)
+        {
+        iQwertyModeStatusSubscriber->StopSubscribe();
+        }
+    iQwertyModeStatusProperty.Close();
+    delete iQwertyModeStatusSubscriber;
+    
+    if ( iListBox )
+        {
+        // icon array is deleted by CMceUi class
+        iListBox->ItemDrawer()->FormattedCellData()->SetIconArray( NULL );
+        }
+    
+    delete iListBox;
+    delete iListItems;
+    delete iSelectedEntries;
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::NewL
+// ----------------------------------------------------
+CMceMessageListContainer* CMceMessageListContainer::NewL(
+    const TRect& aRect,
+    CMsvSessionPtr aSession,
+    TMsvId aFolderId,
+    CMceBitmapResolver& aBitmapResolver,
+    CMceMessageListView& aParentView )
+    {
+    CMceMessageListContainer* self = new (ELeave) CMceMessageListContainer(
+        aParentView );
+    CleanupStack::PushL(self);
+    self->ConstructL( aRect, aSession, aBitmapResolver, aFolderId );
+    CleanupStack::Pop(); // self
+    return self;
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::ConstructL
+// ----------------------------------------------------
+void CMceMessageListContainer::ConstructL(
+    const TRect& aRect,
+    CMsvSessionPtr aSession,
+    CMceBitmapResolver& aBitmapResolver,
+    TMsvId aFolderId )
+    {
+    CreateWindowL();
+    SetRect( aRect );
+
+    iListBox = new (ELeave) CMceMessageListBox( *this );
+    if(aFolderId == KMsvGlobalOutBoxIndexEntryIdValue) 
+        iListBox->ConstructL( this, EAknListBoxStylusMarkableList|EAknListBoxItemSpecificMenuDisabled );
+    else
+    	iListBox->ConstructL( this, EAknListBoxStylusMarkableList );
+		
+    iListBox->ItemDrawer()->SetItemMarkReverse( ETrue );
+    iListBox->EnableMSKObserver( EFalse );
+
+    iListItems = CMceMessageListItemArray::NewL(
+        aSession, aFolderId, EMceListTypeMessage, aBitmapResolver );
+
+    iListBox->Model()->SetItemTextArray( iListItems );
+    iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+    
+    iListBox->SetListBoxObserver( &iOwningView );
+
+    iSelectedEntries = new (ELeave) CMsvEntrySelection;
+    
+    iListBox->CreateScrollBarFrameL( ETrue );
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+    iListBox->ItemDrawer()->FormattedCellData()
+        ->SetIconArray( aBitmapResolver.IconArray() );
+    
+    iPreviousInputMethod = EFalse;
+    
+    User::LeaveIfError( iQwertyModeStatusProperty.Attach( 
+        KCRUidAvkon, KAknQwertyInputModeActive ));
+  
+    HandleQwertyModeChangeNotification();
+    iQwertyModeStatusSubscriber = CMcePropertySubscriber::NewL(
+        TCallBack( QwertyModeChangeNotification, this ), iQwertyModeStatusProperty );
+
+    iQwertyModeStatusSubscriber->SubscribeL();
+    iDialerEvent = EFalse ;
+
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::MceListId
+// ----------------------------------------------------
+TInt CMceMessageListContainer::MceListId() const
+    {
+    return EMceListTypeTwoRow;
+    }
+    
+
+// ----------------------------------------------------
+// CMceMessageListContainer::CountComponentControls
+// ----------------------------------------------------
+TInt CMceMessageListContainer::CountComponentControls() const
+    {
+    return 1; // always only listbox
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::ComponentControl
+// ----------------------------------------------------
+CCoeControl* CMceMessageListContainer::ComponentControl(TInt /*aIndex*/) const
+    {
+    return iListBox;
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::SetFolderL
+// ----------------------------------------------------
+void CMceMessageListContainer::SetFolderL( TMsvId aFolderId )
+    {
+    if ( iListItems )
+        {
+        iListItems->SetFolderL( aFolderId );
+        }
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::Count
+// ----------------------------------------------------
+TInt CMceMessageListContainer::Count() const
+    {
+    return iListItems->MdcaCount();
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::MessageCount
+// ----------------------------------------------------
+TInt CMceMessageListContainer::MessageCount() const
+    {
+    return iListItems->MessageCount();
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::FolderCount
+// ----------------------------------------------------
+TInt CMceMessageListContainer::FolderCount() const
+    {
+    return iListItems->FolderCount();
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::CurrentFolderId
+// ----------------------------------------------------
+TMsvId CMceMessageListContainer::CurrentFolderId() const
+    {
+    TMsvId folderId = 0;
+    if ( iListItems )
+        {
+        folderId = iListItems->FolderId();
+        }
+    return folderId;
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::SetCurrentItemIdL
+// ----------------------------------------------------
+TBool CMceMessageListContainer::SetCurrentItemIdL( TMsvId aEntryId )
+    {
+    const TInt selectedIndex = ItemIndex( aEntryId );
+    if ( selectedIndex != KErrNotFound )
+        {
+        iAnchorItemIndex = selectedIndex; 
+        iAnchorItemId = aEntryId;
+        
+		//calulate the top item index
+		TInt topIndex = iListBox->View()->CalcNewTopItemIndexSoItemIsVisible( selectedIndex );
+		iListBox->SetTopItemIndex( topIndex );
+		iListBox->SetCurrentItemIndex( selectedIndex );
+		iListBox->UpdateScrollBarsL();
+		iListBox->DrawDeferred();
+//        iListBox->SetCurrentItemIndex( selectedIndex );
+        }
+    return (selectedIndex != KErrNotFound);
+        
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::RefreshListbox
+// ----------------------------------------------------
+void CMceMessageListContainer::RefreshListbox()
+    {
+    iListBox->DrawDeferred();     
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::ItemCountChangedL
+// ----------------------------------------------------
+void CMceMessageListContainer::ItemCountChangedL( TBool aItemsAdded )
+    {
+    if ( aItemsAdded )
+        {
+        iListBox->HandleItemAdditionL();     
+        }
+    else
+        {
+        iListBox->HandleItemRemovalL();
+        }
+    }
+    
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::FolderEntry
+// ----------------------------------------------------
+const TMsvEntry& CMceMessageListContainer::FolderEntry() const
+    {
+    return iListItems->FolderEntry();
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::CurrentItemIndex
+// ----------------------------------------------------
+TInt CMceMessageListContainer::CurrentItemIndex() const
+    {
+    return iListBox->CurrentItemIndex();
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::CurrentItemId
+// ----------------------------------------------------
+TMsvId CMceMessageListContainer::CurrentItemId() const
+    {
+    return iListItems->ItemId( CurrentItemIndex() );
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::CurrentItemListItem
+// ----------------------------------------------------
+TMceListItem CMceMessageListContainer::CurrentItemListItem() const
+    {
+    return iListItems->Item( CurrentItemIndex() );
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::CurrentItemSelectionL
+// ----------------------------------------------------
+CMsvEntrySelection* CMceMessageListContainer::CurrentItemSelectionL()
+    {
+    return iSelectedEntries->CopyL();
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::CurrentItemSelectionRefreshL
+// ----------------------------------------------------
+CMsvEntrySelection* CMceMessageListContainer::CurrentItemSelectionRefreshL()
+    {
+    MarkItemSelectionL();
+    return CurrentItemSelectionL();
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::CurrentItemSelectionCount
+// ----------------------------------------------------
+TInt CMceMessageListContainer::CurrentItemSelectionCount() const
+    {
+    if ( iListItems->MdcaCount() == 0 )
+        {
+        return 0;
+        }
+    return Max( 1, iListBox->View()->SelectionIndexes()->Count() );
+    }
+
+
+// ----------------------------------------------------
+// CMceOneRowMessageListContainer::SelectionCount
+// ----------------------------------------------------
+TInt CMceMessageListContainer::SelectionCount() const
+    {
+    return iListBox->View()->SelectionIndexes()->Count();
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::ClearSelection
+// ----------------------------------------------------
+void CMceMessageListContainer::ClearSelection()
+    {
+    iSelectedEntries->Reset();
+    iListBox->View()->ClearSelection();
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::ItemIndex
+// ----------------------------------------------------
+TInt CMceMessageListContainer::ItemIndex( TMsvId aId ) const
+    {
+    return iListItems->ItemIndex( aId );
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::MarkItemSelectionL
+// ----------------------------------------------------
+void CMceMessageListContainer::MarkItemSelectionL()
+    {
+    const CListBoxView::CSelectionIndexArray* selection =
+        iListBox->View()->SelectionIndexes();
+    TInt count = selection->Count();
+    iSelectedEntries->Reset();
+    if ( count != 0 )
+        {
+        for (TInt loop=0; loop < count; loop++ )
+            {
+            TMsvId id = iListItems->ItemId( (*selection)[loop] );
+            if ( id != KErrNotFound )
+                {
+                iSelectedEntries->AppendL( id );
+                }
+            }
+        }
+    else
+        {
+        TMsvId id = CurrentItemId();
+        if ( id != KErrNotFound )
+            {
+            // nothing in selection so add item under "cursor"
+            iSelectedEntries->AppendL( id );
+            }
+        }
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::AddItemToSelectionL
+// ----------------------------------------------------
+void CMceMessageListContainer::AddItemToSelectionL( TMsvId aEntryId )
+    {
+    if ( aEntryId > KMsvRootIndexEntryId )
+        {
+        iSelectedEntries->AppendL( aEntryId );
+        }
+    }
+// ----------------------------------------------------
+// CMceMessageListContainer::AddCurrentItemToSelectionL
+// ----------------------------------------------------
+void CMceMessageListContainer::AddCurrentItemToSelectionL()
+    {
+    iListBox->View()->SelectItemL( CurrentItemIndex() );
+    AddItemToSelectionL( CurrentItemId() );
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::RemoveItemFromSelection
+// ----------------------------------------------------
+void CMceMessageListContainer::RemoveItemFromSelection( TMsvId aEntryId )
+    {
+    TInt index = iSelectedEntries->Find( aEntryId );
+    if ( index >= 0 )
+        {
+        iSelectedEntries->Delete( index );
+        }
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::RemoveCurrentItemFromSelection
+// ----------------------------------------------------
+void CMceMessageListContainer::RemoveCurrentItemFromSelection()
+    {
+    iListBox->View()->DeselectItem( CurrentItemIndex() );
+    RemoveItemFromSelection( CurrentItemId() );
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::RefreshSelectionIndexesL
+// ----------------------------------------------------
+void CMceMessageListContainer::RefreshSelectionIndexesL( TBool aForceUpdate )
+    {
+    const CListBoxView::CSelectionIndexArray* selection = 
+        iListBox->View()->SelectionIndexes();
+
+    if ( selection->Count() > 0 || aForceUpdate )
+        {
+        CArrayFixFlat<TInt>* newSelection = new ( ELeave )
+            CArrayFixFlat<TInt>( KMceListContainerGranuality );
+        CleanupStack::PushL( newSelection );
+        const TInt count = iSelectedEntries->Count();
+        for ( TInt loop = count; loop >0; loop--)
+            {
+            TInt index = iListItems->ItemIndex( (*iSelectedEntries)[loop-1] );
+            if ( index > KErrNotFound )
+                {
+                newSelection->AppendL( index );
+                }
+            else
+                {
+                iSelectedEntries->Delete( loop-1 );
+                }
+            }
+        iListBox->SetSelectionIndexesL( newSelection );
+        CleanupStack::PopAndDestroy( newSelection );
+        }
+    
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::AddAllToSelectionL
+// ----------------------------------------------------
+void CMceMessageListContainer::AddAllToSelectionL()
+    {
+    CArrayFixFlat<TInt>* indexArray = new( ELeave ) CArrayFixFlat<TInt>(
+        KMceListContainerGranuality );
+    CleanupStack::PushL( indexArray );
+    iSelectedEntries->Reset();
+    const TInt count = iListItems->MdcaCount();
+    for ( TInt loop = 0; loop < count; loop++ )
+        {
+        TMsvId id = iListItems->ItemId( loop );
+        if ( !iListItems->IsItemFolder( id ) )
+            {
+            indexArray->AppendL( loop );
+            iSelectedEntries->AppendL( id );
+            }
+        }
+    iListBox->SetSelectionIndexesL( indexArray );
+    CleanupStack::PopAndDestroy( indexArray );
+    }
+    
+
+// ----------------------------------------------------
+// CMceMessageListContainer::MarkAllReadMessagesL
+// ----------------------------------------------------
+void CMceMessageListContainer::MarkAllReadMessagesL()
+    {
+    CArrayFixFlat<TInt>* msgIndexArray = new( ELeave ) CArrayFixFlat<TInt>( 4 );
+    CleanupStack::PushL( msgIndexArray );
+    iSelectedEntries->Reset();
+    iListBox->View()->ClearSelection();
+
+    const TInt count = iListItems->MdcaCount();
+    for ( TInt loop = 0; loop < count; loop++ )
+        {
+        TMsvEntry entry;
+        TMsvId entryId = iListItems->ItemId( loop );
+        if ( iListItems->GetEntry( entryId, entry ) == KErrNone )
+            {
+            if ( entry.iType == KUidMsvMessageEntry &&
+                 !entry.Unread() )
+                {
+                msgIndexArray->AppendL( loop );
+                }
+            }
+        }
+      
+    if ( msgIndexArray->Count() > 0 )
+        {
+        iListBox->SetSelectionIndexesL( msgIndexArray );        
+        iListBox->DrawDeferred();
+        }    
+    CleanupStack::PopAndDestroy( msgIndexArray );
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::IsItemSelected
+// ----------------------------------------------------
+TBool CMceMessageListContainer::IsItemSelected( TMsvId aItemId )
+    {
+    // Find selected items
+    const CListBoxView::CSelectionIndexArray* items =
+         iListBox->SelectionIndexes();
+    TInt itemIndex = iListItems->ItemIndex( aItemId );
+    TKeyArrayFix key(0, ECmpTInt);
+    TInt pos;
+
+    // Is item in selection array
+    if ( items->Find(itemIndex, key, pos) != KErrNone )
+        {
+        return EFalse;
+        }
+    else
+        {
+        return ETrue;        
+        }
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::SetMskL
+// ----------------------------------------------------
+void CMceMessageListContainer::SetMskL()
+    {
+    TInt currentItem = CurrentItemIndex();
+    TInt resourceId = currentItem == 0 ?
+        R_MCE_MSK_BUTTON_SELECT:R_MCE_MSK_BUTTON_OPEN;
+
+    if ( resourceId != iCurrMskResource )
+        {
+        iCurrMskResource = resourceId;
+        CEikButtonGroupContainer* cba;
+        cba = CEikButtonGroupContainer::Current();
+        const TInt KMSKPosition = 3;
+        cba->SetCommandL( KMSKPosition, iCurrMskResource );
+        cba->DrawDeferred();
+        }
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::FocusChanged
+// ----------------------------------------------------
+void CMceMessageListContainer::FocusChanged(TDrawNow /*aDrawNow*/)
+    {
+    if (iListBox)
+        {
+        iListBox->SetFocus(IsFocused());
+        }
+    }
+
+
+// ----------------------------------------------------
+//  CMceMessageListContainer::MarkedItemsCount()
+// ----------------------------------------------------
+TInt CMceMessageListContainer::MarkedItemsCount()
+    {
+    return iListBox->View()->SelectionIndexes()->Count();
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::OfferKeyEventL
+// ----------------------------------------------------
+TKeyResponse CMceMessageListContainer::OfferKeyEventL(
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType )
+    {
+
+    if ( !iT9Interface )
+        {        
+        iT9Interface = CPtiEngine::NewL();
+        if ( iInputMethodQwerty )
+            {
+            iT9Interface->SetInputMode( EPtiEngineQwerty );
+            iT9Interface->ActivateLanguageL( User::Language(), EPtiEngineQwerty );        
+            }
+        else
+            {
+            iT9Interface->SetInputMode( EPtiEngineMultitapping );
+        iT9Interface->ActivateLanguageL( User::Language(), EPtiEngineMultitapping );        
+            }
+        iPreviousInputMethod = iInputMethodQwerty;
+        }
+    else
+        {
+        if ( iInputMethodQwerty != iPreviousInputMethod )
+            {
+            if ( iInputMethodQwerty )
+                {
+                iT9Interface->SetInputMode( EPtiEngineQwerty );
+                iT9Interface->ActivateLanguageL( User::Language(), EPtiEngineQwerty );        
+                }
+            else
+                {
+                iT9Interface->SetInputMode( EPtiEngineMultitapping );
+                iT9Interface->ActivateLanguageL( User::Language(), EPtiEngineMultitapping );        
+                }
+            iPreviousInputMethod = iInputMethodQwerty;
+            }
+        }
+    
+    if ( !iT9Timer )
+        {
+        iT9Timer = CMceMessageListContainerKeyTimer::NewL( *iT9Interface );
+        }
+
+    if ( iListBox )
+        {
+  
+        if ( aType == EEventKeyUp )
+            {
+            iOwningView.SetMSKButtonL();
+            iDialerEvent = EFalse ; 
+            }
+
+        if ( aType == EEventKeyDown && iDialerEvent )
+            {
+            iDialerEvent = EFalse ;
+            }
+        if ( aType == EEventKey )
+            {
+            
+            iOwningView.CancelMailboxTimer();
+
+            if ( aKeyEvent.iCode == EKeyLeftArrow || aKeyEvent.iCode == EKeyRightArrow )
+                {
+                return EKeyWasNotConsumed;
+                }
+
+            if ( iOwningView.MenuBar()->ItemSpecificCommandsEnabled() && aKeyEvent.iCode == EKeyBackspace )
+                {
+                MarkItemSelectionL();
+                SetAnchorItemIdL( 
+                    CMceMessageListContainerBase::EMessageListOperationGeneral );
+                const TInt itemCount = CurrentItemSelectionCount();
+                if ( itemCount != 0 &&
+                     ( itemCount != 1 ||
+                       CurrentItemId() != KMceTemplatesEntryIdValue )
+                   )
+                    {
+                    if ( !iListItems->DeleteDiscard( CurrentItemId() ) )
+                        {
+                        //if outbox and mms/sms connected, not delete
+                        iOwningView.HandleCommandL( EMceCmdDelete );
+                        }
+                    }
+                return EKeyWasConsumed;
+                }
+            else if ( aKeyEvent.iCode == EKeyOK ||  aKeyEvent.iCode == EKeyEnter )
+                {
+                if ( aKeyEvent.iModifiers & EModifierShift ||
+                       aKeyEvent.iModifiers & EModifierCtrl )
+                    {
+                    if ( iListItems->FolderId() != KMsvGlobalOutBoxIndexEntryIdValue &&
+                         IsCurrentItemFolder() )
+                        {
+                        return EKeyWasNotConsumed;
+                        }
+                    }
+                else
+                    {
+                    iOwningView.SetHideExitCommand( ETrue );
+                    if ( iListItems->FolderId() == KMsvGlobalOutBoxIndexEntryIdValue ||
+                        iOwningView.SyncMlOutboxInbox( KMsvGlobalOutBoxIndexEntryId ) ||
+                        CurrentItemSelectionCount() == 0 ||
+                        iOwningView.CheckMMSNotificationOpenL() )
+                        {
+                        if(iListItems->FolderId() == KMsvGlobalOutBoxIndexEntryIdValue)
+                            {
+                            iOwningView.SetContextCommandFlag(ETrue);
+                            }
+                        // list is empty, open options menu
+                        iOwningView.ProcessCommandL( EAknSoftkeyOptions );
+                        return EKeyWasConsumed;
+                        }
+                    }
+                }
+
+            else if ( aKeyEvent.iCode == EKeyYes )
+                {
+                if (!iDialerEvent && aKeyEvent.iRepeats == 0) 
+	                {
+                // send key has been pressed in Inbox or in Documents folder
+                TMsvId folderId = iListItems->FolderId();
+                if ( folderId != KMsvDraftEntryId &&
+                    folderId != KMsvGlobalOutBoxIndexEntryId &&
+                    folderId != KMsvSentEntryId &&       
+                    folderId != KMceTemplatesEntryId                   
+                    && ( CurrentItemSelectionCount() == 1 )  )
+                    {       
+                    if ( !( iListItems->IsFolderRemote() ) )
+                        {
+                        TMsvId id = CurrentItemId();
+                        TBool validNumber = EFalse;
+                        TBuf<KMceVisibleTextLength> recipientstring;
+                        TPhCltTelephoneNumber number;
+                        CMceUi* mceUi = static_cast<CMceUi*>( iEikonEnv->AppUi() );
+                        validNumber = MceUtils::ValidPhoneNumberL( id, mceUi->Session(), number, &recipientstring );
+                        if (KErrNotFound != number.Match( recipientstring ))
+                            {
+                            recipientstring = KNullDesC;
+                            }
+
+                        //
+                        // Callback number is supported in CDMA mode. If there isn't a phone
+                        // book match for the sender, it gets confusing to display the sender's
+                        // number (contained in recipientstring) and the callback number
+                        // (contained in the number field) via CallToSenderQueryL.
+                        // Therefore, if the recipientstring differs from the phone number
+                        // to be used to call the sender and recipientstring is also a phone
+                        // number, we won't display recipientstring when running in CDMA mode.
+                        //
+                        if ( FeatureManager::FeatureSupported( KFeatureIdProtocolCdma ) )
+                            {
+                            if ( CommonPhoneParser::IsValidPhoneNumber( recipientstring, CommonPhoneParser::ESMSNumber ) )
+                                {
+                                recipientstring = KNullDesC;
+                                }
+                            }
+
+                        if ( validNumber )
+                            {                        
+	                            iAvkonAppUi->SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | CAknAppUiBase::EDisableSendKeyLong ); 
+                            MsvUiServiceUtilitiesInternal::CallToSenderQueryL( number, recipientstring, EFalse );
+	                            iAvkonAppUi->SetKeyEventFlags( 0x00 ); 
+                            }
+                        }
+                    else   //(iiListItems->IsFolderRemote()) Enable Sendkey in Mail List
+                        {
+                        iAvkonAppUi->SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | CAknAppUiBase::EDisableSendKeyLong );
+                        iOwningView.HandleSendkeyInMailboxL( CurrentItemId() );  
+                        iAvkonAppUi->SetKeyEventFlags( 0x00 );
+                        }
+                    }           
+                SetAnchorItemIdL( 
+                    CMceMessageListContainerBase::EMessageListOperationGeneral );
+	                }
+                return EKeyWasConsumed;
+                }           
+
+            else if ( IsValidSearchKey( aKeyEvent ) )
+                {
+                if ( !( FeatureManager::FeatureSupported(KFeatureIdJapanese) ||
+		    FeatureManager::FeatureSupported(KFeatureIdChinese) )  )
+                    {                
+                    HandleShortcutForSearchL( aKeyEvent );
+                    }   
+                }
+            else if (  aKeyEvent.iCode == (TUint)EPtiKeyStar )
+                {              
+                if ( HasHandleStarKeyDoneL() ) // * key
+                    {
+                    return EKeyWasConsumed;
+                    }
+                }  
+            }
+
+        if ( iListItems->MdcaCount() > 0 && iListBox->View()->SelectionIndexes()->Count() == 0 )
+        	{
+        	iOwningView.SetHideExitCommand( EFalse );
+        	}
+        TKeyResponse ret = iListBox->OfferKeyEventL(aKeyEvent, aType);
+        iOwningView.SetCurrentItemId();
+        SetAnchorItemIdL( 
+            CMceMessageListContainerBase::EMessageListOperationGeneral );
+        if ( ( aKeyEvent.iModifiers & EModifierShift ||
+              aKeyEvent.iModifiers & EModifierCtrl ) &&
+             ( aKeyEvent.iCode == EKeyOK || 
+               aKeyEvent.iCode == EKeyEnter ||
+               aKeyEvent.iCode == EKeyUpArrow ||
+               aKeyEvent.iCode == EKeyDownArrow ) )
+            {
+            MarkItemSelectionL();
+            iOwningView.SetMSKButtonL();
+            }
+        else if ( iOwningView.IsMSKMailBox() &&
+             ( aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow ) )
+            {
+            iOwningView.SetMSKButtonL();                    
+            }
+        return ret;
+        }
+    else
+        {
+        return EKeyWasNotConsumed;
+        }
+
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::IsCurrentItemFolder
+// ----------------------------------------------------
+TBool CMceMessageListContainer::IsCurrentItemFolder() const
+    {
+    TBool isCurrentFolder = EFalse;
+    const TMsvId id = CurrentItemId();
+    if ( id != KErrNotFound )
+        {
+        isCurrentFolder = iListItems->IsItemFolder( id );
+        }
+    return isCurrentFolder;
+    }
+    
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::IsCurrentItemFolder
+// ----------------------------------------------------
+TBool CMceMessageListContainer::IsItemFolder( TMsvId aItemId ) const
+    {
+    return iListItems->IsItemFolder( aItemId );
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::IsItemFolder
+// ----------------------------------------------------
+TBool CMceMessageListContainer::IsItemFolder(TInt aIndex) const
+    {
+    TBool isCurrentFolder = EFalse;
+    const TMsvId id = iListItems->ItemId( aIndex );
+    if ( id != KErrNotFound )
+        {
+        isCurrentFolder = iListItems->IsItemFolder( id );
+        }
+    return isCurrentFolder;
+    }
+
+
+// ----------------------------------------------------
+// CMceOneRowMessageListContainer::IsItemRemote
+// ----------------------------------------------------
+TBool CMceMessageListContainer::IsItemRemote( TMsvId aItemId ) const
+    {
+    return iListItems->IsItemRemote( aItemId );
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::IsOutboxOpened
+// ----------------------------------------------------
+TBool CMceMessageListContainer::IsOutboxOpened() const
+    {
+    return IsOpenedFolder( KMsvGlobalOutBoxIndexEntryIdValue );
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+TBool CMceMessageListContainer::IsOpenedFolder( TMsvId aFolderId ) const
+    {
+    return ( iListItems->FolderId() == aFolderId );
+    }
+    
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::DisplayOptionsMenuFromSelectionKey
+// ----------------------------------------------------
+TBool CMceMessageListContainer::DisplayOptionsMenuFromSelectionKey() const
+    {
+    return ( iListItems->MdcaCount() == 0 || iListBox->View()->SelectionIndexes()->Count() );
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::GetHelpContext
+// returns helpcontext as aContext
+// ----------------------------------------------------
+void CMceMessageListContainer::GetHelpContext
+        (TCoeHelpContext& aContext) const
+    {
+    TMsvId folderId = iListItems->FolderId();
+    aContext.iMajor = KMceApplicationUid;
+
+    TBool isRemoteFolder = iListItems->IsFolderRemote();
+
+    /*if ( iOwningView.SyncMlOutboxInbox( KMsvGlobalInBoxIndexEntryId ) )
+        {
+        aContext.iContext = KMCE_HLP_MESS_SYNCI;
+        }
+    else if ( iOwningView.SyncMlOutboxInbox( KMsvGlobalOutBoxIndexEntryId ) )
+        {
+        aContext.iContext = KMCE_HLP_MESS_SYNCO;
+        }
+
+    else if ( iOwningView.IsSyncMl() )
+        {
+        aContext.iContext = KMCE_HLP_MESS_SYNC;
+        }
+
+    else*/
+    if ( folderId == KMsvDraftEntryId )
+        {
+        aContext.iContext = KMCE_HLP_DRAFTS;
+        }
+    else if ( folderId == KMsvGlobalOutBoxIndexEntryId )
+        {
+        aContext.iContext = KMCE_HLP_OUTBOX;
+        }
+    else if ( folderId == KMsvGlobalInBoxIndexEntryId )
+        {
+        aContext.iContext = KMCE_HLP_INBOX;
+        }
+    else if ( folderId == KMsvSentEntryId )
+        {
+        aContext.iContext = KMCE_HLP_SENT_ITEMS;
+        }
+    else if ( folderId == KMceDocumentsEntryId )
+        {
+        aContext.iContext = KMCE_HLP_DOCUMENTS;
+        }
+    else if ( folderId == KMceTemplatesEntryId )
+        {
+        aContext.iContext = KMCE_HLP_TEMPLATES;
+        }
+    else if ( !isRemoteFolder )
+        {
+        // own folder
+        aContext.iContext = KMCE_HLP_FOLDER;
+        }
+    else
+        {
+        // remote account
+        TBool isConnected = iListItems->IsConnected();
+        if ( isConnected )
+            {
+            aContext.iContext = KMCE_HLP_MAILBOX_ONLINE;
+            }
+        else
+            {
+            aContext.iContext = KMCE_HLP_MAILBOX_OFFLINE;
+            }
+        }
+
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::SyncMlOutboxOpened
+// ----------------------------------------------------
+TBool CMceMessageListContainer::SyncMlOutboxOpened() const
+    {
+    return ( iOwningView.SyncMlOutboxInbox( KMsvGlobalOutBoxIndexEntryId ) );
+    }
+
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::HandleResourceChange
+// ----------------------------------------------------
+void CMceMessageListContainer::HandleResourceChange( TInt aType )
+    {    
+    CCoeControl::HandleResourceChange( aType );
+    if ( iListBox && aType == KEikDynamicLayoutVariantSwitch )        
+        {
+        
+	    iListBox->ItemDrawer()->SetItemMarkReverse( ETrue );
+        SetRect( iOwningView.ClientRect() );
+        }        
+    }
+
+
+// ----------------------------------------------------
+// CMceMessageListContainer::SizeChanged
+// ----------------------------------------------------
+void CMceMessageListContainer::SizeChanged()
+    {
+    if (iListBox)
+        {
+        iListBox->SetRect( Rect() );
+	    iListBox->ItemDrawer()->SetItemMarkReverse( ETrue );
+        }
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::ProcessCommandL
+// ----------------------------------------------------
+void CMceMessageListContainer::ProcessCommandL(TInt aCommand)
+    {
+    if ( aCommand == EAknSoftkeyShiftMSK )
+        {
+        // Pass the MSK marking command as a key event to controls
+        const CListBoxView::CSelectionIndexArray* items =
+            iListBox->SelectionIndexes();
+        
+        // check what state item under "cursor" is        
+        TKeyArrayFix key(0, ECmpTInt);
+        TInt pos;
+        if ( !items->Find(CurrentItemIndex(), key, pos))
+            {
+            RemoveCurrentItemFromSelection();
+            }
+        else
+            {
+            AddCurrentItemToSelectionL();
+            }
+        iOwningView.SetMSKButtonL();            
+        }
+    }
+    
+ 
+// ----------------------------------------------------
+// CMceMessageListContainer::StateCanBeChangedByStarKeyL() const
+// Exam if it is the situation that * key can change message state
+// Returns ETrue if it can
+// Public
+// ----------------------------------------------------  
+TBool CMceMessageListContainer::StateCanBeChangedByStarKeyL() const
+    {
+    TMsvId folderId = iListItems->FolderId();
+    TBool isRemoteFolder = iListItems->IsFolderRemote();
+    
+    if ( ( iListItems->MdcaCount() > 0 && 
+        iListBox->View()->SelectionIndexes()->Count() == 0 && 
+        !IsCurrentItemFolder() ) && 
+        ( folderId == KMsvGlobalInBoxIndexEntryId ||  //Inbox
+        folderId == KMceDocumentsEntryId ||     //Documents
+        iListItems->GetParentFolderId() == KMceDocumentsEntryId || //Subfolder of Documents
+        isRemoteFolder ) )  // Mailbox & SyncMl
+        {
+        if ( iOwningView.IsSyncMl() )
+            {            
+            return( iOwningView.ListContainer()->FolderEntry().iRelatedId  == KMsvGlobalInBoxIndexEntryId );//Inbox of SyncMail     
+            }            
+        return ETrue;
+        }
+     else 
+        {                   
+        return EFalse;           
+        }                
+    }
+ 
+// TODO: maybe worth of adding new function for these listbox->ItemDrawer()->SetItemMarkXXX function?
+//      MarkItemSelectionL(); does selection but not mark
+//      AddCurrentItemToSelectionL(); selects and marks
+
+
+//-------------------------------------------------------------------------------
+// CMceMessageListContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+//-------------------------------------------------------------------------------
+void CMceMessageListContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+    {
+    if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
+        {
+        iOwningView.SetMSKButtonL();
+        iOwningView.SetCurrentItemId();
+        if ( ( iOwningView.IsMSKMailBox() || 
+        		iListItems->FolderId() == KMsvDraftEntryId ) && 
+        		iListBox->CurrentItemIndex() < 0 ) 
+            {
+            iOwningView.ProcessCommandL( EAknSoftkeyContextOptions );
+            }
+        }
+    if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+        {
+        if ( iOwningView.IsMSKMailBox() )
+            {
+            iOwningView.CancelMailboxTimer();
+            }
+        }
+    iListBox->HandlePointerEventL( aPointerEvent );
+    }
+
+
+//-------------------------------------------------------------------------------
+//CMceMessageListContainer::IsValidSearchKey(const TKeyEvent& aKeyEvent)
+//-------------------------------------------------------------------------------
+TBool CMceMessageListContainer::IsValidSearchKey( const TKeyEvent& aKeyEvent )
+    {
+    TBool response = EFalse;
+    if ( iInputMethodQwerty )
+        {
+        response = ETrue;
+        }
+    if ((( aKeyEvent.iCode >= (TUint)EPtiKey0 && 
+           aKeyEvent.iCode <= (TUint)EPtiKey9 ) ) 
+           && !aKeyEvent.iRepeats )
+        {
+        response = ETrue;
+        }
+    if ( aKeyEvent.iCode == EKeyUpArrow || 
+    	 aKeyEvent.iCode == EKeyDownArrow )
+    	{
+    	response = EFalse;
+    	}
+    return response;
+    }
+
+
+//-------------------------------------------------------------------------------
+//CMceMessageListContainer::HandleQwertyModeChangeNotification()
+//-------------------------------------------------------------------------------
+TInt CMceMessageListContainer::HandleQwertyModeChangeNotification()
+    {
+    TInt err = iQwertyModeStatusProperty.Get( iInputMethodQwerty );
+    if ( err )
+        {
+        // Set defaut inputmethod. 0 = No Qwerty -> EPtiEngineMultitapping
+        iInputMethodQwerty = 0; 
+        }
+    return err;        
+    }
+
+
+//-------------------------------------------------------------------------------
+//CMceMessageListContainer::QwertyModeChangeNotification(TAny* aObj)
+//-------------------------------------------------------------------------------
+TInt CMceMessageListContainer::QwertyModeChangeNotification( TAny* aObj )
+    {
+    TInt err = KErrArgument;
+    if ( aObj != NULL )
+        {
+        err = static_cast<CMceMessageListContainer*>(aObj)->HandleQwertyModeChangeNotification();
+        }
+    return err;        
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+void CMceMessageListContainer::SetSortTypeL( TInt aSortType, TBool aOrdering )
+    {
+    iListItems->SetOrderingL( aSortType, aOrdering );
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+void CMceMessageListContainer::SetMtmUiDataRegistry( MMtmUiDataRegistryObserver* aRegistryObserver )
+    {
+    iListItems->SetRegistryObserver( aRegistryObserver );
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+TMsvId CMceMessageListContainer::FindEntry( const TDesC& aMatchString ) const
+    {
+    TMsvId foundEntry = KErrNotFound;
+    TInt index = iListItems->FindEntryIndex( aMatchString );
+    if ( index >= 0 )
+        {
+        foundEntry = iListItems->ItemId( index );
+        }
+    return foundEntry;
+    
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+TBool CMceMessageListContainer::FindFirstUnreadMessageL( TMsvId& aEntryId ) const
+    {
+    return iListItems->FindFirstUnreadMessageL( aEntryId );
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+void CMceMessageListContainer::ResetCurrentItemL()
+    {
+    if ( iListItems->MdcaCount() )
+        {
+		//calulate the top item index
+		TInt topIndex = iListBox->View()->CalcNewTopItemIndexSoItemIsVisible( 0 );
+		iListBox->SetTopItemIndex( topIndex );
+		iListBox->SetCurrentItemIndex( 0 );
+        }
+    iListBox->UpdateScrollBarsL();
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+CMceMessageListContainerBase::TMessageListItemType CMceMessageListContainer::CurrentItemType() const
+    {
+    if ( iListItems->MdcaCount() )
+        {
+        return CMceMessageListContainerBase::EMessageListItemMsvItem;
+        }
+    return CMceMessageListContainerBase::EMessageListItemUnknown;
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+void CMceMessageListContainer::SetListEmptyTextL(const TDesC& aText)
+    {
+    iListBox->View()->SetListEmptyTextL( aText );
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+void CMceMessageListContainer::SetAnchorItemIdL( 
+    TMessageListOperationType aOperationType )  
+    {
+    if ( iListItems->MdcaCount() == 0 )
+        {
+        iAnchorItemId = KErrNotFound;
+        iAnchorItemIndex = KErrNotFound;
+        iLastOperationType = aOperationType;
+        return;
+        }
+        
+    switch ( aOperationType )
+        {
+        case EMessageListOperationGeneral:
+            iAnchorItemIndex = iListBox->CurrentItemIndex(); 
+            iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
+        break;
+        case EMessageListOperationConnect:
+            iAnchorItemIndex = iListBox->CurrentItemIndex(); 
+            iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
+        break;
+        case EMessageListOperationFetchSelected:
+            // find first from the marked messages list...? What if that is deleted when connected???
+            if ( iSelectedEntries->Count() )
+                {
+                // pick first one
+                iAnchorItemId = (*iSelectedEntries)[0];
+                iAnchorItemIndex = iListItems->ItemIndex( iAnchorItemId );
+                }
+            else
+                {
+                iAnchorItemIndex = iListBox->CurrentItemIndex(); 
+                iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
+                }
+        break;
+        case EMessageListOperationFetchNew:
+            iAnchorItemIndex = iListBox->CurrentItemIndex(); 
+            iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
+        break;
+        case EMessageListOperationDelete:
+            iAnchorItemIndex = iListBox->CurrentItemIndex(); 
+            iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
+        break;
+        case EMessageListOperationCompleted:
+            HandleOperationCompletedL();
+        break;
+        default:
+        // assert debug ?
+        break;
+        }
+        
+#ifdef _DEBUG
+    RDebug::Print(_L("CMceMessageListContainer1: iAnchorItemId 0x%x, iAnchorItemIndex %d"), iAnchorItemId, iAnchorItemIndex);
+#endif    
+    if ( aOperationType != EMessageListOperationCompleted )        
+        {
+        iLastOperationType = aOperationType;
+        }
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+void CMceMessageListContainer::HandleOperationCompletedL()
+    {
+    if ( /*iLastOperationType == EMessageListOperationConnect &&*/
+         iAnchorItemIndex == KErrNotFound )
+        {
+        // set focus to first one...
+        if ( iListItems->MdcaCount() )
+            {
+            iListBox->SetCurrentItemIndex( 0 );
+            iAnchorItemIndex = 0;
+            iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
+            }
+        RefreshListbox();
+        }
+    SetAnchorItemIdL( EMessageListOperationGeneral );
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::
+// ----------------------------------------------------
+void CMceMessageListContainer::HandleMsvSessionEventL( 
+    MMsvSessionObserver::TMsvSessionEvent aEvent,
+    CMsvEntrySelection& aSelection,
+    TBool aDraw )
+    {
+#ifdef _DEBUG
+    RDebug::Print(_L("CMceMessageListContainer2: iAnchorItemId 0x%x, iAnchorItemIndex %d"), iAnchorItemId, iAnchorItemIndex);
+#endif
+    switch ( aEvent )
+        {
+        case MMsvSessionObserver::EMsvEntriesDeleted:
+            {
+/*            if ( iOwningView.IsMSKMailBox() ) // focus setting only for email
+                {
+                }
+            else*/
+                {
+                ItemCountChangedL( EFalse ); 
+                TInt selectedIndex = ItemIndex( iAnchorItemId );
+                if ( selectedIndex == KErrNotFound )
+                    {
+                    // we could not find anchor item, lets try to set new focus using index
+                    
+                    if ( iAnchorItemIndex > iListItems->MdcaCount() - 1 )
+                        {
+                        iAnchorItemIndex = iListItems->MdcaCount() - 1;
+                        }
+                    iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
+                    }
+                if ( aDraw )
+                    {
+                    SetCurrentItemIdL( iAnchorItemId );
+                    }
+                iAnchorItemIndex = iListBox->CurrentItemIndex();
+                }
+            if ( aDraw )
+                {
+                RefreshListbox();
+                }
+            }
+        break;
+        case MMsvSessionObserver::EMsvEntriesCreated:    
+        case MMsvSessionObserver::EMsvEntriesChanged:
+            {
+            
+            ItemCountChangedL( ETrue );
+            
+            if ( iLastOperationType != EMessageListOperationConnect &&
+                 iAnchorItemId != KErrNotFound )
+                {
+                if ( iOwningView.IsMSKMailBox() ) // focus setting only for email
+                    {
+                    TInt selectedIndex = ItemIndex( iAnchorItemId );
+                    if ( selectedIndex == KErrNotFound )
+                        {
+                        // we could not find anchor item, lets try to set new focus using index
+                        if ( iAnchorItemIndex > iListItems->MdcaCount() - 1 )
+                            {
+                            iAnchorItemIndex = iListItems->MdcaCount() - 1;
+                            }
+                        iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
+                        }
+                    if (selectedIndex != iListBox->CurrentItemIndex() && 
+                  		aEvent == MMsvSessionObserver::EMsvEntriesChanged )
+	                    {
+	                    iAnchorItemIndex = iListBox->CurrentItemIndex();
+	                    iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
+	                    }
+                    if(aEvent==MMsvSessionObserver::EMsvEntriesCreated)
+                        {
+                               iAnchorItemIndex=0;
+                               iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
+                        }
+                    if ( aDraw )
+                        {
+                        SetCurrentItemIdL( iAnchorItemId );
+                        }
+                    iAnchorItemIndex = iListBox->CurrentItemIndex();
+    #ifdef _DEBUG
+                    RDebug::Print(_L("CMceMessageListContainer3: iAnchorItemId 0x%x, iAnchorItemIndex %d"), iAnchorItemId, iAnchorItemIndex);
+    #endif
+                    //SetCurrentItemIdL( iAnchorItemId );
+                    }
+                else
+                    {
+                    if ( aSelection.Count() )
+                        {
+                        // is this enough?
+                        SetCurrentItemIdL( aSelection.At(0) );
+                        }
+                    }
+                }
+            }
+        
+        
+        break;
+        case MMsvSessionObserver::EMsvEntriesMoved:
+        break;
+        default:
+        break;
+        };
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::OptionsCommandSupported
+// ----------------------------------------------------
+TUint CMceMessageListContainer::OptionsCommandSupported() const
+    {
+    return TMessageListCommandNone;
+    }
+    
+// ----------------------------------------------------
+// CMceMessageListContainer::HandleOptionsCommandL
+// ----------------------------------------------------
+void CMceMessageListContainer::HandleOptionsCommandL( TInt /*aCommand*/ )
+    {
+    // Should we use assert debug here?
+    }
+
+// ----------------------------------------------------
+// CMceMessageListContainer::DateTimeFormatChangedL
+// ----------------------------------------------------
+void CMceMessageListContainer::DateTimeFormatChangedL( TInt /*aChangeFlag*/ )
+    {
+    RefreshListbox();
+    }
+
+// ---------------------------------------------------------------------------
+// CMceMessageListContainer::SetMskL
+// ---------------------------------------------------------------------------
+//
+TInt CMceMessageListContainer::SetSpecialMskL()
+    {
+    return NULL;
+    }
+
+//-------------------------------------------------------------------------------
+//CMceMessageListContainer::HandleShortcutForSearch( const TKeyEvent& aKeyEvent )
+//-------------------------------------------------------------------------------
+void CMceMessageListContainer::HandleShortcutForSearchL( const TKeyEvent& aKeyEvent )
+    {
+   // in remote mailbox key has been pressed, find item if sorted
+    // by subject or sender
+    TInt Len = 0;
+    TBuf<KMceTextBufferLength> text;
+    text.Zero();
+    if ( iT9Interface->LastEnteredKey() != ( TInt ) aKeyEvent.iScanCode )
+        {                    
+        iT9Interface->ClearCurrentWord();
+        }      
+    iT9Interface->AppendKeyPress( (TPtiKey)aKeyEvent.iScanCode );                
+    Len = iT9Interface->CurrentWord().Length(); 
+    if ( Len <  KMceTextBufferLength )
+        {
+        text = iT9Interface->CurrentWord();
+        }
+    else
+        {
+        text = iT9Interface->CurrentWord().Left(KMceTextBufferLength);
+        }
+    
+    iOwningView.FindAndSelectEntryL( text );
+    iT9Timer->Start();       
+    }
+
+//-------------------------------------------------------------------------------
+//CMceMessageListContainer::HasHandleStarKeyDoneL()
+//------------------------------------------------------------------------------- 
+TBool CMceMessageListContainer::HasHandleStarKeyDoneL()
+    {
+    TBool starkeyIsHandled = EFalse;
+    if ( StateCanBeChangedByStarKeyL() )
+        {
+        if ( IsSortByDate() )
+            {
+            MarkReadUnreadWithStarKeyL();
+            }
+        else
+            {
+            // if sort by anything else other than by Date, handle focus change
+            iListBox->SetCurrentItemIndex( 0 );
+            iListBox->DrawDeferred();            
+            }
+        starkeyIsHandled = ETrue;
+        } 
+    return starkeyIsHandled;
+    }
+    
+//-------------------------------------------------------------------------------
+//CMceMessageListContainer::MarkReadUnreadWithStarKeyL()
+//------------------------------------------------------------------------------- 
+void CMceMessageListContainer::MarkReadUnreadWithStarKeyL()
+    {             
+    MarkItemSelectionL();
+    if( iOwningView.IsItemUnread( CurrentItemId() ) ) 
+        {
+        iOwningView.HandleCommandL( EMceCmdMarkAsRead );
+        }
+    else
+        {
+        iOwningView.HandleCommandL( EMceCmdMarkAsUnread );
+        }   
+    }
+
+//-------------------------------------------------------------------------------
+//CMceMessageListContainer::IsSortByDate()
+//------------------------------------------------------------------------------- 
+TBool CMceMessageListContainer::IsSortByDate()
+    {                               
+    TMsvSelectionOrdering ordering = iListItems->SortType();
+    return ( ( ordering.Sorting() == EMsvSortByDateReverse) || ( ordering.Sorting() == EMsvSortByDate ) );
+    }
+
+// ---------------------------------------------------------------------------
+// CMceMessageListContainer::SetContainerFlag
+// ---------------------------------------------------------------------------
+void CMceMessageListContainer::SetContainerFlag( TMceContainerFlags /*aFlag*/, TBool /*aState*/ )
+    {
+    }
+
+void CMceMessageListContainer::UpdateIconArrayL()
+    {
+    // do nothing for two row list.
+    }
+
+//  End of File