mobilemessaging/smum/simdialogplugins/defaultsimdlg/src/smssimdialog.cpp
author hgs
Wed, 03 Nov 2010 09:52:46 +0530
changeset 79 2981cb3aa489
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2009 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: sms sim dlg implementation
hgs
parents:
diff changeset
    15
 *
hgs
parents:
diff changeset
    16
 */
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// INCLUDES
hgs
parents:
diff changeset
    21
#include <eikmenup.h>
hgs
parents:
diff changeset
    22
#include <aknViewAppUi.h>               // iAvkonViewAppUi
hgs
parents:
diff changeset
    23
#include <AknWaitDialog.h>              // CAknWaitDialog
hgs
parents:
diff changeset
    24
#include <eikprogi.h>                   // CEikProgressInfo
hgs
parents:
diff changeset
    25
#include <AknQueryDialog.h>             // CAknQueryDialog
hgs
parents:
diff changeset
    26
#include <aknlists.h>
hgs
parents:
diff changeset
    27
#include <StringLoader.h>               // StringLoader
hgs
parents:
diff changeset
    28
#include <avkon.mbg>                    // bitmaps
hgs
parents:
diff changeset
    29
#include <akntitle.h>                   // CAknTitlePane
hgs
parents:
diff changeset
    30
#include <AknIconArray.h>               // CAknIconArray
hgs
parents:
diff changeset
    31
#include <hlplch.h>                     // For HlpLauncher 
hgs
parents:
diff changeset
    32
#include <bldvariant.hrh>
hgs
parents:
diff changeset
    33
#include <featmgr.h>                    // FeatureManager
hgs
parents:
diff changeset
    34
#include <data_caging_path_literals.hrh>
hgs
parents:
diff changeset
    35
// message includes
hgs
parents:
diff changeset
    36
#include <msvapi.h>                     // for CMsvSession
hgs
parents:
diff changeset
    37
#include <akninputblock.h>				// CAknInputBlock
hgs
parents:
diff changeset
    38
#include <MsgFolderSelectionDialog.h>   // CMsgFolderSelectionDialog
hgs
parents:
diff changeset
    39
#include <MuiuOperationWait.h>          // CMuiuOperationWait
hgs
parents:
diff changeset
    40
#include <muiu.mbg>                     // bitmaps
hgs
parents:
diff changeset
    41
#include <smscmds.h>                    // for async sms commands
hgs
parents:
diff changeset
    42
#include <smutset.h>                    // for TSmsProgress
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
#include <defaultsimdialog.rsg>                     // for resource ids
hgs
parents:
diff changeset
    45
#include <csxhelp/mce.hlp.hrh>
hgs
parents:
diff changeset
    46
#include <aknconsts.h>                  // KAvkonBitmapFile
hgs
parents:
diff changeset
    47
#include <AknsUtils.h>
hgs
parents:
diff changeset
    48
#include <AknIconUtils.h> 				// AknIconUtils::AvkonIconFileName()
hgs
parents:
diff changeset
    49
#include <AknsConstants.h>
hgs
parents:
diff changeset
    50
#include <AknUtils.h>
hgs
parents:
diff changeset
    51
#include <aknnotewrappers.h>              //for displayingnote
hgs
parents:
diff changeset
    52
#include <Profile.hrh>                    // for profile state
hgs
parents:
diff changeset
    53
#include <ProfileEngineSDKCRKeys.h>
hgs
parents:
diff changeset
    54
#include <centralrepository.h>    
hgs
parents:
diff changeset
    55
#include <bautils.h>  // BaflUtils
hgs
parents:
diff changeset
    56
#include <ConeResLoader.h> // RConeResourceLoader
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
#include "simdeletecopyoperation.h"    // for CSimDeleteCopyOperation
hgs
parents:
diff changeset
    59
#include "SMSU.H"                          // for CSmsMtmUi
hgs
parents:
diff changeset
    60
#include "smssimdialog.h"                  // for CSmsSimDialog
hgs
parents:
diff changeset
    61
#include "SMSU.HRH"            // for command ids
hgs
parents:
diff changeset
    62
//For logging
hgs
parents:
diff changeset
    63
#include "SmumLogging.h"
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
//  LOCAL CONSTANTS AND MACROS
hgs
parents:
diff changeset
    66
const TInt KSimMessageBitmapArrayGranularity = 4;
hgs
parents:
diff changeset
    67
const TInt KSimMessageTempArrayGranularity = 4;
hgs
parents:
diff changeset
    68
const TInt KSmumSimDialogMessageBitmapIndex = 1;
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
_LIT( KSimDlgResourceFile, "defaultsimdialog.rsc" );
hgs
parents:
diff changeset
    71
_LIT( KMuiuBitmapFile, "Muiu.MBM" );
hgs
parents:
diff changeset
    72
_LIT( KSmsiMarkReplacement, "1");
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
//
hgs
parents:
diff changeset
    75
//
hgs
parents:
diff changeset
    76
// CSimMessageArray
hgs
parents:
diff changeset
    77
//
hgs
parents:
diff changeset
    78
//
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
// ----------------------------------------------------
hgs
parents:
diff changeset
    81
// CSimMessageArray::CSimMessageArray
hgs
parents:
diff changeset
    82
// ----------------------------------------------------
hgs
parents:
diff changeset
    83
CSimMessageArray::CSimMessageArray( CMsvSession& aSession ):
hgs
parents:
diff changeset
    84
iSession( aSession )
hgs
parents:
diff changeset
    85
                    {
hgs
parents:
diff changeset
    86
                    }
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
// ----------------------------------------------------
hgs
parents:
diff changeset
    89
// CSimMessageArray::NewL
hgs
parents:
diff changeset
    90
// ----------------------------------------------------
hgs
parents:
diff changeset
    91
CSimMessageArray* CSimMessageArray::NewL( CMsvSession& aSession )
hgs
parents:
diff changeset
    92
    {
hgs
parents:
diff changeset
    93
    SMUMLOGGER_ENTERFN(" CSimMessageArray::NewL");
hgs
parents:
diff changeset
    94
    CSimMessageArray* self = new (ELeave) CSimMessageArray(aSession);
hgs
parents:
diff changeset
    95
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    96
    self->ConstructL();
hgs
parents:
diff changeset
    97
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    98
    SMUMLOGGER_LEAVEFN(" CSimMessageArray::NewL");
hgs
parents:
diff changeset
    99
    return self;
hgs
parents:
diff changeset
   100
    }
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
// ----------------------------------------------------
hgs
parents:
diff changeset
   103
// CSimMessageArray::ConstructL
hgs
parents:
diff changeset
   104
// ----------------------------------------------------
hgs
parents:
diff changeset
   105
void CSimMessageArray::ConstructL()
hgs
parents:
diff changeset
   106
    {
hgs
parents:
diff changeset
   107
    SMUMLOGGER_ENTERFN(" CSimMessageArray::ConstructL");
hgs
parents:
diff changeset
   108
    TMsvSelectionOrdering ordering = TMsvSelectionOrdering(
hgs
parents:
diff changeset
   109
            KMsvNoGrouping,
hgs
parents:
diff changeset
   110
            EMsvSortByDescription,
hgs
parents:
diff changeset
   111
            ETrue );
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
    iSmsServiceEntry = CMsvEntry::NewL( 
hgs
parents:
diff changeset
   114
            iSession, 
hgs
parents:
diff changeset
   115
            KMsvRootIndexEntryId, 
hgs
parents:
diff changeset
   116
            ordering );
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
    iListBoxText = HBufC::NewL( KSmumMaxDisplayTextLength );
hgs
parents:
diff changeset
   119
    SMUMLOGGER_LEAVEFN(" CSimMessageArray::ConstructL");
hgs
parents:
diff changeset
   120
    }
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
// ----------------------------------------------------
hgs
parents:
diff changeset
   124
// CSimMessageArray::~CSimMessageArray
hgs
parents:
diff changeset
   125
// ----------------------------------------------------
hgs
parents:
diff changeset
   126
CSimMessageArray::~CSimMessageArray()
hgs
parents:
diff changeset
   127
    {
hgs
parents:
diff changeset
   128
    SMUMLOGGER_ENTERFN(" CSimMessageArray::~CSimMessageArray");   
hgs
parents:
diff changeset
   129
    delete iSmsServiceEntry;
hgs
parents:
diff changeset
   130
    delete iListBoxText;
hgs
parents:
diff changeset
   131
    SMUMLOGGER_LEAVEFN(" CSimMessageArray::~CSimMessageArray");
hgs
parents:
diff changeset
   132
    }
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
// ----------------------------------------------------
hgs
parents:
diff changeset
   135
// CSimMessageArray::MdcaCount
hgs
parents:
diff changeset
   136
// ----------------------------------------------------
hgs
parents:
diff changeset
   137
TInt CSimMessageArray::MdcaCount() const
hgs
parents:
diff changeset
   138
{
hgs
parents:
diff changeset
   139
SMUMLOGGER_ENTERFN(" CSimMessageArray::MdcaCount");
hgs
parents:
diff changeset
   140
if ( iSmsServiceEntry->EntryId() == KMsvRootIndexEntryId )
hgs
parents:
diff changeset
   141
    {
hgs
parents:
diff changeset
   142
    SMUMLOGGER_LEAVEFN(" CSimMessageArray::MdcaCount - 0");
hgs
parents:
diff changeset
   143
    return 0;
hgs
parents:
diff changeset
   144
    }
hgs
parents:
diff changeset
   145
else
hgs
parents:
diff changeset
   146
    {
hgs
parents:
diff changeset
   147
    SMUMLOGGER_LEAVEFN(" CSimMessageArray::MdcaCount - COUNT");
hgs
parents:
diff changeset
   148
    return iSmsServiceEntry->Count();
hgs
parents:
diff changeset
   149
    }
hgs
parents:
diff changeset
   150
}
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
// ----------------------------------------------------
hgs
parents:
diff changeset
   153
// CSimMessageArray::MdcaPoint
hgs
parents:
diff changeset
   154
// ----------------------------------------------------
hgs
parents:
diff changeset
   155
TPtrC CSimMessageArray::MdcaPoint(TInt aIndex) const
hgs
parents:
diff changeset
   156
{
hgs
parents:
diff changeset
   157
SMUMLOGGER_ENTERFN(" CSimMessageArray::MdcaCount(INDEX)");
hgs
parents:
diff changeset
   158
// prepare 
hgs
parents:
diff changeset
   159
TPtr tempText = iListBoxText->Des();
hgs
parents:
diff changeset
   160
tempText.Zero();
hgs
parents:
diff changeset
   161
const TMsvEntry* child = NULL;
hgs
parents:
diff changeset
   162
child = &(*iSmsServiceEntry)[ aIndex ];
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
// construct listbox-string
hgs
parents:
diff changeset
   165
// bitmap
hgs
parents:
diff changeset
   166
tempText.AppendNum( KSmumSimDialogMessageBitmapIndex );
hgs
parents:
diff changeset
   167
tempText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   168
// sender-information
hgs
parents:
diff changeset
   169
if ( child->iDetails.Length() > KSmumMaxVisibleChars )
hgs
parents:
diff changeset
   170
    {
hgs
parents:
diff changeset
   171
    tempText.Append( child->iDetails.Left( KSmumMaxVisibleChars-1 ) );
hgs
parents:
diff changeset
   172
    tempText.Append( CEditableText::EEllipsis );
hgs
parents:
diff changeset
   173
    }
hgs
parents:
diff changeset
   174
else
hgs
parents:
diff changeset
   175
    {
hgs
parents:
diff changeset
   176
    tempText.Append( child->iDetails );
hgs
parents:
diff changeset
   177
    }
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
// msg "subject"
hgs
parents:
diff changeset
   180
tempText.Append( KColumnListSeparator );
hgs
parents:
diff changeset
   181
if ( child->iDescription.Length() > KSmumMaxVisibleChars )
hgs
parents:
diff changeset
   182
    {
hgs
parents:
diff changeset
   183
    tempText.Append( child->iDescription.Left( KSmumMaxVisibleChars-1 ) );
hgs
parents:
diff changeset
   184
    tempText.Append( CEditableText::EEllipsis );
hgs
parents:
diff changeset
   185
    }
hgs
parents:
diff changeset
   186
else
hgs
parents:
diff changeset
   187
    {
hgs
parents:
diff changeset
   188
    tempText.Append( child->iDescription );
hgs
parents:
diff changeset
   189
    }
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
SMUMLOGGER_LEAVEFN(" CSimMessageArray::MdcaCount(INDEX)");
hgs
parents:
diff changeset
   192
return tempText;
hgs
parents:
diff changeset
   193
}
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
// ----------------------------------------------------
hgs
parents:
diff changeset
   197
// CSimMessageArray::EntryId
hgs
parents:
diff changeset
   198
// ----------------------------------------------------
hgs
parents:
diff changeset
   199
TMsvId CSimMessageArray::EntryId( TInt aIndex ) const
hgs
parents:
diff changeset
   200
{
hgs
parents:
diff changeset
   201
return (*iSmsServiceEntry)[ aIndex ].Id();
hgs
parents:
diff changeset
   202
}
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
// ----------------------------------------------------
hgs
parents:
diff changeset
   205
// CSimMessageArray::RefreshArrayL
hgs
parents:
diff changeset
   206
// ----------------------------------------------------
hgs
parents:
diff changeset
   207
void CSimMessageArray::RefreshArrayL( TMsvId aFolderId )
hgs
parents:
diff changeset
   208
    {
hgs
parents:
diff changeset
   209
    iSmsServiceEntry->SetEntryL( KMsvDeletedEntryFolderEntryId );
hgs
parents:
diff changeset
   210
    iSmsServiceEntry->SetEntryL( aFolderId );
hgs
parents:
diff changeset
   211
    }
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
//
hgs
parents:
diff changeset
   216
//
hgs
parents:
diff changeset
   217
// CSmsSimDialog
hgs
parents:
diff changeset
   218
//
hgs
parents:
diff changeset
   219
//
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
// ----------------------------------------------------
hgs
parents:
diff changeset
   222
// CSmsSimDialog::CSmsSimDialog
hgs
parents:
diff changeset
   223
// ----------------------------------------------------
hgs
parents:
diff changeset
   224
CSmsSimDialog::CSmsSimDialog(CSmsMtmUi&  aSmsMtmUi, CMsvSession& aSession, TInt& aExitCode):
hgs
parents:
diff changeset
   225
iSmsMtmUi(aSmsMtmUi),
hgs
parents:
diff changeset
   226
iSession(aSession),
hgs
parents:
diff changeset
   227
iExitCode( aExitCode ),
hgs
parents:
diff changeset
   228
iDialogDismissed( EFalse ),
hgs
parents:
diff changeset
   229
iHelpFeatureSupported( EFalse ),
hgs
parents:
diff changeset
   230
iMsgCountBeforeOperation( 0 ),
hgs
parents:
diff changeset
   231
iResourceFileOffset(0),
hgs
parents:
diff changeset
   232
iContextCommand(EFalse)
hgs
parents:
diff changeset
   233
        {
hgs
parents:
diff changeset
   234
        SMUMLOGGER_ENTERFN(" CSmsSimDialog::CSmsSimDialog");
hgs
parents:
diff changeset
   235
        iExitCode = KErrNone;
hgs
parents:
diff changeset
   236
        iMarkReplacementText.Copy( KSmsiMarkReplacement );
hgs
parents:
diff changeset
   237
        SMUMLOGGER_LEAVEFN(" CSmsSimDialog::CSmsSimDialog");
hgs
parents:
diff changeset
   238
        }
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
// ----------------------------------------------------
hgs
parents:
diff changeset
   241
// CSmsSimDialog::~CSmsSimDialog
hgs
parents:
diff changeset
   242
// ----------------------------------------------------
hgs
parents:
diff changeset
   243
CSmsSimDialog::~CSmsSimDialog()
hgs
parents:
diff changeset
   244
    {
hgs
parents:
diff changeset
   245
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::~CSmsSimDialog");
hgs
parents:
diff changeset
   246
    if( iResourceFileOffset )
hgs
parents:
diff changeset
   247
        {
hgs
parents:
diff changeset
   248
        CCoeEnv::Static()->DeleteResourceFile( iResourceFileOffset );
hgs
parents:
diff changeset
   249
        }
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
    delete iOldTitleText;
hgs
parents:
diff changeset
   252
    delete iEnumerationOperation;
hgs
parents:
diff changeset
   253
    delete iCopyOrDeleteOperation;
hgs
parents:
diff changeset
   254
    delete iProgressDialog;
hgs
parents:
diff changeset
   255
    delete iWaitDialog;
hgs
parents:
diff changeset
   256
    delete iMessages;
hgs
parents:
diff changeset
   257
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::~CSmsSimDialog");
hgs
parents:
diff changeset
   258
    }
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260
// ----------------------------------------------------
hgs
parents:
diff changeset
   261
// CSmsSimDialog::NewL
hgs
parents:
diff changeset
   262
// ----------------------------------------------------
hgs
parents:
diff changeset
   263
CSmsSimDialog* CSmsSimDialog::NewL(CSmsMtmUi&  aSmsMtmUi, CMsvSession& aSession, TInt& aExitCode)
hgs
parents:
diff changeset
   264
    {
hgs
parents:
diff changeset
   265
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::NewL");
hgs
parents:
diff changeset
   266
    CSmsSimDialog* self= new(ELeave) CSmsSimDialog(aSmsMtmUi, aSession, aExitCode);
hgs
parents:
diff changeset
   267
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
   268
    self->ConstructL();
hgs
parents:
diff changeset
   269
    CleanupStack::Pop();
hgs
parents:
diff changeset
   270
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::NewL");
hgs
parents:
diff changeset
   271
    return self;
hgs
parents:
diff changeset
   272
    }
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
// ----------------------------------------------------
hgs
parents:
diff changeset
   275
// CSmsSimDialog::ConstructL
hgs
parents:
diff changeset
   276
// ----------------------------------------------------
hgs
parents:
diff changeset
   277
void CSmsSimDialog::ConstructL()
hgs
parents:
diff changeset
   278
    {
hgs
parents:
diff changeset
   279
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::ConstructL");
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
    // Resource loader
hgs
parents:
diff changeset
   282
    CEikonEnv* env = CEikonEnv::Static();    
hgs
parents:
diff changeset
   283
    TParse fp;
hgs
parents:
diff changeset
   284
    fp.Set( KSimDlgResourceFile, &KDC_RESOURCE_FILES_DIR , NULL );
hgs
parents:
diff changeset
   285
    TFileName filename = fp.FullName();    
hgs
parents:
diff changeset
   286
    BaflUtils::NearestLanguageFile(env->FsSession(), filename);
hgs
parents:
diff changeset
   287
    iResourceFileOffset = env->AddResourceFileL(filename); 
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
    CAknDialog::ConstructL( R_SMS_DEFAULT_SIM_DIALOG_MENUBAR );
hgs
parents:
diff changeset
   290
    iMessages = CSimMessageArray::NewL( iSession );
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
    // Prepare FeatureManager, read values to members and uninitialize FeatureManager
hgs
parents:
diff changeset
   293
    FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
   294
    iHelpFeatureSupported = FeatureManager::FeatureSupported( KFeatureIdHelp );
hgs
parents:
diff changeset
   295
    FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
   296
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::ConstructL");
hgs
parents:
diff changeset
   297
    }
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
// ----------------------------------------------------
hgs
parents:
diff changeset
   300
// CSmsSimDialog::PreLayoutDynInitL
hgs
parents:
diff changeset
   301
// ----------------------------------------------------
hgs
parents:
diff changeset
   302
void CSmsSimDialog::PreLayoutDynInitL()                        
hgs
parents:
diff changeset
   303
    {
hgs
parents:
diff changeset
   304
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::PreLayoutDynInitL");
hgs
parents:
diff changeset
   305
    CEikColumnListBox* listBox = ListBox();
hgs
parents:
diff changeset
   306
    listBox->SetListBoxObserver( this );
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
    // Create scroll bar
hgs
parents:
diff changeset
   309
    listBox->CreateScrollBarFrameL();
hgs
parents:
diff changeset
   310
    listBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
hgs
parents:
diff changeset
   311
hgs
parents:
diff changeset
   312
    // Set data
hgs
parents:
diff changeset
   313
    listBox->Model()->SetItemTextArray(iMessages);
hgs
parents:
diff changeset
   314
    listBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
hgs
parents:
diff changeset
   315
    HBufC* noMessages = StringLoader::LoadLC( R_SMS_DEFAULT_SIM_DIALOG_EMPTY, iCoeEnv );
hgs
parents:
diff changeset
   316
    listBox->View()->SetListEmptyTextL( *noMessages );
hgs
parents:
diff changeset
   317
    CleanupStack::PopAndDestroy( noMessages );
hgs
parents:
diff changeset
   318
    noMessages = NULL;
hgs
parents:
diff changeset
   319
hgs
parents:
diff changeset
   320
    StoreTitleTextAndSetNewL();
hgs
parents:
diff changeset
   321
hgs
parents:
diff changeset
   322
    // create icon array
hgs
parents:
diff changeset
   323
    CArrayPtr< CGulIcon >* icons = 
hgs
parents:
diff changeset
   324
    new( ELeave ) CAknIconArray( KSimMessageBitmapArrayGranularity );
hgs
parents:
diff changeset
   325
    CleanupStack::PushL( icons );
hgs
parents:
diff changeset
   326
    MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
hgs
parents:
diff changeset
   327
hgs
parents:
diff changeset
   328
    TFileName fileName;
hgs
parents:
diff changeset
   329
    fileName.Copy( KAvkonBitmapFile );
hgs
parents:
diff changeset
   330
    icons->AppendL( 
hgs
parents:
diff changeset
   331
            AknsUtils::CreateGulIconL( skinInstance, 
hgs
parents:
diff changeset
   332
                    KAknsIIDQgnIndiMarkedAdd,
hgs
parents:
diff changeset
   333
                    fileName, 
hgs
parents:
diff changeset
   334
                    EMbmAvkonQgn_indi_marked_add, 
hgs
parents:
diff changeset
   335
                    EMbmAvkonQgn_indi_marked_add_mask ) );
hgs
parents:
diff changeset
   336
    // Parse the filename
hgs
parents:
diff changeset
   337
    TParse tp;
hgs
parents:
diff changeset
   338
    tp.Set( KMuiuBitmapFile, &KDC_APP_BITMAP_DIR, NULL );
hgs
parents:
diff changeset
   339
    fileName.Copy( tp.FullName() );
hgs
parents:
diff changeset
   340
    icons->AppendL( 
hgs
parents:
diff changeset
   341
            AknsUtils::CreateGulIconL( skinInstance, 
hgs
parents:
diff changeset
   342
                    KAknsIIDQgnPropMceSmsRead,
hgs
parents:
diff changeset
   343
                    fileName, 
hgs
parents:
diff changeset
   344
                    EMbmMuiuQgn_prop_mce_sms_read, 
hgs
parents:
diff changeset
   345
                    EMbmMuiuQgn_prop_mce_sms_read_mask ) );
hgs
parents:
diff changeset
   346
    // Set the icon array. takes ownership
hgs
parents:
diff changeset
   347
    reinterpret_cast<CAknDoubleGraphicStyleListBox*> 
hgs
parents:
diff changeset
   348
    (listBox)->ItemDrawer()->FormattedCellData()->SetIconArrayL( icons );
hgs
parents:
diff changeset
   349
    CleanupStack::Pop(); // icons
hgs
parents:
diff changeset
   350
    // Start the enumeration
hgs
parents:
diff changeset
   351
    EnumerateSimMessagesL();
hgs
parents:
diff changeset
   352
    iMenuBar->SetContextMenuTitleResourceId( R_SMS_DEFAULT_SIM_DIALOG_CONTEXTMENUBAR );    
hgs
parents:
diff changeset
   353
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::PreLayoutDynInitL");
hgs
parents:
diff changeset
   354
    }
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
// ----------------------------------------------------
hgs
parents:
diff changeset
   357
// CSmsSimDialog::OkToExitL
hgs
parents:
diff changeset
   358
// ----------------------------------------------------
hgs
parents:
diff changeset
   359
TBool CSmsSimDialog::OkToExitL(TInt aButtonId)
hgs
parents:
diff changeset
   360
    {
hgs
parents:
diff changeset
   361
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::OkToExitL");
hgs
parents:
diff changeset
   362
    CAknInputBlock::NewLC(); // Absorb keys
hgs
parents:
diff changeset
   363
    TInt returnValue = 0;
hgs
parents:
diff changeset
   364
hgs
parents:
diff changeset
   365
    switch(aButtonId)
hgs
parents:
diff changeset
   366
        {
hgs
parents:
diff changeset
   367
        case EAknSoftkeyEmpty:
hgs
parents:
diff changeset
   368
            {
hgs
parents:
diff changeset
   369
            returnValue = EFalse;
hgs
parents:
diff changeset
   370
            }
hgs
parents:
diff changeset
   371
            break;
hgs
parents:
diff changeset
   372
        case EAknSoftkeyOptions:
hgs
parents:
diff changeset
   373
            {
hgs
parents:
diff changeset
   374
            iMenuBar->SetMenuType(CEikMenuBar::EMenuOptions);  
hgs
parents:
diff changeset
   375
            iMenuBar->TryDisplayMenuBarL();
hgs
parents:
diff changeset
   376
            returnValue = EFalse;
hgs
parents:
diff changeset
   377
            }
hgs
parents:
diff changeset
   378
            break;
hgs
parents:
diff changeset
   379
        case EAknSoftkeyContextOptions:
hgs
parents:
diff changeset
   380
            {
hgs
parents:
diff changeset
   381
			iContextCommand = ETrue;
hgs
parents:
diff changeset
   382
            // Middle softkey was pressed. Display context menu.
hgs
parents:
diff changeset
   383
            iMenuBar->SetMenuType(CEikMenuBar::EMenuContext);
hgs
parents:
diff changeset
   384
            iMenuBar->TryDisplayContextMenuBarL();
hgs
parents:
diff changeset
   385
            returnValue = EFalse;
hgs
parents:
diff changeset
   386
            }
hgs
parents:
diff changeset
   387
            break;
hgs
parents:
diff changeset
   388
        default:
hgs
parents:
diff changeset
   389
            {
hgs
parents:
diff changeset
   390
            TBool okToExit = CAknDialog::OkToExitL( aButtonId );
hgs
parents:
diff changeset
   391
            if ( okToExit )
hgs
parents:
diff changeset
   392
                {
hgs
parents:
diff changeset
   393
                TRAP_IGNORE( DeleteSimFolderL() );
hgs
parents:
diff changeset
   394
                if ( aButtonId != EEikBidCancel )
hgs
parents:
diff changeset
   395
                    {
hgs
parents:
diff changeset
   396
                    TRAP_IGNORE( RestoreTitleTextL() );
hgs
parents:
diff changeset
   397
                    }
hgs
parents:
diff changeset
   398
                }
hgs
parents:
diff changeset
   399
            returnValue = okToExit;
hgs
parents:
diff changeset
   400
            }
hgs
parents:
diff changeset
   401
            break;
hgs
parents:
diff changeset
   402
hgs
parents:
diff changeset
   403
        }      
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
    CleanupStack::PopAndDestroy(); // CAknInputBlock
hgs
parents:
diff changeset
   406
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::OkToExitL");
hgs
parents:
diff changeset
   407
    return returnValue;
hgs
parents:
diff changeset
   408
    }
hgs
parents:
diff changeset
   409
hgs
parents:
diff changeset
   410
// ----------------------------------------------------
hgs
parents:
diff changeset
   411
// CSmsSimDialog::ProcessCommandL
hgs
parents:
diff changeset
   412
// ----------------------------------------------------
hgs
parents:
diff changeset
   413
void CSmsSimDialog::ProcessCommandL( TInt aCommandId )
hgs
parents:
diff changeset
   414
    {
hgs
parents:
diff changeset
   415
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::ProcessCommandL");
hgs
parents:
diff changeset
   416
    CAknDialog::ProcessCommandL( aCommandId ) ;
hgs
parents:
diff changeset
   417
    CEikColumnListBox* listBox = ListBox();
hgs
parents:
diff changeset
   418
    CRepository* repository = CRepository::NewLC( KCRUidProfileEngine );
hgs
parents:
diff changeset
   419
    TInt defaultType( EProfileGeneralId );
hgs
parents:
diff changeset
   420
    User::LeaveIfError( repository->Get( KProEngActiveProfile, defaultType ) );
hgs
parents:
diff changeset
   421
    CleanupStack::PopAndDestroy( repository );
hgs
parents:
diff changeset
   422
hgs
parents:
diff changeset
   423
    switch ( aCommandId )
hgs
parents:
diff changeset
   424
        {
hgs
parents:
diff changeset
   425
        case ESmsMtmUiCommandIdCopy:
hgs
parents:
diff changeset
   426
            //General system error pops up when deleting a SIM message in offline mode
hgs
parents:
diff changeset
   427
            if ( defaultType == EProfileOffLineId )
hgs
parents:
diff changeset
   428
                {            	
hgs
parents:
diff changeset
   429
                // Show note and exit 
hgs
parents:
diff changeset
   430
                HBufC* noteString = StringLoader::LoadLC( R_QTN_OFFLINE_NOT_POSSIBLE, iCoeEnv );
hgs
parents:
diff changeset
   431
                CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue );                
hgs
parents:
diff changeset
   432
                note->ExecuteLD( *noteString );
hgs
parents:
diff changeset
   433
                CleanupStack::PopAndDestroy(); // noteString 
hgs
parents:
diff changeset
   434
                TryExitL( EAknSoftkeyBack );               
hgs
parents:
diff changeset
   435
                }
hgs
parents:
diff changeset
   436
            else
hgs
parents:
diff changeset
   437
                {   	      
hgs
parents:
diff changeset
   438
                HandleCopyFromSimToLocalFolderL();
hgs
parents:
diff changeset
   439
                }
hgs
parents:
diff changeset
   440
            break;
hgs
parents:
diff changeset
   441
        case ESmsMtmUiCommandIdDelete:
hgs
parents:
diff changeset
   442
            //General system error pops up when deleting a SIM message in offline mode
hgs
parents:
diff changeset
   443
            if ( defaultType == EProfileOffLineId )
hgs
parents:
diff changeset
   444
                {               
hgs
parents:
diff changeset
   445
                // Show note and exit 
hgs
parents:
diff changeset
   446
                HBufC* noteString = StringLoader::LoadLC( R_QTN_OFFLINE_NOT_POSSIBLE, iCoeEnv );
hgs
parents:
diff changeset
   447
                CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue );                
hgs
parents:
diff changeset
   448
                note->ExecuteLD( *noteString );
hgs
parents:
diff changeset
   449
                CleanupStack::PopAndDestroy(); // noteString
hgs
parents:
diff changeset
   450
                TryExitL( EAknSoftkeyBack );                                
hgs
parents:
diff changeset
   451
                }
hgs
parents:
diff changeset
   452
            else
hgs
parents:
diff changeset
   453
                {    
hgs
parents:
diff changeset
   454
                HandleDeleteFromSimL();
hgs
parents:
diff changeset
   455
                }
hgs
parents:
diff changeset
   456
            break;
hgs
parents:
diff changeset
   457
        case ESmsMtmUiCommandIdEditMark:
hgs
parents:
diff changeset
   458
            {
hgs
parents:
diff changeset
   459
#ifdef _DEBUG
hgs
parents:
diff changeset
   460
            RDebug::Print(_L("CSmsSimDialog::ProcessCommandL: mark item %d"), 
hgs
parents:
diff changeset
   461
                    listBox->CurrentItemIndex() );
hgs
parents:
diff changeset
   462
#endif
hgs
parents:
diff changeset
   463
            listBox->View()->SelectItemL( listBox->CurrentItemIndex() );
hgs
parents:
diff changeset
   464
            break;
hgs
parents:
diff changeset
   465
            }
hgs
parents:
diff changeset
   466
        case ESmsMtmUiCommandIdEditUnmark:
hgs
parents:
diff changeset
   467
            {
hgs
parents:
diff changeset
   468
#ifdef _DEBUG
hgs
parents:
diff changeset
   469
            RDebug::Print(_L("CSmsSimDialog::ProcessCommandL: unmark item %d"), 
hgs
parents:
diff changeset
   470
                    listBox->CurrentItemIndex() );
hgs
parents:
diff changeset
   471
#endif
hgs
parents:
diff changeset
   472
            listBox->View()->DeselectItem( listBox->CurrentItemIndex() );
hgs
parents:
diff changeset
   473
            break;
hgs
parents:
diff changeset
   474
            }
hgs
parents:
diff changeset
   475
        case ESmsMtmUiCommandIdEditUnmarkAll:
hgs
parents:
diff changeset
   476
            {
hgs
parents:
diff changeset
   477
#ifdef _DEBUG
hgs
parents:
diff changeset
   478
            RDebug::Print(_L("CSmsSimDialog::ProcessCommandL: unmark all") );
hgs
parents:
diff changeset
   479
#endif
hgs
parents:
diff changeset
   480
hgs
parents:
diff changeset
   481
            listBox->View()->ClearSelection();
hgs
parents:
diff changeset
   482
            break;
hgs
parents:
diff changeset
   483
            }
hgs
parents:
diff changeset
   484
        case ESmsMtmUiCommandIdEditMarkAll:
hgs
parents:
diff changeset
   485
            {
hgs
parents:
diff changeset
   486
#ifdef _DEBUG
hgs
parents:
diff changeset
   487
            RDebug::Print(_L("CSmsSimDialog::ProcessCommandL: mark all") );
hgs
parents:
diff changeset
   488
#endif
hgs
parents:
diff changeset
   489
hgs
parents:
diff changeset
   490
            CArrayFixFlat<TInt>* indexArray = new( ELeave ) CArrayFixFlat<TInt>( 
hgs
parents:
diff changeset
   491
                    KSimMessageTempArrayGranularity );
hgs
parents:
diff changeset
   492
            CleanupStack::PushL( indexArray );
hgs
parents:
diff changeset
   493
            const TInt count = listBox->Model()->NumberOfItems();
hgs
parents:
diff changeset
   494
            for ( TInt loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
   495
                {
hgs
parents:
diff changeset
   496
                indexArray->AppendL( loop );
hgs
parents:
diff changeset
   497
                }
hgs
parents:
diff changeset
   498
            listBox->View()->SetSelectionIndexesL( indexArray );
hgs
parents:
diff changeset
   499
            CleanupStack::PopAndDestroy(); // indexArray
hgs
parents:
diff changeset
   500
            break;
hgs
parents:
diff changeset
   501
            }
hgs
parents:
diff changeset
   502
        case EAknCmdHelp:
hgs
parents:
diff changeset
   503
            {
hgs
parents:
diff changeset
   504
            LaunchHelpL();                
hgs
parents:
diff changeset
   505
            }
hgs
parents:
diff changeset
   506
            break;
hgs
parents:
diff changeset
   507
        case ESmsSettingsChoiceMenuExit:
hgs
parents:
diff changeset
   508
            {
hgs
parents:
diff changeset
   509
            iExitCode = EEikCmdExit;
hgs
parents:
diff changeset
   510
            TryExitL( EAknCmdExit );
hgs
parents:
diff changeset
   511
            }
hgs
parents:
diff changeset
   512
            break;
hgs
parents:
diff changeset
   513
hgs
parents:
diff changeset
   514
        default :
hgs
parents:
diff changeset
   515
            break;
hgs
parents:
diff changeset
   516
        }
hgs
parents:
diff changeset
   517
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::ProcessCommandL");
hgs
parents:
diff changeset
   518
    }
hgs
parents:
diff changeset
   519
// ----------------------------------------------------
hgs
parents:
diff changeset
   520
// CSmsSimDialog::DynInitMenuPaneL
hgs
parents:
diff changeset
   521
// ----------------------------------------------------
hgs
parents:
diff changeset
   522
void CSmsSimDialog::DynInitMenuPaneL(
hgs
parents:
diff changeset
   523
        TInt aResourceId, CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
   524
    {
hgs
parents:
diff changeset
   525
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::DynInitMenuPaneL - 2");
hgs
parents:
diff changeset
   526
    if ( aResourceId == R_SMS_DEFAULT_SIM_DIALOG_MENUPANE )
hgs
parents:
diff changeset
   527
        {
hgs
parents:
diff changeset
   528
        if ( ListBox()->Model()->NumberOfItems() == 0 )
hgs
parents:
diff changeset
   529
            {
hgs
parents:
diff changeset
   530
            aMenuPane->DeleteMenuItem( ESmsMtmUiCommandIdEdit );
hgs
parents:
diff changeset
   531
            }
hgs
parents:
diff changeset
   532
hgs
parents:
diff changeset
   533
        aMenuPane->SetItemDimmed( EAknCmdHelp, !iHelpFeatureSupported );                      
hgs
parents:
diff changeset
   534
        }
hgs
parents:
diff changeset
   535
    else if ( aResourceId == R_MCE_DEFAULT_SIM_DIALOG_EDIT_CASCADE )
hgs
parents:
diff changeset
   536
        {
hgs
parents:
diff changeset
   537
        DynInitEditMenuL( aMenuPane );
hgs
parents:
diff changeset
   538
        }
hgs
parents:
diff changeset
   539
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::DynInitMenuPaneL - 2");
hgs
parents:
diff changeset
   540
    }
hgs
parents:
diff changeset
   541
hgs
parents:
diff changeset
   542
// ----------------------------------------------------
hgs
parents:
diff changeset
   543
// CSmsSimDialog::OfferKeyEventL
hgs
parents:
diff changeset
   544
// ----------------------------------------------------
hgs
parents:
diff changeset
   545
TKeyResponse CSmsSimDialog::OfferKeyEventL(
hgs
parents:
diff changeset
   546
        const TKeyEvent& aKeyEvent, 
hgs
parents:
diff changeset
   547
        TEventCode aType )
hgs
parents:
diff changeset
   548
    {
hgs
parents:
diff changeset
   549
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::OfferKeyEventL");
hgs
parents:
diff changeset
   550
    CEikColumnListBox* listBox = ListBox();
hgs
parents:
diff changeset
   551
    if ( listBox && aType == EEventKey && aKeyEvent.iCode == EKeyBackspace &&
hgs
parents:
diff changeset
   552
            listBox->Model()->NumberOfItems() > 0 )
hgs
parents:
diff changeset
   553
        {
hgs
parents:
diff changeset
   554
        HandleDeleteFromSimL();
hgs
parents:
diff changeset
   555
        return EKeyWasConsumed;
hgs
parents:
diff changeset
   556
        }
hgs
parents:
diff changeset
   557
    if ( aType == EEventKey && aKeyEvent.iCode == EKeyOK )
hgs
parents:
diff changeset
   558
        {
hgs
parents:
diff changeset
   559
        if ( ListBox()->Model()->NumberOfItems() )
hgs
parents:
diff changeset
   560
            {
hgs
parents:
diff changeset
   561
            iMenuBar->SetMenuType(CEikMenuBar::EMenuContext);
hgs
parents:
diff changeset
   562
            iMenuBar->TryDisplayContextMenuBarL();                
hgs
parents:
diff changeset
   563
            }        	
hgs
parents:
diff changeset
   564
        return EKeyWasConsumed;
hgs
parents:
diff changeset
   565
        }
hgs
parents:
diff changeset
   566
    if( aType == EEventKeyUp )
hgs
parents:
diff changeset
   567
        {
hgs
parents:
diff changeset
   568
        UpdateMskL( );
hgs
parents:
diff changeset
   569
        }
hgs
parents:
diff changeset
   570
hgs
parents:
diff changeset
   571
    // Exit if waitnote is cancelled & dismissed
hgs
parents:
diff changeset
   572
    if ( iDialogDismissed && iEnumerationOperation )
hgs
parents:
diff changeset
   573
        {
hgs
parents:
diff changeset
   574
        TryExitL( EAknSoftkeyBack );
hgs
parents:
diff changeset
   575
        iDialogDismissed = EFalse;
hgs
parents:
diff changeset
   576
        return EKeyWasConsumed;
hgs
parents:
diff changeset
   577
        }
hgs
parents:
diff changeset
   578
hgs
parents:
diff changeset
   579
    return CAknDialog::OfferKeyEventL( aKeyEvent, aType );
hgs
parents:
diff changeset
   580
    }
hgs
parents:
diff changeset
   581
hgs
parents:
diff changeset
   582
hgs
parents:
diff changeset
   583
// ----------------------------------------------------
hgs
parents:
diff changeset
   584
// CSmsSimDialog::DynInitEditMenuL
hgs
parents:
diff changeset
   585
// ----------------------------------------------------
hgs
parents:
diff changeset
   586
void CSmsSimDialog::DynInitEditMenuL(  CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
   587
    {
hgs
parents:
diff changeset
   588
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::DynInitEditMenuL(MEUPANE)");
hgs
parents:
diff changeset
   589
    CEikColumnListBox* listBox = ListBox();
hgs
parents:
diff changeset
   590
hgs
parents:
diff changeset
   591
    // check what state item under "cursor" is
hgs
parents:
diff changeset
   592
    const CListBoxView::CSelectionIndexArray* items = 
hgs
parents:
diff changeset
   593
    listBox->SelectionIndexes();
hgs
parents:
diff changeset
   594
    TKeyArrayFix key(0, ECmpTInt);  
hgs
parents:
diff changeset
   595
    TInt count = items->Count();
hgs
parents:
diff changeset
   596
    if ( 0 == count )
hgs
parents:
diff changeset
   597
        {
hgs
parents:
diff changeset
   598
        //if no selection, disable unmarkall
hgs
parents:
diff changeset
   599
        aMenuPane->SetItemDimmed( ESmsMtmUiCommandIdEditUnmarkAll, ETrue );
hgs
parents:
diff changeset
   600
        }   
hgs
parents:
diff changeset
   601
    if ( count == listBox->Model()->NumberOfItems() )
hgs
parents:
diff changeset
   602
        {
hgs
parents:
diff changeset
   603
        //if all selected, disable markall
hgs
parents:
diff changeset
   604
        aMenuPane->SetItemDimmed( ESmsMtmUiCommandIdEditMarkAll, ETrue );
hgs
parents:
diff changeset
   605
        } 
hgs
parents:
diff changeset
   606
    if(iContextCommand)
hgs
parents:
diff changeset
   607
        {
hgs
parents:
diff changeset
   608
        aMenuPane->SetItemDimmed( ESmsMtmUiCommandIdEditMark, EFalse );
hgs
parents:
diff changeset
   609
        aMenuPane->SetItemDimmed( ESmsMtmUiCommandIdEditUnmark, EFalse );
hgs
parents:
diff changeset
   610
        iContextCommand = EFalse;
hgs
parents:
diff changeset
   611
        }
hgs
parents:
diff changeset
   612
    else
hgs
parents:
diff changeset
   613
        {
hgs
parents:
diff changeset
   614
        aMenuPane->SetItemDimmed( ESmsMtmUiCommandIdEditMark, ETrue );
hgs
parents:
diff changeset
   615
        aMenuPane->SetItemDimmed( ESmsMtmUiCommandIdEditUnmark, ETrue );
hgs
parents:
diff changeset
   616
        } 
hgs
parents:
diff changeset
   617
    TInt pos;
hgs
parents:
diff changeset
   618
    if ( !items->Find(listBox->CurrentItemIndex(), key, pos))
hgs
parents:
diff changeset
   619
        {
hgs
parents:
diff changeset
   620
        aMenuPane->DeleteMenuItem( ESmsMtmUiCommandIdEditMark );
hgs
parents:
diff changeset
   621
        }
hgs
parents:
diff changeset
   622
    else
hgs
parents:
diff changeset
   623
        {
hgs
parents:
diff changeset
   624
        aMenuPane->DeleteMenuItem( ESmsMtmUiCommandIdEditUnmark );
hgs
parents:
diff changeset
   625
        }
hgs
parents:
diff changeset
   626
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::DynInitEditMenuL(MEUPANE)");
hgs
parents:
diff changeset
   627
    }
hgs
parents:
diff changeset
   628
hgs
parents:
diff changeset
   629
// ----------------------------------------------------
hgs
parents:
diff changeset
   630
// CSmsSimDialog::HandleListBoxEventL
hgs
parents:
diff changeset
   631
// ----------------------------------------------------
hgs
parents:
diff changeset
   632
void CSmsSimDialog::HandleListBoxEventL(
hgs
parents:
diff changeset
   633
        CEikListBox* /*aListBox*/, 
hgs
parents:
diff changeset
   634
        TListBoxEvent aEventType )
hgs
parents:
diff changeset
   635
    {
hgs
parents:
diff changeset
   636
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::HandleListBoxEventL");
hgs
parents:
diff changeset
   637
    switch(aEventType)
hgs
parents:
diff changeset
   638
        {
hgs
parents:
diff changeset
   639
        case EEventEnterKeyPressed:
hgs
parents:
diff changeset
   640
        case EEventItemSingleClicked:
hgs
parents:
diff changeset
   641
            iContextCommand = ETrue;
hgs
parents:
diff changeset
   642
            TryExitL( EAknSoftkeyContextOptions );
hgs
parents:
diff changeset
   643
            break;
hgs
parents:
diff changeset
   644
        default:
hgs
parents:
diff changeset
   645
            break;
hgs
parents:
diff changeset
   646
        }
hgs
parents:
diff changeset
   647
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::HandleListBoxEventL");
hgs
parents:
diff changeset
   648
    }
hgs
parents:
diff changeset
   649
hgs
parents:
diff changeset
   650
// ----------------------------------------------------
hgs
parents:
diff changeset
   651
// CSmsSimDialog::DeleteSimFolderL
hgs
parents:
diff changeset
   652
// ----------------------------------------------------
hgs
parents:
diff changeset
   653
void CSmsSimDialog::DeleteSimFolderL()
hgs
parents:
diff changeset
   654
    {
hgs
parents:
diff changeset
   655
    if ( iSimFolderId != KMsvNullIndexEntryId )
hgs
parents:
diff changeset
   656
        {
hgs
parents:
diff changeset
   657
        SMUMLOGGER_ENTERFN(" CSmsSimDialog::DeleteSimFolderL");
hgs
parents:
diff changeset
   658
        CMsvEntry* entry = iSession.GetEntryL(iSimFolderId);
hgs
parents:
diff changeset
   659
        CleanupStack::PushL(entry);
hgs
parents:
diff changeset
   660
        TMsvSelectionOrdering ordering = entry->SortType();
hgs
parents:
diff changeset
   661
        ordering.SetShowInvisibleEntries( ETrue );
hgs
parents:
diff changeset
   662
        entry->SetSortTypeL( ordering );
hgs
parents:
diff changeset
   663
        entry->SetEntryL( entry->OwningService() );   // now entry points to SMS service
hgs
parents:
diff changeset
   664
        CAknInputBlock::NewLC();
hgs
parents:
diff changeset
   665
        CMuiuOperationWait* waiter =
hgs
parents:
diff changeset
   666
        CMuiuOperationWait::NewLC();
hgs
parents:
diff changeset
   667
        CMsvOperation* deleteOperation = 
hgs
parents:
diff changeset
   668
        entry->DeleteL(iSimFolderId, waiter->iStatus);
hgs
parents:
diff changeset
   669
        waiter->Start();
hgs
parents:
diff changeset
   670
        delete deleteOperation;
hgs
parents:
diff changeset
   671
        CleanupStack::PopAndDestroy(3, entry);  // entry, waiter, CAknInputBlock
hgs
parents:
diff changeset
   672
        iSimFolderId = KMsvNullIndexEntryId;
hgs
parents:
diff changeset
   673
        }
hgs
parents:
diff changeset
   674
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::DeleteSimFolderL");
hgs
parents:
diff changeset
   675
    }
hgs
parents:
diff changeset
   676
hgs
parents:
diff changeset
   677
hgs
parents:
diff changeset
   678
hgs
parents:
diff changeset
   679
// ----------------------------------------------------
hgs
parents:
diff changeset
   680
// CSmsSimDialog::HandleCopyFromSimToLocalFolderL
hgs
parents:
diff changeset
   681
// ----------------------------------------------------
hgs
parents:
diff changeset
   682
void CSmsSimDialog::HandleCopyFromSimToLocalFolderL()
hgs
parents:
diff changeset
   683
    {
hgs
parents:
diff changeset
   684
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::HandleCopyFromSimToLocalFolderL");
hgs
parents:
diff changeset
   685
hgs
parents:
diff changeset
   686
    TMsvId destinationId = 0;
hgs
parents:
diff changeset
   687
    HBufC* title = StringLoader::LoadLC(R_SMS_DEFAULT_SIM_DIALOG_COPY_MESSAGES, iCoeEnv);
hgs
parents:
diff changeset
   688
    if ( !CMsgFolderSelectionDialog::SelectFolderL( destinationId, *title ) )
hgs
parents:
diff changeset
   689
        {
hgs
parents:
diff changeset
   690
        CleanupStack::PopAndDestroy( title );
hgs
parents:
diff changeset
   691
        return;
hgs
parents:
diff changeset
   692
        }
hgs
parents:
diff changeset
   693
hgs
parents:
diff changeset
   694
    CleanupStack::PopAndDestroy( title );
hgs
parents:
diff changeset
   695
hgs
parents:
diff changeset
   696
    LaunchNoteAndOperationL( destinationId );
hgs
parents:
diff changeset
   697
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::HandleCopyFromSimToLocalFolderL");
hgs
parents:
diff changeset
   698
    }
hgs
parents:
diff changeset
   699
hgs
parents:
diff changeset
   700
// ----------------------------------------------------
hgs
parents:
diff changeset
   701
// CSmsSimDialog::CreateSelectionArrayLC
hgs
parents:
diff changeset
   702
// ----------------------------------------------------
hgs
parents:
diff changeset
   703
CMsvEntrySelection* CSmsSimDialog::CreateSelectionArrayLC()
hgs
parents:
diff changeset
   704
    {
hgs
parents:
diff changeset
   705
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::CreateSelectionArrayLC");
hgs
parents:
diff changeset
   706
    CEikColumnListBox* listBox = ListBox();
hgs
parents:
diff changeset
   707
    const TInt selectionCount = listBox->View()->SelectionIndexes()->Count();
hgs
parents:
diff changeset
   708
hgs
parents:
diff changeset
   709
    CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection();
hgs
parents:
diff changeset
   710
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
   711
    if ( selectionCount )
hgs
parents:
diff changeset
   712
        {
hgs
parents:
diff changeset
   713
        // selected items
hgs
parents:
diff changeset
   714
        const CListBoxView::CSelectionIndexArray* items = 
hgs
parents:
diff changeset
   715
        listBox->SelectionIndexes();
hgs
parents:
diff changeset
   716
        const TInt count = items->Count();
hgs
parents:
diff changeset
   717
        for ( TInt loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
   718
            {
hgs
parents:
diff changeset
   719
            selection->AppendL( iMessages->EntryId( items->At( loop ) ) );
hgs
parents:
diff changeset
   720
            }
hgs
parents:
diff changeset
   721
        }
hgs
parents:
diff changeset
   722
    else
hgs
parents:
diff changeset
   723
        {
hgs
parents:
diff changeset
   724
        // item under cursor
hgs
parents:
diff changeset
   725
        const TInt index = ListBox()->CurrentItemIndex();
hgs
parents:
diff changeset
   726
        selection->AppendL( iMessages->EntryId(index) );
hgs
parents:
diff changeset
   727
        }
hgs
parents:
diff changeset
   728
#ifdef _DEBUG
hgs
parents:
diff changeset
   729
    const TInt count2 = selection->Count();
hgs
parents:
diff changeset
   730
    RDebug::Print(_L("CSmsSimDialog::CreateSelectionArrayLC: items %d"), 
hgs
parents:
diff changeset
   731
            count2 );
hgs
parents:
diff changeset
   732
    for ( TInt loop2 = 0; loop2 < count2; loop2++ )
hgs
parents:
diff changeset
   733
        {
hgs
parents:
diff changeset
   734
        RDebug::Print(_L("item %d id %d"), 
hgs
parents:
diff changeset
   735
                loop2, selection->At( loop2 ) );
hgs
parents:
diff changeset
   736
        }
hgs
parents:
diff changeset
   737
#endif
hgs
parents:
diff changeset
   738
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::CreateSelectionArrayLC");
hgs
parents:
diff changeset
   739
    return selection;
hgs
parents:
diff changeset
   740
    }
hgs
parents:
diff changeset
   741
hgs
parents:
diff changeset
   742
// ----------------------------------------------------
hgs
parents:
diff changeset
   743
// CSmsSimDialog::HandleDeleteFromSimL
hgs
parents:
diff changeset
   744
// ----------------------------------------------------
hgs
parents:
diff changeset
   745
void CSmsSimDialog::HandleDeleteFromSimL()
hgs
parents:
diff changeset
   746
    {
hgs
parents:
diff changeset
   747
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::HandleDeleteFromSimL");
hgs
parents:
diff changeset
   748
    HBufC* messageText = NULL;
hgs
parents:
diff changeset
   749
    const TInt messageCount = ListBox()->View()->SelectionIndexes()->Count();
hgs
parents:
diff changeset
   750
    if ( messageCount == 1 || messageCount == 0 )
hgs
parents:
diff changeset
   751
        {
hgs
parents:
diff changeset
   752
        messageText = StringLoader::LoadL( 
hgs
parents:
diff changeset
   753
                R_DEFAULT_SIM_MESSAGE_DELETE_CONFIRMATION_ONE_MESSAGE, iCoeEnv);
hgs
parents:
diff changeset
   754
        }
hgs
parents:
diff changeset
   755
    else
hgs
parents:
diff changeset
   756
        {
hgs
parents:
diff changeset
   757
        messageText = StringLoader::LoadL( 
hgs
parents:
diff changeset
   758
                R_DEFAULT_SIM_MESSAGE_DELETE_CONFIRMATION_MANY_MESSAGES, 
hgs
parents:
diff changeset
   759
                messageCount, 
hgs
parents:
diff changeset
   760
                iCoeEnv);
hgs
parents:
diff changeset
   761
        }
hgs
parents:
diff changeset
   762
    CleanupStack::PushL( messageText );
hgs
parents:
diff changeset
   763
    CAknQueryDialog* confDialog = CAknQueryDialog::NewL( );
hgs
parents:
diff changeset
   764
    if ( !confDialog->ExecuteLD( R_DEFAULT_SIM_MESSAGE_DELETE_CONFIRMATION, *messageText ) )
hgs
parents:
diff changeset
   765
        {
hgs
parents:
diff changeset
   766
        CleanupStack::PopAndDestroy( messageText );
hgs
parents:
diff changeset
   767
        SMUMLOGGER_LEAVEFN(" CSmsSimDialog::HandleDeleteFromSimL - 1");
hgs
parents:
diff changeset
   768
        return;
hgs
parents:
diff changeset
   769
        }
hgs
parents:
diff changeset
   770
    CleanupStack::PopAndDestroy( messageText );
hgs
parents:
diff changeset
   771
hgs
parents:
diff changeset
   772
    LaunchNoteAndOperationL();
hgs
parents:
diff changeset
   773
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::HandleDeleteFromSimL - 2");
hgs
parents:
diff changeset
   774
    }
hgs
parents:
diff changeset
   775
hgs
parents:
diff changeset
   776
// ----------------------------------------------------
hgs
parents:
diff changeset
   777
// CSmsSimDialog::UpdateSimMessagesArrayL
hgs
parents:
diff changeset
   778
// ----------------------------------------------------
hgs
parents:
diff changeset
   779
void CSmsSimDialog::UpdateSimMessagesArrayL()
hgs
parents:
diff changeset
   780
    {
hgs
parents:
diff changeset
   781
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::UpdateSimMessagesArrayL");
hgs
parents:
diff changeset
   782
    const TInt index = ListBox()->CurrentItemIndex();
hgs
parents:
diff changeset
   783
    iMessages->RefreshArrayL( iSimFolderId );
hgs
parents:
diff changeset
   784
hgs
parents:
diff changeset
   785
    ListBox()->View()->ClearSelection();
hgs
parents:
diff changeset
   786
    const TInt count = iMessages->MdcaCount();
hgs
parents:
diff changeset
   787
    if ( iMsgCountBeforeOperation < count )
hgs
parents:
diff changeset
   788
        { // msg count increased
hgs
parents:
diff changeset
   789
        ListBox()->HandleItemAdditionL();
hgs
parents:
diff changeset
   790
        }
hgs
parents:
diff changeset
   791
    else if ( iMsgCountBeforeOperation > count )
hgs
parents:
diff changeset
   792
        { // msg count decreased
hgs
parents:
diff changeset
   793
        if ( index == KErrNotFound && count )
hgs
parents:
diff changeset
   794
            {
hgs
parents:
diff changeset
   795
            ListBox()->SetCurrentItemIndex( count - 1 );
hgs
parents:
diff changeset
   796
            }
hgs
parents:
diff changeset
   797
        ListBox()->HandleItemRemovalL();
hgs
parents:
diff changeset
   798
        }
hgs
parents:
diff changeset
   799
hgs
parents:
diff changeset
   800
    // update msg count
hgs
parents:
diff changeset
   801
    iMsgCountBeforeOperation = iMessages->MdcaCount();
hgs
parents:
diff changeset
   802
    UpdateMskL();
hgs
parents:
diff changeset
   803
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::UpdateSimMessagesArrayL");
hgs
parents:
diff changeset
   804
    }
hgs
parents:
diff changeset
   805
hgs
parents:
diff changeset
   806
// ----------------------------------------------------
hgs
parents:
diff changeset
   807
// CSmsSimDialog::ListBox
hgs
parents:
diff changeset
   808
// ----------------------------------------------------
hgs
parents:
diff changeset
   809
CEikColumnListBox* CSmsSimDialog::ListBox() const
hgs
parents:
diff changeset
   810
{
hgs
parents:
diff changeset
   811
return((CEikColumnListBox*)Control(EMsgControlIdSimMessageListBox));
hgs
parents:
diff changeset
   812
}
hgs
parents:
diff changeset
   813
hgs
parents:
diff changeset
   814
// ----------------------------------------------------
hgs
parents:
diff changeset
   815
// CSmsSimDialog::EnumerateSimMessagesL
hgs
parents:
diff changeset
   816
// ----------------------------------------------------
hgs
parents:
diff changeset
   817
void CSmsSimDialog::EnumerateSimMessagesL()
hgs
parents:
diff changeset
   818
    {
hgs
parents:
diff changeset
   819
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::EnumerateSimMessagesL");
hgs
parents:
diff changeset
   820
    delete iWaitDialog;
hgs
parents:
diff changeset
   821
    iWaitDialog = NULL;
hgs
parents:
diff changeset
   822
    iWaitDialog = new (ELeave) CAknWaitDialog(
hgs
parents:
diff changeset
   823
            (REINTERPRET_CAST(CEikDialog**, &iWaitDialog)),
hgs
parents:
diff changeset
   824
            ETrue
hgs
parents:
diff changeset
   825
    );
hgs
parents:
diff changeset
   826
    CleanupStack::PushL(TCleanupItem(CleanupWaitDialog, 
hgs
parents:
diff changeset
   827
            (TAny**)&iWaitDialog));
hgs
parents:
diff changeset
   828
    iWaitDialog->SetCallback( this );
hgs
parents:
diff changeset
   829
    iWaitDialog->ExecuteLD( R_DEFAULT_SIM_DIALOG_WAIT_NOTE );
hgs
parents:
diff changeset
   830
hgs
parents:
diff changeset
   831
    // Find the service entry
hgs
parents:
diff changeset
   832
    CMsvEntry* serviceEntry = iSession.GetEntryL(KMsvRootIndexEntryId);
hgs
parents:
diff changeset
   833
    CleanupStack::PushL(serviceEntry);
hgs
parents:
diff changeset
   834
    TMsvId serviceId;
hgs
parents:
diff changeset
   835
    TSmsUtilities::ServiceIdL(*serviceEntry, serviceId, KUidMsgTypeSMS);
hgs
parents:
diff changeset
   836
hgs
parents:
diff changeset
   837
    // Enumerate sim messages
hgs
parents:
diff changeset
   838
    CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection();
hgs
parents:
diff changeset
   839
    CleanupStack::PushL(selection);
hgs
parents:
diff changeset
   840
    selection->AppendL(serviceId);
hgs
parents:
diff changeset
   841
hgs
parents:
diff changeset
   842
    CMsvSingleOpWatcher* singleOpWatcher=CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
   843
    CleanupStack::PushL(singleOpWatcher);
hgs
parents:
diff changeset
   844
    TBuf8<1> foo (KNullDesC8);
hgs
parents:
diff changeset
   845
    CAknInputBlock::NewLC();  // no need to store the pointer returned, It's on the Cleanup Stack
hgs
parents:
diff changeset
   846
    CMsvOperation* operation = iSmsMtmUi.BaseMtm().InvokeAsyncFunctionL(
hgs
parents:
diff changeset
   847
            ESmsMtmCommandEnumeratePhoneStores,
hgs
parents:
diff changeset
   848
            *selection, 
hgs
parents:
diff changeset
   849
            foo, 
hgs
parents:
diff changeset
   850
            singleOpWatcher->iStatus);
hgs
parents:
diff changeset
   851
    singleOpWatcher->SetOperation( operation );
hgs
parents:
diff changeset
   852
    iEnumerationOperation = singleOpWatcher;
hgs
parents:
diff changeset
   853
    CleanupStack::PopAndDestroy(); // CAknInputBlock
hgs
parents:
diff changeset
   854
    CleanupStack::Pop( singleOpWatcher );
hgs
parents:
diff changeset
   855
    CleanupStack::PopAndDestroy( 2, serviceEntry ); // serviceEntry, selection
hgs
parents:
diff changeset
   856
    CleanupStack::Pop(); // TCleanupItem - everything ok so don't delete iWaitDialog
hgs
parents:
diff changeset
   857
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::EnumerateSimMessagesL");
hgs
parents:
diff changeset
   858
    }
hgs
parents:
diff changeset
   859
hgs
parents:
diff changeset
   860
hgs
parents:
diff changeset
   861
// ----------------------------------------------------
hgs
parents:
diff changeset
   862
// CSmsSimDialog::StoreTitleTextAndSetNewL
hgs
parents:
diff changeset
   863
// ----------------------------------------------------
hgs
parents:
diff changeset
   864
void CSmsSimDialog::StoreTitleTextAndSetNewL()
hgs
parents:
diff changeset
   865
    {
hgs
parents:
diff changeset
   866
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::StoreTitleTextAndSetNewL");
hgs
parents:
diff changeset
   867
    CEikStatusPane* sp = ((CAknAppUi*)CEikonEnv::Static()->EikAppUi())
hgs
parents:
diff changeset
   868
    ->StatusPane();
hgs
parents:
diff changeset
   869
    // Fetch pointer to the default title pane control
hgs
parents:
diff changeset
   870
    CAknTitlePane* title=(CAknTitlePane *)sp->ControlL(
hgs
parents:
diff changeset
   871
            TUid::Uid(EEikStatusPaneUidTitle));
hgs
parents:
diff changeset
   872
hgs
parents:
diff changeset
   873
    delete iOldTitleText;
hgs
parents:
diff changeset
   874
    iOldTitleText = NULL;
hgs
parents:
diff changeset
   875
    iOldTitleText = HBufC::NewL( title->Text()->Length() + 1 );
hgs
parents:
diff changeset
   876
    TPtr tempText = iOldTitleText->Des();
hgs
parents:
diff changeset
   877
    tempText.Copy( (*title->Text()) );
hgs
parents:
diff changeset
   878
hgs
parents:
diff changeset
   879
    HBufC* newTitle = StringLoader::LoadLC( 
hgs
parents:
diff changeset
   880
            R_SMS_DEFAULT_SIM_DIALOG_TITLE_TEXT, 
hgs
parents:
diff changeset
   881
            iCoeEnv );
hgs
parents:
diff changeset
   882
    title->SetTextL( *newTitle );
hgs
parents:
diff changeset
   883
    CleanupStack::PopAndDestroy( newTitle );
hgs
parents:
diff changeset
   884
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::StoreTitleTextAndSetNewL");
hgs
parents:
diff changeset
   885
    }
hgs
parents:
diff changeset
   886
hgs
parents:
diff changeset
   887
// ----------------------------------------------------
hgs
parents:
diff changeset
   888
// CSmsSimDialog::RestoreTitleTextL
hgs
parents:
diff changeset
   889
// ----------------------------------------------------
hgs
parents:
diff changeset
   890
void CSmsSimDialog::RestoreTitleTextL()
hgs
parents:
diff changeset
   891
    {
hgs
parents:
diff changeset
   892
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::RestoreTitleTextL");
hgs
parents:
diff changeset
   893
    CEikStatusPane* sp = ((CAknAppUi*)CEikonEnv::Static()->EikAppUi())
hgs
parents:
diff changeset
   894
    ->StatusPane();
hgs
parents:
diff changeset
   895
    // Fetch pointer to the default title pane control
hgs
parents:
diff changeset
   896
    CAknTitlePane* title=(CAknTitlePane *)sp->ControlL(
hgs
parents:
diff changeset
   897
            TUid::Uid(EEikStatusPaneUidTitle));
hgs
parents:
diff changeset
   898
hgs
parents:
diff changeset
   899
    title->SetTextL( iOldTitleText->Des() );
hgs
parents:
diff changeset
   900
    delete iOldTitleText;
hgs
parents:
diff changeset
   901
    iOldTitleText = NULL;
hgs
parents:
diff changeset
   902
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::RestoreTitleTextL");
hgs
parents:
diff changeset
   903
    }
hgs
parents:
diff changeset
   904
hgs
parents:
diff changeset
   905
// ----------------------------------------------------
hgs
parents:
diff changeset
   906
// CSmsSimDialog::OpCompleted
hgs
parents:
diff changeset
   907
// ----------------------------------------------------
hgs
parents:
diff changeset
   908
void CSmsSimDialog::OpCompleted(
hgs
parents:
diff changeset
   909
        CMsvSingleOpWatcher& aOpWatcher,
hgs
parents:
diff changeset
   910
        TInt aCompletionCode )
hgs
parents:
diff changeset
   911
    {
hgs
parents:
diff changeset
   912
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::OpCompleted");
hgs
parents:
diff changeset
   913
    TBool tryToExit = EFalse;
hgs
parents:
diff changeset
   914
    CMsvOperation* op=&aOpWatcher.Operation();
hgs
parents:
diff changeset
   915
    TRAP_IGNORE( tryToExit = DoOperationCompletedL(op, aCompletionCode ) );  
hgs
parents:
diff changeset
   916
    if ( tryToExit )
hgs
parents:
diff changeset
   917
        {
hgs
parents:
diff changeset
   918
        return;
hgs
parents:
diff changeset
   919
        }
hgs
parents:
diff changeset
   920
hgs
parents:
diff changeset
   921
    if ( iEnumerationOperation->Operation().Id()==op->Id() )
hgs
parents:
diff changeset
   922
        {
hgs
parents:
diff changeset
   923
#ifdef _DEBUG
hgs
parents:
diff changeset
   924
        RDebug::Print(_L("CSmsSimDialog::OpCompleted, completed enumerate operation") );
hgs
parents:
diff changeset
   925
#endif
hgs
parents:
diff changeset
   926
        delete iEnumerationOperation;
hgs
parents:
diff changeset
   927
        iEnumerationOperation = NULL;
hgs
parents:
diff changeset
   928
        }
hgs
parents:
diff changeset
   929
    else if ( iCopyOrDeleteOperation->Operation().Id()==op->Id() )
hgs
parents:
diff changeset
   930
        {
hgs
parents:
diff changeset
   931
#ifdef _DEBUG
hgs
parents:
diff changeset
   932
        RDebug::Print(_L("CSmsSimDialog::OpCompleted, completed copy/delete operation") );
hgs
parents:
diff changeset
   933
#endif
hgs
parents:
diff changeset
   934
        delete iCopyOrDeleteOperation;
hgs
parents:
diff changeset
   935
        iCopyOrDeleteOperation = NULL;
hgs
parents:
diff changeset
   936
        delete iProgressDialog;
hgs
parents:
diff changeset
   937
        iProgressDialog = NULL;
hgs
parents:
diff changeset
   938
        }
hgs
parents:
diff changeset
   939
hgs
parents:
diff changeset
   940
    if ( !iEnumerationOperation && !iCopyOrDeleteOperation )
hgs
parents:
diff changeset
   941
        {
hgs
parents:
diff changeset
   942
        delete iWaitDialog;
hgs
parents:
diff changeset
   943
        iWaitDialog = NULL;
hgs
parents:
diff changeset
   944
        delete iProgressDialog;
hgs
parents:
diff changeset
   945
        iProgressDialog = NULL;
hgs
parents:
diff changeset
   946
        }
hgs
parents:
diff changeset
   947
    ListBox()->DrawDeferred();
hgs
parents:
diff changeset
   948
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::OpCompleted");
hgs
parents:
diff changeset
   949
    }
hgs
parents:
diff changeset
   950
hgs
parents:
diff changeset
   951
// ----------------------------------------------------
hgs
parents:
diff changeset
   952
// CSmsSimDialog::DoOperationCompletedL
hgs
parents:
diff changeset
   953
// ----------------------------------------------------
hgs
parents:
diff changeset
   954
TBool CSmsSimDialog::DoOperationCompletedL(
hgs
parents:
diff changeset
   955
        CMsvOperation* aOperation, 
hgs
parents:
diff changeset
   956
        TInt /*aCompletionCode*/ )
hgs
parents:
diff changeset
   957
    {
hgs
parents:
diff changeset
   958
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::DoOperationCompletedL");
hgs
parents:
diff changeset
   959
    if ( !aOperation )
hgs
parents:
diff changeset
   960
        {
hgs
parents:
diff changeset
   961
        SMUMLOGGER_LEAVEFN(" CSmsSimDialog::DoOperationCompletedL - FALSE -0");
hgs
parents:
diff changeset
   962
        return EFalse;
hgs
parents:
diff changeset
   963
        }
hgs
parents:
diff changeset
   964
hgs
parents:
diff changeset
   965
    TSmsProgressBuf progressBuf;
hgs
parents:
diff changeset
   966
    progressBuf.Copy(aOperation->ProgressL());
hgs
parents:
diff changeset
   967
    TSmsProgress progress = progressBuf();
hgs
parents:
diff changeset
   968
    iSmsMtmUi.DisplayProgressSummary(progressBuf);
hgs
parents:
diff changeset
   969
    if ( iEnumerationOperation )
hgs
parents:
diff changeset
   970
        {
hgs
parents:
diff changeset
   971
#ifdef _DEBUG
hgs
parents:
diff changeset
   972
        RDebug::Print(_L("CSmsSimDialog::DoOperationCompletedL, enumeration completed %d"), progress.iError );
hgs
parents:
diff changeset
   973
#endif
hgs
parents:
diff changeset
   974
        if ( !progress.iError)
hgs
parents:
diff changeset
   975
            {
hgs
parents:
diff changeset
   976
            iSimFolderId = progress.iEnumerateFolder;
hgs
parents:
diff changeset
   977
            UpdateSimMessagesArrayL();
hgs
parents:
diff changeset
   978
            }
hgs
parents:
diff changeset
   979
        else
hgs
parents:
diff changeset
   980
            {
hgs
parents:
diff changeset
   981
            delete iWaitDialog;
hgs
parents:
diff changeset
   982
            iWaitDialog = NULL;
hgs
parents:
diff changeset
   983
            TryExitL( EAknSoftkeyBack );
hgs
parents:
diff changeset
   984
            SMUMLOGGER_LEAVEFN(" CSmsSimDialog::DoOperationCompletedL - TRUE");
hgs
parents:
diff changeset
   985
            return ETrue;
hgs
parents:
diff changeset
   986
            }
hgs
parents:
diff changeset
   987
        }
hgs
parents:
diff changeset
   988
hgs
parents:
diff changeset
   989
    if ( iCopyOrDeleteOperation )
hgs
parents:
diff changeset
   990
        {
hgs
parents:
diff changeset
   991
#ifdef _DEBUG
hgs
parents:
diff changeset
   992
        RDebug::Print(_L("CSmsSimDialog::DoOperationCompletedL, delete/copy completed %d"), progress.iError );
hgs
parents:
diff changeset
   993
#endif
hgs
parents:
diff changeset
   994
        EnumerateSimMessagesL();
hgs
parents:
diff changeset
   995
        }
hgs
parents:
diff changeset
   996
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::DoOperationCompletedL - FALSE");
hgs
parents:
diff changeset
   997
    return EFalse;
hgs
parents:
diff changeset
   998
    }
hgs
parents:
diff changeset
   999
hgs
parents:
diff changeset
  1000
// ----------------------------------------------------
hgs
parents:
diff changeset
  1001
// CSmsSimDialog::CleanupWaitDialog
hgs
parents:
diff changeset
  1002
// ----------------------------------------------------
hgs
parents:
diff changeset
  1003
void CSmsSimDialog::CleanupWaitDialog(TAny* aAny)
hgs
parents:
diff changeset
  1004
    {
hgs
parents:
diff changeset
  1005
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::CleanupWaitDialog");
hgs
parents:
diff changeset
  1006
    CEikDialog** dialog = (CEikDialog**) aAny;
hgs
parents:
diff changeset
  1007
    if (dialog && *dialog)
hgs
parents:
diff changeset
  1008
        {
hgs
parents:
diff changeset
  1009
        delete *dialog;
hgs
parents:
diff changeset
  1010
        *dialog = NULL;
hgs
parents:
diff changeset
  1011
        }
hgs
parents:
diff changeset
  1012
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::CleanupWaitDialog");
hgs
parents:
diff changeset
  1013
    }
hgs
parents:
diff changeset
  1014
hgs
parents:
diff changeset
  1015
// ----------------------------------------------------
hgs
parents:
diff changeset
  1016
// CSmsSimDialog::DialogDismissedL
hgs
parents:
diff changeset
  1017
// ----------------------------------------------------
hgs
parents:
diff changeset
  1018
void CSmsSimDialog::DialogDismissedL( TInt /*aButtonId*/ )
hgs
parents:
diff changeset
  1019
    {
hgs
parents:
diff changeset
  1020
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::DialogDismissedL");
hgs
parents:
diff changeset
  1021
    if ( iEnumerationOperation )
hgs
parents:
diff changeset
  1022
        {
hgs
parents:
diff changeset
  1023
#ifdef _DEBUG
hgs
parents:
diff changeset
  1024
        RDebug::Print(_L("CSmsSimDialog::DialogDismissedL, cancelling enumerate operation") );
hgs
parents:
diff changeset
  1025
#endif
hgs
parents:
diff changeset
  1026
        iDialogDismissed = ETrue;
hgs
parents:
diff changeset
  1027
        }
hgs
parents:
diff changeset
  1028
    else if ( iCopyOrDeleteOperation )
hgs
parents:
diff changeset
  1029
        {
hgs
parents:
diff changeset
  1030
#ifdef _DEBUG
hgs
parents:
diff changeset
  1031
        RDebug::Print(_L("CSmsSimDialog::DialogDismissedL, cancelling copy or delete operation") );
hgs
parents:
diff changeset
  1032
#endif
hgs
parents:
diff changeset
  1033
        CSimDeleteCopyOperation* oper = STATIC_CAST(CSimDeleteCopyOperation*, &iCopyOrDeleteOperation->Operation());
hgs
parents:
diff changeset
  1034
        oper->CancelAfterCurrentCompleted();
hgs
parents:
diff changeset
  1035
        }
hgs
parents:
diff changeset
  1036
#ifdef _DEBUG
hgs
parents:
diff changeset
  1037
    RDebug::Print(_L("CSmsSimDialog::DialogDismissedL, finish") );
hgs
parents:
diff changeset
  1038
#endif
hgs
parents:
diff changeset
  1039
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::DialogDismissedL");
hgs
parents:
diff changeset
  1040
    }
hgs
parents:
diff changeset
  1041
hgs
parents:
diff changeset
  1042
// ----------------------------------------------------
hgs
parents:
diff changeset
  1043
// CSmumMainSettingsDialog::LaunchHelpL
hgs
parents:
diff changeset
  1044
// launch help using context
hgs
parents:
diff changeset
  1045
// 
hgs
parents:
diff changeset
  1046
// ----------------------------------------------------
hgs
parents:
diff changeset
  1047
void CSmsSimDialog::LaunchHelpL()
hgs
parents:
diff changeset
  1048
    {   
hgs
parents:
diff changeset
  1049
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::LaunchHelpL");
hgs
parents:
diff changeset
  1050
    if ( iHelpFeatureSupported )
hgs
parents:
diff changeset
  1051
        {
hgs
parents:
diff changeset
  1052
        CCoeAppUi* editorAppUi = STATIC_CAST(CCoeAppUi*, ControlEnv()->AppUi());     
hgs
parents:
diff changeset
  1053
        CArrayFix<TCoeHelpContext>* helpContext = editorAppUi->AppHelpContextL();   
hgs
parents:
diff changeset
  1054
        HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext );
hgs
parents:
diff changeset
  1055
        }
hgs
parents:
diff changeset
  1056
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::LaunchHelpL");
hgs
parents:
diff changeset
  1057
    }
hgs
parents:
diff changeset
  1058
hgs
parents:
diff changeset
  1059
hgs
parents:
diff changeset
  1060
// ----------------------------------------------------
hgs
parents:
diff changeset
  1061
// CSmumMainSettingsDialog::GetHelpContext
hgs
parents:
diff changeset
  1062
// returns helpcontext as aContext
hgs
parents:
diff changeset
  1063
// 
hgs
parents:
diff changeset
  1064
// ----------------------------------------------------
hgs
parents:
diff changeset
  1065
void CSmsSimDialog::GetHelpContext
hgs
parents:
diff changeset
  1066
(TCoeHelpContext& aContext) const
hgs
parents:
diff changeset
  1067
{  
hgs
parents:
diff changeset
  1068
const TUid KUidMce ={0x100058C5};      
hgs
parents:
diff changeset
  1069
aContext.iMajor = KUidMce;
hgs
parents:
diff changeset
  1070
aContext.iContext = KMCE_HLP_SIM;         
hgs
parents:
diff changeset
  1071
}
hgs
parents:
diff changeset
  1072
hgs
parents:
diff changeset
  1073
// ----------------------------------------------------
hgs
parents:
diff changeset
  1074
// CSmsSimDialog::LaunchNoteAndOperationL
hgs
parents:
diff changeset
  1075
// ----------------------------------------------------
hgs
parents:
diff changeset
  1076
void CSmsSimDialog::LaunchNoteAndOperationL( TMsvId aDestinationId )
hgs
parents:
diff changeset
  1077
    {
hgs
parents:
diff changeset
  1078
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::LaunchNoteAndOperationL");
hgs
parents:
diff changeset
  1079
    // store msg count before operation
hgs
parents:
diff changeset
  1080
    iMsgCountBeforeOperation = iMessages->MdcaCount();
hgs
parents:
diff changeset
  1081
hgs
parents:
diff changeset
  1082
    delete iProgressDialog;
hgs
parents:
diff changeset
  1083
    iProgressDialog = NULL;
hgs
parents:
diff changeset
  1084
    iProgressDialog = new (ELeave) CAknProgressDialog(
hgs
parents:
diff changeset
  1085
            (REINTERPRET_CAST(CEikDialog**, &iProgressDialog)),
hgs
parents:
diff changeset
  1086
            ETrue
hgs
parents:
diff changeset
  1087
    );
hgs
parents:
diff changeset
  1088
    CleanupStack::PushL(TCleanupItem(CleanupWaitDialog, 
hgs
parents:
diff changeset
  1089
            (TAny**)&iProgressDialog));
hgs
parents:
diff changeset
  1090
    iProgressDialog->SetCallback( this );
hgs
parents:
diff changeset
  1091
    CEikImage* icon = NULL;
hgs
parents:
diff changeset
  1092
    icon = new (ELeave) CEikImage;
hgs
parents:
diff changeset
  1093
    CleanupStack::PushL(icon);   
hgs
parents:
diff changeset
  1094
    TFileName fileName = AknIconUtils::AvkonIconFileName();  //avkon.mbm file name and path
hgs
parents:
diff changeset
  1095
hgs
parents:
diff changeset
  1096
    //select which icon to show   
hgs
parents:
diff changeset
  1097
    const TInt bitmapIndex = aDestinationId ? 
hgs
parents:
diff changeset
  1098
        EMbmAvkonQgn_note_copy : EMbmAvkonQgn_note_erased;
hgs
parents:
diff changeset
  1099
    const TInt maskIndex = aDestinationId ? 
hgs
parents:
diff changeset
  1100
        EMbmAvkonQgn_note_copy_mask : EMbmAvkonQgn_note_erased_mask;
hgs
parents:
diff changeset
  1101
hgs
parents:
diff changeset
  1102
    const TAknsItemID id = aDestinationId ? 
hgs
parents:
diff changeset
  1103
        KAknsIIDQgnNoteCopy : KAknsIIDQgnNoteErased;
hgs
parents:
diff changeset
  1104
hgs
parents:
diff changeset
  1105
    CFbsBitmap* targetBitmap;
hgs
parents:
diff changeset
  1106
    CFbsBitmap* targetBitmapMask;
hgs
parents:
diff changeset
  1107
    AknsUtils::CreateIconL( AknsUtils::SkinInstance(), id , targetBitmap,
hgs
parents:
diff changeset
  1108
            targetBitmapMask, fileName, bitmapIndex, maskIndex );
hgs
parents:
diff changeset
  1109
hgs
parents:
diff changeset
  1110
    //set icon
hgs
parents:
diff changeset
  1111
    icon->SetPicture(targetBitmap, targetBitmapMask);
hgs
parents:
diff changeset
  1112
    iProgressDialog->SetImageL(icon);
hgs
parents:
diff changeset
  1113
    CleanupStack::Pop(); // icon   
hgs
parents:
diff changeset
  1114
    iProgressDialog->ExecuteLD( R_DEFAULT_SIM_DIALOG_PROGRESS_NOTE );
hgs
parents:
diff changeset
  1115
hgs
parents:
diff changeset
  1116
    CMsvEntrySelection* selection = CreateSelectionArrayLC();
hgs
parents:
diff changeset
  1117
    CAknInputBlock::NewLC(); // no need to store the pointer returned, It's on the Cleanup Stack
hgs
parents:
diff changeset
  1118
    CMsvSingleOpWatcher* singleOpWatcher=CMsvSingleOpWatcher::NewL( *this );
hgs
parents:
diff changeset
  1119
    CleanupStack::PushL(singleOpWatcher);
hgs
parents:
diff changeset
  1120
hgs
parents:
diff changeset
  1121
    CMsvOperation* operation = NULL;
hgs
parents:
diff changeset
  1122
    if ( aDestinationId )
hgs
parents:
diff changeset
  1123
        { // copy operation 
hgs
parents:
diff changeset
  1124
        operation = CSimDeleteCopyOperation::NewL(
hgs
parents:
diff changeset
  1125
                iSession, 
hgs
parents:
diff changeset
  1126
                iSmsMtmUi, 
hgs
parents:
diff changeset
  1127
                singleOpWatcher->iStatus, 
hgs
parents:
diff changeset
  1128
                selection,
hgs
parents:
diff changeset
  1129
                aDestinationId, 
hgs
parents:
diff changeset
  1130
                *iProgressDialog, 
hgs
parents:
diff changeset
  1131
                iCoeEnv );
hgs
parents:
diff changeset
  1132
        }
hgs
parents:
diff changeset
  1133
    else
hgs
parents:
diff changeset
  1134
        { // delete operation
hgs
parents:
diff changeset
  1135
        operation = CSimDeleteCopyOperation::NewL(
hgs
parents:
diff changeset
  1136
                iSession, 
hgs
parents:
diff changeset
  1137
                iSmsMtmUi, 
hgs
parents:
diff changeset
  1138
                singleOpWatcher->iStatus, 
hgs
parents:
diff changeset
  1139
                selection,
hgs
parents:
diff changeset
  1140
                *iProgressDialog, 
hgs
parents:
diff changeset
  1141
                iCoeEnv );
hgs
parents:
diff changeset
  1142
        }
hgs
parents:
diff changeset
  1143
hgs
parents:
diff changeset
  1144
    singleOpWatcher->SetOperation( operation );
hgs
parents:
diff changeset
  1145
    iCopyOrDeleteOperation = singleOpWatcher;
hgs
parents:
diff changeset
  1146
    CleanupStack::Pop( singleOpWatcher );
hgs
parents:
diff changeset
  1147
    CleanupStack::PopAndDestroy( 2, selection ); // CAknInputBlock
hgs
parents:
diff changeset
  1148
    CleanupStack::Pop( ); // CleanupWaitDialog
hgs
parents:
diff changeset
  1149
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::LaunchNoteAndOperationL");
hgs
parents:
diff changeset
  1150
    }
hgs
parents:
diff changeset
  1151
hgs
parents:
diff changeset
  1152
// ----------------------------------------------------
hgs
parents:
diff changeset
  1153
// CSmsSimDialog::UpdateMskL
hgs
parents:
diff changeset
  1154
// ----------------------------------------------------    
hgs
parents:
diff changeset
  1155
void CSmsSimDialog::UpdateMskL()
hgs
parents:
diff changeset
  1156
    {
hgs
parents:
diff changeset
  1157
    SMUMLOGGER_ENTERFN(" CSmsSimDialog::UpdateMskL");
hgs
parents:
diff changeset
  1158
    TInt resId = 0;
hgs
parents:
diff changeset
  1159
    const TInt KMskPosition = 3;
hgs
parents:
diff changeset
  1160
hgs
parents:
diff changeset
  1161
    if( ListBox()->Model()->NumberOfItems() == 0 ) 
hgs
parents:
diff changeset
  1162
        {//show empty button
hgs
parents:
diff changeset
  1163
        resId = R_DEFAULT_SIM_MSK_BUTTON_EMPTY;
hgs
parents:
diff changeset
  1164
        }
hgs
parents:
diff changeset
  1165
    else
hgs
parents:
diff changeset
  1166
        {
hgs
parents:
diff changeset
  1167
        resId = R_DEFAULT_SIM_MSK_BUTTON_CONTEXTMENU;
hgs
parents:
diff changeset
  1168
        }
hgs
parents:
diff changeset
  1169
hgs
parents:
diff changeset
  1170
    CEikButtonGroupContainer &cba = ButtonGroupContainer();
hgs
parents:
diff changeset
  1171
    cba.SetCommandL( KMskPosition, resId );
hgs
parents:
diff changeset
  1172
    cba.DrawDeferred();
hgs
parents:
diff changeset
  1173
    SMUMLOGGER_LEAVEFN(" CSmsSimDialog::UpdateMskL");
hgs
parents:
diff changeset
  1174
    }
hgs
parents:
diff changeset
  1175
//  End of File