messagingappbase/mce/src/MceOneRowMessageListContainer.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) 2007 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
*     Container for main view.
hgs
parents:
diff changeset
    16
*     Derived from CMceOneRowMessageListContainer.
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
#include "mceui.h"
hgs
parents:
diff changeset
    24
#include <aknlists.h>
hgs
parents:
diff changeset
    25
#include <aknsinglecolumnstyletreelist.h>
hgs
parents:
diff changeset
    26
#include <AknsBasicBackgroundControlContext.h>
hgs
parents:
diff changeset
    27
#include <akntreelist.h>                        // CAknTreeList::ESaveFocus
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include <AknIconUtils.h>
hgs
parents:
diff changeset
    31
#include <avkon.mbg>        // bitmap enums
hgs
parents:
diff changeset
    32
#include <muiu.mbg>         // bitmap enums
hgs
parents:
diff changeset
    33
#include <data_caging_path_literals.hrh>
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
#include "MceOneRowMessageListBitmapResolver.h"
hgs
parents:
diff changeset
    36
#include "MceOneRowMessageListContainer.h"
hgs
parents:
diff changeset
    37
#include "MceOneRowMessageListArray.h"
hgs
parents:
diff changeset
    38
#include "MceOneRowMessageListArrayLoader.h"  // For CMceOneRowListItemArrayLoader::EHListItemSubtitle
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
#include "MceMessageListView.h"
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
#include <msvids.h>
hgs
parents:
diff changeset
    43
#include <msvuids.h>
hgs
parents:
diff changeset
    44
#include <SenduiMtmUids.h>  // mtm uids
hgs
parents:
diff changeset
    45
#include "MceIds.h"         // KMceApplicationUid
hgs
parents:
diff changeset
    46
#include "MceLogText.h"
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
#include <StringLoader.h>   // stringloader
hgs
parents:
diff changeset
    49
#include "MceCommands.hrh"
hgs
parents:
diff changeset
    50
#include <bldvariant.hrh>
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
#include <csxhelp/mce.hlp.hrh>
hgs
parents:
diff changeset
    53
#include <csxhelp/mbxs.hlp.hrh>
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
#include <PtiEngine.h>
hgs
parents:
diff changeset
    56
#include <featmgr.h>
hgs
parents:
diff changeset
    57
#include <commonphoneparser.h>
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
#include <muiumsvuiserviceutilitiesinternal.h>
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
#include <mce.rsg>
hgs
parents:
diff changeset
    62
#include <mtudreg.h> 
hgs
parents:
diff changeset
    63
// CONSTANTS
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
const TInt KMceListContainerGranuality = 4;
hgs
parents:
diff changeset
    66
const TInt KMceTextBufferLength        = 10;    // text buffer length
hgs
parents:
diff changeset
    67
const TInt KMceFocusOffsetTopView      = 0;     // Set focused item top of view
hgs
parents:
diff changeset
    68
const TInt KMceTextItemSize            = 75;    // Subtitle text buffer size
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
const TInt KMceColumn1                 = 1;
hgs
parents:
diff changeset
    71
const TInt KMceColumn2                 = 2;
hgs
parents:
diff changeset
    72
const TInt KMceColumn3                 = 3;
hgs
parents:
diff changeset
    73
const TInt KMceFirstItemIndex          = 0;
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
// The position of the middle soft key
hgs
parents:
diff changeset
    77
const TInt KMSKPosition = 3;
hgs
parents:
diff changeset
    78
const TInt KMSKLabel    = 20;
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
//cmail update
hgs
parents:
diff changeset
    81
#define KUidMsgTypeCmailMtmVal               0x2001F406
hgs
parents:
diff changeset
    82
const TUid KMailTechnologyTypeUid = { 0x10001671 };
hgs
parents:
diff changeset
    83
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
// ----------------------------------------------------
hgs
parents:
diff changeset
    86
// Constructor
hgs
parents:
diff changeset
    87
// ----------------------------------------------------
hgs
parents:
diff changeset
    88
//
hgs
parents:
diff changeset
    89
CMceOneRowMessageListContainer::CMceOneRowMessageListContainer( CMceMessageListView& aParentView ) :
hgs
parents:
diff changeset
    90
    CMceMessageListContainerBase( aParentView ),
hgs
parents:
diff changeset
    91
    iEmailFramework(EFalse),
hgs
parents:
diff changeset
    92
    iDeletedMessges(0)
hgs
parents:
diff changeset
    93
    {
hgs
parents:
diff changeset
    94
    iSelectedSubTitles.Reset();
hgs
parents:
diff changeset
    95
    }
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
// ----------------------------------------------------
hgs
parents:
diff changeset
    99
// Destructor
hgs
parents:
diff changeset
   100
// ----------------------------------------------------
hgs
parents:
diff changeset
   101
//
hgs
parents:
diff changeset
   102
CMceOneRowMessageListContainer::~CMceOneRowMessageListContainer()
hgs
parents:
diff changeset
   103
    {
hgs
parents:
diff changeset
   104
    delete iT9Interface;
hgs
parents:
diff changeset
   105
    delete iT9Timer;
hgs
parents:
diff changeset
   106
    delete iListItems;
hgs
parents:
diff changeset
   107
    delete iBitmapResolver;
hgs
parents:
diff changeset
   108
    delete iBgContext;
hgs
parents:
diff changeset
   109
    delete iSelectedEntries;
hgs
parents:
diff changeset
   110
    delete iTreeListBox;
hgs
parents:
diff changeset
   111
    delete iUiRegistry;
hgs
parents:
diff changeset
   112
    iSelectedSubTitles.Close();
hgs
parents:
diff changeset
   113
    }
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
// ----------------------------------------------------
hgs
parents:
diff changeset
   117
// CMceOneRowMessageListContainer::NewL
hgs
parents:
diff changeset
   118
// ----------------------------------------------------
hgs
parents:
diff changeset
   119
//
hgs
parents:
diff changeset
   120
CMceOneRowMessageListContainer* CMceOneRowMessageListContainer::NewL(
hgs
parents:
diff changeset
   121
    CMceMessageListView& aParentView,
hgs
parents:
diff changeset
   122
    const TRect& aRect,
hgs
parents:
diff changeset
   123
    CMsvSessionPtr aSession,
hgs
parents:
diff changeset
   124
    MMtmUiDataRegistryObserver& aRegObserver )
hgs
parents:
diff changeset
   125
    {
hgs
parents:
diff changeset
   126
    CMceOneRowMessageListContainer* self = new (ELeave)
hgs
parents:
diff changeset
   127
        CMceOneRowMessageListContainer( aParentView );
hgs
parents:
diff changeset
   128
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
   129
    self->ConstructL( aRect, aSession, aRegObserver );
hgs
parents:
diff changeset
   130
    CleanupStack::Pop(); // self
hgs
parents:
diff changeset
   131
    return self;
hgs
parents:
diff changeset
   132
    }
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
// ----------------------------------------------------
hgs
parents:
diff changeset
   136
// CMceOneRowMessageListContainer::AddDefaultIconsL
hgs
parents:
diff changeset
   137
// ----------------------------------------------------
hgs
parents:
diff changeset
   138
//
hgs
parents:
diff changeset
   139
void CMceOneRowMessageListContainer::AddDefaultIconsL()
hgs
parents:
diff changeset
   140
    {
hgs
parents:
diff changeset
   141
    CFbsBitmap* bitmap = NULL;
hgs
parents:
diff changeset
   142
    CFbsBitmap* bitmapMask = NULL;
hgs
parents:
diff changeset
   143
    TInt treeIconIndex = KErrNotFound;
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
    for ( TInt i = EMceBitmapIndexUnknown; i < EMceBitmapIndexLastIconIndex; i++ )
hgs
parents:
diff changeset
   146
        {
hgs
parents:
diff changeset
   147
        if ( iBitmapResolver->GetBitmapL( (TMceBitmapArrayIndexes)i, bitmap, bitmapMask ) < 0 )
hgs
parents:
diff changeset
   148
            {
hgs
parents:
diff changeset
   149
            treeIconIndex = iTreeListBox->AddIconL(
hgs
parents:
diff changeset
   150
                bitmap,
hgs
parents:
diff changeset
   151
                bitmapMask,
hgs
parents:
diff changeset
   152
                EFalse,
hgs
parents:
diff changeset
   153
                EAspectRatioPreserved );
hgs
parents:
diff changeset
   154
            iBitmapResolver->SetTreeIconId( (TMceBitmapArrayIndexes)i, treeIconIndex );
hgs
parents:
diff changeset
   155
            }
hgs
parents:
diff changeset
   156
        }
hgs
parents:
diff changeset
   157
    }
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
// ----------------------------------------------------
hgs
parents:
diff changeset
   161
// CMceOneRowMessageListContainer::ConstructL
hgs
parents:
diff changeset
   162
// ----------------------------------------------------
hgs
parents:
diff changeset
   163
//
hgs
parents:
diff changeset
   164
void CMceOneRowMessageListContainer::ConstructL(
hgs
parents:
diff changeset
   165
    const TRect& aRect,
hgs
parents:
diff changeset
   166
    CMsvSessionPtr aSession,
hgs
parents:
diff changeset
   167
    MMtmUiDataRegistryObserver& aRegObserver )
hgs
parents:
diff changeset
   168
    {
hgs
parents:
diff changeset
   169
    FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
   170
    if ( FeatureManager::FeatureSupported( KFeatureIdFfEmailFramework ) )
hgs
parents:
diff changeset
   171
        {
hgs
parents:
diff changeset
   172
        iEmailFramework = ETrue;
hgs
parents:
diff changeset
   173
        }    
hgs
parents:
diff changeset
   174
    FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
   175
    
hgs
parents:
diff changeset
   176
    CreateWindowL();
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
    InitComponentArrayL();
hgs
parents:
diff changeset
   179
    Components().SetControlsOwnedExternally( ETrue );
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
    // Construct list.
hgs
parents:
diff changeset
   182
    CAknSingleColumnStyleTreeList* list =
hgs
parents:
diff changeset
   183
        CAknSingleColumnStyleTreeList::NewL( *this );
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
    iSelectedEntries = new (ELeave) CMsvEntrySelection;
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
    iContainerFlags.ClearMceFlag( EMceOneRowFlagOptionsMenuOpen );
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
    iContainerFlags.ClearMceFlag( EMceOneRowFlagFirstSubtitleOpen );
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
    // Use list as a component control of the view.
hgs
parents:
diff changeset
   192
    Components().AppendLC( list, KCoeNoControlId );
hgs
parents:
diff changeset
   193
    CleanupStack::Pop( list );
hgs
parents:
diff changeset
   194
    iTreeListBox = list;
hgs
parents:
diff changeset
   195
    iTreeListBox->EnableTabModeFunctionIndicatorsL( ETrue );
hgs
parents:
diff changeset
   196
    iTreeListBox->SetFlags( iTreeListBox->Flags() ^ KAknTreeListLooping ^ KAknTreeListMarkable );
hgs
parents:
diff changeset
   197
    iTreeListBox->AddObserverL( this );
hgs
parents:
diff changeset
   198
    iTreeListBox->SetMarkingModeObserver( this );
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
    iBgContext = CAknsBasicBackgroundControlContext::NewL(
hgs
parents:
diff changeset
   201
        KAknsIIDQsnBgAreaMain, iAvkonAppUi->ApplicationRect(), EFalse );
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
    iBitmapResolver = CMceOneRowBitmapResolver::NewL( aSession, aRegObserver );
hgs
parents:
diff changeset
   204
    AddDefaultIconsL();
hgs
parents:
diff changeset
   205
    iListItems = CMceOneRowListItemArray::NewL( aSession, 0x1000 );
hgs
parents:
diff changeset
   206
    iListItems->SetListItemArrayObserver( this );
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
    iTreeListBox->Sort( iListItems, EFalse );
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
    SetRect( aRect );
hgs
parents:
diff changeset
   211
    
hgs
parents:
diff changeset
   212
    TLocale locale;
hgs
parents:
diff changeset
   213
    iStartOfWeek = locale.StartOfWeek();
hgs
parents:
diff changeset
   214
    iDialerEvent = EFalse ;
hgs
parents:
diff changeset
   215
    iUiRegistry = CMtmUiDataRegistry::NewL(*aSession); 
hgs
parents:
diff changeset
   216
    }
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
// ----------------------------------------------------
hgs
parents:
diff changeset
   220
// CMceMessageListContainer::MceListId
hgs
parents:
diff changeset
   221
// ----------------------------------------------------
hgs
parents:
diff changeset
   222
TInt CMceOneRowMessageListContainer::MceListId() const
hgs
parents:
diff changeset
   223
    {
hgs
parents:
diff changeset
   224
    return EMceListTypeOneRow;
hgs
parents:
diff changeset
   225
    }
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
// ----------------------------------------------------
hgs
parents:
diff changeset
   229
// CMceOneRowMessageListContainer::CountComponentControls
hgs
parents:
diff changeset
   230
// ----------------------------------------------------
hgs
parents:
diff changeset
   231
//
hgs
parents:
diff changeset
   232
TInt CMceOneRowMessageListContainer::CountComponentControls() const
hgs
parents:
diff changeset
   233
    {
hgs
parents:
diff changeset
   234
    return 1; // always only listbox
hgs
parents:
diff changeset
   235
    }
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
// ----------------------------------------------------
hgs
parents:
diff changeset
   239
// CMceOneRowMessageListContainer::ComponentControl
hgs
parents:
diff changeset
   240
// ----------------------------------------------------
hgs
parents:
diff changeset
   241
//
hgs
parents:
diff changeset
   242
CCoeControl* CMceOneRowMessageListContainer::ComponentControl(TInt /*aIndex*/) const
hgs
parents:
diff changeset
   243
    {
hgs
parents:
diff changeset
   244
    return iTreeListBox;
hgs
parents:
diff changeset
   245
    }
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
hgs
parents:
diff changeset
   248
// ----------------------------------------------------
hgs
parents:
diff changeset
   249
// CMceOneRowMessageListContainer::SetFolderL
hgs
parents:
diff changeset
   250
// ----------------------------------------------------
hgs
parents:
diff changeset
   251
//
hgs
parents:
diff changeset
   252
void CMceOneRowMessageListContainer::SetFolderL( TMsvId aFolderId )
hgs
parents:
diff changeset
   253
    {
hgs
parents:
diff changeset
   254
    if ( iListItems )
hgs
parents:
diff changeset
   255
        {
hgs
parents:
diff changeset
   256
        ResetListbox();
hgs
parents:
diff changeset
   257
        iContainerFlags.ClearMceFlag( EMceOneRowFlagFirstSubtitleOpen );
hgs
parents:
diff changeset
   258
        iListItems->SetFolderL( aFolderId );
hgs
parents:
diff changeset
   259
        }
hgs
parents:
diff changeset
   260
    }
hgs
parents:
diff changeset
   261
hgs
parents:
diff changeset
   262
hgs
parents:
diff changeset
   263
// ----------------------------------------------------
hgs
parents:
diff changeset
   264
// CMceOneRowMessageListContainer::SizeChanged
hgs
parents:
diff changeset
   265
// ----------------------------------------------------
hgs
parents:
diff changeset
   266
//
hgs
parents:
diff changeset
   267
void CMceOneRowMessageListContainer::SizeChanged()
hgs
parents:
diff changeset
   268
    {
hgs
parents:
diff changeset
   269
    TRect rect = Rect();
hgs
parents:
diff changeset
   270
    if (iTreeListBox)
hgs
parents:
diff changeset
   271
        {
hgs
parents:
diff changeset
   272
        iTreeListBox->SetRect( rect );
hgs
parents:
diff changeset
   273
        }
hgs
parents:
diff changeset
   274
    if ( iBgContext )
hgs
parents:
diff changeset
   275
        {
hgs
parents:
diff changeset
   276
        iBgContext->SetRect( rect );
hgs
parents:
diff changeset
   277
        }
hgs
parents:
diff changeset
   278
    }
hgs
parents:
diff changeset
   279
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
// ----------------------------------------------------
hgs
parents:
diff changeset
   282
// CMceOneRowMessageListContainer::HandleResourceChange
hgs
parents:
diff changeset
   283
// ----------------------------------------------------
hgs
parents:
diff changeset
   284
//
hgs
parents:
diff changeset
   285
void CMceOneRowMessageListContainer::HandleResourceChange( TInt aType )
hgs
parents:
diff changeset
   286
    {
hgs
parents:
diff changeset
   287
    CCoeControl::HandleResourceChange( aType );
hgs
parents:
diff changeset
   288
    if( aType == KAknsMessageSkinChange )
hgs
parents:
diff changeset
   289
        {
hgs
parents:
diff changeset
   290
        // change skin bitmap
hgs
parents:
diff changeset
   291
        TRAP_IGNORE( iBitmapResolver->SkinChangedL( iTreeListBox ) );
hgs
parents:
diff changeset
   292
        ResetListbox();
hgs
parents:
diff changeset
   293
        TRAP_IGNORE( iListItems->RefreshArrayL() );
hgs
parents:
diff changeset
   294
        }
hgs
parents:
diff changeset
   295
    
hgs
parents:
diff changeset
   296
    }
hgs
parents:
diff changeset
   297
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
// ----------------------------------------------------
hgs
parents:
diff changeset
   300
// CMceOneRowMessageListContainer::HandleTreeListEvent
hgs
parents:
diff changeset
   301
// ----------------------------------------------------
hgs
parents:
diff changeset
   302
//
hgs
parents:
diff changeset
   303
TBool CMceOneRowMessageListContainer::HandleTreeListEvent( CAknTreeList& aList,
hgs
parents:
diff changeset
   304
    TAknTreeItemID /* aItem */, TEvent aEvent )
hgs
parents:
diff changeset
   305
    {
hgs
parents:
diff changeset
   306
    if ( &aList != iTreeListBox )
hgs
parents:
diff changeset
   307
        {
hgs
parents:
diff changeset
   308
        return KErrNone;
hgs
parents:
diff changeset
   309
        }
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
    switch ( aEvent )
hgs
parents:
diff changeset
   312
        {
hgs
parents:
diff changeset
   313
        // One of the nodes in the list is being expanded.
hgs
parents:
diff changeset
   314
        case ENodeExpanded:
hgs
parents:
diff changeset
   315
//            TRAP_IGNORE( AddChildrenL( aItem ) );
hgs
parents:
diff changeset
   316
            ChangeMskCommand( R_MCE_QTN_MSK_COLLAPSE );
hgs
parents:
diff changeset
   317
            break;
hgs
parents:
diff changeset
   318
        // One of the nodes in the list is being collapsed.
hgs
parents:
diff changeset
   319
        case ENodeCollapsed:
hgs
parents:
diff changeset
   320
//            RemoveChildren( aItem );
hgs
parents:
diff changeset
   321
            ChangeMskCommand( R_MCE_QTN_MSK_EXPAND );
hgs
parents:
diff changeset
   322
            break;
hgs
parents:
diff changeset
   323
        // Simple data row or core data row is selected.
hgs
parents:
diff changeset
   324
        case EItemSelected:
hgs
parents:
diff changeset
   325
            TRAP_IGNORE( iOwningView.HandleCommandL(EAknCmdOpen) );
hgs
parents:
diff changeset
   326
            break;
hgs
parents:
diff changeset
   327
hgs
parents:
diff changeset
   328
        // Focused item changes
hgs
parents:
diff changeset
   329
        case EItemFocused:
hgs
parents:
diff changeset
   330
            if ( !iMarkingModeEnabled 
hgs
parents:
diff changeset
   331
                && !iContainerFlags.MceFlag( EMceOneRowFlagOptionsMenuOpen ) )
hgs
parents:
diff changeset
   332
                {
hgs
parents:
diff changeset
   333
                TRAP_IGNORE( iOwningView.SetMSKButtonL() );
hgs
parents:
diff changeset
   334
                }
hgs
parents:
diff changeset
   335
            else if ( iContainerFlags.MceFlag( EMceOneRowFlagOptionsMenuOpen ) )
hgs
parents:
diff changeset
   336
                {
hgs
parents:
diff changeset
   337
                iContainerFlags.ClearMceFlag( EMceOneRowFlagOptionsMenuOpen );
hgs
parents:
diff changeset
   338
                }
hgs
parents:
diff changeset
   339
            break;
hgs
parents:
diff changeset
   340
        // Item is being removed from the list.
hgs
parents:
diff changeset
   341
        case EItemRemoved:
hgs
parents:
diff changeset
   342
            break;
hgs
parents:
diff changeset
   343
        // Hierarchical list has entered in marking mode
hgs
parents:
diff changeset
   344
        case EMarkingModeEnabled:
hgs
parents:
diff changeset
   345
            iMarkingModeEnabled = ETrue;
hgs
parents:
diff changeset
   346
            break;
hgs
parents:
diff changeset
   347
        // hierarchical list exits the marking mode
hgs
parents:
diff changeset
   348
        case EMarkingModeDisabled:
hgs
parents:
diff changeset
   349
            iMarkingModeEnabled = EFalse;
hgs
parents:
diff changeset
   350
            break;
hgs
parents:
diff changeset
   351
        case EItemUnmarked:
hgs
parents:
diff changeset
   352
        case EItemMarked:
hgs
parents:
diff changeset
   353
            if ( !iMarkingModeEnabled )
hgs
parents:
diff changeset
   354
                {
hgs
parents:
diff changeset
   355
                TRAP_IGNORE( iOwningView.SetMSKButtonL() );
hgs
parents:
diff changeset
   356
                }
hgs
parents:
diff changeset
   357
            break;
hgs
parents:
diff changeset
   358
        default:
hgs
parents:
diff changeset
   359
            break;
hgs
parents:
diff changeset
   360
        }
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
    return KErrNone;
hgs
parents:
diff changeset
   363
    }
hgs
parents:
diff changeset
   364
hgs
parents:
diff changeset
   365
hgs
parents:
diff changeset
   366
// ----------------------------------------------------
hgs
parents:
diff changeset
   367
// CMceOneRowMessageListContainer::ResetListbox
hgs
parents:
diff changeset
   368
// ----------------------------------------------------
hgs
parents:
diff changeset
   369
//
hgs
parents:
diff changeset
   370
void CMceOneRowMessageListContainer::ResetListbox()
hgs
parents:
diff changeset
   371
    {
hgs
parents:
diff changeset
   372
    iTreeListBox->RemoveItem( KAknTreeIIDRoot, EFalse );
hgs
parents:
diff changeset
   373
    }
hgs
parents:
diff changeset
   374
hgs
parents:
diff changeset
   375
hgs
parents:
diff changeset
   376
// ----------------------------------------------------
hgs
parents:
diff changeset
   377
// CMceOneRowMessageListContainer::MceListItemArrayChangedL
hgs
parents:
diff changeset
   378
// ----------------------------------------------------
hgs
parents:
diff changeset
   379
//
hgs
parents:
diff changeset
   380
void CMceOneRowMessageListContainer::MceListItemArrayChangedL(
hgs
parents:
diff changeset
   381
    CArrayFixFlat<TInt>& aChangedItems )
hgs
parents:
diff changeset
   382
    {
hgs
parents:
diff changeset
   383
    const TInt count = aChangedItems.Count();
hgs
parents:
diff changeset
   384
    for ( TInt i = 0 ; i < count; i++ )
hgs
parents:
diff changeset
   385
        {
hgs
parents:
diff changeset
   386
        TInt itemIndex = aChangedItems[i];
hgs
parents:
diff changeset
   387
        if ( iListItems->HCItemType(itemIndex) == CMceOneRowListItemArrayLoader::EHListItemSubtitle )
hgs
parents:
diff changeset
   388
            {
hgs
parents:
diff changeset
   389
            TBuf<KMceTextItemSize> subTitle;
hgs
parents:
diff changeset
   390
            TInt itemType = iListItems->GetSubtitleTextL( itemIndex, subTitle );
hgs
parents:
diff changeset
   391
            if ( itemType > EHCListTypeNone )
hgs
parents:
diff changeset
   392
                {
hgs
parents:
diff changeset
   393
                TUint32 flags = CAknSingleColumnStyleTreeList::EPersistent;
hgs
parents:
diff changeset
   394
                if ( !iContainerFlags.MceFlag( EMceOneRowFlagFirstSubtitleOpen ) ) 
hgs
parents:
diff changeset
   395
                    {
hgs
parents:
diff changeset
   396
                    flags |= CAknSingleColumnStyleTreeList::EExpanded;
hgs
parents:
diff changeset
   397
                    iContainerFlags.SetMceFlag( EMceOneRowFlagFirstSubtitleOpen );
hgs
parents:
diff changeset
   398
                    }
hgs
parents:
diff changeset
   399
                else
hgs
parents:
diff changeset
   400
                    {
hgs
parents:
diff changeset
   401
                    flags &= CAknSingleColumnStyleTreeList::EExpanded;
hgs
parents:
diff changeset
   402
                    }
hgs
parents:
diff changeset
   403
                iNodeId = iTreeListBox->AddSubtitleRowL( KAknTreeIIDRoot,
hgs
parents:
diff changeset
   404
                    subTitle, flags, EFalse );
hgs
parents:
diff changeset
   405
                iListItems->SetTreeItemId( itemIndex, iNodeId );
hgs
parents:
diff changeset
   406
                iTreeListBox->SetNonEmpty( iNodeId, ETrue, EFalse );
hgs
parents:
diff changeset
   407
                UpdateSubtitleIconL( iNodeId, EFalse );
hgs
parents:
diff changeset
   408
                }
hgs
parents:
diff changeset
   409
            }
hgs
parents:
diff changeset
   410
        else
hgs
parents:
diff changeset
   411
            {
hgs
parents:
diff changeset
   412
            AddEntryL( itemIndex );
hgs
parents:
diff changeset
   413
            }
hgs
parents:
diff changeset
   414
        }
hgs
parents:
diff changeset
   415
hgs
parents:
diff changeset
   416
    // current item id haven't been set due list is not ready yet
hgs
parents:
diff changeset
   417
    if ( iSelectedItemWaitingIndex )
hgs
parents:
diff changeset
   418
        {
hgs
parents:
diff changeset
   419
        SetCurrentItemIdL( iSelectedItemWaitingIndex );
hgs
parents:
diff changeset
   420
        }
hgs
parents:
diff changeset
   421
    //progressive draw for every 200 entries.
hgs
parents:
diff changeset
   422
    iTreeListBox->DrawNow();
hgs
parents:
diff changeset
   423
    }
hgs
parents:
diff changeset
   424
hgs
parents:
diff changeset
   425
hgs
parents:
diff changeset
   426
// ----------------------------------------------------
hgs
parents:
diff changeset
   427
// CMceOneRowMessageListContainer::GetSubtitleIcon
hgs
parents:
diff changeset
   428
// ----------------------------------------------------
hgs
parents:
diff changeset
   429
//
hgs
parents:
diff changeset
   430
TInt CMceOneRowMessageListContainer::GetSubtitleIcon ( TBool setUnread )
hgs
parents:
diff changeset
   431
    {
hgs
parents:
diff changeset
   432
    TMceBitmapArrayIndexes treeIconId = EMceBitmapIndexUnknown;
hgs
parents:
diff changeset
   433
    TMsvSelectionOrdering sortType = iListItems->SortType();
hgs
parents:
diff changeset
   434
   
hgs
parents:
diff changeset
   435
    switch ( sortType.Sorting() )
hgs
parents:
diff changeset
   436
        {
hgs
parents:
diff changeset
   437
        case EMsvSortByDate:
hgs
parents:
diff changeset
   438
        case EMsvSortByDateReverse:
hgs
parents:
diff changeset
   439
            if ( setUnread )
hgs
parents:
diff changeset
   440
                {
hgs
parents:
diff changeset
   441
                treeIconId = EMceBitmapIndexSubTimeUnread;        
hgs
parents:
diff changeset
   442
                }
hgs
parents:
diff changeset
   443
            else
hgs
parents:
diff changeset
   444
                {
hgs
parents:
diff changeset
   445
                treeIconId = EMceBitmapIndexSubTime;        
hgs
parents:
diff changeset
   446
                }
hgs
parents:
diff changeset
   447
            break;
hgs
parents:
diff changeset
   448
    	case EMsvSortByDetails:
hgs
parents:
diff changeset
   449
	    case EMsvSortByDetailsReverse:
hgs
parents:
diff changeset
   450
            if ( setUnread )
hgs
parents:
diff changeset
   451
                {
hgs
parents:
diff changeset
   452
                treeIconId = EMceBitmapIndexSubSenderUnread;        
hgs
parents:
diff changeset
   453
                }
hgs
parents:
diff changeset
   454
            else
hgs
parents:
diff changeset
   455
                {
hgs
parents:
diff changeset
   456
                treeIconId = EMceBitmapIndexSubSender;        
hgs
parents:
diff changeset
   457
                }
hgs
parents:
diff changeset
   458
	        break;
hgs
parents:
diff changeset
   459
    	case EMsvSortByDescription:
hgs
parents:
diff changeset
   460
	    case EMsvSortByDescriptionReverse:
hgs
parents:
diff changeset
   461
            if ( setUnread )
hgs
parents:
diff changeset
   462
                {
hgs
parents:
diff changeset
   463
                treeIconId = EMceBitmapIndexSubSubjectUnread;        
hgs
parents:
diff changeset
   464
                }
hgs
parents:
diff changeset
   465
            else
hgs
parents:
diff changeset
   466
                {
hgs
parents:
diff changeset
   467
                treeIconId = EMceBitmapIndexSubSubject;        
hgs
parents:
diff changeset
   468
                }
hgs
parents:
diff changeset
   469
            break;
hgs
parents:
diff changeset
   470
        default:
hgs
parents:
diff changeset
   471
            treeIconId = EMceBitmapIndexSubTime;
hgs
parents:
diff changeset
   472
            break;
hgs
parents:
diff changeset
   473
        }    
hgs
parents:
diff changeset
   474
    return iBitmapResolver->TreeIconId( treeIconId );
hgs
parents:
diff changeset
   475
    }
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
hgs
parents:
diff changeset
   478
// ----------------------------------------------------
hgs
parents:
diff changeset
   479
// CMceOneRowMessageListContainer::AddChildrenL
hgs
parents:
diff changeset
   480
// ----------------------------------------------------
hgs
parents:
diff changeset
   481
//
hgs
parents:
diff changeset
   482
void CMceOneRowMessageListContainer::AddChildrenL( TAknTreeItemID aParentId )
hgs
parents:
diff changeset
   483
    {
hgs
parents:
diff changeset
   484
    TInt index = iListItems->ItemIndexTreeId( aParentId );
hgs
parents:
diff changeset
   485
    const TInt count = iListItems->GetSubfolderItemCount( aParentId );
hgs
parents:
diff changeset
   486
hgs
parents:
diff changeset
   487
    for ( TInt i = index ; i <= index + count ; i++ )
hgs
parents:
diff changeset
   488
        {
hgs
parents:
diff changeset
   489
        TBuf<KMceTextItemSize> subTitle;
hgs
parents:
diff changeset
   490
        TInt itemType = iListItems->GetSubtitleTextL( i, subTitle );
hgs
parents:
diff changeset
   491
        if ( iListItems->ParentItemId( i ) == aParentId &&
hgs
parents:
diff changeset
   492
             itemType == 0 )
hgs
parents:
diff changeset
   493
            {
hgs
parents:
diff changeset
   494
            AddEntryL( i );
hgs
parents:
diff changeset
   495
            }
hgs
parents:
diff changeset
   496
        }
hgs
parents:
diff changeset
   497
    }
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
hgs
parents:
diff changeset
   500
// ----------------------------------------------------
hgs
parents:
diff changeset
   501
// CMceOneRowMessageListContainer::AddEntryL
hgs
parents:
diff changeset
   502
// ----------------------------------------------------
hgs
parents:
diff changeset
   503
//
hgs
parents:
diff changeset
   504
void CMceOneRowMessageListContainer::AddEntryL( TInt aEntryIndex )
hgs
parents:
diff changeset
   505
    {
hgs
parents:
diff changeset
   506
    TMsvEntry entry;
hgs
parents:
diff changeset
   507
    User::LeaveIfError( iListItems->GetEntry( aEntryIndex, entry ) );
hgs
parents:
diff changeset
   508
    TInt foundIcon = KErrNotFound;
hgs
parents:
diff changeset
   509
    TUint32 flags;
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
    CFbsBitmap* bitmap = NULL;
hgs
parents:
diff changeset
   512
    CFbsBitmap* bitmapMask = NULL;
hgs
parents:
diff changeset
   513
    foundIcon = iBitmapResolver->GetBitmapL( entry, bitmap, bitmapMask );
hgs
parents:
diff changeset
   514
    if ( foundIcon < 0 )
hgs
parents:
diff changeset
   515
        {
hgs
parents:
diff changeset
   516
        foundIcon = iTreeListBox->AddIconL(
hgs
parents:
diff changeset
   517
                bitmap,
hgs
parents:
diff changeset
   518
                bitmapMask,
hgs
parents:
diff changeset
   519
                EFalse,
hgs
parents:
diff changeset
   520
                EAspectRatioPreserved );
hgs
parents:
diff changeset
   521
        iBitmapResolver->AddTreeIconIdL( bitmap, foundIcon, entry.iMtm );
hgs
parents:
diff changeset
   522
        }
hgs
parents:
diff changeset
   523
hgs
parents:
diff changeset
   524
    TAknTreeItemID parentId = iListItems->ParentItemId( aEntryIndex );
hgs
parents:
diff changeset
   525
hgs
parents:
diff changeset
   526
    TBuf<KMceTextItemSize> bufferC1;
hgs
parents:
diff changeset
   527
    TBuf<KMceTextItemSize> bufferC2;
hgs
parents:
diff changeset
   528
    TBuf<KMceTextItemSize> bufferC3;
hgs
parents:
diff changeset
   529
    iListItems->GetColumnTextL( aEntryIndex, KMceColumn1, bufferC1 );
hgs
parents:
diff changeset
   530
    iListItems->GetColumnTextL( aEntryIndex, KMceColumn2, bufferC2 );
hgs
parents:
diff changeset
   531
    iListItems->GetColumnTextL( aEntryIndex, KMceColumn3, bufferC3 );
hgs
parents:
diff changeset
   532
hgs
parents:
diff changeset
   533
    TAknTreeItemID itemId = 0;
hgs
parents:
diff changeset
   534
hgs
parents:
diff changeset
   535
    if ( IsItemFolder( entry.Id() ))
hgs
parents:
diff changeset
   536
        {
hgs
parents:
diff changeset
   537
        // Set folders not markable
hgs
parents:
diff changeset
   538
        flags = CAknSingleColumnStyleTreeList::EPersistent
hgs
parents:
diff changeset
   539
                | CAknSingleColumnStyleTreeList::EMarkingDisabled;
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
        // Add two column core data row for folders
hgs
parents:
diff changeset
   542
        itemId = iTreeListBox->AddCoreDataRowL(
hgs
parents:
diff changeset
   543
        parentId,
hgs
parents:
diff changeset
   544
        bufferC1,
hgs
parents:
diff changeset
   545
        bufferC3,
hgs
parents:
diff changeset
   546
        flags,
hgs
parents:
diff changeset
   547
        EFalse );
hgs
parents:
diff changeset
   548
        }
hgs
parents:
diff changeset
   549
    else
hgs
parents:
diff changeset
   550
        {
hgs
parents:
diff changeset
   551
        flags = CAknSingleColumnStyleTreeList::EPersistent;
hgs
parents:
diff changeset
   552
hgs
parents:
diff changeset
   553
        // Add three column core data row for entries
hgs
parents:
diff changeset
   554
        itemId = iTreeListBox->AddCoreDataRowL(
hgs
parents:
diff changeset
   555
        parentId,
hgs
parents:
diff changeset
   556
        bufferC1,
hgs
parents:
diff changeset
   557
        bufferC2,
hgs
parents:
diff changeset
   558
        bufferC3, //subTitle,
hgs
parents:
diff changeset
   559
        flags,
hgs
parents:
diff changeset
   560
        EFalse );
hgs
parents:
diff changeset
   561
hgs
parents:
diff changeset
   562
hgs
parents:
diff changeset
   563
        iTreeListBox->EnableThirdColumn( itemId, bufferC3.Length(), EFalse );
hgs
parents:
diff changeset
   564
        }  
hgs
parents:
diff changeset
   565
    
hgs
parents:
diff changeset
   566
    iListItems->SetTreeItemId( aEntryIndex, itemId );
hgs
parents:
diff changeset
   567
    if ( foundIcon >= 0 )
hgs
parents:
diff changeset
   568
        {
hgs
parents:
diff changeset
   569
        iTreeListBox->SetIcon(
hgs
parents:
diff changeset
   570
            itemId,
hgs
parents:
diff changeset
   571
            CAknSingleColumnStyleTreeList::ELeaf,
hgs
parents:
diff changeset
   572
            foundIcon,
hgs
parents:
diff changeset
   573
            EFalse );
hgs
parents:
diff changeset
   574
hgs
parents:
diff changeset
   575
        TBool attachmentIcon = EFalse; 
hgs
parents:
diff changeset
   576
         
hgs
parents:
diff changeset
   577
        if ( entry.Attachment() && entry.iMtm != KSenduiMtmMmsUid 
hgs
parents:
diff changeset
   578
             && IsMailMtmTechnology(entry.iMtm ))
hgs
parents:
diff changeset
   579
            {
hgs
parents:
diff changeset
   580
            iTreeListBox->SetIcon(
hgs
parents:
diff changeset
   581
                itemId,
hgs
parents:
diff changeset
   582
                CAknSingleColumnStyleTreeList::EOptionalIcon1,
hgs
parents:
diff changeset
   583
                iBitmapResolver->TreeIconId( EMceBitmapIndexAttachment ),
hgs
parents:
diff changeset
   584
                EFalse );
hgs
parents:
diff changeset
   585
            iTreeListBox->SetIcon(
hgs
parents:
diff changeset
   586
                itemId,
hgs
parents:
diff changeset
   587
                CAknSingleColumnStyleTreeList::EHighlightedOptionalIcon1,
hgs
parents:
diff changeset
   588
                iBitmapResolver->TreeIconId( EMceBitmapIndexAttachmentFocus ),
hgs
parents:
diff changeset
   589
                EFalse );
hgs
parents:
diff changeset
   590
            attachmentIcon = ETrue;
hgs
parents:
diff changeset
   591
            }
hgs
parents:
diff changeset
   592
hgs
parents:
diff changeset
   593
        if ( entry.iType == KUidMsvMessageEntry )
hgs
parents:
diff changeset
   594
            {
hgs
parents:
diff changeset
   595
            TMsvPriority entryPrio = entry.Priority();
hgs
parents:
diff changeset
   596
            if ( entryPrio != EMsvMediumPriority )
hgs
parents:
diff changeset
   597
                {
hgs
parents:
diff changeset
   598
                TInt prioIcon = 0;
hgs
parents:
diff changeset
   599
                TInt prioIconFocus = 0;
hgs
parents:
diff changeset
   600
                if ( entryPrio == EMsvHighPriority )
hgs
parents:
diff changeset
   601
                    {
hgs
parents:
diff changeset
   602
                    prioIcon = iBitmapResolver->TreeIconId( EMceBitmapIndexPriorityHigh );
hgs
parents:
diff changeset
   603
                    prioIconFocus = iBitmapResolver->TreeIconId( EMceBitmapIndexPriorityHighFocus );
hgs
parents:
diff changeset
   604
                    }
hgs
parents:
diff changeset
   605
                else
hgs
parents:
diff changeset
   606
                    {
hgs
parents:
diff changeset
   607
                    prioIcon = iBitmapResolver->TreeIconId( EMceBitmapIndexPriorityLow );
hgs
parents:
diff changeset
   608
                    prioIconFocus = iBitmapResolver->TreeIconId( EMceBitmapIndexPriorityLowFocus );
hgs
parents:
diff changeset
   609
                    }
hgs
parents:
diff changeset
   610
hgs
parents:
diff changeset
   611
                if ( attachmentIcon )
hgs
parents:
diff changeset
   612
                    {
hgs
parents:
diff changeset
   613
                    iTreeListBox->SetIcon(
hgs
parents:
diff changeset
   614
                        itemId,
hgs
parents:
diff changeset
   615
                        CAknSingleColumnStyleTreeList::EOptionalIcon2,
hgs
parents:
diff changeset
   616
                        prioIcon,
hgs
parents:
diff changeset
   617
                        EFalse );
hgs
parents:
diff changeset
   618
                    iTreeListBox->SetIcon(
hgs
parents:
diff changeset
   619
                        itemId,
hgs
parents:
diff changeset
   620
                        CAknSingleColumnStyleTreeList::EHighlightedOptionalIcon2,
hgs
parents:
diff changeset
   621
                        prioIconFocus,
hgs
parents:
diff changeset
   622
                        EFalse );
hgs
parents:
diff changeset
   623
                    }
hgs
parents:
diff changeset
   624
                else
hgs
parents:
diff changeset
   625
                    {
hgs
parents:
diff changeset
   626
                    iTreeListBox->SetIcon(
hgs
parents:
diff changeset
   627
                        itemId,
hgs
parents:
diff changeset
   628
                        CAknSingleColumnStyleTreeList::EOptionalIcon1,
hgs
parents:
diff changeset
   629
                        prioIcon,
hgs
parents:
diff changeset
   630
                        EFalse );
hgs
parents:
diff changeset
   631
                    iTreeListBox->SetIcon(
hgs
parents:
diff changeset
   632
                        itemId,
hgs
parents:
diff changeset
   633
                        CAknSingleColumnStyleTreeList::EHighlightedOptionalIcon1,
hgs
parents:
diff changeset
   634
                        prioIconFocus,
hgs
parents:
diff changeset
   635
                        EFalse );
hgs
parents:
diff changeset
   636
                    }
hgs
parents:
diff changeset
   637
                }
hgs
parents:
diff changeset
   638
            }
hgs
parents:
diff changeset
   639
        }
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
    // If unread message update subtitle icon
hgs
parents:
diff changeset
   642
    if ( iTreeListBox->Parent( itemId ) > KAknTreeIIDRoot &&  entry.Unread() )
hgs
parents:
diff changeset
   643
        {
hgs
parents:
diff changeset
   644
        UpdateSubtitleIconL( parentId, ETrue );
hgs
parents:
diff changeset
   645
        }
hgs
parents:
diff changeset
   646
    iTreeListBox->SetEmphasis( itemId, entry.Unread(), EFalse );
hgs
parents:
diff changeset
   647
    }
hgs
parents:
diff changeset
   648
hgs
parents:
diff changeset
   649
hgs
parents:
diff changeset
   650
// ----------------------------------------------------
hgs
parents:
diff changeset
   651
// CMceOneRowMessageListContainer::RemoveChildren
hgs
parents:
diff changeset
   652
// ----------------------------------------------------
hgs
parents:
diff changeset
   653
//
hgs
parents:
diff changeset
   654
void CMceOneRowMessageListContainer::RemoveChildren( TAknTreeItemID aParentId )
hgs
parents:
diff changeset
   655
    {
hgs
parents:
diff changeset
   656
    const TInt count = iTreeListBox->ChildCount( aParentId );
hgs
parents:
diff changeset
   657
hgs
parents:
diff changeset
   658
    for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
   659
        {
hgs
parents:
diff changeset
   660
        TAknTreeItemID removedItem = iTreeListBox->Child( aParentId, 0);
hgs
parents:
diff changeset
   661
        iTreeListBox->RemoveItem( removedItem, EFalse );
hgs
parents:
diff changeset
   662
        }
hgs
parents:
diff changeset
   663
    }
hgs
parents:
diff changeset
   664
hgs
parents:
diff changeset
   665
hgs
parents:
diff changeset
   666
// ----------------------------------------------------
hgs
parents:
diff changeset
   667
// CMceOneRowMessageListContainer::MopSupplyObject
hgs
parents:
diff changeset
   668
// ----------------------------------------------------
hgs
parents:
diff changeset
   669
//
hgs
parents:
diff changeset
   670
TTypeUid::Ptr CMceOneRowMessageListContainer::MopSupplyObject( TTypeUid aId )
hgs
parents:
diff changeset
   671
    {
hgs
parents:
diff changeset
   672
    if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext )
hgs
parents:
diff changeset
   673
        {
hgs
parents:
diff changeset
   674
        return MAknsControlContext::SupplyMopObject( aId, iBgContext );
hgs
parents:
diff changeset
   675
        }
hgs
parents:
diff changeset
   676
    return CCoeControl::MopSupplyObject( aId );
hgs
parents:
diff changeset
   677
    }
hgs
parents:
diff changeset
   678
hgs
parents:
diff changeset
   679
hgs
parents:
diff changeset
   680
// ----------------------------------------------------
hgs
parents:
diff changeset
   681
// CMceMainViewListContainer::ItemIndex
hgs
parents:
diff changeset
   682
// ----------------------------------------------------
hgs
parents:
diff changeset
   683
TInt CMceOneRowMessageListContainer::ItemIndex( TMsvId aId ) const
hgs
parents:
diff changeset
   684
    {
hgs
parents:
diff changeset
   685
    return iListItems->ItemIndex( aId );
hgs
parents:
diff changeset
   686
    }
hgs
parents:
diff changeset
   687
hgs
parents:
diff changeset
   688
hgs
parents:
diff changeset
   689
// ----------------------------------------------------
hgs
parents:
diff changeset
   690
// CMceOneRowMessageListContainer::Draw
hgs
parents:
diff changeset
   691
// ----------------------------------------------------
hgs
parents:
diff changeset
   692
//
hgs
parents:
diff changeset
   693
void CMceOneRowMessageListContainer::Draw( const TRect& /*aRect*/ ) const
hgs
parents:
diff changeset
   694
    {
hgs
parents:
diff changeset
   695
    // Get the standard graphics context.
hgs
parents:
diff changeset
   696
    CWindowGc& gc = SystemGc();
hgs
parents:
diff changeset
   697
hgs
parents:
diff changeset
   698
    // Gets the control's extent.
hgs
parents:
diff changeset
   699
    TRect rect = Rect();
hgs
parents:
diff changeset
   700
hgs
parents:
diff changeset
   701
    // Clears the screen.
hgs
parents:
diff changeset
   702
    gc.Clear( rect );
hgs
parents:
diff changeset
   703
    }
hgs
parents:
diff changeset
   704
hgs
parents:
diff changeset
   705
hgs
parents:
diff changeset
   706
// ----------------------------------------------------
hgs
parents:
diff changeset
   707
// CMceOneRowMessageListContainer::Count
hgs
parents:
diff changeset
   708
// ----------------------------------------------------
hgs
parents:
diff changeset
   709
//
hgs
parents:
diff changeset
   710
TInt CMceOneRowMessageListContainer::Count() const
hgs
parents:
diff changeset
   711
    {
hgs
parents:
diff changeset
   712
    return iListItems->MdcaCount();
hgs
parents:
diff changeset
   713
    }
hgs
parents:
diff changeset
   714
hgs
parents:
diff changeset
   715
hgs
parents:
diff changeset
   716
// ----------------------------------------------------
hgs
parents:
diff changeset
   717
// CMceOneRowMessageListContainer::MessageCount
hgs
parents:
diff changeset
   718
// ----------------------------------------------------
hgs
parents:
diff changeset
   719
//
hgs
parents:
diff changeset
   720
TInt CMceOneRowMessageListContainer::MessageCount() const
hgs
parents:
diff changeset
   721
    {
hgs
parents:
diff changeset
   722
    return iListItems->MessageCount();
hgs
parents:
diff changeset
   723
    }
hgs
parents:
diff changeset
   724
hgs
parents:
diff changeset
   725
hgs
parents:
diff changeset
   726
// ----------------------------------------------------
hgs
parents:
diff changeset
   727
// CMceOneRowMessageListContainer::FolderCount
hgs
parents:
diff changeset
   728
// ----------------------------------------------------
hgs
parents:
diff changeset
   729
//
hgs
parents:
diff changeset
   730
TInt CMceOneRowMessageListContainer::FolderCount() const
hgs
parents:
diff changeset
   731
    {
hgs
parents:
diff changeset
   732
    return iListItems->FolderCount();
hgs
parents:
diff changeset
   733
    }
hgs
parents:
diff changeset
   734
hgs
parents:
diff changeset
   735
hgs
parents:
diff changeset
   736
// ----------------------------------------------------
hgs
parents:
diff changeset
   737
// CMceOneRowMessageListContainer::CurrentFolderId
hgs
parents:
diff changeset
   738
// ----------------------------------------------------
hgs
parents:
diff changeset
   739
//
hgs
parents:
diff changeset
   740
TMsvId CMceOneRowMessageListContainer::CurrentFolderId() const
hgs
parents:
diff changeset
   741
    {
hgs
parents:
diff changeset
   742
    TMsvId folderId = 0;
hgs
parents:
diff changeset
   743
    if ( iListItems )
hgs
parents:
diff changeset
   744
        {
hgs
parents:
diff changeset
   745
        folderId = iListItems->FolderId();
hgs
parents:
diff changeset
   746
        }
hgs
parents:
diff changeset
   747
    return folderId;
hgs
parents:
diff changeset
   748
    }
hgs
parents:
diff changeset
   749
hgs
parents:
diff changeset
   750
hgs
parents:
diff changeset
   751
// ----------------------------------------------------
hgs
parents:
diff changeset
   752
// CMceOneRowMessageListContainer::SetCurrentItemIdL
hgs
parents:
diff changeset
   753
// ----------------------------------------------------
hgs
parents:
diff changeset
   754
TBool CMceOneRowMessageListContainer::SetCurrentItemIdL( TMsvId aEntryId )
hgs
parents:
diff changeset
   755
    {
hgs
parents:
diff changeset
   756
    const TInt selectedIndex = ItemIndex( aEntryId );
hgs
parents:
diff changeset
   757
hgs
parents:
diff changeset
   758
    if ( selectedIndex != KErrNotFound )
hgs
parents:
diff changeset
   759
        {
hgs
parents:
diff changeset
   760
        TAknTreeItemID selectedTreeID = iListItems->TreeItemId( selectedIndex );
hgs
parents:
diff changeset
   761
        if ( selectedTreeID )
hgs
parents:
diff changeset
   762
            {
hgs
parents:
diff changeset
   763
            TAknTreeItemID parentId = iListItems->ParentItemId( selectedIndex );
hgs
parents:
diff changeset
   764
            if ( !iTreeListBox->IsExpanded( parentId ) )
hgs
parents:
diff changeset
   765
                {
hgs
parents:
diff changeset
   766
                iTreeListBox->ExpandNode( parentId, ETrue );
hgs
parents:
diff changeset
   767
                }
hgs
parents:
diff changeset
   768
            iTreeListBox->SetFocusedItem( selectedTreeID );
hgs
parents:
diff changeset
   769
            }
hgs
parents:
diff changeset
   770
        iSelectedItemWaitingIndex = NULL;
hgs
parents:
diff changeset
   771
        }
hgs
parents:
diff changeset
   772
    // Current entry not yet added to the list 
hgs
parents:
diff changeset
   773
    else if ( selectedIndex == KErrNotFound && aEntryId > 0 )
hgs
parents:
diff changeset
   774
        {
hgs
parents:
diff changeset
   775
        iSelectedItemWaitingIndex = aEntryId;
hgs
parents:
diff changeset
   776
        }
hgs
parents:
diff changeset
   777
hgs
parents:
diff changeset
   778
    return (selectedIndex != KErrNotFound);
hgs
parents:
diff changeset
   779
    }
hgs
parents:
diff changeset
   780
hgs
parents:
diff changeset
   781
hgs
parents:
diff changeset
   782
// ----------------------------------------------------
hgs
parents:
diff changeset
   783
// CMceOneRowMessageListContainer::RefreshListbox
hgs
parents:
diff changeset
   784
// ----------------------------------------------------
hgs
parents:
diff changeset
   785
//
hgs
parents:
diff changeset
   786
void CMceOneRowMessageListContainer::RefreshListbox()
hgs
parents:
diff changeset
   787
    {
hgs
parents:
diff changeset
   788
    iTreeListBox->DrawDeferred();
hgs
parents:
diff changeset
   789
    }
hgs
parents:
diff changeset
   790
hgs
parents:
diff changeset
   791
hgs
parents:
diff changeset
   792
// ----------------------------------------------------
hgs
parents:
diff changeset
   793
// CMceOneRowMessageListContainer::ItemCountChangedL
hgs
parents:
diff changeset
   794
// ----------------------------------------------------
hgs
parents:
diff changeset
   795
//
hgs
parents:
diff changeset
   796
void CMceOneRowMessageListContainer::ItemCountChangedL( TBool /* aItemsAdded */,
hgs
parents:
diff changeset
   797
        CArrayFix<TInt>* /* aAddedIndexes */ )
hgs
parents:
diff changeset
   798
    {
hgs
parents:
diff changeset
   799
    ResetListbox();
hgs
parents:
diff changeset
   800
    if( iOwningView.MarkingMode() && iListItems->MessageCount() <= 0 )
hgs
parents:
diff changeset
   801
        {
hgs
parents:
diff changeset
   802
        SetMarkingModeOff();
hgs
parents:
diff changeset
   803
        }
hgs
parents:
diff changeset
   804
    }
hgs
parents:
diff changeset
   805
hgs
parents:
diff changeset
   806
hgs
parents:
diff changeset
   807
// ----------------------------------------------------
hgs
parents:
diff changeset
   808
// CMceOneRowMessageListContainer::FolderEntry
hgs
parents:
diff changeset
   809
// ----------------------------------------------------
hgs
parents:
diff changeset
   810
//
hgs
parents:
diff changeset
   811
const TMsvEntry& CMceOneRowMessageListContainer::FolderEntry() const
hgs
parents:
diff changeset
   812
    {
hgs
parents:
diff changeset
   813
    return iListItems->FolderEntry();
hgs
parents:
diff changeset
   814
    }
hgs
parents:
diff changeset
   815
hgs
parents:
diff changeset
   816
hgs
parents:
diff changeset
   817
// ----------------------------------------------------
hgs
parents:
diff changeset
   818
// CMceOneRowMessageListContainer::CurrentItemId
hgs
parents:
diff changeset
   819
// ----------------------------------------------------
hgs
parents:
diff changeset
   820
//
hgs
parents:
diff changeset
   821
TMsvId CMceOneRowMessageListContainer::CurrentItemId() const
hgs
parents:
diff changeset
   822
    {
hgs
parents:
diff changeset
   823
    return iListItems->MsvItemId( iTreeListBox->FocusedItem() );
hgs
parents:
diff changeset
   824
    }
hgs
parents:
diff changeset
   825
hgs
parents:
diff changeset
   826
hgs
parents:
diff changeset
   827
// ----------------------------------------------------
hgs
parents:
diff changeset
   828
// CMceOneRowMessageListContainer::CurrentItemSelectionL
hgs
parents:
diff changeset
   829
// ----------------------------------------------------
hgs
parents:
diff changeset
   830
//
hgs
parents:
diff changeset
   831
CMsvEntrySelection* CMceOneRowMessageListContainer::CurrentItemSelectionL()
hgs
parents:
diff changeset
   832
    {
hgs
parents:
diff changeset
   833
    return iSelectedEntries->CopyL();
hgs
parents:
diff changeset
   834
    }
hgs
parents:
diff changeset
   835
hgs
parents:
diff changeset
   836
hgs
parents:
diff changeset
   837
// ----------------------------------------------------
hgs
parents:
diff changeset
   838
// CMceOneRowMessageListContainer::CurrentItemSelectionRefreshL
hgs
parents:
diff changeset
   839
// ----------------------------------------------------
hgs
parents:
diff changeset
   840
//
hgs
parents:
diff changeset
   841
CMsvEntrySelection* CMceOneRowMessageListContainer::CurrentItemSelectionRefreshL()
hgs
parents:
diff changeset
   842
    {
hgs
parents:
diff changeset
   843
    MarkItemSelectionL();
hgs
parents:
diff changeset
   844
    return CurrentItemSelectionL();
hgs
parents:
diff changeset
   845
    }
hgs
parents:
diff changeset
   846
hgs
parents:
diff changeset
   847
hgs
parents:
diff changeset
   848
// ----------------------------------------------------
hgs
parents:
diff changeset
   849
// CMceOneRowMessageListContainer::CurrentItemSelectionCount
hgs
parents:
diff changeset
   850
// ----------------------------------------------------
hgs
parents:
diff changeset
   851
//
hgs
parents:
diff changeset
   852
TInt CMceOneRowMessageListContainer::CurrentItemSelectionCount() const
hgs
parents:
diff changeset
   853
    {
hgs
parents:
diff changeset
   854
    if ( iListItems->MdcaCount() == 0 )
hgs
parents:
diff changeset
   855
        {
hgs
parents:
diff changeset
   856
        return 0;
hgs
parents:
diff changeset
   857
        }
hgs
parents:
diff changeset
   858
    TInt markedCount = 0;
hgs
parents:
diff changeset
   859
    TRAP_IGNORE( markedCount = GetMarkedItemsCountL() );
hgs
parents:
diff changeset
   860
    return Max( 1, markedCount );
hgs
parents:
diff changeset
   861
    }
hgs
parents:
diff changeset
   862
hgs
parents:
diff changeset
   863
hgs
parents:
diff changeset
   864
// ----------------------------------------------------
hgs
parents:
diff changeset
   865
// CMceOneRowMessageListContainer::SelectionCount
hgs
parents:
diff changeset
   866
// ----------------------------------------------------
hgs
parents:
diff changeset
   867
//
hgs
parents:
diff changeset
   868
TInt CMceOneRowMessageListContainer::SelectionCount() const
hgs
parents:
diff changeset
   869
    {
hgs
parents:
diff changeset
   870
    TInt markedCount = 0;
hgs
parents:
diff changeset
   871
    TRAP_IGNORE( markedCount = GetMarkedItemsCountL() );
hgs
parents:
diff changeset
   872
    return markedCount;
hgs
parents:
diff changeset
   873
    }
hgs
parents:
diff changeset
   874
hgs
parents:
diff changeset
   875
hgs
parents:
diff changeset
   876
// ----------------------------------------------------
hgs
parents:
diff changeset
   877
// CMceOneRowMessageListContainer::ClearSelection
hgs
parents:
diff changeset
   878
// ----------------------------------------------------
hgs
parents:
diff changeset
   879
//
hgs
parents:
diff changeset
   880
void CMceOneRowMessageListContainer::ClearSelection()
hgs
parents:
diff changeset
   881
    {
hgs
parents:
diff changeset
   882
    if ( iTreeListBox )
hgs
parents:
diff changeset
   883
        {
hgs
parents:
diff changeset
   884
        iTreeListBox->SetMarked( KAknTreeIIDRoot, EFalse, ETrue );
hgs
parents:
diff changeset
   885
        iListItems->SetItemMarked( KAknTreeIIDRoot, EFalse);
hgs
parents:
diff changeset
   886
        }
hgs
parents:
diff changeset
   887
    }
hgs
parents:
diff changeset
   888
hgs
parents:
diff changeset
   889
hgs
parents:
diff changeset
   890
// ----------------------------------------------------
hgs
parents:
diff changeset
   891
// CMceOneRowMessageListContainer::MarkItemSelectionL
hgs
parents:
diff changeset
   892
// ----------------------------------------------------
hgs
parents:
diff changeset
   893
//
hgs
parents:
diff changeset
   894
void CMceOneRowMessageListContainer::MarkItemSelectionL()
hgs
parents:
diff changeset
   895
    {
hgs
parents:
diff changeset
   896
    RArray<TAknTreeItemID> selection;
hgs
parents:
diff changeset
   897
    CleanupClosePushL( selection );
hgs
parents:
diff changeset
   898
    iTreeListBox->GetMarkedItemsL( selection );
hgs
parents:
diff changeset
   899
hgs
parents:
diff changeset
   900
    TInt count( selection.Count() );
hgs
parents:
diff changeset
   901
    iSelectedEntries->Reset();
hgs
parents:
diff changeset
   902
    // If subtitle is only marked item and focused item is different then add focused item to selection
hgs
parents:
diff changeset
   903
    if ( count == 0 || ( count == 1 && iTreeListBox->IsNode( selection[0] ) ) )
hgs
parents:
diff changeset
   904
hgs
parents:
diff changeset
   905
        {
hgs
parents:
diff changeset
   906
        TMsvId id = CurrentItemId();
hgs
parents:
diff changeset
   907
        TAknTreeItemID focused = iTreeListBox->FocusedItem();
hgs
parents:
diff changeset
   908
        if ( id != KErrNotFound )
hgs
parents:
diff changeset
   909
            {
hgs
parents:
diff changeset
   910
            // nothing in selection so add item under "cursor"
hgs
parents:
diff changeset
   911
            iSelectedEntries->AppendL( id );
hgs
parents:
diff changeset
   912
            }
hgs
parents:
diff changeset
   913
        else if ( focused > KAknTreeIIDNone && iTreeListBox->IsNode( focused ) ) // Focused item is subtitle
hgs
parents:
diff changeset
   914
            {
hgs
parents:
diff changeset
   915
            TInt index = iListItems->ItemIndexTreeId( focused );
hgs
parents:
diff changeset
   916
            const TInt childCount = iListItems->GetSubfolderItemCount( focused );
hgs
parents:
diff changeset
   917
            // Add all items under subtitle
hgs
parents:
diff changeset
   918
            for (TInt loop = index + 1 ; loop <= childCount + index ; loop++ )
hgs
parents:
diff changeset
   919
                {
hgs
parents:
diff changeset
   920
                id = iListItems->MsvItemId( iListItems->TreeItemId( loop ) );
hgs
parents:
diff changeset
   921
                if ( id != KErrNotFound )
hgs
parents:
diff changeset
   922
                    {
hgs
parents:
diff changeset
   923
                    iSelectedEntries->AppendL( id );
hgs
parents:
diff changeset
   924
                    }
hgs
parents:
diff changeset
   925
                }
hgs
parents:
diff changeset
   926
            }
hgs
parents:
diff changeset
   927
        }
hgs
parents:
diff changeset
   928
     else if ( count != 0 )
hgs
parents:
diff changeset
   929
        {
hgs
parents:
diff changeset
   930
        for (TInt loop=0; loop < count; loop++ )
hgs
parents:
diff changeset
   931
            {
hgs
parents:
diff changeset
   932
            TMsvId id = iListItems->MsvItemId( selection[ loop ] );
hgs
parents:
diff changeset
   933
            if ( id != KErrNotFound )
hgs
parents:
diff changeset
   934
                {
hgs
parents:
diff changeset
   935
                iSelectedEntries->AppendL( id );
hgs
parents:
diff changeset
   936
                }
hgs
parents:
diff changeset
   937
            }
hgs
parents:
diff changeset
   938
        }        
hgs
parents:
diff changeset
   939
        
hgs
parents:
diff changeset
   940
    CleanupStack::PopAndDestroy( &selection );
hgs
parents:
diff changeset
   941
    }
hgs
parents:
diff changeset
   942
hgs
parents:
diff changeset
   943
hgs
parents:
diff changeset
   944
// ----------------------------------------------------
hgs
parents:
diff changeset
   945
// CMceOneRowMessageListContainer::SaveMarkingL
hgs
parents:
diff changeset
   946
// ----------------------------------------------------
hgs
parents:
diff changeset
   947
//
hgs
parents:
diff changeset
   948
void CMceOneRowMessageListContainer::SaveMarkingL()
hgs
parents:
diff changeset
   949
    {
hgs
parents:
diff changeset
   950
    RArray<TAknTreeItemID> selection;
hgs
parents:
diff changeset
   951
    CleanupClosePushL( selection );
hgs
parents:
diff changeset
   952
    iTreeListBox->GetMarkedItemsL( selection );
hgs
parents:
diff changeset
   953
    TInt count( selection.Count() );
hgs
parents:
diff changeset
   954
hgs
parents:
diff changeset
   955
    if ( count > 0 )
hgs
parents:
diff changeset
   956
        {
hgs
parents:
diff changeset
   957
        iListItems->SaveMarkingL( selection );        
hgs
parents:
diff changeset
   958
        }
hgs
parents:
diff changeset
   959
    CleanupStack::PopAndDestroy( &selection );
hgs
parents:
diff changeset
   960
    }
hgs
parents:
diff changeset
   961
hgs
parents:
diff changeset
   962
hgs
parents:
diff changeset
   963
// ----------------------------------------------------
hgs
parents:
diff changeset
   964
// CMceOneRowMessageListContainer::ResetCurrentItemL
hgs
parents:
diff changeset
   965
// ----------------------------------------------------
hgs
parents:
diff changeset
   966
//
hgs
parents:
diff changeset
   967
void CMceOneRowMessageListContainer::ResetCurrentItemL()
hgs
parents:
diff changeset
   968
    {
hgs
parents:
diff changeset
   969
    iSelectedItemWaitingIndex = NULL;
hgs
parents:
diff changeset
   970
    }
hgs
parents:
diff changeset
   971
hgs
parents:
diff changeset
   972
hgs
parents:
diff changeset
   973
// ----------------------------------------------------
hgs
parents:
diff changeset
   974
// CMceOneRowMessageListContainer::FindEntry
hgs
parents:
diff changeset
   975
// ----------------------------------------------------
hgs
parents:
diff changeset
   976
//
hgs
parents:
diff changeset
   977
TMsvId CMceOneRowMessageListContainer::FindEntry( const TDesC& aMatchString ) const
hgs
parents:
diff changeset
   978
    {
hgs
parents:
diff changeset
   979
hgs
parents:
diff changeset
   980
    TMsvId foundEntry = KErrNotFound;
hgs
parents:
diff changeset
   981
    TInt index = iListItems->FindEntryIndex( aMatchString );
hgs
parents:
diff changeset
   982
    if ( index >= 0 )
hgs
parents:
diff changeset
   983
        {
hgs
parents:
diff changeset
   984
        foundEntry = iListItems->ItemId( index );
hgs
parents:
diff changeset
   985
        }
hgs
parents:
diff changeset
   986
    return foundEntry;
hgs
parents:
diff changeset
   987
    }
hgs
parents:
diff changeset
   988
hgs
parents:
diff changeset
   989
hgs
parents:
diff changeset
   990
// ----------------------------------------------------
hgs
parents:
diff changeset
   991
// CMceOneRowMessageListContainer::FindFirstUnreadMessageL
hgs
parents:
diff changeset
   992
// ----------------------------------------------------
hgs
parents:
diff changeset
   993
//
hgs
parents:
diff changeset
   994
TBool CMceOneRowMessageListContainer::FindFirstUnreadMessageL( TMsvId& aEntryId ) const
hgs
parents:
diff changeset
   995
    {
hgs
parents:
diff changeset
   996
    return iListItems->FindFirstUnreadMessageL( aEntryId );
hgs
parents:
diff changeset
   997
    }
hgs
parents:
diff changeset
   998
hgs
parents:
diff changeset
   999
hgs
parents:
diff changeset
  1000
// ----------------------------------------------------
hgs
parents:
diff changeset
  1001
// CMceOneRowMessageListContainer::AddCurrentItemToSelectionL
hgs
parents:
diff changeset
  1002
// ----------------------------------------------------
hgs
parents:
diff changeset
  1003
//
hgs
parents:
diff changeset
  1004
void CMceOneRowMessageListContainer::AddCurrentItemToSelectionL()
hgs
parents:
diff changeset
  1005
    {
hgs
parents:
diff changeset
  1006
    TAknTreeItemID focused = iTreeListBox->FocusedItem();
hgs
parents:
diff changeset
  1007
hgs
parents:
diff changeset
  1008
    if ( iTreeListBox && focused != KAknTreeIIDNone )
hgs
parents:
diff changeset
  1009
        {
hgs
parents:
diff changeset
  1010
        iTreeListBox->SetMarked( focused, ETrue, ETrue );
hgs
parents:
diff changeset
  1011
        iListItems->SetItemMarked( focused, ETrue);
hgs
parents:
diff changeset
  1012
        }
hgs
parents:
diff changeset
  1013
    }
hgs
parents:
diff changeset
  1014
hgs
parents:
diff changeset
  1015
hgs
parents:
diff changeset
  1016
// ----------------------------------------------------
hgs
parents:
diff changeset
  1017
// CMceOneRowMessageListContainer::RemoveCurrentItemFromSelection
hgs
parents:
diff changeset
  1018
// ----------------------------------------------------
hgs
parents:
diff changeset
  1019
//
hgs
parents:
diff changeset
  1020
void CMceOneRowMessageListContainer::RemoveCurrentItemFromSelection()
hgs
parents:
diff changeset
  1021
    {
hgs
parents:
diff changeset
  1022
    TAknTreeItemID focused = iTreeListBox->FocusedItem();
hgs
parents:
diff changeset
  1023
    if ( iTreeListBox && focused != KAknTreeIIDNone )
hgs
parents:
diff changeset
  1024
        {
hgs
parents:
diff changeset
  1025
        iTreeListBox->SetMarked( iTreeListBox->FocusedItem(),
hgs
parents:
diff changeset
  1026
            EFalse, ETrue );
hgs
parents:
diff changeset
  1027
        iListItems->SetItemMarked( focused, EFalse );
hgs
parents:
diff changeset
  1028
        }
hgs
parents:
diff changeset
  1029
    }
hgs
parents:
diff changeset
  1030
hgs
parents:
diff changeset
  1031
hgs
parents:
diff changeset
  1032
// ----------------------------------------------------
hgs
parents:
diff changeset
  1033
// CMceOneRowMessageListContainer::RefreshSelectionIndexesL
hgs
parents:
diff changeset
  1034
// ----------------------------------------------------
hgs
parents:
diff changeset
  1035
//
hgs
parents:
diff changeset
  1036
void CMceOneRowMessageListContainer::RefreshSelectionIndexesL( TBool aForceUpdate )
hgs
parents:
diff changeset
  1037
    {
hgs
parents:
diff changeset
  1038
    RArray<TInt> selection;
hgs
parents:
diff changeset
  1039
    CleanupClosePushL( selection );
hgs
parents:
diff changeset
  1040
    iTreeListBox->GetMarkedItemsL( selection );
hgs
parents:
diff changeset
  1041
    TInt count( selection.Count() );
hgs
parents:
diff changeset
  1042
    if ( count > 0 || aForceUpdate )
hgs
parents:
diff changeset
  1043
        {
hgs
parents:
diff changeset
  1044
        CArrayFixFlat<TInt>* newSelection = new ( ELeave )
hgs
parents:
diff changeset
  1045
            CArrayFixFlat<TInt>( KMceListContainerGranuality );
hgs
parents:
diff changeset
  1046
        CleanupStack::PushL( newSelection );
hgs
parents:
diff changeset
  1047
        const TInt count = iSelectedEntries->Count();
hgs
parents:
diff changeset
  1048
        for ( TInt loop = count; loop >0; loop--)
hgs
parents:
diff changeset
  1049
            {
hgs
parents:
diff changeset
  1050
            TInt index = ItemIndex( (*iSelectedEntries)[loop-1] );
hgs
parents:
diff changeset
  1051
            if ( index > KErrNotFound )
hgs
parents:
diff changeset
  1052
                {
hgs
parents:
diff changeset
  1053
                newSelection->AppendL( index );
hgs
parents:
diff changeset
  1054
                }
hgs
parents:
diff changeset
  1055
            else
hgs
parents:
diff changeset
  1056
                {
hgs
parents:
diff changeset
  1057
                iSelectedEntries->Delete( loop-1 );
hgs
parents:
diff changeset
  1058
                }
hgs
parents:
diff changeset
  1059
            }
hgs
parents:
diff changeset
  1060
        CleanupStack::PopAndDestroy( newSelection );
hgs
parents:
diff changeset
  1061
        }
hgs
parents:
diff changeset
  1062
    CleanupStack::PopAndDestroy( &selection );
hgs
parents:
diff changeset
  1063
    }
hgs
parents:
diff changeset
  1064
hgs
parents:
diff changeset
  1065
hgs
parents:
diff changeset
  1066
// ----------------------------------------------------
hgs
parents:
diff changeset
  1067
// CMceOneRowMessageListContainer::AddAllToSelectionL
hgs
parents:
diff changeset
  1068
// ----------------------------------------------------
hgs
parents:
diff changeset
  1069
//
hgs
parents:
diff changeset
  1070
void CMceOneRowMessageListContainer::AddAllToSelectionL()
hgs
parents:
diff changeset
  1071
    {
hgs
parents:
diff changeset
  1072
    if ( iTreeListBox )
hgs
parents:
diff changeset
  1073
        {
hgs
parents:
diff changeset
  1074
        // The marking can be removed from every list item by specifying
hgs
parents:
diff changeset
  1075
        // the tree root as the unmarked item.
hgs
parents:
diff changeset
  1076
        iTreeListBox->SetMarked( KAknTreeIIDRoot, ETrue, ETrue );
hgs
parents:
diff changeset
  1077
        }
hgs
parents:
diff changeset
  1078
    }
hgs
parents:
diff changeset
  1079
hgs
parents:
diff changeset
  1080
hgs
parents:
diff changeset
  1081
// ----------------------------------------------------
hgs
parents:
diff changeset
  1082
// CMceOneRowMessageListContainer::MarkAllReadMessagesL
hgs
parents:
diff changeset
  1083
// ----------------------------------------------------
hgs
parents:
diff changeset
  1084
//
hgs
parents:
diff changeset
  1085
 void CMceOneRowMessageListContainer::MarkAllReadMessagesL()
hgs
parents:
diff changeset
  1086
    {
hgs
parents:
diff changeset
  1087
    if ( iTreeListBox )
hgs
parents:
diff changeset
  1088
        {
hgs
parents:
diff changeset
  1089
        // do not mark folders.
hgs
parents:
diff changeset
  1090
        const TInt count = iListItems->MdcaCount();
hgs
parents:
diff changeset
  1091
        for (TInt i=0; i<count;i++)
hgs
parents:
diff changeset
  1092
            {
hgs
parents:
diff changeset
  1093
            TMsvEntry entry;
hgs
parents:
diff changeset
  1094
            if ( iListItems->GetEntry( i, entry ) == KErrNone &&
hgs
parents:
diff changeset
  1095
                 entry.iType == KUidMsvMessageEntry &&
hgs
parents:
diff changeset
  1096
                 !entry.Unread() )
hgs
parents:
diff changeset
  1097
                {
hgs
parents:
diff changeset
  1098
                TAknTreeItemID treeItemId = iListItems->TreeItemId( i );
hgs
parents:
diff changeset
  1099
                iTreeListBox->SetMarked( treeItemId, ETrue, EFalse );
hgs
parents:
diff changeset
  1100
                }
hgs
parents:
diff changeset
  1101
            }
hgs
parents:
diff changeset
  1102
        iTreeListBox->DrawNow();
hgs
parents:
diff changeset
  1103
        }
hgs
parents:
diff changeset
  1104
    }
hgs
parents:
diff changeset
  1105
hgs
parents:
diff changeset
  1106
hgs
parents:
diff changeset
  1107
// ----------------------------------------------------
hgs
parents:
diff changeset
  1108
// CMceOneRowMessageListContainer::IsItemSelected
hgs
parents:
diff changeset
  1109
// ----------------------------------------------------
hgs
parents:
diff changeset
  1110
//
hgs
parents:
diff changeset
  1111
TBool CMceOneRowMessageListContainer::IsItemSelected( TMsvId aItemId )
hgs
parents:
diff changeset
  1112
    {
hgs
parents:
diff changeset
  1113
    if ( aItemId > 0 )
hgs
parents:
diff changeset
  1114
        {
hgs
parents:
diff changeset
  1115
        TInt itemIndex = ItemIndex( aItemId );
hgs
parents:
diff changeset
  1116
        TAknTreeItemID treeIndex = iListItems->TreeItemId( itemIndex );
hgs
parents:
diff changeset
  1117
        return ( iTreeListBox->IsMarked( treeIndex ) );
hgs
parents:
diff changeset
  1118
        }
hgs
parents:
diff changeset
  1119
    else // Node selected
hgs
parents:
diff changeset
  1120
        {
hgs
parents:
diff changeset
  1121
        TAknTreeItemID treeIndex = iTreeListBox->FocusedItem();
hgs
parents:
diff changeset
  1122
        return ( iTreeListBox->IsMarked( treeIndex ) );
hgs
parents:
diff changeset
  1123
        }
hgs
parents:
diff changeset
  1124
    }
hgs
parents:
diff changeset
  1125
hgs
parents:
diff changeset
  1126
hgs
parents:
diff changeset
  1127
// ----------------------------------------------------
hgs
parents:
diff changeset
  1128
// CMceMessageListContainer::SetAnchorItemIdL
hgs
parents:
diff changeset
  1129
// ----------------------------------------------------
hgs
parents:
diff changeset
  1130
//
hgs
parents:
diff changeset
  1131
void CMceOneRowMessageListContainer::SetAnchorItemIdL(
hgs
parents:
diff changeset
  1132
    TMessageListOperationType aOperationType )
hgs
parents:
diff changeset
  1133
    {
hgs
parents:
diff changeset
  1134
    if ( iListItems->MdcaCount() == 0 )
hgs
parents:
diff changeset
  1135
        {
hgs
parents:
diff changeset
  1136
        iAnchorItemId = KErrNotFound;
hgs
parents:
diff changeset
  1137
        iAnchorItemIndex = KErrNotFound;
hgs
parents:
diff changeset
  1138
        if ( aOperationType != EMessageListOperationCompleted )
hgs
parents:
diff changeset
  1139
            {
hgs
parents:
diff changeset
  1140
        iLastOperationType = aOperationType;
hgs
parents:
diff changeset
  1141
            }
hgs
parents:
diff changeset
  1142
        return;
hgs
parents:
diff changeset
  1143
        }
hgs
parents:
diff changeset
  1144
hgs
parents:
diff changeset
  1145
    switch ( aOperationType )
hgs
parents:
diff changeset
  1146
        {
hgs
parents:
diff changeset
  1147
        case EMessageListOperationGeneral:
hgs
parents:
diff changeset
  1148
            iAnchorItemIndex = iListItems->ItemIndexTreeId(iTreeListBox->FocusedItem());
hgs
parents:
diff changeset
  1149
            iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
hgs
parents:
diff changeset
  1150
            break;
hgs
parents:
diff changeset
  1151
        case EMessageListOperationConnect:
hgs
parents:
diff changeset
  1152
            iAnchorItemIndex = iListItems->ItemIndexTreeId(iTreeListBox->FocusedItem());
hgs
parents:
diff changeset
  1153
            iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
hgs
parents:
diff changeset
  1154
            break;
hgs
parents:
diff changeset
  1155
        case EMessageListOperationFetchSelected:
hgs
parents:
diff changeset
  1156
hgs
parents:
diff changeset
  1157
            // find first from the marked messages list...? What if that is deleted when connected???
hgs
parents:
diff changeset
  1158
            if ( iSelectedEntries->Count() )
hgs
parents:
diff changeset
  1159
                {
hgs
parents:
diff changeset
  1160
                // pick first one
hgs
parents:
diff changeset
  1161
                iAnchorItemId = ( *iSelectedEntries )[0];
hgs
parents:
diff changeset
  1162
                iAnchorItemIndex = ItemIndex( iAnchorItemId );
hgs
parents:
diff changeset
  1163
                }
hgs
parents:
diff changeset
  1164
            else
hgs
parents:
diff changeset
  1165
                {
hgs
parents:
diff changeset
  1166
                iAnchorItemIndex = iListItems->ItemIndexTreeId(iTreeListBox->FocusedItem());
hgs
parents:
diff changeset
  1167
                iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
hgs
parents:
diff changeset
  1168
                }
hgs
parents:
diff changeset
  1169
            break;
hgs
parents:
diff changeset
  1170
        case EMessageListOperationFetchNew:
hgs
parents:
diff changeset
  1171
            iAnchorItemIndex = iListItems->ItemIndexTreeId(iTreeListBox->FocusedItem());
hgs
parents:
diff changeset
  1172
            iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
hgs
parents:
diff changeset
  1173
            break;
hgs
parents:
diff changeset
  1174
        case EMessageListOperationDelete:
hgs
parents:
diff changeset
  1175
            iAnchorItemIndex = iListItems->ItemIndexTreeId(iTreeListBox->FocusedItem());
hgs
parents:
diff changeset
  1176
            iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
hgs
parents:
diff changeset
  1177
            break;
hgs
parents:
diff changeset
  1178
        case EMessageListOperationCompleted:
hgs
parents:
diff changeset
  1179
            HandleOperationCompletedL();
hgs
parents:
diff changeset
  1180
            break;
hgs
parents:
diff changeset
  1181
        default:
hgs
parents:
diff changeset
  1182
            break;
hgs
parents:
diff changeset
  1183
        }
hgs
parents:
diff changeset
  1184
hgs
parents:
diff changeset
  1185
#ifdef _DEBUG
hgs
parents:
diff changeset
  1186
    RDebug::Print(_L("CMceMessageListContainer1: iAnchorItemId 0x%x, iAnchorItemIndex %d"), iAnchorItemId, iAnchorItemIndex);
hgs
parents:
diff changeset
  1187
#endif
hgs
parents:
diff changeset
  1188
    if ( aOperationType != EMessageListOperationCompleted )
hgs
parents:
diff changeset
  1189
        {
hgs
parents:
diff changeset
  1190
        iLastOperationType = aOperationType;
hgs
parents:
diff changeset
  1191
        }
hgs
parents:
diff changeset
  1192
    }
hgs
parents:
diff changeset
  1193
hgs
parents:
diff changeset
  1194
hgs
parents:
diff changeset
  1195
// ----------------------------------------------------
hgs
parents:
diff changeset
  1196
// CMceMessageListContainer::HandleMsvSessionEventL
hgs
parents:
diff changeset
  1197
// ----------------------------------------------------
hgs
parents:
diff changeset
  1198
//
hgs
parents:
diff changeset
  1199
void CMceOneRowMessageListContainer::HandleMsvSessionEventL(
hgs
parents:
diff changeset
  1200
    MMsvSessionObserver::TMsvSessionEvent aEvent,
hgs
parents:
diff changeset
  1201
    CMsvEntrySelection& aSelection,
hgs
parents:
diff changeset
  1202
    TBool aDraw )
hgs
parents:
diff changeset
  1203
    {
hgs
parents:
diff changeset
  1204
    switch ( aEvent )
hgs
parents:
diff changeset
  1205
        {
hgs
parents:
diff changeset
  1206
        case MMsvSessionObserver::EMsvEntriesDeleted:
hgs
parents:
diff changeset
  1207
            {
hgs
parents:
diff changeset
  1208
            EntryDeletedL( aSelection, aDraw );
hgs
parents:
diff changeset
  1209
            }
hgs
parents:
diff changeset
  1210
hgs
parents:
diff changeset
  1211
            break;
hgs
parents:
diff changeset
  1212
        case MMsvSessionObserver::EMsvEntriesCreated:
hgs
parents:
diff changeset
  1213
            {
hgs
parents:
diff changeset
  1214
            EntryCreatedL( aSelection, aDraw );
hgs
parents:
diff changeset
  1215
            }
hgs
parents:
diff changeset
  1216
            break;
hgs
parents:
diff changeset
  1217
hgs
parents:
diff changeset
  1218
        case MMsvSessionObserver::EMsvEntriesChanged:
hgs
parents:
diff changeset
  1219
            {
hgs
parents:
diff changeset
  1220
            TInt count = aSelection.Count();
hgs
parents:
diff changeset
  1221
            for (TInt i=0; i<count; i++)
hgs
parents:
diff changeset
  1222
                {
hgs
parents:
diff changeset
  1223
                UpdateEntryL( aSelection[i] );
hgs
parents:
diff changeset
  1224
                }
hgs
parents:
diff changeset
  1225
            }
hgs
parents:
diff changeset
  1226
            break;
hgs
parents:
diff changeset
  1227
        default:
hgs
parents:
diff changeset
  1228
            break;
hgs
parents:
diff changeset
  1229
        };
hgs
parents:
diff changeset
  1230
    if( iOwningView.MarkingMode() && iListItems->MessageCount() <= 0 )
hgs
parents:
diff changeset
  1231
        {
hgs
parents:
diff changeset
  1232
        SetMarkingModeOff();
hgs
parents:
diff changeset
  1233
        }
hgs
parents:
diff changeset
  1234
    }
hgs
parents:
diff changeset
  1235
hgs
parents:
diff changeset
  1236
hgs
parents:
diff changeset
  1237
// ----------------------------------------------------
hgs
parents:
diff changeset
  1238
// CMceOneRowMessageListContainer::FocusChanged
hgs
parents:
diff changeset
  1239
// ----------------------------------------------------
hgs
parents:
diff changeset
  1240
//
hgs
parents:
diff changeset
  1241
void CMceOneRowMessageListContainer::FocusChanged(TDrawNow /*aDrawNow*/)
hgs
parents:
diff changeset
  1242
    {
hgs
parents:
diff changeset
  1243
    if ( iTreeListBox )
hgs
parents:
diff changeset
  1244
        {
hgs
parents:
diff changeset
  1245
        iTreeListBox->SetFocus( IsFocused() );
hgs
parents:
diff changeset
  1246
        }
hgs
parents:
diff changeset
  1247
    }
hgs
parents:
diff changeset
  1248
hgs
parents:
diff changeset
  1249
hgs
parents:
diff changeset
  1250
// ----------------------------------------------------
hgs
parents:
diff changeset
  1251
// CMceOneRowMessageListContainer::MarkedItemsCount
hgs
parents:
diff changeset
  1252
// ----------------------------------------------------
hgs
parents:
diff changeset
  1253
//
hgs
parents:
diff changeset
  1254
TInt CMceOneRowMessageListContainer::MarkedItemsCount()
hgs
parents:
diff changeset
  1255
    {
hgs
parents:
diff changeset
  1256
    TInt count = 0;
hgs
parents:
diff changeset
  1257
    TRAP_IGNORE( count = GetMarkedItemsCountL() );
hgs
parents:
diff changeset
  1258
    return count;
hgs
parents:
diff changeset
  1259
    }
hgs
parents:
diff changeset
  1260
hgs
parents:
diff changeset
  1261
hgs
parents:
diff changeset
  1262
// ----------------------------------------------------
hgs
parents:
diff changeset
  1263
// CMceOneRowMessageListContainer::GetMarkedItemsCountL
hgs
parents:
diff changeset
  1264
// ----------------------------------------------------
hgs
parents:
diff changeset
  1265
//
hgs
parents:
diff changeset
  1266
TInt CMceOneRowMessageListContainer::GetMarkedItemsCountL() const
hgs
parents:
diff changeset
  1267
    {
hgs
parents:
diff changeset
  1268
    RArray<TInt> selection;
hgs
parents:
diff changeset
  1269
    CleanupClosePushL( selection );
hgs
parents:
diff changeset
  1270
    iTreeListBox->GetMarkedItemsL( selection );
hgs
parents:
diff changeset
  1271
    TInt count( selection.Count() );
hgs
parents:
diff changeset
  1272
    CleanupStack::PopAndDestroy( &selection );
hgs
parents:
diff changeset
  1273
    return count;
hgs
parents:
diff changeset
  1274
    }
hgs
parents:
diff changeset
  1275
hgs
parents:
diff changeset
  1276
hgs
parents:
diff changeset
  1277
// ----------------------------------------------------
hgs
parents:
diff changeset
  1278
// CMceOneRowMessageListContainer::OfferKeyEventL
hgs
parents:
diff changeset
  1279
// ----------------------------------------------------
hgs
parents:
diff changeset
  1280
//
hgs
parents:
diff changeset
  1281
TKeyResponse CMceOneRowMessageListContainer::OfferKeyEventL(
hgs
parents:
diff changeset
  1282
    const TKeyEvent& aKeyEvent, TEventCode aType)
hgs
parents:
diff changeset
  1283
    {
hgs
parents:
diff changeset
  1284
    if ( !iT9Interface )
hgs
parents:
diff changeset
  1285
        {
hgs
parents:
diff changeset
  1286
        iT9Interface = CPtiEngine::NewL();
hgs
parents:
diff changeset
  1287
        if ( iInputMethodQwerty )
hgs
parents:
diff changeset
  1288
            {
hgs
parents:
diff changeset
  1289
            iT9Interface->SetInputMode( EPtiEngineQwerty );
hgs
parents:
diff changeset
  1290
            iT9Interface->ActivateLanguageL( User::Language(), EPtiEngineQwerty );
hgs
parents:
diff changeset
  1291
            }
hgs
parents:
diff changeset
  1292
        else
hgs
parents:
diff changeset
  1293
            {
hgs
parents:
diff changeset
  1294
            iT9Interface->SetInputMode( EPtiEngineMultitapping );
hgs
parents:
diff changeset
  1295
            iT9Interface->ActivateLanguageL( User::Language(), EPtiEngineMultitapping );
hgs
parents:
diff changeset
  1296
            }
hgs
parents:
diff changeset
  1297
        iPreviousInputMethod = iInputMethodQwerty;
hgs
parents:
diff changeset
  1298
        }
hgs
parents:
diff changeset
  1299
    else
hgs
parents:
diff changeset
  1300
        {
hgs
parents:
diff changeset
  1301
        if ( iInputMethodQwerty != iPreviousInputMethod )
hgs
parents:
diff changeset
  1302
            {
hgs
parents:
diff changeset
  1303
            if ( iInputMethodQwerty )
hgs
parents:
diff changeset
  1304
                {
hgs
parents:
diff changeset
  1305
                iT9Interface->SetInputMode( EPtiEngineQwerty );
hgs
parents:
diff changeset
  1306
                iT9Interface->ActivateLanguageL( User::Language(), EPtiEngineQwerty );
hgs
parents:
diff changeset
  1307
                }
hgs
parents:
diff changeset
  1308
            else
hgs
parents:
diff changeset
  1309
                {
hgs
parents:
diff changeset
  1310
                iT9Interface->SetInputMode( EPtiEngineMultitapping );
hgs
parents:
diff changeset
  1311
                iT9Interface->ActivateLanguageL( User::Language(), EPtiEngineMultitapping );
hgs
parents:
diff changeset
  1312
                }
hgs
parents:
diff changeset
  1313
            iPreviousInputMethod = iInputMethodQwerty;
hgs
parents:
diff changeset
  1314
            }
hgs
parents:
diff changeset
  1315
        }
hgs
parents:
diff changeset
  1316
hgs
parents:
diff changeset
  1317
    if ( !iT9Timer )
hgs
parents:
diff changeset
  1318
        {
hgs
parents:
diff changeset
  1319
        iT9Timer = CMceMessageListContainerKeyTimer::NewL( *iT9Interface );
hgs
parents:
diff changeset
  1320
        }
hgs
parents:
diff changeset
  1321
hgs
parents:
diff changeset
  1322
    if ( iTreeListBox )
hgs
parents:
diff changeset
  1323
        {
hgs
parents:
diff changeset
  1324
        if ( aType == EEventKeyUp)
hgs
parents:
diff changeset
  1325
            {
hgs
parents:
diff changeset
  1326
            iDialerEvent = EFalse ;
hgs
parents:
diff changeset
  1327
            }
hgs
parents:
diff changeset
  1328
        if ( aType == EEventKeyDown && iDialerEvent )
hgs
parents:
diff changeset
  1329
            {
hgs
parents:
diff changeset
  1330
            iDialerEvent = EFalse ;
hgs
parents:
diff changeset
  1331
	        }
hgs
parents:
diff changeset
  1332
        if ( aType == EEventKey )
hgs
parents:
diff changeset
  1333
            {
hgs
parents:
diff changeset
  1334
hgs
parents:
diff changeset
  1335
            iOwningView.CancelMailboxTimer();
hgs
parents:
diff changeset
  1336
hgs
parents:
diff changeset
  1337
            if ( aKeyEvent.iCode == EKeyLeftArrow || aKeyEvent.iCode == EKeyRightArrow )
hgs
parents:
diff changeset
  1338
                {
hgs
parents:
diff changeset
  1339
                return EKeyWasNotConsumed;
hgs
parents:
diff changeset
  1340
                }
hgs
parents:
diff changeset
  1341
hgs
parents:
diff changeset
  1342
            
hgs
parents:
diff changeset
  1343
			if ( ( GetMarkedItemsCountL() || iOwningView.MenuBar()->ItemSpecificCommandsEnabled() ) && aKeyEvent.iCode == EKeyBackspace )
hgs
parents:
diff changeset
  1344
                {
hgs
parents:
diff changeset
  1345
                MarkItemSelectionL();
hgs
parents:
diff changeset
  1346
                SetAnchorItemIdL(
hgs
parents:
diff changeset
  1347
                    CMceMessageListContainerBase::EMessageListOperationGeneral );
hgs
parents:
diff changeset
  1348
hgs
parents:
diff changeset
  1349
                TMsvId currentId = CurrentItemId();
hgs
parents:
diff changeset
  1350
                const TInt itemCount = CurrentItemSelectionCount();
hgs
parents:
diff changeset
  1351
                if ( itemCount != 0 &&
hgs
parents:
diff changeset
  1352
                     ( itemCount != 1 ||
hgs
parents:
diff changeset
  1353
                       currentId != KMceTemplatesEntryIdValue )
hgs
parents:
diff changeset
  1354
                   )
hgs
parents:
diff changeset
  1355
                    {
hgs
parents:
diff changeset
  1356
                    if ( currentId == KErrNotFound || // subtitle is selected, allow delete
hgs
parents:
diff changeset
  1357
                        !iListItems->DeleteDiscard( currentId ) )
hgs
parents:
diff changeset
  1358
                        {
hgs
parents:
diff changeset
  1359
                        //if outbox and mms/sms connected, not delete
hgs
parents:
diff changeset
  1360
                        iOwningView.HandleCommandL( EMceCmdDelete );
hgs
parents:
diff changeset
  1361
                        }
hgs
parents:
diff changeset
  1362
                    }
hgs
parents:
diff changeset
  1363
                return EKeyWasConsumed;
hgs
parents:
diff changeset
  1364
                }
hgs
parents:
diff changeset
  1365
            else if ( aKeyEvent.iCode == EKeyOK ||  aKeyEvent.iCode == EKeyEnter )
hgs
parents:
diff changeset
  1366
                {
hgs
parents:
diff changeset
  1367
                if ( aKeyEvent.iModifiers & EModifierShift ||
hgs
parents:
diff changeset
  1368
                      aKeyEvent.iModifiers & EModifierCtrl )
hgs
parents:
diff changeset
  1369
                    {
hgs
parents:
diff changeset
  1370
                    if ( iListItems->FolderId() != KMsvGlobalOutBoxIndexEntryIdValue &&
hgs
parents:
diff changeset
  1371
                         IsCurrentItemFolder() )
hgs
parents:
diff changeset
  1372
                        {
hgs
parents:
diff changeset
  1373
                        return EKeyWasNotConsumed;
hgs
parents:
diff changeset
  1374
                        }
hgs
parents:
diff changeset
  1375
                    }
hgs
parents:
diff changeset
  1376
                else
hgs
parents:
diff changeset
  1377
                    {
hgs
parents:
diff changeset
  1378
                    iOwningView.SetHideExitCommand( ETrue );
hgs
parents:
diff changeset
  1379
                    if ( iListItems->FolderId() == KMsvGlobalOutBoxIndexEntryIdValue ||
hgs
parents:
diff changeset
  1380
                        iOwningView.SyncMlOutboxInbox( KMsvGlobalOutBoxIndexEntryId ) ||
hgs
parents:
diff changeset
  1381
                        CurrentItemSelectionCount() == 0 ||
hgs
parents:
diff changeset
  1382
                        iOwningView.CheckMMSNotificationOpenL() )
hgs
parents:
diff changeset
  1383
                        {
hgs
parents:
diff changeset
  1384
                        // list is empty, open options menu
hgs
parents:
diff changeset
  1385
                        iOwningView.ProcessCommandL( EAknSoftkeyOptions );
hgs
parents:
diff changeset
  1386
                        return EKeyWasConsumed;
hgs
parents:
diff changeset
  1387
                        }
hgs
parents:
diff changeset
  1388
                    }
hgs
parents:
diff changeset
  1389
                }
hgs
parents:
diff changeset
  1390
hgs
parents:
diff changeset
  1391
            else if ( aKeyEvent.iCode == EKeyYes )
hgs
parents:
diff changeset
  1392
                {
hgs
parents:
diff changeset
  1393
                if (!iDialerEvent && aKeyEvent.iRepeats == 0) 
hgs
parents:
diff changeset
  1394
	                {
hgs
parents:
diff changeset
  1395
                
hgs
parents:
diff changeset
  1396
                // send key has been pressed in Inbox or in Documents folder
hgs
parents:
diff changeset
  1397
                TMsvId folderId = iListItems->FolderId();
hgs
parents:
diff changeset
  1398
                if ( folderId != KMsvDraftEntryId &&
hgs
parents:
diff changeset
  1399
                    folderId != KMsvGlobalOutBoxIndexEntryId &&
hgs
parents:
diff changeset
  1400
                    folderId != KMsvSentEntryId &&
hgs
parents:
diff changeset
  1401
                    folderId != KMceTemplatesEntryId
hgs
parents:
diff changeset
  1402
                    && ( CurrentItemSelectionCount() == 1 )  )
hgs
parents:
diff changeset
  1403
                    {
hgs
parents:
diff changeset
  1404
                    if ( !( iListItems->IsFolderRemote() ) )
hgs
parents:
diff changeset
  1405
                        {
hgs
parents:
diff changeset
  1406
                        TMsvId id = CurrentItemId();
hgs
parents:
diff changeset
  1407
                        TBool validNumber = EFalse;
hgs
parents:
diff changeset
  1408
                        TPhCltTelephoneNumber number;
hgs
parents:
diff changeset
  1409
                        TBuf<KMceVisibleTextLength> recipientstring;
hgs
parents:
diff changeset
  1410
                        CMceUi* mceUi = static_cast<CMceUi*>( CCoeEnv::Static()->AppUi() );
hgs
parents:
diff changeset
  1411
                        if (id != -1)
hgs
parents:
diff changeset
  1412
                        	{
hgs
parents:
diff changeset
  1413
                        validNumber = MceUtils::ValidPhoneNumberL( id, mceUi->Session(), number, &recipientstring );
hgs
parents:
diff changeset
  1414
                        	}
hgs
parents:
diff changeset
  1415
                        if (KErrNotFound != number.Match( recipientstring ))
hgs
parents:
diff changeset
  1416
                            {
hgs
parents:
diff changeset
  1417
                            recipientstring = KNullDesC;
hgs
parents:
diff changeset
  1418
                            }
hgs
parents:
diff changeset
  1419
hgs
parents:
diff changeset
  1420
                        //
hgs
parents:
diff changeset
  1421
                        // Callback number is supported in CDMA mode. If there isn't a phone
hgs
parents:
diff changeset
  1422
                        // book match for the sender, it gets confusing to display the sender's
hgs
parents:
diff changeset
  1423
                        // number (contained in recipientstring) and the callback number
hgs
parents:
diff changeset
  1424
                        // (contained in the number field) via CallToSenderQueryL.
hgs
parents:
diff changeset
  1425
                        // Therefore, if the recipientstring differs from the phone number
hgs
parents:
diff changeset
  1426
                        // to be used to call the sender and recipientstring is also a phone
hgs
parents:
diff changeset
  1427
                        // number, we won't display recipientstring when running in CDMA mode.
hgs
parents:
diff changeset
  1428
                        //
hgs
parents:
diff changeset
  1429
                        if ( FeatureManager::FeatureSupported( KFeatureIdProtocolCdma ) )
hgs
parents:
diff changeset
  1430
                            {
hgs
parents:
diff changeset
  1431
                            if ( CommonPhoneParser::IsValidPhoneNumber( recipientstring, CommonPhoneParser::ESMSNumber ) )
hgs
parents:
diff changeset
  1432
                                {
hgs
parents:
diff changeset
  1433
                                recipientstring = KNullDesC;
hgs
parents:
diff changeset
  1434
                                }
hgs
parents:
diff changeset
  1435
                            }
hgs
parents:
diff changeset
  1436
hgs
parents:
diff changeset
  1437
                        if ( validNumber )
hgs
parents:
diff changeset
  1438
                            {
hgs
parents:
diff changeset
  1439
	                          iAvkonAppUi->SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | CAknAppUiBase::EDisableSendKeyLong );
hgs
parents:
diff changeset
  1440
                            MsvUiServiceUtilitiesInternal::CallToSenderQueryL( number, recipientstring, EFalse );
hgs
parents:
diff changeset
  1441
	                          iAvkonAppUi->SetKeyEventFlags( 0x00 );
hgs
parents:
diff changeset
  1442
                            }
hgs
parents:
diff changeset
  1443
                        }
hgs
parents:
diff changeset
  1444
                    else   // Enable Sendkey in Mail List
hgs
parents:
diff changeset
  1445
                        {
hgs
parents:
diff changeset
  1446
                        iAvkonAppUi->SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | CAknAppUiBase::EDisableSendKeyLong );
hgs
parents:
diff changeset
  1447
                        TMsvId id = CurrentItemId(); 
hgs
parents:
diff changeset
  1448
                        
hgs
parents:
diff changeset
  1449
                        if ( id != -1)
hgs
parents:
diff changeset
  1450
                        	{
hgs
parents:
diff changeset
  1451
                        	iOwningView.HandleSendkeyInMailboxL( id );
hgs
parents:
diff changeset
  1452
                        	}
hgs
parents:
diff changeset
  1453
                        iAvkonAppUi->SetKeyEventFlags( 0x00 );
hgs
parents:
diff changeset
  1454
                        }
hgs
parents:
diff changeset
  1455
                    }
hgs
parents:
diff changeset
  1456
                SetAnchorItemIdL(
hgs
parents:
diff changeset
  1457
                    CMceMessageListContainerBase::EMessageListOperationGeneral );
hgs
parents:
diff changeset
  1458
	                }
hgs
parents:
diff changeset
  1459
                return EKeyWasConsumed;
hgs
parents:
diff changeset
  1460
                }
hgs
parents:
diff changeset
  1461
hgs
parents:
diff changeset
  1462
            else if ( IsValidSearchKey( aKeyEvent ) )
hgs
parents:
diff changeset
  1463
                {
hgs
parents:
diff changeset
  1464
                if ( !( FeatureManager::FeatureSupported(KFeatureIdJapanese) ||
hgs
parents:
diff changeset
  1465
		    FeatureManager::FeatureSupported(KFeatureIdChinese) )  )
hgs
parents:
diff changeset
  1466
                    {                
hgs
parents:
diff changeset
  1467
                    HandleShortcutForSearchL( aKeyEvent );
hgs
parents:
diff changeset
  1468
                    }   
hgs
parents:
diff changeset
  1469
                }
hgs
parents:
diff changeset
  1470
            else if (  aKeyEvent.iCode == (TUint)EPtiKeyStar )
hgs
parents:
diff changeset
  1471
                {              
hgs
parents:
diff changeset
  1472
                if ( HasHandleStarKeyDoneL() ) // * key
hgs
parents:
diff changeset
  1473
                    {
hgs
parents:
diff changeset
  1474
                    return EKeyWasConsumed;
hgs
parents:
diff changeset
  1475
                    }
hgs
parents:
diff changeset
  1476
                }
hgs
parents:
diff changeset
  1477
            if ( iOwningView.IsMSKMailBox() || 
hgs
parents:
diff changeset
  1478
                 iOwningView.IsMSKSyncMlMailBox() || 
hgs
parents:
diff changeset
  1479
                 iListItems->FolderId() == KMsvGlobalInBoxIndexEntryId )
hgs
parents:
diff changeset
  1480
                {
hgs
parents:
diff changeset
  1481
                }  
hgs
parents:
diff changeset
  1482
            }
hgs
parents:
diff changeset
  1483
            
hgs
parents:
diff changeset
  1484
        if ( iListItems->MdcaCount() > 0 && SelectionCount() == 0 )
hgs
parents:
diff changeset
  1485
            {
hgs
parents:
diff changeset
  1486
            iOwningView.SetHideExitCommand( EFalse );
hgs
parents:
diff changeset
  1487
            }
hgs
parents:
diff changeset
  1488
        TKeyResponse ret = iTreeListBox->OfferKeyEventL(aKeyEvent, aType);
hgs
parents:
diff changeset
  1489
        iOwningView.SetCurrentItemId();
hgs
parents:
diff changeset
  1490
        SetAnchorItemIdL(
hgs
parents:
diff changeset
  1491
            CMceMessageListContainerBase::EMessageListOperationGeneral );
hgs
parents:
diff changeset
  1492
hgs
parents:
diff changeset
  1493
        if ( iOwningView.IsMSKMailBox() &&
hgs
parents:
diff changeset
  1494
             ( aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow ) )
hgs
parents:
diff changeset
  1495
            {
hgs
parents:
diff changeset
  1496
            iOwningView.SetMSKButtonL();
hgs
parents:
diff changeset
  1497
            }
hgs
parents:
diff changeset
  1498
        return ret;
hgs
parents:
diff changeset
  1499
        }
hgs
parents:
diff changeset
  1500
    else
hgs
parents:
diff changeset
  1501
        {
hgs
parents:
diff changeset
  1502
        return EKeyWasNotConsumed;
hgs
parents:
diff changeset
  1503
        }
hgs
parents:
diff changeset
  1504
    }
hgs
parents:
diff changeset
  1505
hgs
parents:
diff changeset
  1506
hgs
parents:
diff changeset
  1507
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1508
//CMceMessageListContainer::IsValidSearchKey(const TKeyEvent& aKeyEvent)
hgs
parents:
diff changeset
  1509
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1510
//
hgs
parents:
diff changeset
  1511
TBool CMceOneRowMessageListContainer::IsValidSearchKey( const TKeyEvent& aKeyEvent )
hgs
parents:
diff changeset
  1512
    {
hgs
parents:
diff changeset
  1513
    TBool response = EFalse;
hgs
parents:
diff changeset
  1514
    if ( iInputMethodQwerty )
hgs
parents:
diff changeset
  1515
        {
hgs
parents:
diff changeset
  1516
        response = ETrue;
hgs
parents:
diff changeset
  1517
        }
hgs
parents:
diff changeset
  1518
    if ((( aKeyEvent.iCode >= (TUint)EPtiKey0 &&
hgs
parents:
diff changeset
  1519
           aKeyEvent.iCode <= (TUint)EPtiKey9 )  )
hgs
parents:
diff changeset
  1520
           && !aKeyEvent.iRepeats )
hgs
parents:
diff changeset
  1521
        {
hgs
parents:
diff changeset
  1522
        response = ETrue;
hgs
parents:
diff changeset
  1523
        }
hgs
parents:
diff changeset
  1524
    if ( aKeyEvent.iCode == EKeyUpArrow || 
hgs
parents:
diff changeset
  1525
    	 aKeyEvent.iCode == EKeyDownArrow )
hgs
parents:
diff changeset
  1526
    	{
hgs
parents:
diff changeset
  1527
    	response = EFalse;
hgs
parents:
diff changeset
  1528
    	}
hgs
parents:
diff changeset
  1529
    return response;
hgs
parents:
diff changeset
  1530
    }
hgs
parents:
diff changeset
  1531
hgs
parents:
diff changeset
  1532
hgs
parents:
diff changeset
  1533
// ----------------------------------------------------
hgs
parents:
diff changeset
  1534
// CMceMessageListContainer::StateCanBeChangedByStarKeyL() const
hgs
parents:
diff changeset
  1535
// Exam if it is the situation that * key can change message state
hgs
parents:
diff changeset
  1536
// Returns ETrue if it can
hgs
parents:
diff changeset
  1537
// Public
hgs
parents:
diff changeset
  1538
// ----------------------------------------------------
hgs
parents:
diff changeset
  1539
//
hgs
parents:
diff changeset
  1540
TBool CMceOneRowMessageListContainer::StateCanBeChangedByStarKeyL() const
hgs
parents:
diff changeset
  1541
    {
hgs
parents:
diff changeset
  1542
    TMsvId folderId = iListItems->FolderId();
hgs
parents:
diff changeset
  1543
    TBool isRemoteFolder = iListItems->IsFolderRemote();
hgs
parents:
diff changeset
  1544
hgs
parents:
diff changeset
  1545
    if ( ( iListItems->MessageCount() > 0
hgs
parents:
diff changeset
  1546
        && SelectionCount() == 0
hgs
parents:
diff changeset
  1547
        && !IsCurrentItemFolder() )
hgs
parents:
diff changeset
  1548
        && ( folderId == KMsvGlobalInBoxIndexEntryId  //Inbox
hgs
parents:
diff changeset
  1549
        || folderId == KMceDocumentsEntryId  //Documents
hgs
parents:
diff changeset
  1550
        || iListItems->GetParentFolderId() == KMceDocumentsEntryId //Subfolder of Documents
hgs
parents:
diff changeset
  1551
        || isRemoteFolder ) )  // Mailbox & SyncMl
hgs
parents:
diff changeset
  1552
        {
hgs
parents:
diff changeset
  1553
        if ( iOwningView.IsSyncMl() )
hgs
parents:
diff changeset
  1554
            {
hgs
parents:
diff changeset
  1555
            return( iOwningView.ListContainer()->FolderEntry().iRelatedId  == KMsvGlobalInBoxIndexEntryId );//Inbox of SyncMail
hgs
parents:
diff changeset
  1556
            }
hgs
parents:
diff changeset
  1557
        return ETrue;
hgs
parents:
diff changeset
  1558
        }
hgs
parents:
diff changeset
  1559
     else
hgs
parents:
diff changeset
  1560
        {
hgs
parents:
diff changeset
  1561
        return EFalse;
hgs
parents:
diff changeset
  1562
        }
hgs
parents:
diff changeset
  1563
    }
hgs
parents:
diff changeset
  1564
hgs
parents:
diff changeset
  1565
hgs
parents:
diff changeset
  1566
// ----------------------------------------------------
hgs
parents:
diff changeset
  1567
// CMceOneRowMessageListContainer::IsCurrentItemFolder
hgs
parents:
diff changeset
  1568
// ----------------------------------------------------
hgs
parents:
diff changeset
  1569
//
hgs
parents:
diff changeset
  1570
TBool CMceOneRowMessageListContainer::IsCurrentItemFolder() const
hgs
parents:
diff changeset
  1571
    {
hgs
parents:
diff changeset
  1572
    TBool isCurrentFolder = EFalse;
hgs
parents:
diff changeset
  1573
    const TMsvId id = CurrentItemId();
hgs
parents:
diff changeset
  1574
    if ( id != KErrNotFound )
hgs
parents:
diff changeset
  1575
        {
hgs
parents:
diff changeset
  1576
        isCurrentFolder = IsItemFolder( id );
hgs
parents:
diff changeset
  1577
        }
hgs
parents:
diff changeset
  1578
    return isCurrentFolder;
hgs
parents:
diff changeset
  1579
    }
hgs
parents:
diff changeset
  1580
hgs
parents:
diff changeset
  1581
hgs
parents:
diff changeset
  1582
// ----------------------------------------------------
hgs
parents:
diff changeset
  1583
// CMceOneRowMessageListContainer::IsItemFolder
hgs
parents:
diff changeset
  1584
// ----------------------------------------------------
hgs
parents:
diff changeset
  1585
//
hgs
parents:
diff changeset
  1586
TBool CMceOneRowMessageListContainer::IsItemFolder( TMsvId aItemId ) const
hgs
parents:
diff changeset
  1587
    {
hgs
parents:
diff changeset
  1588
    return iListItems->IsItemFolder( aItemId );
hgs
parents:
diff changeset
  1589
    }
hgs
parents:
diff changeset
  1590
hgs
parents:
diff changeset
  1591
hgs
parents:
diff changeset
  1592
// ----------------------------------------------------
hgs
parents:
diff changeset
  1593
// CMceOneRowMessageListContainer::IsItemFolder
hgs
parents:
diff changeset
  1594
// ----------------------------------------------------
hgs
parents:
diff changeset
  1595
//
hgs
parents:
diff changeset
  1596
TBool CMceOneRowMessageListContainer::IsItemFolder( TInt aIndex ) const
hgs
parents:
diff changeset
  1597
    {
hgs
parents:
diff changeset
  1598
    TBool isCurrentFolder = EFalse;
hgs
parents:
diff changeset
  1599
    const TMsvId id = iListItems->MsvItemId( aIndex );
hgs
parents:
diff changeset
  1600
    if ( id != KErrNotFound )
hgs
parents:
diff changeset
  1601
        {
hgs
parents:
diff changeset
  1602
        isCurrentFolder = iListItems->IsItemFolder( id );
hgs
parents:
diff changeset
  1603
        }
hgs
parents:
diff changeset
  1604
    return isCurrentFolder;
hgs
parents:
diff changeset
  1605
    }
hgs
parents:
diff changeset
  1606
hgs
parents:
diff changeset
  1607
hgs
parents:
diff changeset
  1608
// ----------------------------------------------------
hgs
parents:
diff changeset
  1609
// CMceOneRowMessageListContainer::IsItemRemote
hgs
parents:
diff changeset
  1610
// ----------------------------------------------------
hgs
parents:
diff changeset
  1611
//
hgs
parents:
diff changeset
  1612
TBool CMceOneRowMessageListContainer::IsItemRemote( TMsvId aItemId ) const
hgs
parents:
diff changeset
  1613
    {
hgs
parents:
diff changeset
  1614
    return iListItems->IsItemRemote( aItemId );
hgs
parents:
diff changeset
  1615
    }
hgs
parents:
diff changeset
  1616
hgs
parents:
diff changeset
  1617
hgs
parents:
diff changeset
  1618
// ----------------------------------------------------
hgs
parents:
diff changeset
  1619
// CMceOneRowMessageListContainer::IsOpenedFolder
hgs
parents:
diff changeset
  1620
// ----------------------------------------------------
hgs
parents:
diff changeset
  1621
//
hgs
parents:
diff changeset
  1622
TBool CMceOneRowMessageListContainer::IsOpenedFolder( TMsvId aFolderId ) const
hgs
parents:
diff changeset
  1623
    {
hgs
parents:
diff changeset
  1624
    return ( iListItems->FolderId() == aFolderId );
hgs
parents:
diff changeset
  1625
    }
hgs
parents:
diff changeset
  1626
hgs
parents:
diff changeset
  1627
hgs
parents:
diff changeset
  1628
// ----------------------------------------------------
hgs
parents:
diff changeset
  1629
// CMceMessageListContainer::DisplayOptionsMenuFromSelectionKey
hgs
parents:
diff changeset
  1630
// ----------------------------------------------------
hgs
parents:
diff changeset
  1631
//
hgs
parents:
diff changeset
  1632
TBool CMceOneRowMessageListContainer::DisplayOptionsMenuFromSelectionKey() const
hgs
parents:
diff changeset
  1633
    {
hgs
parents:
diff changeset
  1634
    TInt itemCount = 0;
hgs
parents:
diff changeset
  1635
    TRAP_IGNORE( itemCount = GetMarkedItemsCountL() );
hgs
parents:
diff changeset
  1636
    return ( (iListItems->MessageCount() + iListItems->FolderCount()) == 0 || itemCount );
hgs
parents:
diff changeset
  1637
    }
hgs
parents:
diff changeset
  1638
hgs
parents:
diff changeset
  1639
hgs
parents:
diff changeset
  1640
// ----------------------------------------------------
hgs
parents:
diff changeset
  1641
// CMceMessageListContainer::GetHelpContext
hgs
parents:
diff changeset
  1642
// returns helpcontext as aContext
hgs
parents:
diff changeset
  1643
// ----------------------------------------------------
hgs
parents:
diff changeset
  1644
//
hgs
parents:
diff changeset
  1645
void CMceOneRowMessageListContainer::GetHelpContext
hgs
parents:
diff changeset
  1646
        (TCoeHelpContext& aContext) const
hgs
parents:
diff changeset
  1647
    {
hgs
parents:
diff changeset
  1648
    TMsvId folderId = iListItems->FolderId();
hgs
parents:
diff changeset
  1649
    aContext.iMajor = KMceApplicationUid;
hgs
parents:
diff changeset
  1650
hgs
parents:
diff changeset
  1651
    TBool isRemoteFolder = iListItems->IsFolderRemote();
hgs
parents:
diff changeset
  1652
hgs
parents:
diff changeset
  1653
    /*if ( iOwningView.SyncMlOutboxInbox( KMsvGlobalInBoxIndexEntryId ) )
hgs
parents:
diff changeset
  1654
        {
hgs
parents:
diff changeset
  1655
        aContext.iContext = KMCE_HLP_MESS_SYNCI;
hgs
parents:
diff changeset
  1656
        }
hgs
parents:
diff changeset
  1657
    else if ( iOwningView.SyncMlOutboxInbox( KMsvGlobalOutBoxIndexEntryId ) )
hgs
parents:
diff changeset
  1658
        {
hgs
parents:
diff changeset
  1659
        aContext.iContext = KMCE_HLP_MESS_SYNCO;
hgs
parents:
diff changeset
  1660
        }
hgs
parents:
diff changeset
  1661
hgs
parents:
diff changeset
  1662
    else if ( iOwningView.IsSyncMl() )
hgs
parents:
diff changeset
  1663
        {
hgs
parents:
diff changeset
  1664
        aContext.iContext = KMCE_HLP_MESS_SYNC;
hgs
parents:
diff changeset
  1665
        }
hgs
parents:
diff changeset
  1666
hgs
parents:
diff changeset
  1667
    else*/
hgs
parents:
diff changeset
  1668
    if ( folderId == KMsvDraftEntryId )
hgs
parents:
diff changeset
  1669
        {
hgs
parents:
diff changeset
  1670
        aContext.iContext = KMCE_HLP_DRAFTS;
hgs
parents:
diff changeset
  1671
        }
hgs
parents:
diff changeset
  1672
    else if ( folderId == KMsvGlobalOutBoxIndexEntryId )
hgs
parents:
diff changeset
  1673
        {
hgs
parents:
diff changeset
  1674
        aContext.iContext = KMCE_HLP_OUTBOX;
hgs
parents:
diff changeset
  1675
        }
hgs
parents:
diff changeset
  1676
    else if ( folderId == KMsvGlobalInBoxIndexEntryId )
hgs
parents:
diff changeset
  1677
        {
hgs
parents:
diff changeset
  1678
        aContext.iContext = KMCE_HLP_INBOX;
hgs
parents:
diff changeset
  1679
        }
hgs
parents:
diff changeset
  1680
    else if ( folderId == KMsvSentEntryId )
hgs
parents:
diff changeset
  1681
        {
hgs
parents:
diff changeset
  1682
        aContext.iContext = KMCE_HLP_SENT_ITEMS;
hgs
parents:
diff changeset
  1683
        }
hgs
parents:
diff changeset
  1684
    else if ( folderId == KMceDocumentsEntryId )
hgs
parents:
diff changeset
  1685
        {
hgs
parents:
diff changeset
  1686
        aContext.iContext = KMCE_HLP_DOCUMENTS;
hgs
parents:
diff changeset
  1687
        }
hgs
parents:
diff changeset
  1688
    else if ( folderId == KMceTemplatesEntryId )
hgs
parents:
diff changeset
  1689
        {
hgs
parents:
diff changeset
  1690
        aContext.iContext = KMCE_HLP_TEMPLATES;
hgs
parents:
diff changeset
  1691
        }
hgs
parents:
diff changeset
  1692
    else if ( !isRemoteFolder )
hgs
parents:
diff changeset
  1693
        {
hgs
parents:
diff changeset
  1694
        // own folder
hgs
parents:
diff changeset
  1695
        aContext.iContext = KMCE_HLP_FOLDER;
hgs
parents:
diff changeset
  1696
        }
hgs
parents:
diff changeset
  1697
    else
hgs
parents:
diff changeset
  1698
        {
hgs
parents:
diff changeset
  1699
        // remote account
hgs
parents:
diff changeset
  1700
        TBool isConnected = iListItems->IsConnected();
hgs
parents:
diff changeset
  1701
        if ( isConnected )
hgs
parents:
diff changeset
  1702
            {
hgs
parents:
diff changeset
  1703
            aContext.iContext = KMCE_HLP_MAILBOX_ONLINE;
hgs
parents:
diff changeset
  1704
            }
hgs
parents:
diff changeset
  1705
        else
hgs
parents:
diff changeset
  1706
            {
hgs
parents:
diff changeset
  1707
            aContext.iContext = KMCE_HLP_MAILBOX_OFFLINE;
hgs
parents:
diff changeset
  1708
            }
hgs
parents:
diff changeset
  1709
        }
hgs
parents:
diff changeset
  1710
    }
hgs
parents:
diff changeset
  1711
hgs
parents:
diff changeset
  1712
hgs
parents:
diff changeset
  1713
// ----------------------------------------------------
hgs
parents:
diff changeset
  1714
// CMceOneRowMessageListContainer::SetSortTypeL
hgs
parents:
diff changeset
  1715
// ----------------------------------------------------
hgs
parents:
diff changeset
  1716
//
hgs
parents:
diff changeset
  1717
void CMceOneRowMessageListContainer::SetSortTypeL( TInt aSortType, TBool aOrdering )
hgs
parents:
diff changeset
  1718
    {
hgs
parents:
diff changeset
  1719
    SaveMarkingL();
hgs
parents:
diff changeset
  1720
    ResetListbox();
hgs
parents:
diff changeset
  1721
    iListItems->SetOrderingL( aSortType, aOrdering );
hgs
parents:
diff changeset
  1722
    }
hgs
parents:
diff changeset
  1723
hgs
parents:
diff changeset
  1724
hgs
parents:
diff changeset
  1725
// ----------------------------------------------------
hgs
parents:
diff changeset
  1726
// CMceOneRowMessageListContainer::SetMtmUiDataRegistry
hgs
parents:
diff changeset
  1727
// ----------------------------------------------------
hgs
parents:
diff changeset
  1728
//
hgs
parents:
diff changeset
  1729
void CMceOneRowMessageListContainer::SetMtmUiDataRegistry( MMtmUiDataRegistryObserver* aRegistryObserver )
hgs
parents:
diff changeset
  1730
    {
hgs
parents:
diff changeset
  1731
    iListItems->SetRegistryObserver( aRegistryObserver );
hgs
parents:
diff changeset
  1732
    }
hgs
parents:
diff changeset
  1733
hgs
parents:
diff changeset
  1734
hgs
parents:
diff changeset
  1735
// ----------------------------------------------------
hgs
parents:
diff changeset
  1736
// CMceOneRowMessageListContainer::TMessageListItemType
hgs
parents:
diff changeset
  1737
// ----------------------------------------------------
hgs
parents:
diff changeset
  1738
//
hgs
parents:
diff changeset
  1739
CMceMessageListContainerBase::TMessageListItemType CMceOneRowMessageListContainer::CurrentItemType() const
hgs
parents:
diff changeset
  1740
    {
hgs
parents:
diff changeset
  1741
    if ( iTreeListBox &&
hgs
parents:
diff changeset
  1742
         ( iListItems->MessageCount() || iListItems->FolderCount() )
hgs
parents:
diff changeset
  1743
         )
hgs
parents:
diff changeset
  1744
        {
hgs
parents:
diff changeset
  1745
        TAknTreeItemID focusedItem = iTreeListBox->FocusedItem();
hgs
parents:
diff changeset
  1746
        if ( iListItems->MsvItemId( focusedItem ) > KErrNotFound )
hgs
parents:
diff changeset
  1747
            {
hgs
parents:
diff changeset
  1748
            return CMceMessageListContainerBase::EMessageListItemMsvItem;
hgs
parents:
diff changeset
  1749
            }
hgs
parents:
diff changeset
  1750
        else if ( focusedItem == KAknTreeIIDNone )
hgs
parents:
diff changeset
  1751
            {
hgs
parents:
diff changeset
  1752
            return CMceMessageListContainerBase::EMessageListItemUnknown;
hgs
parents:
diff changeset
  1753
            }
hgs
parents:
diff changeset
  1754
        else
hgs
parents:
diff changeset
  1755
            {
hgs
parents:
diff changeset
  1756
            return CMceMessageListContainerBase::EMessageListItemSubtitle;
hgs
parents:
diff changeset
  1757
            }
hgs
parents:
diff changeset
  1758
        }
hgs
parents:
diff changeset
  1759
    return CMceMessageListContainerBase::EMessageListItemUnknown;
hgs
parents:
diff changeset
  1760
    }
hgs
parents:
diff changeset
  1761
hgs
parents:
diff changeset
  1762
hgs
parents:
diff changeset
  1763
// ----------------------------------------------------
hgs
parents:
diff changeset
  1764
// CMceOneRowMessageListContainer::ProcessCommandL
hgs
parents:
diff changeset
  1765
// ----------------------------------------------------
hgs
parents:
diff changeset
  1766
//
hgs
parents:
diff changeset
  1767
void CMceOneRowMessageListContainer::ProcessCommandL(TInt /*aCommand*/)
hgs
parents:
diff changeset
  1768
    {
hgs
parents:
diff changeset
  1769
    }
hgs
parents:
diff changeset
  1770
hgs
parents:
diff changeset
  1771
hgs
parents:
diff changeset
  1772
// ----------------------------------------------------
hgs
parents:
diff changeset
  1773
// CMceOneRowMessageListContainer::SetListEmptyTextL
hgs
parents:
diff changeset
  1774
// ----------------------------------------------------
hgs
parents:
diff changeset
  1775
//
hgs
parents:
diff changeset
  1776
void CMceOneRowMessageListContainer::SetListEmptyTextL(const TDesC& aText )
hgs
parents:
diff changeset
  1777
    {
hgs
parents:
diff changeset
  1778
    iTreeListBox->SetEmptyTextL( aText ); 
hgs
parents:
diff changeset
  1779
    }
hgs
parents:
diff changeset
  1780
hgs
parents:
diff changeset
  1781
hgs
parents:
diff changeset
  1782
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1783
// CMceOneRowMessageListContainer::ChangeMskCommand
hgs
parents:
diff changeset
  1784
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1785
//
hgs
parents:
diff changeset
  1786
void CMceOneRowMessageListContainer::ChangeMskCommand( TInt aLabelResourceId )
hgs
parents:
diff changeset
  1787
    {
hgs
parents:
diff changeset
  1788
    // The MSK commands should not be changed when controlled by the list.
hgs
parents:
diff changeset
  1789
    __ASSERT_DEBUG( !iMarkingModeEnabled, User::Invariant() );
hgs
parents:
diff changeset
  1790
hgs
parents:
diff changeset
  1791
    // Get cba and set MSK command
hgs
parents:
diff changeset
  1792
    CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
hgs
parents:
diff changeset
  1793
    if ( cba )
hgs
parents:
diff changeset
  1794
        {
hgs
parents:
diff changeset
  1795
        TBuf<KMSKLabel> label;
hgs
parents:
diff changeset
  1796
        TRAP_IGNORE( cba->SetCommandL( KMSKPosition, aLabelResourceId ) );
hgs
parents:
diff changeset
  1797
        cba->DrawDeferred();
hgs
parents:
diff changeset
  1798
        }
hgs
parents:
diff changeset
  1799
    }
hgs
parents:
diff changeset
  1800
hgs
parents:
diff changeset
  1801
hgs
parents:
diff changeset
  1802
// ----------------------------------------------------
hgs
parents:
diff changeset
  1803
// CMceOneRowMessageListContainer::OptionsCommandSupported
hgs
parents:
diff changeset
  1804
// ----------------------------------------------------
hgs
parents:
diff changeset
  1805
TUint CMceOneRowMessageListContainer::OptionsCommandSupported() const
hgs
parents:
diff changeset
  1806
    {
hgs
parents:
diff changeset
  1807
    TUint listCommand = TMessageListCommandNone;
hgs
parents:
diff changeset
  1808
hgs
parents:
diff changeset
  1809
    if ( iTreeListBox )
hgs
parents:
diff changeset
  1810
        {
hgs
parents:
diff changeset
  1811
        TAknTreeItemID focused = iTreeListBox->FocusedItem();
hgs
parents:
diff changeset
  1812
        if ( focused )
hgs
parents:
diff changeset
  1813
            {
hgs
parents:
diff changeset
  1814
            if ( focused != KAknTreeIIDNone )
hgs
parents:
diff changeset
  1815
                {
hgs
parents:
diff changeset
  1816
                TAknTreeItemID parent = iTreeListBox->Parent( focused );
hgs
parents:
diff changeset
  1817
                // Focused item is a node and it is collapsed
hgs
parents:
diff changeset
  1818
                if ( iTreeListBox->IsNode( focused )
hgs
parents:
diff changeset
  1819
                    && !( iTreeListBox->IsExpanded( focused ) ) )
hgs
parents:
diff changeset
  1820
                    {
hgs
parents:
diff changeset
  1821
                    listCommand = TMessageListCommandExpand;
hgs
parents:
diff changeset
  1822
                    }
hgs
parents:
diff changeset
  1823
hgs
parents:
diff changeset
  1824
                // Focused item is expanded node or data row of the expanded node
hgs
parents:
diff changeset
  1825
                if ( ( iTreeListBox->IsNode( focused ) && iTreeListBox->IsExpanded( focused ) ) )
hgs
parents:
diff changeset
  1826
                    {
hgs
parents:
diff changeset
  1827
                    listCommand = TMessageListCommandCollapse1;
hgs
parents:
diff changeset
  1828
                    }
hgs
parents:
diff changeset
  1829
                else if ( iTreeListBox->IsLeaf( focused ) && parent != KAknTreeIIDRoot )
hgs
parents:
diff changeset
  1830
                    {
hgs
parents:
diff changeset
  1831
                    listCommand = TMessageListCommandCollapse2;
hgs
parents:
diff changeset
  1832
                    }
hgs
parents:
diff changeset
  1833
                }
hgs
parents:
diff changeset
  1834
            }
hgs
parents:
diff changeset
  1835
        else
hgs
parents:
diff changeset
  1836
            {
hgs
parents:
diff changeset
  1837
            // No item is focused
hgs
parents:
diff changeset
  1838
            }
hgs
parents:
diff changeset
  1839
        }
hgs
parents:
diff changeset
  1840
    return listCommand;
hgs
parents:
diff changeset
  1841
    }
hgs
parents:
diff changeset
  1842
hgs
parents:
diff changeset
  1843
hgs
parents:
diff changeset
  1844
// ----------------------------------------------------
hgs
parents:
diff changeset
  1845
// CMceOneRowMessageListContainer::HandleOptionsCommandL
hgs
parents:
diff changeset
  1846
// ----------------------------------------------------
hgs
parents:
diff changeset
  1847
void CMceOneRowMessageListContainer::HandleOptionsCommandL( TInt aCommand )
hgs
parents:
diff changeset
  1848
    {
hgs
parents:
diff changeset
  1849
    // Handle list specific options command
hgs
parents:
diff changeset
  1850
    iContainerFlags.ClearMceFlag( EMceOneRowFlagOptionsMenuOpen );
hgs
parents:
diff changeset
  1851
    switch( aCommand)
hgs
parents:
diff changeset
  1852
        {
hgs
parents:
diff changeset
  1853
        case TMessageListCommandCollapse1:
hgs
parents:
diff changeset
  1854
        case TMessageListCommandCollapse2:
hgs
parents:
diff changeset
  1855
            CollapseFocusedNode();
hgs
parents:
diff changeset
  1856
            break;
hgs
parents:
diff changeset
  1857
hgs
parents:
diff changeset
  1858
        case TMessageListCommandExpand:
hgs
parents:
diff changeset
  1859
            ExpandFocusedNode();
hgs
parents:
diff changeset
  1860
            break;
hgs
parents:
diff changeset
  1861
        default:
hgs
parents:
diff changeset
  1862
            break;
hgs
parents:
diff changeset
  1863
        }
hgs
parents:
diff changeset
  1864
    }
hgs
parents:
diff changeset
  1865
hgs
parents:
diff changeset
  1866
hgs
parents:
diff changeset
  1867
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1868
// CMceOneRowMessageListContainer::ExpandFocusedNode
hgs
parents:
diff changeset
  1869
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1870
//
hgs
parents:
diff changeset
  1871
void CMceOneRowMessageListContainer::ExpandFocusedNode()
hgs
parents:
diff changeset
  1872
    {
hgs
parents:
diff changeset
  1873
    if ( iTreeListBox )
hgs
parents:
diff changeset
  1874
        {
hgs
parents:
diff changeset
  1875
        // Get focused item ID.
hgs
parents:
diff changeset
  1876
        TAknTreeItemID focused = iTreeListBox->FocusedItem();
hgs
parents:
diff changeset
  1877
hgs
parents:
diff changeset
  1878
        // Check that focused item is a node and then expand it.
hgs
parents:
diff changeset
  1879
        if ( focused != KAknTreeIIDNone && iTreeListBox->IsNode( focused ) )
hgs
parents:
diff changeset
  1880
            {
hgs
parents:
diff changeset
  1881
            iTreeListBox->ExpandNode( focused, ETrue );
hgs
parents:
diff changeset
  1882
            }
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
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1888
// CMceOneRowMessageListContainer::CollapseFocusedNode
hgs
parents:
diff changeset
  1889
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1890
//
hgs
parents:
diff changeset
  1891
void CMceOneRowMessageListContainer::CollapseFocusedNode()
hgs
parents:
diff changeset
  1892
    {
hgs
parents:
diff changeset
  1893
    if ( iTreeListBox )
hgs
parents:
diff changeset
  1894
        {
hgs
parents:
diff changeset
  1895
        // Get focused item ID.
hgs
parents:
diff changeset
  1896
        TAknTreeItemID focused = iTreeListBox->FocusedItem();
hgs
parents:
diff changeset
  1897
hgs
parents:
diff changeset
  1898
        // Check that focused item is a node or a leaf
hgs
parents:
diff changeset
  1899
        if ( focused != KAknTreeIIDNone && iTreeListBox->IsNode( focused ) )
hgs
parents:
diff changeset
  1900
            {
hgs
parents:
diff changeset
  1901
            iTreeListBox->CollapseNode( focused, ETrue );
hgs
parents:
diff changeset
  1902
            }
hgs
parents:
diff changeset
  1903
        if ( iTreeListBox->IsLeaf( focused ) )
hgs
parents:
diff changeset
  1904
            {
hgs
parents:
diff changeset
  1905
            iTreeListBox->CollapseNode( iTreeListBox->Parent( focused ), ETrue );
hgs
parents:
diff changeset
  1906
            }
hgs
parents:
diff changeset
  1907
        }
hgs
parents:
diff changeset
  1908
    }
hgs
parents:
diff changeset
  1909
hgs
parents:
diff changeset
  1910
hgs
parents:
diff changeset
  1911
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1912
// CMceOneRowMessageListContainer::DateTimeFormatChangedL
hgs
parents:
diff changeset
  1913
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1914
//
hgs
parents:
diff changeset
  1915
void CMceOneRowMessageListContainer::DateTimeFormatChangedL( TInt aChangeFlag )
hgs
parents:
diff changeset
  1916
    {
hgs
parents:
diff changeset
  1917
    TInt change = aChangeFlag;
hgs
parents:
diff changeset
  1918
    if ( ( change & EChangesMidnightCrossover ))
hgs
parents:
diff changeset
  1919
        {
hgs
parents:
diff changeset
  1920
        ResetListbox();
hgs
parents:
diff changeset
  1921
        iListItems->RefreshArrayL();
hgs
parents:
diff changeset
  1922
        }
hgs
parents:
diff changeset
  1923
    else if ( ( change & EChangesLocale ))
hgs
parents:
diff changeset
  1924
        {
hgs
parents:
diff changeset
  1925
        TLocale locale;
hgs
parents:
diff changeset
  1926
        TDay startOfWeek = locale.StartOfWeek();
hgs
parents:
diff changeset
  1927
        if ( startOfWeek != iStartOfWeek )
hgs
parents:
diff changeset
  1928
            {
hgs
parents:
diff changeset
  1929
            iStartOfWeek = startOfWeek;
hgs
parents:
diff changeset
  1930
            ResetListbox();
hgs
parents:
diff changeset
  1931
            iListItems->RefreshArrayL();
hgs
parents:
diff changeset
  1932
            return;
hgs
parents:
diff changeset
  1933
            }
hgs
parents:
diff changeset
  1934
        
hgs
parents:
diff changeset
  1935
        TMsvSelectionOrdering listType = iListItems->SortType();
hgs
parents:
diff changeset
  1936
        TInt timeColumn = KMceColumn2;
hgs
parents:
diff changeset
  1937
        if ( listType.Sorting() == EMsvSortByDate ||
hgs
parents:
diff changeset
  1938
             listType.Sorting() == EMsvSortByDateReverse )
hgs
parents:
diff changeset
  1939
            {
hgs
parents:
diff changeset
  1940
            timeColumn = KMceColumn3;
hgs
parents:
diff changeset
  1941
            }
hgs
parents:
diff changeset
  1942
hgs
parents:
diff changeset
  1943
        TInt count = iListItems->MdcaCount();
hgs
parents:
diff changeset
  1944
        for (TInt i=0; i<count; i++)
hgs
parents:
diff changeset
  1945
            {
hgs
parents:
diff changeset
  1946
            TAknTreeItemID treeItemId = iListItems->TreeItemId( i );
hgs
parents:
diff changeset
  1947
            TMsvId itemId = iListItems->MsvItemId( treeItemId );
hgs
parents:
diff changeset
  1948
            if ( itemId > KErrNotFound && treeItemId > KAknTreeIIDNone )
hgs
parents:
diff changeset
  1949
                {
hgs
parents:
diff changeset
  1950
                // this is message, update time/date
hgs
parents:
diff changeset
  1951
                TBuf<KMceTextItemSize> buffer;
hgs
parents:
diff changeset
  1952
                iListItems->GetColumnTextL( i, timeColumn, buffer );
hgs
parents:
diff changeset
  1953
                iTreeListBox->SetTextL(
hgs
parents:
diff changeset
  1954
                    treeItemId,
hgs
parents:
diff changeset
  1955
                    buffer,
hgs
parents:
diff changeset
  1956
                    timeColumn-1,
hgs
parents:
diff changeset
  1957
                    EFalse );
hgs
parents:
diff changeset
  1958
                }
hgs
parents:
diff changeset
  1959
            }
hgs
parents:
diff changeset
  1960
        }
hgs
parents:
diff changeset
  1961
    }
hgs
parents:
diff changeset
  1962
hgs
parents:
diff changeset
  1963
hgs
parents:
diff changeset
  1964
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1965
// CMceOneRowMessageListContainer::SetSpecialMskL
hgs
parents:
diff changeset
  1966
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1967
//
hgs
parents:
diff changeset
  1968
TInt CMceOneRowMessageListContainer::SetSpecialMskL()
hgs
parents:
diff changeset
  1969
    {
hgs
parents:
diff changeset
  1970
    TInt resourceId = R_MCE_MSK_BUTTON_EMPTY;
hgs
parents:
diff changeset
  1971
    TAknTreeItemID focusedItem = iTreeListBox->FocusedItem();
hgs
parents:
diff changeset
  1972
hgs
parents:
diff changeset
  1973
    if ( GetMarkedItemsCountL() == 0 )
hgs
parents:
diff changeset
  1974
        {
hgs
parents:
diff changeset
  1975
        // Determine the MSK command depending on the focused item type and state.
hgs
parents:
diff changeset
  1976
        if ( focusedItem == KAknTreeIIDNone )
hgs
parents:
diff changeset
  1977
            {
hgs
parents:
diff changeset
  1978
            // No item focused.
hgs
parents:
diff changeset
  1979
            }
hgs
parents:
diff changeset
  1980
        else if ( iTreeListBox->IsNode( focusedItem ) )
hgs
parents:
diff changeset
  1981
            {
hgs
parents:
diff changeset
  1982
            if ( iTreeListBox->IsExpanded( focusedItem ) )
hgs
parents:
diff changeset
  1983
                {
hgs
parents:
diff changeset
  1984
                resourceId = R_MCE_QTN_MSK_COLLAPSE;
hgs
parents:
diff changeset
  1985
                }
hgs
parents:
diff changeset
  1986
            else
hgs
parents:
diff changeset
  1987
                {
hgs
parents:
diff changeset
  1988
                resourceId = R_MCE_QTN_MSK_EXPAND;
hgs
parents:
diff changeset
  1989
                }
hgs
parents:
diff changeset
  1990
            }
hgs
parents:
diff changeset
  1991
        else if ( iTreeListBox->IsLeaf( focusedItem ) )
hgs
parents:
diff changeset
  1992
            {
hgs
parents:
diff changeset
  1993
            resourceId = R_MCE_MSK_BUTTON_OPEN;
hgs
parents:
diff changeset
  1994
            }
hgs
parents:
diff changeset
  1995
        }
hgs
parents:
diff changeset
  1996
    else
hgs
parents:
diff changeset
  1997
        {
hgs
parents:
diff changeset
  1998
        resourceId = R_MCE_MSK_BUTTON_CONTEXT_OPTIONS;
hgs
parents:
diff changeset
  1999
        }
hgs
parents:
diff changeset
  2000
    return resourceId;
hgs
parents:
diff changeset
  2001
    }
hgs
parents:
diff changeset
  2002
hgs
parents:
diff changeset
  2003
hgs
parents:
diff changeset
  2004
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2005
// CMceOneRowMessageListContainer::UpdateEntryL
hgs
parents:
diff changeset
  2006
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2007
//
hgs
parents:
diff changeset
  2008
void CMceOneRowMessageListContainer::UpdateEntryL( TMsvId aEntryId )
hgs
parents:
diff changeset
  2009
    {
hgs
parents:
diff changeset
  2010
    MCELOGGER_ENTERFN("CMceOneRowMessageListContainer::UpdateEntryL");
hgs
parents:
diff changeset
  2011
    TInt itemIndex = iListItems->ItemIndex( aEntryId );
hgs
parents:
diff changeset
  2012
    MCELOGGER_WRITE_FORMAT("aEntryId: 0x%x", aEntryId );
hgs
parents:
diff changeset
  2013
    MCELOGGER_WRITE_FORMAT("itemIndex : %d", itemIndex );
hgs
parents:
diff changeset
  2014
    if ( itemIndex < 0 )
hgs
parents:
diff changeset
  2015
        {
hgs
parents:
diff changeset
  2016
        TMsvEntry entry;
hgs
parents:
diff changeset
  2017
        if ( iListItems->GetEntry( aEntryId, entry ) == KErrNone )
hgs
parents:
diff changeset
  2018
            {
hgs
parents:
diff changeset
  2019
            MCELOGGER_WRITE("entry found, try to add it");
hgs
parents:
diff changeset
  2020
            CMsvEntrySelection* selection = new(ELeave) CMsvEntrySelection();
hgs
parents:
diff changeset
  2021
            CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  2022
            selection->AppendL( aEntryId );
hgs
parents:
diff changeset
  2023
            EntryCreatedL( *selection, ETrue );
hgs
parents:
diff changeset
  2024
            CleanupStack::PopAndDestroy( selection );
hgs
parents:
diff changeset
  2025
            }
hgs
parents:
diff changeset
  2026
hgs
parents:
diff changeset
  2027
        MCELOGGER_LEAVEFN("CMceOneRowMessageListContainer::UpdateEntryL1");
hgs
parents:
diff changeset
  2028
        return;
hgs
parents:
diff changeset
  2029
        }
hgs
parents:
diff changeset
  2030
hgs
parents:
diff changeset
  2031
    TAknTreeItemID treeItemId = iListItems->TreeItemId( itemIndex );
hgs
parents:
diff changeset
  2032
hgs
parents:
diff changeset
  2033
    TMsvEntry entry;
hgs
parents:
diff changeset
  2034
    User::LeaveIfError( iListItems->GetEntry( aEntryId, entry ) );
hgs
parents:
diff changeset
  2035
    TInt foundIcon = KErrNotFound;
hgs
parents:
diff changeset
  2036
hgs
parents:
diff changeset
  2037
    CFbsBitmap* bitmap = NULL;
hgs
parents:
diff changeset
  2038
    CFbsBitmap* bitmapMask = NULL;
hgs
parents:
diff changeset
  2039
    foundIcon = iBitmapResolver->GetBitmapL( entry, bitmap, bitmapMask );
hgs
parents:
diff changeset
  2040
    if ( foundIcon < 0 )
hgs
parents:
diff changeset
  2041
        {
hgs
parents:
diff changeset
  2042
        foundIcon = iTreeListBox->AddIconL(
hgs
parents:
diff changeset
  2043
                bitmap,
hgs
parents:
diff changeset
  2044
                bitmapMask,
hgs
parents:
diff changeset
  2045
                EFalse,
hgs
parents:
diff changeset
  2046
                EAspectRatioPreserved );
hgs
parents:
diff changeset
  2047
        iBitmapResolver->AddTreeIconIdL( bitmap, foundIcon, entry.iMtm );
hgs
parents:
diff changeset
  2048
        }
hgs
parents:
diff changeset
  2049
hgs
parents:
diff changeset
  2050
hgs
parents:
diff changeset
  2051
    TBuf<KMceTextItemSize> bufferC1;
hgs
parents:
diff changeset
  2052
    TBuf<KMceTextItemSize> bufferC2;
hgs
parents:
diff changeset
  2053
    TBuf<KMceTextItemSize> bufferC3;
hgs
parents:
diff changeset
  2054
    iListItems->GetColumnTextL( itemIndex, KMceColumn1, bufferC1 );
hgs
parents:
diff changeset
  2055
    iListItems->GetColumnTextL( itemIndex, KMceColumn2, bufferC2 );
hgs
parents:
diff changeset
  2056
    iListItems->GetColumnTextL( itemIndex, KMceColumn3, bufferC3 );
hgs
parents:
diff changeset
  2057
hgs
parents:
diff changeset
  2058
    iTreeListBox->SetTextL(
hgs
parents:
diff changeset
  2059
        treeItemId,
hgs
parents:
diff changeset
  2060
        bufferC1,
hgs
parents:
diff changeset
  2061
        0,
hgs
parents:
diff changeset
  2062
        EFalse );
hgs
parents:
diff changeset
  2063
hgs
parents:
diff changeset
  2064
    if ( IsItemFolder( entry.Id() ))
hgs
parents:
diff changeset
  2065
        {
hgs
parents:
diff changeset
  2066
        iTreeListBox->SetTextL(
hgs
parents:
diff changeset
  2067
            treeItemId,
hgs
parents:
diff changeset
  2068
            bufferC3,
hgs
parents:
diff changeset
  2069
            1,
hgs
parents:
diff changeset
  2070
            EFalse );
hgs
parents:
diff changeset
  2071
        }
hgs
parents:
diff changeset
  2072
    else
hgs
parents:
diff changeset
  2073
        {
hgs
parents:
diff changeset
  2074
        iTreeListBox->SetTextL(
hgs
parents:
diff changeset
  2075
            treeItemId,
hgs
parents:
diff changeset
  2076
            bufferC2,
hgs
parents:
diff changeset
  2077
            1,
hgs
parents:
diff changeset
  2078
            EFalse );
hgs
parents:
diff changeset
  2079
        iTreeListBox->SetTextL(
hgs
parents:
diff changeset
  2080
            treeItemId,
hgs
parents:
diff changeset
  2081
            bufferC3,
hgs
parents:
diff changeset
  2082
            2,
hgs
parents:
diff changeset
  2083
            EFalse );
hgs
parents:
diff changeset
  2084
        }
hgs
parents:
diff changeset
  2085
hgs
parents:
diff changeset
  2086
    if ( foundIcon >= 0 )
hgs
parents:
diff changeset
  2087
        {
hgs
parents:
diff changeset
  2088
        iTreeListBox->SetIcon(
hgs
parents:
diff changeset
  2089
            treeItemId,
hgs
parents:
diff changeset
  2090
            CAknSingleColumnStyleTreeList::ELeaf,
hgs
parents:
diff changeset
  2091
            foundIcon,
hgs
parents:
diff changeset
  2092
            EFalse );
hgs
parents:
diff changeset
  2093
        TBool attachmentIcon = EFalse;
hgs
parents:
diff changeset
  2094
 
hgs
parents:
diff changeset
  2095
        if ( entry.Attachment() && entry.iMtm != KSenduiMtmMmsUid  
hgs
parents:
diff changeset
  2096
             && IsMailMtmTechnology(entry.iMtm ))
hgs
parents:
diff changeset
  2097
            {
hgs
parents:
diff changeset
  2098
            iTreeListBox->SetIcon(
hgs
parents:
diff changeset
  2099
                treeItemId,
hgs
parents:
diff changeset
  2100
                CAknSingleColumnStyleTreeList::EOptionalIcon1,
hgs
parents:
diff changeset
  2101
                iBitmapResolver->TreeIconId( EMceBitmapIndexAttachment ),
hgs
parents:
diff changeset
  2102
                EFalse );
hgs
parents:
diff changeset
  2103
            iTreeListBox->SetIcon(
hgs
parents:
diff changeset
  2104
                treeItemId,
hgs
parents:
diff changeset
  2105
                CAknSingleColumnStyleTreeList::EHighlightedOptionalIcon1,
hgs
parents:
diff changeset
  2106
                iBitmapResolver->TreeIconId( EMceBitmapIndexAttachmentFocus ),
hgs
parents:
diff changeset
  2107
                EFalse );
hgs
parents:
diff changeset
  2108
            attachmentIcon = ETrue;
hgs
parents:
diff changeset
  2109
            }
hgs
parents:
diff changeset
  2110
        if ( entry.iType == KUidMsvMessageEntry )
hgs
parents:
diff changeset
  2111
            {
hgs
parents:
diff changeset
  2112
            TMsvPriority entryPrio = entry.Priority();
hgs
parents:
diff changeset
  2113
            if ( entryPrio != EMsvMediumPriority )
hgs
parents:
diff changeset
  2114
                {
hgs
parents:
diff changeset
  2115
                TInt prioIcon = 0;
hgs
parents:
diff changeset
  2116
                TInt prioIconFocus = 0;
hgs
parents:
diff changeset
  2117
                if ( entryPrio == EMsvHighPriority )
hgs
parents:
diff changeset
  2118
                    {
hgs
parents:
diff changeset
  2119
                    prioIcon = iBitmapResolver->TreeIconId( EMceBitmapIndexPriorityHigh );
hgs
parents:
diff changeset
  2120
                    prioIconFocus = iBitmapResolver->TreeIconId( EMceBitmapIndexPriorityHighFocus );
hgs
parents:
diff changeset
  2121
                    }
hgs
parents:
diff changeset
  2122
                else
hgs
parents:
diff changeset
  2123
                    {
hgs
parents:
diff changeset
  2124
                    prioIcon = iBitmapResolver->TreeIconId( EMceBitmapIndexPriorityLow );
hgs
parents:
diff changeset
  2125
                    prioIconFocus = iBitmapResolver->TreeIconId( EMceBitmapIndexPriorityLowFocus );
hgs
parents:
diff changeset
  2126
                    }
hgs
parents:
diff changeset
  2127
hgs
parents:
diff changeset
  2128
                if ( attachmentIcon )
hgs
parents:
diff changeset
  2129
                    {
hgs
parents:
diff changeset
  2130
                    iTreeListBox->SetIcon(
hgs
parents:
diff changeset
  2131
                        treeItemId,
hgs
parents:
diff changeset
  2132
                        CAknSingleColumnStyleTreeList::EOptionalIcon2,
hgs
parents:
diff changeset
  2133
                        prioIcon,
hgs
parents:
diff changeset
  2134
                        EFalse );
hgs
parents:
diff changeset
  2135
                    iTreeListBox->SetIcon(
hgs
parents:
diff changeset
  2136
                        treeItemId,
hgs
parents:
diff changeset
  2137
                        CAknSingleColumnStyleTreeList::EHighlightedOptionalIcon2,
hgs
parents:
diff changeset
  2138
                        prioIconFocus,
hgs
parents:
diff changeset
  2139
                        EFalse );
hgs
parents:
diff changeset
  2140
                    }
hgs
parents:
diff changeset
  2141
                else
hgs
parents:
diff changeset
  2142
                    {
hgs
parents:
diff changeset
  2143
                    iTreeListBox->SetIcon(
hgs
parents:
diff changeset
  2144
                        treeItemId,
hgs
parents:
diff changeset
  2145
                        CAknSingleColumnStyleTreeList::EOptionalIcon1,
hgs
parents:
diff changeset
  2146
                        prioIcon,
hgs
parents:
diff changeset
  2147
                        EFalse );
hgs
parents:
diff changeset
  2148
                    iTreeListBox->SetIcon(
hgs
parents:
diff changeset
  2149
                        treeItemId,
hgs
parents:
diff changeset
  2150
                        CAknSingleColumnStyleTreeList::EHighlightedOptionalIcon1,
hgs
parents:
diff changeset
  2151
                        prioIconFocus,
hgs
parents:
diff changeset
  2152
                        EFalse );
hgs
parents:
diff changeset
  2153
                    }
hgs
parents:
diff changeset
  2154
                }
hgs
parents:
diff changeset
  2155
            }
hgs
parents:
diff changeset
  2156
        }
hgs
parents:
diff changeset
  2157
    iTreeListBox->EnableThirdColumn( treeItemId, !IsItemFolder( entry.Id() ), EFalse );
hgs
parents:
diff changeset
  2158
    iTreeListBox->SetEmphasis( treeItemId, entry.Unread(), EFalse );
hgs
parents:
diff changeset
  2159
    TAknTreeItemID parentId = iTreeListBox->Parent( treeItemId );
hgs
parents:
diff changeset
  2160
    if ( parentId > KAknTreeIIDRoot )
hgs
parents:
diff changeset
  2161
        {
hgs
parents:
diff changeset
  2162
        UpdateSubtitleIconL( parentId, EFalse );        
hgs
parents:
diff changeset
  2163
        }
hgs
parents:
diff changeset
  2164
    MCELOGGER_LEAVEFN("CMceOneRowMessageListContainer::UpdateEntryL2");
hgs
parents:
diff changeset
  2165
    }
hgs
parents:
diff changeset
  2166
hgs
parents:
diff changeset
  2167
hgs
parents:
diff changeset
  2168
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2169
// CMceOneRowMessageListContainer::EntryCreatedL
hgs
parents:
diff changeset
  2170
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2171
//
hgs
parents:
diff changeset
  2172
void CMceOneRowMessageListContainer::EntryCreatedL(
hgs
parents:
diff changeset
  2173
    CMsvEntrySelection& aSelection,
hgs
parents:
diff changeset
  2174
    TBool aDraw )
hgs
parents:
diff changeset
  2175
    {
hgs
parents:
diff changeset
  2176
    MCELOGGER_ENTERFN("CMceOneRowMessageListContainer::EntryCreatedL");
hgs
parents:
diff changeset
  2177
    TBool tFocus = false;
hgs
parents:
diff changeset
  2178
    for ( TInt i = 0; i < aSelection.Count(); i++ )
hgs
parents:
diff changeset
  2179
        {
hgs
parents:
diff changeset
  2180
        TMsvId itemId = aSelection[i];
hgs
parents:
diff changeset
  2181
        TMsvEntry tentry;
hgs
parents:
diff changeset
  2182
        iListItems->GetEntry( itemId, tentry);
hgs
parents:
diff changeset
  2183
        if ( iEmailFramework && 
hgs
parents:
diff changeset
  2184
             ( tentry.iMtm == KSenduiMtmImap4Uid || 
hgs
parents:
diff changeset
  2185
               tentry.iMtm == KSenduiMtmPop3Uid ||
hgs
parents:
diff changeset
  2186
               tentry.iMtm == KSenduiMtmSmtpUid ||
hgs
parents:
diff changeset
  2187
               tentry.iMtm.iUid == KUidMsgTypeCmailMtmVal ) )
hgs
parents:
diff changeset
  2188
            {
hgs
parents:
diff changeset
  2189
            continue;
hgs
parents:
diff changeset
  2190
            }
hgs
parents:
diff changeset
  2191
        MCELOGGER_WRITE_FORMAT("itemId: 0x%x", itemId );
hgs
parents:
diff changeset
  2192
        TInt itemsAdded = iListItems->EntryCreatedL( itemId );
hgs
parents:
diff changeset
  2193
        MCELOGGER_WRITE_FORMAT("itemsAdded: %d", itemsAdded );
hgs
parents:
diff changeset
  2194
        if ( itemsAdded < 1 )
hgs
parents:
diff changeset
  2195
            {
hgs
parents:
diff changeset
  2196
            //  item is hidden or otherwise we cound not find it, just ignore.
hgs
parents:
diff changeset
  2197
            break;
hgs
parents:
diff changeset
  2198
            }
hgs
parents:
diff changeset
  2199
hgs
parents:
diff changeset
  2200
        TInt itemIndex = iListItems->ItemIndex( itemId );
hgs
parents:
diff changeset
  2201
        MCELOGGER_WRITE_FORMAT("itemIndex: %d", itemIndex );
hgs
parents:
diff changeset
  2202
        TAknTreeItemID parentId = iListItems->ParentItemId( itemIndex );
hgs
parents:
diff changeset
  2203
hgs
parents:
diff changeset
  2204
        if ( itemsAdded == 2 && parentId == KAknTreeIIDNone )
hgs
parents:
diff changeset
  2205
            {
hgs
parents:
diff changeset
  2206
            TInt parentIndex = iListItems->ParentItemIndex( itemIndex );
hgs
parents:
diff changeset
  2207
            TBuf<KMceTextItemSize> subTitle;
hgs
parents:
diff changeset
  2208
            TInt itemType = iListItems->GetSubtitleTextL( parentIndex, subTitle );
hgs
parents:
diff changeset
  2209
            if ( itemType > EHCListTypeNone )
hgs
parents:
diff changeset
  2210
                {
hgs
parents:
diff changeset
  2211
                TUint32 flags = CAknSingleColumnStyleTreeList::EPersistent
hgs
parents:
diff changeset
  2212
                               | CAknSingleColumnStyleTreeList::EExpanded;
hgs
parents:
diff changeset
  2213
                iNodeId = iTreeListBox->AddSubtitleRowL( KAknTreeIIDRoot,
hgs
parents:
diff changeset
  2214
                    subTitle, flags, EFalse );
hgs
parents:
diff changeset
  2215
                iListItems->SetTreeItemId( parentIndex, iNodeId );
hgs
parents:
diff changeset
  2216
                UpdateSubtitleIconL( iNodeId, EFalse );
hgs
parents:
diff changeset
  2217
                MCELOGGER_WRITE_FORMAT("Added subtitle row : 0x%x", iNodeId );
hgs
parents:
diff changeset
  2218
                iTreeListBox->SetNonEmpty( iNodeId, ETrue, EFalse );
hgs
parents:
diff changeset
  2219
                }
hgs
parents:
diff changeset
  2220
            itemsAdded--;
hgs
parents:
diff changeset
  2221
            }
hgs
parents:
diff changeset
  2222
hgs
parents:
diff changeset
  2223
        if ( itemsAdded == 1 )
hgs
parents:
diff changeset
  2224
	        {
hgs
parents:
diff changeset
  2225
            AddEntryL( itemIndex );
hgs
parents:
diff changeset
  2226
            
hgs
parents:
diff changeset
  2227
            TMsvEntry entry;
hgs
parents:
diff changeset
  2228
            if ( iListItems->GetEntry( itemId, entry ) == KErrNone )
hgs
parents:
diff changeset
  2229
                {
hgs
parents:
diff changeset
  2230
                if (entry.Unread())
hgs
parents:
diff changeset
  2231
                    {
hgs
parents:
diff changeset
  2232
                    iAnchorItemId = itemId;
hgs
parents:
diff changeset
  2233
                    tFocus = true;
hgs
parents:
diff changeset
  2234
                    }
hgs
parents:
diff changeset
  2235
                else
hgs
parents:
diff changeset
  2236
                    {
hgs
parents:
diff changeset
  2237
                    tFocus = false;	
hgs
parents:
diff changeset
  2238
                    }
hgs
parents:
diff changeset
  2239
                }
hgs
parents:
diff changeset
  2240
            MCELOGGER_WRITE_FORMAT("Added entry itemIndex: %d", itemIndex );
hgs
parents:
diff changeset
  2241
            }
hgs
parents:
diff changeset
  2242
	        
hgs
parents:
diff changeset
  2243
              
hgs
parents:
diff changeset
  2244
    	}
hgs
parents:
diff changeset
  2245
    
hgs
parents:
diff changeset
  2246
    iTreeListBox->Sort( iListItems, CAknTreeList::ESaveFocus, ETrue );    
hgs
parents:
diff changeset
  2247
    if (tFocus == true)
hgs
parents:
diff changeset
  2248
    	{
hgs
parents:
diff changeset
  2249
    	SetCurrentItemIdL( iAnchorItemId );    	
hgs
parents:
diff changeset
  2250
    	}
hgs
parents:
diff changeset
  2251
    
hgs
parents:
diff changeset
  2252
    if ( aDraw )
hgs
parents:
diff changeset
  2253
        {
hgs
parents:
diff changeset
  2254
        RefreshListbox();
hgs
parents:
diff changeset
  2255
        }
hgs
parents:
diff changeset
  2256
        
hgs
parents:
diff changeset
  2257
    MCELOGGER_LEAVEFN("CMceOneRowMessageListContainer::EntryCreatedL");
hgs
parents:
diff changeset
  2258
    }
hgs
parents:
diff changeset
  2259
hgs
parents:
diff changeset
  2260
hgs
parents:
diff changeset
  2261
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2262
// CMceOneRowMessageListContainer::EntryDeletedL
hgs
parents:
diff changeset
  2263
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2264
//
hgs
parents:
diff changeset
  2265
void CMceOneRowMessageListContainer::EntryDeletedL(
hgs
parents:
diff changeset
  2266
    CMsvEntrySelection& aSelection,
hgs
parents:
diff changeset
  2267
    TBool aDraw )
hgs
parents:
diff changeset
  2268
    {
hgs
parents:
diff changeset
  2269
    TInt count = aSelection.Count();
hgs
parents:
diff changeset
  2270
    for (TInt i=0; i<count; i++)
hgs
parents:
diff changeset
  2271
        {
hgs
parents:
diff changeset
  2272
        TAknTreeItemID treeItemId = KAknTreeIIDNone;
hgs
parents:
diff changeset
  2273
        TAknTreeItemID parentTreeItemId = KAknTreeIIDNone;
hgs
parents:
diff changeset
  2274
        TBool deleteParent = iListItems->EntryDeletedL( aSelection[i], treeItemId, parentTreeItemId );
hgs
parents:
diff changeset
  2275
        if ( deleteParent )
hgs
parents:
diff changeset
  2276
            {
hgs
parents:
diff changeset
  2277
            // this removes node and child
hgs
parents:
diff changeset
  2278
            iTreeListBox->RemoveItem( parentTreeItemId, EFalse );
hgs
parents:
diff changeset
  2279
            TInt deleteSubtitle = iSelectedSubTitles.Find( parentTreeItemId );
hgs
parents:
diff changeset
  2280
            if ( deleteSubtitle != KErrNotFound )
hgs
parents:
diff changeset
  2281
                 {
hgs
parents:
diff changeset
  2282
                 iSelectedSubTitles.Remove( deleteSubtitle );
hgs
parents:
diff changeset
  2283
                 }
hgs
parents:
diff changeset
  2284
            }
hgs
parents:
diff changeset
  2285
        else if ( treeItemId > KAknTreeIIDRoot )
hgs
parents:
diff changeset
  2286
            {
hgs
parents:
diff changeset
  2287
            // delete only one child, there are other children left so leave node untouched
hgs
parents:
diff changeset
  2288
            iTreeListBox->RemoveItem( treeItemId, EFalse );
hgs
parents:
diff changeset
  2289
            if ( parentTreeItemId > KAknTreeIIDRoot &&
hgs
parents:
diff changeset
  2290
                 iSelectedSubTitles.Find( parentTreeItemId ) == KErrNotFound )
hgs
parents:
diff changeset
  2291
                {
hgs
parents:
diff changeset
  2292
                iSelectedSubTitles.AppendL( parentTreeItemId ) ;                           
hgs
parents:
diff changeset
  2293
                }
hgs
parents:
diff changeset
  2294
            }
hgs
parents:
diff changeset
  2295
        }
hgs
parents:
diff changeset
  2296
hgs
parents:
diff changeset
  2297
    iDeletedMessges += count;  
hgs
parents:
diff changeset
  2298
    if ( iSelectedEntries->Count() == iDeletedMessges )
hgs
parents:
diff changeset
  2299
        {
hgs
parents:
diff changeset
  2300
        TInt subTitleCount = iSelectedSubTitles.Count();
hgs
parents:
diff changeset
  2301
        for ( TInt i = 0; i < subTitleCount; i++ )
hgs
parents:
diff changeset
  2302
            {
hgs
parents:
diff changeset
  2303
            UpdateSubtitleIconL( iSelectedSubTitles[i], EFalse );
hgs
parents:
diff changeset
  2304
            }
hgs
parents:
diff changeset
  2305
        iDeletedMessges = 0;
hgs
parents:
diff changeset
  2306
        iSelectedSubTitles.Reset();
hgs
parents:
diff changeset
  2307
        }
hgs
parents:
diff changeset
  2308
    }
hgs
parents:
diff changeset
  2309
hgs
parents:
diff changeset
  2310
hgs
parents:
diff changeset
  2311
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2312
// CMceOneRowMessageListContainer::UpdateSubtitleIconL
hgs
parents:
diff changeset
  2313
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2314
//
hgs
parents:
diff changeset
  2315
void CMceOneRowMessageListContainer::UpdateSubtitleIconL( TAknTreeItemID aSubtitleID, TBool aReadStatusKnown )
hgs
parents:
diff changeset
  2316
    {
hgs
parents:
diff changeset
  2317
    TBool hasUnread = EFalse;
hgs
parents:
diff changeset
  2318
    if ( aReadStatusKnown )
hgs
parents:
diff changeset
  2319
        {
hgs
parents:
diff changeset
  2320
        hasUnread = aReadStatusKnown;
hgs
parents:
diff changeset
  2321
        }
hgs
parents:
diff changeset
  2322
    else
hgs
parents:
diff changeset
  2323
        {
hgs
parents:
diff changeset
  2324
        hasUnread = iListItems->FindUnreadMessageUnderSubtitleL( aSubtitleID );        
hgs
parents:
diff changeset
  2325
        }
hgs
parents:
diff changeset
  2326
    
hgs
parents:
diff changeset
  2327
    TInt iconID = GetSubtitleIcon( hasUnread );
hgs
parents:
diff changeset
  2328
hgs
parents:
diff changeset
  2329
    iTreeListBox->SetIcon(
hgs
parents:
diff changeset
  2330
        aSubtitleID,
hgs
parents:
diff changeset
  2331
        CAknSingleColumnStyleTreeList::EExpandedNode,
hgs
parents:
diff changeset
  2332
        iconID,
hgs
parents:
diff changeset
  2333
        EFalse );
hgs
parents:
diff changeset
  2334
hgs
parents:
diff changeset
  2335
    iTreeListBox->SetIcon(
hgs
parents:
diff changeset
  2336
        aSubtitleID,
hgs
parents:
diff changeset
  2337
        CAknSingleColumnStyleTreeList::ECollapsedNode,
hgs
parents:
diff changeset
  2338
        iconID,
hgs
parents:
diff changeset
  2339
        EFalse );        
hgs
parents:
diff changeset
  2340
    }
hgs
parents:
diff changeset
  2341
hgs
parents:
diff changeset
  2342
hgs
parents:
diff changeset
  2343
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2344
//CMceOneRowMessageListContainer::HandleShortcutForSearchL( const TKeyEvent& aKeyEvent )
hgs
parents:
diff changeset
  2345
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2346
//
hgs
parents:
diff changeset
  2347
void CMceOneRowMessageListContainer::HandleShortcutForSearchL( const TKeyEvent& aKeyEvent )
hgs
parents:
diff changeset
  2348
    {
hgs
parents:
diff changeset
  2349
    // in remote mailbox key has been pressed, find item if sorted
hgs
parents:
diff changeset
  2350
    // by subject or sender
hgs
parents:
diff changeset
  2351
    TBuf<KMceTextBufferLength> text;
hgs
parents:
diff changeset
  2352
    text.Zero();
hgs
parents:
diff changeset
  2353
    if ( iT9Interface->LastEnteredKey() != ( TInt ) aKeyEvent.iScanCode )
hgs
parents:
diff changeset
  2354
        {                    
hgs
parents:
diff changeset
  2355
        iT9Interface->ClearCurrentWord();
hgs
parents:
diff changeset
  2356
        }      
hgs
parents:
diff changeset
  2357
    iT9Interface->AppendKeyPress( (TPtiKey)aKeyEvent.iScanCode );                
hgs
parents:
diff changeset
  2358
    text = iT9Interface->CurrentWord();
hgs
parents:
diff changeset
  2359
    
hgs
parents:
diff changeset
  2360
    iOwningView.FindAndSelectEntryL( text );
hgs
parents:
diff changeset
  2361
    iT9Timer->Start();       
hgs
parents:
diff changeset
  2362
    }
hgs
parents:
diff changeset
  2363
hgs
parents:
diff changeset
  2364
hgs
parents:
diff changeset
  2365
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2366
//CMceOneRowMessageListContainer::HasHandleStarKeyDoneL()
hgs
parents:
diff changeset
  2367
//------------------------------------------------------------------------------- 
hgs
parents:
diff changeset
  2368
//
hgs
parents:
diff changeset
  2369
TBool CMceOneRowMessageListContainer::HasHandleStarKeyDoneL()
hgs
parents:
diff changeset
  2370
    {
hgs
parents:
diff changeset
  2371
    TBool starkeyIsHandled = EFalse;
hgs
parents:
diff changeset
  2372
    if ( StateCanBeChangedByStarKeyL() )
hgs
parents:
diff changeset
  2373
        {
hgs
parents:
diff changeset
  2374
        if ( IsSortByDate() )
hgs
parents:
diff changeset
  2375
            {
hgs
parents:
diff changeset
  2376
            MarkReadUnreadWithStarKeyL();
hgs
parents:
diff changeset
  2377
            }
hgs
parents:
diff changeset
  2378
        else
hgs
parents:
diff changeset
  2379
            {
hgs
parents:
diff changeset
  2380
            // if sort by anything else other than by Date, handle focus change          
hgs
parents:
diff changeset
  2381
            TAknTreeItemID subtitle = iTreeListBox->Parent(
hgs
parents:
diff changeset
  2382
                iTreeListBox->FocusedItem() );
hgs
parents:
diff changeset
  2383
            if ( subtitle > KAknTreeIIDRoot )
hgs
parents:
diff changeset
  2384
                {
hgs
parents:
diff changeset
  2385
                TInt itemIndex = iTreeListBox->VisibleItemIndex( subtitle );
hgs
parents:
diff changeset
  2386
                if ( itemIndex  < 0 )
hgs
parents:
diff changeset
  2387
                    {
hgs
parents:
diff changeset
  2388
                    iTreeListBox->SetFocusedItem( subtitle, 
hgs
parents:
diff changeset
  2389
                        KMceFocusOffsetTopView, ETrue  );                          
hgs
parents:
diff changeset
  2390
                    }
hgs
parents:
diff changeset
  2391
                else
hgs
parents:
diff changeset
  2392
                    {
hgs
parents:
diff changeset
  2393
                    iTreeListBox->SetFocusedItem( subtitle, itemIndex , ETrue );
hgs
parents:
diff changeset
  2394
                    }
hgs
parents:
diff changeset
  2395
                }
hgs
parents:
diff changeset
  2396
            else if ( subtitle == KAknTreeIIDRoot )
hgs
parents:
diff changeset
  2397
                {
hgs
parents:
diff changeset
  2398
                TAknTreeItemID firstItem = iTreeListBox->Child( 
hgs
parents:
diff changeset
  2399
                    KAknTreeIIDRoot, KMceFirstItemIndex );
hgs
parents:
diff changeset
  2400
                iTreeListBox->SetFocusedItem( firstItem, 
hgs
parents:
diff changeset
  2401
                    KMceFocusOffsetTopView, ETrue  );        
hgs
parents:
diff changeset
  2402
                }
hgs
parents:
diff changeset
  2403
            }
hgs
parents:
diff changeset
  2404
        starkeyIsHandled = ETrue;
hgs
parents:
diff changeset
  2405
        } 
hgs
parents:
diff changeset
  2406
    return starkeyIsHandled;
hgs
parents:
diff changeset
  2407
    }
hgs
parents:
diff changeset
  2408
hgs
parents:
diff changeset
  2409
hgs
parents:
diff changeset
  2410
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2411
//CMceOneRowMessageListContainer::MarkReadUnreadWithStarKeyL()
hgs
parents:
diff changeset
  2412
//------------------------------------------------------------------------------- 
hgs
parents:
diff changeset
  2413
//
hgs
parents:
diff changeset
  2414
void CMceOneRowMessageListContainer::MarkReadUnreadWithStarKeyL()
hgs
parents:
diff changeset
  2415
    {             
hgs
parents:
diff changeset
  2416
    if ( CurrentItemType() == EMessageListItemMsvItem )
hgs
parents:
diff changeset
  2417
        {
hgs
parents:
diff changeset
  2418
        MarkItemSelectionL();
hgs
parents:
diff changeset
  2419
        if( iOwningView.IsItemUnread( CurrentItemId() ) ) 
hgs
parents:
diff changeset
  2420
            {
hgs
parents:
diff changeset
  2421
            iOwningView.HandleCommandL( EMceCmdMarkAsRead );
hgs
parents:
diff changeset
  2422
            }
hgs
parents:
diff changeset
  2423
        else
hgs
parents:
diff changeset
  2424
            {
hgs
parents:
diff changeset
  2425
            iOwningView.HandleCommandL( EMceCmdMarkAsUnread );
hgs
parents:
diff changeset
  2426
            }   
hgs
parents:
diff changeset
  2427
        }
hgs
parents:
diff changeset
  2428
    }
hgs
parents:
diff changeset
  2429
hgs
parents:
diff changeset
  2430
hgs
parents:
diff changeset
  2431
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2432
//CMceOneRowMessageListContainer::IsSortByDate()
hgs
parents:
diff changeset
  2433
//------------------------------------------------------------------------------- 
hgs
parents:
diff changeset
  2434
//
hgs
parents:
diff changeset
  2435
TBool CMceOneRowMessageListContainer::IsSortByDate()
hgs
parents:
diff changeset
  2436
    {                               
hgs
parents:
diff changeset
  2437
    TMsvSelectionOrdering ordering = iListItems->SortType();
hgs
parents:
diff changeset
  2438
    return ( ( ordering.Sorting() == EMsvSortByDateReverse) || ( ordering.Sorting() == EMsvSortByDate ) );
hgs
parents:
diff changeset
  2439
    }
hgs
parents:
diff changeset
  2440
hgs
parents:
diff changeset
  2441
hgs
parents:
diff changeset
  2442
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2443
// CMceOneRowMessageListContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
hgs
parents:
diff changeset
  2444
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  2445
void CMceOneRowMessageListContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
hgs
parents:
diff changeset
  2446
    {
hgs
parents:
diff changeset
  2447
    if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
hgs
parents:
diff changeset
  2448
        {
hgs
parents:
diff changeset
  2449
        iOwningView.SetMSKButtonL();
hgs
parents:
diff changeset
  2450
        iOwningView.SetCurrentItemId();
hgs
parents:
diff changeset
  2451
        if ( ( iOwningView.IsMSKMailBox() ||
hgs
parents:
diff changeset
  2452
        		iListItems->FolderId() == KMsvDraftEntryId ) && 
hgs
parents:
diff changeset
  2453
        		iTreeListBox->ChildCount( KAknTreeIIDRoot ) == 0 ) 
hgs
parents:
diff changeset
  2454
            {
hgs
parents:
diff changeset
  2455
            iOwningView.ProcessCommandL( EAknSoftkeyContextOptions );
hgs
parents:
diff changeset
  2456
            }
hgs
parents:
diff changeset
  2457
        }
hgs
parents:
diff changeset
  2458
    if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
hgs
parents:
diff changeset
  2459
        {
hgs
parents:
diff changeset
  2460
        if ( iOwningView.IsMSKMailBox() )
hgs
parents:
diff changeset
  2461
            {
hgs
parents:
diff changeset
  2462
            iOwningView.CancelMailboxTimer();
hgs
parents:
diff changeset
  2463
            }
hgs
parents:
diff changeset
  2464
        }
hgs
parents:
diff changeset
  2465
    iTreeListBox->HandlePointerEventL( aPointerEvent );
hgs
parents:
diff changeset
  2466
    }
hgs
parents:
diff changeset
  2467
hgs
parents:
diff changeset
  2468
hgs
parents:
diff changeset
  2469
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2470
// CMceOneRowMessageListContainer::SetContainerFlag
hgs
parents:
diff changeset
  2471
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2472
//
hgs
parents:
diff changeset
  2473
void CMceOneRowMessageListContainer::SetContainerFlag( TMceContainerFlags aFlag, TBool aState )
hgs
parents:
diff changeset
  2474
    {
hgs
parents:
diff changeset
  2475
    switch ( aFlag )
hgs
parents:
diff changeset
  2476
        {
hgs
parents:
diff changeset
  2477
        case EMceOneRowFlagOptionsMenuOpen:
hgs
parents:
diff changeset
  2478
            if ( !aState )
hgs
parents:
diff changeset
  2479
                {
hgs
parents:
diff changeset
  2480
                iContainerFlags.ClearMceFlag( EMceOneRowFlagOptionsMenuOpen );        
hgs
parents:
diff changeset
  2481
                }
hgs
parents:
diff changeset
  2482
            else
hgs
parents:
diff changeset
  2483
                {
hgs
parents:
diff changeset
  2484
                iContainerFlags.SetMceFlag( EMceOneRowFlagOptionsMenuOpen );        
hgs
parents:
diff changeset
  2485
                }
hgs
parents:
diff changeset
  2486
            break;
hgs
parents:
diff changeset
  2487
hgs
parents:
diff changeset
  2488
        case EMceOneRowFlagFirstSubtitleOpen:
hgs
parents:
diff changeset
  2489
            if ( !aState )
hgs
parents:
diff changeset
  2490
                {
hgs
parents:
diff changeset
  2491
                iContainerFlags.ClearMceFlag( EMceOneRowFlagFirstSubtitleOpen );        
hgs
parents:
diff changeset
  2492
                }
hgs
parents:
diff changeset
  2493
            else
hgs
parents:
diff changeset
  2494
                {
hgs
parents:
diff changeset
  2495
                iContainerFlags.SetMceFlag( EMceOneRowFlagFirstSubtitleOpen );        
hgs
parents:
diff changeset
  2496
                }
hgs
parents:
diff changeset
  2497
            break;
hgs
parents:
diff changeset
  2498
hgs
parents:
diff changeset
  2499
        default:
hgs
parents:
diff changeset
  2500
            break;
hgs
parents:
diff changeset
  2501
        }
hgs
parents:
diff changeset
  2502
    }
hgs
parents:
diff changeset
  2503
hgs
parents:
diff changeset
  2504
hgs
parents:
diff changeset
  2505
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2506
// CMceOneRowMessageListContainer::UpdateIconArrayL
hgs
parents:
diff changeset
  2507
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  2508
//
hgs
parents:
diff changeset
  2509
void CMceOneRowMessageListContainer::UpdateIconArrayL( )
hgs
parents:
diff changeset
  2510
    {
hgs
parents:
diff changeset
  2511
    MCELOGGER_ENTERFN("CMceOneRowMessageListContainer::UpdateIconsInListL");
hgs
parents:
diff changeset
  2512
    
hgs
parents:
diff changeset
  2513
    iBitmapResolver->UpdateIconArrayL( iTreeListBox );
hgs
parents:
diff changeset
  2514
    
hgs
parents:
diff changeset
  2515
    const TInt count = iListItems->MdcaCount();
hgs
parents:
diff changeset
  2516
    
hgs
parents:
diff changeset
  2517
    for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
  2518
        {
hgs
parents:
diff changeset
  2519
        TMsvId entryId = iListItems->ItemId(i);
hgs
parents:
diff changeset
  2520
        if ( entryId > KErrNotFound ) // If KErrNotFound, then this is subtitle?
hgs
parents:
diff changeset
  2521
            {
hgs
parents:
diff changeset
  2522
            TAknTreeItemID treeItemId = iListItems->TreeItemId( i );
hgs
parents:
diff changeset
  2523
hgs
parents:
diff changeset
  2524
            TMsvEntry entry;
hgs
parents:
diff changeset
  2525
            // Because of the delay in async events from middeleware,
hgs
parents:
diff changeset
  2526
	    // some times tree list will have some entry, that is not
hgs
parents:
diff changeset
  2527
    	    // present in message store actually, but present here.
hgs
parents:
diff changeset
  2528
	    // so skip the processing for entries that are not presnt in
hgs
parents:
diff changeset
  2529
	    // message store. Tree list will be updated once the delayed event will
hgs
parents:
diff changeset
  2530
	    // be received.
hgs
parents:
diff changeset
  2531
            TRAPD(err, iListItems->GetEntry( entryId, entry ));
hgs
parents:
diff changeset
  2532
            if(err == KErrNotFound)
hgs
parents:
diff changeset
  2533
                {
hgs
parents:
diff changeset
  2534
                continue;
hgs
parents:
diff changeset
  2535
                }
hgs
parents:
diff changeset
  2536
            else
hgs
parents:
diff changeset
  2537
                {
hgs
parents:
diff changeset
  2538
                User::LeaveIfError(err);
hgs
parents:
diff changeset
  2539
                }
hgs
parents:
diff changeset
  2540
            TInt foundIcon = KErrNotFound;
hgs
parents:
diff changeset
  2541
hgs
parents:
diff changeset
  2542
            CFbsBitmap* bitmap = NULL;
hgs
parents:
diff changeset
  2543
            CFbsBitmap* bitmapMask = NULL;
hgs
parents:
diff changeset
  2544
            foundIcon = iBitmapResolver->GetBitmapL( entry, bitmap, bitmapMask );
hgs
parents:
diff changeset
  2545
            if ( foundIcon < 0 )
hgs
parents:
diff changeset
  2546
                {
hgs
parents:
diff changeset
  2547
                foundIcon = iTreeListBox->AddIconL(
hgs
parents:
diff changeset
  2548
                        bitmap,
hgs
parents:
diff changeset
  2549
                        bitmapMask,
hgs
parents:
diff changeset
  2550
                        EFalse,
hgs
parents:
diff changeset
  2551
                        EAspectRatioPreserved );
hgs
parents:
diff changeset
  2552
                iBitmapResolver->AddTreeIconIdL( bitmap, foundIcon, entry.iMtm );
hgs
parents:
diff changeset
  2553
                }
hgs
parents:
diff changeset
  2554
hgs
parents:
diff changeset
  2555
            if ( foundIcon >= 0 )
hgs
parents:
diff changeset
  2556
                {
hgs
parents:
diff changeset
  2557
                iTreeListBox->SetIcon(
hgs
parents:
diff changeset
  2558
                    treeItemId,
hgs
parents:
diff changeset
  2559
                    CAknSingleColumnStyleTreeList::ELeaf,
hgs
parents:
diff changeset
  2560
                    foundIcon,
hgs
parents:
diff changeset
  2561
                    EFalse );
hgs
parents:
diff changeset
  2562
                }
hgs
parents:
diff changeset
  2563
            }
hgs
parents:
diff changeset
  2564
        }
hgs
parents:
diff changeset
  2565
    MCELOGGER_LEAVEFN("CMceOneRowMessageListContainer::UpdateIconsInListL");
hgs
parents:
diff changeset
  2566
    }
hgs
parents:
diff changeset
  2567
// ----------------------------------------------------
hgs
parents:
diff changeset
  2568
// CMceOneRowMessageListContainer::HandleOperationCompletedL
hgs
parents:
diff changeset
  2569
// ----------------------------------------------------
hgs
parents:
diff changeset
  2570
void CMceOneRowMessageListContainer::HandleOperationCompletedL()
hgs
parents:
diff changeset
  2571
    {
hgs
parents:
diff changeset
  2572
hgs
parents:
diff changeset
  2573
       if(iLastOperationType == EMessageListOperationConnect )
hgs
parents:
diff changeset
  2574
         {                  
hgs
parents:
diff changeset
  2575
         iAnchorItemIndex=1;
hgs
parents:
diff changeset
  2576
         iAnchorItemId = iListItems->ItemId( iAnchorItemIndex );
hgs
parents:
diff changeset
  2577
         SetCurrentItemIdL( iAnchorItemId );
hgs
parents:
diff changeset
  2578
         }
hgs
parents:
diff changeset
  2579
    }
hgs
parents:
diff changeset
  2580
hgs
parents:
diff changeset
  2581
// ----------------------------------------------------
hgs
parents:
diff changeset
  2582
// CMceOneRowMessageListContainer::IsMailMtmTechnology
hgs
parents:
diff changeset
  2583
// ----------------------------------------------------
hgs
parents:
diff changeset
  2584
TBool CMceOneRowMessageListContainer::IsMailMtmTechnology( TUid aMtm )const
hgs
parents:
diff changeset
  2585
    {
hgs
parents:
diff changeset
  2586
    TBool isMailMtm = EFalse;
hgs
parents:
diff changeset
  2587
    if ( aMtm.iUid != 0 && aMtm != KUidMsvLocalServiceMtm &&
hgs
parents:
diff changeset
  2588
            iUiRegistry->IsPresent( aMtm) )
hgs
parents:
diff changeset
  2589
        {
hgs
parents:
diff changeset
  2590
        // get MTM technology type
hgs
parents:
diff changeset
  2591
        TUid technologyType = iUiRegistry->TechnologyTypeUid( aMtm);
hgs
parents:
diff changeset
  2592
        isMailMtm = ( KMailTechnologyTypeUid == technologyType );
hgs
parents:
diff changeset
  2593
        }
hgs
parents:
diff changeset
  2594
    return isMailMtm;
hgs
parents:
diff changeset
  2595
    }
hgs
parents:
diff changeset
  2596
// ----------------------------------------------------
hgs
parents:
diff changeset
  2597
// CMceOneRowMessageListContainer::SetMarkingModeOff
hgs
parents:
diff changeset
  2598
// ----------------------------------------------------
hgs
parents:
diff changeset
  2599
void CMceOneRowMessageListContainer::SetMarkingModeOff()
hgs
parents:
diff changeset
  2600
    {
hgs
parents:
diff changeset
  2601
    if( iTreeListBox )
hgs
parents:
diff changeset
  2602
        {
hgs
parents:
diff changeset
  2603
        iTreeListBox->SetMarkingMode( EFalse );
hgs
parents:
diff changeset
  2604
        }
hgs
parents:
diff changeset
  2605
    }   
hgs
parents:
diff changeset
  2606
hgs
parents:
diff changeset
  2607
//  End of File