messagingappbase/mce/src/MceMessageListView.cpp
author hgs
Thu, 04 Nov 2010 02:02:03 +0530
changeset 81 2043ea884c04
parent 79 2981cb3aa489
permissions -rw-r--r--
201044_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  
hgs
parents:
diff changeset
    15
*     This view is created when user opens folder.
hgs
parents:
diff changeset
    16
*
hgs
parents:
diff changeset
    17
*/
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// INCLUDE FILES
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include <eikmenub.h>       // menu stuff
hgs
parents:
diff changeset
    25
#include <apgcli.h>         // RApaLsSession
hgs
parents:
diff changeset
    26
#include <msvuids.h>
hgs
parents:
diff changeset
    27
#include <msvids.h>
hgs
parents:
diff changeset
    28
#include <StringLoader.h>   // StringLoader
hgs
parents:
diff changeset
    29
#include <aknlists.h>
hgs
parents:
diff changeset
    30
#include <akntitle.h>       // CAknTitlePane
hgs
parents:
diff changeset
    31
#include <aknclearer.h>     // CAknLocalScreenClearer
hgs
parents:
diff changeset
    32
#include <NpdApi.h>         // CNotepadApi
hgs
parents:
diff changeset
    33
#include <SenduiMtmUids.h>  // mtm uids
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
#include "MceMessageListContainer.h"
hgs
parents:
diff changeset
    36
#include "MceOneRowMessageListContainer.h"
hgs
parents:
diff changeset
    37
#include "MceMessageListbox.h"
hgs
parents:
diff changeset
    38
#include "MceMessageListView.h"
hgs
parents:
diff changeset
    39
#include "MceMainViewListView.h"
hgs
parents:
diff changeset
    40
#include "MceSessionHolder.h"
hgs
parents:
diff changeset
    41
#include "MceBitmapResolver.h"
hgs
parents:
diff changeset
    42
#include "mceui.h"
hgs
parents:
diff changeset
    43
#include "MceCommands.hrh"
hgs
parents:
diff changeset
    44
#include <mce.rsg>
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
#include <CommonContentPolicy.h> // banned mime types
hgs
parents:
diff changeset
    47
#include <MsgBioUids.h>     // KMsgBioUidPictureMsg
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
#include <bldvariant.hrh>
hgs
parents:
diff changeset
    50
#include <featmgr.h>
hgs
parents:
diff changeset
    51
#include <mmsconst.h>
hgs
parents:
diff changeset
    52
#include <MtmExtendedCapabilities.hrh>
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
// MMS.Content.Upload
hgs
parents:
diff changeset
    55
#include <SenduiMtmUids.h>
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
#include <centralrepository.h>
hgs
parents:
diff changeset
    58
#include <messaginginternalcrkeys.h>
hgs
parents:
diff changeset
    59
#include <MessagingDomainCRKeys.h>
hgs
parents:
diff changeset
    60
#include <messagingvariant.hrh>
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
#include <AiwServiceHandler.h>
hgs
parents:
diff changeset
    63
#include <AiwGenericParam.hrh>
hgs
parents:
diff changeset
    64
#include <AiwVariant.h>
hgs
parents:
diff changeset
    65
#include <msvuids.h>
hgs
parents:
diff changeset
    66
#include <SendUiConsts.h>
hgs
parents:
diff changeset
    67
#include <msvstd.h>
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
#include <akntoolbar.h>             //CAknToolbar
hgs
parents:
diff changeset
    70
#include <eikcolib.h>               //CEikAppUiFactory
hgs
parents:
diff changeset
    71
#include <MNcnInternalNotification.h>
hgs
parents:
diff changeset
    72
#include <NcnNotificationDefs.h>
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
class CMsvStore;
hgs
parents:
diff changeset
    75
#include <muiucontactservice.h> //CMuiuContactService
hgs
parents:
diff changeset
    76
#include <miuthdr.h>            // CImHeader
hgs
parents:
diff changeset
    77
#include <msvapi.h>             //TMsvEntry::ReadStoreL
hgs
parents:
diff changeset
    78
#include <miutpars.h>           //TImMessageField::GetValidInternetEmailAddressFromString(),
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
#include <bacntf.h> // CEnvironmentChangeNotifier
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
#include <AknDlgShut.h>         // for AknDialogShutter
hgs
parents:
diff changeset
    84
#include <messaginginternalpskeys.h> 
hgs
parents:
diff changeset
    85
// CONSTANTS
hgs
parents:
diff changeset
    86
const TInt KMceArraysGranularity = 4;
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
const TInt KMceOnlyInboxInImap = 1;
hgs
parents:
diff changeset
    89
const TInt KMSKPosition = 3;
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
// Mail technology type
hgs
parents:
diff changeset
    92
const TUid KMailTechnologyTypeUid = { 0x10001671 };
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
// These are for opening the viewer in inbox. 
hgs
parents:
diff changeset
    95
// try to open viewer immediately if there is no other viewer is open
hgs
parents:
diff changeset
    96
const TInt KMceLaunchViewerStartTime = 1; 
hgs
parents:
diff changeset
    97
//0.3 sec delay is taken to ensure previously launched viewer is closed as to avoid the crashes and KErrCancel/KErrInUse errors due to launching of new viewer when currently running 
hgs
parents:
diff changeset
    98
//viewer is still in the process of exiting
hgs
parents:
diff changeset
    99
const TInt KMceLaunchViewerStartTimeWhenEditorOpen = 300000; 
hgs
parents:
diff changeset
   100
const TInt KMceLaunchViewerRetryTime = 500000; // wait 0.5 secs for the next trial
hgs
parents:
diff changeset
   101
const TInt KMceLaunchViewerRetryCounter = 20; // so editors have approx 10 secs to save...
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
// This is the paramater used to set mark as read/unread options menu
hgs
parents:
diff changeset
   104
const TBool KIsEmail = ETrue;
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
CMceMessageListView* CMceMessageListView::NewL(
hgs
parents:
diff changeset
   110
    CMsvSessionPtr aSession,
hgs
parents:
diff changeset
   111
    TMsvId aFolderId,
hgs
parents:
diff changeset
   112
    CMceSessionHolder& aSessionHolder,
hgs
parents:
diff changeset
   113
    CMceBitmapResolver& aBitmapResolver,
hgs
parents:
diff changeset
   114
    CMceMainViewListView& aMainView )
hgs
parents:
diff changeset
   115
    {
hgs
parents:
diff changeset
   116
    CMceMessageListView* self = new (ELeave) CMceMessageListView(
hgs
parents:
diff changeset
   117
        aSession, aFolderId, aSessionHolder, aBitmapResolver, aMainView );
hgs
parents:
diff changeset
   118
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
   119
    self->ConstructL();
hgs
parents:
diff changeset
   120
    CleanupStack::Pop(); // self
hgs
parents:
diff changeset
   121
    return self;
hgs
parents:
diff changeset
   122
    }
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
CMceMessageListView::CMceMessageListView(
hgs
parents:
diff changeset
   125
    CMsvSessionPtr aSession,
hgs
parents:
diff changeset
   126
    TMsvId aFolderId,
hgs
parents:
diff changeset
   127
    CMceSessionHolder& aSessionHolder,
hgs
parents:
diff changeset
   128
    CMceBitmapResolver& aBitmapResolver,
hgs
parents:
diff changeset
   129
    CMceMainViewListView& aMainView )
hgs
parents:
diff changeset
   130
    :
hgs
parents:
diff changeset
   131
    iSession( aSession ),
hgs
parents:
diff changeset
   132
    iFolderId( aFolderId ),
hgs
parents:
diff changeset
   133
    iSessionHolder( aSessionHolder ),
hgs
parents:
diff changeset
   134
    iBitmapResolver( aBitmapResolver ),
hgs
parents:
diff changeset
   135
    iSelectedIndex( KErrNotFound ),
hgs
parents:
diff changeset
   136
    iMainViewListView( aMainView ),
hgs
parents:
diff changeset
   137
    iSortOrder( EMceCmdSortByDate ),
hgs
parents:
diff changeset
   138
    iOrdering( EFalse ),
hgs
parents:
diff changeset
   139
    iContextCommand(EFalse)
hgs
parents:
diff changeset
   140
    {
hgs
parents:
diff changeset
   141
    iSessionHolder.AddClient();
hgs
parents:
diff changeset
   142
    iReadUnread = EFalse;
hgs
parents:
diff changeset
   143
    }
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
CMceMessageListView::~CMceMessageListView()
hgs
parents:
diff changeset
   146
    {
hgs
parents:
diff changeset
   147
    delete iListboxMailTypeObserver;
hgs
parents:
diff changeset
   148
    delete iListboxInboxTypeObserver;
hgs
parents:
diff changeset
   149
    if (iMsgListContainer)
hgs
parents:
diff changeset
   150
        {
hgs
parents:
diff changeset
   151
        SetMskObserver(EFalse);
hgs
parents:
diff changeset
   152
        AppUi()->RemoveFromStack(iMsgListContainer);
hgs
parents:
diff changeset
   153
    delete iMsgListContainer;
hgs
parents:
diff changeset
   154
        }
hgs
parents:
diff changeset
   155
    delete iInboxName;
hgs
parents:
diff changeset
   156
    delete iRemoteMailboxEmptyText;
hgs
parents:
diff changeset
   157
    delete iEmptyText;
hgs
parents:
diff changeset
   158
    delete iMessageViewerLauncher;    
hgs
parents:
diff changeset
   159
    delete iLocalScreenClearer;
hgs
parents:
diff changeset
   160
    delete iFolderItemArray;
hgs
parents:
diff changeset
   161
    delete iDateTimeNotifier;
hgs
parents:
diff changeset
   162
	delete iAiwServiceHandler;
hgs
parents:
diff changeset
   163
	RProperty::Delete( KPSUidMuiu, KMceTemplatesDialog ); 	
hgs
parents:
diff changeset
   164
	RProperty::Delete( KPSUidMuiu, KMuiuOneRowListPopulated );
hgs
parents:
diff changeset
   165
    iSessionHolder.RemoveClient();
hgs
parents:
diff changeset
   166
    }
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
void CMceMessageListView::ConstructL( )
hgs
parents:
diff changeset
   169
    {
hgs
parents:
diff changeset
   170
    MCELOGGER_ENTERFN("CMceMessageListView::ConstructL");   
hgs
parents:
diff changeset
   171
    
hgs
parents:
diff changeset
   172
    BaseConstructL( R_MCE_FOLDER_VIEW );
hgs
parents:
diff changeset
   173
    iMceUi = STATIC_CAST( CMceUi*, AppUi() );
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    iInboxName = StringLoader::LoadL( R_INBOX_NAME, iEikonEnv );
hgs
parents:
diff changeset
   176
    iRemoteMailboxEmptyText = StringLoader::LoadL( R_MCE_TEXT_NO_EMAIL, iEikonEnv );
hgs
parents:
diff changeset
   177
    iEmptyText = StringLoader::LoadL( R_MCE_TEXT_NO_ITEMS, iEikonEnv );
hgs
parents:
diff changeset
   178
    iFolderItemArray = new(ELeave) CMceFolderItemArray( KMceArraysGranularity );    
hgs
parents:
diff changeset
   179
    CRepository* repository = CRepository::NewL( KCRUidMuiuVariation );
hgs
parents:
diff changeset
   180
    TInt featureBitmask = 0;
hgs
parents:
diff changeset
   181
    TInt error = repository->Get( KMuiuEmailConfigFlags,featureBitmask );
hgs
parents:
diff changeset
   182
    delete repository;
hgs
parents:
diff changeset
   183
    repository = NULL;
hgs
parents:
diff changeset
   184
    if ( error == KErrNone )
hgs
parents:
diff changeset
   185
        {
hgs
parents:
diff changeset
   186
        iIsUnread = featureBitmask & KEmailFeatureIdEmailUnreadFunction;
hgs
parents:
diff changeset
   187
        }
hgs
parents:
diff changeset
   188
    else
hgs
parents:
diff changeset
   189
        {
hgs
parents:
diff changeset
   190
        iIsUnread = EFalse;
hgs
parents:
diff changeset
   191
        }        
hgs
parents:
diff changeset
   192
    iListboxMailTypeObserver = CMceListboxTypeObserver::NewL( *this, KMuiuMailMessageListType );
hgs
parents:
diff changeset
   193
    iListboxInboxTypeObserver = CMceListboxTypeObserver::NewL( *this, KMuiuInboxMessageListType );
hgs
parents:
diff changeset
   194
    TInt r = RProperty::Define( KPSUidMuiu, KMuiuOneRowListPopulated, RProperty::EInt );
hgs
parents:
diff changeset
   195
    if ( r != KErrAlreadyExists || r != KErrNone)
hgs
parents:
diff changeset
   196
        {
hgs
parents:
diff changeset
   197
        User::LeaveIfError( r );
hgs
parents:
diff changeset
   198
        }
hgs
parents:
diff changeset
   199
	// Initialisation		
hgs
parents:
diff changeset
   200
     r = RProperty::Set( KPSUidMuiu, KMuiuOneRowListPopulated, EFalse );
hgs
parents:
diff changeset
   201
     if ( r != KErrNone )
hgs
parents:
diff changeset
   202
         {
hgs
parents:
diff changeset
   203
         User::LeaveIfError( r );
hgs
parents:
diff changeset
   204
         }          
hgs
parents:
diff changeset
   205
    MCELOGGER_LEAVEFN("CMceMessageListView::ConstructL");   
hgs
parents:
diff changeset
   206
    }
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
// ----------------------------------------------------
hgs
parents:
diff changeset
   209
// CMceMessageListView::DoActivateL
hgs
parents:
diff changeset
   210
// ----------------------------------------------------
hgs
parents:
diff changeset
   211
void CMceMessageListView::DoActivateL(
hgs
parents:
diff changeset
   212
    const TVwsViewId& aPrevViewId,
hgs
parents:
diff changeset
   213
    TUid aCustomMessageId, /* Folder ID */
hgs
parents:
diff changeset
   214
    const TDesC8& /*aCustomMessage*/)
hgs
parents:
diff changeset
   215
    {
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
    MCELOGGER_ENTERFN("CMceMessageListView::DoActivateL()");
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
    // if new message is shown during disconnecting
hgs
parents:
diff changeset
   220
    // prevent to exit from mce    
hgs
parents:
diff changeset
   221
    iMceUi->ClearExitAfterDisconnectFlag();
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
    // Save the sort ordering in the message store
hgs
parents:
diff changeset
   224
    // Set the default sort order
hgs
parents:
diff changeset
   225
    iSortOrder = EMceCmdSortByDate;
hgs
parents:
diff changeset
   226
    iOrdering = EFalse;
hgs
parents:
diff changeset
   227
    if ( iMsgListContainer )
hgs
parents:
diff changeset
   228
        {
hgs
parents:
diff changeset
   229
        TMsvId fId = iMsgListContainer->CurrentFolderId();
hgs
parents:
diff changeset
   230
        for( TInt loop = 0; loop < iFolderItemArray->Count() ; loop++ )
hgs
parents:
diff changeset
   231
            {
hgs
parents:
diff changeset
   232
            TMceFolderItem item = ((*iFolderItemArray)[loop]);
hgs
parents:
diff changeset
   233
            if ( item.iFolderId == fId && aPrevViewId == TDRVIEWID)
hgs
parents:
diff changeset
   234
                {        
hgs
parents:
diff changeset
   235
                iSortOrder = item.iSortOrder;
hgs
parents:
diff changeset
   236
                iOrdering = item.iOrdering;
hgs
parents:
diff changeset
   237
                }
hgs
parents:
diff changeset
   238
            }
hgs
parents:
diff changeset
   239
        }
hgs
parents:
diff changeset
   240
    if (aPrevViewId != TDRVIEWID ) 
hgs
parents:
diff changeset
   241
        {
hgs
parents:
diff changeset
   242
        // Reset the sort order
hgs
parents:
diff changeset
   243
    	iFolderItemArray->Reset();
hgs
parents:
diff changeset
   244
        }
hgs
parents:
diff changeset
   245
	    
hgs
parents:
diff changeset
   246
    if ( iMsgListContainer )
hgs
parents:
diff changeset
   247
        {
hgs
parents:
diff changeset
   248
        iMsgListContainer->SetSortTypeL( iSortOrder, iOrdering );
hgs
parents:
diff changeset
   249
        }
hgs
parents:
diff changeset
   250
        
hgs
parents:
diff changeset
   251
    TMsvId id = 0;
hgs
parents:
diff changeset
   252
    TBool editorLaunched = EFalse;
hgs
parents:
diff changeset
   253
    TBool launchingFromOutside = EFalse;  
hgs
parents:
diff changeset
   254
    TMsvId service = KMsvLocalServiceIndexEntryId;
hgs
parents:
diff changeset
   255
    TMsvEntry entry;    
hgs
parents:
diff changeset
   256
    TInt msgMtmUid = 0;
hgs
parents:
diff changeset
   257
    
hgs
parents:
diff changeset
   258
    if ( aCustomMessageId.iUid > KMsvRootIndexEntryId )
hgs
parents:
diff changeset
   259
        {
hgs
parents:
diff changeset
   260
hgs
parents:
diff changeset
   261
        if ( iSession->GetEntry( aCustomMessageId.iUid, service, entry ) != KErrNone )
hgs
parents:
diff changeset
   262
            {
hgs
parents:
diff changeset
   263
            iSession->GetEntry( KMsvGlobalInBoxIndexEntryId, service, entry ); // this should always succeed!
hgs
parents:
diff changeset
   264
            }
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
        // outside the app.
hgs
parents:
diff changeset
   267
        launchingFromOutside = ETrue;
hgs
parents:
diff changeset
   268
        // Set the forder containing the entry
hgs
parents:
diff changeset
   269
        if ( entry.iType == KUidMsvMessageEntry )
hgs
parents:
diff changeset
   270
            {
hgs
parents:
diff changeset
   271
            // The aCustomMessageId is an ID of a message, set Inbox
hgs
parents:
diff changeset
   272
            SetFolderL( entry.Parent() );
hgs
parents:
diff changeset
   273
            id = aCustomMessageId.iUid;
hgs
parents:
diff changeset
   274
            }
hgs
parents:
diff changeset
   275
        else
hgs
parents:
diff changeset
   276
            {
hgs
parents:
diff changeset
   277
            // Set the folder based on the given ID
hgs
parents:
diff changeset
   278
            iFolderId = aCustomMessageId.iUid;
hgs
parents:
diff changeset
   279
            // this is performance optimization, start to launch viewer before container creation
hgs
parents:
diff changeset
   280
            if ( !iMsgListContainer && entry.Id() == KMsvGlobalInBoxIndexEntryId )
hgs
parents:
diff changeset
   281
                {
hgs
parents:
diff changeset
   282
                if ( LaunchViewerWhenOneUnreadL( msgMtmUid ) > KErrNotFound )
hgs
parents:
diff changeset
   283
                    {
hgs
parents:
diff changeset
   284
                    editorLaunched = ETrue;
hgs
parents:
diff changeset
   285
                    }
hgs
parents:
diff changeset
   286
                }
hgs
parents:
diff changeset
   287
            }
hgs
parents:
diff changeset
   288
        iMceUi->SetDontExitOnNextOperationComplete();
hgs
parents:
diff changeset
   289
        }
hgs
parents:
diff changeset
   290
    
hgs
parents:
diff changeset
   291
    if ( iMsgListContainer &&
hgs
parents:
diff changeset
   292
            iCurrentListType != GetFolderListBoxType())
hgs
parents:
diff changeset
   293
        {
hgs
parents:
diff changeset
   294
        ListboxTypeChangedL();
hgs
parents:
diff changeset
   295
        }
hgs
parents:
diff changeset
   296
    else
hgs
parents:
diff changeset
   297
        {
hgs
parents:
diff changeset
   298
        CreateListboxL();        
hgs
parents:
diff changeset
   299
        }           
hgs
parents:
diff changeset
   300
    if ( iMsgListContainer && aPrevViewId == TDRVIEWID )
hgs
parents:
diff changeset
   301
        {
hgs
parents:
diff changeset
   302
        // Save the sort ordering in the message store
hgs
parents:
diff changeset
   303
        // Set the default sort order
hgs
parents:
diff changeset
   304
        iSortOrder = EMceCmdSortByDate;
hgs
parents:
diff changeset
   305
        iOrdering = EFalse;
hgs
parents:
diff changeset
   306
        TMsvId fId = iFolderId;
hgs
parents:
diff changeset
   307
        for( TInt loop = 0; loop < iFolderItemArray->Count() ; loop++ )
hgs
parents:
diff changeset
   308
            {
hgs
parents:
diff changeset
   309
            TMceFolderItem item = ((*iFolderItemArray)[loop]);
hgs
parents:
diff changeset
   310
            if ( item.iFolderId == fId )
hgs
parents:
diff changeset
   311
                {        
hgs
parents:
diff changeset
   312
                iSortOrder = item.iSortOrder;
hgs
parents:
diff changeset
   313
                iOrdering = item.iOrdering;
hgs
parents:
diff changeset
   314
                }
hgs
parents:
diff changeset
   315
            }
hgs
parents:
diff changeset
   316
     
hgs
parents:
diff changeset
   317
        iMsgListContainer->SetSortTypeL( iSortOrder, iOrdering );
hgs
parents:
diff changeset
   318
        }
hgs
parents:
diff changeset
   319
    
hgs
parents:
diff changeset
   320
    iMsgListContainer->SetFolderL( iFolderId );
hgs
parents:
diff changeset
   321
            
hgs
parents:
diff changeset
   322
    // Unset flag so one row list container knows that first subtitle is to be opened
hgs
parents:
diff changeset
   323
    iMsgListContainer->SetContainerFlag( EMceOneRowFlagFirstSubtitleOpen, EFalse );         
hgs
parents:
diff changeset
   324
    
hgs
parents:
diff changeset
   325
    iMsgListContainer->ClearSelection();
hgs
parents:
diff changeset
   326
    iMsgListContainer->SetRect(ClientRect());
hgs
parents:
diff changeset
   327
        
hgs
parents:
diff changeset
   328
    SetMskObserver( ETrue );
hgs
parents:
diff changeset
   329
    AppUi()->RemoveFromStack( iMsgListContainer );
hgs
parents:
diff changeset
   330
    AppUi()->AddToStackL( *this,iMsgListContainer );
hgs
parents:
diff changeset
   331
    iMsgListContainer->ActivateL();
hgs
parents:
diff changeset
   332
    iMsgListContainer->MakeVisible(ETrue);
hgs
parents:
diff changeset
   333
hgs
parents:
diff changeset
   334
    //const TMsvEntry& folderEntry = iMsgListContainer->FolderEntry(); 
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
    entry = iMsgListContainer->FolderEntry();
hgs
parents:
diff changeset
   337
    
hgs
parents:
diff changeset
   338
    if ( entry.Parent() == KMsvRootIndexEntryId &&
hgs
parents:
diff changeset
   339
         entry.iType == KUidMsvServiceEntry &&
hgs
parents:
diff changeset
   340
         entry.iMtm == KSenduiMtmImap4Uid &&
hgs
parents:
diff changeset
   341
         iMsgListContainer->Count() )
hgs
parents:
diff changeset
   342
        {        
hgs
parents:
diff changeset
   343
        // TODO: container and array should handle this?
hgs
parents:
diff changeset
   344
        FindInboxAndOpenItL();// special handling for imap4 Inbox, folderEntry -> empty
hgs
parents:
diff changeset
   345
        }
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
    if ( IsSyncMl() && launchingFromOutside )
hgs
parents:
diff changeset
   348
        {           
hgs
parents:
diff changeset
   349
        SyncMlFindInboxAndOpenItL();
hgs
parents:
diff changeset
   350
        }
hgs
parents:
diff changeset
   351
        
hgs
parents:
diff changeset
   352
    
hgs
parents:
diff changeset
   353
    // Handle the resource change
hgs
parents:
diff changeset
   354
    if ( iMceUi->ResourceChangeCalled() )
hgs
parents:
diff changeset
   355
        {
hgs
parents:
diff changeset
   356
        iMsgListContainer->HandleResourceChange( KEikDynamicLayoutVariantSwitch );
hgs
parents:
diff changeset
   357
        iMceUi->ResetResourceChange();
hgs
parents:
diff changeset
   358
        }
hgs
parents:
diff changeset
   359
hgs
parents:
diff changeset
   360
    SetEmptyTextL();
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
    iMsgListContainer->ResetCurrentItemL();
hgs
parents:
diff changeset
   363
    
hgs
parents:
diff changeset
   364
    // Fetch pointer to the default title pane control
hgs
parents:
diff changeset
   365
    CAknTitlePane* title = iMceUi->TitlePaneL();
hgs
parents:
diff changeset
   366
    TMsvEntry serviceEntry;
hgs
parents:
diff changeset
   367
    TMsvId    serviceId;
hgs
parents:
diff changeset
   368
    
hgs
parents:
diff changeset
   369
    entry = iMsgListContainer->FolderEntry();
hgs
parents:
diff changeset
   370
    
hgs
parents:
diff changeset
   371
    if ( (entry.iMtm == KSenduiMtmImap4Uid || IsSyncMl() ) &&
hgs
parents:
diff changeset
   372
         iSession->GetEntry( entry.iServiceId, serviceId, serviceEntry) == KErrNone )
hgs
parents:
diff changeset
   373
        {
hgs
parents:
diff changeset
   374
        title->SetTextL( serviceEntry.iDetails );
hgs
parents:
diff changeset
   375
        }
hgs
parents:
diff changeset
   376
    else
hgs
parents:
diff changeset
   377
        {
hgs
parents:
diff changeset
   378
        title->SetTextL( entry.iDetails );
hgs
parents:
diff changeset
   379
        }
hgs
parents:
diff changeset
   380
hgs
parents:
diff changeset
   381
    // Set the MSK for the view
hgs
parents:
diff changeset
   382
    SetMSKButtonL();
hgs
parents:
diff changeset
   383
hgs
parents:
diff changeset
   384
    iMceViewActivated = ETrue;
hgs
parents:
diff changeset
   385
hgs
parents:
diff changeset
   386
    TBool activateConnQueryTimer = ETrue;
hgs
parents:
diff changeset
   387
hgs
parents:
diff changeset
   388
    if ( launchingFromOutside )
hgs
parents:
diff changeset
   389
        {
hgs
parents:
diff changeset
   390
        iMceUi->RemoveTabs(); // just to make sure, doesn't do anything if no tabs
hgs
parents:
diff changeset
   391
        const TMsvId entryId = entry.Id();
hgs
parents:
diff changeset
   392
hgs
parents:
diff changeset
   393
        if ( entry.Parent() == KMsvRootIndexEntryId ||
hgs
parents:
diff changeset
   394
            ( entry.iMtm == KSenduiMtmImap4Uid && !IsImapFolderOpenL( ) ) ||
hgs
parents:
diff changeset
   395
            entryId == KMsvGlobalInBoxIndexEntryId ||
hgs
parents:
diff changeset
   396
            entryId == KMsvGlobalOutBoxIndexEntryId ||
hgs
parents:
diff changeset
   397
            entryId == KMsvDraftEntryId ||
hgs
parents:
diff changeset
   398
            entryId == KMsvSentEntryId ||
hgs
parents:
diff changeset
   399
            entryId == KMceDocumentsEntryId ||
hgs
parents:
diff changeset
   400
            ( IsSyncMl() && entry.iRelatedId == KMsvGlobalInBoxIndexEntryId ) ) 
hgs
parents:
diff changeset
   401
            {
hgs
parents:
diff changeset
   402
            if ( entry.iMtm == KSenduiMtmImap4Uid && entry.iDetails.CompareF( iInboxName->Des() ) == 0 )
hgs
parents:
diff changeset
   403
                {
hgs
parents:
diff changeset
   404
                iMceUi->ShowTabsL( serviceId ); // this was got above so this points to correct service.
hgs
parents:
diff changeset
   405
                }
hgs
parents:
diff changeset
   406
            else
hgs
parents:
diff changeset
   407
                {
hgs
parents:
diff changeset
   408
                iMceUi->ShowTabsL( aCustomMessageId.iUid );
hgs
parents:
diff changeset
   409
                }
hgs
parents:
diff changeset
   410
            }
hgs
parents:
diff changeset
   411
    	else
hgs
parents:
diff changeset
   412
    	    {
hgs
parents:
diff changeset
   413
    	    ChangeFolderL(ETrue);
hgs
parents:
diff changeset
   414
    	    }			
hgs
parents:
diff changeset
   415
			
hgs
parents:
diff changeset
   416
        if ( !editorLaunched )
hgs
parents:
diff changeset
   417
            {
hgs
parents:
diff changeset
   418
            if ( iFolderId == KMsvGlobalOutBoxIndexEntryId ||
hgs
parents:
diff changeset
   419
                 iFolderId == KMsvGlobalInBoxIndexEntryId ||
hgs
parents:
diff changeset
   420
                    ( entry.Parent() == KMsvRootIndexEntryId &&
hgs
parents:
diff changeset
   421
                        ( iMceUi->CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, entry.iMtm ) ) &&
hgs
parents:
diff changeset
   422
                        entry.iType == KUidMsvServiceEntry ) ||
hgs
parents:
diff changeset
   423
                    ( SyncMlOutboxInbox( KMsvGlobalInBoxIndexEntryId ) &&
hgs
parents:
diff changeset
   424
                        entry.iType == KUidMsvServiceEntry) )
hgs
parents:
diff changeset
   425
                {
hgs
parents:
diff changeset
   426
                if ( !FindUnreadMessageAndOpenItL( id ) )
hgs
parents:
diff changeset
   427
                    {
hgs
parents:
diff changeset
   428
                    activateConnQueryTimer = ETrue;
hgs
parents:
diff changeset
   429
                    }
hgs
parents:
diff changeset
   430
                else
hgs
parents:
diff changeset
   431
                    {
hgs
parents:
diff changeset
   432
                    activateConnQueryTimer = EFalse;
hgs
parents:
diff changeset
   433
                    }
hgs
parents:
diff changeset
   434
                }
hgs
parents:
diff changeset
   435
            }
hgs
parents:
diff changeset
   436
        }
hgs
parents:
diff changeset
   437
hgs
parents:
diff changeset
   438
hgs
parents:
diff changeset
   439
    iMceUi->SetMceViewActive( EMceMessageViewActive );
hgs
parents:
diff changeset
   440
    if ( editorLaunched &&
hgs
parents:
diff changeset
   441
         ( msgMtmUid!=KSenduiMtmIrUidValue ) &&
hgs
parents:
diff changeset
   442
         ( msgMtmUid!=KSenduiMtmBtUidValue ) &&
hgs
parents:
diff changeset
   443
         ( msgMtmUid!=KSenduiMtmSmtpUidValue ) &&
hgs
parents:
diff changeset
   444
         ( msgMtmUid!=KSenduiMtmImap4UidValue ) &&
hgs
parents:
diff changeset
   445
         ( msgMtmUid!=KSenduiMtmPop3UidValue ))
hgs
parents:
diff changeset
   446
        {
hgs
parents:
diff changeset
   447
        // This is added to remove Inbox view flicker when new message is opened from home screen and 
hgs
parents:
diff changeset
   448
        // forwarded
hgs
parents:
diff changeset
   449
        delete iLocalScreenClearer;
hgs
parents:
diff changeset
   450
        iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
   451
        iLocalScreenClearer = CAknLocalScreenClearer::NewL( EFalse ); 
hgs
parents:
diff changeset
   452
        }
hgs
parents:
diff changeset
   453
    
hgs
parents:
diff changeset
   454
    if ( activateConnQueryTimer )
hgs
parents:
diff changeset
   455
        {
hgs
parents:
diff changeset
   456
        if ( entry.iMtm == KSenduiMtmImap4Uid || 
hgs
parents:
diff changeset
   457
            entry.iMtm == KSenduiMtmPop3Uid )
hgs
parents:
diff changeset
   458
            {
hgs
parents:
diff changeset
   459
            iConnectionNote = ETrue;
hgs
parents:
diff changeset
   460
            iMceUi->ActivateConnectionQueryTimerL( iFolderId );
hgs
parents:
diff changeset
   461
            }        
hgs
parents:
diff changeset
   462
        }
hgs
parents:
diff changeset
   463
hgs
parents:
diff changeset
   464
    iMsgListContainer->RefreshSelectionIndexesL ( EFalse );
hgs
parents:
diff changeset
   465
    iMsgListContainer->RefreshListbox();
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
    // NCN reset, if the mail folder contains unread messages
hgs
parents:
diff changeset
   468
	if ( iMceUi->CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, entry.iMtm ) &&
hgs
parents:
diff changeset
   469
	    HasUnreadMessagesL() )
hgs
parents:
diff changeset
   470
        {
hgs
parents:
diff changeset
   471
        iMceUi->HandleNotif(iMsgListContainer->FolderEntry().iServiceId);
hgs
parents:
diff changeset
   472
        }
hgs
parents:
diff changeset
   473
				
hgs
parents:
diff changeset
   474
    if ( !iDateTimeNotifier )
hgs
parents:
diff changeset
   475
        {
hgs
parents:
diff changeset
   476
        iDateTimeNotifier = CEnvironmentChangeNotifier::NewL( 
hgs
parents:
diff changeset
   477
            CActive::EPriorityLow,
hgs
parents:
diff changeset
   478
            TCallBack( EnvironmentChanged, this ) );
hgs
parents:
diff changeset
   479
        }
hgs
parents:
diff changeset
   480
        
hgs
parents:
diff changeset
   481
    if ( !iDateTimeNotifier->IsActive() )
hgs
parents:
diff changeset
   482
        {
hgs
parents:
diff changeset
   483
        iDateTimeNotifier->Start();            
hgs
parents:
diff changeset
   484
        }
hgs
parents:
diff changeset
   485
     
hgs
parents:
diff changeset
   486
    // if we are in marking mode then "press" rsk
hgs
parents:
diff changeset
   487
    // cancel to return to normal mode
hgs
parents:
diff changeset
   488
    if( iMarkingModeOn )
hgs
parents:
diff changeset
   489
        {
hgs
parents:
diff changeset
   490
        SetMarkingModeOff();
hgs
parents:
diff changeset
   491
        }
hgs
parents:
diff changeset
   492
    MCELOGGER_LEAVEFN("CMceMessageListView::DoActivateL()");
hgs
parents:
diff changeset
   493
    }
hgs
parents:
diff changeset
   494
hgs
parents:
diff changeset
   495
hgs
parents:
diff changeset
   496
// ----------------------------------------------------
hgs
parents:
diff changeset
   497
// CMceMessageListView::DoDeactivate
hgs
parents:
diff changeset
   498
// ----------------------------------------------------
hgs
parents:
diff changeset
   499
void CMceMessageListView::DoDeactivate()
hgs
parents:
diff changeset
   500
    {
hgs
parents:
diff changeset
   501
    if (iMsgListContainer)
hgs
parents:
diff changeset
   502
        {
hgs
parents:
diff changeset
   503
        delete iDateTimeNotifier;
hgs
parents:
diff changeset
   504
        iDateTimeNotifier = NULL;
hgs
parents:
diff changeset
   505
        iMsgListContainer->MakeVisible(EFalse);
hgs
parents:
diff changeset
   506
        AppUi()->RemoveFromStack(iMsgListContainer);
hgs
parents:
diff changeset
   507
        delete iMsgListContainer;
hgs
parents:
diff changeset
   508
        iMsgListContainer = NULL;
hgs
parents:
diff changeset
   509
        }
hgs
parents:
diff changeset
   510
    iMceViewActivated = EFalse;
hgs
parents:
diff changeset
   511
    }
hgs
parents:
diff changeset
   512
hgs
parents:
diff changeset
   513
hgs
parents:
diff changeset
   514
// ----------------------------------------------------
hgs
parents:
diff changeset
   515
// CMceMessageListView::HandleCommandL
hgs
parents:
diff changeset
   516
// ----------------------------------------------------
hgs
parents:
diff changeset
   517
void CMceMessageListView::HandleCommandL( TInt aCommand )
hgs
parents:
diff changeset
   518
    {
hgs
parents:
diff changeset
   519
    MCELOGGER_WRITE_FORMAT("CMceMessageListView::HandleCommandL: aCommand: %d", aCommand);
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
    if ( !iMceViewActivated )
hgs
parents:
diff changeset
   522
        {
hgs
parents:
diff changeset
   523
        return;
hgs
parents:
diff changeset
   524
        }
hgs
parents:
diff changeset
   525
hgs
parents:
diff changeset
   526
    switch (aCommand)
hgs
parents:
diff changeset
   527
        {
hgs
parents:
diff changeset
   528
        case EAknSoftkeyBack:
hgs
parents:
diff changeset
   529
            if ( FolderOpenedL() )
hgs
parents:
diff changeset
   530
                {
hgs
parents:
diff changeset
   531
                ChangeFolderL( ETrue );
hgs
parents:
diff changeset
   532
                }
hgs
parents:
diff changeset
   533
            else
hgs
parents:
diff changeset
   534
                {
hgs
parents:
diff changeset
   535
                iConnectionNote = EFalse;
hgs
parents:
diff changeset
   536
                HandleCloseL();
hgs
parents:
diff changeset
   537
                }
hgs
parents:
diff changeset
   538
            break;
hgs
parents:
diff changeset
   539
        case EAknCmdOpen:
hgs
parents:
diff changeset
   540
        case EAknSoftkeyContextOptions:
hgs
parents:
diff changeset
   541
            HandleOpenL();
hgs
parents:
diff changeset
   542
            break;
hgs
parents:
diff changeset
   543
        case EAknCmdHideInBackground:
hgs
parents:
diff changeset
   544
            // handled by app ui and sent directly to appui by avkon framework so ignore this by view.
hgs
parents:
diff changeset
   545
            break;
hgs
parents:
diff changeset
   546
        case EMceCmdConnect:
hgs
parents:
diff changeset
   547
            {
hgs
parents:
diff changeset
   548
            if ( iMsgListContainer->FolderEntry().iMtm == KSenduiMtmImap4Uid ||
hgs
parents:
diff changeset
   549
                 iMsgListContainer->FolderEntry().iMtm == KSenduiMtmPop3Uid )
hgs
parents:
diff changeset
   550
                {
hgs
parents:
diff changeset
   551
                iMceUi->GoOnlineL( iMsgListContainer->FolderEntry().iServiceId );
hgs
parents:
diff changeset
   552
                }
hgs
parents:
diff changeset
   553
            break;
hgs
parents:
diff changeset
   554
            }
hgs
parents:
diff changeset
   555
        case EMceCmdCloseConnection:
hgs
parents:
diff changeset
   556
            {
hgs
parents:
diff changeset
   557
            if ( iMsgListContainer->FolderEntry().iMtm == KSenduiMtmImap4Uid ||
hgs
parents:
diff changeset
   558
                 iMsgListContainer->FolderEntry().iMtm == KSenduiMtmPop3Uid )
hgs
parents:
diff changeset
   559
                {
hgs
parents:
diff changeset
   560
                iMceUi->GoOfflineL( iMsgListContainer->FolderEntry().iServiceId );
hgs
parents:
diff changeset
   561
                }
hgs
parents:
diff changeset
   562
            break;
hgs
parents:
diff changeset
   563
            }          
hgs
parents:
diff changeset
   564
        case  EAknCmdMarkReadMsgs:
hgs
parents:
diff changeset
   565
            {
hgs
parents:
diff changeset
   566
            FindAllReadMsgAndMarkL();
hgs
parents:
diff changeset
   567
            break;
hgs
parents:
diff changeset
   568
            }
hgs
parents:
diff changeset
   569
hgs
parents:
diff changeset
   570
        case EMceCmdSendViaIr:
hgs
parents:
diff changeset
   571
            iMceUi->SendViaL( iMsgListContainer->CurrentItemId(), KSenduiMtmIrUid );
hgs
parents:
diff changeset
   572
            break;
hgs
parents:
diff changeset
   573
hgs
parents:
diff changeset
   574
        case EMceCmdSendViaBt:
hgs
parents:
diff changeset
   575
            iMceUi->SendViaL( iMsgListContainer->CurrentItemId(), KSenduiMtmBtUid );
hgs
parents:
diff changeset
   576
            break;
hgs
parents:
diff changeset
   577
hgs
parents:
diff changeset
   578
hgs
parents:
diff changeset
   579
        case EMceCmdSortByDate:
hgs
parents:
diff changeset
   580
        case EMceCmdSortBySubject:
hgs
parents:
diff changeset
   581
        case EMceCmdSortByRecipient:
hgs
parents:
diff changeset
   582
        case EMceCmdSortBySender:
hgs
parents:
diff changeset
   583
        case EMceCmdSortByType:
hgs
parents:
diff changeset
   584
            HandleSortCommandL( aCommand );
hgs
parents:
diff changeset
   585
            break;
hgs
parents:
diff changeset
   586
            
hgs
parents:
diff changeset
   587
        case EMceCommandMMSContentUpload:
hgs
parents:
diff changeset
   588
            // MMS.Content.Upload
hgs
parents:
diff changeset
   589
            iMceUi->ShowUploadQueryL();
hgs
parents:
diff changeset
   590
            break;
hgs
parents:
diff changeset
   591
        case EMceCmdDelete:
hgs
parents:
diff changeset
   592
            // Cannot delete while the message viewer is being launched by the NCN
hgs
parents:
diff changeset
   593
            if ( !iMessageViewerLauncher )
hgs
parents:
diff changeset
   594
                {
hgs
parents:
diff changeset
   595
                iMceUi->HandleCommandL( aCommand );
hgs
parents:
diff changeset
   596
                }
hgs
parents:
diff changeset
   597
            break;
hgs
parents:
diff changeset
   598
hgs
parents:
diff changeset
   599
        case EMceHCListCmdExpand:
hgs
parents:
diff changeset
   600
        case EMceHCListCmdCollapse:
hgs
parents:
diff changeset
   601
        case EMceHCListCmdCollapse1:
hgs
parents:
diff changeset
   602
        case EMceHCListCmdCollapse2:
hgs
parents:
diff changeset
   603
            HandleContainerOptionsCommandL( aCommand );
hgs
parents:
diff changeset
   604
            break;
hgs
parents:
diff changeset
   605
hgs
parents:
diff changeset
   606
        case EMceCmdNewFolder:
hgs
parents:
diff changeset
   607
        case EMceCmdRenameFolder:
hgs
parents:
diff changeset
   608
            iMsgListContainer->ClearSelection();
hgs
parents:
diff changeset
   609
            // drop through
hgs
parents:
diff changeset
   610
        default:
hgs
parents:
diff changeset
   611
        	if ( iAiwServiceHandler && FeatureManager::FeatureSupported(KFeatureIdSyncMlDsEmail) && 
hgs
parents:
diff changeset
   612
        		 KAiwCmdSynchronize ==  iAiwServiceHandler->ServiceCmdByMenuCmd(aCommand)) 
hgs
parents:
diff changeset
   613
        		{
hgs
parents:
diff changeset
   614
        		TInt appId = EGenericParamMessageItemEMail;
hgs
parents:
diff changeset
   615
        		const TMsvEntry entry = iMsgListContainer->FolderEntry();
hgs
parents:
diff changeset
   616
        		CAiwGenericParamList* list = AiwSyncParamListLC( appId, entry.iDetails );
hgs
parents:
diff changeset
   617
            	
hgs
parents:
diff changeset
   618
            	iAiwServiceHandler->ExecuteMenuCmdL(aCommand, *list,
hgs
parents:
diff changeset
   619
												iAiwServiceHandler->OutParamListL() );
hgs
parents:
diff changeset
   620
				CleanupStack::PopAndDestroy(list);
hgs
parents:
diff changeset
   621
        		}
hgs
parents:
diff changeset
   622
        	// NSS Handling MessageReader AIW command
hgs
parents:
diff changeset
   623
			else if( iAiwServiceHandler && KAiwCmdView ==  iAiwServiceHandler->ServiceCmdByMenuCmd(aCommand))
hgs
parents:
diff changeset
   624
				{
hgs
parents:
diff changeset
   625
				/** 
hgs
parents:
diff changeset
   626
				 * @todo Fetching and packing message list is duplicated in 
hgs
parents:
diff changeset
   627
				 * HandleCommandL and in DynInitMenuPaneL. should be extracted
hgs
parents:
diff changeset
   628
				 * into a separate method. I don't dare to introduce a new 
hgs
parents:
diff changeset
   629
				 * method. Let the mce team care about it
hgs
parents:
diff changeset
   630
				 */
hgs
parents:
diff changeset
   631
				CMsvEntrySelection* itemIds = iMsgListContainer->CurrentItemSelectionL();
hgs
parents:
diff changeset
   632
				CleanupStack::PushL( itemIds );
hgs
parents:
diff changeset
   633
				
hgs
parents:
diff changeset
   634
				CAiwGenericParamList& inList = iAiwServiceHandler->InParamListL();
hgs
parents:
diff changeset
   635
				
hgs
parents:
diff changeset
   636
				for ( TInt i( 0 ); i < itemIds->Count(); i++ ) 
hgs
parents:
diff changeset
   637
				    {
hgs
parents:
diff changeset
   638
				    TMsvId itemId ( (*itemIds)[i] );
hgs
parents:
diff changeset
   639
				    TMsvEntry currentEntry;
hgs
parents:
diff changeset
   640
				    TMsvId serviceId; // not used here but needed by GetEntry function
hgs
parents:
diff changeset
   641
				    
hgs
parents:
diff changeset
   642
				    if ( iSession->GetEntry( itemId, serviceId, currentEntry ) == KErrNone ) 
hgs
parents:
diff changeset
   643
                        {
hgs
parents:
diff changeset
   644
                        // Pack the TMsvEntry into the TAiwVariant and add it to the param list
hgs
parents:
diff changeset
   645
                        TPckgC<TMsvEntry> packedEntry ( currentEntry );
hgs
parents:
diff changeset
   646
                        
hgs
parents:
diff changeset
   647
                        // does not copy the data
hgs
parents:
diff changeset
   648
                        TAiwVariant varEntry( packedEntry ); 
hgs
parents:
diff changeset
   649
                        TAiwGenericParam parEntry( EGenericParamUnspecified, varEntry );
hgs
parents:
diff changeset
   650
                        
hgs
parents:
diff changeset
   651
                        // copies the data
hgs
parents:
diff changeset
   652
                        inList.AppendL( parEntry );  
hgs
parents:
diff changeset
   653
                        }  // if
hgs
parents:
diff changeset
   654
                        // message reader wise ignore the error
hgs
parents:
diff changeset
   655
                        // @todo log the error according to the mce team standards
hgs
parents:
diff changeset
   656
				    }  // for
hgs
parents:
diff changeset
   657
				
hgs
parents:
diff changeset
   658
				CleanupStack::PopAndDestroy( itemIds );
hgs
parents:
diff changeset
   659
				
hgs
parents:
diff changeset
   660
				iAiwServiceHandler->ExecuteMenuCmdL( aCommand, inList, 
hgs
parents:
diff changeset
   661
				                                     iAiwServiceHandler->OutParamListL() );
hgs
parents:
diff changeset
   662
				}
hgs
parents:
diff changeset
   663
			// NSS End of handling MessageReader AIW command
hgs
parents:
diff changeset
   664
			else
hgs
parents:
diff changeset
   665
				{
hgs
parents:
diff changeset
   666
				iMceUi->HandleCommandL( aCommand );
hgs
parents:
diff changeset
   667
				}
hgs
parents:
diff changeset
   668
            break;
hgs
parents:
diff changeset
   669
        }
hgs
parents:
diff changeset
   670
    MCELOGGER_LEAVEFN("CMceMessageListView::HandleCommandL()");
hgs
parents:
diff changeset
   671
    }
hgs
parents:
diff changeset
   672
hgs
parents:
diff changeset
   673
// ----------------------------------------------------
hgs
parents:
diff changeset
   674
// CMceMessageListView::HandleSessionEventL
hgs
parents:
diff changeset
   675
// ----------------------------------------------------
hgs
parents:
diff changeset
   676
void CMceMessageListView::HandleSessionEventL(
hgs
parents:
diff changeset
   677
    TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3)
hgs
parents:
diff changeset
   678
    {
hgs
parents:
diff changeset
   679
    MCELOGGER_WRITE_TIMESTAMP("CMceMessageListView::HandleSessionEventL() start");
hgs
parents:
diff changeset
   680
    switch ( aEvent )
hgs
parents:
diff changeset
   681
        {
hgs
parents:
diff changeset
   682
    case EMsvEntriesDeleted:
hgs
parents:
diff changeset
   683
        {
hgs
parents:
diff changeset
   684
        // check that we don't have deleted folder open
hgs
parents:
diff changeset
   685
        CMsvEntrySelection* selection = (CMsvEntrySelection*) aArg1;
hgs
parents:
diff changeset
   686
        if ( iMceViewActivated && selection->Find( iFolderId ) != KErrNotFound )
hgs
parents:
diff changeset
   687
            {
hgs
parents:
diff changeset
   688
            // opened folder is deleted, must change to documents
hgs
parents:
diff changeset
   689
            SetFolderL( KMceDocumentsEntryId );
hgs
parents:
diff changeset
   690
            iMceUi->ShowTabsL( KMceDocumentsEntryId );
hgs
parents:
diff changeset
   691
            CAknTitlePane* title=iMceUi->TitlePaneL();
hgs
parents:
diff changeset
   692
            TMsvEntry documentsEntry;
hgs
parents:
diff changeset
   693
            TMsvId serviceId;
hgs
parents:
diff changeset
   694
            if ( iSession->GetEntry( KMceDocumentsEntryId, serviceId, documentsEntry)
hgs
parents:
diff changeset
   695
                 == KErrNone )
hgs
parents:
diff changeset
   696
                {
hgs
parents:
diff changeset
   697
                title->SetTextL( documentsEntry.iDetails );
hgs
parents:
diff changeset
   698
                }
hgs
parents:
diff changeset
   699
            if ( iMsgListContainer )
hgs
parents:
diff changeset
   700
                {
hgs
parents:
diff changeset
   701
                iMsgListContainer->SetFolderL( KMceDocumentsEntryId );
hgs
parents:
diff changeset
   702
                iMsgListContainer->ClearSelection();
hgs
parents:
diff changeset
   703
                }
hgs
parents:
diff changeset
   704
            }
hgs
parents:
diff changeset
   705
            
hgs
parents:
diff changeset
   706
        if ( /*!iMceUi->ViewUpdateSuppressionFlag() &&*/
hgs
parents:
diff changeset
   707
             iMsgListContainer &&
hgs
parents:
diff changeset
   708
             iFolderId == (*(TMsvId*) (aArg2)) )
hgs
parents:
diff changeset
   709
            {
hgs
parents:
diff changeset
   710
            iMsgListContainer->HandleMsvSessionEventL( aEvent, *selection, !iMceUi->ViewUpdateSuppressionFlag() );
hgs
parents:
diff changeset
   711
            //HandleEntriesDeletedL();
hgs
parents:
diff changeset
   712
            SetMSKButtonL();
hgs
parents:
diff changeset
   713
            //this has been commented due to toolbar not showing up after opening a message and deleting and come back to main view
hgs
parents:
diff changeset
   714
            //UpdateToolbarL();
hgs
parents:
diff changeset
   715
            }
hgs
parents:
diff changeset
   716
hgs
parents:
diff changeset
   717
        }
hgs
parents:
diff changeset
   718
        break;
hgs
parents:
diff changeset
   719
    case EMsvEntriesCreated:    
hgs
parents:
diff changeset
   720
    case EMsvEntriesChanged:
hgs
parents:
diff changeset
   721
        {
hgs
parents:
diff changeset
   722
        const TMsvId parentId = (*(TMsvId*) aArg2);
hgs
parents:
diff changeset
   723
        CMsvEntrySelection* selection = (CMsvEntrySelection*) aArg1;
hgs
parents:
diff changeset
   724
        MessageViewHandleEntriesCreatedOrChangedL( parentId, selection);
hgs
parents:
diff changeset
   725
        if ( iMsgListContainer )
hgs
parents:
diff changeset
   726
            {
hgs
parents:
diff changeset
   727
            // Set the middle soft key
hgs
parents:
diff changeset
   728
            SetMSKButtonL();
hgs
parents:
diff changeset
   729
            
hgs
parents:
diff changeset
   730
            if ( iFolderId == (*(TMsvId*) (aArg2)) )
hgs
parents:
diff changeset
   731
                {
hgs
parents:
diff changeset
   732
            	iMsgListContainer->HandleMsvSessionEventL( aEvent, *selection, !iMceUi->ViewUpdateSuppressionFlag() );
hgs
parents:
diff changeset
   733
                }
hgs
parents:
diff changeset
   734
            
hgs
parents:
diff changeset
   735
            // Imap: Refresh list         
hgs
parents:
diff changeset
   736
            if ( iMsgListContainer->FolderEntry().iMtm == KSenduiMtmImap4Uid )
hgs
parents:
diff changeset
   737
                {
hgs
parents:
diff changeset
   738
                iMsgListContainer->SetRect( ClientRect() );
hgs
parents:
diff changeset
   739
                iMsgListContainer->DrawDeferred();
hgs
parents:
diff changeset
   740
                }
hgs
parents:
diff changeset
   741
            }
hgs
parents:
diff changeset
   742
        }
hgs
parents:
diff changeset
   743
        
hgs
parents:
diff changeset
   744
        break;
hgs
parents:
diff changeset
   745
    case EMsvEntriesMoved:
hgs
parents:
diff changeset
   746
        {
hgs
parents:
diff changeset
   747
        const TMsvId parentId = (*(TMsvId*) aArg2);
hgs
parents:
diff changeset
   748
        CMsvEntrySelection* selection = (CMsvEntrySelection*) aArg1;
hgs
parents:
diff changeset
   749
        if ( iMsgListContainer )
hgs
parents:
diff changeset
   750
            {
hgs
parents:
diff changeset
   751
            // Set the middle soft key
hgs
parents:
diff changeset
   752
            SetMSKButtonL();
hgs
parents:
diff changeset
   753
            if ( parentId == iFolderId )
hgs
parents:
diff changeset
   754
                {
hgs
parents:
diff changeset
   755
                iMsgListContainer->HandleMsvSessionEventL( EMsvEntriesCreated, *selection, !iMceUi->ViewUpdateSuppressionFlag() );
hgs
parents:
diff changeset
   756
                }
hgs
parents:
diff changeset
   757
            else if ( (*(TMsvId*) (aArg3)) == iFolderId )
hgs
parents:
diff changeset
   758
                {
hgs
parents:
diff changeset
   759
                iMsgListContainer->HandleMsvSessionEventL( EMsvEntriesDeleted, *selection, !iMceUi->ViewUpdateSuppressionFlag() );
hgs
parents:
diff changeset
   760
                }
hgs
parents:
diff changeset
   761
hgs
parents:
diff changeset
   762
            // Folder string update for one row list
hgs
parents:
diff changeset
   763
            if (iMsgListContainer->MceListId() == EMceListTypeOneRow )
hgs
parents:
diff changeset
   764
                {
hgs
parents:
diff changeset
   765
                TMsvId service;
hgs
parents:
diff changeset
   766
                TMsvEntry toFolder;
hgs
parents:
diff changeset
   767
                if ( iSession->GetEntry( parentId, service, toFolder ) == KErrNone )
hgs
parents:
diff changeset
   768
                    {            
hgs
parents:
diff changeset
   769
                    // Is target folder subfolder for current folder
hgs
parents:
diff changeset
   770
                    if ( toFolder.Parent() == iFolderId )    
hgs
parents:
diff changeset
   771
                        {
hgs
parents:
diff changeset
   772
                        CMsvEntrySelection* targetSelection = new(ELeave) CMsvEntrySelection();
hgs
parents:
diff changeset
   773
                        CleanupStack::PushL( targetSelection );
hgs
parents:
diff changeset
   774
                        targetSelection->AppendL( parentId );
hgs
parents:
diff changeset
   775
                        // Send EMsvEntriesChanged to one row message list container
hgs
parents:
diff changeset
   776
                        // with move target folder information to get folder string updated
hgs
parents:
diff changeset
   777
                        iMsgListContainer->HandleMsvSessionEventL( EMsvEntriesChanged, *targetSelection,
hgs
parents:
diff changeset
   778
                                                             !iMceUi->ViewUpdateSuppressionFlag() );
hgs
parents:
diff changeset
   779
                        CleanupStack::PopAndDestroy( targetSelection );
hgs
parents:
diff changeset
   780
                        }
hgs
parents:
diff changeset
   781
                    }
hgs
parents:
diff changeset
   782
                }         
hgs
parents:
diff changeset
   783
            }
hgs
parents:
diff changeset
   784
        }
hgs
parents:
diff changeset
   785
        
hgs
parents:
diff changeset
   786
        break;
hgs
parents:
diff changeset
   787
hgs
parents:
diff changeset
   788
    case EMsvCloseSession:
hgs
parents:
diff changeset
   789
        {        
hgs
parents:
diff changeset
   790
        if (iMsgListContainer)
hgs
parents:
diff changeset
   791
            {
hgs
parents:
diff changeset
   792
//TODO
hgs
parents:
diff changeset
   793
//            CMceMessageListItemArray* listArray = iMsgListContainer->ListItems();
hgs
parents:
diff changeset
   794
//            listArray->HandleSessionEventL( aEvent, aArg1, aArg2, aArg3 );
hgs
parents:
diff changeset
   795
            }
hgs
parents:
diff changeset
   796
hgs
parents:
diff changeset
   797
        iSession->RemoveObserver( *this );        
hgs
parents:
diff changeset
   798
        }
hgs
parents:
diff changeset
   799
        break;
hgs
parents:
diff changeset
   800
hgs
parents:
diff changeset
   801
    case EMsvMediaChanged:
hgs
parents:
diff changeset
   802
        {
hgs
parents:
diff changeset
   803
        if (iMceUi->MceViewActive(EMceMessageViewActive) )
hgs
parents:
diff changeset
   804
            {            
hgs
parents:
diff changeset
   805
hgs
parents:
diff changeset
   806
            // this is because DoDeactivate saves current index and when returning to main view
hgs
parents:
diff changeset
   807
            // we want to reset current index
hgs
parents:
diff changeset
   808
            iMceUi->SetCustomControl(1);
hgs
parents:
diff changeset
   809
            iSelectedIndex = 0;
hgs
parents:
diff changeset
   810
            iMainViewListView.SetSelectedFolderId( iFolderId );
hgs
parents:
diff changeset
   811
            iMceUi->ActivateLocalViewL( KMceMainViewListViewId );
hgs
parents:
diff changeset
   812
            iMceUi->RemoveTabs();         
hgs
parents:
diff changeset
   813
            }
hgs
parents:
diff changeset
   814
        }
hgs
parents:
diff changeset
   815
        break;
hgs
parents:
diff changeset
   816
        
hgs
parents:
diff changeset
   817
    default:
hgs
parents:
diff changeset
   818
        break;
hgs
parents:
diff changeset
   819
hgs
parents:
diff changeset
   820
        };
hgs
parents:
diff changeset
   821
    UpdateViewL();
hgs
parents:
diff changeset
   822
    MCELOGGER_WRITE_TIMESTAMP("CMceMessageListView::HandleSessionEventL() end");
hgs
parents:
diff changeset
   823
    }
hgs
parents:
diff changeset
   824
hgs
parents:
diff changeset
   825
// ----------------------------------------------------
hgs
parents:
diff changeset
   826
// CMceMessageListView::ProcessCommandL
hgs
parents:
diff changeset
   827
// ----------------------------------------------------
hgs
parents:
diff changeset
   828
void CMceMessageListView::ProcessCommandL(TInt aCommand)
hgs
parents:
diff changeset
   829
    {
hgs
parents:
diff changeset
   830
    iMceUi->CancelMailboxTimer();
hgs
parents:
diff changeset
   831
    MCELOGGER_WRITE("CMceMessageListView::ProcessCommandL");
hgs
parents:
diff changeset
   832
hgs
parents:
diff changeset
   833
    if ( ( !iMessageViewerLauncher || ( iMessageViewerLauncher && !iMessageViewerLauncher->IsActive() ) ) &&
hgs
parents:
diff changeset
   834
         !iMceUi->IsEditorOpen() )
hgs
parents:
diff changeset
   835
        {
hgs
parents:
diff changeset
   836
        if ( aCommand == EAknSoftkeyContextOptions )
hgs
parents:
diff changeset
   837
            {
hgs
parents:
diff changeset
   838
            // Handle the context sensitive menu
hgs
parents:
diff changeset
   839
            iFetchMenuSelectionKeyPressed = ETrue;
hgs
parents:
diff changeset
   840
            iHideExitCommand = ETrue;
hgs
parents:
diff changeset
   841
            aCommand = EAknSoftkeyOptions;
hgs
parents:
diff changeset
   842
            if(iFolderId == KMsvGlobalOutBoxIndexEntryIdValue)
hgs
parents:
diff changeset
   843
                iContextCommand = ETrue;
hgs
parents:
diff changeset
   844
			MenuBar()->SetMenuType(CEikMenuBar::EMenuContext);
hgs
parents:
diff changeset
   845
            }
hgs
parents:
diff changeset
   846
        CAknView::ProcessCommandL( aCommand );
hgs
parents:
diff changeset
   847
        MenuBar()->SetMenuType(CEikMenuBar::EMenuOptions);
hgs
parents:
diff changeset
   848
        }
hgs
parents:
diff changeset
   849
#ifdef _DEBUG
hgs
parents:
diff changeset
   850
    else
hgs
parents:
diff changeset
   851
        {
hgs
parents:
diff changeset
   852
        MCELOGGER_WRITE("MCE: Editor is open so don't call CAknView::ProcessCommandL");
hgs
parents:
diff changeset
   853
        }
hgs
parents:
diff changeset
   854
#endif
hgs
parents:
diff changeset
   855
    }
hgs
parents:
diff changeset
   856
hgs
parents:
diff changeset
   857
hgs
parents:
diff changeset
   858
// ----------------------------------------------------
hgs
parents:
diff changeset
   859
// CMceMessageListView::Id
hgs
parents:
diff changeset
   860
// ----------------------------------------------------
hgs
parents:
diff changeset
   861
TUid CMceMessageListView::Id() const
hgs
parents:
diff changeset
   862
    {
hgs
parents:
diff changeset
   863
    return KMceMessageListViewId;
hgs
parents:
diff changeset
   864
    }
hgs
parents:
diff changeset
   865
hgs
parents:
diff changeset
   866
// ----------------------------------------------------
hgs
parents:
diff changeset
   867
// CMceMessageListView::HandleListBoxEventL
hgs
parents:
diff changeset
   868
// ----------------------------------------------------
hgs
parents:
diff changeset
   869
void CMceMessageListView::HandleListBoxEventL(
hgs
parents:
diff changeset
   870
    CEikListBox* /*aListBox*/,
hgs
parents:
diff changeset
   871
    TListBoxEvent aEventType )
hgs
parents:
diff changeset
   872
    {
hgs
parents:
diff changeset
   873
    switch(aEventType)
hgs
parents:
diff changeset
   874
        {
hgs
parents:
diff changeset
   875
        case EEventEnterKeyPressed:
hgs
parents:
diff changeset
   876
        case EEventItemSingleClicked:
hgs
parents:
diff changeset
   877
            iMceUi->CancelMailboxTimer();
hgs
parents:
diff changeset
   878
            HandleOpenL();
hgs
parents:
diff changeset
   879
        break;
hgs
parents:
diff changeset
   880
        default:
hgs
parents:
diff changeset
   881
        break;
hgs
parents:
diff changeset
   882
        }
hgs
parents:
diff changeset
   883
    }
hgs
parents:
diff changeset
   884
hgs
parents:
diff changeset
   885
// ----------------------------------------------------
hgs
parents:
diff changeset
   886
// CMceMessageListView::HandleCloseL
hgs
parents:
diff changeset
   887
// ----------------------------------------------------
hgs
parents:
diff changeset
   888
void CMceMessageListView::HandleCloseL( )
hgs
parents:
diff changeset
   889
    {
hgs
parents:
diff changeset
   890
    // this is because DoDeactivate saves current index and when returning to main view
hgs
parents:
diff changeset
   891
    // we want to reset current index
hgs
parents:
diff changeset
   892
    iSelectedIndex = 0;
hgs
parents:
diff changeset
   893
    if ( iMsgListContainer->FolderEntry().iMtm == KUidMsvLocalServiceMtm )
hgs
parents:
diff changeset
   894
        {
hgs
parents:
diff changeset
   895
        iMainViewListView.SetSelectedFolderId( iFolderId );
hgs
parents:
diff changeset
   896
        }
hgs
parents:
diff changeset
   897
    else
hgs
parents:
diff changeset
   898
        {
hgs
parents:
diff changeset
   899
        // we are closing service and we should inform main view that
hgs
parents:
diff changeset
   900
        // service id, not folder id.
hgs
parents:
diff changeset
   901
        iMainViewListView.SetSelectedFolderId( iMsgListContainer->FolderEntry().iServiceId );
hgs
parents:
diff changeset
   902
        }
hgs
parents:
diff changeset
   903
    iMceUi->ActivateLocalViewL( KMceMainViewListViewId );
hgs
parents:
diff changeset
   904
    iMceUi->RemoveTabs();
hgs
parents:
diff changeset
   905
    }
hgs
parents:
diff changeset
   906
hgs
parents:
diff changeset
   907
// ----------------------------------------------------
hgs
parents:
diff changeset
   908
// CMceMessageListView::ChangeFolderL
hgs
parents:
diff changeset
   909
// ----------------------------------------------------
hgs
parents:
diff changeset
   910
void CMceMessageListView::ChangeFolderL( TBool aOpenParent )
hgs
parents:
diff changeset
   911
    {
hgs
parents:
diff changeset
   912
    if ( aOpenParent && FolderOpenedL() )
hgs
parents:
diff changeset
   913
        {
hgs
parents:
diff changeset
   914
        iMceUi->RemoveFolderTabs();
hgs
parents:
diff changeset
   915
        ChangeFolderAndRefreshListboxL( iMsgListContainer->FolderEntry().Parent() );
hgs
parents:
diff changeset
   916
        const TMsvEntry& entry = iMsgListContainer->FolderEntry();
hgs
parents:
diff changeset
   917
        const TMsvId entryId = entry.Id();
hgs
parents:
diff changeset
   918
        if ( entry.Parent() == KMsvRootIndexEntryId ||
hgs
parents:
diff changeset
   919
            ( entry.iMtm == KSenduiMtmImap4Uid && !IsImapFolderOpenL( ) ) ||
hgs
parents:
diff changeset
   920
            entryId == KMsvGlobalInBoxIndexEntryId ||
hgs
parents:
diff changeset
   921
            entryId == KMsvGlobalOutBoxIndexEntryId ||
hgs
parents:
diff changeset
   922
            entryId == KMsvDraftEntryId ||
hgs
parents:
diff changeset
   923
            entryId == KMsvSentEntryId ||
hgs
parents:
diff changeset
   924
            entryId == KMceDocumentsEntryId ) 
hgs
parents:
diff changeset
   925
            {
hgs
parents:
diff changeset
   926
            iMceUi->ShowTabsL( entry.Id() );
hgs
parents:
diff changeset
   927
            }  
hgs
parents:
diff changeset
   928
        }
hgs
parents:
diff changeset
   929
    else if ( !aOpenParent )
hgs
parents:
diff changeset
   930
        {
hgs
parents:
diff changeset
   931
        iMceUi->RemoveTabs();
hgs
parents:
diff changeset
   932
        TMsvEntry child;
hgs
parents:
diff changeset
   933
        TMsvId serviceId;
hgs
parents:
diff changeset
   934
        TInt error = iSession->GetEntry( iMsgListContainer->CurrentItemId(), serviceId, child );
hgs
parents:
diff changeset
   935
        if ( error == KErrNone )
hgs
parents:
diff changeset
   936
            {
hgs
parents:
diff changeset
   937
            if ( child.Id() == KMceTemplatesEntryId )
hgs
parents:
diff changeset
   938
                {
hgs
parents:
diff changeset
   939
hgs
parents:
diff changeset
   940
				TInt r = RProperty::Define( KPSUidMuiu, KMceTemplatesDialog, RProperty::EInt );
hgs
parents:
diff changeset
   941
				if ( r != KErrAlreadyExists )
hgs
parents:
diff changeset
   942
				    {
hgs
parents:
diff changeset
   943
				    User::LeaveIfError( r );
hgs
parents:
diff changeset
   944
				    }
hgs
parents:
diff changeset
   945
				if ( iCurrentListType == EMceListTypeOneRow)
hgs
parents:
diff changeset
   946
				    {
hgs
parents:
diff changeset
   947
				    r = RProperty::Set( KPSUidMuiu, KMceTemplatesDialog, MceTemplatesDialogOpen );
hgs
parents:
diff changeset
   948
				    }
hgs
parents:
diff changeset
   949
				
hgs
parents:
diff changeset
   950
                if ( CNotepadApi::ExecTemplatesL() == EAknSoftkeyExit )
hgs
parents:
diff changeset
   951
                    {
hgs
parents:
diff changeset
   952
                    iAvkonViewAppUi->ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
   953
                    }
hgs
parents:
diff changeset
   954
hgs
parents:
diff changeset
   955
				if ( iCurrentListType == EMceListTypeOneRow)
hgs
parents:
diff changeset
   956
				    {
hgs
parents:
diff changeset
   957
				    r = RProperty::Set( KPSUidMuiu, KMceTemplatesDialog, MceTemplatesDialogClose );
hgs
parents:
diff changeset
   958
				    }
hgs
parents:
diff changeset
   959
                if ( !(iMceUi->MceViewActive( EMceMainViewActive )))
hgs
parents:
diff changeset
   960
                    iMceUi->ShowTabsL( iMsgListContainer->FolderEntry().Id() );
hgs
parents:
diff changeset
   961
                ListContainer()->DrawDeferred();
hgs
parents:
diff changeset
   962
                }
hgs
parents:
diff changeset
   963
            else if ( child.iType == KUidMsvFolderEntry ||
hgs
parents:
diff changeset
   964
                child.iType == KUidMsvServiceEntry ) // this should not be possible
hgs
parents:
diff changeset
   965
                {
hgs
parents:
diff changeset
   966
                ChangeFolderAndRefreshListboxL( child.Id() );
hgs
parents:
diff changeset
   967
                }
hgs
parents:
diff changeset
   968
            } // end if error == KErrNone
hgs
parents:
diff changeset
   969
        } // else
hgs
parents:
diff changeset
   970
    }
hgs
parents:
diff changeset
   971
hgs
parents:
diff changeset
   972
// ----------------------------------------------------
hgs
parents:
diff changeset
   973
// CMceMessageListView::DynInitMenuPaneL
hgs
parents:
diff changeset
   974
// ----------------------------------------------------
hgs
parents:
diff changeset
   975
hgs
parents:
diff changeset
   976
void CMceMessageListView::DynInitMenuPaneL(
hgs
parents:
diff changeset
   977
    TInt aResourceId,
hgs
parents:
diff changeset
   978
    CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
   979
    {
hgs
parents:
diff changeset
   980
    TInt listPopulated = 1;
hgs
parents:
diff changeset
   981
    //Get the value, accordingly we can dim/undim mark/unmark for one row list only
hgs
parents:
diff changeset
   982
    if ( iCurrentListType == EMceListTypeOneRow )
hgs
parents:
diff changeset
   983
        {
hgs
parents:
diff changeset
   984
        TInt r = RProperty::Get(KPSUidMuiu, KMuiuOneRowListPopulated,listPopulated);
hgs
parents:
diff changeset
   985
        if ( r!= KErrNone )
hgs
parents:
diff changeset
   986
            {
hgs
parents:
diff changeset
   987
            User::LeaveIfError(r);
hgs
parents:
diff changeset
   988
            }
hgs
parents:
diff changeset
   989
        }
hgs
parents:
diff changeset
   990
    if ( !iMceViewActivated )
hgs
parents:
diff changeset
   991
        {
hgs
parents:
diff changeset
   992
        return;
hgs
parents:
diff changeset
   993
        }
hgs
parents:
diff changeset
   994
        
hgs
parents:
diff changeset
   995
    if ( !iAiwServiceHandler )
hgs
parents:
diff changeset
   996
		{
hgs
parents:
diff changeset
   997
		iAiwServiceHandler = CAiwServiceHandler::NewL();
hgs
parents:
diff changeset
   998
		}
hgs
parents:
diff changeset
   999
		
hgs
parents:
diff changeset
  1000
	if ( !iListViewFlags.MceFlag(EMceUiFlagsMainViewAiwCreated) )
hgs
parents:
diff changeset
  1001
		{
hgs
parents:
diff changeset
  1002
		iAiwServiceHandler->AttachMenuL( R_MCE_FOLDER_MENU, R_AIWMCE_INTEREST );
hgs
parents:
diff changeset
  1003
		iListViewFlags.SetMceFlag(EMceUiFlagsMainViewAiwCreated);
hgs
parents:
diff changeset
  1004
		}
hgs
parents:
diff changeset
  1005
hgs
parents:
diff changeset
  1006
    if (iAiwServiceHandler->HandleSubmenuL(*aMenuPane))
hgs
parents:
diff changeset
  1007
		{
hgs
parents:
diff changeset
  1008
		return;
hgs
parents:
diff changeset
  1009
		}
hgs
parents:
diff changeset
  1010
        
hgs
parents:
diff changeset
  1011
    switch ( aResourceId )
hgs
parents:
diff changeset
  1012
        {
hgs
parents:
diff changeset
  1013
        case R_MCE_FOLDER_MENU:
hgs
parents:
diff changeset
  1014
            aMenuPane->SetItemDimmed( EAknCmdHelp,
hgs
parents:
diff changeset
  1015
                !FeatureManager::FeatureSupported( KFeatureIdHelp ) );
hgs
parents:
diff changeset
  1016
hgs
parents:
diff changeset
  1017
            iMsgListContainer->MarkItemSelectionL();
hgs
parents:
diff changeset
  1018
            if ( !iHideExitCommand &&
hgs
parents:
diff changeset
  1019
                 !iMsgListContainer->DisplayOptionsMenuFromSelectionKey() &&
hgs
parents:
diff changeset
  1020
                 iMsgListContainer->CurrentItemType() == CMceMessageListContainerBase::EMessageListItemMsvItem
hgs
parents:
diff changeset
  1021
               )
hgs
parents:
diff changeset
  1022
                {
hgs
parents:
diff changeset
  1023
                iMceUi->DynInitMenuPaneL( aResourceId, aMenuPane );
hgs
parents:
diff changeset
  1024
                }
hgs
parents:
diff changeset
  1025
            // MMS.Content.Upload
hgs
parents:
diff changeset
  1026
            aMenuPane->SetItemDimmed( EMceCommandMMSContentUpload, !FeatureManager::FeatureSupported(KFeatureIdSenduiMmsUpload) );
hgs
parents:
diff changeset
  1027
            if ( !iMceUi->NumUploadServices() )
hgs
parents:
diff changeset
  1028
            	{
hgs
parents:
diff changeset
  1029
            	aMenuPane->SetItemDimmed( EMceCommandMMSContentUpload, ETrue );
hgs
parents:
diff changeset
  1030
            	}
hgs
parents:
diff changeset
  1031
hgs
parents:
diff changeset
  1032
            FolderMenuL( aMenuPane );
hgs
parents:
diff changeset
  1033
            
hgs
parents:
diff changeset
  1034
            //multiselection, handle MMMbox item
hgs
parents:
diff changeset
  1035
            iMceUi->AddMultiselectionMTMFunctionsL(*aMenuPane, EAknCmdOpen);
hgs
parents:
diff changeset
  1036
hgs
parents:
diff changeset
  1037
            // NSS Fetch the MessageReader menu
hgs
parents:
diff changeset
  1038
            if ( iAiwServiceHandler->IsAiwMenu( aResourceId ) )
hgs
parents:
diff changeset
  1039
                {
hgs
parents:
diff changeset
  1040
                /** 
hgs
parents:
diff changeset
  1041
				 * @todo Fetching and packing message list is duplicated in 
hgs
parents:
diff changeset
  1042
				 * HandleCommandL and in DynInitMenuPaneL. should be extracted
hgs
parents:
diff changeset
  1043
				 * into a separate method. I don't dare to introduce a new 
hgs
parents:
diff changeset
  1044
				 * method. Let the mce team care about it
hgs
parents:
diff changeset
  1045
				 */
hgs
parents:
diff changeset
  1046
				CMsvEntrySelection* itemIds = iMsgListContainer->CurrentItemSelectionL();
hgs
parents:
diff changeset
  1047
				CleanupStack::PushL( itemIds );
hgs
parents:
diff changeset
  1048
				
hgs
parents:
diff changeset
  1049
				CAiwGenericParamList& inList = iAiwServiceHandler->InParamListL();
hgs
parents:
diff changeset
  1050
				
hgs
parents:
diff changeset
  1051
				for ( TInt i( 0 ); i < itemIds->Count(); i++ ) 
hgs
parents:
diff changeset
  1052
				    {
hgs
parents:
diff changeset
  1053
				    TMsvId itemId ( (*itemIds)[i] );
hgs
parents:
diff changeset
  1054
				    TMsvEntry currentEntry;
hgs
parents:
diff changeset
  1055
				    TMsvId serviceId; // not used here but needed by GetEntry function
hgs
parents:
diff changeset
  1056
				    
hgs
parents:
diff changeset
  1057
				    if ( iSession->GetEntry( itemId, serviceId, currentEntry ) == KErrNone ) 
hgs
parents:
diff changeset
  1058
                        {
hgs
parents:
diff changeset
  1059
                        // Pack the TMsvEntry into the TAiwVariant and add it to the param list
hgs
parents:
diff changeset
  1060
                        TPckgC<TMsvEntry> packedEntry ( currentEntry );
hgs
parents:
diff changeset
  1061
                        
hgs
parents:
diff changeset
  1062
                        // does not copy the data
hgs
parents:
diff changeset
  1063
                        TAiwVariant varEntry( packedEntry ); 
hgs
parents:
diff changeset
  1064
                        TAiwGenericParam parEntry( EGenericParamUnspecified, varEntry );
hgs
parents:
diff changeset
  1065
                        
hgs
parents:
diff changeset
  1066
                        // copies the data
hgs
parents:
diff changeset
  1067
                        inList.AppendL( parEntry );  
hgs
parents:
diff changeset
  1068
                        }  // if
hgs
parents:
diff changeset
  1069
                        // message reader wise ignore the error
hgs
parents:
diff changeset
  1070
                        // @todo log the error according to the mce team standards
hgs
parents:
diff changeset
  1071
				    }  // for
hgs
parents:
diff changeset
  1072
				
hgs
parents:
diff changeset
  1073
				CleanupStack::PopAndDestroy( itemIds );
hgs
parents:
diff changeset
  1074
								
hgs
parents:
diff changeset
  1075
				iAiwServiceHandler->InitializeMenuPaneL( *aMenuPane, aResourceId, 
hgs
parents:
diff changeset
  1076
				                                         EMceCmdFirstMessageReaderAiwCommand,
hgs
parents:
diff changeset
  1077
				                                         inList,
hgs
parents:
diff changeset
  1078
				                                         EFalse,
hgs
parents:
diff changeset
  1079
				                                         ETrue);
hgs
parents:
diff changeset
  1080
                HandleContainerOptionsMenuL( aMenuPane );				                                         
hgs
parents:
diff changeset
  1081
                }
hgs
parents:
diff changeset
  1082
            
hgs
parents:
diff changeset
  1083
            break;
hgs
parents:
diff changeset
  1084
hgs
parents:
diff changeset
  1085
        case R_MCE_FETCH_MENU:
hgs
parents:
diff changeset
  1086
            FetchMenuL( aMenuPane );
hgs
parents:
diff changeset
  1087
            break;        
hgs
parents:
diff changeset
  1088
hgs
parents:
diff changeset
  1089
        case R_MCE_SENDVIA_MENU:
hgs
parents:
diff changeset
  1090
            aMenuPane->SetItemDimmed( EMceCmdSendViaIr,
hgs
parents:
diff changeset
  1091
                !FeatureManager::FeatureSupported( KFeatureIdIrda ) );
hgs
parents:
diff changeset
  1092
            aMenuPane->SetItemDimmed( EMceCmdSendViaBt,
hgs
parents:
diff changeset
  1093
                !FeatureManager::FeatureSupported( KFeatureIdBt ) ); 
hgs
parents:
diff changeset
  1094
            
hgs
parents:
diff changeset
  1095
            break;
hgs
parents:
diff changeset
  1096
hgs
parents:
diff changeset
  1097
        case R_MCE_SORT_BY_MENU:
hgs
parents:
diff changeset
  1098
            {
hgs
parents:
diff changeset
  1099
            if ( ( iFolderId != KMsvSentEntryId  ) &&
hgs
parents:
diff changeset
  1100
                 ( iFolderId != KMsvDraftEntryId ) &&
hgs
parents:
diff changeset
  1101
                 ( iFolderId != KMsvGlobalOutBoxIndexEntryId) )
hgs
parents:
diff changeset
  1102
                {
hgs
parents:
diff changeset
  1103
                aMenuPane->DeleteMenuItem(EMceCmdSortByRecipient);
hgs
parents:
diff changeset
  1104
                aMenuPane->SetItemDimmed( EMceCmdSortBySender, EFalse );
hgs
parents:
diff changeset
  1105
                }
hgs
parents:
diff changeset
  1106
            else
hgs
parents:
diff changeset
  1107
                {
hgs
parents:
diff changeset
  1108
                aMenuPane->DeleteMenuItem(EMceCmdSortBySender);
hgs
parents:
diff changeset
  1109
                aMenuPane->SetItemDimmed( EMceCmdSortByRecipient, EFalse );    
hgs
parents:
diff changeset
  1110
                }            
hgs
parents:
diff changeset
  1111
hgs
parents:
diff changeset
  1112
            if ( IsMSKMailBox() ) 
hgs
parents:
diff changeset
  1113
                {
hgs
parents:
diff changeset
  1114
                // Mail folder, only single message type
hgs
parents:
diff changeset
  1115
                aMenuPane->SetItemDimmed( EMceCmdSortByType, ETrue );
hgs
parents:
diff changeset
  1116
                }
hgs
parents:
diff changeset
  1117
            else
hgs
parents:
diff changeset
  1118
                {
hgs
parents:
diff changeset
  1119
                // Inbox etc.
hgs
parents:
diff changeset
  1120
                aMenuPane->SetItemDimmed( EMceCmdSortByType, EFalse );
hgs
parents:
diff changeset
  1121
                }
hgs
parents:
diff changeset
  1122
            aMenuPane->SetItemButtonState( iSortOrder, EEikMenuItemSymbolOn );
hgs
parents:
diff changeset
  1123
            break;
hgs
parents:
diff changeset
  1124
            }
hgs
parents:
diff changeset
  1125
        case R_AVKON_MENUPANE_MARK_MULTIPLE:
hgs
parents:
diff changeset
  1126
            {
hgs
parents:
diff changeset
  1127
            TInt count = iMsgListContainer->SelectionCount();
hgs
parents:
diff changeset
  1128
            TInt pos( 0 );
hgs
parents:
diff changeset
  1129
			// if Mark all exists and also total selection count and folder count is equal
hgs
parents:
diff changeset
  1130
			// Message list count meaning all items in the list are marked, hence dim mark all item
hgs
parents:
diff changeset
  1131
            if ( aMenuPane->MenuItemExists( EAknCmdMarkingModeMarkAll, pos ) &&
hgs
parents:
diff changeset
  1132
                    ( count + SubfolderCount() ) == iMsgListContainer->Count() )
hgs
parents:
diff changeset
  1133
               {
hgs
parents:
diff changeset
  1134
               //if all selected, disable mark all
hgs
parents:
diff changeset
  1135
               aMenuPane->SetItemDimmed( EAknCmdMarkingModeMarkAll, ETrue );
hgs
parents:
diff changeset
  1136
               } 
hgs
parents:
diff changeset
  1137
            break;
hgs
parents:
diff changeset
  1138
            }
hgs
parents:
diff changeset
  1139
        case R_MCE_NEW_MESSAGE_MENU:
hgs
parents:
diff changeset
  1140
        default:
hgs
parents:
diff changeset
  1141
            iMceUi->DynInitMenuPaneL( aResourceId, aMenuPane );
hgs
parents:
diff changeset
  1142
            iMsgListContainer->SetContainerFlag( EMceOneRowFlagOptionsMenuOpen, ETrue );
hgs
parents:
diff changeset
  1143
            break;
hgs
parents:
diff changeset
  1144
        }
hgs
parents:
diff changeset
  1145
    }
hgs
parents:
diff changeset
  1146
    
hgs
parents:
diff changeset
  1147
// ----------------------------------------------------
hgs
parents:
diff changeset
  1148
// CMceMessageListView::HandleContainerOptionsMenuL
hgs
parents:
diff changeset
  1149
// ----------------------------------------------------
hgs
parents:
diff changeset
  1150
void CMceMessageListView::HandleContainerOptionsMenuL( CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
  1151
    {
hgs
parents:
diff changeset
  1152
    TUint validCommands = iMsgListContainer->OptionsCommandSupported();
hgs
parents:
diff changeset
  1153
    
hgs
parents:
diff changeset
  1154
    aMenuPane->SetItemDimmed( EMceHCListCmdExpand, !(validCommands & CMceMessageListContainerBase::TMessageListCommandExpand ));
hgs
parents:
diff changeset
  1155
    aMenuPane->SetItemDimmed( EMceHCListCmdCollapse1, !(validCommands & CMceMessageListContainerBase::TMessageListCommandCollapse1 ));
hgs
parents:
diff changeset
  1156
    aMenuPane->SetItemDimmed( EMceHCListCmdCollapse2, !(validCommands & CMceMessageListContainerBase::TMessageListCommandCollapse2 ));
hgs
parents:
diff changeset
  1157
    
hgs
parents:
diff changeset
  1158
    }
hgs
parents:
diff changeset
  1159
    
hgs
parents:
diff changeset
  1160
// ----------------------------------------------------
hgs
parents:
diff changeset
  1161
// CMceMessageListView::HandleContainerOptionsCommandL
hgs
parents:
diff changeset
  1162
// ----------------------------------------------------
hgs
parents:
diff changeset
  1163
void CMceMessageListView::HandleContainerOptionsCommandL( TInt aCommand )
hgs
parents:
diff changeset
  1164
    {
hgs
parents:
diff changeset
  1165
    TInt containerCommand = 0;
hgs
parents:
diff changeset
  1166
    switch ( aCommand )
hgs
parents:
diff changeset
  1167
        {
hgs
parents:
diff changeset
  1168
        case EMceHCListCmdExpand:
hgs
parents:
diff changeset
  1169
            containerCommand = CMceMessageListContainerBase::TMessageListCommandExpand;
hgs
parents:
diff changeset
  1170
            break;
hgs
parents:
diff changeset
  1171
        case EMceHCListCmdCollapse:
hgs
parents:
diff changeset
  1172
        case EMceHCListCmdCollapse1:
hgs
parents:
diff changeset
  1173
        case EMceHCListCmdCollapse2:
hgs
parents:
diff changeset
  1174
            containerCommand = CMceMessageListContainerBase::TMessageListCommandCollapse1;
hgs
parents:
diff changeset
  1175
            break;
hgs
parents:
diff changeset
  1176
        default: 
hgs
parents:
diff changeset
  1177
            break;
hgs
parents:
diff changeset
  1178
        }
hgs
parents:
diff changeset
  1179
    if ( containerCommand > 0 )
hgs
parents:
diff changeset
  1180
        {
hgs
parents:
diff changeset
  1181
        iMsgListContainer->HandleOptionsCommandL( containerCommand );
hgs
parents:
diff changeset
  1182
        }
hgs
parents:
diff changeset
  1183
    }
hgs
parents:
diff changeset
  1184
    
hgs
parents:
diff changeset
  1185
hgs
parents:
diff changeset
  1186
// ----------------------------------------------------
hgs
parents:
diff changeset
  1187
// CMceMessageListView::EditEntryL
hgs
parents:
diff changeset
  1188
// ----------------------------------------------------
hgs
parents:
diff changeset
  1189
void CMceMessageListView::EditEntryL()
hgs
parents:
diff changeset
  1190
    {
hgs
parents:
diff changeset
  1191
    if ( iMceUi->IsEditorOpen() )
hgs
parents:
diff changeset
  1192
        {
hgs
parents:
diff changeset
  1193
        MCELOGGER_WRITE("MCE: EditEntry: do not open because already editing one");
hgs
parents:
diff changeset
  1194
        return;
hgs
parents:
diff changeset
  1195
        }
hgs
parents:
diff changeset
  1196
hgs
parents:
diff changeset
  1197
    TMsvId id = iMsgListContainer->CurrentItemId();
hgs
parents:
diff changeset
  1198
    if ( id < KMsvRootIndexEntryId )
hgs
parents:
diff changeset
  1199
        {
hgs
parents:
diff changeset
  1200
        return;
hgs
parents:
diff changeset
  1201
        }
hgs
parents:
diff changeset
  1202
    TMsvEntry currentEntry;
hgs
parents:
diff changeset
  1203
    TMsvId serviceId; // not used here but needed by GetEntry function
hgs
parents:
diff changeset
  1204
    if ( iSession->GetEntry( id, serviceId, currentEntry ) == KErrNone &&
hgs
parents:
diff changeset
  1205
         currentEntry.iType == KUidMsvMessageEntry )
hgs
parents:
diff changeset
  1206
        {
hgs
parents:
diff changeset
  1207
    	if ( (currentEntry.iMtm==KSenduiMtmImap4Uid) || (currentEntry.iMtm==KSenduiMtmPop3Uid) ||
hgs
parents:
diff changeset
  1208
    	 	 (currentEntry.iMtm==KSenduiMtmSyncMLEmailUid)||
hgs
parents:
diff changeset
  1209
    	 	 iMceUi->CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, currentEntry.iMtm ) )
hgs
parents:
diff changeset
  1210
    		{
hgs
parents:
diff changeset
  1211
    		// Mailbox entry
hgs
parents:
diff changeset
  1212
    		if ( currentEntry.Unread() )
hgs
parents:
diff changeset
  1213
    			{
hgs
parents:
diff changeset
  1214
    			// NCN reset, opening the unread entry
hgs
parents:
diff changeset
  1215
    			
hgs
parents:
diff changeset
  1216
    			iMceUi->HandleNotif(iMsgListContainer->FolderEntry().iServiceId);
hgs
parents:
diff changeset
  1217
    			}
hgs
parents:
diff changeset
  1218
    		}
hgs
parents:
diff changeset
  1219
hgs
parents:
diff changeset
  1220
        // just to make sure...
hgs
parents:
diff changeset
  1221
        iMceUi->CancelMailboxTimer();
hgs
parents:
diff changeset
  1222
        iRunningEditFunction = ETrue;
hgs
parents:
diff changeset
  1223
        TRAPD( error, iMceUi->EditMTMEntryL( currentEntry ) );        
hgs
parents:
diff changeset
  1224
        iRunningEditFunction = EFalse;
hgs
parents:
diff changeset
  1225
        User::LeaveIfError( error );
hgs
parents:
diff changeset
  1226
        }
hgs
parents:
diff changeset
  1227
hgs
parents:
diff changeset
  1228
    }
hgs
parents:
diff changeset
  1229
hgs
parents:
diff changeset
  1230
hgs
parents:
diff changeset
  1231
// ----------------------------------------------------
hgs
parents:
diff changeset
  1232
// CMceMessageListView::HandleOpenL
hgs
parents:
diff changeset
  1233
// ----------------------------------------------------
hgs
parents:
diff changeset
  1234
void CMceMessageListView::HandleOpenL()
hgs
parents:
diff changeset
  1235
    {
hgs
parents:
diff changeset
  1236
    if ( !iMsgListContainer->DisplayOptionsMenuFromSelectionKey() )
hgs
parents:
diff changeset
  1237
        {
hgs
parents:
diff changeset
  1238
        CMsvEntrySelection* selection = iMsgListContainer->CurrentItemSelectionRefreshL();
hgs
parents:
diff changeset
  1239
        CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  1240
        iHideExitCommand = EFalse;
hgs
parents:
diff changeset
  1241
        TMsvEntry currentEntry;
hgs
parents:
diff changeset
  1242
        TMsvId serviceId; // not used here but needed by GetEntry function
hgs
parents:
diff changeset
  1243
        if ( selection->Count() &&
hgs
parents:
diff changeset
  1244
            iSession->GetEntry( selection->At(0), serviceId, currentEntry ) == KErrNone )
hgs
parents:
diff changeset
  1245
            {
hgs
parents:
diff changeset
  1246
            switch ( currentEntry.iType.iUid )
hgs
parents:
diff changeset
  1247
                {
hgs
parents:
diff changeset
  1248
                case KUidMsvMessageEntryValue:
hgs
parents:
diff changeset
  1249
                    if (( currentEntry.Parent() != KMsvGlobalOutBoxIndexEntryId) && (iFolderId != KMsvGlobalOutBoxIndexEntryId))
hgs
parents:
diff changeset
  1250
                        {
hgs
parents:
diff changeset
  1251
                        EditEntryL();
hgs
parents:
diff changeset
  1252
                        }
hgs
parents:
diff changeset
  1253
                    else // Open context sensitive menu
hgs
parents:
diff changeset
  1254
                        {
hgs
parents:
diff changeset
  1255
                        ProcessCommandL( EAknSoftkeyContextOptions );
hgs
parents:
diff changeset
  1256
                        }                        
hgs
parents:
diff changeset
  1257
                break;
hgs
parents:
diff changeset
  1258
                case KUidMsvFolderEntryValue:
hgs
parents:
diff changeset
  1259
                    ChangeFolderL();
hgs
parents:
diff changeset
  1260
                break;
hgs
parents:
diff changeset
  1261
                default:
hgs
parents:
diff changeset
  1262
                break;
hgs
parents:
diff changeset
  1263
                }
hgs
parents:
diff changeset
  1264
            }
hgs
parents:
diff changeset
  1265
        CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  1266
        }
hgs
parents:
diff changeset
  1267
    else
hgs
parents:
diff changeset
  1268
        {
hgs
parents:
diff changeset
  1269
        iHideExitCommand = ETrue;
hgs
parents:
diff changeset
  1270
        ProcessCommandL( EAknSoftkeyContextOptions );
hgs
parents:
diff changeset
  1271
        }
hgs
parents:
diff changeset
  1272
    }
hgs
parents:
diff changeset
  1273
hgs
parents:
diff changeset
  1274
// ----------------------------------------------------
hgs
parents:
diff changeset
  1275
// CMceMessageListView::FetchMenuL
hgs
parents:
diff changeset
  1276
// ----------------------------------------------------
hgs
parents:
diff changeset
  1277
void CMceMessageListView::FetchMenuL( CEikMenuPane* aMenuPane ) const
hgs
parents:
diff changeset
  1278
    {
hgs
parents:
diff changeset
  1279
    if ( iMsgListContainer->CurrentItemSelectionCount() == 0 )
hgs
parents:
diff changeset
  1280
        {
hgs
parents:
diff changeset
  1281
        aMenuPane->SetItemDimmed( EMceCmdFetchSelected, ETrue );
hgs
parents:
diff changeset
  1282
        }
hgs
parents:
diff changeset
  1283
    else if ( iFetchMenuSelectionKeyPressed )
hgs
parents:
diff changeset
  1284
        {
hgs
parents:
diff changeset
  1285
        aMenuPane->SetItemDimmed( EMceCmdFetchNew, ETrue );
hgs
parents:
diff changeset
  1286
        aMenuPane->SetItemDimmed( EMceCmdFetchAll, ETrue );
hgs
parents:
diff changeset
  1287
        }
hgs
parents:
diff changeset
  1288
    }
hgs
parents:
diff changeset
  1289
hgs
parents:
diff changeset
  1290
//
hgs
parents:
diff changeset
  1291
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1292
// CMceMessageListView::GetSetRead()
hgs
parents:
diff changeset
  1293
// ----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1294
//
hgs
parents:
diff changeset
  1295
TInt CMceMessageListView::GetSetRead( const CMsvEntrySelection& aEntries )
hgs
parents:
diff changeset
  1296
    {
hgs
parents:
diff changeset
  1297
    TBool allRead = ETrue;
hgs
parents:
diff changeset
  1298
    TBool allUnread = ETrue;
hgs
parents:
diff changeset
  1299
    TMsvId service;
hgs
parents:
diff changeset
  1300
    TMsvEntry tEntry;
hgs
parents:
diff changeset
  1301
hgs
parents:
diff changeset
  1302
    for ( TInt cc=aEntries.Count(); --cc>=0; )
hgs
parents:
diff changeset
  1303
        {
hgs
parents:
diff changeset
  1304
        if ( iSession->GetEntry( 
hgs
parents:
diff changeset
  1305
                aEntries.At( cc ), service, tEntry ) == KErrNone  )
hgs
parents:
diff changeset
  1306
            {
hgs
parents:
diff changeset
  1307
            if ( tEntry.Unread() )
hgs
parents:
diff changeset
  1308
                {
hgs
parents:
diff changeset
  1309
                allRead = EFalse;
hgs
parents:
diff changeset
  1310
                }
hgs
parents:
diff changeset
  1311
            else
hgs
parents:
diff changeset
  1312
                {
hgs
parents:
diff changeset
  1313
                allUnread = EFalse;
hgs
parents:
diff changeset
  1314
                }
hgs
parents:
diff changeset
  1315
            }
hgs
parents:
diff changeset
  1316
        }
hgs
parents:
diff changeset
  1317
hgs
parents:
diff changeset
  1318
    if ( allRead && !allUnread )
hgs
parents:
diff changeset
  1319
        {
hgs
parents:
diff changeset
  1320
        return MessageFolderAllRead;
hgs
parents:
diff changeset
  1321
        }
hgs
parents:
diff changeset
  1322
    else if ( !allRead && allUnread )
hgs
parents:
diff changeset
  1323
        {
hgs
parents:
diff changeset
  1324
        // all unread
hgs
parents:
diff changeset
  1325
        return MessageFolderAllUnread;
hgs
parents:
diff changeset
  1326
        }
hgs
parents:
diff changeset
  1327
    else if ( !allRead && !allUnread )
hgs
parents:
diff changeset
  1328
        {
hgs
parents:
diff changeset
  1329
        // both read and unread
hgs
parents:
diff changeset
  1330
        return MessageFolderReadUnread;
hgs
parents:
diff changeset
  1331
        }
hgs
parents:
diff changeset
  1332
    else
hgs
parents:
diff changeset
  1333
        {
hgs
parents:
diff changeset
  1334
        /* never */
hgs
parents:
diff changeset
  1335
        return MessageFolderReadUnread;
hgs
parents:
diff changeset
  1336
        }
hgs
parents:
diff changeset
  1337
    
hgs
parents:
diff changeset
  1338
    }
hgs
parents:
diff changeset
  1339
    
hgs
parents:
diff changeset
  1340
// ----------------------------------------------------
hgs
parents:
diff changeset
  1341
// CMceMessageListView::FolderMenuL
hgs
parents:
diff changeset
  1342
// ----------------------------------------------------
hgs
parents:
diff changeset
  1343
void CMceMessageListView::FolderMenuL( CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
  1344
    {
hgs
parents:
diff changeset
  1345
    if(iFolderId == KMsvGlobalOutBoxIndexEntryIdValue )
hgs
parents:
diff changeset
  1346
        {
hgs
parents:
diff changeset
  1347
        if(iContextCommand)
hgs
parents:
diff changeset
  1348
            {
hgs
parents:
diff changeset
  1349
            aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, EFalse );
hgs
parents:
diff changeset
  1350
            aMenuPane->SetItemDimmed( EMceCmdOutboxStart, EFalse );
hgs
parents:
diff changeset
  1351
            aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, EFalse );
hgs
parents:
diff changeset
  1352
            aMenuPane->SetItemDimmed( EMceCmdDelete, EFalse );
hgs
parents:
diff changeset
  1353
            iContextCommand = EFalse;
hgs
parents:
diff changeset
  1354
            }
hgs
parents:
diff changeset
  1355
        else
hgs
parents:
diff changeset
  1356
            {
hgs
parents:
diff changeset
  1357
            aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, ETrue );
hgs
parents:
diff changeset
  1358
            aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );
hgs
parents:
diff changeset
  1359
            aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  1360
            aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );       
hgs
parents:
diff changeset
  1361
            }     
hgs
parents:
diff changeset
  1362
        }
hgs
parents:
diff changeset
  1363
    const TInt count = iMsgListContainer->CurrentItemSelectionCount();
hgs
parents:
diff changeset
  1364
    TBool remotemailboxOpened = ( iMsgListContainer->FolderEntry().iMtm == KSenduiMtmImap4Uid
hgs
parents:
diff changeset
  1365
                               || iMsgListContainer->FolderEntry().iMtm == KSenduiMtmPop3Uid );
hgs
parents:
diff changeset
  1366
    
hgs
parents:
diff changeset
  1367
    TBool thirdPartEmail = ( !remotemailboxOpened && 
hgs
parents:
diff changeset
  1368
                             iMceUi->CheckTechnologyTypeFromMtm( 
hgs
parents:
diff changeset
  1369
                             KMailTechnologyTypeUid, 
hgs
parents:
diff changeset
  1370
                             iMsgListContainer->FolderEntry().iMtm ) );
hgs
parents:
diff changeset
  1371
hgs
parents:
diff changeset
  1372
    //Forward is disabled in all folder menus, except is enabled in Sent Items seperately
hgs
parents:
diff changeset
  1373
    aMenuPane->SetItemDimmed( EMceCmdForward, ETrue );
hgs
parents:
diff changeset
  1374
    if ( remotemailboxOpened )
hgs
parents:
diff changeset
  1375
        {
hgs
parents:
diff changeset
  1376
        aMenuPane->SetItemDimmed( EMceCmdMailboxSettings, IsImapFolderOpenL() );
hgs
parents:
diff changeset
  1377
        if ( !IsImapFolderOpenL() )
hgs
parents:
diff changeset
  1378
            {
hgs
parents:
diff changeset
  1379
            aMenuPane->SetItemDimmed( EMceCmdMailboxSettings, iHideExitCommand );
hgs
parents:
diff changeset
  1380
            }
hgs
parents:
diff changeset
  1381
        aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, iHideExitCommand );
hgs
parents:
diff changeset
  1382
        aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, iHideExitCommand );
hgs
parents:
diff changeset
  1383
        aMenuPane->SetItemDimmed( EMceCmdSort, iHideExitCommand );        
hgs
parents:
diff changeset
  1384
        aMenuPane->SetItemDimmed( EMceCmdReply, iHideExitCommand );
hgs
parents:
diff changeset
  1385
        TMsvEntry tempEntry;
hgs
parents:
diff changeset
  1386
        TMsvId serviceId;
hgs
parents:
diff changeset
  1387
        if ( iSession->GetEntry( iMsgListContainer->FolderEntry().iServiceId, serviceId, tempEntry )
hgs
parents:
diff changeset
  1388
            == KErrNone )
hgs
parents:
diff changeset
  1389
            {
hgs
parents:
diff changeset
  1390
            if ( tempEntry.Connected() )
hgs
parents:
diff changeset
  1391
                {
hgs
parents:
diff changeset
  1392
                aMenuPane->SetItemDimmed( EMceCmdConnect, ETrue );               
hgs
parents:
diff changeset
  1393
                aMenuPane->SetItemDimmed( EMceCmdCloseConnection, (iHideExitCommand && count > 0) );
hgs
parents:
diff changeset
  1394
                }
hgs
parents:
diff changeset
  1395
            else
hgs
parents:
diff changeset
  1396
                {
hgs
parents:
diff changeset
  1397
                aMenuPane->SetItemDimmed( EMceCmdCloseConnection, ETrue );
hgs
parents:
diff changeset
  1398
                aMenuPane->SetItemDimmed( EMceCmdConnect, (iHideExitCommand && count > 0) );
hgs
parents:
diff changeset
  1399
                }
hgs
parents:
diff changeset
  1400
            }
hgs
parents:
diff changeset
  1401
        // MMS.Content.Upload
hgs
parents:
diff changeset
  1402
        aMenuPane->SetItemDimmed( EMceCommandMMSContentUpload, ETrue );
hgs
parents:
diff changeset
  1403
        // No move and copy commands for mail messages
hgs
parents:
diff changeset
  1404
        aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  1405
        aMenuPane->SetItemDimmed( EMceCmdCopy, ETrue );
hgs
parents:
diff changeset
  1406
        aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  1407
        }
hgs
parents:
diff changeset
  1408
    else
hgs
parents:
diff changeset
  1409
        {
hgs
parents:
diff changeset
  1410
        aMenuPane->SetItemDimmed( EMceCmdCloseConnection, ETrue );
hgs
parents:
diff changeset
  1411
        aMenuPane->SetItemDimmed( EMceCmdConnect, ETrue );
hgs
parents:
diff changeset
  1412
        aMenuPane->SetItemDimmed( EMceCmdMailboxSettings, ETrue );
hgs
parents:
diff changeset
  1413
   	    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, !iIsUnread );
hgs
parents:
diff changeset
  1414
        }
hgs
parents:
diff changeset
  1415
hgs
parents:
diff changeset
  1416
    if ( iFolderId != KMceDocumentsEntryId )
hgs
parents:
diff changeset
  1417
        {
hgs
parents:
diff changeset
  1418
        // only documents can have create, rename folder menu items
hgs
parents:
diff changeset
  1419
        aMenuPane->SetItemDimmed( EMceCmdNewFolder, ETrue );
hgs
parents:
diff changeset
  1420
        aMenuPane->SetItemDimmed( EMceCmdRenameFolder, ETrue );
hgs
parents:
diff changeset
  1421
        }
hgs
parents:
diff changeset
  1422
    else
hgs
parents:
diff changeset
  1423
        {
hgs
parents:
diff changeset
  1424
        aMenuPane->SetItemDimmed( EMceCmdNewFolder, iHideExitCommand );
hgs
parents:
diff changeset
  1425
        aMenuPane->SetItemDimmed( EMceCmdRenameFolder, iHideExitCommand );
hgs
parents:
diff changeset
  1426
        }
hgs
parents:
diff changeset
  1427
    TInt totalCount = iMsgListContainer->Count();
hgs
parents:
diff changeset
  1428
    TInt subfolderCount = SubfolderCount();
hgs
parents:
diff changeset
  1429
    // TODO: I don't understand this if...
hgs
parents:
diff changeset
  1430
	if ( totalCount != subfolderCount && totalCount - subfolderCount == 1)
hgs
parents:
diff changeset
  1431
		{
hgs
parents:
diff changeset
  1432
		aMenuPane->SetItemDimmed( EMceCmdSort, ETrue ); 	
hgs
parents:
diff changeset
  1433
		}
hgs
parents:
diff changeset
  1434
    if ( iFolderId == KMsvGlobalOutBoxIndexEntryId )
hgs
parents:
diff changeset
  1435
        {
hgs
parents:
diff changeset
  1436
        aMenuPane->SetItemDimmed( EAknCmdMarkingModeEnter, ETrue );
hgs
parents:
diff changeset
  1437
        }
hgs
parents:
diff changeset
  1438
    else if ( count > 0 && totalCount == subfolderCount )
hgs
parents:
diff changeset
  1439
        {
hgs
parents:
diff changeset
  1440
        // only folders in the list, then "Edit" submenu would be empty so delete it
hgs
parents:
diff changeset
  1441
        aMenuPane->SetItemDimmed( EAknCmdMarkingModeEnter, ETrue );
hgs
parents:
diff changeset
  1442
        aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );  
hgs
parents:
diff changeset
  1443
        }
hgs
parents:
diff changeset
  1444
hgs
parents:
diff changeset
  1445
    aMenuPane->SetItemDimmed( EMceCmdExit, iHideExitCommand );
hgs
parents:
diff changeset
  1446
    aMenuPane->SetItemDimmed( EAknCmdOpen, iHideExitCommand );
hgs
parents:
diff changeset
  1447
    aMenuPane->SetItemDimmed( EMceCmdSort, iHideExitCommand );
hgs
parents:
diff changeset
  1448
hgs
parents:
diff changeset
  1449
	if ( IsSyncMl() )
hgs
parents:
diff changeset
  1450
		{
hgs
parents:
diff changeset
  1451
		if ( iMsgListContainer->FolderEntry().iType == KUidMsvServiceEntry )
hgs
parents:
diff changeset
  1452
			{
hgs
parents:
diff changeset
  1453
			// Prepare the menu for the SyncML main folder
hgs
parents:
diff changeset
  1454
			FolderMenuSyncMLMain( aMenuPane );
hgs
parents:
diff changeset
  1455
			}
hgs
parents:
diff changeset
  1456
		else
hgs
parents:
diff changeset
  1457
			{
hgs
parents:
diff changeset
  1458
			// Prepare the menu for the message lists
hgs
parents:
diff changeset
  1459
			FolderMenuSyncMLFolderL( aMenuPane );
hgs
parents:
diff changeset
  1460
			}
hgs
parents:
diff changeset
  1461
		}
hgs
parents:
diff changeset
  1462
	else
hgs
parents:
diff changeset
  1463
		{
hgs
parents:
diff changeset
  1464
		// Show the SyncML command only for the SyncML folder, no other folders
hgs
parents:
diff changeset
  1465
		aMenuPane->SetItemDimmed( EMceCmdAiwPlaceholder, ETrue );
hgs
parents:
diff changeset
  1466
		}
hgs
parents:
diff changeset
  1467
	
hgs
parents:
diff changeset
  1468
    if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
hgs
parents:
diff changeset
  1469
        {
hgs
parents:
diff changeset
  1470
        aMenuPane->SetItemDimmed( EAknCmdHelp, iHideExitCommand );
hgs
parents:
diff changeset
  1471
        }
hgs
parents:
diff changeset
  1472
hgs
parents:
diff changeset
  1473
    TBool hideNewMessageCommand = iHideExitCommand;
hgs
parents:
diff changeset
  1474
    if ( iHideExitCommand && iFolderId == KMsvDraftEntryId )
hgs
parents:
diff changeset
  1475
        {
hgs
parents:
diff changeset
  1476
        hideNewMessageCommand = count > 0;
hgs
parents:
diff changeset
  1477
        }
hgs
parents:
diff changeset
  1478
    if ( !IsSyncMl() )        
hgs
parents:
diff changeset
  1479
        {
hgs
parents:
diff changeset
  1480
        aMenuPane->SetItemDimmed( EMceCmdNewMessage, hideNewMessageCommand );
hgs
parents:
diff changeset
  1481
        }
hgs
parents:
diff changeset
  1482
    if ( count == 0 ) // No items in the list
hgs
parents:
diff changeset
  1483
        {
hgs
parents:
diff changeset
  1484
        // MMS.Content.Upload
hgs
parents:
diff changeset
  1485
        aMenuPane->SetItemDimmed( EMceCommandMMSContentUpload, ETrue );
hgs
parents:
diff changeset
  1486
        FolderMenuNoItemsL( aMenuPane );
hgs
parents:
diff changeset
  1487
        }
hgs
parents:
diff changeset
  1488
    else if ( count == 1 ) // 1 selected from the list
hgs
parents:
diff changeset
  1489
        {
hgs
parents:
diff changeset
  1490
        FolderMenuOneItemL( aMenuPane, remotemailboxOpened, thirdPartEmail );
hgs
parents:
diff changeset
  1491
        }
hgs
parents:
diff changeset
  1492
    else // More than 1 selected from the list
hgs
parents:
diff changeset
  1493
        {
hgs
parents:
diff changeset
  1494
        // MMS.Content.Upload
hgs
parents:
diff changeset
  1495
        aMenuPane->SetItemDimmed( EMceCommandMMSContentUpload, ETrue );
hgs
parents:
diff changeset
  1496
hgs
parents:
diff changeset
  1497
        CMsvEntrySelection* entries = ListContainer()->CurrentItemSelectionL();
hgs
parents:
diff changeset
  1498
        CleanupStack::PushL( entries );
hgs
parents:
diff changeset
  1499
hgs
parents:
diff changeset
  1500
        TInt setRead = GetSetRead( *entries );
hgs
parents:
diff changeset
  1501
        FolderMenuManyItemsL( aMenuPane, remotemailboxOpened, thirdPartEmail, setRead );
hgs
parents:
diff changeset
  1502
hgs
parents:
diff changeset
  1503
        if ( remotemailboxOpened || 
hgs
parents:
diff changeset
  1504
                SyncMlOutboxInbox( KMsvGlobalInBoxIndexEntryId ) || 
hgs
parents:
diff changeset
  1505
                SyncMlOutboxInbox( KMsvDraftEntryId ) || 
hgs
parents:
diff changeset
  1506
                SyncMlOutboxInbox( KMsvSentEntryId  ) )
hgs
parents:
diff changeset
  1507
            {
hgs
parents:
diff changeset
  1508
            switch ( GetDeleteFlagStatusL( entries ) )
hgs
parents:
diff changeset
  1509
                {
hgs
parents:
diff changeset
  1510
                case MessageFolderAllDelete:
hgs
parents:
diff changeset
  1511
                    aMenuPane->SetItemDimmed( EMceCmdUndelete, ETrue );
hgs
parents:
diff changeset
  1512
                    aMenuPane->SetItemDimmed( EMceCmdDelete, EFalse );
hgs
parents:
diff changeset
  1513
                    break;
hgs
parents:
diff changeset
  1514
                case MessageFolderAllUnDelete:
hgs
parents:
diff changeset
  1515
                    aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  1516
                    aMenuPane->SetItemDimmed( EMceCmdUndelete, EFalse );
hgs
parents:
diff changeset
  1517
                    break;
hgs
parents:
diff changeset
  1518
                case MessageFolderDeleteUnDelete:
hgs
parents:
diff changeset
  1519
                    aMenuPane->SetItemDimmed( EMceCmdUndelete, EFalse );
hgs
parents:
diff changeset
  1520
                    aMenuPane->SetItemDimmed( EMceCmdDelete, EFalse );
hgs
parents:
diff changeset
  1521
                    break;
hgs
parents:
diff changeset
  1522
                default:
hgs
parents:
diff changeset
  1523
                    break;
hgs
parents:
diff changeset
  1524
                }
hgs
parents:
diff changeset
  1525
            }
hgs
parents:
diff changeset
  1526
hgs
parents:
diff changeset
  1527
        // MMS notifications cannot be moved            
hgs
parents:
diff changeset
  1528
        CBaseMtmUiData* uiData = NULL;
hgs
parents:
diff changeset
  1529
        uiData = iMceUi->GetMtmUiDataL( KUidMsgMMSNotification );// NULL check
hgs
parents:
diff changeset
  1530
        TMsvId id;
hgs
parents:
diff changeset
  1531
        TMsvId service;
hgs
parents:
diff changeset
  1532
        TMsvEntry tEntry; 
hgs
parents:
diff changeset
  1533
        TInt mmsCount = 0;
hgs
parents:
diff changeset
  1534
        TInt mmsNotDeleteCount = 0;
hgs
parents:
diff changeset
  1535
            
hgs
parents:
diff changeset
  1536
        for ( TInt cc=entries->Count(); --cc>=0; )
hgs
parents:
diff changeset
  1537
            {
hgs
parents:
diff changeset
  1538
            id = entries->At(cc);
hgs
parents:
diff changeset
  1539
            if ( iSession->GetEntry( id, service, tEntry ) == KErrNone  )
hgs
parents:
diff changeset
  1540
                {
hgs
parents:
diff changeset
  1541
                if ( tEntry.iMtm == KUidMsgMMSNotification ) 
hgs
parents:
diff changeset
  1542
                    {
hgs
parents:
diff changeset
  1543
                    mmsCount++;
hgs
parents:
diff changeset
  1544
                    //Coverty fix,NULL RETURN, http://ousrv057/cov.cgi?cid=101801 
hgs
parents:
diff changeset
  1545
                    if ( uiData )
hgs
parents:
diff changeset
  1546
                        {
hgs
parents:
diff changeset
  1547
                        if ( uiData->OperationSupportedL( KMtmUiFunctionDeleteMessage, tEntry ) )
hgs
parents:
diff changeset
  1548
                            {
hgs
parents:
diff changeset
  1549
                            //MMS notification delete this entry not supported
hgs
parents:
diff changeset
  1550
                            mmsNotDeleteCount ++;
hgs
parents:
diff changeset
  1551
                            }
hgs
parents:
diff changeset
  1552
                        }
hgs
parents:
diff changeset
  1553
                     }
hgs
parents:
diff changeset
  1554
                }
hgs
parents:
diff changeset
  1555
            }
hgs
parents:
diff changeset
  1556
        if ( mmsCount == count )
hgs
parents:
diff changeset
  1557
            {
hgs
parents:
diff changeset
  1558
            //if only mms notifications, then move cannot be done
hgs
parents:
diff changeset
  1559
            aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  1560
            if ( mmsCount == mmsNotDeleteCount )
hgs
parents:
diff changeset
  1561
                {
hgs
parents:
diff changeset
  1562
                aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  1563
                }                
hgs
parents:
diff changeset
  1564
            }
hgs
parents:
diff changeset
  1565
hgs
parents:
diff changeset
  1566
        CleanupStack::PopAndDestroy( entries );
hgs
parents:
diff changeset
  1567
        }
hgs
parents:
diff changeset
  1568
hgs
parents:
diff changeset
  1569
    if( iReadUnread )    
hgs
parents:
diff changeset
  1570
    {
hgs
parents:
diff changeset
  1571
    aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, ETrue );
hgs
parents:
diff changeset
  1572
    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, ETrue );
hgs
parents:
diff changeset
  1573
    }
hgs
parents:
diff changeset
  1574
    
hgs
parents:
diff changeset
  1575
    iFetchMenuSelectionKeyPressed = iHideExitCommand;
hgs
parents:
diff changeset
  1576
    iHideExitCommand = EFalse;
hgs
parents:
diff changeset
  1577
    }
hgs
parents:
diff changeset
  1578
hgs
parents:
diff changeset
  1579
// ----------------------------------------------------
hgs
parents:
diff changeset
  1580
// CMceMessageListView::FolderMenuNoItemsL
hgs
parents:
diff changeset
  1581
// ----------------------------------------------------
hgs
parents:
diff changeset
  1582
void CMceMessageListView::FolderMenuNoItemsL( CEikMenuPane* aMenuPane ) const
hgs
parents:
diff changeset
  1583
    {
hgs
parents:
diff changeset
  1584
    aMenuPane->SetItemDimmed( EAknCmdOpen, ETrue );
hgs
parents:
diff changeset
  1585
    aMenuPane->SetItemDimmed( EAknCmdMarkingModeEnter, ETrue );
hgs
parents:
diff changeset
  1586
    aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  1587
    aMenuPane->SetItemDimmed( EMceCmdUndelete, ETrue );
hgs
parents:
diff changeset
  1588
    aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  1589
    aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  1590
    aMenuPane->SetItemDimmed( EMceCmdCopy, ETrue );
hgs
parents:
diff changeset
  1591
    
hgs
parents:
diff changeset
  1592
    // "Write New Message" enabled for options and context sensitive menu
hgs
parents:
diff changeset
  1593
    // in case of empty list in Mail For Exchange mailbox
hgs
parents:
diff changeset
  1594
    if ( iMsgListContainer->FolderEntry().iMtm == KMceMtmMailForExchangeUid )
hgs
parents:
diff changeset
  1595
        {
hgs
parents:
diff changeset
  1596
        aMenuPane->SetItemDimmed( EMceCmdNewMessage, EFalse );
hgs
parents:
diff changeset
  1597
        }
hgs
parents:
diff changeset
  1598
    
hgs
parents:
diff changeset
  1599
    if ( !( iMsgListContainer->FolderEntry().iMtm == KSenduiMtmImap4Uid || 
hgs
parents:
diff changeset
  1600
            iMsgListContainer->FolderEntry().iMtm == KSenduiMtmPop3Uid ) )
hgs
parents:
diff changeset
  1601
        {
hgs
parents:
diff changeset
  1602
        aMenuPane->SetItemDimmed( EMceCmdFetch, ETrue );
hgs
parents:
diff changeset
  1603
        }
hgs
parents:
diff changeset
  1604
    else
hgs
parents:
diff changeset
  1605
        {
hgs
parents:
diff changeset
  1606
        TMsvEntry tempEntry;
hgs
parents:
diff changeset
  1607
        TMsvId serviceId;
hgs
parents:
diff changeset
  1608
        if ( iSession->GetEntry( iMsgListContainer->FolderEntry().iServiceId, serviceId, tempEntry ) == KErrNone )
hgs
parents:
diff changeset
  1609
            {
hgs
parents:
diff changeset
  1610
        	if ( tempEntry.Connected() )
hgs
parents:
diff changeset
  1611
        	    {
hgs
parents:
diff changeset
  1612
        		aMenuPane->SetItemDimmed( EMceCmdFetch, ETrue );               
hgs
parents:
diff changeset
  1613
        	    }
hgs
parents:
diff changeset
  1614
            }
hgs
parents:
diff changeset
  1615
        }
hgs
parents:
diff changeset
  1616
    aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, ETrue );
hgs
parents:
diff changeset
  1617
    aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );
hgs
parents:
diff changeset
  1618
    aMenuPane->SetItemDimmed( EMceCmdSendVia, ETrue );
hgs
parents:
diff changeset
  1619
    aMenuPane->SetItemDimmed( EMceCmdReply, ETrue );
hgs
parents:
diff changeset
  1620
    aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, ETrue );
hgs
parents:
diff changeset
  1621
    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, ETrue );
hgs
parents:
diff changeset
  1622
    aMenuPane->SetItemDimmed( EMceCmdMarkAsReadMsg, ETrue );
hgs
parents:
diff changeset
  1623
    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadMsg, ETrue );
hgs
parents:
diff changeset
  1624
    aMenuPane->SetItemDimmed( EMceCmdMarkAsReadMsgs, ETrue );
hgs
parents:
diff changeset
  1625
    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadMsgs, ETrue );
hgs
parents:
diff changeset
  1626
    aMenuPane->SetItemDimmed( EMceCmdMarkAsReadEmails, ETrue );
hgs
parents:
diff changeset
  1627
    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadEmails, ETrue );
hgs
parents:
diff changeset
  1628
    aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );
hgs
parents:
diff changeset
  1629
    }
hgs
parents:
diff changeset
  1630
hgs
parents:
diff changeset
  1631
// ----------------------------------------------------
hgs
parents:
diff changeset
  1632
// CMceMessageListView::FolderMenuOneItemL
hgs
parents:
diff changeset
  1633
// ----------------------------------------------------
hgs
parents:
diff changeset
  1634
void CMceMessageListView::FolderMenuOneItemL( CEikMenuPane* aMenuPane, 
hgs
parents:
diff changeset
  1635
    TBool aRemoteMailboxOpened, 
hgs
parents:
diff changeset
  1636
    TBool aThirdPartEmail  )
hgs
parents:
diff changeset
  1637
    {
hgs
parents:
diff changeset
  1638
    if ( iMsgListContainer->CurrentItemType() != CMceMessageListContainerBase::EMessageListItemMsvItem )
hgs
parents:
diff changeset
  1639
        {
hgs
parents:
diff changeset
  1640
        aMenuPane->SetItemDimmed( EAknCmdOpen, ETrue );
hgs
parents:
diff changeset
  1641
        aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  1642
        aMenuPane->SetItemDimmed( EMceCmdRenameFolder, ETrue );               
hgs
parents:
diff changeset
  1643
        aMenuPane->SetItemDimmed( EMceCmdCopy, ETrue );
hgs
parents:
diff changeset
  1644
        aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  1645
        aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, ETrue );
hgs
parents:
diff changeset
  1646
        aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );
hgs
parents:
diff changeset
  1647
        aMenuPane->SetItemDimmed( EMceCmdSendVia, ETrue );
hgs
parents:
diff changeset
  1648
        aMenuPane->SetItemDimmed( EMceCmdReply, ETrue );
hgs
parents:
diff changeset
  1649
        aMenuPane->SetItemDimmed( EMceCmdFetch, !aRemoteMailboxOpened );
hgs
parents:
diff changeset
  1650
        DimReadUnreadOptionsMenu( aMenuPane );
hgs
parents:
diff changeset
  1651
hgs
parents:
diff changeset
  1652
        if ( iMsgListContainer->CurrentItemType() == CMceMessageListContainerBase::EMessageListItemSubtitle )
hgs
parents:
diff changeset
  1653
            {
hgs
parents:
diff changeset
  1654
            CMsvEntrySelection* entriesInNode = iMsgListContainer->CurrentItemSelectionL();
hgs
parents:
diff changeset
  1655
            CleanupStack::PushL( entriesInNode );
hgs
parents:
diff changeset
  1656
            if ( entriesInNode->Count() > 0 )
hgs
parents:
diff changeset
  1657
                {
hgs
parents:
diff changeset
  1658
                switch ( GetDeleteFlagStatusL( entriesInNode ) )
hgs
parents:
diff changeset
  1659
                    {
hgs
parents:
diff changeset
  1660
                    case MessageFolderAllUnDelete:
hgs
parents:
diff changeset
  1661
                        aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  1662
                        aMenuPane->SetItemDimmed( EMceCmdUndelete, EFalse );
hgs
parents:
diff changeset
  1663
                        break;
hgs
parents:
diff changeset
  1664
                    case MessageFolderAllDelete:
hgs
parents:
diff changeset
  1665
                    case MessageFolderDeleteUnDelete:
hgs
parents:
diff changeset
  1666
                        aMenuPane->SetItemDimmed( EMceCmdUndelete, ETrue );
hgs
parents:
diff changeset
  1667
                        aMenuPane->SetItemDimmed( EMceCmdDelete, EFalse );
hgs
parents:
diff changeset
  1668
                        break;
hgs
parents:
diff changeset
  1669
                    default:
hgs
parents:
diff changeset
  1670
                        break;
hgs
parents:
diff changeset
  1671
                    }
hgs
parents:
diff changeset
  1672
hgs
parents:
diff changeset
  1673
                TInt setRead = GetSetRead( *entriesInNode );
hgs
parents:
diff changeset
  1674
                TMsvId currentFolderId = iFolderId;
hgs
parents:
diff changeset
  1675
            
hgs
parents:
diff changeset
  1676
                // Set Mark as Read/Unread Options menu 
hgs
parents:
diff changeset
  1677
                if ( ( currentFolderId == KMceDocumentsEntryId  ||
hgs
parents:
diff changeset
  1678
                       currentFolderId == KMsvGlobalInBoxIndexEntryId || 
hgs
parents:
diff changeset
  1679
                       iMsgListContainer->FolderEntry().Parent() == KMceDocumentsEntryId ) )
hgs
parents:
diff changeset
  1680
                    {
hgs
parents:
diff changeset
  1681
                    SetReadUnreadOptionsMenu( aMenuPane, !KIsEmail, setRead );
hgs
parents:
diff changeset
  1682
                    }
hgs
parents:
diff changeset
  1683
                else if( aRemoteMailboxOpened || aThirdPartEmail )
hgs
parents:
diff changeset
  1684
                    {
hgs
parents:
diff changeset
  1685
                    SetReadUnreadOptionsMenu( aMenuPane, KIsEmail, setRead );
hgs
parents:
diff changeset
  1686
                    }        
hgs
parents:
diff changeset
  1687
                }
hgs
parents:
diff changeset
  1688
            CleanupStack::PopAndDestroy( entriesInNode );
hgs
parents:
diff changeset
  1689
            }
hgs
parents:
diff changeset
  1690
        else
hgs
parents:
diff changeset
  1691
            {
hgs
parents:
diff changeset
  1692
            aMenuPane->SetItemDimmed( EMceCmdUndelete, !aRemoteMailboxOpened  );        
hgs
parents:
diff changeset
  1693
            }
hgs
parents:
diff changeset
  1694
hgs
parents:
diff changeset
  1695
        // Disable Mark as read/unread if focus on subtitle
hgs
parents:
diff changeset
  1696
        if ( iMsgListContainer->CurrentItemType() != CMceMessageListContainerBase::EMessageListItemSubtitle )
hgs
parents:
diff changeset
  1697
            {
hgs
parents:
diff changeset
  1698
            aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, !aRemoteMailboxOpened  );
hgs
parents:
diff changeset
  1699
            aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, !aRemoteMailboxOpened  );
hgs
parents:
diff changeset
  1700
            }
hgs
parents:
diff changeset
  1701
        TMsvId currentFolderId = iFolderId;
hgs
parents:
diff changeset
  1702
        // Drafts does not have sort
hgs
parents:
diff changeset
  1703
        if ( currentFolderId == KMsvDraftEntryId )
hgs
parents:
diff changeset
  1704
            {
hgs
parents:
diff changeset
  1705
            aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );
hgs
parents:
diff changeset
  1706
            }
hgs
parents:
diff changeset
  1707
        return;
hgs
parents:
diff changeset
  1708
        }
hgs
parents:
diff changeset
  1709
        
hgs
parents:
diff changeset
  1710
    // CurrentItemSelectionL() collects currently focused item if there is no marked one
hgs
parents:
diff changeset
  1711
    // For marked items, check iMsgListContainer->DisplayOptionsMenuFromSelectionKey()
hgs
parents:
diff changeset
  1712
    CMsvEntrySelection* selection = iMsgListContainer->CurrentItemSelectionL();
hgs
parents:
diff changeset
  1713
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  1714
    TMsvEntry currentEntry;
hgs
parents:
diff changeset
  1715
    TMsvId serviceId;
hgs
parents:
diff changeset
  1716
    if ( iSession->GetEntry( selection->At(0), serviceId, currentEntry )
hgs
parents:
diff changeset
  1717
        == KErrNone || iMceUi->GetMsgDeletedStatus())
hgs
parents:
diff changeset
  1718
        {        
hgs
parents:
diff changeset
  1719
        DimReadUnreadOptionsMenu ( aMenuPane );
hgs
parents:
diff changeset
  1720
        if ( currentEntry.iType == KUidMsvFolderEntry )
hgs
parents:
diff changeset
  1721
            {
hgs
parents:
diff changeset
  1722
            aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  1723
                
hgs
parents:
diff changeset
  1724
            if ( MceUtils::IsEntryFixed( currentEntry.Id() ) )
hgs
parents:
diff changeset
  1725
                {
hgs
parents:
diff changeset
  1726
                aMenuPane->SetItemDimmed( EMceCmdRenameFolder, ETrue );               
hgs
parents:
diff changeset
  1727
                }
hgs
parents:
diff changeset
  1728
            if ( aRemoteMailboxOpened )
hgs
parents:
diff changeset
  1729
                {
hgs
parents:
diff changeset
  1730
                aMenuPane->SetItemDimmed( EMceCmdFetch, ETrue );
hgs
parents:
diff changeset
  1731
                aMenuPane->SetItemDimmed( EMceCmdUndelete, ETrue );
hgs
parents:
diff changeset
  1732
                aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  1733
                aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );
hgs
parents:
diff changeset
  1734
                aMenuPane->SetItemDimmed( EMceCmdCopy, ETrue );
hgs
parents:
diff changeset
  1735
                }
hgs
parents:
diff changeset
  1736
            // MMS.Content.Upload
hgs
parents:
diff changeset
  1737
            aMenuPane->SetItemDimmed( EMceCommandMMSContentUpload, ETrue );
hgs
parents:
diff changeset
  1738
            } // end folder
hgs
parents:
diff changeset
  1739
        else
hgs
parents:
diff changeset
  1740
            {
hgs
parents:
diff changeset
  1741
            // not folder so delete "Rename"
hgs
parents:
diff changeset
  1742
            aMenuPane->SetItemDimmed( EMceCmdRenameFolder, ETrue );
hgs
parents:
diff changeset
  1743
hgs
parents:
diff changeset
  1744
            // MMS.Content.Upload
hgs
parents:
diff changeset
  1745
            if ( currentEntry.iMtm.iUid != KSenduiMtmMmsUidValue )
hgs
parents:
diff changeset
  1746
                {
hgs
parents:
diff changeset
  1747
                aMenuPane->SetItemDimmed( EMceCommandMMSContentUpload, ETrue );
hgs
parents:
diff changeset
  1748
                }
hgs
parents:
diff changeset
  1749
            }
hgs
parents:
diff changeset
  1750
hgs
parents:
diff changeset
  1751
        if ( IsSyncMl() )
hgs
parents:
diff changeset
  1752
            {
hgs
parents:
diff changeset
  1753
            if ( iMceUi->CheckCommandAvailableL( EMceCmdUndelete, currentEntry ) )
hgs
parents:
diff changeset
  1754
                {
hgs
parents:
diff changeset
  1755
                aMenuPane->SetItemDimmed( EMceCmdUndelete, ETrue );
hgs
parents:
diff changeset
  1756
                }
hgs
parents:
diff changeset
  1757
            else
hgs
parents:
diff changeset
  1758
                {
hgs
parents:
diff changeset
  1759
                aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  1760
                }
hgs
parents:
diff changeset
  1761
hgs
parents:
diff changeset
  1762
            // Sync: remove New Message, Open, Reply and Sort from menu if item marked
hgs
parents:
diff changeset
  1763
            if ( iMsgListContainer->DisplayOptionsMenuFromSelectionKey() )
hgs
parents:
diff changeset
  1764
                {
hgs
parents:
diff changeset
  1765
                aMenuPane->SetItemDimmed( EMceCmdReply, ETrue );
hgs
parents:
diff changeset
  1766
                aMenuPane->SetItemDimmed( EAknCmdOpen, ETrue );
hgs
parents:
diff changeset
  1767
                aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );                
hgs
parents:
diff changeset
  1768
                aMenuPane->SetItemDimmed( EMceCmdNewMessage, ETrue );
hgs
parents:
diff changeset
  1769
                }
hgs
parents:
diff changeset
  1770
            else
hgs
parents:
diff changeset
  1771
                {
hgs
parents:
diff changeset
  1772
                if ( SyncMlOutboxInbox( KMsvGlobalInBoxIndexEntryId ) )
hgs
parents:
diff changeset
  1773
                    {
hgs
parents:
diff changeset
  1774
                    aMenuPane->SetItemDimmed( EMceCmdReply, 
hgs
parents:
diff changeset
  1775
                         iMceUi->CheckCommandAvailableL( EMceCmdReply, currentEntry ) );
hgs
parents:
diff changeset
  1776
                    aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, !currentEntry.Unread() );
hgs
parents:
diff changeset
  1777
                    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, currentEntry.Unread() );
hgs
parents:
diff changeset
  1778
                    }                
hgs
parents:
diff changeset
  1779
                }               
hgs
parents:
diff changeset
  1780
            
hgs
parents:
diff changeset
  1781
            CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  1782
            return;
hgs
parents:
diff changeset
  1783
            }  
hgs
parents:
diff changeset
  1784
hgs
parents:
diff changeset
  1785
        TMsvId currentFolderId = iFolderId;
hgs
parents:
diff changeset
  1786
                               
hgs
parents:
diff changeset
  1787
        // Forward is enabled in sent item folder.
hgs
parents:
diff changeset
  1788
        if ( currentFolderId == KMsvSentEntryId )               
hgs
parents:
diff changeset
  1789
        	{
hgs
parents:
diff changeset
  1790
        	SetForwardMenuL( aMenuPane, currentEntry );	    	
hgs
parents:
diff changeset
  1791
        	}        
hgs
parents:
diff changeset
  1792
        	
hgs
parents:
diff changeset
  1793
        //reply is enabled in Inbox,Remote mailbox and in Document folder
hgs
parents:
diff changeset
  1794
        if ( currentFolderId == KMsvDraftEntryId ||
hgs
parents:
diff changeset
  1795
            currentFolderId == KMsvGlobalOutBoxIndexEntryId ||
hgs
parents:
diff changeset
  1796
            currentFolderId == KMsvSentEntryId ||
hgs
parents:
diff changeset
  1797
            currentFolderId == KMceTemplatesEntryId )
hgs
parents:
diff changeset
  1798
            {
hgs
parents:
diff changeset
  1799
            //reply is disabled in drafts, sent, outbox and templates folder
hgs
parents:
diff changeset
  1800
            aMenuPane->SetItemDimmed( EMceCmdReply, ETrue );
hgs
parents:
diff changeset
  1801
            
hgs
parents:
diff changeset
  1802
            if ( currentEntry.iMtm == KUidMsgMMSNotification )
hgs
parents:
diff changeset
  1803
                {
hgs
parents:
diff changeset
  1804
                aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  1805
                }
hgs
parents:
diff changeset
  1806
            else if ( currentEntry.iMtm.iUid==KSenduiMtmImap4UidValue ||
hgs
parents:
diff changeset
  1807
				 	  currentEntry.iMtm.iUid==KSenduiMtmPop3UidValue ||
hgs
parents:
diff changeset
  1808
				 	  currentEntry.iMtm.iUid==KSenduiMtmSmtpUidValue )
hgs
parents:
diff changeset
  1809
            	{
hgs
parents:
diff changeset
  1810
            	// No copy or move commands for the mail messages
hgs
parents:
diff changeset
  1811
				aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  1812
				aMenuPane->SetItemDimmed( EMceCmdCopy, ETrue );				
hgs
parents:
diff changeset
  1813
            	}
hgs
parents:
diff changeset
  1814
            }
hgs
parents:
diff changeset
  1815
        else
hgs
parents:
diff changeset
  1816
            {
hgs
parents:
diff changeset
  1817
            if ( iMsgListContainer->IsItemFolder( currentEntry.Id() ) 
hgs
parents:
diff changeset
  1818
                || iMceUi->IsMailSetToBeDeletedFromServerL( currentEntry.Id() )
hgs
parents:
diff changeset
  1819
                || iMsgListContainer->MarkedItemsCount() > 0 ) 
hgs
parents:
diff changeset
  1820
                { 
hgs
parents:
diff changeset
  1821
                // Reply is disabled for folder or 
hgs
parents:
diff changeset
  1822
                // when mailbox is not connected and the message is set to be deleted from the server
hgs
parents:
diff changeset
  1823
                aMenuPane->SetItemDimmed( EMceCmdReply, ETrue );
hgs
parents:
diff changeset
  1824
                }
hgs
parents:
diff changeset
  1825
            else
hgs
parents:
diff changeset
  1826
                {
hgs
parents:
diff changeset
  1827
                aMenuPane->SetItemDimmed( EMceCmdReply, 
hgs
parents:
diff changeset
  1828
                     iMceUi->CheckCommandAvailableL( EMceCmdReply, currentEntry ) );
hgs
parents:
diff changeset
  1829
                }
hgs
parents:
diff changeset
  1830
            }
hgs
parents:
diff changeset
  1831
hgs
parents:
diff changeset
  1832
        if ( currentFolderId != KMsvGlobalOutBoxIndexEntryId )
hgs
parents:
diff changeset
  1833
            {
hgs
parents:
diff changeset
  1834
            TBool selectionKeyPressed = iMsgListContainer->DisplayOptionsMenuFromSelectionKey();
hgs
parents:
diff changeset
  1835
hgs
parents:
diff changeset
  1836
            if ( iMceUi->IsMailSetToBeDeletedFromServerL( currentEntry.Id() ) )
hgs
parents:
diff changeset
  1837
                { 
hgs
parents:
diff changeset
  1838
                // Open, Fetch and Delete is disabled 
hgs
parents:
diff changeset
  1839
                // when mailbox is not connected and the message is set to be deleted from the server
hgs
parents:
diff changeset
  1840
                aMenuPane->SetItemDimmed( EAknCmdOpen, ETrue );
hgs
parents:
diff changeset
  1841
                aMenuPane->SetItemDimmed( EMceCmdFetch, ETrue );
hgs
parents:
diff changeset
  1842
                aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  1843
                }
hgs
parents:
diff changeset
  1844
            else
hgs
parents:
diff changeset
  1845
                {
hgs
parents:
diff changeset
  1846
                aMenuPane->SetItemDimmed( EAknCmdOpen, selectionKeyPressed );
hgs
parents:
diff changeset
  1847
                }
hgs
parents:
diff changeset
  1848
hgs
parents:
diff changeset
  1849
            if ( ( currentFolderId == KMsvGlobalInBoxIndexEntryId ) &&
hgs
parents:
diff changeset
  1850
                ( currentEntry.iMtm == KUidMsgMMSNotification ) )  
hgs
parents:
diff changeset
  1851
                {
hgs
parents:
diff changeset
  1852
                aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  1853
                //check also open               
hgs
parents:
diff changeset
  1854
                CBaseMtmUiData* uiData = iMceUi->GetMtmUiDataL( KUidMsgMMSNotification );
hgs
parents:
diff changeset
  1855
                // Coverty change, NULL Return, http://ousrv057/cov.cgi?cid=101800
hgs
parents:
diff changeset
  1856
                if ( uiData )
hgs
parents:
diff changeset
  1857
                    {
hgs
parents:
diff changeset
  1858
                    aMenuPane->SetItemDimmed( EMceCmdDelete, 
hgs
parents:
diff changeset
  1859
                     uiData->OperationSupportedL( KMtmUiFunctionDeleteMessage, currentEntry ) );
hgs
parents:
diff changeset
  1860
                    }                 
hgs
parents:
diff changeset
  1861
                }
hgs
parents:
diff changeset
  1862
hgs
parents:
diff changeset
  1863
            aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, ETrue );
hgs
parents:
diff changeset
  1864
            aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );
hgs
parents:
diff changeset
  1865
            aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  1866
            if ( currentEntry.iMtm != KSenduiMtmIrUid &&
hgs
parents:
diff changeset
  1867
                 currentEntry.iMtm != KSenduiMtmBtUid )
hgs
parents:
diff changeset
  1868
                {
hgs
parents:
diff changeset
  1869
                aMenuPane->SetItemDimmed( EMceCmdSendVia, ETrue );
hgs
parents:
diff changeset
  1870
                }
hgs
parents:
diff changeset
  1871
            else
hgs
parents:
diff changeset
  1872
                {
hgs
parents:
diff changeset
  1873
                if ( selectionKeyPressed )
hgs
parents:
diff changeset
  1874
                    {
hgs
parents:
diff changeset
  1875
                    aMenuPane->SetItemDimmed( EMceCmdSendVia, ETrue );
hgs
parents:
diff changeset
  1876
                    }
hgs
parents:
diff changeset
  1877
                else
hgs
parents:
diff changeset
  1878
                    {
hgs
parents:
diff changeset
  1879
                    TRAPD( error, HandleSendViaMenuItemL( currentEntry.Id(), aMenuPane ) );
hgs
parents:
diff changeset
  1880
                    if ( error != KErrNone )
hgs
parents:
diff changeset
  1881
                        {
hgs
parents:
diff changeset
  1882
                        aMenuPane->SetItemDimmed( EMceCmdSendVia, ETrue );
hgs
parents:
diff changeset
  1883
                        }
hgs
parents:
diff changeset
  1884
                    }
hgs
parents:
diff changeset
  1885
                }
hgs
parents:
diff changeset
  1886
            }
hgs
parents:
diff changeset
  1887
        else
hgs
parents:
diff changeset
  1888
            {
hgs
parents:
diff changeset
  1889
            // Outbox, MMS.Content.Upload
hgs
parents:
diff changeset
  1890
            if ( currentEntry.iBioType == KUidMsgSubTypeMmsUpload.iUid )
hgs
parents:
diff changeset
  1891
                {
hgs
parents:
diff changeset
  1892
                aMenuPane->SetItemDimmed( EMceCommandMMSContentUpload, ETrue );
hgs
parents:
diff changeset
  1893
                }
hgs
parents:
diff changeset
  1894
hgs
parents:
diff changeset
  1895
            // outbox does not have open
hgs
parents:
diff changeset
  1896
            aMenuPane->SetItemDimmed( EAknCmdOpen, ETrue );
hgs
parents:
diff changeset
  1897
            TBool deleteStart = EFalse;
hgs
parents:
diff changeset
  1898
            TBool deleteSuspend = EFalse;
hgs
parents:
diff changeset
  1899
            switch ( currentEntry.SendingState() )
hgs
parents:
diff changeset
  1900
                {                
hgs
parents:
diff changeset
  1901
                case KMsvSendStateResend:                    
hgs
parents:
diff changeset
  1902
                    if ( currentEntry.iMtm == KUidMsgMMSNotification )
hgs
parents:
diff changeset
  1903
                        {                        
hgs
parents:
diff changeset
  1904
                        deleteStart = ETrue;
hgs
parents:
diff changeset
  1905
                        deleteSuspend = ETrue;
hgs
parents:
diff changeset
  1906
                        }
hgs
parents:
diff changeset
  1907
                    //go through
hgs
parents:
diff changeset
  1908
                case KMsvSendStateScheduled:                
hgs
parents:
diff changeset
  1909
                    break;
hgs
parents:
diff changeset
  1910
hgs
parents:
diff changeset
  1911
                case KMsvSendStateWaiting:
hgs
parents:
diff changeset
  1912
                    {
hgs
parents:
diff changeset
  1913
                    if ( currentEntry.iMtm == KSenduiMtmSmsUid ||
hgs
parents:
diff changeset
  1914
                        currentEntry.iMtm == KSenduiMtmMmsUid )
hgs
parents:
diff changeset
  1915
                        {
hgs
parents:
diff changeset
  1916
                        // disable 'Start' option to waiting SMS and 
hgs
parents:
diff changeset
  1917
                        // waiting MMS
hgs
parents:
diff changeset
  1918
                        aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );
hgs
parents:
diff changeset
  1919
                        }
hgs
parents:
diff changeset
  1920
hgs
parents:
diff changeset
  1921
                    if ( currentEntry.iMtm == KUidMsgMMSNotification )
hgs
parents:
diff changeset
  1922
                        {   
hgs
parents:
diff changeset
  1923
                        aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, ETrue );
hgs
parents:
diff changeset
  1924
                        aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );
hgs
parents:
diff changeset
  1925
                        }
hgs
parents:
diff changeset
  1926
                    break;
hgs
parents:
diff changeset
  1927
                    }
hgs
parents:
diff changeset
  1928
hgs
parents:
diff changeset
  1929
                case KMsvSendStateFailed:
hgs
parents:
diff changeset
  1930
                    if ( currentEntry.iMtm == KUidMsgMMSNotification )
hgs
parents:
diff changeset
  1931
                        {                         
hgs
parents:
diff changeset
  1932
                        aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );
hgs
parents:
diff changeset
  1933
                        }
hgs
parents:
diff changeset
  1934
                    //go through
hgs
parents:
diff changeset
  1935
                case KMsvSendStateSuspended:
hgs
parents:
diff changeset
  1936
                    if ( currentEntry.iMtm == KUidMsgMMSNotification )
hgs
parents:
diff changeset
  1937
                        {                        
hgs
parents:
diff changeset
  1938
                        deleteStart = ETrue;                        
hgs
parents:
diff changeset
  1939
                        }
hgs
parents:
diff changeset
  1940
                    //go through
hgs
parents:
diff changeset
  1941
                case KMsvSendStateUponRequest:
hgs
parents:
diff changeset
  1942
                    deleteSuspend = ETrue;
hgs
parents:
diff changeset
  1943
                    break;
hgs
parents:
diff changeset
  1944
hgs
parents:
diff changeset
  1945
                case KMsvSendStateSending:
hgs
parents:
diff changeset
  1946
                    aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  1947
                    aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  1948
                    // go through
hgs
parents:
diff changeset
  1949
                case KMsvSendStateSent:
hgs
parents:
diff changeset
  1950
                    deleteStart = ETrue;
hgs
parents:
diff changeset
  1951
                    break;
hgs
parents:
diff changeset
  1952
                case KMsvSendStateUnknown:
hgs
parents:
diff changeset
  1953
                case KMsvSendStateNotApplicable:
hgs
parents:
diff changeset
  1954
                default:
hgs
parents:
diff changeset
  1955
                    deleteSuspend = ETrue;
hgs
parents:
diff changeset
  1956
                    deleteStart = ETrue;
hgs
parents:
diff changeset
  1957
                    break;
hgs
parents:
diff changeset
  1958
                }
hgs
parents:
diff changeset
  1959
hgs
parents:
diff changeset
  1960
            if ( currentEntry.Connected() ||
hgs
parents:
diff changeset
  1961
                 deleteStart )
hgs
parents:
diff changeset
  1962
                {
hgs
parents:
diff changeset
  1963
                aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );
hgs
parents:
diff changeset
  1964
                if ( currentEntry.iMtm == KSenduiMtmSmsUid ||
hgs
parents:
diff changeset
  1965
                     currentEntry.iMtm == KSenduiMtmMmsUid ||
hgs
parents:
diff changeset
  1966
                     currentEntry.iMtm == KSenduiMtmIrUid||
hgs
parents:
diff changeset
  1967
                     currentEntry.iMtm == KSenduiMtmBtUid||
hgs
parents:
diff changeset
  1968
                     currentEntry.iMtm == KUidMsgMMSNotification )
hgs
parents:
diff changeset
  1969
                    {
hgs
parents:
diff changeset
  1970
                    aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, ETrue );
hgs
parents:
diff changeset
  1971
hgs
parents:
diff changeset
  1972
                    //if message has no status, do not disable 'move to drafts'
hgs
parents:
diff changeset
  1973
                    if ( currentEntry.SendingState() != KMsvSendStateUnknown)
hgs
parents:
diff changeset
  1974
                        {		
hgs
parents:
diff changeset
  1975
                        aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  1976
                        }
hgs
parents:
diff changeset
  1977
                    
hgs
parents:
diff changeset
  1978
                    if ( ( currentEntry.SendingState() != KMsvSendStateSent ) &&
hgs
parents:
diff changeset
  1979
                        ( ( currentEntry.iMtm == KSenduiMtmSmsUid ) ||
hgs
parents:
diff changeset
  1980
                        ( currentEntry.iMtm == KSenduiMtmMmsUid ) ) )
hgs
parents:
diff changeset
  1981
                        {
hgs
parents:
diff changeset
  1982
                        aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  1983
                        }
hgs
parents:
diff changeset
  1984
                    }
hgs
parents:
diff changeset
  1985
                }
hgs
parents:
diff changeset
  1986
            if ( deleteSuspend )
hgs
parents:
diff changeset
  1987
                {
hgs
parents:
diff changeset
  1988
                aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, ETrue );
hgs
parents:
diff changeset
  1989
                }
hgs
parents:
diff changeset
  1990
            aMenuPane->SetItemDimmed( EMceCmdSendVia, ETrue );
hgs
parents:
diff changeset
  1991
            if ( iMsgListContainer->Count() > 1 )
hgs
parents:
diff changeset
  1992
                {
hgs
parents:
diff changeset
  1993
                aMenuPane->SetItemDimmed( EMceCmdSort, iHideExitCommand  );
hgs
parents:
diff changeset
  1994
                }
hgs
parents:
diff changeset
  1995
            else
hgs
parents:
diff changeset
  1996
                {
hgs
parents:
diff changeset
  1997
                aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );
hgs
parents:
diff changeset
  1998
                }                
hgs
parents:
diff changeset
  1999
            } // end outbox handling
hgs
parents:
diff changeset
  2000
hgs
parents:
diff changeset
  2001
        // Drafts and Outbox does not have move
hgs
parents:
diff changeset
  2002
        if ( currentFolderId == KMsvDraftEntryId ||
hgs
parents:
diff changeset
  2003
            currentFolderId == KMsvGlobalOutBoxIndexEntryId ||
hgs
parents:
diff changeset
  2004
            aRemoteMailboxOpened )
hgs
parents:
diff changeset
  2005
            {
hgs
parents:
diff changeset
  2006
            aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  2007
            }
hgs
parents:
diff changeset
  2008
        // Drafts does not have sort
hgs
parents:
diff changeset
  2009
        if ( currentFolderId == KMsvDraftEntryId )
hgs
parents:
diff changeset
  2010
            {
hgs
parents:
diff changeset
  2011
            aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );
hgs
parents:
diff changeset
  2012
            }
hgs
parents:
diff changeset
  2013
        if ( !aRemoteMailboxOpened )
hgs
parents:
diff changeset
  2014
            {
hgs
parents:
diff changeset
  2015
            if ( iMsgListContainer->FolderEntry().iServiceId == KMsvLocalServiceIndexEntryId )
hgs
parents:
diff changeset
  2016
                {
hgs
parents:
diff changeset
  2017
                aMenuPane->SetItemDimmed( EMceCmdCopy, ETrue );
hgs
parents:
diff changeset
  2018
                }
hgs
parents:
diff changeset
  2019
            else
hgs
parents:
diff changeset
  2020
                {
hgs
parents:
diff changeset
  2021
                aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  2022
                }
hgs
parents:
diff changeset
  2023
            aMenuPane->SetItemDimmed( EMceCmdFetch, ETrue );
hgs
parents:
diff changeset
  2024
            aMenuPane->SetItemDimmed( EMceCmdUndelete, ETrue );
hgs
parents:
diff changeset
  2025
            
hgs
parents:
diff changeset
  2026
            // enable mark as read/unread in Inbox and Document folder
hgs
parents:
diff changeset
  2027
            EnableMarkAllReadMsgInInboxAndDocument( currentEntry, currentFolderId, aMenuPane );
hgs
parents:
diff changeset
  2028
            }
hgs
parents:
diff changeset
  2029
        if ( aRemoteMailboxOpened || aThirdPartEmail )             
hgs
parents:
diff changeset
  2030
            {
hgs
parents:
diff changeset
  2031
            if ( iMceUi->CheckCommandAvailableL( EMceCmdUndelete, currentEntry ) )
hgs
parents:
diff changeset
  2032
                {
hgs
parents:
diff changeset
  2033
                aMenuPane->SetItemDimmed( EMceCmdUndelete, ETrue );
hgs
parents:
diff changeset
  2034
                }
hgs
parents:
diff changeset
  2035
            else
hgs
parents:
diff changeset
  2036
                {
hgs
parents:
diff changeset
  2037
                aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  2038
                }
hgs
parents:
diff changeset
  2039
            if ( aRemoteMailboxOpened || aThirdPartEmail )
hgs
parents:
diff changeset
  2040
                {
hgs
parents:
diff changeset
  2041
                if ( currentEntry.iType != KUidMsvFolderEntry &&
hgs
parents:
diff changeset
  2042
                     !iMceUi->IsMailSetToBeDeletedFromServerL( currentEntry.Id() ) )
hgs
parents:
diff changeset
  2043
                    { // MarkAsUnread and MarkAsRead is disabled when the message is set to be deleted from the server
hgs
parents:
diff changeset
  2044
                    aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, !currentEntry.Unread() );
hgs
parents:
diff changeset
  2045
                    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, currentEntry.Unread() );
hgs
parents:
diff changeset
  2046
                    }
hgs
parents:
diff changeset
  2047
                }
hgs
parents:
diff changeset
  2048
            }
hgs
parents:
diff changeset
  2049
hgs
parents:
diff changeset
  2050
        if ( currentEntry.iType == KUidMsvFolderEntry )
hgs
parents:
diff changeset
  2051
            {
hgs
parents:
diff changeset
  2052
            if ( MceUtils::IsEntryFixed( currentEntry.Id() ) )
hgs
parents:
diff changeset
  2053
                {
hgs
parents:
diff changeset
  2054
                aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  2055
                }
hgs
parents:
diff changeset
  2056
            } // end folder
hgs
parents:
diff changeset
  2057
        iMceUi->SetMsgDeletedStatus(EFalse);
hgs
parents:
diff changeset
  2058
        } // end if ( iSession->GetEntry == KErrNone )
hgs
parents:
diff changeset
  2059
    CleanupStack::PopAndDestroy( selection ); // selection
hgs
parents:
diff changeset
  2060
    }
hgs
parents:
diff changeset
  2061
hgs
parents:
diff changeset
  2062
// ----------------------------------------------------
hgs
parents:
diff changeset
  2063
// CMceMessageListView::FolderMenuManyItemsL
hgs
parents:
diff changeset
  2064
// ----------------------------------------------------
hgs
parents:
diff changeset
  2065
void CMceMessageListView::FolderMenuManyItemsL(
hgs
parents:
diff changeset
  2066
    CEikMenuPane* aMenuPane,
hgs
parents:
diff changeset
  2067
    TBool aRemoteMailboxOpened,
hgs
parents:
diff changeset
  2068
    TBool aThirdPartEmail,
hgs
parents:
diff changeset
  2069
    TBool aSetRead )
hgs
parents:
diff changeset
  2070
    {
hgs
parents:
diff changeset
  2071
    aMenuPane->SetItemDimmed( EMceCmdRenameFolder, ETrue );
hgs
parents:
diff changeset
  2072
    aMenuPane->SetItemDimmed( EAknCmdOpen, ETrue );
hgs
parents:
diff changeset
  2073
    aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, ETrue );
hgs
parents:
diff changeset
  2074
    aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );    
hgs
parents:
diff changeset
  2075
    aMenuPane->SetItemDimmed( EMceCmdReply, ETrue );
hgs
parents:
diff changeset
  2076
    aMenuPane->SetItemDimmed( EMceCmdSendVia, ETrue );
hgs
parents:
diff changeset
  2077
    DimReadUnreadOptionsMenu( aMenuPane );
hgs
parents:
diff changeset
  2078
hgs
parents:
diff changeset
  2079
    if ( IsSyncMl() )
hgs
parents:
diff changeset
  2080
        {
hgs
parents:
diff changeset
  2081
        if( SyncMlOutboxInbox ( KMsvGlobalInBoxIndexEntryId ) )
hgs
parents:
diff changeset
  2082
            {
hgs
parents:
diff changeset
  2083
            SetReadUnreadOptionsMenu( aMenuPane, KIsEmail, aSetRead );
hgs
parents:
diff changeset
  2084
            }       
hgs
parents:
diff changeset
  2085
hgs
parents:
diff changeset
  2086
        aMenuPane->SetItemDimmed( EMceCmdNewMessage, ETrue );
hgs
parents:
diff changeset
  2087
        aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );
hgs
parents:
diff changeset
  2088
        if ( iHideExitCommand )
hgs
parents:
diff changeset
  2089
            {
hgs
parents:
diff changeset
  2090
            aMenuPane->SetItemDimmed( EMceCmdMarkAsReadEmails, iHideExitCommand ); 
hgs
parents:
diff changeset
  2091
            aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadEmails, iHideExitCommand );
hgs
parents:
diff changeset
  2092
            }
hgs
parents:
diff changeset
  2093
    	// SyncML Sent
hgs
parents:
diff changeset
  2094
        if ( SyncMlOutboxInbox( KMsvSentEntryId ) || SyncMlOutboxInbox( KMsvDraftEntryId ) )
hgs
parents:
diff changeset
  2095
            {
hgs
parents:
diff changeset
  2096
            aMenuPane->SetItemDimmed( EMceCmdNewMessage, ETrue );
hgs
parents:
diff changeset
  2097
            aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );    
hgs
parents:
diff changeset
  2098
            aMenuPane->SetItemDimmed( EMceCmdUndelete, ETrue );	    
hgs
parents:
diff changeset
  2099
            }
hgs
parents:
diff changeset
  2100
        return;
hgs
parents:
diff changeset
  2101
        } 
hgs
parents:
diff changeset
  2102
hgs
parents:
diff changeset
  2103
    TMsvId serviceId;
hgs
parents:
diff changeset
  2104
    CMsvEntrySelection* selection = iMsgListContainer->CurrentItemSelectionL();
hgs
parents:
diff changeset
  2105
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  2106
    TMsvEntry currentEntry;
hgs
parents:
diff changeset
  2107
hgs
parents:
diff changeset
  2108
    TMsvId currentFolderId = iFolderId;
hgs
parents:
diff changeset
  2109
hgs
parents:
diff changeset
  2110
    if ( currentFolderId != KMsvGlobalOutBoxIndexEntryId )
hgs
parents:
diff changeset
  2111
        {
hgs
parents:
diff changeset
  2112
        aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  2113
        }
hgs
parents:
diff changeset
  2114
    
hgs
parents:
diff changeset
  2115
    if ( currentFolderId == KMsvGlobalOutBoxIndexEntryId )
hgs
parents:
diff changeset
  2116
        {
hgs
parents:
diff changeset
  2117
        aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  2118
        }
hgs
parents:
diff changeset
  2119
    if ( currentFolderId == KMsvSentEntryId )
hgs
parents:
diff changeset
  2120
        {
hgs
parents:
diff changeset
  2121
        TInt selectionCount = selection->Count();
hgs
parents:
diff changeset
  2122
        TBool mailMessage = EFalse;
hgs
parents:
diff changeset
  2123
        TBool otherMessage = EFalse;
hgs
parents:
diff changeset
  2124
        
hgs
parents:
diff changeset
  2125
        aMenuPane->SetItemDimmed( EMceCmdSort, EFalse );
hgs
parents:
diff changeset
  2126
hgs
parents:
diff changeset
  2127
        // Check type of message
hgs
parents:
diff changeset
  2128
        for ( TInt loop = 0; loop < selectionCount; loop++ )
hgs
parents:
diff changeset
  2129
            {
hgs
parents:
diff changeset
  2130
            if ( iSession->GetEntry( selection->At(loop), serviceId, currentEntry ) 
hgs
parents:
diff changeset
  2131
                == KErrNone || iMceUi->GetMsgDeletedStatus())
hgs
parents:
diff changeset
  2132
                {
hgs
parents:
diff changeset
  2133
                if ( currentEntry.iMtm.iUid==KSenduiMtmImap4UidValue ||
hgs
parents:
diff changeset
  2134
		             currentEntry.iMtm.iUid==KSenduiMtmPop3UidValue ||
hgs
parents:
diff changeset
  2135
                     currentEntry.iMtm.iUid==KSenduiMtmSmtpUidValue )
hgs
parents:
diff changeset
  2136
                    {    
hgs
parents:
diff changeset
  2137
                    mailMessage = ETrue;
hgs
parents:
diff changeset
  2138
                    }
hgs
parents:
diff changeset
  2139
                else
hgs
parents:
diff changeset
  2140
                    {
hgs
parents:
diff changeset
  2141
                    otherMessage = ETrue;
hgs
parents:
diff changeset
  2142
                    }
hgs
parents:
diff changeset
  2143
                iMceUi->SetMsgDeletedStatus(EFalse);
hgs
parents:
diff changeset
  2144
                }
hgs
parents:
diff changeset
  2145
            }
hgs
parents:
diff changeset
  2146
        if ( otherMessage && mailMessage ) 
hgs
parents:
diff changeset
  2147
            {
hgs
parents:
diff changeset
  2148
            aMenuPane->SetItemDimmed( EMceCmdMove, EFalse );
hgs
parents:
diff changeset
  2149
            }
hgs
parents:
diff changeset
  2150
        else if ( mailMessage && !otherMessage ) // Only mailmessages
hgs
parents:
diff changeset
  2151
            {
hgs
parents:
diff changeset
  2152
            aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  2153
            }            
hgs
parents:
diff changeset
  2154
        else // Only other messages
hgs
parents:
diff changeset
  2155
            {
hgs
parents:
diff changeset
  2156
            aMenuPane->SetItemDimmed( EMceCmdMove, EFalse );
hgs
parents:
diff changeset
  2157
            }            
hgs
parents:
diff changeset
  2158
        }
hgs
parents:
diff changeset
  2159
    // Drafts does not have move and sort
hgs
parents:
diff changeset
  2160
    if ( currentFolderId == KMsvDraftEntryId)
hgs
parents:
diff changeset
  2161
        {
hgs
parents:
diff changeset
  2162
        aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  2163
        aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );
hgs
parents:
diff changeset
  2164
        }
hgs
parents:
diff changeset
  2165
hgs
parents:
diff changeset
  2166
    if (aRemoteMailboxOpened )
hgs
parents:
diff changeset
  2167
        {  
hgs
parents:
diff changeset
  2168
        // Incase of mailbox, sort should be enabled for all defined folder inside (e.g. inbox. outbox, draft, sent etc) 
hgs
parents:
diff changeset
  2169
         aMenuPane->SetItemDimmed( EMceCmdSort, iHideExitCommand );  
hgs
parents:
diff changeset
  2170
        }
hgs
parents:
diff changeset
  2171
hgs
parents:
diff changeset
  2172
    if ( !aRemoteMailboxOpened )
hgs
parents:
diff changeset
  2173
        {
hgs
parents:
diff changeset
  2174
        if ( iMsgListContainer->FolderEntry().iServiceId == KMsvLocalServiceIndexEntryId )
hgs
parents:
diff changeset
  2175
            {
hgs
parents:
diff changeset
  2176
            aMenuPane->SetItemDimmed( EMceCmdCopy, ETrue );
hgs
parents:
diff changeset
  2177
            }
hgs
parents:
diff changeset
  2178
        else
hgs
parents:
diff changeset
  2179
            {
hgs
parents:
diff changeset
  2180
            aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  2181
            }
hgs
parents:
diff changeset
  2182
        aMenuPane->SetItemDimmed( EMceCmdFetch, ETrue );
hgs
parents:
diff changeset
  2183
        aMenuPane->SetItemDimmed( EMceCmdUndelete, ETrue );
hgs
parents:
diff changeset
  2184
        }
hgs
parents:
diff changeset
  2185
hgs
parents:
diff changeset
  2186
    if ( iMsgListContainer->CurrentItemType() !=
hgs
parents:
diff changeset
  2187
             CMceMessageListContainerBase::EMessageListItemSubtitle
hgs
parents:
diff changeset
  2188
             || selection->Count()>0 )
hgs
parents:
diff changeset
  2189
        {
hgs
parents:
diff changeset
  2190
        // Set Mark as Read/Unread Options menu 
hgs
parents:
diff changeset
  2191
        if ( ( currentFolderId == KMceDocumentsEntryId  ||
hgs
parents:
diff changeset
  2192
               currentFolderId == KMsvGlobalInBoxIndexEntryId || 
hgs
parents:
diff changeset
  2193
               iMsgListContainer->FolderEntry().Parent() == KMceDocumentsEntryId ) )
hgs
parents:
diff changeset
  2194
            {
hgs
parents:
diff changeset
  2195
            SetReadUnreadOptionsMenu( aMenuPane, !KIsEmail, aSetRead );
hgs
parents:
diff changeset
  2196
            }
hgs
parents:
diff changeset
  2197
        else if( aRemoteMailboxOpened || aThirdPartEmail )
hgs
parents:
diff changeset
  2198
            {
hgs
parents:
diff changeset
  2199
            SetReadUnreadOptionsMenu( aMenuPane, KIsEmail, aSetRead );
hgs
parents:
diff changeset
  2200
            }        
hgs
parents:
diff changeset
  2201
        }
hgs
parents:
diff changeset
  2202
hgs
parents:
diff changeset
  2203
    CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  2204
    }
hgs
parents:
diff changeset
  2205
hgs
parents:
diff changeset
  2206
hgs
parents:
diff changeset
  2207
// ----------------------------------------------------
hgs
parents:
diff changeset
  2208
// CMceMessageListView::FolderMenuSyncMLMain
hgs
parents:
diff changeset
  2209
// ----------------------------------------------------
hgs
parents:
diff changeset
  2210
void CMceMessageListView::FolderMenuSyncMLMain( CEikMenuPane *aMenuPane )
hgs
parents:
diff changeset
  2211
	{
hgs
parents:
diff changeset
  2212
	aMenuPane->SetItemDimmed( EMceCmdSendVia, ETrue );
hgs
parents:
diff changeset
  2213
	aMenuPane->SetItemDimmed( EMceCmdConnect, ETrue );
hgs
parents:
diff changeset
  2214
	aMenuPane->SetItemDimmed( EMceCmdCloseConnection, ETrue );
hgs
parents:
diff changeset
  2215
	aMenuPane->SetItemDimmed( EMceCmdReply, ETrue );
hgs
parents:
diff changeset
  2216
	aMenuPane->SetItemDimmed( EMceCommandMMSContentUpload, ETrue );
hgs
parents:
diff changeset
  2217
	aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, ETrue );
hgs
parents:
diff changeset
  2218
	aMenuPane->SetItemDimmed( EMceCmdFetch, ETrue );
hgs
parents:
diff changeset
  2219
	aMenuPane->SetItemDimmed( EMceCmdDelete, ETrue );
hgs
parents:
diff changeset
  2220
	aMenuPane->SetItemDimmed( EMceCmdUndelete, ETrue );
hgs
parents:
diff changeset
  2221
	aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, ETrue );
hgs
parents:
diff changeset
  2222
	aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, ETrue );
hgs
parents:
diff changeset
  2223
	aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );
hgs
parents:
diff changeset
  2224
	aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  2225
	aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );
hgs
parents:
diff changeset
  2226
	aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  2227
	aMenuPane->SetItemDimmed( EMceCmdNewFolder, ETrue );
hgs
parents:
diff changeset
  2228
	aMenuPane->SetItemDimmed( EMceCmdRenameFolder, ETrue );
hgs
parents:
diff changeset
  2229
	aMenuPane->SetItemDimmed( EMceCmdCopy, ETrue );
hgs
parents:
diff changeset
  2230
	aMenuPane->SetItemDimmed( EAknCmdMarkingModeEnter, ETrue );
hgs
parents:
diff changeset
  2231
	aMenuPane->SetItemDimmed( EMceCmdMailboxSettings, ETrue );
hgs
parents:
diff changeset
  2232
	// + MessageDetails
hgs
parents:
diff changeset
  2233
	}
hgs
parents:
diff changeset
  2234
hgs
parents:
diff changeset
  2235
// ----------------------------------------------------
hgs
parents:
diff changeset
  2236
// CMceMessageListView::FolderMenuSyncMLFolderL
hgs
parents:
diff changeset
  2237
// ----------------------------------------------------
hgs
parents:
diff changeset
  2238
void CMceMessageListView::FolderMenuSyncMLFolderL( CEikMenuPane *aMenuPane )
hgs
parents:
diff changeset
  2239
	{
hgs
parents:
diff changeset
  2240
	CMsvEntrySelection* selection = iMsgListContainer->CurrentItemSelectionL();
hgs
parents:
diff changeset
  2241
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  2242
    TMsvEntry currentEntry;
hgs
parents:
diff changeset
  2243
    TMsvId serviceId;
hgs
parents:
diff changeset
  2244
	
hgs
parents:
diff changeset
  2245
	// All SyncML folders: Inbox, Sent items, Drafts, Outbox
hgs
parents:
diff changeset
  2246
	aMenuPane->SetItemDimmed( EMceCmdAiwPlaceholder, ETrue );
hgs
parents:
diff changeset
  2247
	aMenuPane->SetItemDimmed( EMceCmdSendVia, ETrue );
hgs
parents:
diff changeset
  2248
	aMenuPane->SetItemDimmed( EMceCmdConnect, ETrue );
hgs
parents:
diff changeset
  2249
	aMenuPane->SetItemDimmed( EMceCmdCloseConnection, ETrue );
hgs
parents:
diff changeset
  2250
	aMenuPane->SetItemDimmed( EMceCommandMMSContentUpload, ETrue );
hgs
parents:
diff changeset
  2251
	aMenuPane->SetItemDimmed( EMceCmdOutboxSuspend, ETrue );
hgs
parents:
diff changeset
  2252
	aMenuPane->SetItemDimmed( EMceCmdMove, ETrue );
hgs
parents:
diff changeset
  2253
	aMenuPane->SetItemDimmed( EMceCmdOutboxStart, ETrue );
hgs
parents:
diff changeset
  2254
	aMenuPane->SetItemDimmed( EMceCmdNewFolder, ETrue );
hgs
parents:
diff changeset
  2255
	aMenuPane->SetItemDimmed( EMceCmdRenameFolder, ETrue );
hgs
parents:
diff changeset
  2256
	aMenuPane->SetItemDimmed( EMceCmdMailboxSettings, ETrue );
hgs
parents:
diff changeset
  2257
    aMenuPane->SetItemDimmed( EMceCmdFetch, ETrue ); 
hgs
parents:
diff changeset
  2258
    aMenuPane->SetItemDimmed( EMceCmdCopy, ETrue ); 
hgs
parents:
diff changeset
  2259
    aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, ETrue ); 
hgs
parents:
diff changeset
  2260
	aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, ETrue ); 
hgs
parents:
diff changeset
  2261
hgs
parents:
diff changeset
  2262
    TInt numberOfEntries = iMsgListContainer->Count();
hgs
parents:
diff changeset
  2263
hgs
parents:
diff changeset
  2264
	// All except SyncML Outbox
hgs
parents:
diff changeset
  2265
	if ( SyncMlOutboxInbox( KMsvGlobalInBoxIndexEntryId  ) )
hgs
parents:
diff changeset
  2266
		{
hgs
parents:
diff changeset
  2267
		aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  2268
        if ( numberOfEntries > 0 && 
hgs
parents:
diff changeset
  2269
            iSession->GetEntry( selection->At(0), serviceId, currentEntry ) == KErrNone &&
hgs
parents:
diff changeset
  2270
            selection->Count() == 1 )
hgs
parents:
diff changeset
  2271
            {
hgs
parents:
diff changeset
  2272
            aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, !currentEntry.Unread() );
hgs
parents:
diff changeset
  2273
            aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, currentEntry.Unread() );
hgs
parents:
diff changeset
  2274
            }
hgs
parents:
diff changeset
  2275
		}
hgs
parents:
diff changeset
  2276
hgs
parents:
diff changeset
  2277
	// SyncML Drafts
hgs
parents:
diff changeset
  2278
	if ( SyncMlOutboxInbox( KMsvDraftEntryId ) )
hgs
parents:
diff changeset
  2279
		{
hgs
parents:
diff changeset
  2280
		aMenuPane->SetItemDimmed( EMceCmdReply, ETrue );
hgs
parents:
diff changeset
  2281
		aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  2282
		}
hgs
parents:
diff changeset
  2283
		
hgs
parents:
diff changeset
  2284
	// SyncML Sent
hgs
parents:
diff changeset
  2285
	if ( SyncMlOutboxInbox( KMsvSentEntryId ) )
hgs
parents:
diff changeset
  2286
		{
hgs
parents:
diff changeset
  2287
		aMenuPane->SetItemDimmed( EMceCmdOutboxMoveToDrafts, ETrue );
hgs
parents:
diff changeset
  2288
		aMenuPane->SetItemDimmed( EMceCmdReply, ETrue );
hgs
parents:
diff changeset
  2289
		}
hgs
parents:
diff changeset
  2290
hgs
parents:
diff changeset
  2291
	// SyncML Outbox
hgs
parents:
diff changeset
  2292
	if ( SyncMlOutboxInbox( KMsvGlobalOutBoxIndexEntryIdValue ) )
hgs
parents:
diff changeset
  2293
		{		
hgs
parents:
diff changeset
  2294
		aMenuPane->SetItemDimmed( EAknCmdMarkingModeEnter, ETrue );
hgs
parents:
diff changeset
  2295
		aMenuPane->SetItemDimmed( EAknCmdOpen, ETrue );
hgs
parents:
diff changeset
  2296
		aMenuPane->SetItemDimmed( EMceCmdFetch, ETrue );
hgs
parents:
diff changeset
  2297
		aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, ETrue );
hgs
parents:
diff changeset
  2298
		aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, ETrue );
hgs
parents:
diff changeset
  2299
		aMenuPane->SetItemDimmed( EMceCmdSort, ETrue );
hgs
parents:
diff changeset
  2300
		aMenuPane->SetItemDimmed( EMceCmdCopy, ETrue );
hgs
parents:
diff changeset
  2301
		aMenuPane->SetItemDimmed( EMceCmdReply, ETrue ); 
hgs
parents:
diff changeset
  2302
		aMenuPane->SetItemDimmed( EMceCmdNewMessage, iHideExitCommand );
hgs
parents:
diff changeset
  2303
		}
hgs
parents:
diff changeset
  2304
    if ( numberOfEntries == 0 )
hgs
parents:
diff changeset
  2305
        {
hgs
parents:
diff changeset
  2306
        aMenuPane->SetItemDimmed( EMceCmdNewMessage, EFalse );
hgs
parents:
diff changeset
  2307
		}
hgs
parents:
diff changeset
  2308
    CleanupStack::PopAndDestroy( selection ); 
hgs
parents:
diff changeset
  2309
	}
hgs
parents:
diff changeset
  2310
hgs
parents:
diff changeset
  2311
// ----------------------------------------------------
hgs
parents:
diff changeset
  2312
// CMceMessageListView::EditMenuL
hgs
parents:
diff changeset
  2313
// ----------------------------------------------------
hgs
parents:
diff changeset
  2314
void CMceMessageListView::EditMenuL( CEikMenuPane* aMenuPane ) const
hgs
parents:
diff changeset
  2315
    {
hgs
parents:
diff changeset
  2316
    // This function is not called if empty folder/list is yet to be populated
hgs
parents:
diff changeset
  2317
    // because in that case EditMenu is hidden
hgs
parents:
diff changeset
  2318
    aMenuPane->SetItemDimmed( EAknCmdMarkReadMsgs, ETrue );
hgs
parents:
diff changeset
  2319
hgs
parents:
diff changeset
  2320
    TInt count = iMsgListContainer->SelectionCount();
hgs
parents:
diff changeset
  2321
hgs
parents:
diff changeset
  2322
    if ( count == 0 )
hgs
parents:
diff changeset
  2323
        {
hgs
parents:
diff changeset
  2324
        //if no selection, disable unmarkall
hgs
parents:
diff changeset
  2325
        aMenuPane->SetItemDimmed( EAknUnmarkAll, ETrue );
hgs
parents:
diff changeset
  2326
        TBool remoteMailboxOpened = ( iMsgListContainer->FolderEntry().iMtm == KSenduiMtmImap4Uid || 
hgs
parents:
diff changeset
  2327
                                      iMsgListContainer->FolderEntry().iMtm == KSenduiMtmPop3Uid );
hgs
parents:
diff changeset
  2328
        if ( remoteMailboxOpened || // Mailbox
hgs
parents:
diff changeset
  2329
            IsSyncMl() ||   //SyncMailbox
hgs
parents:
diff changeset
  2330
            iMsgListContainer->FolderEntry().Id() == KMsvGlobalInBoxIndexEntryId || //Inbox
hgs
parents:
diff changeset
  2331
            iMsgListContainer->FolderEntry().Id() == KMceDocumentsEntryId || //Document
hgs
parents:
diff changeset
  2332
            iMsgListContainer->FolderEntry().Parent() == KMceDocumentsEntryId ) //Subfolder of Document
hgs
parents:
diff changeset
  2333
            {
hgs
parents:
diff changeset
  2334
            aMenuPane->SetItemDimmed( EAknCmdMarkReadMsgs, EFalse );
hgs
parents:
diff changeset
  2335
            }
hgs
parents:
diff changeset
  2336
       }   
hgs
parents:
diff changeset
  2337
hgs
parents:
diff changeset
  2338
    if ( ( count + SubfolderCount() ) == iMsgListContainer->Count())
hgs
parents:
diff changeset
  2339
       {
hgs
parents:
diff changeset
  2340
       //if all selected, disable markall
hgs
parents:
diff changeset
  2341
       aMenuPane->SetItemDimmed( EAknMarkAll, ETrue );
hgs
parents:
diff changeset
  2342
       } 
hgs
parents:
diff changeset
  2343
hgs
parents:
diff changeset
  2344
    if ( iMsgListContainer->IsItemFolder( iMsgListContainer->CurrentItemId() ) )
hgs
parents:
diff changeset
  2345
        {
hgs
parents:
diff changeset
  2346
        aMenuPane->SetItemDimmed( EAknCmdMark, ETrue );
hgs
parents:
diff changeset
  2347
        aMenuPane->SetItemDimmed( EAknCmdUnmark, ETrue );
hgs
parents:
diff changeset
  2348
        }
hgs
parents:
diff changeset
  2349
    else
hgs
parents:
diff changeset
  2350
        {
hgs
parents:
diff changeset
  2351
        if (iMsgListContainer->IsItemSelected( iMsgListContainer->CurrentItemId() ) )
hgs
parents:
diff changeset
  2352
            {
hgs
parents:
diff changeset
  2353
            aMenuPane->SetItemDimmed( EAknCmdMark, ETrue );
hgs
parents:
diff changeset
  2354
            }
hgs
parents:
diff changeset
  2355
        else
hgs
parents:
diff changeset
  2356
            {
hgs
parents:
diff changeset
  2357
            aMenuPane->SetItemDimmed( EAknCmdUnmark, ETrue );
hgs
parents:
diff changeset
  2358
            }
hgs
parents:
diff changeset
  2359
        } // end else
hgs
parents:
diff changeset
  2360
hgs
parents:
diff changeset
  2361
    // Mark All and Unmark All are always visible
hgs
parents:
diff changeset
  2362
    }
hgs
parents:
diff changeset
  2363
hgs
parents:
diff changeset
  2364
// ----------------------------------------------------
hgs
parents:
diff changeset
  2365
// CMceMessageListView::FolderOpenedL
hgs
parents:
diff changeset
  2366
// ----------------------------------------------------
hgs
parents:
diff changeset
  2367
TBool CMceMessageListView::FolderOpenedL()
hgs
parents:
diff changeset
  2368
    {
hgs
parents:
diff changeset
  2369
    // return EFalse if cd.. returns to main view, ETrue if returns to Parent in folder view.
hgs
parents:
diff changeset
  2370
hgs
parents:
diff changeset
  2371
    TBool folderOpened = ETrue;
hgs
parents:
diff changeset
  2372
hgs
parents:
diff changeset
  2373
    const TMsvEntry& entry = iMsgListContainer->FolderEntry();
hgs
parents:
diff changeset
  2374
    const TMsvId entryId = entry.Id();
hgs
parents:
diff changeset
  2375
hgs
parents:
diff changeset
  2376
    if ( entry.Parent() == KMsvRootIndexEntryId ||
hgs
parents:
diff changeset
  2377
        ( entry.iMtm == KSenduiMtmImap4Uid && !IsImapFolderOpenL( ) ) ||
hgs
parents:
diff changeset
  2378
         entryId == KMsvGlobalInBoxIndexEntryId ||
hgs
parents:
diff changeset
  2379
         entryId == KMsvGlobalOutBoxIndexEntryId ||
hgs
parents:
diff changeset
  2380
         entryId == KMsvDraftEntryId ||
hgs
parents:
diff changeset
  2381
         entryId == KMsvSentEntryId ||
hgs
parents:
diff changeset
  2382
         entryId == KMceDocumentsEntryId ) 
hgs
parents:
diff changeset
  2383
        {
hgs
parents:
diff changeset
  2384
        folderOpened = EFalse;
hgs
parents:
diff changeset
  2385
        }
hgs
parents:
diff changeset
  2386
    
hgs
parents:
diff changeset
  2387
    return folderOpened;
hgs
parents:
diff changeset
  2388
    }
hgs
parents:
diff changeset
  2389
hgs
parents:
diff changeset
  2390
// ----------------------------------------------------
hgs
parents:
diff changeset
  2391
// CMceMessageListView::SubfolderCount
hgs
parents:
diff changeset
  2392
// ----------------------------------------------------
hgs
parents:
diff changeset
  2393
TInt CMceMessageListView::SubfolderCount() const
hgs
parents:
diff changeset
  2394
    {
hgs
parents:
diff changeset
  2395
    return iMsgListContainer->FolderCount();
hgs
parents:
diff changeset
  2396
    }
hgs
parents:
diff changeset
  2397
hgs
parents:
diff changeset
  2398
hgs
parents:
diff changeset
  2399
// ----------------------------------------------------
hgs
parents:
diff changeset
  2400
// CMceMessageListView::CancelMailboxTimer
hgs
parents:
diff changeset
  2401
// ----------------------------------------------------
hgs
parents:
diff changeset
  2402
void CMceMessageListView::CancelMailboxTimer() const
hgs
parents:
diff changeset
  2403
    {
hgs
parents:
diff changeset
  2404
    iMceUi->CancelMailboxTimer();
hgs
parents:
diff changeset
  2405
    }
hgs
parents:
diff changeset
  2406
hgs
parents:
diff changeset
  2407
// ----------------------------------------------------
hgs
parents:
diff changeset
  2408
// CMceMessageListView::IsFolderNameUsedL
hgs
parents:
diff changeset
  2409
// ----------------------------------------------------
hgs
parents:
diff changeset
  2410
TBool CMceMessageListView::IsFolderNameUsedL(const TDesC& aName, TMsvId aId /* = KErrNotFound */) const
hgs
parents:
diff changeset
  2411
//
hgs
parents:
diff changeset
  2412
// Return ETrue if a service of name 'aName' already exists.
hgs
parents:
diff changeset
  2413
//
hgs
parents:
diff changeset
  2414
    {
hgs
parents:
diff changeset
  2415
    CMsvEntry* entry = CMsvEntry::NewL(
hgs
parents:
diff changeset
  2416
        *iSession,
hgs
parents:
diff changeset
  2417
        iMsgListContainer->CurrentFolderId(),
hgs
parents:
diff changeset
  2418
        TMsvSelectionOrdering(
hgs
parents:
diff changeset
  2419
            KMsvGroupByStandardFolders, EMsvSortByDateReverse) );
hgs
parents:
diff changeset
  2420
    CleanupStack::PushL( entry );
hgs
parents:
diff changeset
  2421
    TBool ret = EFalse;
hgs
parents:
diff changeset
  2422
    const TInt total = entry->Count();
hgs
parents:
diff changeset
  2423
    for(TInt cc = 0; cc < total; ++cc)
hgs
parents:
diff changeset
  2424
        {
hgs
parents:
diff changeset
  2425
        const TMsvEntry& tEntry = (*entry)[cc];
hgs
parents:
diff changeset
  2426
        if( tEntry.iType == KUidMsvFolderEntry &&
hgs
parents:
diff changeset
  2427
            tEntry.Id() != aId )
hgs
parents:
diff changeset
  2428
            {
hgs
parents:
diff changeset
  2429
            // This entry is a service, so ensure the passed name isn't used
hgs
parents:
diff changeset
  2430
            if(!aName.CompareF(tEntry.iDetails))
hgs
parents:
diff changeset
  2431
                {
hgs
parents:
diff changeset
  2432
                ret = ETrue;
hgs
parents:
diff changeset
  2433
                break;
hgs
parents:
diff changeset
  2434
                }
hgs
parents:
diff changeset
  2435
            }
hgs
parents:
diff changeset
  2436
        }
hgs
parents:
diff changeset
  2437
    CleanupStack::PopAndDestroy( entry );
hgs
parents:
diff changeset
  2438
    return ret;
hgs
parents:
diff changeset
  2439
    }
hgs
parents:
diff changeset
  2440
hgs
parents:
diff changeset
  2441
// ----------------------------------------------------
hgs
parents:
diff changeset
  2442
// CMceMessageListView::FindUnreadMessageAndOpenItL
hgs
parents:
diff changeset
  2443
// ----------------------------------------------------
hgs
parents:
diff changeset
  2444
TBool CMceMessageListView::FindUnreadMessageAndOpenItL( const TMsvId aId )
hgs
parents:
diff changeset
  2445
    {
hgs
parents:
diff changeset
  2446
    TInt launchViewerStartTime = KMceLaunchViewerStartTime;
hgs
parents:
diff changeset
  2447
    if(iMceUi->IsEditorOpen())
hgs
parents:
diff changeset
  2448
        {
hgs
parents:
diff changeset
  2449
        launchViewerStartTime = KMceLaunchViewerStartTimeWhenEditorOpen;
hgs
parents:
diff changeset
  2450
        }
hgs
parents:
diff changeset
  2451
    
hgs
parents:
diff changeset
  2452
// TODO: how to simplify this ?
hgs
parents:
diff changeset
  2453
    TMsvId firstUnreadMessageId = KErrNotFound;
hgs
parents:
diff changeset
  2454
    TBool oneUnreadMessage = EFalse;
hgs
parents:
diff changeset
  2455
    if ( aId )
hgs
parents:
diff changeset
  2456
        {
hgs
parents:
diff changeset
  2457
        //
hgs
parents:
diff changeset
  2458
        oneUnreadMessage = ETrue;
hgs
parents:
diff changeset
  2459
        firstUnreadMessageId = aId;
hgs
parents:
diff changeset
  2460
        }
hgs
parents:
diff changeset
  2461
    else
hgs
parents:
diff changeset
  2462
        {
hgs
parents:
diff changeset
  2463
        oneUnreadMessage = iMsgListContainer->FindFirstUnreadMessageL( firstUnreadMessageId );
hgs
parents:
diff changeset
  2464
        }
hgs
parents:
diff changeset
  2465
hgs
parents:
diff changeset
  2466
    if ( firstUnreadMessageId > KErrNotFound )
hgs
parents:
diff changeset
  2467
        {
hgs
parents:
diff changeset
  2468
        iMsgListContainer->SetCurrentItemIdL(
hgs
parents:
diff changeset
  2469
            firstUnreadMessageId );
hgs
parents:
diff changeset
  2470
        }
hgs
parents:
diff changeset
  2471
        
hgs
parents:
diff changeset
  2472
    if ( !iRunningEditFunction )
hgs
parents:
diff changeset
  2473
        {
hgs
parents:
diff changeset
  2474
        iMceUi->CloseEditorApp();
hgs
parents:
diff changeset
  2475
        }
hgs
parents:
diff changeset
  2476
hgs
parents:
diff changeset
  2477
    TMsvEntry firstEntry;
hgs
parents:
diff changeset
  2478
    TMsvId serviceId;
hgs
parents:
diff changeset
  2479
    if ( oneUnreadMessage && firstUnreadMessageId > KErrNotFound && 
hgs
parents:
diff changeset
  2480
        iSession->GetEntry( firstUnreadMessageId, serviceId, firstEntry ) == KErrNone )
hgs
parents:
diff changeset
  2481
        {
hgs
parents:
diff changeset
  2482
        TUid messageMtm = firstEntry.iMtm;
hgs
parents:
diff changeset
  2483
        
hgs
parents:
diff changeset
  2484
    	if ( (messageMtm!=KSenduiMtmIrUidValue) &&
hgs
parents:
diff changeset
  2485
    	     (messageMtm!=KSenduiMtmBtUidValue) &&
hgs
parents:
diff changeset
  2486
    	     (messageMtm!=KSenduiMtmSmtpUidValue) &&
hgs
parents:
diff changeset
  2487
    	     (messageMtm!=KSenduiMtmImap4UidValue) &&
hgs
parents:
diff changeset
  2488
    	     (messageMtm!=KSenduiMtmPop3UidValue)
hgs
parents:
diff changeset
  2489
    	   )
hgs
parents:
diff changeset
  2490
    	    {
hgs
parents:
diff changeset
  2491
hgs
parents:
diff changeset
  2492
            if ( !iMessageViewerLauncher )
hgs
parents:
diff changeset
  2493
                {
hgs
parents:
diff changeset
  2494
                iMessageViewerLauncher = CPeriodic::NewL( CActive::EPriorityIdle );
hgs
parents:
diff changeset
  2495
                }
hgs
parents:
diff changeset
  2496
hgs
parents:
diff changeset
  2497
            if ( !(iMessageViewerLauncher->IsActive()) )
hgs
parents:
diff changeset
  2498
                {
hgs
parents:
diff changeset
  2499
                delete iLocalScreenClearer;
hgs
parents:
diff changeset
  2500
                iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
  2501
                iLocalScreenClearer = CAknLocalScreenClearer::NewL( EFalse );
hgs
parents:
diff changeset
  2502
                MCELOGGER_WRITE("FindUnreadMessageAndOpenItL: start viewer launcher");
hgs
parents:
diff changeset
  2503
                TTimeIntervalMicroSeconds32 startTimeInterval = launchViewerStartTime;
hgs
parents:
diff changeset
  2504
                const TTimeIntervalMicroSeconds32 retryTimeInterval = KMceLaunchViewerRetryTime;
hgs
parents:
diff changeset
  2505
                iLaunchViewerCounter = 0;
hgs
parents:
diff changeset
  2506
                iMessageViewerLauncher->Start( 
hgs
parents:
diff changeset
  2507
                    startTimeInterval, 
hgs
parents:
diff changeset
  2508
                    retryTimeInterval, 
hgs
parents:
diff changeset
  2509
                    TCallBack(LaunchViewer, this ) );
hgs
parents:
diff changeset
  2510
                }
hgs
parents:
diff changeset
  2511
    	    }
hgs
parents:
diff changeset
  2512
        return ETrue;
hgs
parents:
diff changeset
  2513
        }
hgs
parents:
diff changeset
  2514
    return EFalse;
hgs
parents:
diff changeset
  2515
    }
hgs
parents:
diff changeset
  2516
hgs
parents:
diff changeset
  2517
// ----------------------------------------------------
hgs
parents:
diff changeset
  2518
// CMceMessageListView::FindInboxAndOpenItL
hgs
parents:
diff changeset
  2519
// ----------------------------------------------------
hgs
parents:
diff changeset
  2520
void CMceMessageListView::FindInboxAndOpenItL()
hgs
parents:
diff changeset
  2521
    {    
hgs
parents:
diff changeset
  2522
    //imapfolders
hgs
parents:
diff changeset
  2523
    //first count subscribed folders. If only one ( inbox ) open it
hgs
parents:
diff changeset
  2524
    //otherwise show folderlist.
hgs
parents:
diff changeset
  2525
    TMsvId inboxId = KErrNotFound;
hgs
parents:
diff changeset
  2526
    TMsvEntry child;
hgs
parents:
diff changeset
  2527
    TInt cnt = 0;
hgs
parents:
diff changeset
  2528
    CMsvEntry* entry = CMsvEntry::NewL(
hgs
parents:
diff changeset
  2529
        *iSession,
hgs
parents:
diff changeset
  2530
        iMsgListContainer->CurrentFolderId(),
hgs
parents:
diff changeset
  2531
        TMsvSelectionOrdering(
hgs
parents:
diff changeset
  2532
            KMsvGroupByStandardFolders, EMsvSortByDateReverse) );
hgs
parents:
diff changeset
  2533
    CleanupStack::PushL( entry );
hgs
parents:
diff changeset
  2534
    
hgs
parents:
diff changeset
  2535
    const TInt count = entry->Count();
hgs
parents:
diff changeset
  2536
    
hgs
parents:
diff changeset
  2537
    for ( TInt loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
  2538
        {
hgs
parents:
diff changeset
  2539
        child = (*entry)[loop];
hgs
parents:
diff changeset
  2540
        if( child.iType == KUidMsvFolderEntry )
hgs
parents:
diff changeset
  2541
            {
hgs
parents:
diff changeset
  2542
            cnt++;
hgs
parents:
diff changeset
  2543
            inboxId = child.Id();
hgs
parents:
diff changeset
  2544
            }
hgs
parents:
diff changeset
  2545
        }
hgs
parents:
diff changeset
  2546
hgs
parents:
diff changeset
  2547
    //if only one subscribed, it must be inbox, but check it also to be sure
hgs
parents:
diff changeset
  2548
    if( cnt == KMceOnlyInboxInImap && child.iDetails.CompareF( iInboxName->Des() ) == 0 )
hgs
parents:
diff changeset
  2549
        {
hgs
parents:
diff changeset
  2550
        SetFolderL( inboxId );
hgs
parents:
diff changeset
  2551
        }    
hgs
parents:
diff changeset
  2552
    CleanupStack::PopAndDestroy( entry );
hgs
parents:
diff changeset
  2553
    }
hgs
parents:
diff changeset
  2554
hgs
parents:
diff changeset
  2555
// ----------------------------------------------------
hgs
parents:
diff changeset
  2556
// CMceMessageListView::ChangeFolderAndRefreshListboxL
hgs
parents:
diff changeset
  2557
// ----------------------------------------------------
hgs
parents:
diff changeset
  2558
void CMceMessageListView::ChangeFolderAndRefreshListboxL( TMsvId aNewFolderId )
hgs
parents:
diff changeset
  2559
    {
hgs
parents:
diff changeset
  2560
    MCELOGGER_ENTERFN("CMceMessageListView::ChangeFolderAndRefreshListboxL");
hgs
parents:
diff changeset
  2561
    
hgs
parents:
diff changeset
  2562
     TInt oldCount = iMsgListContainer->Count(); // how many items in current folder
hgs
parents:
diff changeset
  2563
    TMsvId oldId = iMsgListContainer->FolderEntry().Id();
hgs
parents:
diff changeset
  2564
    TMsvEntry currentEntry;
hgs
parents:
diff changeset
  2565
    TMsvId serviceId; // not used here but needed by GetEntry function
hgs
parents:
diff changeset
  2566
    if ( iSession->GetEntry( aNewFolderId, serviceId, currentEntry )
hgs
parents:
diff changeset
  2567
        == KErrNone )
hgs
parents:
diff changeset
  2568
        {
hgs
parents:
diff changeset
  2569
        iMsgListContainer->ClearSelection();
hgs
parents:
diff changeset
  2570
        
hgs
parents:
diff changeset
  2571
        if ((oldId == KMsvGlobalOutBoxIndexEntryId) || (aNewFolderId == KMsvGlobalOutBoxIndexEntryId))
hgs
parents:
diff changeset
  2572
            {
hgs
parents:
diff changeset
  2573
            iFolderId = aNewFolderId;    
hgs
parents:
diff changeset
  2574
            iMsgListContainer->MakeVisible(EFalse);
hgs
parents:
diff changeset
  2575
            AppUi()->RemoveFromStack(iMsgListContainer);
hgs
parents:
diff changeset
  2576
            delete iMsgListContainer;
hgs
parents:
diff changeset
  2577
            iMsgListContainer = NULL;
hgs
parents:
diff changeset
  2578
            CreateListboxL();
hgs
parents:
diff changeset
  2579
            iMsgListContainer->SetRect(ClientRect());
hgs
parents:
diff changeset
  2580
            AppUi()->AddToStackL( *this,iMsgListContainer );
hgs
parents:
diff changeset
  2581
            iMsgListContainer->ActivateL();
hgs
parents:
diff changeset
  2582
            iMsgListContainer->MakeVisible(ETrue);
hgs
parents:
diff changeset
  2583
            iMsgListContainer->SetFolderL( iFolderId );
hgs
parents:
diff changeset
  2584
            }
hgs
parents:
diff changeset
  2585
        else
hgs
parents:
diff changeset
  2586
            {
hgs
parents:
diff changeset
  2587
            SetFolderL( aNewFolderId );
hgs
parents:
diff changeset
  2588
            }
hgs
parents:
diff changeset
  2589
        
hgs
parents:
diff changeset
  2590
        TUid mtm = iMsgListContainer->FolderEntry().iMtm;
hgs
parents:
diff changeset
  2591
        if ( mtm == KSenduiMtmImap4Uid )
hgs
parents:
diff changeset
  2592
            {
hgs
parents:
diff changeset
  2593
            FindInboxAndOpenItL();
hgs
parents:
diff changeset
  2594
            }
hgs
parents:
diff changeset
  2595
hgs
parents:
diff changeset
  2596
        // NCN reset, if the mail folder contains unread messages
hgs
parents:
diff changeset
  2597
    	if ( iMceUi->CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, mtm ) &&
hgs
parents:
diff changeset
  2598
    	     HasUnreadMessagesL() )
hgs
parents:
diff changeset
  2599
            {
hgs
parents:
diff changeset
  2600
           
hgs
parents:
diff changeset
  2601
            iMceUi->HandleNotif(iMsgListContainer->FolderEntry().iServiceId);
hgs
parents:
diff changeset
  2602
            }
hgs
parents:
diff changeset
  2603
hgs
parents:
diff changeset
  2604
        if ( ( mtm == KSenduiMtmImap4Uid || 
hgs
parents:
diff changeset
  2605
            mtm == KSenduiMtmPop3Uid ) && !iConnectionNote )
hgs
parents:
diff changeset
  2606
            {
hgs
parents:
diff changeset
  2607
            iMceUi->ActivateConnectionQueryTimerL( iFolderId );
hgs
parents:
diff changeset
  2608
            }
hgs
parents:
diff changeset
  2609
        
hgs
parents:
diff changeset
  2610
        SetEmptyTextL();
hgs
parents:
diff changeset
  2611
hgs
parents:
diff changeset
  2612
        if ( IsImapFolderOpenL( ) )        
hgs
parents:
diff changeset
  2613
            {
hgs
parents:
diff changeset
  2614
            //show folder tabs
hgs
parents:
diff changeset
  2615
            TInt depth = 1;            
hgs
parents:
diff changeset
  2616
            const TMsvEntry child = iMsgListContainer->FolderEntry();           
hgs
parents:
diff changeset
  2617
            TMsvId id = child.Parent(); 
hgs
parents:
diff changeset
  2618
            TMsvId service = KMsvLocalServiceIndexEntryId;
hgs
parents:
diff changeset
  2619
            TMsvEntry entry;
hgs
parents:
diff changeset
  2620
            TInt err = iSession->GetEntry( id, service, entry );
hgs
parents:
diff changeset
  2621
               
hgs
parents:
diff changeset
  2622
            while ( err == KErrNone && entry.iType == KUidMsvFolderEntry)
hgs
parents:
diff changeset
  2623
                {
hgs
parents:
diff changeset
  2624
                err = iSession->GetEntry( entry.Parent(), service, entry );
hgs
parents:
diff changeset
  2625
                depth++;
hgs
parents:
diff changeset
  2626
                }
hgs
parents:
diff changeset
  2627
            iMceUi->ShowFolderTabsL( depth );
hgs
parents:
diff changeset
  2628
            }
hgs
parents:
diff changeset
  2629
        }
hgs
parents:
diff changeset
  2630
hgs
parents:
diff changeset
  2631
    const TMsvEntry entry = iMsgListContainer->FolderEntry();
hgs
parents:
diff changeset
  2632
    // Fetch pointer to the default title pane control
hgs
parents:
diff changeset
  2633
    CAknTitlePane* title=iMceUi->TitlePaneL();
hgs
parents:
diff changeset
  2634
    TMsvEntry serviceEntry;
hgs
parents:
diff changeset
  2635
    if ( ( entry.iMtm == KSenduiMtmImap4Uid || IsSyncMl() ) &&
hgs
parents:
diff changeset
  2636
         iSession->GetEntry( entry.iServiceId, serviceId, serviceEntry)
hgs
parents:
diff changeset
  2637
         == KErrNone )
hgs
parents:
diff changeset
  2638
        {
hgs
parents:
diff changeset
  2639
        title->SetTextL( serviceEntry.iDetails );
hgs
parents:
diff changeset
  2640
        }
hgs
parents:
diff changeset
  2641
    else
hgs
parents:
diff changeset
  2642
        {
hgs
parents:
diff changeset
  2643
        title->SetTextL( entry.iDetails );
hgs
parents:
diff changeset
  2644
        }
hgs
parents:
diff changeset
  2645
hgs
parents:
diff changeset
  2646
    TInt sorting = EMceCmdSortByDate;
hgs
parents:
diff changeset
  2647
    TBool ordering = EFalse;
hgs
parents:
diff changeset
  2648
    TMsvId id = iFolderId;       
hgs
parents:
diff changeset
  2649
    for( TInt loop = 0; loop < iFolderItemArray->Count() ; loop++ )
hgs
parents:
diff changeset
  2650
        {
hgs
parents:
diff changeset
  2651
        TMceFolderItem item = ((*iFolderItemArray)[loop]);
hgs
parents:
diff changeset
  2652
        if ( item.iFolderId == id )
hgs
parents:
diff changeset
  2653
            {        
hgs
parents:
diff changeset
  2654
            sorting = item.iSortOrder;
hgs
parents:
diff changeset
  2655
            ordering = item.iOrdering;
hgs
parents:
diff changeset
  2656
            }
hgs
parents:
diff changeset
  2657
        }
hgs
parents:
diff changeset
  2658
hgs
parents:
diff changeset
  2659
    // MSK
hgs
parents:
diff changeset
  2660
    SetMSKButtonL();
hgs
parents:
diff changeset
  2661
hgs
parents:
diff changeset
  2662
    iSortOrder = sorting;
hgs
parents:
diff changeset
  2663
    iOrdering = ordering;
hgs
parents:
diff changeset
  2664
hgs
parents:
diff changeset
  2665
    // Unset flag so one row list container knows that first subtitle is to be opened
hgs
parents:
diff changeset
  2666
    iMsgListContainer->SetContainerFlag( EMceOneRowFlagFirstSubtitleOpen, EFalse );
hgs
parents:
diff changeset
  2667
hgs
parents:
diff changeset
  2668
    iMsgListContainer->SetSortTypeL( iSortOrder, iOrdering );
hgs
parents:
diff changeset
  2669
hgs
parents:
diff changeset
  2670
    if ( !iMsgListContainer->SetCurrentItemIdL( oldId ) )
hgs
parents:
diff changeset
  2671
        {
hgs
parents:
diff changeset
  2672
        iMsgListContainer->ResetCurrentItemL( );
hgs
parents:
diff changeset
  2673
        }
hgs
parents:
diff changeset
  2674
hgs
parents:
diff changeset
  2675
    iMsgListContainer->RefreshSelectionIndexesL( EFalse );
hgs
parents:
diff changeset
  2676
    iMsgListContainer->RefreshListbox();
hgs
parents:
diff changeset
  2677
	                
hgs
parents:
diff changeset
  2678
    MCELOGGER_LEAVEFN("CMceMessageListView::ChangeFolderAndRefreshListboxL");
hgs
parents:
diff changeset
  2679
    }
hgs
parents:
diff changeset
  2680
hgs
parents:
diff changeset
  2681
// ----------------------------------------------------
hgs
parents:
diff changeset
  2682
// CMceMessageListView::SetHideExitCommand
hgs
parents:
diff changeset
  2683
// ----------------------------------------------------
hgs
parents:
diff changeset
  2684
void CMceMessageListView::SetHideExitCommand( TBool aHideExitCommand )
hgs
parents:
diff changeset
  2685
    {
hgs
parents:
diff changeset
  2686
    iHideExitCommand = aHideExitCommand;
hgs
parents:
diff changeset
  2687
    }
hgs
parents:
diff changeset
  2688
hgs
parents:
diff changeset
  2689
// ----------------------------------------------------
hgs
parents:
diff changeset
  2690
// CMceMessageListView::SetEmptyTextL
hgs
parents:
diff changeset
  2691
// now we need to set correct empty string because in remote mailbox it is
hgs
parents:
diff changeset
  2692
// different than in other folders
hgs
parents:
diff changeset
  2693
// ----------------------------------------------------
hgs
parents:
diff changeset
  2694
void CMceMessageListView::SetEmptyTextL() const
hgs
parents:
diff changeset
  2695
    {
hgs
parents:
diff changeset
  2696
    TBool folderIsRemote = iMsgListContainer->IsItemRemote( iMsgListContainer->CurrentFolderId() );
hgs
parents:
diff changeset
  2697
    if ( folderIsRemote && !IsSyncMl() )
hgs
parents:
diff changeset
  2698
        {
hgs
parents:
diff changeset
  2699
        iMsgListContainer->SetListEmptyTextL( *iRemoteMailboxEmptyText );
hgs
parents:
diff changeset
  2700
        }   
hgs
parents:
diff changeset
  2701
    else
hgs
parents:
diff changeset
  2702
        {       
hgs
parents:
diff changeset
  2703
        iMsgListContainer->SetListEmptyTextL( *iEmptyText);
hgs
parents:
diff changeset
  2704
        }
hgs
parents:
diff changeset
  2705
    }
hgs
parents:
diff changeset
  2706
hgs
parents:
diff changeset
  2707
// ----------------------------------------------------
hgs
parents:
diff changeset
  2708
// CMceMessageListView::LaunchViewer
hgs
parents:
diff changeset
  2709
// ----------------------------------------------------
hgs
parents:
diff changeset
  2710
TInt CMceMessageListView::LaunchViewer( TAny* aSelf )
hgs
parents:
diff changeset
  2711
    {
hgs
parents:
diff changeset
  2712
    return REINTERPRET_CAST(CMceMessageListView*,aSelf)->LaunchMceViewer();
hgs
parents:
diff changeset
  2713
    }
hgs
parents:
diff changeset
  2714
hgs
parents:
diff changeset
  2715
// ----------------------------------------------------
hgs
parents:
diff changeset
  2716
// CMceMessageListView::LaunchMceViewer
hgs
parents:
diff changeset
  2717
// ----------------------------------------------------
hgs
parents:
diff changeset
  2718
TInt CMceMessageListView::LaunchMceViewer()
hgs
parents:
diff changeset
  2719
    {
hgs
parents:
diff changeset
  2720
    if ( iMceUi->IsEditorOpen() )
hgs
parents:
diff changeset
  2721
        // something is embedded in mce, wait for that to be closed
hgs
parents:
diff changeset
  2722
        {
hgs
parents:
diff changeset
  2723
        if ( iRunningEditFunction )
hgs
parents:
diff changeset
  2724
            {
hgs
parents:
diff changeset
  2725
            return KErrNone;
hgs
parents:
diff changeset
  2726
            }
hgs
parents:
diff changeset
  2727
        iMceUi->CloseEditorApp();
hgs
parents:
diff changeset
  2728
        if ( iLaunchViewerCounter++ < KMceLaunchViewerRetryCounter )
hgs
parents:
diff changeset
  2729
            {
hgs
parents:
diff changeset
  2730
            MCELOGGER_WRITE_FORMAT("LaunchMceViewer: wait editor to close...iLaunchViewerCounter = %d", iLaunchViewerCounter);
hgs
parents:
diff changeset
  2731
            return KErrNotReady;
hgs
parents:
diff changeset
  2732
            }
hgs
parents:
diff changeset
  2733
        else
hgs
parents:
diff changeset
  2734
            {
hgs
parents:
diff changeset
  2735
            MCELOGGER_WRITE("LaunchMceViewer: editor did not close quickly enough, give up waiting...");
hgs
parents:
diff changeset
  2736
            delete iLocalScreenClearer;
hgs
parents:
diff changeset
  2737
            iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
  2738
            delete iMessageViewerLauncher;
hgs
parents:
diff changeset
  2739
            iMessageViewerLauncher = NULL;
hgs
parents:
diff changeset
  2740
            return KErrNone;
hgs
parents:
diff changeset
  2741
            }
hgs
parents:
diff changeset
  2742
        }
hgs
parents:
diff changeset
  2743
hgs
parents:
diff changeset
  2744
    if ( iMceUi->IsEditorOpen() )
hgs
parents:
diff changeset
  2745
        {
hgs
parents:
diff changeset
  2746
        MCELOGGER_WRITE("LaunchMceViewer: do not open because already editing one");
hgs
parents:
diff changeset
  2747
        delete iLocalScreenClearer;
hgs
parents:
diff changeset
  2748
        iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
  2749
        delete iMessageViewerLauncher;
hgs
parents:
diff changeset
  2750
        iMessageViewerLauncher = NULL;
hgs
parents:
diff changeset
  2751
        return KErrNone;
hgs
parents:
diff changeset
  2752
        }
hgs
parents:
diff changeset
  2753
        
hgs
parents:
diff changeset
  2754
    TMsvId firstUnreadMessageId = KErrNotFound;
hgs
parents:
diff changeset
  2755
    TBool oneUnreadMessage = EFalse;
hgs
parents:
diff changeset
  2756
    TRAPD( error, oneUnreadMessage = iMsgListContainer->FindFirstUnreadMessageL( firstUnreadMessageId ));
hgs
parents:
diff changeset
  2757
    if ( error )
hgs
parents:
diff changeset
  2758
        {
hgs
parents:
diff changeset
  2759
        oneUnreadMessage = EFalse;
hgs
parents:
diff changeset
  2760
        }
hgs
parents:
diff changeset
  2761
    TMsvEntry firstEntry;
hgs
parents:
diff changeset
  2762
    TMsvId serviceId;
hgs
parents:
diff changeset
  2763
hgs
parents:
diff changeset
  2764
    if ( oneUnreadMessage && firstUnreadMessageId > KErrNotFound && 
hgs
parents:
diff changeset
  2765
        iSession->GetEntry( firstUnreadMessageId, serviceId, firstEntry ) == KErrNone )
hgs
parents:
diff changeset
  2766
        {
hgs
parents:
diff changeset
  2767
        TUid messageMtm = firstEntry.iMtm;
hgs
parents:
diff changeset
  2768
        
hgs
parents:
diff changeset
  2769
    	if ( (messageMtm!=KSenduiMtmIrUidValue) &&
hgs
parents:
diff changeset
  2770
    	     (messageMtm!=KSenduiMtmBtUidValue) &&
hgs
parents:
diff changeset
  2771
    	     (messageMtm!=KSenduiMtmSmtpUidValue) &&
hgs
parents:
diff changeset
  2772
    	     (messageMtm!=KSenduiMtmImap4UidValue) &&
hgs
parents:
diff changeset
  2773
    	     (messageMtm!=KSenduiMtmPop3UidValue)
hgs
parents:
diff changeset
  2774
    	   )
hgs
parents:
diff changeset
  2775
    	    {
hgs
parents:
diff changeset
  2776
            MCELOGGER_WRITE("LaunchMceViewer: launch editor");
hgs
parents:
diff changeset
  2777
            iRunningEditFunction = ETrue;
hgs
parents:
diff changeset
  2778
            TRAP_IGNORE( iMceUi->EditMTMEntryL( firstEntry ) );
hgs
parents:
diff changeset
  2779
            iRunningEditFunction = EFalse;
hgs
parents:
diff changeset
  2780
    	    }
hgs
parents:
diff changeset
  2781
        }
hgs
parents:
diff changeset
  2782
    delete iLocalScreenClearer;
hgs
parents:
diff changeset
  2783
    iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
  2784
    delete iMessageViewerLauncher;
hgs
parents:
diff changeset
  2785
    iMessageViewerLauncher = NULL;
hgs
parents:
diff changeset
  2786
    MCELOGGER_WRITE("LaunchMceViewer: done");
hgs
parents:
diff changeset
  2787
    return KErrNone; 
hgs
parents:
diff changeset
  2788
    }
hgs
parents:
diff changeset
  2789
hgs
parents:
diff changeset
  2790
// ----------------------------------------------------
hgs
parents:
diff changeset
  2791
// CMceMessageListView::HandleSendViaMenuItemL
hgs
parents:
diff changeset
  2792
//
hgs
parents:
diff changeset
  2793
// ----------------------------------------------------
hgs
parents:
diff changeset
  2794
void CMceMessageListView::HandleSendViaMenuItemL( TMsvId aEntryId, CEikMenuPane* aMenuPane ) const
hgs
parents:
diff changeset
  2795
    {
hgs
parents:
diff changeset
  2796
    TBool dimSendVia = ETrue;
hgs
parents:
diff changeset
  2797
    TFileName fileName;
hgs
parents:
diff changeset
  2798
    RApaLsSession apaLs;
hgs
parents:
diff changeset
  2799
    TBool         isProgram = EFalse;
hgs
parents:
diff changeset
  2800
    TUid          appUid(KNullUid);
hgs
parents:
diff changeset
  2801
hgs
parents:
diff changeset
  2802
    MCELOGGER_WRITE_FORMAT("CMceMessageListView::HandleSendViaMenuItemL: aEntryId: 0x%x", aEntryId );
hgs
parents:
diff changeset
  2803
	TInt fileSize;
hgs
parents:
diff changeset
  2804
    RFile fileHandle;
hgs
parents:
diff changeset
  2805
	MceUtils::GetIrFilePathL( *iSession, aEntryId, fileName, fileHandle, fileSize );
hgs
parents:
diff changeset
  2806
	CleanupClosePushL( fileHandle );
hgs
parents:
diff changeset
  2807
hgs
parents:
diff changeset
  2808
    TBuf<KMaxDataTypeLength> mimeType;
hgs
parents:
diff changeset
  2809
    mimeType.Zero();
hgs
parents:
diff changeset
  2810
    if (apaLs.Connect() == KErrNone)
hgs
parents:
diff changeset
  2811
        {
hgs
parents:
diff changeset
  2812
        TDataType datatype;
hgs
parents:
diff changeset
  2813
        apaLs.SetAcceptedConfidence( CApaDataRecognizerType::ECertain );
hgs
parents:
diff changeset
  2814
        apaLs.AppForDocument( fileName, appUid, datatype );
hgs
parents:
diff changeset
  2815
        apaLs.IsProgram( fileName, isProgram );
hgs
parents:
diff changeset
  2816
        mimeType = datatype.Des();
hgs
parents:
diff changeset
  2817
        apaLs.Close();
hgs
parents:
diff changeset
  2818
        }
hgs
parents:
diff changeset
  2819
hgs
parents:
diff changeset
  2820
#ifdef _DEBUG
hgs
parents:
diff changeset
  2821
    // make sure buffer does not get too long for logging.
hgs
parents:
diff changeset
  2822
    TBuf<KMcePrintableTextLength> debugMimeType = mimeType.Left( KMcePrintableTextLength );
hgs
parents:
diff changeset
  2823
    MCELOGGER_WRITE_FORMAT("mime type: \"%s\"", debugMimeType.PtrZ());
hgs
parents:
diff changeset
  2824
#endif
hgs
parents:
diff changeset
  2825
    if (appUid.iUid == 0 || isProgram)
hgs
parents:
diff changeset
  2826
        {
hgs
parents:
diff changeset
  2827
        MCELOGGER_WRITE( "application not found" );
hgs
parents:
diff changeset
  2828
        dimSendVia = EFalse;
hgs
parents:
diff changeset
  2829
        }
hgs
parents:
diff changeset
  2830
#ifdef _DEBUG
hgs
parents:
diff changeset
  2831
    else
hgs
parents:
diff changeset
  2832
        {
hgs
parents:
diff changeset
  2833
        MCELOGGER_WRITE_FORMAT("application found: uid 0x%x", appUid.iUid );
hgs
parents:
diff changeset
  2834
        MCELOGGER_WRITE_FORMAT("is program: %d", isProgram );
hgs
parents:
diff changeset
  2835
        }
hgs
parents:
diff changeset
  2836
#endif
hgs
parents:
diff changeset
  2837
hgs
parents:
diff changeset
  2838
    CCommonContentPolicy* contentPolicy = CCommonContentPolicy::NewLC();
hgs
parents:
diff changeset
  2839
    TBool banned = ( contentPolicy->IsClosedFileL( fileHandle ) );
hgs
parents:
diff changeset
  2840
    if ( banned )
hgs
parents:
diff changeset
  2841
        {
hgs
parents:
diff changeset
  2842
        dimSendVia = banned;
hgs
parents:
diff changeset
  2843
        }	
hgs
parents:
diff changeset
  2844
    CleanupStack::PopAndDestroy(2); // contentPolicy, fileHandle
hgs
parents:
diff changeset
  2845
hgs
parents:
diff changeset
  2846
    MCELOGGER_WRITE_FORMAT("dim EMceCmdSendVia menu: %d", dimSendVia );
hgs
parents:
diff changeset
  2847
    aMenuPane->SetItemDimmed( EMceCmdSendVia, dimSendVia );
hgs
parents:
diff changeset
  2848
    }
hgs
parents:
diff changeset
  2849
hgs
parents:
diff changeset
  2850
// ----------------------------------------------------
hgs
parents:
diff changeset
  2851
// CMceMessageListView::MessageViewHandleEntriesCreatedOrChangedL
hgs
parents:
diff changeset
  2852
//
hgs
parents:
diff changeset
  2853
// ----------------------------------------------------
hgs
parents:
diff changeset
  2854
void CMceMessageListView::MessageViewHandleEntriesCreatedOrChangedL(
hgs
parents:
diff changeset
  2855
    TMsvId aParentId,
hgs
parents:
diff changeset
  2856
    CMsvEntrySelection* aSelection )
hgs
parents:
diff changeset
  2857
    {
hgs
parents:
diff changeset
  2858
    if ( !iMsgListContainer )
hgs
parents:
diff changeset
  2859
        {
hgs
parents:
diff changeset
  2860
        return;
hgs
parents:
diff changeset
  2861
        }
hgs
parents:
diff changeset
  2862
    TMsvEntry entry = iMsgListContainer->FolderEntry();
hgs
parents:
diff changeset
  2863
    MCELOGGER_WRITE_FORMAT("parentId 0x%x", aParentId );
hgs
parents:
diff changeset
  2864
    MCELOGGER_WRITE_FORMAT("currentId 0x%x", entry.Id() );
hgs
parents:
diff changeset
  2865
    if ( aParentId != entry.Id() )
hgs
parents:
diff changeset
  2866
        {
hgs
parents:
diff changeset
  2867
        MCELOGGER_WRITE("Not happening in our folder, just skip");
hgs
parents:
diff changeset
  2868
        return;
hgs
parents:
diff changeset
  2869
        }
hgs
parents:
diff changeset
  2870
    if ( entry.Parent() == KMsvRootIndexEntryId &&
hgs
parents:
diff changeset
  2871
         entry.iMtm == KSenduiMtmImap4Uid &&
hgs
parents:
diff changeset
  2872
         entry.iType == KUidMsvServiceEntry &&
hgs
parents:
diff changeset
  2873
         iMsgListContainer->Count() )
hgs
parents:
diff changeset
  2874
        {
hgs
parents:
diff changeset
  2875
        FindInboxAndOpenItL();
hgs
parents:
diff changeset
  2876
        if ( iMsgListContainer )
hgs
parents:
diff changeset
  2877
            {
hgs
parents:
diff changeset
  2878
            iMsgListContainer->SetFolderL( iMsgListContainer->FolderEntry().Id() );
hgs
parents:
diff changeset
  2879
            }
hgs
parents:
diff changeset
  2880
        }
hgs
parents:
diff changeset
  2881
hgs
parents:
diff changeset
  2882
    if ( aSelection->Count() && iMsgListContainer )
hgs
parents:
diff changeset
  2883
        {
hgs
parents:
diff changeset
  2884
        iMsgListContainer->RefreshSelectionIndexesL( EFalse );
hgs
parents:
diff changeset
  2885
        iMsgListContainer->RefreshListbox();
hgs
parents:
diff changeset
  2886
        }
hgs
parents:
diff changeset
  2887
hgs
parents:
diff changeset
  2888
    }
hgs
parents:
diff changeset
  2889
hgs
parents:
diff changeset
  2890
// ----------------------------------------------------
hgs
parents:
diff changeset
  2891
// CMceMessageListView::FindAndSelectEntryL
hgs
parents:
diff changeset
  2892
// Sets found item in message list
hgs
parents:
diff changeset
  2893
// ----------------------------------------------------
hgs
parents:
diff changeset
  2894
void CMceMessageListView::FindAndSelectEntryL( const TDesC& aMatchString ) const
hgs
parents:
diff changeset
  2895
    {
hgs
parents:
diff changeset
  2896
    TMsvId foundEntry = iMsgListContainer->FindEntry( aMatchString );
hgs
parents:
diff changeset
  2897
    if ( foundEntry > KErrNotFound )
hgs
parents:
diff changeset
  2898
        {
hgs
parents:
diff changeset
  2899
        iMsgListContainer->SetCurrentItemIdL( foundEntry );
hgs
parents:
diff changeset
  2900
        iMsgListContainer->RefreshListbox();
hgs
parents:
diff changeset
  2901
        }
hgs
parents:
diff changeset
  2902
    }
hgs
parents:
diff changeset
  2903
hgs
parents:
diff changeset
  2904
// ----------------------------------------------------
hgs
parents:
diff changeset
  2905
// CMceMessageListView::HandleSortCommandL
hgs
parents:
diff changeset
  2906
// 
hgs
parents:
diff changeset
  2907
// ----------------------------------------------------
hgs
parents:
diff changeset
  2908
void CMceMessageListView::HandleSortCommandL( const TInt aCommand )
hgs
parents:
diff changeset
  2909
    {
hgs
parents:
diff changeset
  2910
    // set sort order in folder array
hgs
parents:
diff changeset
  2911
    TMsvId id = iFolderId; 
hgs
parents:
diff changeset
  2912
    TBool folderFound = EFalse;
hgs
parents:
diff changeset
  2913
hgs
parents:
diff changeset
  2914
    if ( aCommand == iSortOrder )
hgs
parents:
diff changeset
  2915
        {
hgs
parents:
diff changeset
  2916
    // Toggle
hgs
parents:
diff changeset
  2917
        iOrdering = !iOrdering;
hgs
parents:
diff changeset
  2918
        }
hgs
parents:
diff changeset
  2919
    else
hgs
parents:
diff changeset
  2920
        {
hgs
parents:
diff changeset
  2921
        iOrdering = EFalse;
hgs
parents:
diff changeset
  2922
        }
hgs
parents:
diff changeset
  2923
hgs
parents:
diff changeset
  2924
    for( TInt loop = 0; loop < iFolderItemArray->Count() ; loop++ )
hgs
parents:
diff changeset
  2925
        {
hgs
parents:
diff changeset
  2926
        TMceFolderItem item = ((*iFolderItemArray)[loop]);
hgs
parents:
diff changeset
  2927
        if ( item.iFolderId == id/*service*/ )
hgs
parents:
diff changeset
  2928
            {
hgs
parents:
diff changeset
  2929
                ((*iFolderItemArray)[loop]).iSortOrder = aCommand;
hgs
parents:
diff changeset
  2930
                ((*iFolderItemArray)[loop]).iOrdering = iOrdering;
hgs
parents:
diff changeset
  2931
                folderFound = ETrue;
hgs
parents:
diff changeset
  2932
            }
hgs
parents:
diff changeset
  2933
        }
hgs
parents:
diff changeset
  2934
    // add folder item to folder array
hgs
parents:
diff changeset
  2935
    if (!folderFound)
hgs
parents:
diff changeset
  2936
        {
hgs
parents:
diff changeset
  2937
        TMceFolderItem item;
hgs
parents:
diff changeset
  2938
        item.iFolderId = id/*service*/;
hgs
parents:
diff changeset
  2939
        item.iSortOrder = aCommand;
hgs
parents:
diff changeset
  2940
        item.iOrdering = iOrdering;
hgs
parents:
diff changeset
  2941
hgs
parents:
diff changeset
  2942
        iFolderItemArray->AppendL( item );
hgs
parents:
diff changeset
  2943
        }
hgs
parents:
diff changeset
  2944
hgs
parents:
diff changeset
  2945
    // Switch the sort ordering if needed
hgs
parents:
diff changeset
  2946
    iSortOrder = aCommand;
hgs
parents:
diff changeset
  2947
hgs
parents:
diff changeset
  2948
    // Update the selection in the listbox
hgs
parents:
diff changeset
  2949
    TMsvId currentItemId = iMsgListContainer->CurrentItemId();
hgs
parents:
diff changeset
  2950
hgs
parents:
diff changeset
  2951
    // If no focused item in one row list or focused item is folder
hgs
parents:
diff changeset
  2952
    // first subtitle is opened
hgs
parents:
diff changeset
  2953
    if ( currentItemId == KErrNotFound ||
hgs
parents:
diff changeset
  2954
        iMsgListContainer->IsItemFolder( currentItemId ) )
hgs
parents:
diff changeset
  2955
        {
hgs
parents:
diff changeset
  2956
        iMsgListContainer->SetContainerFlag( 
hgs
parents:
diff changeset
  2957
                EMceOneRowFlagFirstSubtitleOpen, EFalse );    
hgs
parents:
diff changeset
  2958
        }
hgs
parents:
diff changeset
  2959
hgs
parents:
diff changeset
  2960
    // Sort the items of the listbox
hgs
parents:
diff changeset
  2961
    iMsgListContainer->SetSortTypeL( aCommand, iOrdering );   
hgs
parents:
diff changeset
  2962
    iMsgListContainer->RefreshSelectionIndexesL( EFalse );
hgs
parents:
diff changeset
  2963
hgs
parents:
diff changeset
  2964
    // Update the selection in the listbox
hgs
parents:
diff changeset
  2965
    iMsgListContainer->SetCurrentItemIdL( currentItemId );
hgs
parents:
diff changeset
  2966
hgs
parents:
diff changeset
  2967
    }
hgs
parents:
diff changeset
  2968
hgs
parents:
diff changeset
  2969
// ----------------------------------------------------
hgs
parents:
diff changeset
  2970
// CMceMessageListView::SyncMlOutboxInbox
hgs
parents:
diff changeset
  2971
// 
hgs
parents:
diff changeset
  2972
// ----------------------------------------------------
hgs
parents:
diff changeset
  2973
TBool CMceMessageListView::SyncMlOutboxInbox( TMsvId aFolder ) const
hgs
parents:
diff changeset
  2974
    {
hgs
parents:
diff changeset
  2975
    TBool syncMl = EFalse;
hgs
parents:
diff changeset
  2976
    if ( IsSyncMl() )
hgs
parents:
diff changeset
  2977
        {
hgs
parents:
diff changeset
  2978
        TMsvId id = iMsgListContainer->FolderEntry().Parent();        
hgs
parents:
diff changeset
  2979
        TMsvEntry parentEntry;
hgs
parents:
diff changeset
  2980
        TMsvId serviceId;
hgs
parents:
diff changeset
  2981
        if ( iSession->GetEntry( id, serviceId, parentEntry ) == KErrNone )
hgs
parents:
diff changeset
  2982
            {
hgs
parents:
diff changeset
  2983
            if ( aFolder == KMsvGlobalInBoxIndexEntryId )
hgs
parents:
diff changeset
  2984
                {                
hgs
parents:
diff changeset
  2985
                if ( ( iMsgListContainer->FolderEntry().Id() == parentEntry.iMtmData1 ) ||
hgs
parents:
diff changeset
  2986
                     ( iMsgListContainer->FolderEntry().iRelatedId == KMsvGlobalInBoxIndexEntryId ) )
hgs
parents:
diff changeset
  2987
                    {                   
hgs
parents:
diff changeset
  2988
                    syncMl = ETrue;
hgs
parents:
diff changeset
  2989
                    }
hgs
parents:
diff changeset
  2990
                }
hgs
parents:
diff changeset
  2991
            else if ( aFolder == KMsvGlobalOutBoxIndexEntryId )
hgs
parents:
diff changeset
  2992
                {                
hgs
parents:
diff changeset
  2993
                if ( ( iMsgListContainer->FolderEntry().Id() == parentEntry.iMtmData2 ) ||
hgs
parents:
diff changeset
  2994
                    ( iMsgListContainer->FolderEntry().iRelatedId == KMsvGlobalOutBoxIndexEntryId ) )
hgs
parents:
diff changeset
  2995
                    {
hgs
parents:
diff changeset
  2996
                    syncMl = ETrue;
hgs
parents:
diff changeset
  2997
                    }
hgs
parents:
diff changeset
  2998
                }
hgs
parents:
diff changeset
  2999
            else if ( aFolder == KMsvDraftEntryId )
hgs
parents:
diff changeset
  3000
                {                
hgs
parents:
diff changeset
  3001
                if ( ( iMsgListContainer->FolderEntry().Id() == parentEntry.iMtmData1 ) ||
hgs
parents:
diff changeset
  3002
                     ( iMsgListContainer->FolderEntry().iRelatedId == KMsvDraftEntryId ) )
hgs
parents:
diff changeset
  3003
                    {                   
hgs
parents:
diff changeset
  3004
                    syncMl = ETrue;
hgs
parents:
diff changeset
  3005
                    }
hgs
parents:
diff changeset
  3006
                }
hgs
parents:
diff changeset
  3007
            else if ( aFolder == KMsvSentEntryId )
hgs
parents:
diff changeset
  3008
                {                
hgs
parents:
diff changeset
  3009
                if ( ( iMsgListContainer->FolderEntry().Id() == parentEntry.iMtmData1 ) ||
hgs
parents:
diff changeset
  3010
                     ( iMsgListContainer->FolderEntry().iRelatedId == KMsvSentEntryId ) )
hgs
parents:
diff changeset
  3011
                    {                   
hgs
parents:
diff changeset
  3012
                    syncMl = ETrue;
hgs
parents:
diff changeset
  3013
                    }
hgs
parents:
diff changeset
  3014
                }                                
hgs
parents:
diff changeset
  3015
            }
hgs
parents:
diff changeset
  3016
        }
hgs
parents:
diff changeset
  3017
   
hgs
parents:
diff changeset
  3018
    return syncMl;
hgs
parents:
diff changeset
  3019
    }
hgs
parents:
diff changeset
  3020
hgs
parents:
diff changeset
  3021
// ----------------------------------------------------
hgs
parents:
diff changeset
  3022
// CMceMessageListView::IsSyncMl
hgs
parents:
diff changeset
  3023
// 
hgs
parents:
diff changeset
  3024
// Checks if the folder is a SyncML folder
hgs
parents:
diff changeset
  3025
// ----------------------------------------------------
hgs
parents:
diff changeset
  3026
TBool CMceMessageListView::IsSyncMl() const
hgs
parents:
diff changeset
  3027
    {
hgs
parents:
diff changeset
  3028
    return ( iMceUi->IsPresent( KSenduiMtmSyncMLEmailUid ) &&
hgs
parents:
diff changeset
  3029
        ( iMsgListContainer->FolderEntry().iMtm == KSenduiMtmSyncMLEmailUid ) );       
hgs
parents:
diff changeset
  3030
    }
hgs
parents:
diff changeset
  3031
hgs
parents:
diff changeset
  3032
// ----------------------------------------------------
hgs
parents:
diff changeset
  3033
// CMceMessageListView::SyncMlFindInboxAndOpenItL
hgs
parents:
diff changeset
  3034
// ----------------------------------------------------
hgs
parents:
diff changeset
  3035
void CMceMessageListView::SyncMlFindInboxAndOpenItL()
hgs
parents:
diff changeset
  3036
    {
hgs
parents:
diff changeset
  3037
    TMsvId inboxId = KErrNotFound;
hgs
parents:
diff changeset
  3038
    TMsvEntry child;
hgs
parents:
diff changeset
  3039
    CMsvEntry* entry = CMsvEntry::NewL(
hgs
parents:
diff changeset
  3040
        *iSession,
hgs
parents:
diff changeset
  3041
        iMsgListContainer->CurrentFolderId(),
hgs
parents:
diff changeset
  3042
        TMsvSelectionOrdering(
hgs
parents:
diff changeset
  3043
            KMsvGroupByStandardFolders, EMsvSortByDateReverse) );
hgs
parents:
diff changeset
  3044
    CleanupStack::PushL( entry );
hgs
parents:
diff changeset
  3045
    const TInt count = entry->Count();
hgs
parents:
diff changeset
  3046
    for (TInt loop = 0; loop < count && inboxId == KErrNotFound; loop++)
hgs
parents:
diff changeset
  3047
        {
hgs
parents:
diff changeset
  3048
        child = (*entry)[loop];
hgs
parents:
diff changeset
  3049
        if ( child.iType == KUidMsvFolderEntry  &&
hgs
parents:
diff changeset
  3050
            child.iRelatedId == KMsvGlobalInBoxIndexEntryId )
hgs
parents:
diff changeset
  3051
            {
hgs
parents:
diff changeset
  3052
            inboxId = child.Id();
hgs
parents:
diff changeset
  3053
            }
hgs
parents:
diff changeset
  3054
        }
hgs
parents:
diff changeset
  3055
hgs
parents:
diff changeset
  3056
    if ( inboxId != KErrNotFound )
hgs
parents:
diff changeset
  3057
        {
hgs
parents:
diff changeset
  3058
        SetFolderL( inboxId );
hgs
parents:
diff changeset
  3059
        }
hgs
parents:
diff changeset
  3060
    CleanupStack::PopAndDestroy( entry );
hgs
parents:
diff changeset
  3061
    }
hgs
parents:
diff changeset
  3062
// ----------------------------------------------------
hgs
parents:
diff changeset
  3063
// CMceMessageListView::IsImapFolderOpenL
hgs
parents:
diff changeset
  3064
// ----------------------------------------------------
hgs
parents:
diff changeset
  3065
TBool CMceMessageListView::IsImapFolderOpenL( ) const
hgs
parents:
diff changeset
  3066
    {
hgs
parents:
diff changeset
  3067
    //imapfolders
hgs
parents:
diff changeset
  3068
    //we can't have imap folder if mtm isn't imap
hgs
parents:
diff changeset
  3069
    if( iMsgListContainer->FolderEntry().iMtm != KSenduiMtmImap4Uid )
hgs
parents:
diff changeset
  3070
        {
hgs
parents:
diff changeset
  3071
        return EFalse;
hgs
parents:
diff changeset
  3072
        }
hgs
parents:
diff changeset
  3073
    
hgs
parents:
diff changeset
  3074
    TMsvEntry child;    
hgs
parents:
diff changeset
  3075
    TInt cnt = 0;    
hgs
parents:
diff changeset
  3076
hgs
parents:
diff changeset
  3077
    CMsvEntry *parent = iSession->GetEntryL( iMsgListContainer->FolderEntry().Parent() );
hgs
parents:
diff changeset
  3078
    CleanupStack::PushL( parent );
hgs
parents:
diff changeset
  3079
    if( parent->Entry().iType != KUidMsvFolderEntry )
hgs
parents:
diff changeset
  3080
        {
hgs
parents:
diff changeset
  3081
        const TInt count = parent->Count();
hgs
parents:
diff changeset
  3082
hgs
parents:
diff changeset
  3083
        for ( TInt loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
  3084
            {
hgs
parents:
diff changeset
  3085
            child = (*parent)[loop];
hgs
parents:
diff changeset
  3086
            if( child.iType == KUidMsvFolderEntry )
hgs
parents:
diff changeset
  3087
                {
hgs
parents:
diff changeset
  3088
                cnt++;
hgs
parents:
diff changeset
  3089
                //entry = child;
hgs
parents:
diff changeset
  3090
                }
hgs
parents:
diff changeset
  3091
            }
hgs
parents:
diff changeset
  3092
        }
hgs
parents:
diff changeset
  3093
hgs
parents:
diff changeset
  3094
    CleanupStack::PopAndDestroy( parent );
hgs
parents:
diff changeset
  3095
hgs
parents:
diff changeset
  3096
    //if type is folder, then we must have a folder open.
hgs
parents:
diff changeset
  3097
    if( iMsgListContainer->FolderEntry().iType == KUidMsvFolderEntry && cnt != KMceOnlyInboxInImap )
hgs
parents:
diff changeset
  3098
        {
hgs
parents:
diff changeset
  3099
        return ETrue;
hgs
parents:
diff changeset
  3100
        }
hgs
parents:
diff changeset
  3101
hgs
parents:
diff changeset
  3102
    return EFalse;
hgs
parents:
diff changeset
  3103
    }
hgs
parents:
diff changeset
  3104
hgs
parents:
diff changeset
  3105
// ----------------------------------------------------
hgs
parents:
diff changeset
  3106
// CMceMessageListView::CheckMMSNotificationOpenL
hgs
parents:
diff changeset
  3107
// ----------------------------------------------------
hgs
parents:
diff changeset
  3108
TBool CMceMessageListView::CheckMMSNotificationOpenL( ) const
hgs
parents:
diff changeset
  3109
    {
hgs
parents:
diff changeset
  3110
    TBool skip = EFalse;
hgs
parents:
diff changeset
  3111
    TMsvId currentFolderId = iFolderId;
hgs
parents:
diff changeset
  3112
    const TInt count = iMsgListContainer->CurrentItemSelectionCount();
hgs
parents:
diff changeset
  3113
    TMsvId currentId = KErrNotFound;
hgs
parents:
diff changeset
  3114
    if ( count == 1 )
hgs
parents:
diff changeset
  3115
        {
hgs
parents:
diff changeset
  3116
        // one selected
hgs
parents:
diff changeset
  3117
        currentId = iMsgListContainer->CurrentItemId();
hgs
parents:
diff changeset
  3118
        }   
hgs
parents:
diff changeset
  3119
hgs
parents:
diff changeset
  3120
    if ( ( currentId != KErrNotFound ) 
hgs
parents:
diff changeset
  3121
        && ( currentFolderId == KMsvGlobalInBoxIndexEntryId )  )
hgs
parents:
diff changeset
  3122
        {        
hgs
parents:
diff changeset
  3123
        TMsvEntry currentEntry;
hgs
parents:
diff changeset
  3124
        TMsvId serviceId;
hgs
parents:
diff changeset
  3125
        
hgs
parents:
diff changeset
  3126
        if ( iSession->GetEntry( currentId, serviceId, currentEntry )
hgs
parents:
diff changeset
  3127
            == KErrNone )
hgs
parents:
diff changeset
  3128
            {            
hgs
parents:
diff changeset
  3129
            if ( ( currentEntry.iType == KUidMsvMessageEntry ) &&
hgs
parents:
diff changeset
  3130
                ( currentEntry.iMtm == KUidMsgMMSNotification ) )
hgs
parents:
diff changeset
  3131
                {
hgs
parents:
diff changeset
  3132
                CBaseMtmUiData* uiData = iMceUi->GetMtmUiDataL( KUidMsgMMSNotification );
hgs
parents:
diff changeset
  3133
                // Coverty change, NULL Return, http://ousrv057/cov.cgi?cid=101803
hgs
parents:
diff changeset
  3134
                if ( uiData )
hgs
parents:
diff changeset
  3135
                    {
hgs
parents:
diff changeset
  3136
                	skip = uiData->OperationSupportedL( KMtmUiFunctionOpenMessage, currentEntry );
hgs
parents:
diff changeset
  3137
                	}	
hgs
parents:
diff changeset
  3138
                }
hgs
parents:
diff changeset
  3139
            }
hgs
parents:
diff changeset
  3140
        }    
hgs
parents:
diff changeset
  3141
    return skip;
hgs
parents:
diff changeset
  3142
    }
hgs
parents:
diff changeset
  3143
hgs
parents:
diff changeset
  3144
// ----------------------------------------------------
hgs
parents:
diff changeset
  3145
// CMceMessageListView::OpenMailboxSettingsL()
hgs
parents:
diff changeset
  3146
// 
hgs
parents:
diff changeset
  3147
// ----------------------------------------------------
hgs
parents:
diff changeset
  3148
void CMceMessageListView::OpenMailboxSettingsL()
hgs
parents:
diff changeset
  3149
    {
hgs
parents:
diff changeset
  3150
    TInt currentIndex = 0;
hgs
parents:
diff changeset
  3151
    TMsvId currentId = 0;
hgs
parents:
diff changeset
  3152
    TInt currentCount = iMsgListContainer->Count();
hgs
parents:
diff changeset
  3153
    if ( currentCount > 0 )
hgs
parents:
diff changeset
  3154
        {
hgs
parents:
diff changeset
  3155
        currentId = iMsgListContainer->CurrentItemId();
hgs
parents:
diff changeset
  3156
        }
hgs
parents:
diff changeset
  3157
	    
hgs
parents:
diff changeset
  3158
    const TMsvEntry& entry = iMsgListContainer->FolderEntry();
hgs
parents:
diff changeset
  3159
    
hgs
parents:
diff changeset
  3160
    CAknTitlePane* title = iMceUi->TitlePaneL();
hgs
parents:
diff changeset
  3161
    TMsvEntry tEntry;
hgs
parents:
diff changeset
  3162
    TMsvId serviceId;
hgs
parents:
diff changeset
  3163
    User::LeaveIfError( iSession->GetEntry( entry.iServiceId, serviceId, tEntry ) );
hgs
parents:
diff changeset
  3164
hgs
parents:
diff changeset
  3165
hgs
parents:
diff changeset
  3166
    iMceUi->EditAccountL( tEntry.iRelatedId );
hgs
parents:
diff changeset
  3167
    User::LeaveIfError( iSession->GetEntry( serviceId, serviceId, tEntry ) );
hgs
parents:
diff changeset
  3168
    
hgs
parents:
diff changeset
  3169
    //set title even if inbox was opened directly
hgs
parents:
diff changeset
  3170
    if ( iMsgListContainer->FolderEntry().Id() == tEntry.Id() ||
hgs
parents:
diff changeset
  3171
            iMsgListContainer->FolderEntry().Parent() == tEntry.Id() )
hgs
parents:
diff changeset
  3172
        {
hgs
parents:
diff changeset
  3173
        title->SetTextL( tEntry.iDetails );
hgs
parents:
diff changeset
  3174
        }
hgs
parents:
diff changeset
  3175
	
hgs
parents:
diff changeset
  3176
    if ( iMsgListContainer->FolderEntry().Id() == tEntry.Id() )
hgs
parents:
diff changeset
  3177
        {
hgs
parents:
diff changeset
  3178
        TInt newCount = iMsgListContainer->Count();	
hgs
parents:
diff changeset
  3179
hgs
parents:
diff changeset
  3180
        if ( newCount > 0 )
hgs
parents:
diff changeset
  3181
            {
hgs
parents:
diff changeset
  3182
            if ( currentIndex >= newCount )
hgs
parents:
diff changeset
  3183
                {
hgs
parents:
diff changeset
  3184
                currentIndex = newCount - 1;		
hgs
parents:
diff changeset
  3185
                }
hgs
parents:
diff changeset
  3186
            else
hgs
parents:
diff changeset
  3187
                {		
hgs
parents:
diff changeset
  3188
                iMsgListContainer->SetCurrentItemIdL( currentId );
hgs
parents:
diff changeset
  3189
                }
hgs
parents:
diff changeset
  3190
            }
hgs
parents:
diff changeset
  3191
        }
hgs
parents:
diff changeset
  3192
    }
hgs
parents:
diff changeset
  3193
hgs
parents:
diff changeset
  3194
// ----------------------------------------------------
hgs
parents:
diff changeset
  3195
// CMceMessageListView::HandleStatusPaneSizeChange()
hgs
parents:
diff changeset
  3196
// 
hgs
parents:
diff changeset
  3197
// ----------------------------------------------------
hgs
parents:
diff changeset
  3198
void CMceMessageListView::HandleStatusPaneSizeChange()
hgs
parents:
diff changeset
  3199
    {
hgs
parents:
diff changeset
  3200
    if ( iMsgListContainer )
hgs
parents:
diff changeset
  3201
        {
hgs
parents:
diff changeset
  3202
        iMsgListContainer->SetRect( ClientRect() );
hgs
parents:
diff changeset
  3203
        }
hgs
parents:
diff changeset
  3204
    CAknView::HandleStatusPaneSizeChange();    
hgs
parents:
diff changeset
  3205
    }
hgs
parents:
diff changeset
  3206
    
hgs
parents:
diff changeset
  3207
//// ----------------------------------------------------
hgs
parents:
diff changeset
  3208
// CMceMessageListView::LaunchViewerWhenOneUnreadL( TInt &aMsgMtmUid )
hgs
parents:
diff changeset
  3209
// 
hgs
parents:
diff changeset
  3210
// ----------------------------------------------------
hgs
parents:
diff changeset
  3211
TInt CMceMessageListView::LaunchViewerWhenOneUnreadL( TInt &aMsgMtmUid )
hgs
parents:
diff changeset
  3212
    {
hgs
parents:
diff changeset
  3213
    if ( iRunningEditFunction || iMsgListContainer || iMceUi->MailboxCreationOn() || iMceUi->IsEditorOpen() )
hgs
parents:
diff changeset
  3214
        {
hgs
parents:
diff changeset
  3215
        return KErrNotFound;
hgs
parents:
diff changeset
  3216
        }
hgs
parents:
diff changeset
  3217
        
hgs
parents:
diff changeset
  3218
    // TODO: change this so that FindFirstUnreadMessageL is not called so many times!
hgs
parents:
diff changeset
  3219
    // TODO: this is performance optimisation: we should launch viewer before creating container!!
hgs
parents:
diff changeset
  3220
    // so container is not created yet, need to calculate unread message count some other way...
hgs
parents:
diff changeset
  3221
hgs
parents:
diff changeset
  3222
    TInt unreadMessageMtmUid = KErrNotFound;
hgs
parents:
diff changeset
  3223
    TInt numberOfUnreadMessages = 0;          
hgs
parents:
diff changeset
  3224
    TInt firstUnreadMessage = KErrNotFound;
hgs
parents:
diff changeset
  3225
hgs
parents:
diff changeset
  3226
    CMsvEntry* entry = CMsvEntry::NewL(
hgs
parents:
diff changeset
  3227
        *iSession,
hgs
parents:
diff changeset
  3228
        iFolderId,
hgs
parents:
diff changeset
  3229
        TMsvSelectionOrdering(
hgs
parents:
diff changeset
  3230
            KMsvGroupByStandardFolders, EMsvSortByDateReverse) );
hgs
parents:
diff changeset
  3231
    CleanupStack::PushL( entry );
hgs
parents:
diff changeset
  3232
    
hgs
parents:
diff changeset
  3233
    const TInt itemCount = entry->Count();    
hgs
parents:
diff changeset
  3234
    for ( TInt loop = 0; loop < itemCount; loop++ )
hgs
parents:
diff changeset
  3235
        {
hgs
parents:
diff changeset
  3236
        if ( (*entry)[loop].iType == KUidMsvMessageEntry &&
hgs
parents:
diff changeset
  3237
             (*entry)[loop].Unread() )
hgs
parents:
diff changeset
  3238
            {
hgs
parents:
diff changeset
  3239
            if ( firstUnreadMessage == KErrNotFound )
hgs
parents:
diff changeset
  3240
                {
hgs
parents:
diff changeset
  3241
                firstUnreadMessage = loop;
hgs
parents:
diff changeset
  3242
                unreadMessageMtmUid = (*entry)[firstUnreadMessage].iMtm.iUid;
hgs
parents:
diff changeset
  3243
                }
hgs
parents:
diff changeset
  3244
            numberOfUnreadMessages++;
hgs
parents:
diff changeset
  3245
            if ( numberOfUnreadMessages > 1 )
hgs
parents:
diff changeset
  3246
                {
hgs
parents:
diff changeset
  3247
                // we are only interested of first unread message and info that if
hgs
parents:
diff changeset
  3248
                // there are more than one unread messages.
hgs
parents:
diff changeset
  3249
                // So we can stop if there are more than one.
hgs
parents:
diff changeset
  3250
                break;
hgs
parents:
diff changeset
  3251
                }
hgs
parents:
diff changeset
  3252
            }
hgs
parents:
diff changeset
  3253
        }
hgs
parents:
diff changeset
  3254
hgs
parents:
diff changeset
  3255
    if ( (numberOfUnreadMessages==1) && (firstUnreadMessage!=KErrNotFound) &&
hgs
parents:
diff changeset
  3256
    	 (unreadMessageMtmUid!=KSenduiMtmIrUidValue) &&
hgs
parents:
diff changeset
  3257
    	 (unreadMessageMtmUid!=KSenduiMtmBtUidValue) &&
hgs
parents:
diff changeset
  3258
    	 (unreadMessageMtmUid!=KSenduiMtmSmtpUidValue) &&
hgs
parents:
diff changeset
  3259
    	 (unreadMessageMtmUid!=KSenduiMtmImap4UidValue) &&
hgs
parents:
diff changeset
  3260
    	 (unreadMessageMtmUid!=KSenduiMtmPop3UidValue)
hgs
parents:
diff changeset
  3261
    	 )
hgs
parents:
diff changeset
  3262
        {
hgs
parents:
diff changeset
  3263
        MCELOGGER_WRITE("LaunchMceViewer: launch editor");
hgs
parents:
diff changeset
  3264
        iRunningEditFunction = ETrue;
hgs
parents:
diff changeset
  3265
        iMceUi->EditMTMEntryL( (*entry)[firstUnreadMessage] );
hgs
parents:
diff changeset
  3266
        iRunningEditFunction = EFalse;
hgs
parents:
diff changeset
  3267
        }
hgs
parents:
diff changeset
  3268
    aMsgMtmUid = unreadMessageMtmUid ;
hgs
parents:
diff changeset
  3269
    CleanupStack::PopAndDestroy( entry );
hgs
parents:
diff changeset
  3270
    return ( numberOfUnreadMessages==1 ? firstUnreadMessage : KErrNotFound );
hgs
parents:
diff changeset
  3271
    }
hgs
parents:
diff changeset
  3272
	
hgs
parents:
diff changeset
  3273
// ----------------------------------------------------
hgs
parents:
diff changeset
  3274
// CMceMessageListView::SetMskObserver
hgs
parents:
diff changeset
  3275
// 
hgs
parents:
diff changeset
  3276
// ----------------------------------------------------	
hgs
parents:
diff changeset
  3277
void CMceMessageListView::SetMskObserver( TBool aObserver )
hgs
parents:
diff changeset
  3278
    {
hgs
parents:
diff changeset
  3279
    CEikButtonGroupContainer* bgc = Cba();
hgs
parents:
diff changeset
  3280
    if ( bgc )
hgs
parents:
diff changeset
  3281
        {
hgs
parents:
diff changeset
  3282
        CEikCba* cba = static_cast< CEikCba* >( bgc->ButtonGroup() );
hgs
parents:
diff changeset
  3283
        if ( aObserver )
hgs
parents:
diff changeset
  3284
            {
hgs
parents:
diff changeset
  3285
            cba->SetMSKCommandObserver( iMsgListContainer );
hgs
parents:
diff changeset
  3286
            }
hgs
parents:
diff changeset
  3287
        else
hgs
parents:
diff changeset
  3288
            {
hgs
parents:
diff changeset
  3289
            cba->SetMSKCommandObserver( NULL );
hgs
parents:
diff changeset
  3290
            }                
hgs
parents:
diff changeset
  3291
        }
hgs
parents:
diff changeset
  3292
    }
hgs
parents:
diff changeset
  3293
hgs
parents:
diff changeset
  3294
// ----------------------------------------------------
hgs
parents:
diff changeset
  3295
// CMceMessageListView::GetDeleteFlagStatusL
hgs
parents:
diff changeset
  3296
// 
hgs
parents:
diff changeset
  3297
// ----------------------------------------------------	
hgs
parents:
diff changeset
  3298
TInt CMceMessageListView::GetDeleteFlagStatusL( const CMsvEntrySelection* aEntries )
hgs
parents:
diff changeset
  3299
    {
hgs
parents:
diff changeset
  3300
    TBool allDelete = ETrue;
hgs
parents:
diff changeset
  3301
    TBool allUnDelete = ETrue;
hgs
parents:
diff changeset
  3302
    
hgs
parents:
diff changeset
  3303
    TMsvEntry entry;
hgs
parents:
diff changeset
  3304
    TMsvId serviceId;
hgs
parents:
diff changeset
  3305
    TMsvId id = (*aEntries)[0];
hgs
parents:
diff changeset
  3306
    TInt rid = 0;
hgs
parents:
diff changeset
  3307
    if ( iSession->GetEntry( id, serviceId, entry ) != KErrNone )
hgs
parents:
diff changeset
  3308
        {
hgs
parents:
diff changeset
  3309
        return KErrNotSupported;
hgs
parents:
diff changeset
  3310
        }
hgs
parents:
diff changeset
  3311
    if ( entry.iServiceId != KMsvLocalServiceIndexEntryId )
hgs
parents:
diff changeset
  3312
        {
hgs
parents:
diff changeset
  3313
        CBaseMtmUiData* uiData = iMceUi->GetMtmUiDataL( entry.iMtm );
hgs
parents:
diff changeset
  3314
        if ( uiData )
hgs
parents:
diff changeset
  3315
            {
hgs
parents:
diff changeset
  3316
            const TInt count = aEntries->Count();
hgs
parents:
diff changeset
  3317
            for ( TInt loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
  3318
                {                                 
hgs
parents:
diff changeset
  3319
                id = (*aEntries)[loop];
hgs
parents:
diff changeset
  3320
                if ( iSession->GetEntry( id, serviceId, entry ) == KErrNone )
hgs
parents:
diff changeset
  3321
                    {
hgs
parents:
diff changeset
  3322
                    if ( uiData->CanDeleteFromEntryL(entry, rid) )
hgs
parents:
diff changeset
  3323
                        {
hgs
parents:
diff changeset
  3324
                        allUnDelete = EFalse;
hgs
parents:
diff changeset
  3325
                        }
hgs
parents:
diff changeset
  3326
                    else if ( uiData->CanUnDeleteFromEntryL(entry, rid) )                    
hgs
parents:
diff changeset
  3327
                        {
hgs
parents:
diff changeset
  3328
                        allDelete = EFalse;
hgs
parents:
diff changeset
  3329
                        }
hgs
parents:
diff changeset
  3330
                    }
hgs
parents:
diff changeset
  3331
                }
hgs
parents:
diff changeset
  3332
            }
hgs
parents:
diff changeset
  3333
        }
hgs
parents:
diff changeset
  3334
        
hgs
parents:
diff changeset
  3335
    if ( allDelete && !allUnDelete )
hgs
parents:
diff changeset
  3336
        {
hgs
parents:
diff changeset
  3337
        // all delete
hgs
parents:
diff changeset
  3338
        return MessageFolderAllDelete;
hgs
parents:
diff changeset
  3339
        }
hgs
parents:
diff changeset
  3340
    else if ( !allDelete && allUnDelete )
hgs
parents:
diff changeset
  3341
        {
hgs
parents:
diff changeset
  3342
        // all undelete
hgs
parents:
diff changeset
  3343
        return MessageFolderAllUnDelete;
hgs
parents:
diff changeset
  3344
        }
hgs
parents:
diff changeset
  3345
    else if ( !allDelete && !allUnDelete )
hgs
parents:
diff changeset
  3346
        {
hgs
parents:
diff changeset
  3347
        // both delete and undelete
hgs
parents:
diff changeset
  3348
        return MessageFolderDeleteUnDelete;
hgs
parents:
diff changeset
  3349
        }
hgs
parents:
diff changeset
  3350
    else
hgs
parents:
diff changeset
  3351
        {
hgs
parents:
diff changeset
  3352
        // never
hgs
parents:
diff changeset
  3353
        return MessageFolderDeleteUnDelete;
hgs
parents:
diff changeset
  3354
        }        
hgs
parents:
diff changeset
  3355
    }
hgs
parents:
diff changeset
  3356
hgs
parents:
diff changeset
  3357
// ----------------------------------------------------
hgs
parents:
diff changeset
  3358
// CMceMessageListView::FindAllReadMsgAndMarkL()
hgs
parents:
diff changeset
  3359
// Private
hgs
parents:
diff changeset
  3360
// ----------------------------------------------------	
hgs
parents:
diff changeset
  3361
void CMceMessageListView::FindAllReadMsgAndMarkL()
hgs
parents:
diff changeset
  3362
    {
hgs
parents:
diff changeset
  3363
    if ( iMsgListContainer )
hgs
parents:
diff changeset
  3364
        {
hgs
parents:
diff changeset
  3365
        iMsgListContainer->MarkAllReadMessagesL();
hgs
parents:
diff changeset
  3366
        }
hgs
parents:
diff changeset
  3367
    }
hgs
parents:
diff changeset
  3368
    
hgs
parents:
diff changeset
  3369
// ----------------------------------------------------
hgs
parents:
diff changeset
  3370
// CMceMessageListView::IsItemUnread( TMsvId aId )  
hgs
parents:
diff changeset
  3371
// Public
hgs
parents:
diff changeset
  3372
// ----------------------------------------------------	
hgs
parents:
diff changeset
  3373
TBool CMceMessageListView::IsItemUnread(TMsvId aId)
hgs
parents:
diff changeset
  3374
    {
hgs
parents:
diff changeset
  3375
    TMsvEntry aEntry;
hgs
parents:
diff changeset
  3376
    TMsvId serviceId;
hgs
parents:
diff changeset
  3377
    if ( iSession->GetEntry( aId, serviceId, aEntry ) == KErrNone )
hgs
parents:
diff changeset
  3378
        {
hgs
parents:
diff changeset
  3379
        if ( aEntry.Unread() )
hgs
parents:
diff changeset
  3380
            {
hgs
parents:
diff changeset
  3381
            return ETrue;
hgs
parents:
diff changeset
  3382
            }
hgs
parents:
diff changeset
  3383
        }
hgs
parents:
diff changeset
  3384
        return EFalse;
hgs
parents:
diff changeset
  3385
    }
hgs
parents:
diff changeset
  3386
// ----------------------------------------------------
hgs
parents:
diff changeset
  3387
// CMceMessageListView::AnySelectedItemsVisible(  CArrayFixFlat<TInt>* msgIndexArray )  
hgs
parents:
diff changeset
  3388
// private
hgs
parents:
diff changeset
  3389
// ----------------------------------------------------	
hgs
parents:
diff changeset
  3390
TBool CMceMessageListView::AnySelectedItemsVisible ( CArrayFixFlat<TInt>* /*msgIndexArray */)
hgs
parents:
diff changeset
  3391
    {        
hgs
parents:
diff changeset
  3392
    return EFalse;
hgs
parents:
diff changeset
  3393
    }
hgs
parents:
diff changeset
  3394
    
hgs
parents:
diff changeset
  3395
// ----------------------------------------------------
hgs
parents:
diff changeset
  3396
// CMceMessageListView::EnableMarkAllReadMsgInInboxAndDocument( TMsvEntry currentEntry, 
hgs
parents:
diff changeset
  3397
//                                                          TMsvId currentFolderId, 
hgs
parents:
diff changeset
  3398
//                                                          CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
  3399
// private
hgs
parents:
diff changeset
  3400
// ----------------------------------------------------	    
hgs
parents:
diff changeset
  3401
void CMceMessageListView::EnableMarkAllReadMsgInInboxAndDocument( 
hgs
parents:
diff changeset
  3402
    TMsvEntry currentEntry, 
hgs
parents:
diff changeset
  3403
    TMsvId currentFolderId, 
hgs
parents:
diff changeset
  3404
    CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
  3405
    {
hgs
parents:
diff changeset
  3406
    if ( currentFolderId == KMsvGlobalInBoxIndexEntryId ||
hgs
parents:
diff changeset
  3407
        currentFolderId == KMceDocumentsEntryId ||
hgs
parents:
diff changeset
  3408
        iMsgListContainer->FolderEntry().Parent() == KMceDocumentsEntryId ) // subfolder of Document
hgs
parents:
diff changeset
  3409
        {
hgs
parents:
diff changeset
  3410
        if ( iMsgListContainer->IsItemFolder( currentEntry.Id() ) )
hgs
parents:
diff changeset
  3411
            {
hgs
parents:
diff changeset
  3412
            // folder item does not have mark as read/unread
hgs
parents:
diff changeset
  3413
            }
hgs
parents:
diff changeset
  3414
        else
hgs
parents:
diff changeset
  3415
            {
hgs
parents:
diff changeset
  3416
            aMenuPane->SetItemDimmed( 
hgs
parents:
diff changeset
  3417
                EMceCmdMarkAsReadMsg, !currentEntry.Unread() );
hgs
parents:
diff changeset
  3418
            aMenuPane->SetItemDimmed( 
hgs
parents:
diff changeset
  3419
                EMceCmdMarkAsUnreadMsg, currentEntry.Unread() );
hgs
parents:
diff changeset
  3420
            }                
hgs
parents:
diff changeset
  3421
        }
hgs
parents:
diff changeset
  3422
    }
hgs
parents:
diff changeset
  3423
hgs
parents:
diff changeset
  3424
// ----------------------------------------------------
hgs
parents:
diff changeset
  3425
// void CMceMessageListView::HandleSendkeyInMailboxL( TMsvId aEntryId )
hgs
parents:
diff changeset
  3426
// public
hgs
parents:
diff changeset
  3427
// ----------------------------------------------------
hgs
parents:
diff changeset
  3428
void CMceMessageListView::HandleSendkeyInMailboxL( TMsvId aEntryId )
hgs
parents:
diff changeset
  3429
    {
hgs
parents:
diff changeset
  3430
    TPtrC addressString; // mail address string 
hgs
parents:
diff changeset
  3431
    TBool tempDoMoreCleanup = EFalse;
hgs
parents:
diff changeset
  3432
    
hgs
parents:
diff changeset
  3433
    CMsvEntry* entry = iSession->GetEntryL( aEntryId );
hgs
parents:
diff changeset
  3434
    CleanupStack::PushL( entry );                 //<<<---------------------------entry
hgs
parents:
diff changeset
  3435
    
hgs
parents:
diff changeset
  3436
    if ( entry->Entry().iType != KUidMsvMessageEntry )
hgs
parents:
diff changeset
  3437
       {
hgs
parents:
diff changeset
  3438
       // do not try to call if entry is not message
hgs
parents:
diff changeset
  3439
       CleanupStack::PopAndDestroy( entry );
hgs
parents:
diff changeset
  3440
       return;
hgs
parents:
diff changeset
  3441
       }
hgs
parents:
diff changeset
  3442
    if (  entry->HasStoreL()  )  // only mails that have been retrivaled have stores
hgs
parents:
diff changeset
  3443
        {
hgs
parents:
diff changeset
  3444
        tempDoMoreCleanup = ETrue;
hgs
parents:
diff changeset
  3445
        CMsvStore* store = entry->ReadStoreL();
hgs
parents:
diff changeset
  3446
        if ( store ==  NULL)   // just in case no crash if something wrong with store
hgs
parents:
diff changeset
  3447
            {
hgs
parents:
diff changeset
  3448
            CleanupStack::PopAndDestroy( entry ); //entry, store, 
hgs
parents:
diff changeset
  3449
            return;
hgs
parents:
diff changeset
  3450
            }
hgs
parents:
diff changeset
  3451
        CleanupStack::PushL( store );              //<<<--------------------------- store
hgs
parents:
diff changeset
  3452
        CImHeader* iHeader = CImHeader::NewLC();  //<<<-----------------iHeader into stack
hgs
parents:
diff changeset
  3453
        iHeader->RestoreL( *store );
hgs
parents:
diff changeset
  3454
        TImMessageField email;
hgs
parents:
diff changeset
  3455
        addressString.Set( email.GetValidInternetEmailAddressFromString( iHeader->From() ) );          
hgs
parents:
diff changeset
  3456
        }
hgs
parents:
diff changeset
  3457
                     
hgs
parents:
diff changeset
  3458
     else  // Only mails that are not retrivaled should use iDetails instead.
hgs
parents:
diff changeset
  3459
        {
hgs
parents:
diff changeset
  3460
        TImMessageField email;
hgs
parents:
diff changeset
  3461
        addressString.Set( email.GetValidInternetEmailAddressFromString( entry->Entry().iDetails ) );  
hgs
parents:
diff changeset
  3462
        }                 
hgs
parents:
diff changeset
  3463
      
hgs
parents:
diff changeset
  3464
    CMuiuContactService* contactService = CMuiuContactService::NewL( *iEikonEnv );
hgs
parents:
diff changeset
  3465
    CleanupStack::PushL( contactService );             //<<<--------------- contactService
hgs
parents:
diff changeset
  3466
    contactService->SetAddress( addressString );
hgs
parents:
diff changeset
  3467
    // This LINE is commented for the new send key behaviour in mailboxes 
hgs
parents:
diff changeset
  3468
    // there shall be no VOIP calls but only dialer shall be opened 
hgs
parents:
diff changeset
  3469
    // contactService->CallL();
hgs
parents:
diff changeset
  3470
    
hgs
parents:
diff changeset
  3471
    if ( tempDoMoreCleanup )
hgs
parents:
diff changeset
  3472
        {
hgs
parents:
diff changeset
  3473
        CleanupStack::PopAndDestroy( 4, entry ); //iHeader store contactService entry
hgs
parents:
diff changeset
  3474
        }
hgs
parents:
diff changeset
  3475
    else
hgs
parents:
diff changeset
  3476
        {
hgs
parents:
diff changeset
  3477
        CleanupStack::PopAndDestroy( 2, entry ); // contactService entry
hgs
parents:
diff changeset
  3478
        }
hgs
parents:
diff changeset
  3479
    }
hgs
parents:
diff changeset
  3480
hgs
parents:
diff changeset
  3481
    
hgs
parents:
diff changeset
  3482
// ----------------------------------------------------
hgs
parents:
diff changeset
  3483
// CMceMessageListView::HandleClientRectChange
hgs
parents:
diff changeset
  3484
// ----------------------------------------------------
hgs
parents:
diff changeset
  3485
void CMceMessageListView::HandleClientRectChange()
hgs
parents:
diff changeset
  3486
    {
hgs
parents:
diff changeset
  3487
    if (iMsgListContainer)
hgs
parents:
diff changeset
  3488
        {
hgs
parents:
diff changeset
  3489
        iMsgListContainer->SetRect(ClientRect());
hgs
parents:
diff changeset
  3490
        }
hgs
parents:
diff changeset
  3491
    }
hgs
parents:
diff changeset
  3492
    
hgs
parents:
diff changeset
  3493
// ----------------------------------------------------
hgs
parents:
diff changeset
  3494
// CMceMessageListView::HandleEntriesCreatedChangedL
hgs
parents:
diff changeset
  3495
// ----------------------------------------------------
hgs
parents:
diff changeset
  3496
void CMceMessageListView::HandleEntriesCreatedChangedL( const CMsvEntrySelection* aSelection )
hgs
parents:
diff changeset
  3497
    {
hgs
parents:
diff changeset
  3498
    iMsgListContainer->ItemCountChangedL( ETrue ); 
hgs
parents:
diff changeset
  3499
    
hgs
parents:
diff changeset
  3500
    if ( IsMSKMailBox() ) // focus setting only for email
hgs
parents:
diff changeset
  3501
        {
hgs
parents:
diff changeset
  3502
        iMsgListContainer->SetCurrentItemIdL( iCurrentItemId );
hgs
parents:
diff changeset
  3503
hgs
parents:
diff changeset
  3504
        }
hgs
parents:
diff changeset
  3505
    else
hgs
parents:
diff changeset
  3506
        {
hgs
parents:
diff changeset
  3507
        TMsvEntry currentEntry;
hgs
parents:
diff changeset
  3508
	    TMsvId serviceId; // not used here but needed by GetEntry function
hgs
parents:
diff changeset
  3509
	    if ( iSession->GetEntry( aSelection->At(0), serviceId, currentEntry ) == KErrNone &&
hgs
parents:
diff changeset
  3510
	         serviceId == KMsvLocalServiceIndexEntryId )
hgs
parents:
diff changeset
  3511
	        {
hgs
parents:
diff changeset
  3512
            iMsgListContainer->SetCurrentItemIdL( aSelection->At(0) );
hgs
parents:
diff changeset
  3513
	        }
hgs
parents:
diff changeset
  3514
        }   
hgs
parents:
diff changeset
  3515
    	
hgs
parents:
diff changeset
  3516
    if ( iMceViewActivated )
hgs
parents:
diff changeset
  3517
        {
hgs
parents:
diff changeset
  3518
        iMsgListContainer->RefreshListbox();
hgs
parents:
diff changeset
  3519
        }
hgs
parents:
diff changeset
  3520
    }
hgs
parents:
diff changeset
  3521
hgs
parents:
diff changeset
  3522
// ----------------------------------------------------
hgs
parents:
diff changeset
  3523
// CMceMessageListView::HandleEntriesDeletedL
hgs
parents:
diff changeset
  3524
// ----------------------------------------------------
hgs
parents:
diff changeset
  3525
void CMceMessageListView::HandleEntriesDeletedL( )
hgs
parents:
diff changeset
  3526
    {
hgs
parents:
diff changeset
  3527
    TInt currentItem = KErrNotFound;
hgs
parents:
diff changeset
  3528
    TMsvId currentSelectedItemId = 0;
hgs
parents:
diff changeset
  3529
    if ( IsMSKMailBox() ) // focus setting only for email
hgs
parents:
diff changeset
  3530
        {
hgs
parents:
diff changeset
  3531
        if ( iMceUi->IsMailSetToBeDeletedFromServerL( iCurrentItemId ) )
hgs
parents:
diff changeset
  3532
            {
hgs
parents:
diff changeset
  3533
            currentSelectedItemId = iMceUi->AnchoredItem();
hgs
parents:
diff changeset
  3534
            }
hgs
parents:
diff changeset
  3535
        else 
hgs
parents:
diff changeset
  3536
            {
hgs
parents:
diff changeset
  3537
            currentSelectedItemId = iCurrentItemId;
hgs
parents:
diff changeset
  3538
            }      
hgs
parents:
diff changeset
  3539
        }      
hgs
parents:
diff changeset
  3540
    else    	
hgs
parents:
diff changeset
  3541
        {
hgs
parents:
diff changeset
  3542
        currentSelectedItemId = iMceUi->AnchoredItem();
hgs
parents:
diff changeset
  3543
        }
hgs
parents:
diff changeset
  3544
hgs
parents:
diff changeset
  3545
    iMsgListContainer->ItemCountChangedL( EFalse ); 
hgs
parents:
diff changeset
  3546
    if ( currentItem != KErrNotFound )
hgs
parents:
diff changeset
  3547
        {
hgs
parents:
diff changeset
  3548
        iMsgListContainer->RefreshSelectionIndexesL( ETrue );
hgs
parents:
diff changeset
  3549
        }
hgs
parents:
diff changeset
  3550
    iMsgListContainer->SetCurrentItemIdL( currentSelectedItemId );         
hgs
parents:
diff changeset
  3551
	SetCurrentItemId();
hgs
parents:
diff changeset
  3552
    if ( iMceViewActivated )
hgs
parents:
diff changeset
  3553
        {
hgs
parents:
diff changeset
  3554
        iMsgListContainer->RefreshListbox();
hgs
parents:
diff changeset
  3555
        SetMSKButtonL();
hgs
parents:
diff changeset
  3556
        }
hgs
parents:
diff changeset
  3557
    }
hgs
parents:
diff changeset
  3558
hgs
parents:
diff changeset
  3559
// ----------------------------------------------------
hgs
parents:
diff changeset
  3560
// CMceMessageListView::HandleEntriesMovedL
hgs
parents:
diff changeset
  3561
// ----------------------------------------------------
hgs
parents:
diff changeset
  3562
void CMceMessageListView::HandleEntriesMovedL( TMsvId aSourceFolderId, TMsvId aTargetFolderId )
hgs
parents:
diff changeset
  3563
    {
hgs
parents:
diff changeset
  3564
    if ( iFolderId == aTargetFolderId )
hgs
parents:
diff changeset
  3565
        {
hgs
parents:
diff changeset
  3566
        iMsgListContainer->ItemCountChangedL( ETrue ); 
hgs
parents:
diff changeset
  3567
        iMsgListContainer->RefreshSelectionIndexesL( EFalse );
hgs
parents:
diff changeset
  3568
        iMsgListContainer->SetCurrentItemIdL( iMceUi->AnchoredItem() );         
hgs
parents:
diff changeset
  3569
        if ( iMceViewActivated )
hgs
parents:
diff changeset
  3570
            {
hgs
parents:
diff changeset
  3571
            iMsgListContainer->RefreshListbox();
hgs
parents:
diff changeset
  3572
            }
hgs
parents:
diff changeset
  3573
        }
hgs
parents:
diff changeset
  3574
    else if ( iFolderId == aSourceFolderId )
hgs
parents:
diff changeset
  3575
        {
hgs
parents:
diff changeset
  3576
        iMsgListContainer->ItemCountChangedL( EFalse ); 
hgs
parents:
diff changeset
  3577
        iMsgListContainer->SetCurrentItemIdL( iMceUi->AnchoredItem() );         
hgs
parents:
diff changeset
  3578
        iMsgListContainer->RefreshSelectionIndexesL( EFalse );
hgs
parents:
diff changeset
  3579
        if ( iMceViewActivated )
hgs
parents:
diff changeset
  3580
            {
hgs
parents:
diff changeset
  3581
            iMsgListContainer->RefreshListbox();
hgs
parents:
diff changeset
  3582
            }
hgs
parents:
diff changeset
  3583
        }
hgs
parents:
diff changeset
  3584
    }
hgs
parents:
diff changeset
  3585
hgs
parents:
diff changeset
  3586
// ----------------------------------------------------
hgs
parents:
diff changeset
  3587
// CMceMessageListView::SetFolderL
hgs
parents:
diff changeset
  3588
// ----------------------------------------------------
hgs
parents:
diff changeset
  3589
void CMceMessageListView::SetFolderL( TMsvId aFolderId )
hgs
parents:
diff changeset
  3590
    {
hgs
parents:
diff changeset
  3591
    if ( iFolderId != aFolderId && iMsgListContainer )
hgs
parents:
diff changeset
  3592
        {
hgs
parents:
diff changeset
  3593
        iFolderId = aFolderId;
hgs
parents:
diff changeset
  3594
        if ( GetFolderListBoxType() != iMsgListContainer->MceListId() ) 
hgs
parents:
diff changeset
  3595
            {
hgs
parents:
diff changeset
  3596
            ListboxTypeChangedL();
hgs
parents:
diff changeset
  3597
            }
hgs
parents:
diff changeset
  3598
        }
hgs
parents:
diff changeset
  3599
hgs
parents:
diff changeset
  3600
    iFolderId = aFolderId;
hgs
parents:
diff changeset
  3601
    if ( iMsgListContainer )
hgs
parents:
diff changeset
  3602
        {
hgs
parents:
diff changeset
  3603
        iMsgListContainer->SetFolderL( aFolderId );
hgs
parents:
diff changeset
  3604
        }
hgs
parents:
diff changeset
  3605
    }
hgs
parents:
diff changeset
  3606
hgs
parents:
diff changeset
  3607
// ----------------------------------------------------
hgs
parents:
diff changeset
  3608
// CMceMessageListView::GetFolderListBoxType
hgs
parents:
diff changeset
  3609
// ----------------------------------------------------
hgs
parents:
diff changeset
  3610
TInt CMceMessageListView::GetFolderListBoxType()
hgs
parents:
diff changeset
  3611
    {
hgs
parents:
diff changeset
  3612
    TInt listType = EMceListTypeTwoRow; 
hgs
parents:
diff changeset
  3613
    TMsvEntry serviceEntry;
hgs
parents:
diff changeset
  3614
    TMsvId serviceId;
hgs
parents:
diff changeset
  3615
hgs
parents:
diff changeset
  3616
    if ( iSession->GetEntry( iFolderId, serviceId, serviceEntry ) == KErrNone )
hgs
parents:
diff changeset
  3617
        {
hgs
parents:
diff changeset
  3618
        const TMsvId entryId = serviceEntry.Id();
hgs
parents:
diff changeset
  3619
        if ( entryId == KMsvGlobalInBoxIndexEntryId 
hgs
parents:
diff changeset
  3620
            || entryId == KMsvDraftEntryId
hgs
parents:
diff changeset
  3621
            || entryId == KMsvSentEntryId 
hgs
parents:
diff changeset
  3622
            || entryId == KMceDocumentsEntryId
hgs
parents:
diff changeset
  3623
            || serviceEntry.Parent() == KMceDocumentsEntryId )
hgs
parents:
diff changeset
  3624
            {
hgs
parents:
diff changeset
  3625
            listType = iListboxInboxTypeObserver->ListboxType();
hgs
parents:
diff changeset
  3626
            }  
hgs
parents:
diff changeset
  3627
        else if ( iMceUi->CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, serviceEntry.iMtm ))
hgs
parents:
diff changeset
  3628
            {
hgs
parents:
diff changeset
  3629
            listType = iListboxMailTypeObserver->ListboxType();
hgs
parents:
diff changeset
  3630
            }
hgs
parents:
diff changeset
  3631
    }
hgs
parents:
diff changeset
  3632
    return listType;
hgs
parents:
diff changeset
  3633
    }
hgs
parents:
diff changeset
  3634
hgs
parents:
diff changeset
  3635
// ----------------------------------------------------
hgs
parents:
diff changeset
  3636
// CMceMessageListView::ListContainer
hgs
parents:
diff changeset
  3637
// ----------------------------------------------------
hgs
parents:
diff changeset
  3638
CMceMessageListContainerBase* CMceMessageListView::ListContainer() const
hgs
parents:
diff changeset
  3639
    {
hgs
parents:
diff changeset
  3640
    return iMsgListContainer;
hgs
parents:
diff changeset
  3641
    }
hgs
parents:
diff changeset
  3642
hgs
parents:
diff changeset
  3643
hgs
parents:
diff changeset
  3644
// ----------------------------------------------------
hgs
parents:
diff changeset
  3645
// CMceMessageListView::HandleMsgServerStartupL
hgs
parents:
diff changeset
  3646
// ----------------------------------------------------
hgs
parents:
diff changeset
  3647
void CMceMessageListView::HandleMsgServerStartupL()
hgs
parents:
diff changeset
  3648
    {
hgs
parents:
diff changeset
  3649
    iSession->AddObserverL( *this );
hgs
parents:
diff changeset
  3650
    iMsvSessionReady = ETrue;
hgs
parents:
diff changeset
  3651
    }
hgs
parents:
diff changeset
  3652
hgs
parents:
diff changeset
  3653
// ----------------------------------------------------
hgs
parents:
diff changeset
  3654
// CMceMessageListView::AiwSyncParamListLC()
hgs
parents:
diff changeset
  3655
// 
hgs
parents:
diff changeset
  3656
// ----------------------------------------------------
hgs
parents:
diff changeset
  3657
CAiwGenericParamList* CMceMessageListView::AiwSyncParamListLC(TInt /*aId*/, const TDesC& aText)
hgs
parents:
diff changeset
  3658
    {
hgs
parents:
diff changeset
  3659
	TAiwVariant variant;
hgs
parents:
diff changeset
  3660
    variant.Set(KNullDesC);
hgs
parents:
diff changeset
  3661
	TAiwGenericParam param(EGenericParamMessageItemEMail, variant);
hgs
parents:
diff changeset
  3662
hgs
parents:
diff changeset
  3663
	TAiwVariant variant2;
hgs
parents:
diff changeset
  3664
    variant2.Set(aText);
hgs
parents:
diff changeset
  3665
	TAiwGenericParam param2(EGenericParamMessageItemMbox, variant2);
hgs
parents:
diff changeset
  3666
            
hgs
parents:
diff changeset
  3667
	CAiwGenericParamList* list = CAiwGenericParamList::NewLC();
hgs
parents:
diff changeset
  3668
	list->AppendL(param);
hgs
parents:
diff changeset
  3669
	list->AppendL(param2);
hgs
parents:
diff changeset
  3670
	
hgs
parents:
diff changeset
  3671
	return list;
hgs
parents:
diff changeset
  3672
    }
hgs
parents:
diff changeset
  3673
hgs
parents:
diff changeset
  3674
// ----------------------------------------------------
hgs
parents:
diff changeset
  3675
// CMceMessageListView::CheckUnreadMessages
hgs
parents:
diff changeset
  3676
//
hgs
parents:
diff changeset
  3677
// ----------------------------------------------------
hgs
parents:
diff changeset
  3678
TBool CMceMessageListView::HasUnreadMessagesL()
hgs
parents:
diff changeset
  3679
	{
hgs
parents:
diff changeset
  3680
	// TODO: to list array or container???
hgs
parents:
diff changeset
  3681
    CMsvEntry* entry = CMsvEntry::NewL(
hgs
parents:
diff changeset
  3682
        *iSession,
hgs
parents:
diff changeset
  3683
        iMsgListContainer->CurrentFolderId(),
hgs
parents:
diff changeset
  3684
        TMsvSelectionOrdering(
hgs
parents:
diff changeset
  3685
            KMsvGroupByStandardFolders, EMsvSortByDateReverse) );
hgs
parents:
diff changeset
  3686
    CleanupStack::PushL( entry );
hgs
parents:
diff changeset
  3687
    
hgs
parents:
diff changeset
  3688
	const TInt count = entry->Count();
hgs
parents:
diff changeset
  3689
	
hgs
parents:
diff changeset
  3690
	for ( TInt i=0; i<count; ++i )
hgs
parents:
diff changeset
  3691
		{
hgs
parents:
diff changeset
  3692
		if ( (*entry)[i].Unread() )
hgs
parents:
diff changeset
  3693
			{
hgs
parents:
diff changeset
  3694
            CleanupStack::PopAndDestroy( entry );
hgs
parents:
diff changeset
  3695
			// Current folder has unread/new message
hgs
parents:
diff changeset
  3696
			return ETrue;
hgs
parents:
diff changeset
  3697
			}
hgs
parents:
diff changeset
  3698
		}	
hgs
parents:
diff changeset
  3699
    CleanupStack::PopAndDestroy( entry );
hgs
parents:
diff changeset
  3700
	return EFalse;
hgs
parents:
diff changeset
  3701
	}
hgs
parents:
diff changeset
  3702
hgs
parents:
diff changeset
  3703
// ----------------------------------------------------
hgs
parents:
diff changeset
  3704
// CMceMessageListView::SetMSKButtonL()
hgs
parents:
diff changeset
  3705
// 
hgs
parents:
diff changeset
  3706
// ----------------------------------------------------
hgs
parents:
diff changeset
  3707
void CMceMessageListView::SetMSKButtonL()
hgs
parents:
diff changeset
  3708
    {
hgs
parents:
diff changeset
  3709
    
hgs
parents:
diff changeset
  3710
    if ( AknLayoutUtils::MSKEnabled() )
hgs
parents:
diff changeset
  3711
        {
hgs
parents:
diff changeset
  3712
        TMsvId newFolderId = iFolderId;
hgs
parents:
diff changeset
  3713
        TMsvId syncFolderId = 0;
hgs
parents:
diff changeset
  3714
        TInt resourceId = R_MCE_MSK_BUTTON_OPEN;
hgs
parents:
diff changeset
  3715
        TInt numberOfEntries = iMsgListContainer->Count();
hgs
parents:
diff changeset
  3716
        TInt currentItemSelectionCount = iMsgListContainer->SelectionCount();
hgs
parents:
diff changeset
  3717
        
hgs
parents:
diff changeset
  3718
        if ( IsMSKSyncMlMailBox() )
hgs
parents:
diff changeset
  3719
            {
hgs
parents:
diff changeset
  3720
            syncFolderId = iMsgListContainer->FolderEntry().iRelatedId;
hgs
parents:
diff changeset
  3721
            if ( syncFolderId > 0 && newFolderId != syncFolderId )
hgs
parents:
diff changeset
  3722
                {
hgs
parents:
diff changeset
  3723
                newFolderId = syncFolderId;
hgs
parents:
diff changeset
  3724
                }
hgs
parents:
diff changeset
  3725
            }
hgs
parents:
diff changeset
  3726
        
hgs
parents:
diff changeset
  3727
        if ( IsMSKMailBox() && ( !IsMSKSyncMlMailBox() ) )
hgs
parents:
diff changeset
  3728
            {
hgs
parents:
diff changeset
  3729
            TInt rid = 0; // command is available
hgs
parents:
diff changeset
  3730
            TMsvId id = iMsgListContainer->CurrentItemId();
hgs
parents:
diff changeset
  3731
            if ( id < 0 )
hgs
parents:
diff changeset
  3732
                {
hgs
parents:
diff changeset
  3733
                if ( CMceMessageListContainerBase::EMessageListItemSubtitle 
hgs
parents:
diff changeset
  3734
                    != iMsgListContainer->CurrentItemType())
hgs
parents:
diff changeset
  3735
                    {
hgs
parents:
diff changeset
  3736
                    resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;                        
hgs
parents:
diff changeset
  3737
                    }
hgs
parents:
diff changeset
  3738
                else
hgs
parents:
diff changeset
  3739
                    {
hgs
parents:
diff changeset
  3740
                    resourceId = iMsgListContainer->SetSpecialMskL();
hgs
parents:
diff changeset
  3741
                    }
hgs
parents:
diff changeset
  3742
                }
hgs
parents:
diff changeset
  3743
            else
hgs
parents:
diff changeset
  3744
                {
hgs
parents:
diff changeset
  3745
                TMsvEntry currentEntry;
hgs
parents:
diff changeset
  3746
                TMsvId serviceId;
hgs
parents:
diff changeset
  3747
                iSession->GetEntry( id, serviceId, currentEntry );
hgs
parents:
diff changeset
  3748
hgs
parents:
diff changeset
  3749
                TMsvEntry serviceEntry;
hgs
parents:
diff changeset
  3750
                iSession->GetEntry( currentEntry.iServiceId, serviceId, serviceEntry );
hgs
parents:
diff changeset
  3751
                        
hgs
parents:
diff changeset
  3752
                CBaseMtmUiData* mtmUiData = iMceUi->GetMtmUiDataL( currentEntry.iMtm );
hgs
parents:
diff changeset
  3753
hgs
parents:
diff changeset
  3754
                if ( !mtmUiData)
hgs
parents:
diff changeset
  3755
                    {
hgs
parents:
diff changeset
  3756
                    resourceId = R_MCE_MSK_BUTTON_EMPTY;
hgs
parents:
diff changeset
  3757
                    }
hgs
parents:
diff changeset
  3758
                else if ( mtmUiData->CanUnDeleteFromEntryL( currentEntry, rid ) &&
hgs
parents:
diff changeset
  3759
                     !serviceEntry.Connected() && currentItemSelectionCount == 0  ) 
hgs
parents:
diff changeset
  3760
                    {
hgs
parents:
diff changeset
  3761
                    // Offline and deleted item in focus
hgs
parents:
diff changeset
  3762
                    resourceId = R_MCE_MSK_BUTTON_UNDELETE;
hgs
parents:
diff changeset
  3763
                    }
hgs
parents:
diff changeset
  3764
                else
hgs
parents:
diff changeset
  3765
                    {
hgs
parents:
diff changeset
  3766
                    if ( currentItemSelectionCount >= 1 || numberOfEntries == 0 )
hgs
parents:
diff changeset
  3767
                        {
hgs
parents:
diff changeset
  3768
                        resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  3769
                        }
hgs
parents:
diff changeset
  3770
                    else
hgs
parents:
diff changeset
  3771
                        {
hgs
parents:
diff changeset
  3772
                        if ( CMceMessageListContainerBase::EMessageListItemSubtitle == iMsgListContainer->CurrentItemType())
hgs
parents:
diff changeset
  3773
                            {
hgs
parents:
diff changeset
  3774
                            resourceId = iMsgListContainer->SetSpecialMskL();
hgs
parents:
diff changeset
  3775
                            }
hgs
parents:
diff changeset
  3776
                        else
hgs
parents:
diff changeset
  3777
                            {
hgs
parents:
diff changeset
  3778
                            resourceId = R_MCE_MSK_BUTTON_OPEN;        
hgs
parents:
diff changeset
  3779
                            }
hgs
parents:
diff changeset
  3780
                        }
hgs
parents:
diff changeset
  3781
                    }
hgs
parents:
diff changeset
  3782
                }
hgs
parents:
diff changeset
  3783
            }
hgs
parents:
diff changeset
  3784
        else if ( newFolderId == KMceDeliveryReportsId )
hgs
parents:
diff changeset
  3785
            {
hgs
parents:
diff changeset
  3786
            // Delivery reports
hgs
parents:
diff changeset
  3787
            if ( numberOfEntries > 0 )
hgs
parents:
diff changeset
  3788
                {
hgs
parents:
diff changeset
  3789
                resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  3790
                }
hgs
parents:
diff changeset
  3791
            else
hgs
parents:
diff changeset
  3792
                {
hgs
parents:
diff changeset
  3793
                resourceId = R_MCE_MSK_BUTTON_EMPTY;
hgs
parents:
diff changeset
  3794
                }        
hgs
parents:
diff changeset
  3795
            }
hgs
parents:
diff changeset
  3796
        else if ( newFolderId == KMsvGlobalOutBoxIndexEntryId )
hgs
parents:
diff changeset
  3797
            {
hgs
parents:
diff changeset
  3798
            // Outbox 
hgs
parents:
diff changeset
  3799
            if ( numberOfEntries > 0 )
hgs
parents:
diff changeset
  3800
                {
hgs
parents:
diff changeset
  3801
                resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  3802
                }
hgs
parents:
diff changeset
  3803
            else if ( numberOfEntries == 0 )
hgs
parents:
diff changeset
  3804
                {
hgs
parents:
diff changeset
  3805
                if ( IsMSKSyncMlMailBox() )
hgs
parents:
diff changeset
  3806
                    {
hgs
parents:
diff changeset
  3807
                    resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  3808
                    }
hgs
parents:
diff changeset
  3809
                else
hgs
parents:
diff changeset
  3810
                    {
hgs
parents:
diff changeset
  3811
                    resourceId = R_MCE_MSK_BUTTON_EMPTY;
hgs
parents:
diff changeset
  3812
                    }                    
hgs
parents:
diff changeset
  3813
                }
hgs
parents:
diff changeset
  3814
            }
hgs
parents:
diff changeset
  3815
        else if ( newFolderId == KMceDocumentsEntryId )
hgs
parents:
diff changeset
  3816
            {
hgs
parents:
diff changeset
  3817
            // Documents, user's own folder
hgs
parents:
diff changeset
  3818
            if ( currentItemSelectionCount >= 1 )
hgs
parents:
diff changeset
  3819
                {
hgs
parents:
diff changeset
  3820
                resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  3821
                }
hgs
parents:
diff changeset
  3822
            else
hgs
parents:
diff changeset
  3823
                {
hgs
parents:
diff changeset
  3824
                if ( CMceMessageListContainerBase::EMessageListItemSubtitle == iMsgListContainer->CurrentItemType())
hgs
parents:
diff changeset
  3825
                    {
hgs
parents:
diff changeset
  3826
                    resourceId = iMsgListContainer->SetSpecialMskL();
hgs
parents:
diff changeset
  3827
                    }
hgs
parents:
diff changeset
  3828
                else
hgs
parents:
diff changeset
  3829
                    {
hgs
parents:
diff changeset
  3830
                    resourceId = R_MCE_MSK_BUTTON_OPEN;        
hgs
parents:
diff changeset
  3831
                    }
hgs
parents:
diff changeset
  3832
                }
hgs
parents:
diff changeset
  3833
            }
hgs
parents:
diff changeset
  3834
        else if ( newFolderId == KMsvGlobalInBoxIndexEntryId ||
hgs
parents:
diff changeset
  3835
                  newFolderId == KMsvSentEntryId ||
hgs
parents:
diff changeset
  3836
                  newFolderId == KMceTemplatesEntryId )
hgs
parents:
diff changeset
  3837
            {
hgs
parents:
diff changeset
  3838
            // Inbox, Sent Items, Templates
hgs
parents:
diff changeset
  3839
            if ( currentItemSelectionCount >= 1 ) 
hgs
parents:
diff changeset
  3840
                {
hgs
parents:
diff changeset
  3841
                resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  3842
                }
hgs
parents:
diff changeset
  3843
            else if ( numberOfEntries == 0 )
hgs
parents:
diff changeset
  3844
                {
hgs
parents:
diff changeset
  3845
                if ( IsMSKSyncMlMailBox() )
hgs
parents:
diff changeset
  3846
                    {
hgs
parents:
diff changeset
  3847
                    resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  3848
                    }
hgs
parents:
diff changeset
  3849
                else
hgs
parents:
diff changeset
  3850
                    {
hgs
parents:
diff changeset
  3851
                    resourceId = R_MCE_MSK_BUTTON_EMPTY;
hgs
parents:
diff changeset
  3852
                    }
hgs
parents:
diff changeset
  3853
                }
hgs
parents:
diff changeset
  3854
            else
hgs
parents:
diff changeset
  3855
                {
hgs
parents:
diff changeset
  3856
                // One row list handles expand/collape MSK setting
hgs
parents:
diff changeset
  3857
                if ( CMceMessageListContainerBase::EMessageListItemSubtitle != iMsgListContainer->CurrentItemType())
hgs
parents:
diff changeset
  3858
                    {                        
hgs
parents:
diff changeset
  3859
                    TMsvId id = iMsgListContainer->CurrentItemId();
hgs
parents:
diff changeset
  3860
                    TMsvEntry currentEntry;
hgs
parents:
diff changeset
  3861
                    TMsvId serviceId;
hgs
parents:
diff changeset
  3862
                    iSession->GetEntry( id, serviceId, currentEntry );
hgs
parents:
diff changeset
  3863
                           
hgs
parents:
diff changeset
  3864
                    CBaseMtmUiData* mtmUiData = iMceUi->GetMtmUiDataL( currentEntry.iMtm );
hgs
parents:
diff changeset
  3865
                    // Coverty fix NULL Return, http://ousrv057/cov.cgi?cid=101802
hgs
parents:
diff changeset
  3866
                    if ( currentEntry.iMtm == KUidMsgMMSNotification && mtmUiData &&
hgs
parents:
diff changeset
  3867
                        mtmUiData->OperationSupportedL(KMtmUiFunctionOpenMessage, currentEntry ) )
hgs
parents:
diff changeset
  3868
                        {
hgs
parents:
diff changeset
  3869
                        // when MMSNotification is in retrieving status, the hide open for MSK
hgs
parents:
diff changeset
  3870
                        resourceId = R_MCE_MSK_BUTTON_EMPTY;
hgs
parents:
diff changeset
  3871
                        }
hgs
parents:
diff changeset
  3872
                    else 
hgs
parents:
diff changeset
  3873
                        {
hgs
parents:
diff changeset
  3874
                        resourceId = R_MCE_MSK_BUTTON_OPEN;
hgs
parents:
diff changeset
  3875
                        } 
hgs
parents:
diff changeset
  3876
                    }
hgs
parents:
diff changeset
  3877
                else
hgs
parents:
diff changeset
  3878
                    {
hgs
parents:
diff changeset
  3879
                    if ( CMceMessageListContainerBase::EMessageListItemSubtitle == iMsgListContainer->CurrentItemType())
hgs
parents:
diff changeset
  3880
                        {
hgs
parents:
diff changeset
  3881
                        resourceId = iMsgListContainer->SetSpecialMskL();
hgs
parents:
diff changeset
  3882
                        }
hgs
parents:
diff changeset
  3883
                    else
hgs
parents:
diff changeset
  3884
                        {
hgs
parents:
diff changeset
  3885
                        resourceId = R_MCE_MSK_BUTTON_OPEN;        
hgs
parents:
diff changeset
  3886
                        }
hgs
parents:
diff changeset
  3887
                    }
hgs
parents:
diff changeset
  3888
                }
hgs
parents:
diff changeset
  3889
            }
hgs
parents:
diff changeset
  3890
        else if ( newFolderId == KMsvDraftEntryId )
hgs
parents:
diff changeset
  3891
            {
hgs
parents:
diff changeset
  3892
            // Drafts
hgs
parents:
diff changeset
  3893
            if ( currentItemSelectionCount >= 1 ) 
hgs
parents:
diff changeset
  3894
                {
hgs
parents:
diff changeset
  3895
                resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  3896
                }
hgs
parents:
diff changeset
  3897
            else if ( numberOfEntries == 0 )
hgs
parents:
diff changeset
  3898
            	{
hgs
parents:
diff changeset
  3899
            	if ( IsMSKSyncMlMailBox() )
hgs
parents:
diff changeset
  3900
                    {
hgs
parents:
diff changeset
  3901
                    resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  3902
                    }
hgs
parents:
diff changeset
  3903
               else
hgs
parents:
diff changeset
  3904
               	{
hgs
parents:
diff changeset
  3905
               	resourceId = R_MCE_MSK_BUTTON_EMPTY;
hgs
parents:
diff changeset
  3906
               	}            	
hgs
parents:
diff changeset
  3907
            	}
hgs
parents:
diff changeset
  3908
            else
hgs
parents:
diff changeset
  3909
                {
hgs
parents:
diff changeset
  3910
                if ( CMceMessageListContainerBase::EMessageListItemSubtitle == iMsgListContainer->CurrentItemType())
hgs
parents:
diff changeset
  3911
                    {
hgs
parents:
diff changeset
  3912
                    resourceId = iMsgListContainer->SetSpecialMskL();
hgs
parents:
diff changeset
  3913
                    }
hgs
parents:
diff changeset
  3914
                else
hgs
parents:
diff changeset
  3915
                    {
hgs
parents:
diff changeset
  3916
                    resourceId = R_MCE_MSK_BUTTON_OPEN;        
hgs
parents:
diff changeset
  3917
                    }
hgs
parents:
diff changeset
  3918
                }
hgs
parents:
diff changeset
  3919
            }
hgs
parents:
diff changeset
  3920
        else
hgs
parents:
diff changeset
  3921
            {
hgs
parents:
diff changeset
  3922
            // User's own folders
hgs
parents:
diff changeset
  3923
            if ( currentItemSelectionCount >= 1 )
hgs
parents:
diff changeset
  3924
                {
hgs
parents:
diff changeset
  3925
                resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  3926
                }
hgs
parents:
diff changeset
  3927
            else if ( numberOfEntries == 0 )
hgs
parents:
diff changeset
  3928
                {
hgs
parents:
diff changeset
  3929
                resourceId = R_MCE_MSK_BUTTON_EMPTY;
hgs
parents:
diff changeset
  3930
                }
hgs
parents:
diff changeset
  3931
            else
hgs
parents:
diff changeset
  3932
                {
hgs
parents:
diff changeset
  3933
                // One row list handles expand/collape MSK setting
hgs
parents:
diff changeset
  3934
                if ( CMceMessageListContainerBase::EMessageListItemSubtitle != iMsgListContainer->CurrentItemType())
hgs
parents:
diff changeset
  3935
                    {                        
hgs
parents:
diff changeset
  3936
                    TMsvId id = iMsgListContainer->CurrentItemId();
hgs
parents:
diff changeset
  3937
                    TMsvEntry currentEntry;
hgs
parents:
diff changeset
  3938
                    TMsvId serviceId;
hgs
parents:
diff changeset
  3939
                    iSession->GetEntry( id, serviceId, currentEntry );
hgs
parents:
diff changeset
  3940
                           
hgs
parents:
diff changeset
  3941
                    CBaseMtmUiData* mtmUiData = iMceUi->GetMtmUiDataL( currentEntry.iMtm );
hgs
parents:
diff changeset
  3942
                    // Coverty fix, NULL Return, http://ousrv057/cov.cgi?cid=101802
hgs
parents:
diff changeset
  3943
                    if ( currentEntry.iMtm == KUidMsgMMSNotification && mtmUiData &&
hgs
parents:
diff changeset
  3944
                        mtmUiData->OperationSupportedL(KMtmUiFunctionOpenMessage, currentEntry ) )
hgs
parents:
diff changeset
  3945
                        {
hgs
parents:
diff changeset
  3946
                        // when MMSNotification is in retrieving status, the hide open for MSK
hgs
parents:
diff changeset
  3947
                        resourceId = R_MCE_MSK_BUTTON_EMPTY;
hgs
parents:
diff changeset
  3948
                        }
hgs
parents:
diff changeset
  3949
                    else 
hgs
parents:
diff changeset
  3950
                        {
hgs
parents:
diff changeset
  3951
                        resourceId = R_MCE_MSK_BUTTON_OPEN;
hgs
parents:
diff changeset
  3952
                        } 
hgs
parents:
diff changeset
  3953
                    }
hgs
parents:
diff changeset
  3954
                else
hgs
parents:
diff changeset
  3955
                    {
hgs
parents:
diff changeset
  3956
                        resourceId = iMsgListContainer->SetSpecialMskL();
hgs
parents:
diff changeset
  3957
                    }
hgs
parents:
diff changeset
  3958
                }
hgs
parents:
diff changeset
  3959
            }     
hgs
parents:
diff changeset
  3960
        
hgs
parents:
diff changeset
  3961
        CEikButtonGroupContainer* cba = Cba();
hgs
parents:
diff changeset
  3962
        cba->SetCommandL( KMSKPosition, resourceId );
hgs
parents:
diff changeset
  3963
        cba->DrawDeferred();
hgs
parents:
diff changeset
  3964
        
hgs
parents:
diff changeset
  3965
        }
hgs
parents:
diff changeset
  3966
    }
hgs
parents:
diff changeset
  3967
    
hgs
parents:
diff changeset
  3968
    
hgs
parents:
diff changeset
  3969
// ----------------------------------------------------
hgs
parents:
diff changeset
  3970
// CMceMessageListView::IsMSKMailBox()
hgs
parents:
diff changeset
  3971
// 
hgs
parents:
diff changeset
  3972
// ----------------------------------------------------    
hgs
parents:
diff changeset
  3973
TBool CMceMessageListView::IsMSKMailBox()
hgs
parents:
diff changeset
  3974
    {
hgs
parents:
diff changeset
  3975
    TBool mailBox = EFalse;
hgs
parents:
diff changeset
  3976
    const TMsvEntry& entry = iMsgListContainer->FolderEntry();
hgs
parents:
diff changeset
  3977
    if ( iMceUi->CheckTechnologyTypeFromMtm( KMailTechnologyTypeUid, entry.iMtm ) )
hgs
parents:
diff changeset
  3978
        {
hgs
parents:
diff changeset
  3979
        mailBox = ETrue;
hgs
parents:
diff changeset
  3980
        }
hgs
parents:
diff changeset
  3981
    return mailBox;
hgs
parents:
diff changeset
  3982
    }
hgs
parents:
diff changeset
  3983
    
hgs
parents:
diff changeset
  3984
// ----------------------------------------------------
hgs
parents:
diff changeset
  3985
// CMceMessageListView::IsMSKSyncMlMailBox()
hgs
parents:
diff changeset
  3986
// 
hgs
parents:
diff changeset
  3987
// ----------------------------------------------------    
hgs
parents:
diff changeset
  3988
TBool CMceMessageListView::IsMSKSyncMlMailBox()
hgs
parents:
diff changeset
  3989
    {
hgs
parents:
diff changeset
  3990
    TBool syncMailBox = EFalse;
hgs
parents:
diff changeset
  3991
    const TMsvEntry& entry = iMsgListContainer->FolderEntry();
hgs
parents:
diff changeset
  3992
    if ( iMceUi->IsPresent( entry.iMtm ) &&
hgs
parents:
diff changeset
  3993
         iMsgListContainer->FolderEntry().iMtm == KSenduiMtmSyncMLEmailUid ) 
hgs
parents:
diff changeset
  3994
        {
hgs
parents:
diff changeset
  3995
        syncMailBox = ETrue;
hgs
parents:
diff changeset
  3996
        }
hgs
parents:
diff changeset
  3997
    return syncMailBox;
hgs
parents:
diff changeset
  3998
    }
hgs
parents:
diff changeset
  3999
hgs
parents:
diff changeset
  4000
 // ----------------------------------------------------
hgs
parents:
diff changeset
  4001
// CMceMessageListView::SetCurrentItemId
hgs
parents:
diff changeset
  4002
// ----------------------------------------------------
hgs
parents:
diff changeset
  4003
void CMceMessageListView::SetCurrentItemId()
hgs
parents:
diff changeset
  4004
    {
hgs
parents:
diff changeset
  4005
    if ( iMsgListContainer && IsMSKMailBox() )
hgs
parents:
diff changeset
  4006
        {
hgs
parents:
diff changeset
  4007
        iCurrentItemId = iMsgListContainer->CurrentItemId();
hgs
parents:
diff changeset
  4008
        }
hgs
parents:
diff changeset
  4009
    else
hgs
parents:
diff changeset
  4010
        {
hgs
parents:
diff changeset
  4011
        iCurrentItemId = KErrNotFound;        
hgs
parents:
diff changeset
  4012
        }
hgs
parents:
diff changeset
  4013
    }
hgs
parents:
diff changeset
  4014
    
hgs
parents:
diff changeset
  4015
    
hgs
parents:
diff changeset
  4016
// ----------------------------------------------------
hgs
parents:
diff changeset
  4017
// CMceMessageListView::CreateListboxL
hgs
parents:
diff changeset
  4018
// ----------------------------------------------------
hgs
parents:
diff changeset
  4019
void CMceMessageListView::CreateListboxL()
hgs
parents:
diff changeset
  4020
    {
hgs
parents:
diff changeset
  4021
    TInt newListType = EMceListTypeTwoRow;
hgs
parents:
diff changeset
  4022
    
hgs
parents:
diff changeset
  4023
    newListType = GetFolderListBoxType();
hgs
parents:
diff changeset
  4024
hgs
parents:
diff changeset
  4025
    if ( !iMsgListContainer )
hgs
parents:
diff changeset
  4026
        {
hgs
parents:
diff changeset
  4027
        if ( newListType != EMceListTypeOneRow )
hgs
parents:
diff changeset
  4028
            {
hgs
parents:
diff changeset
  4029
            iMsgListContainer = CMceMessageListContainer::NewL(
hgs
parents:
diff changeset
  4030
                ClientRect(),
hgs
parents:
diff changeset
  4031
                iSession,
hgs
parents:
diff changeset
  4032
                iFolderId,
hgs
parents:
diff changeset
  4033
                iBitmapResolver,
hgs
parents:
diff changeset
  4034
                *this );
hgs
parents:
diff changeset
  4035
            iCurrentListType = EMceListTypeTwoRow;
hgs
parents:
diff changeset
  4036
            }
hgs
parents:
diff changeset
  4037
        else
hgs
parents:
diff changeset
  4038
            {
hgs
parents:
diff changeset
  4039
            iMsgListContainer = CMceOneRowMessageListContainer::NewL(
hgs
parents:
diff changeset
  4040
                *this,
hgs
parents:
diff changeset
  4041
                ClientRect(),
hgs
parents:
diff changeset
  4042
                iSession,
hgs
parents:
diff changeset
  4043
                *iMceUi );
hgs
parents:
diff changeset
  4044
            iCurrentListType = EMceListTypeOneRow;
hgs
parents:
diff changeset
  4045
            }
hgs
parents:
diff changeset
  4046
hgs
parents:
diff changeset
  4047
        iMsgListContainer->SetMopParent( this );
hgs
parents:
diff changeset
  4048
        iMsgListContainer->SetMtmUiDataRegistry( iMceUi );
hgs
parents:
diff changeset
  4049
        }
hgs
parents:
diff changeset
  4050
hgs
parents:
diff changeset
  4051
    iCurrentListboxId = iMsgListContainer->MceListId();
hgs
parents:
diff changeset
  4052
    }
hgs
parents:
diff changeset
  4053
    
hgs
parents:
diff changeset
  4054
hgs
parents:
diff changeset
  4055
// ----------------------------------------------------
hgs
parents:
diff changeset
  4056
// CMceMessageListView::EnvironmentChanged
hgs
parents:
diff changeset
  4057
// ----------------------------------------------------
hgs
parents:
diff changeset
  4058
TInt CMceMessageListView::EnvironmentChanged( TAny* aSelf )
hgs
parents:
diff changeset
  4059
    {
hgs
parents:
diff changeset
  4060
    TInt err = KErrArgument;
hgs
parents:
diff changeset
  4061
    CMceMessageListView* self = static_cast<CMceMessageListView*>(aSelf);
hgs
parents:
diff changeset
  4062
    if ( self )
hgs
parents:
diff changeset
  4063
        {
hgs
parents:
diff changeset
  4064
        err = self->HandleEnvironmentChanged();
hgs
parents:
diff changeset
  4065
        }
hgs
parents:
diff changeset
  4066
    return err;        
hgs
parents:
diff changeset
  4067
    
hgs
parents:
diff changeset
  4068
    }
hgs
parents:
diff changeset
  4069
    
hgs
parents:
diff changeset
  4070
// ----------------------------------------------------
hgs
parents:
diff changeset
  4071
// CMceMessageListView::HandleEnvironmentChanged
hgs
parents:
diff changeset
  4072
// ----------------------------------------------------
hgs
parents:
diff changeset
  4073
TInt CMceMessageListView::HandleEnvironmentChanged()
hgs
parents:
diff changeset
  4074
    {
hgs
parents:
diff changeset
  4075
    TInt err = KErrNone;
hgs
parents:
diff changeset
  4076
    if ( iMsgListContainer &&
hgs
parents:
diff changeset
  4077
        iDateTimeNotifier ) 
hgs
parents:
diff changeset
  4078
        {
hgs
parents:
diff changeset
  4079
        TInt change = iDateTimeNotifier->Change();
hgs
parents:
diff changeset
  4080
        if ( change & EChangesMidnightCrossover ||
hgs
parents:
diff changeset
  4081
             change & EChangesLocale ||
hgs
parents:
diff changeset
  4082
             change & EChangesSystemTime )
hgs
parents:
diff changeset
  4083
            {
hgs
parents:
diff changeset
  4084
            // inform container that date/time format has been changed
hgs
parents:
diff changeset
  4085
            TRAP( err, iMsgListContainer->DateTimeFormatChangedL( change ) );
hgs
parents:
diff changeset
  4086
            }
hgs
parents:
diff changeset
  4087
        }
hgs
parents:
diff changeset
  4088
    return err;
hgs
parents:
diff changeset
  4089
    }
hgs
parents:
diff changeset
  4090
hgs
parents:
diff changeset
  4091
    
hgs
parents:
diff changeset
  4092
// ----------------------------------------------------
hgs
parents:
diff changeset
  4093
// CMceMessageListView::ListboxTypeChangedL
hgs
parents:
diff changeset
  4094
// ----------------------------------------------------
hgs
parents:
diff changeset
  4095
void CMceMessageListView::ListboxTypeChangedL()
hgs
parents:
diff changeset
  4096
    {
hgs
parents:
diff changeset
  4097
    if (iMsgListContainer)
hgs
parents:
diff changeset
  4098
        {
hgs
parents:
diff changeset
  4099
        CEikonEnv* eikEnv = CEikonEnv::Static();
hgs
parents:
diff changeset
  4100
        if( eikEnv )
hgs
parents:
diff changeset
  4101
            {
hgs
parents:
diff changeset
  4102
            // New listbox will overlap any remaining dialog, 
hgs
parents:
diff changeset
  4103
            // so we'll close them here.
hgs
parents:
diff changeset
  4104
            AknDialogShutter::ShutDialogsL( *eikEnv );
hgs
parents:
diff changeset
  4105
            }
hgs
parents:
diff changeset
  4106
        
hgs
parents:
diff changeset
  4107
        iMsgListContainer->MakeVisible(EFalse);
hgs
parents:
diff changeset
  4108
        AppUi()->RemoveFromStack(iMsgListContainer);
hgs
parents:
diff changeset
  4109
        delete iMsgListContainer;
hgs
parents:
diff changeset
  4110
        iMsgListContainer = NULL;
hgs
parents:
diff changeset
  4111
        iLocalScreenClearer = CAknLocalScreenClearer::NewL( EFalse );
hgs
parents:
diff changeset
  4112
        CreateListboxL();
hgs
parents:
diff changeset
  4113
        iMsgListContainer->SetFolderL( iFolderId );
hgs
parents:
diff changeset
  4114
        iMsgListContainer->ClearSelection();
hgs
parents:
diff changeset
  4115
        iMsgListContainer->SetRect(ClientRect());
hgs
parents:
diff changeset
  4116
        SetMskObserver( ETrue );
hgs
parents:
diff changeset
  4117
        AppUi()->AddToStackL( *this,iMsgListContainer );
hgs
parents:
diff changeset
  4118
        iMsgListContainer->ActivateL();
hgs
parents:
diff changeset
  4119
        iMsgListContainer->MakeVisible(ETrue);
hgs
parents:
diff changeset
  4120
        delete iLocalScreenClearer;
hgs
parents:
diff changeset
  4121
        iLocalScreenClearer = NULL;
hgs
parents:
diff changeset
  4122
        }
hgs
parents:
diff changeset
  4123
    }
hgs
parents:
diff changeset
  4124
hgs
parents:
diff changeset
  4125
// ----------------------------------------------------
hgs
parents:
diff changeset
  4126
// CMceMessageListView::SetForwardMenuL
hgs
parents:
diff changeset
  4127
// ----------------------------------------------------
hgs
parents:
diff changeset
  4128
void CMceMessageListView::SetForwardMenuL( CEikMenuPane* aMenuPane, TMsvEntry& aEntry )
hgs
parents:
diff changeset
  4129
    {
hgs
parents:
diff changeset
  4130
    TBool canForward = EFalse;
hgs
parents:
diff changeset
  4131
    switch( aEntry.iMtm.iUid ) 
hgs
parents:
diff changeset
  4132
        {
hgs
parents:
diff changeset
  4133
        case KSenduiMtmIrUidValue:
hgs
parents:
diff changeset
  4134
        case KSenduiMtmBtUidValue:
hgs
parents:
diff changeset
  4135
        case KSenduiMtmBioUidValue:
hgs
parents:
diff changeset
  4136
            {
hgs
parents:
diff changeset
  4137
            canForward = EFalse;
hgs
parents:
diff changeset
  4138
            break;
hgs
parents:
diff changeset
  4139
            }
hgs
parents:
diff changeset
  4140
        case KSenduiMtmSmsUidValue:
hgs
parents:
diff changeset
  4141
            {
hgs
parents:
diff changeset
  4142
            canForward = !( aEntry.iBioType ) && 
hgs
parents:
diff changeset
  4143
                iMceUi->CheckCommandAvailableL( EMceCmdForward, aEntry ) ;
hgs
parents:
diff changeset
  4144
            break;
hgs
parents:
diff changeset
  4145
            }
hgs
parents:
diff changeset
  4146
        default:
hgs
parents:
diff changeset
  4147
            {
hgs
parents:
diff changeset
  4148
            canForward = iMceUi->CheckCommandAvailableL( EMceCmdForward, aEntry );
hgs
parents:
diff changeset
  4149
            }
hgs
parents:
diff changeset
  4150
        }
hgs
parents:
diff changeset
  4151
    aMenuPane->SetItemDimmed( EMceCmdForward, !canForward );
hgs
parents:
diff changeset
  4152
    }
hgs
parents:
diff changeset
  4153
            
hgs
parents:
diff changeset
  4154
hgs
parents:
diff changeset
  4155
hgs
parents:
diff changeset
  4156
hgs
parents:
diff changeset
  4157
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4158
// CMceMessageListView::DimReadUnreadOptionsMenu
hgs
parents:
diff changeset
  4159
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4160
//    
hgs
parents:
diff changeset
  4161
void CMceMessageListView::DimReadUnreadOptionsMenu( CEikMenuPane *aMenuPane )
hgs
parents:
diff changeset
  4162
    {
hgs
parents:
diff changeset
  4163
    aMenuPane->SetItemDimmed( EMceCmdMarkAsRead, ETrue );
hgs
parents:
diff changeset
  4164
    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnread, ETrue );
hgs
parents:
diff changeset
  4165
    aMenuPane->SetItemDimmed( EMceCmdMarkAsReadMsg, ETrue );
hgs
parents:
diff changeset
  4166
    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadMsg, ETrue );
hgs
parents:
diff changeset
  4167
    aMenuPane->SetItemDimmed( EMceCmdMarkAsReadMsgs, ETrue );
hgs
parents:
diff changeset
  4168
    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadMsgs, ETrue );
hgs
parents:
diff changeset
  4169
    aMenuPane->SetItemDimmed( EMceCmdMarkAsReadEmails, ETrue );
hgs
parents:
diff changeset
  4170
    aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadEmails, ETrue );
hgs
parents:
diff changeset
  4171
    }
hgs
parents:
diff changeset
  4172
hgs
parents:
diff changeset
  4173
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4174
// CMceMessageListView::SetReadUnreadOptionsMenu
hgs
parents:
diff changeset
  4175
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4176
//    
hgs
parents:
diff changeset
  4177
void CMceMessageListView::SetReadUnreadOptionsMenu( CEikMenuPane *aMenuPane, TBool aIsEmail, TBool aSetRead )
hgs
parents:
diff changeset
  4178
    {
hgs
parents:
diff changeset
  4179
    if ( aIsEmail )
hgs
parents:
diff changeset
  4180
        {// emails
hgs
parents:
diff changeset
  4181
        switch ( aSetRead )
hgs
parents:
diff changeset
  4182
            {
hgs
parents:
diff changeset
  4183
            case MessageFolderAllRead:
hgs
parents:
diff changeset
  4184
                aMenuPane->SetItemDimmed( EMceCmdMarkAsReadEmails, ETrue );
hgs
parents:
diff changeset
  4185
                aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadEmails, EFalse );
hgs
parents:
diff changeset
  4186
                break;
hgs
parents:
diff changeset
  4187
            case MessageFolderAllUnread:
hgs
parents:
diff changeset
  4188
                aMenuPane->SetItemDimmed( EMceCmdMarkAsReadEmails, EFalse );
hgs
parents:
diff changeset
  4189
                aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadEmails, ETrue );
hgs
parents:
diff changeset
  4190
                break;
hgs
parents:
diff changeset
  4191
            case MessageFolderReadUnread:
hgs
parents:
diff changeset
  4192
                aMenuPane->SetItemDimmed( EMceCmdMarkAsReadEmails, EFalse );
hgs
parents:
diff changeset
  4193
                aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadEmails, EFalse );
hgs
parents:
diff changeset
  4194
                break;
hgs
parents:
diff changeset
  4195
            default:
hgs
parents:
diff changeset
  4196
                // never
hgs
parents:
diff changeset
  4197
                break;
hgs
parents:
diff changeset
  4198
            }
hgs
parents:
diff changeset
  4199
        }
hgs
parents:
diff changeset
  4200
    else
hgs
parents:
diff changeset
  4201
        {// messages 
hgs
parents:
diff changeset
  4202
        switch ( aSetRead )
hgs
parents:
diff changeset
  4203
            {
hgs
parents:
diff changeset
  4204
            case MessageFolderAllRead:
hgs
parents:
diff changeset
  4205
                aMenuPane->SetItemDimmed( EMceCmdMarkAsReadMsgs, ETrue );
hgs
parents:
diff changeset
  4206
                aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadMsgs, EFalse );
hgs
parents:
diff changeset
  4207
                break;
hgs
parents:
diff changeset
  4208
            case MessageFolderAllUnread:
hgs
parents:
diff changeset
  4209
                aMenuPane->SetItemDimmed( EMceCmdMarkAsReadMsgs, EFalse );
hgs
parents:
diff changeset
  4210
                aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadMsgs, ETrue );
hgs
parents:
diff changeset
  4211
                break;
hgs
parents:
diff changeset
  4212
            case MessageFolderReadUnread:
hgs
parents:
diff changeset
  4213
                aMenuPane->SetItemDimmed( EMceCmdMarkAsReadMsgs, EFalse );
hgs
parents:
diff changeset
  4214
                aMenuPane->SetItemDimmed( EMceCmdMarkAsUnreadMsgs, EFalse );
hgs
parents:
diff changeset
  4215
                break;
hgs
parents:
diff changeset
  4216
            default:
hgs
parents:
diff changeset
  4217
                // never
hgs
parents:
diff changeset
  4218
                break;
hgs
parents:
diff changeset
  4219
            }
hgs
parents:
diff changeset
  4220
        }
hgs
parents:
diff changeset
  4221
    }
hgs
parents:
diff changeset
  4222
      
hgs
parents:
diff changeset
  4223
// ----------------------------------------------------
hgs
parents:
diff changeset
  4224
// CMceMessageListView::SetMarkReadUnread( TBool aValue )
hgs
parents:
diff changeset
  4225
// ----------------------------------------------------
hgs
parents:
diff changeset
  4226
void CMceMessageListView::SetMarkReadUnread( TBool aValue )
hgs
parents:
diff changeset
  4227
    {
hgs
parents:
diff changeset
  4228
    iReadUnread = aValue;
hgs
parents:
diff changeset
  4229
    }
hgs
parents:
diff changeset
  4230
hgs
parents:
diff changeset
  4231
// ----------------------------------------------------
hgs
parents:
diff changeset
  4232
// CMceMessageListView::SetContextCommandFlag( TBool aContextCommandFlag )
hgs
parents:
diff changeset
  4233
// ----------------------------------------------------	
hgs
parents:
diff changeset
  4234
void CMceMessageListView::SetContextCommandFlag(TBool aContextCommandFlag)
hgs
parents:
diff changeset
  4235
    {
hgs
parents:
diff changeset
  4236
    iContextCommand = aContextCommandFlag;
hgs
parents:
diff changeset
  4237
    }
hgs
parents:
diff changeset
  4238
hgs
parents:
diff changeset
  4239
// ----------------------------------------------------
hgs
parents:
diff changeset
  4240
// CMceMessageListView::GetLocalScreenClearer( CAknLocalScreenClearer** &aClearer )
hgs
parents:
diff changeset
  4241
// ---------------------------------------------------- 
hgs
parents:
diff changeset
  4242
void CMceMessageListView::GetLocalScreenClearer( CAknLocalScreenClearer** &aClearer )        
hgs
parents:
diff changeset
  4243
    {
hgs
parents:
diff changeset
  4244
    aClearer = &iLocalScreenClearer;
hgs
parents:
diff changeset
  4245
    }
hgs
parents:
diff changeset
  4246
// ----------------------------------------------------
hgs
parents:
diff changeset
  4247
// CMceMessageListView::SetMarkingMode( TBool aMarkingModeOn )
hgs
parents:
diff changeset
  4248
// ---------------------------------------------------- 
hgs
parents:
diff changeset
  4249
hgs
parents:
diff changeset
  4250
void CMceMessageListView::SetMarkingMode( TBool aMarkingModeOn )
hgs
parents:
diff changeset
  4251
    {
hgs
parents:
diff changeset
  4252
    iMarkingModeOn = aMarkingModeOn;
hgs
parents:
diff changeset
  4253
    }
hgs
parents:
diff changeset
  4254
// ----------------------------------------------------
hgs
parents:
diff changeset
  4255
// CMceMessageListView::MarkingMode() const
hgs
parents:
diff changeset
  4256
// ---------------------------------------------------- 
hgs
parents:
diff changeset
  4257
hgs
parents:
diff changeset
  4258
TBool CMceMessageListView::MarkingMode() const
hgs
parents:
diff changeset
  4259
    {
hgs
parents:
diff changeset
  4260
    return iMarkingModeOn;  
hgs
parents:
diff changeset
  4261
    }	
hgs
parents:
diff changeset
  4262
// ----------------------------------------------------
hgs
parents:
diff changeset
  4263
// CMceMessageListView::MessageCount() const
hgs
parents:
diff changeset
  4264
// ---------------------------------------------------- 
hgs
parents:
diff changeset
  4265
hgs
parents:
diff changeset
  4266
TInt CMceMessageListView::MessageCount() const
hgs
parents:
diff changeset
  4267
    {
hgs
parents:
diff changeset
  4268
    if ( iMsgListContainer )
hgs
parents:
diff changeset
  4269
        {
hgs
parents:
diff changeset
  4270
        return iMsgListContainer->MessageCount();
hgs
parents:
diff changeset
  4271
        }
hgs
parents:
diff changeset
  4272
    return 0;
hgs
parents:
diff changeset
  4273
    }
hgs
parents:
diff changeset
  4274
// ----------------------------------------------------
hgs
parents:
diff changeset
  4275
// CMceMessageListView::SetMarkingModeOff()
hgs
parents:
diff changeset
  4276
// ---------------------------------------------------- 
hgs
parents:
diff changeset
  4277
hgs
parents:
diff changeset
  4278
void CMceMessageListView::SetMarkingModeOff()
hgs
parents:
diff changeset
  4279
    {
hgs
parents:
diff changeset
  4280
    if( iMsgListContainer )
hgs
parents:
diff changeset
  4281
        {
hgs
parents:
diff changeset
  4282
        iMsgListContainer->SetMarkingModeOff();
hgs
parents:
diff changeset
  4283
        }
hgs
parents:
diff changeset
  4284
    iMarkingModeOn = EFalse;
hgs
parents:
diff changeset
  4285
    }
hgs
parents:
diff changeset
  4286
hgs
parents:
diff changeset
  4287
//  End of File