messagingappbase/mcesettings/src/MceSettingsGeneralSettingsDialog.cpp
author hgs
Wed, 03 Nov 2010 22:55:44 +0530
changeset 80 8b14b30db193
parent 79 2981cb3aa489
permissions -rw-r--r--
201044_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002 - 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
*     Message centre's general settings dialog.
hgs
parents:
diff changeset
    16
*
hgs
parents:
diff changeset
    17
*/
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
// INCLUDE FILES
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include <aknViewAppUi.h>
hgs
parents:
diff changeset
    24
#include <AknDlgShut.h>
hgs
parents:
diff changeset
    25
#include <muiusettingsarray.h>  // CMuiuSettingsArray
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include <centralrepository.h>
hgs
parents:
diff changeset
    28
#include <messaginginternalcrkeys.h>
hgs
parents:
diff changeset
    29
#include <e32property.h>
hgs
parents:
diff changeset
    30
#include <messaginginternalpskeys.h>
hgs
parents:
diff changeset
    31
#include <e32capability.h>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
#include "MceSettingsGeneralSettingsDialog.h"
hgs
parents:
diff changeset
    34
#include "MceSettingsMoveProgress.h"    // CMceMoveProgress
hgs
parents:
diff changeset
    35
#include "MceSettingsIds.hrh"
hgs
parents:
diff changeset
    36
#include "MceSettingsAccountManager.h"
hgs
parents:
diff changeset
    37
#include <MceSettings.rsg>
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
#include <CAknMemorySelectionSettingItem.h> // CAknMemorySelectionSettingPage
hgs
parents:
diff changeset
    40
#include <msvuids.h>            // KUidMsvServiceEntry
hgs
parents:
diff changeset
    41
#include <akninputblock.h>      // CAknInputBlock
hgs
parents:
diff changeset
    42
#include <aknnotewrappers.h>    // CAknErrorNote
hgs
parents:
diff changeset
    43
#include <bautils.h>            // BaflUtils
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
#include <MuiuOperationWait.h>  // CMuiuOperationWait
hgs
parents:
diff changeset
    46
#include <sysutil.h>            // Sysutil
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
#include <csxhelp/mce.hlp.hrh>
hgs
parents:
diff changeset
    49
#include <featmgr.h>
hgs
parents:
diff changeset
    50
#include <hlplch.h>             // For HlpLauncher
hgs
parents:
diff changeset
    51
#include "MceSettingsUtils.h"
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
#ifdef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
    54
#include <AknCommonDialogsDynMem.h> // Media type
hgs
parents:
diff changeset
    55
#include <CAknMemorySelectionDialogMultiDrive.h> // CAknMemorySelectionDialogMultiDrive
hgs
parents:
diff changeset
    56
#include <driveinfo.h>          // DriveInfo
hgs
parents:
diff changeset
    57
#endif //RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
    58
#include <e32cmn.h>             // RBuf
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
#include <bldvariant.hrh>
hgs
parents:
diff changeset
    61
#include <data_caging_path_literals.hrh>
hgs
parents:
diff changeset
    62
#include <msvids.h>
hgs
parents:
diff changeset
    63
#include <mtudreg.h>
hgs
parents:
diff changeset
    64
#include <miutset.h>
hgs
parents:
diff changeset
    65
#include <SendUiConsts.h>
hgs
parents:
diff changeset
    66
// CONSTANTS
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
#define KMceApplicationUidValue         0x100058C5
hgs
parents:
diff changeset
    69
const TUid KMceApplicationUid           = {KMceApplicationUidValue};
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
const TInt KMceDefaultSentItemsCount    = 15;
hgs
parents:
diff changeset
    72
const TInt KMceDefaultSentItemsOn       = 0; // first item in list array is 'On'
hgs
parents:
diff changeset
    73
const TInt KMceDefaultSentItemsOff      = 1; // second item in list array is 'Off'
hgs
parents:
diff changeset
    74
const TInt KMceDefaultSentItems         = 1; // == On
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
const TInt KMceEmptyMessageStore        = 40000; // size of empty message store
hgs
parents:
diff changeset
    77
const TInt KMceEditorsWaitInterval      = 4000000; // wait one second,that message editors close
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
const TInt KMSKPosition = 3;
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
const TInt KMceListTypeTwoRow       = 0;
hgs
parents:
diff changeset
    82
const TInt KMceListTypeOneRow       = 1;
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
#define KUidMsgTypeCmailMtmVal               0x2001F406
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
#ifdef _DEBUG
hgs
parents:
diff changeset
    87
_LIT( KPanicText, "MceSettings" );
hgs
parents:
diff changeset
    88
const TInt KCRepositorySettingFailure = 1;
hgs
parents:
diff changeset
    89
#endif
hgs
parents:
diff changeset
    90
#ifdef RD_MESSAGING_GENERAL_SETTINGS_RENOVATION
hgs
parents:
diff changeset
    91
_LIT( KMceDirAndFile,"MceSettings.rsc" );
hgs
parents:
diff changeset
    92
#endif // RD_MESSAGING_GENERAL_SETTINGS_RENOVATION
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
// MODULE DATA STRUCTURES
hgs
parents:
diff changeset
    95
enum TMceGeneralSettings
hgs
parents:
diff changeset
    96
    {
hgs
parents:
diff changeset
    97
    EMceGeneralSettingsSentItemsInUse,
hgs
parents:
diff changeset
    98
    EMceGeneralSettingsSentItemsCount,
hgs
parents:
diff changeset
    99
    EMceGeneralSettingsMemoryInUse,
hgs
parents:
diff changeset
   100
    EMceGeneralSettingsInboxListType,
hgs
parents:
diff changeset
   101
    EMceGeneralSettingsMailListType
hgs
parents:
diff changeset
   102
    };
hgs
parents:
diff changeset
   103
// These constants are added to handle 	"show e-mails in groups", when R_MCE_GENERAL_SETTINGS_ITEMS is used for MCESETTINGS.
hgs
parents:
diff changeset
   104
const TInt MceGeneralSettingsInboxListType = 2;
hgs
parents:
diff changeset
   105
const TInt MceGeneralSettingsMailListType = 3;
hgs
parents:
diff changeset
   106
#ifdef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   107
const TInt KSpaceDelimiter=' ';
hgs
parents:
diff changeset
   108
#endif //RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
EXPORT_C TInt CMceGeneralSettingsDialog::CreateAndExecuteL(
hgs
parents:
diff changeset
   113
    CMsvSession* aSession, MMsvSessionObserver& aObserver )
hgs
parents:
diff changeset
   114
    {
hgs
parents:
diff changeset
   115
#ifdef RD_MESSAGING_GENERAL_SETTINGS_RENOVATION
hgs
parents:
diff changeset
   116
    // general settings are list item in the list
hgs
parents:
diff changeset
   117
    CMceGeneralSettingsDialog* generalSettingsDlg =
hgs
parents:
diff changeset
   118
        new (ELeave) CMceGeneralSettingsDialog( aSession, aObserver, NULL );
hgs
parents:
diff changeset
   119
    CleanupStack::PushL( generalSettingsDlg );
hgs
parents:
diff changeset
   120
    generalSettingsDlg->ConstructL( R_MCE_GENERAL_SETTINGS_CHOICE_MENUBAR );
hgs
parents:
diff changeset
   121
    CleanupStack::Pop( generalSettingsDlg ); 
hgs
parents:
diff changeset
   122
    return generalSettingsDlg->ExecuteLD( R_MCE_GENERAL_SETTINGS );
hgs
parents:
diff changeset
   123
#else
hgs
parents:
diff changeset
   124
    User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   125
    return KErrNotSupported;
hgs
parents:
diff changeset
   126
#endif // RD_MESSAGING_GENERAL_SETTINGS_RENOVATION
hgs
parents:
diff changeset
   127
    }
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
// C++ default constructor can NOT contain any code that
hgs
parents:
diff changeset
   130
// might leave.
hgs
parents:
diff changeset
   131
// ----------------------------------------------------
hgs
parents:
diff changeset
   132
// CMceGeneralSettingsDialog::Constructor
hgs
parents:
diff changeset
   133
// ----------------------------------------------------
hgs
parents:
diff changeset
   134
CMceGeneralSettingsDialog::CMceGeneralSettingsDialog( 
hgs
parents:
diff changeset
   135
    CMsvSession* aSession, 
hgs
parents:
diff changeset
   136
    MMsvSessionObserver& aObserver, 
hgs
parents:
diff changeset
   137
    MMceSettingsAccountManager* aManager )
hgs
parents:
diff changeset
   138
    :
hgs
parents:
diff changeset
   139
#ifdef RD_MESSAGING_GENERAL_SETTINGS_RENOVATION
hgs
parents:
diff changeset
   140
    CMceSettingsTitlePaneHandlerDialog(),
hgs
parents:
diff changeset
   141
    iSession( aSession ), iObserver( aObserver ),
hgs
parents:
diff changeset
   142
    iResources( *CCoeEnv::Static() ), iAccountManager( aManager ),
hgs
parents:
diff changeset
   143
#else
hgs
parents:
diff changeset
   144
    CMceSettingsTitlePaneHandlerDialog(),
hgs
parents:
diff changeset
   145
    iSession( aSession ), iObserver(aObserver ), iAccountManager( aManager ),
hgs
parents:
diff changeset
   146
#endif
hgs
parents:
diff changeset
   147
    iChangeDrive(EFalse),
hgs
parents:
diff changeset
   148
	iIsThirdPartyMail( EFalse )
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
hgs
parents:
diff changeset
   154
void CMceGeneralSettingsDialog::ConstructL( TInt aResource )
hgs
parents:
diff changeset
   155
    {
hgs
parents:
diff changeset
   156
#ifdef RD_MESSAGING_GENERAL_SETTINGS_RENOVATION
hgs
parents:
diff changeset
   157
    TParse fp;
hgs
parents:
diff changeset
   158
    fp.Set( KMceDirAndFile, &KDC_RESOURCE_FILES_DIR , NULL );
hgs
parents:
diff changeset
   159
    TFileName fileName = fp.FullName();
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
    iResources.OpenL( fileName );
hgs
parents:
diff changeset
   162
#endif
hgs
parents:
diff changeset
   163
    CMceSettingsTitlePaneHandlerDialog::ConstructL( aResource );
hgs
parents:
diff changeset
   164
	iIsThirdPartyMail = IsThirdPartyMailBoxL();
hgs
parents:
diff changeset
   165
    }
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
// ----------------------------------------------------
hgs
parents:
diff changeset
   168
// CMceGeneralSettingsDialog::Destructor
hgs
parents:
diff changeset
   169
// ----------------------------------------------------
hgs
parents:
diff changeset
   170
CMceGeneralSettingsDialog::~CMceGeneralSettingsDialog()
hgs
parents:
diff changeset
   171
    {    
hgs
parents:
diff changeset
   172
#ifdef RD_MESSAGING_GENERAL_SETTINGS_RENOVATION
hgs
parents:
diff changeset
   173
    iResources.Close();
hgs
parents:
diff changeset
   174
#endif // RD_MESSAGING_GENERAL_SETTINGS_RENOVATION
hgs
parents:
diff changeset
   175
    // don't delete iAccountManager
hgs
parents:
diff changeset
   176
    }
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
// ----------------------------------------------------
hgs
parents:
diff changeset
   179
// CMceGeneralSettingsDialog::OkToExitL
hgs
parents:
diff changeset
   180
// ----------------------------------------------------
hgs
parents:
diff changeset
   181
TInt CMceGeneralSettingsDialog::OkToExitL( TInt aButtonId )
hgs
parents:
diff changeset
   182
    {
hgs
parents:
diff changeset
   183
    TBool okToExit = CAknDialog::OkToExitL( aButtonId );
hgs
parents:
diff changeset
   184
    if ( aButtonId == EAknSoftkeyBack || okToExit )
hgs
parents:
diff changeset
   185
        {
hgs
parents:
diff changeset
   186
        CRepository* repository = NULL;
hgs
parents:
diff changeset
   187
        TRAPD( ret, repository = CRepository::NewL( KCRUidMuiuSettings ) );
hgs
parents:
diff changeset
   188
        CleanupStack::PushL( repository );
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
        if ( ret == KErrNone )
hgs
parents:
diff changeset
   191
            {
hgs
parents:
diff changeset
   192
            ret = repository->Set( KMuiuSentItemsInUse, 
hgs
parents:
diff changeset
   193
            ( *iMceSettingsArray )[EMceGeneralSettingsSentItemsInUse].iCurrentNumber == KMceDefaultSentItemsOn );
hgs
parents:
diff changeset
   194
            __ASSERT_DEBUG( !ret, User::Panic( KPanicText,KCRepositorySettingFailure ) );
hgs
parents:
diff changeset
   195
#ifdef _DEBUG
hgs
parents:
diff changeset
   196
            TInt setValue = ( *iMceSettingsArray )[EMceGeneralSettingsSentItemsInUse].iCurrentNumber;
hgs
parents:
diff changeset
   197
            setValue = ( setValue == KMceDefaultSentItemsOn );
hgs
parents:
diff changeset
   198
#endif
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
            ret = repository->Set( KMuiuSentItemsCount,
hgs
parents:
diff changeset
   201
                ( *iMceSettingsArray )[EMceGeneralSettingsSentItemsCount].iCurrentNumber );
hgs
parents:
diff changeset
   202
            __ASSERT_DEBUG( !ret, User::Panic(KPanicText,KCRepositorySettingFailure) );
hgs
parents:
diff changeset
   203
#ifdef _DEBUG
hgs
parents:
diff changeset
   204
            setValue = ( *iMceSettingsArray )[EMceGeneralSettingsSentItemsCount].iCurrentNumber;
hgs
parents:
diff changeset
   205
#endif
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
            if ( iMemoryInUse )
hgs
parents:
diff changeset
   208
                {
hgs
parents:
diff changeset
   209
                ret = repository->Set( KMuiuInboxMessageListType,
hgs
parents:
diff changeset
   210
                  ( *iMceSettingsArray )[EMceGeneralSettingsInboxListType].iCurrentNumber );
hgs
parents:
diff changeset
   211
                }
hgs
parents:
diff changeset
   212
            else
hgs
parents:
diff changeset
   213
                {
hgs
parents:
diff changeset
   214
                ret = repository->Set( KMuiuInboxMessageListType,
hgs
parents:
diff changeset
   215
                  ( *iMceSettingsArray )[MceGeneralSettingsInboxListType].iCurrentNumber );
hgs
parents:
diff changeset
   216
                }
hgs
parents:
diff changeset
   217
            __ASSERT_DEBUG( !ret, User::Panic(KPanicText,KCRepositorySettingFailure) );            
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
            if ( iIsThirdPartyMail )
hgs
parents:
diff changeset
   220
                {
hgs
parents:
diff changeset
   221
                if ( iMemoryInUse )
hgs
parents:
diff changeset
   222
                    {
hgs
parents:
diff changeset
   223
                    ret = repository->Set( KMuiuMailMessageListType,
hgs
parents:
diff changeset
   224
                      ( *iMceSettingsArray )[EMceGeneralSettingsMailListType].iCurrentNumber );
hgs
parents:
diff changeset
   225
                    }
hgs
parents:
diff changeset
   226
                else
hgs
parents:
diff changeset
   227
                    {
hgs
parents:
diff changeset
   228
                    ret = repository->Set( KMuiuMailMessageListType,
hgs
parents:
diff changeset
   229
                      ( *iMceSettingsArray )[MceGeneralSettingsMailListType].iCurrentNumber );
hgs
parents:
diff changeset
   230
                    }
hgs
parents:
diff changeset
   231
                __ASSERT_DEBUG( !ret, User::Panic(KPanicText,KCRepositorySettingFailure) );
hgs
parents:
diff changeset
   232
                }
hgs
parents:
diff changeset
   233
            
hgs
parents:
diff changeset
   234
            }
hgs
parents:
diff changeset
   235
        CleanupStack::Pop( repository );
hgs
parents:
diff changeset
   236
        delete repository;
hgs
parents:
diff changeset
   237
        }
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
    if ( aButtonId == EMceSettingsCmdSettingsDialogOpen || 
hgs
parents:
diff changeset
   240
          aButtonId == EMceSettingsCmdSettingsDialogChange )
hgs
parents:
diff changeset
   241
        {
hgs
parents:
diff changeset
   242
        ProcessCommandL( aButtonId );
hgs
parents:
diff changeset
   243
        okToExit = EFalse; // Cannot exit, since MSK was pressed
hgs
parents:
diff changeset
   244
        }
hgs
parents:
diff changeset
   245
    else if ( aButtonId != EEikBidCancel && okToExit )
hgs
parents:
diff changeset
   246
        {
hgs
parents:
diff changeset
   247
        RestoreTitleTextL();
hgs
parents:
diff changeset
   248
        }
hgs
parents:
diff changeset
   249
    return okToExit;
hgs
parents:
diff changeset
   250
    }
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
// ----------------------------------------------------
hgs
parents:
diff changeset
   253
// CMceGeneralSettingsDialog::HandleListBoxEventL
hgs
parents:
diff changeset
   254
// ----------------------------------------------------
hgs
parents:
diff changeset
   255
void CMceGeneralSettingsDialog::HandleListBoxEventL(
hgs
parents:
diff changeset
   256
    CEikListBox* /*aListBox*/,
hgs
parents:
diff changeset
   257
    TListBoxEvent aEventType )
hgs
parents:
diff changeset
   258
    {    
hgs
parents:
diff changeset
   259
    CEikTextListBox* list=STATIC_CAST( CEikTextListBox*, 
hgs
parents:
diff changeset
   260
        Control( EMceSettingsIdOtherItems ) );
hgs
parents:
diff changeset
   261
    switch(aEventType)
hgs
parents:
diff changeset
   262
        {
hgs
parents:
diff changeset
   263
        case EEventEnterKeyPressed:
hgs
parents:
diff changeset
   264
        case EEventItemSingleClicked:
hgs
parents:
diff changeset
   265
            {            
hgs
parents:
diff changeset
   266
            TInt item = list->CurrentItemIndex();            
hgs
parents:
diff changeset
   267
            if ( iMemoryInUse && item == EMceGeneralSettingsMemoryInUse )               
hgs
parents:
diff changeset
   268
                {
hgs
parents:
diff changeset
   269
                HandleMemoryInUseDialogL();
hgs
parents:
diff changeset
   270
                }
hgs
parents:
diff changeset
   271
            else
hgs
parents:
diff changeset
   272
                {
hgs
parents:
diff changeset
   273
                iMceSettingsArray->EditItemL( item, ETrue );               
hgs
parents:
diff changeset
   274
                list->DrawNow();
hgs
parents:
diff changeset
   275
                }
hgs
parents:
diff changeset
   276
            }
hgs
parents:
diff changeset
   277
            break;
hgs
parents:
diff changeset
   278
            
hgs
parents:
diff changeset
   279
        default:
hgs
parents:
diff changeset
   280
            break;
hgs
parents:
diff changeset
   281
        }
hgs
parents:
diff changeset
   282
    }
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
// ----------------------------------------------------
hgs
parents:
diff changeset
   285
// CMceGeneralSettingsDialog::ProcessCommandL
hgs
parents:
diff changeset
   286
// ----------------------------------------------------
hgs
parents:
diff changeset
   287
void CMceGeneralSettingsDialog::ProcessCommandL( TInt aCommandId )
hgs
parents:
diff changeset
   288
    {
hgs
parents:
diff changeset
   289
    CAknDialog::ProcessCommandL( aCommandId ); // hides menu
hgs
parents:
diff changeset
   290
    if ( aCommandId == EMceSettingsCmdSettingsDialogExit )
hgs
parents:
diff changeset
   291
        {
hgs
parents:
diff changeset
   292
        if (iAvkonViewAppUi->ExitHidesInBackground()) 
hgs
parents:
diff changeset
   293
            { 
hgs
parents:
diff changeset
   294
            iAvkonViewAppUi->ProcessCommandL( EAknCmdHideInBackground );
hgs
parents:
diff changeset
   295
            }
hgs
parents:
diff changeset
   296
        else
hgs
parents:
diff changeset
   297
            {
hgs
parents:
diff changeset
   298
            iAvkonViewAppUi->ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
   299
            }
hgs
parents:
diff changeset
   300
        return;
hgs
parents:
diff changeset
   301
        }
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
    
hgs
parents:
diff changeset
   304
    CEikTextListBox* list=STATIC_CAST( CEikTextListBox*, 
hgs
parents:
diff changeset
   305
        Control( EMceSettingsIdOtherItems ) );
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
    switch ( aCommandId )
hgs
parents:
diff changeset
   308
        {
hgs
parents:
diff changeset
   309
        case EMceSettingsCmdSettingsDialogOpen:
hgs
parents:
diff changeset
   310
            {            
hgs
parents:
diff changeset
   311
            TInt item = list->CurrentItemIndex();
hgs
parents:
diff changeset
   312
            if ( iMemoryInUse && item == EMceGeneralSettingsMemoryInUse )               
hgs
parents:
diff changeset
   313
                {
hgs
parents:
diff changeset
   314
                HandleMemoryInUseDialogL();
hgs
parents:
diff changeset
   315
                }
hgs
parents:
diff changeset
   316
            else
hgs
parents:
diff changeset
   317
                {
hgs
parents:
diff changeset
   318
                iMceSettingsArray->EditItemL( item, EFalse );                
hgs
parents:
diff changeset
   319
                list->DrawNow();
hgs
parents:
diff changeset
   320
                }       
hgs
parents:
diff changeset
   321
            }
hgs
parents:
diff changeset
   322
            break;           
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
        case EMceSettingsCmdSettingsDialogHelp:
hgs
parents:
diff changeset
   325
                {
hgs
parents:
diff changeset
   326
                LaunchHelpL();                
hgs
parents:
diff changeset
   327
                }
hgs
parents:
diff changeset
   328
                break;           
hgs
parents:
diff changeset
   329
        
hgs
parents:
diff changeset
   330
        case EMceSettingsCmdSettingsDialogChange:
hgs
parents:
diff changeset
   331
                {
hgs
parents:
diff changeset
   332
                TInt item = list->CurrentItemIndex();
hgs
parents:
diff changeset
   333
            if ( iMemoryInUse && item == EMceGeneralSettingsMemoryInUse )               
hgs
parents:
diff changeset
   334
                {
hgs
parents:
diff changeset
   335
                HandleMemoryInUseDialogL();
hgs
parents:
diff changeset
   336
                }
hgs
parents:
diff changeset
   337
            else
hgs
parents:
diff changeset
   338
                {
hgs
parents:
diff changeset
   339
                iMceSettingsArray->EditItemL( item,  ETrue );                
hgs
parents:
diff changeset
   340
                list->DrawNow();
hgs
parents:
diff changeset
   341
                }                        
hgs
parents:
diff changeset
   342
            }
hgs
parents:
diff changeset
   343
            break; 
hgs
parents:
diff changeset
   344
        default :
hgs
parents:
diff changeset
   345
            break;
hgs
parents:
diff changeset
   346
        }
hgs
parents:
diff changeset
   347
    }
hgs
parents:
diff changeset
   348
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
// ----------------------------------------------------
hgs
parents:
diff changeset
   351
// CMceGeneralSettingsDialog::PreLayoutDynInitL
hgs
parents:
diff changeset
   352
// ----------------------------------------------------
hgs
parents:
diff changeset
   353
void CMceGeneralSettingsDialog::PreLayoutDynInitL( )
hgs
parents:
diff changeset
   354
    {
hgs
parents:
diff changeset
   355
    //check if 'Memory in use' -option is enabled in mce settings
hgs
parents:
diff changeset
   356
    iMemoryInUse = ETrue;
hgs
parents:
diff changeset
   357
    iMemoryInUse = MceSettingsUtils::MemoryInUseOptionL();
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
    CEikTextListBox* list=STATIC_CAST( CEikTextListBox*, 
hgs
parents:
diff changeset
   360
        Control( EMceSettingsIdOtherItems ) );
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
    // Setting scrollbar-indicators on
hgs
parents:
diff changeset
   363
    list->CreateScrollBarFrameL( ETrue );
hgs
parents:
diff changeset
   364
    list->ScrollBarFrame()->SetScrollBarVisibilityL(
hgs
parents:
diff changeset
   365
        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
    if ( iMemoryInUse )
hgs
parents:
diff changeset
   368
        {
hgs
parents:
diff changeset
   369
        iMceSettingsArray = CMuiuSettingsArray::NewL( R_MCE_GENERAL_MMC );
hgs
parents:
diff changeset
   370
        }
hgs
parents:
diff changeset
   371
    else
hgs
parents:
diff changeset
   372
        {
hgs
parents:
diff changeset
   373
        iMceSettingsArray = CMuiuSettingsArray::NewL( R_MCE_GENERAL_SETTINGS_ITEMS );
hgs
parents:
diff changeset
   374
        } 
hgs
parents:
diff changeset
   375
hgs
parents:
diff changeset
   376
    list->SetListBoxObserver( this );
hgs
parents:
diff changeset
   377
hgs
parents:
diff changeset
   378
    CRepository* repository = NULL;
hgs
parents:
diff changeset
   379
    TRAPD( ret, repository = CRepository::NewL( KCRUidMuiuSettings ) );
hgs
parents:
diff changeset
   380
    CleanupStack::PushL( repository );
hgs
parents:
diff changeset
   381
hgs
parents:
diff changeset
   382
    if ( ret == KErrNone )
hgs
parents:
diff changeset
   383
        {
hgs
parents:
diff changeset
   384
        TInt i;
hgs
parents:
diff changeset
   385
        if ( repository->Get( KMuiuSentItemsInUse, i ) != KErrNone )
hgs
parents:
diff changeset
   386
            {
hgs
parents:
diff changeset
   387
            i = KMceDefaultSentItems;
hgs
parents:
diff changeset
   388
            }
hgs
parents:
diff changeset
   389
        ( *iMceSettingsArray )[EMceGeneralSettingsSentItemsInUse].iCurrentNumber =
hgs
parents:
diff changeset
   390
                i ? KMceDefaultSentItemsOn : KMceDefaultSentItemsOff;
hgs
parents:
diff changeset
   391
 
hgs
parents:
diff changeset
   392
        if ( repository->Get(KMuiuSentItemsCount, i ) != KErrNone )
hgs
parents:
diff changeset
   393
            {
hgs
parents:
diff changeset
   394
            i = KMceDefaultSentItemsCount;
hgs
parents:
diff changeset
   395
            }
hgs
parents:
diff changeset
   396
        ( *iMceSettingsArray )[EMceGeneralSettingsSentItemsCount].iCurrentNumber = i;
hgs
parents:
diff changeset
   397
        ( *iMceSettingsArray )[EMceGeneralSettingsSentItemsCount].iUserText.Num( i );
hgs
parents:
diff changeset
   398
        
hgs
parents:
diff changeset
   399
        // Get one/two row list type selection
hgs
parents:
diff changeset
   400
        if ( repository->Get( KMuiuInboxMessageListType, i ) != KErrNone )
hgs
parents:
diff changeset
   401
            {
hgs
parents:
diff changeset
   402
            i = KMceListTypeTwoRow;
hgs
parents:
diff changeset
   403
            }
hgs
parents:
diff changeset
   404
        if ( iMemoryInUse )
hgs
parents:
diff changeset
   405
            {
hgs
parents:
diff changeset
   406
            ( *iMceSettingsArray )[EMceGeneralSettingsInboxListType].iCurrentNumber =
hgs
parents:
diff changeset
   407
                   i ? KMceListTypeOneRow : KMceListTypeTwoRow;
hgs
parents:
diff changeset
   408
            }
hgs
parents:
diff changeset
   409
        else
hgs
parents:
diff changeset
   410
            {
hgs
parents:
diff changeset
   411
            ( *iMceSettingsArray )[MceGeneralSettingsInboxListType].iCurrentNumber =
hgs
parents:
diff changeset
   412
                   i ? KMceListTypeOneRow : KMceListTypeTwoRow;
hgs
parents:
diff changeset
   413
            }
hgs
parents:
diff changeset
   414
        
hgs
parents:
diff changeset
   415
        if ( iIsThirdPartyMail )
hgs
parents:
diff changeset
   416
            {
hgs
parents:
diff changeset
   417
             // Get one/two row list type selection
hgs
parents:
diff changeset
   418
             if ( repository->Get( KMuiuMailMessageListType, i ) != KErrNone )
hgs
parents:
diff changeset
   419
                 {
hgs
parents:
diff changeset
   420
                 i = KMceListTypeOneRow;
hgs
parents:
diff changeset
   421
                 }
hgs
parents:
diff changeset
   422
             if ( iMemoryInUse )
hgs
parents:
diff changeset
   423
                 {
hgs
parents:
diff changeset
   424
                 ( *iMceSettingsArray )[EMceGeneralSettingsMailListType].iCurrentNumber =
hgs
parents:
diff changeset
   425
                         i ? KMceListTypeOneRow : KMceListTypeTwoRow;
hgs
parents:
diff changeset
   426
                 }
hgs
parents:
diff changeset
   427
             else
hgs
parents:
diff changeset
   428
                 {
hgs
parents:
diff changeset
   429
                 ( *iMceSettingsArray )[MceGeneralSettingsMailListType].iCurrentNumber =
hgs
parents:
diff changeset
   430
                        i ? KMceListTypeOneRow : KMceListTypeTwoRow;
hgs
parents:
diff changeset
   431
                 }
hgs
parents:
diff changeset
   432
            }
hgs
parents:
diff changeset
   433
        else
hgs
parents:
diff changeset
   434
            {
hgs
parents:
diff changeset
   435
            if ( iMemoryInUse )
hgs
parents:
diff changeset
   436
                {
hgs
parents:
diff changeset
   437
                delete (*iMceSettingsArray)[EMceGeneralSettingsMailListType].iMuiuSettingsItemArray;
hgs
parents:
diff changeset
   438
                iMceSettingsArray->Delete(EMceGeneralSettingsMailListType);
hgs
parents:
diff changeset
   439
                }
hgs
parents:
diff changeset
   440
            else
hgs
parents:
diff changeset
   441
                {
hgs
parents:
diff changeset
   442
                delete (*iMceSettingsArray)[MceGeneralSettingsMailListType].iMuiuSettingsItemArray;
hgs
parents:
diff changeset
   443
                iMceSettingsArray->Delete(MceGeneralSettingsMailListType);
hgs
parents:
diff changeset
   444
                }
hgs
parents:
diff changeset
   445
            }
hgs
parents:
diff changeset
   446
        }
hgs
parents:
diff changeset
   447
hgs
parents:
diff changeset
   448
    if ( iMemoryInUse )
hgs
parents:
diff changeset
   449
        {
hgs
parents:
diff changeset
   450
        UpdateMemorySelectionL();
hgs
parents:
diff changeset
   451
        }
hgs
parents:
diff changeset
   452
hgs
parents:
diff changeset
   453
    CleanupStack::Pop( repository ); 
hgs
parents:
diff changeset
   454
    delete repository;
hgs
parents:
diff changeset
   455
hgs
parents:
diff changeset
   456
    CTextListBoxModel* model=list->Model();
hgs
parents:
diff changeset
   457
    model->SetItemTextArray( iMceSettingsArray );
hgs
parents:
diff changeset
   458
hgs
parents:
diff changeset
   459
    StoreTitleTextAndSetNewL( R_MCE_SETTINGS_TITLE_GENERAL );
hgs
parents:
diff changeset
   460
    SetMSKButtonL();
hgs
parents:
diff changeset
   461
    }
hgs
parents:
diff changeset
   462
hgs
parents:
diff changeset
   463
//  ----------------------------------------------------
hgs
parents:
diff changeset
   464
// CMceGeneralSettingsDialog::SetTransferError
hgs
parents:
diff changeset
   465
// Catches the error when failed moving message store
hgs
parents:
diff changeset
   466
//  ----------------------------------------------------
hgs
parents:
diff changeset
   467
void CMceGeneralSettingsDialog::SetTransferError( TInt aError )
hgs
parents:
diff changeset
   468
    {
hgs
parents:
diff changeset
   469
    iTransferError = aError;
hgs
parents:
diff changeset
   470
    }    
hgs
parents:
diff changeset
   471
hgs
parents:
diff changeset
   472
// ----------------------------------------------------
hgs
parents:
diff changeset
   473
// CMceGeneralSettingsDialog::MoveMessageStoreL
hgs
parents:
diff changeset
   474
// starts copying/moving message store
hgs
parents:
diff changeset
   475
// if move, aDeleteCopiedStore is ETrue, if copy EFalse
hgs
parents:
diff changeset
   476
// ----------------------------------------------------
hgs
parents:
diff changeset
   477
void CMceGeneralSettingsDialog::MoveMessageStoreL( TInt currentDrive, 
hgs
parents:
diff changeset
   478
         TInt driveNumber, TBool aDeleteCopiedStore )
hgs
parents:
diff changeset
   479
    {    
hgs
parents:
diff changeset
   480
    if( !CheckIsServerBusyL() )
hgs
parents:
diff changeset
   481
        {
hgs
parents:
diff changeset
   482
        CAknInputBlock* comAbs=CAknInputBlock::NewLC();  
hgs
parents:
diff changeset
   483
        iTransferError  = KErrNone;
hgs
parents:
diff changeset
   484
        CMceMoveProgress* moveProgress=CMceMoveProgress::NewL(
hgs
parents:
diff changeset
   485
            iSession, iObserver, currentDrive, driveNumber, aDeleteCopiedStore,*this, EFalse );
hgs
parents:
diff changeset
   486
           
hgs
parents:
diff changeset
   487
        CleanupStack::PushL( moveProgress );
hgs
parents:
diff changeset
   488
        if ( iAccountManager )
hgs
parents:
diff changeset
   489
            {
hgs
parents:
diff changeset
   490
            iAccountManager->SetChangeMessageStore( EFalse );
hgs
parents:
diff changeset
   491
            }
hgs
parents:
diff changeset
   492
hgs
parents:
diff changeset
   493
        moveProgress->InitializingL();
hgs
parents:
diff changeset
   494
        
hgs
parents:
diff changeset
   495
        // KErrAccessDenied: when MC is read-only
hgs
parents:
diff changeset
   496
        // preventing messaging close. Todo: anyother erro cases?       
hgs
parents:
diff changeset
   497
        if ( iTransferError != KErrAccessDenied && iAccountManager )
hgs
parents:
diff changeset
   498
            {
hgs
parents:
diff changeset
   499
            iAccountManager->SetChangeMessageStore( ETrue );
hgs
parents:
diff changeset
   500
            }
hgs
parents:
diff changeset
   501
hgs
parents:
diff changeset
   502
        // cannot delete CMceMoveProgress, 
hgs
parents:
diff changeset
   503
        // because CMceMessageTransHandler is cancelled-> has to be deleted in CMceMoveProgress
hgs
parents:
diff changeset
   504
        CleanupStack::Pop( moveProgress ); 
hgs
parents:
diff changeset
   505
        CleanupStack::PopAndDestroy( comAbs );
hgs
parents:
diff changeset
   506
        }
hgs
parents:
diff changeset
   507
    }
hgs
parents:
diff changeset
   508
hgs
parents:
diff changeset
   509
hgs
parents:
diff changeset
   510
// ----------------------------------------------------
hgs
parents:
diff changeset
   511
// CMceGeneralSettingsDialog::CheckIsServerBusyL
hgs
parents:
diff changeset
   512
// checks, if connection is on
hgs
parents:
diff changeset
   513
// return ETrue, if connection is on
hgs
parents:
diff changeset
   514
// ----------------------------------------------------
hgs
parents:
diff changeset
   515
TBool CMceGeneralSettingsDialog::CheckIsServerBusyL()
hgs
parents:
diff changeset
   516
    {
hgs
parents:
diff changeset
   517
    TInt outstanding=iSession->OutstandingOperationsL();
hgs
parents:
diff changeset
   518
hgs
parents:
diff changeset
   519
    if (outstanding==0)
hgs
parents:
diff changeset
   520
        {
hgs
parents:
diff changeset
   521
        // check to see if any mailboxes are open - otherwise we could miss client side operations
hgs
parents:
diff changeset
   522
        CMsvEntry* root=CMsvEntry::NewL( *iSession, 
hgs
parents:
diff changeset
   523
                     KMsvRootIndexEntryIdValue, 
hgs
parents:
diff changeset
   524
                     TMsvSelectionOrdering(KMsvNoGrouping, EMsvSortByNone, ETrue ) );
hgs
parents:
diff changeset
   525
        CleanupStack::PushL( root );
hgs
parents:
diff changeset
   526
        CMsvEntrySelection* sel=root->ChildrenWithTypeL( KUidMsvServiceEntry );
hgs
parents:
diff changeset
   527
        CleanupStack::PushL( sel );
hgs
parents:
diff changeset
   528
        const TMsvEntry* tentry=NULL;
hgs
parents:
diff changeset
   529
        for ( TInt cc=sel->Count(); --cc>=0 && !outstanding ;)
hgs
parents:
diff changeset
   530
            {
hgs
parents:
diff changeset
   531
            tentry=&( root->ChildDataL( ( *sel )[cc] ) );
hgs
parents:
diff changeset
   532
            if ( tentry->Connected() )
hgs
parents:
diff changeset
   533
                {
hgs
parents:
diff changeset
   534
                outstanding++;
hgs
parents:
diff changeset
   535
                }
hgs
parents:
diff changeset
   536
            }
hgs
parents:
diff changeset
   537
hgs
parents:
diff changeset
   538
        CleanupStack::PopAndDestroy( sel );
hgs
parents:
diff changeset
   539
        CleanupStack::PopAndDestroy( root );
hgs
parents:
diff changeset
   540
        }
hgs
parents:
diff changeset
   541
hgs
parents:
diff changeset
   542
    if (outstanding>0)
hgs
parents:
diff changeset
   543
        {
hgs
parents:
diff changeset
   544
        HBufC* text = StringLoader::LoadLC( R_MCE_SETTINGS_SERVER_BUSY, CCoeEnv::Static() );
hgs
parents:
diff changeset
   545
        CAknErrorNote* note = new ( ELeave ) CAknErrorNote();
hgs
parents:
diff changeset
   546
        note->ExecuteLD( *text );
hgs
parents:
diff changeset
   547
        CleanupStack::PopAndDestroy( text ); 
hgs
parents:
diff changeset
   548
        return ETrue;
hgs
parents:
diff changeset
   549
        }
hgs
parents:
diff changeset
   550
hgs
parents:
diff changeset
   551
    return EFalse;
hgs
parents:
diff changeset
   552
    }
hgs
parents:
diff changeset
   553
hgs
parents:
diff changeset
   554
// ----------------------------------------------------
hgs
parents:
diff changeset
   555
// CMceGeneralSettingsDialog::FindSourcePathL
hgs
parents:
diff changeset
   556
// gives message store path in aPath, when drive number is got
hgs
parents:
diff changeset
   557
//
hgs
parents:
diff changeset
   558
// ----------------------------------------------------
hgs
parents:
diff changeset
   559
void CMceGeneralSettingsDialog::FindSourcePathL( TInt aDrive, TFileName& aPath ) const
hgs
parents:
diff changeset
   560
    {
hgs
parents:
diff changeset
   561
    GetMessageDriveL( aDrive, aPath );
hgs
parents:
diff changeset
   562
    TParsePtrC pptr( KMsvDefaultFolder );
hgs
parents:
diff changeset
   563
    aPath.Append( pptr.Path() );
hgs
parents:
diff changeset
   564
    }
hgs
parents:
diff changeset
   565
hgs
parents:
diff changeset
   566
// ----------------------------------------------------
hgs
parents:
diff changeset
   567
// CMceGeneralSettingsDialog::GetMessageDriveL
hgs
parents:
diff changeset
   568
// gives drive letter and drive delimiter in aPath,
hgs
parents:
diff changeset
   569
// when drive number is got
hgs
parents:
diff changeset
   570
// ----------------------------------------------------
hgs
parents:
diff changeset
   571
void CMceGeneralSettingsDialog::GetMessageDriveL( TInt aDrive, TDes& aPath ) const
hgs
parents:
diff changeset
   572
    {
hgs
parents:
diff changeset
   573
    TChar driveLetter;
hgs
parents:
diff changeset
   574
    User::LeaveIfError( iEikonEnv->FsSession().DriveToChar( aDrive, driveLetter ) );
hgs
parents:
diff changeset
   575
    aPath.Zero();
hgs
parents:
diff changeset
   576
    aPath.Append( driveLetter );
hgs
parents:
diff changeset
   577
    aPath.Append( TChar( KDriveDelimiter ) );
hgs
parents:
diff changeset
   578
    }
hgs
parents:
diff changeset
   579
hgs
parents:
diff changeset
   580
// ----------------------------------------------------
hgs
parents:
diff changeset
   581
// CMceGeneralSettingsDialog::UpdateMemorySelectionL
hgs
parents:
diff changeset
   582
// sets correct string in General settings memory in use -option
hgs
parents:
diff changeset
   583
//
hgs
parents:
diff changeset
   584
// ----------------------------------------------------
hgs
parents:
diff changeset
   585
void CMceGeneralSettingsDialog::UpdateMemorySelectionL()
hgs
parents:
diff changeset
   586
    {
hgs
parents:
diff changeset
   587
    RFs& fs=iEikonEnv->FsSession();    
hgs
parents:
diff changeset
   588
hgs
parents:
diff changeset
   589
#ifndef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   590
    if ( TInt( iSession->CurrentDriveL() ) == EDriveC )
hgs
parents:
diff changeset
   591
        {
hgs
parents:
diff changeset
   592
        HBufC* text = StringLoader::LoadLC( R_MCE_SETTINGS_PHONE_MEMORY, iEikonEnv );
hgs
parents:
diff changeset
   593
hgs
parents:
diff changeset
   594
        ( *iMceSettingsArray )[EMceGeneralSettingsMemoryInUse].iUserText.Copy( *text );
hgs
parents:
diff changeset
   595
        CleanupStack::PopAndDestroy( text );  
hgs
parents:
diff changeset
   596
        }
hgs
parents:
diff changeset
   597
    else
hgs
parents:
diff changeset
   598
        { 
hgs
parents:
diff changeset
   599
        TVolumeInfo volumeinfo;
hgs
parents:
diff changeset
   600
        fs.Volume( volumeinfo, TInt(iSession->CurrentDriveL() ) );
hgs
parents:
diff changeset
   601
        if( volumeinfo.iName.Length() > 0 ) // Volume has a label
hgs
parents:
diff changeset
   602
           { // Use volume label as memory card name
hgs
parents:
diff changeset
   603
           ( *iMceSettingsArray )[EMceGeneralSettingsMemoryInUse].iUserText.Copy( volumeinfo.iName );
hgs
parents:
diff changeset
   604
           }
hgs
parents:
diff changeset
   605
        else
hgs
parents:
diff changeset
   606
           {
hgs
parents:
diff changeset
   607
           HBufC* text = StringLoader::LoadLC( R_MCE_SETTINGS_MEMORY_CARD, iEikonEnv );
hgs
parents:
diff changeset
   608
           ( *iMceSettingsArray )[EMceGeneralSettingsMemoryInUse].iUserText.Copy( *text );
hgs
parents:
diff changeset
   609
           CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
   610
           }
hgs
parents:
diff changeset
   611
        }
hgs
parents:
diff changeset
   612
hgs
parents:
diff changeset
   613
#else
hgs
parents:
diff changeset
   614
    TInt currentDrive = TInt( iSession->CurrentDriveL() );
hgs
parents:
diff changeset
   615
    
hgs
parents:
diff changeset
   616
    TVolumeInfo volumeinfo;
hgs
parents:
diff changeset
   617
    fs.Volume( volumeinfo, TInt( currentDrive ) );
hgs
parents:
diff changeset
   618
    if( volumeinfo.iName.Length() > 0 ) // Volume has a label
hgs
parents:
diff changeset
   619
        { // Use volume label as memory card name
hgs
parents:
diff changeset
   620
        TDriveName driveName(TDriveUnit( currentDrive ).Name() );
hgs
parents:
diff changeset
   621
        RBuf newtxt;
hgs
parents:
diff changeset
   622
        newtxt.CreateL( driveName.Length() + volumeinfo.iName.Length() + 1 ); // 1 for space
hgs
parents:
diff changeset
   623
        CleanupClosePushL( newtxt );
hgs
parents:
diff changeset
   624
        
hgs
parents:
diff changeset
   625
        newtxt.Append( driveName );
hgs
parents:
diff changeset
   626
        newtxt.Append( KSpaceDelimiter );
hgs
parents:
diff changeset
   627
        newtxt.Append( volumeinfo.iName );        
hgs
parents:
diff changeset
   628
              
hgs
parents:
diff changeset
   629
        ( *iMceSettingsArray )[EMceGeneralSettingsMemoryInUse].iUserText.Copy( newtxt );        
hgs
parents:
diff changeset
   630
        CleanupStack::PopAndDestroy( &newtxt );
hgs
parents:
diff changeset
   631
        }
hgs
parents:
diff changeset
   632
    else
hgs
parents:
diff changeset
   633
        {
hgs
parents:
diff changeset
   634
        HBufC *driveNameText = MakeDriveNameStringLC( currentDrive );
hgs
parents:
diff changeset
   635
        ( *iMceSettingsArray )[EMceGeneralSettingsMemoryInUse].iUserText.Copy( *driveNameText );
hgs
parents:
diff changeset
   636
        CleanupStack::PopAndDestroy( driveNameText );        
hgs
parents:
diff changeset
   637
        }
hgs
parents:
diff changeset
   638
hgs
parents:
diff changeset
   639
#endif //RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   640
    CEikTextListBox* list=STATIC_CAST( CEikTextListBox*, 
hgs
parents:
diff changeset
   641
        Control( EMceSettingsIdOtherItems ) );
hgs
parents:
diff changeset
   642
    list->DrawNow();
hgs
parents:
diff changeset
   643
hgs
parents:
diff changeset
   644
    CRepository* repository = NULL;
hgs
parents:
diff changeset
   645
    TRAPD( ret, repository = CRepository::NewL( KCRUidMuiuSettings ) );
hgs
parents:
diff changeset
   646
    CleanupStack::PushL( repository );
hgs
parents:
diff changeset
   647
hgs
parents:
diff changeset
   648
    if ( ret == KErrNone )
hgs
parents:
diff changeset
   649
        {
hgs
parents:
diff changeset
   650
        ret = repository->Set( KMuiuMemoryInUse, TInt( iSession->CurrentDriveL() ) );
hgs
parents:
diff changeset
   651
        __ASSERT_DEBUG( !ret, User::Panic( KPanicText,KCRepositorySettingFailure ) );
hgs
parents:
diff changeset
   652
        }
hgs
parents:
diff changeset
   653
hgs
parents:
diff changeset
   654
    CleanupStack::Pop( repository );
hgs
parents:
diff changeset
   655
    delete repository;
hgs
parents:
diff changeset
   656
    }
hgs
parents:
diff changeset
   657
hgs
parents:
diff changeset
   658
// ----------------------------------------------------
hgs
parents:
diff changeset
   659
// CMceGeneralSettingsDialog::ShutdownAppsL
hgs
parents:
diff changeset
   660
// closes sms, mms and mail applications,
hgs
parents:
diff changeset
   661
// before changing message store
hgs
parents:
diff changeset
   662
// ----------------------------------------------------
hgs
parents:
diff changeset
   663
TBool CMceGeneralSettingsDialog::ShutdownAppsL() const
hgs
parents:
diff changeset
   664
    {
hgs
parents:
diff changeset
   665
    RProperty property;
hgs
parents:
diff changeset
   666
hgs
parents:
diff changeset
   667
    User::LeaveIfError( property.Attach( KPSUidMuiu,KMuiuSysOpenMsgEditors ) );
hgs
parents:
diff changeset
   668
    CleanupClosePushL( property );
hgs
parents:
diff changeset
   669
    
hgs
parents:
diff changeset
   670
    TInt i = 0;
hgs
parents:
diff changeset
   671
    if ( property.Get(i) != KErrNone )
hgs
parents:
diff changeset
   672
        {
hgs
parents:
diff changeset
   673
        i = 0;
hgs
parents:
diff changeset
   674
        }
hgs
parents:
diff changeset
   675
    if ( i != 0 )
hgs
parents:
diff changeset
   676
        {
hgs
parents:
diff changeset
   677
        // clients are open
hgs
parents:
diff changeset
   678
        CAknQueryDialog* closeDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
   679
hgs
parents:
diff changeset
   680
        HBufC* text = NULL;
hgs
parents:
diff changeset
   681
        text = StringLoader::LoadLC( R_MCE_CLOSE_MESSAGES_CONFIRM, CCoeEnv::Static() );
hgs
parents:
diff changeset
   682
        closeDialog->SetPromptL( *text );
hgs
parents:
diff changeset
   683
        CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
   684
hgs
parents:
diff changeset
   685
        // Do you want to close all the open messages?
hgs
parents:
diff changeset
   686
        if ( !closeDialog->ExecuteLD( R_MCE_MOVE_CONFIRM ) )            
hgs
parents:
diff changeset
   687
            {
hgs
parents:
diff changeset
   688
            CleanupStack::PopAndDestroy( &property );
hgs
parents:
diff changeset
   689
            return EFalse;
hgs
parents:
diff changeset
   690
            }
hgs
parents:
diff changeset
   691
        else
hgs
parents:
diff changeset
   692
            {
hgs
parents:
diff changeset
   693
            i = 0;
hgs
parents:
diff changeset
   694
            property.Set( KPSUidMuiu, KMuiuSysOpenMsgEditors, i );
hgs
parents:
diff changeset
   695
            
hgs
parents:
diff changeset
   696
            // wait a second
hgs
parents:
diff changeset
   697
            User::After( KMceEditorsWaitInterval );
hgs
parents:
diff changeset
   698
            }
hgs
parents:
diff changeset
   699
        }
hgs
parents:
diff changeset
   700
    CleanupStack::PopAndDestroy( &property );
hgs
parents:
diff changeset
   701
    return ETrue;
hgs
parents:
diff changeset
   702
    }
hgs
parents:
diff changeset
   703
hgs
parents:
diff changeset
   704
hgs
parents:
diff changeset
   705
// ----------------------------------------------------
hgs
parents:
diff changeset
   706
// CMceGeneralSettingsDialog::HandleMemoryInUseDialogL
hgs
parents:
diff changeset
   707
// handles Memory in Use option
hgs
parents:
diff changeset
   708
// 
hgs
parents:
diff changeset
   709
// ----------------------------------------------------
hgs
parents:
diff changeset
   710
void CMceGeneralSettingsDialog::HandleMemoryInUseDialogL()
hgs
parents:
diff changeset
   711
    {
hgs
parents:
diff changeset
   712
    if ( !ShutdownAppsL() )
hgs
parents:
diff changeset
   713
        {
hgs
parents:
diff changeset
   714
        // User does not want to close open messages
hgs
parents:
diff changeset
   715
        return;
hgs
parents:
diff changeset
   716
        }
hgs
parents:
diff changeset
   717
    
hgs
parents:
diff changeset
   718
    if(iChangeDrive)
hgs
parents:
diff changeset
   719
        {
hgs
parents:
diff changeset
   720
        return;
hgs
parents:
diff changeset
   721
        }
hgs
parents:
diff changeset
   722
hgs
parents:
diff changeset
   723
    RFs& fs=iEikonEnv->FsSession();
hgs
parents:
diff changeset
   724
    
hgs
parents:
diff changeset
   725
#ifdef RD_MULTIPLE_DRIVE     
hgs
parents:
diff changeset
   726
    // Memory selection dialog from Avkon    
hgs
parents:
diff changeset
   727
    CAknMemorySelectionDialogMultiDrive* dlg = CAknMemorySelectionDialogMultiDrive::NewL(
hgs
parents:
diff changeset
   728
            ECFDDialogTypeNormal, 
hgs
parents:
diff changeset
   729
            0, // Default resource Id
hgs
parents:
diff changeset
   730
            EFalse,
hgs
parents:
diff changeset
   731
            AknCommonDialogsDynMem::EMemoryTypePhone |
hgs
parents:
diff changeset
   732
            AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage | 
hgs
parents:
diff changeset
   733
            AknCommonDialogsDynMem::EMemoryTypeMMCExternal  );
hgs
parents:
diff changeset
   734
hgs
parents:
diff changeset
   735
    CleanupStack::PushL( dlg );
hgs
parents:
diff changeset
   736
    TInt currentDrive = TInt( iSession->CurrentDriveL() ); 
hgs
parents:
diff changeset
   737
    TDriveNumber driveNumber = static_cast<TDriveNumber>( currentDrive );
hgs
parents:
diff changeset
   738
    CAknMemorySelectionDialogMultiDrive::TReturnKey value = dlg->ExecuteL( driveNumber );
hgs
parents:
diff changeset
   739
    CleanupStack::PopAndDestroy( dlg );
hgs
parents:
diff changeset
   740
     
hgs
parents:
diff changeset
   741
    TInt selectedDrive; 
hgs
parents:
diff changeset
   742
    //if the user didn't press cancel key
hgs
parents:
diff changeset
   743
    if (value != CAknMemorySelectionDialogMultiDrive::ERightSoftkey )
hgs
parents:
diff changeset
   744
        { 
hgs
parents:
diff changeset
   745
        selectedDrive = static_cast<TInt>( driveNumber );
hgs
parents:
diff changeset
   746
        }
hgs
parents:
diff changeset
   747
    // if the user press cancel
hgs
parents:
diff changeset
   748
    else
hgs
parents:
diff changeset
   749
        { 
hgs
parents:
diff changeset
   750
        return;
hgs
parents:
diff changeset
   751
        }           
hgs
parents:
diff changeset
   752
    
hgs
parents:
diff changeset
   753
#else            
hgs
parents:
diff changeset
   754
    TInt currentDrive = TInt( iSession->CurrentDriveL() );
hgs
parents:
diff changeset
   755
    CAknMemorySelectionSettingPage::TMemory memory( CAknMemorySelectionSettingPage::EPhoneMemory );
hgs
parents:
diff changeset
   756
hgs
parents:
diff changeset
   757
    CAknMemorySelectionSettingPage* dlg = CAknMemorySelectionSettingPage::NewL();
hgs
parents:
diff changeset
   758
    CleanupStack::PushL( dlg ); 
hgs
parents:
diff changeset
   759
hgs
parents:
diff changeset
   760
    HBufC* text = StringLoader::LoadLC( R_MCE_SETTINGS_GEN_HEADING, iEikonEnv );  
hgs
parents:
diff changeset
   761
    dlg->SetTitleL( *text ); 
hgs
parents:
diff changeset
   762
    CleanupStack::PopAndDestroy( text );                
hgs
parents:
diff changeset
   763
            
hgs
parents:
diff changeset
   764
    if ( currentDrive == EDriveC )
hgs
parents:
diff changeset
   765
        {                
hgs
parents:
diff changeset
   766
        memory = CAknMemorySelectionSettingPage::EPhoneMemory;
hgs
parents:
diff changeset
   767
        }
hgs
parents:
diff changeset
   768
    else
hgs
parents:
diff changeset
   769
        {                
hgs
parents:
diff changeset
   770
        memory = CAknMemorySelectionSettingPage::EMemoryCard;
hgs
parents:
diff changeset
   771
        }
hgs
parents:
diff changeset
   772
hgs
parents:
diff changeset
   773
    CAknMemorySelectionSettingPage::TReturnKey value = dlg->ExecuteL( memory );
hgs
parents:
diff changeset
   774
    CleanupStack::PopAndDestroy( dlg );
hgs
parents:
diff changeset
   775
hgs
parents:
diff changeset
   776
    if ( value == CAknMemorySelectionSettingPage::ERightSoftkey )
hgs
parents:
diff changeset
   777
       //Cancel was pressed;
hgs
parents:
diff changeset
   778
        {
hgs
parents:
diff changeset
   779
        return;
hgs
parents:
diff changeset
   780
        }
hgs
parents:
diff changeset
   781
hgs
parents:
diff changeset
   782
    TInt selectedDrive;
hgs
parents:
diff changeset
   783
    if ( memory == CAknMemorySelectionSettingPage::EPhoneMemory )
hgs
parents:
diff changeset
   784
        {
hgs
parents:
diff changeset
   785
        selectedDrive = EDriveC;            
hgs
parents:
diff changeset
   786
        }
hgs
parents:
diff changeset
   787
    else
hgs
parents:
diff changeset
   788
        {
hgs
parents:
diff changeset
   789
        selectedDrive = EDriveE;
hgs
parents:
diff changeset
   790
        }
hgs
parents:
diff changeset
   791
#endif // RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   792
hgs
parents:
diff changeset
   793
    if (selectedDrive == currentDrive )
hgs
parents:
diff changeset
   794
        {
hgs
parents:
diff changeset
   795
        // no change, memory has not been changed
hgs
parents:
diff changeset
   796
        UpdateMemorySelectionL(); 
hgs
parents:
diff changeset
   797
        return;                
hgs
parents:
diff changeset
   798
        }        
hgs
parents:
diff changeset
   799
    else
hgs
parents:
diff changeset
   800
        {
hgs
parents:
diff changeset
   801
        TBool storeExist = EFalse;
hgs
parents:
diff changeset
   802
        TRAPD( error, storeExist = iSession->DriveContainsStoreL( selectedDrive ) );
hgs
parents:
diff changeset
   803
hgs
parents:
diff changeset
   804
        if ( !error && storeExist )              
hgs
parents:
diff changeset
   805
            {            
hgs
parents:
diff changeset
   806
            //if server is busy, do not change store
hgs
parents:
diff changeset
   807
            if( CheckIsServerBusyL() )
hgs
parents:
diff changeset
   808
                {
hgs
parents:
diff changeset
   809
                return;
hgs
parents:
diff changeset
   810
                }
hgs
parents:
diff changeset
   811
            CAknInputBlock* comAbs=CAknInputBlock::NewLC();  
hgs
parents:
diff changeset
   812
            // change message store
hgs
parents:
diff changeset
   813
            CMuiuOperationWait* waiter=CMuiuOperationWait::NewLC();
hgs
parents:
diff changeset
   814
hgs
parents:
diff changeset
   815
            CMsvProgressReporterOperation* reportOp =
hgs
parents:
diff changeset
   816
                    CMsvProgressReporterOperation::NewL( *iSession, waiter->iStatus );
hgs
parents:
diff changeset
   817
            CleanupStack::PushL( reportOp );
hgs
parents:
diff changeset
   818
hgs
parents:
diff changeset
   819
            reportOp->SetProgressVisibilityDelay(EFalse);
hgs
parents:
diff changeset
   820
            HBufC* text = StringLoader::LoadLC( R_MCE_SETTINGS_SWITCHING_MESSAGE_STORE, 
hgs
parents:
diff changeset
   821
                       iEikonEnv );  
hgs
parents:
diff changeset
   822
            reportOp->SetTitleL( *text ); 
hgs
parents:
diff changeset
   823
hgs
parents:
diff changeset
   824
            reportOp->SetCanCancelL( EFalse);
hgs
parents:
diff changeset
   825
hgs
parents:
diff changeset
   826
            CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
   827
            iChangeDrive = ETrue;
hgs
parents:
diff changeset
   828
            CMsvOperation* changeOp=iSession->ChangeDriveL( selectedDrive, reportOp->RequestStatus() );
hgs
parents:
diff changeset
   829
            reportOp->SetOperationL( changeOp );
hgs
parents:
diff changeset
   830
hgs
parents:
diff changeset
   831
            waiter->Start();
hgs
parents:
diff changeset
   832
            iChangeDrive = EFalse;
hgs
parents:
diff changeset
   833
            CleanupStack::PopAndDestroy( reportOp );
hgs
parents:
diff changeset
   834
            CleanupStack::PopAndDestroy( waiter );
hgs
parents:
diff changeset
   835
            CleanupStack::PopAndDestroy( comAbs );
hgs
parents:
diff changeset
   836
                  
hgs
parents:
diff changeset
   837
            //memory has been changed
hgs
parents:
diff changeset
   838
            UpdateMemorySelectionL();           
hgs
parents:
diff changeset
   839
            }
hgs
parents:
diff changeset
   840
        else       
hgs
parents:
diff changeset
   841
            {
hgs
parents:
diff changeset
   842
//#ifdef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   843
//            //Todo: Check the memory statue here, if it's read-only then show error note
hgs
parents:
diff changeset
   844
//            // Wait for UIcr approved            
hgs
parents:
diff changeset
   845
//            TUint driveStatus( 0 ); 
hgs
parents:
diff changeset
   846
//            User::LeaveIfError( DriveInfo::GetDriveStatus( fs, driveNumber, driveStatus ) );
hgs
parents:
diff changeset
   847
//            if ( driveStatus & DriveInfo::EDriveReadOnly )
hgs
parents:
diff changeset
   848
//                {
hgs
parents:
diff changeset
   849
//                HBufC* text = StringLoader::LoadLC( R_MCE_SETTINGS_CANNOT_MOVE_STORE, 
hgs
parents:
diff changeset
   850
//        	                                                           CCoeEnv::Static() );
hgs
parents:
diff changeset
   851
//        	    CAknErrorNote* note = new (ELeave) CAknErrorNote();
hgs
parents:
diff changeset
   852
//        	    note->ExecuteLD(*text);
hgs
parents:
diff changeset
   853
//        	    CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
   854
//        	
hgs
parents:
diff changeset
   855
//        	    return;
hgs
parents:
diff changeset
   856
//                }
hgs
parents:
diff changeset
   857
//#endif     
hgs
parents:
diff changeset
   858
   
hgs
parents:
diff changeset
   859
            // copy/move message store
hgs
parents:
diff changeset
   860
            CAknQueryDialog* moveDialog = CAknQueryDialog::NewL();  
hgs
parents:
diff changeset
   861
hgs
parents:
diff changeset
   862
            // Do you want to copy all messages to the messaging store?
hgs
parents:
diff changeset
   863
            if ( moveDialog->ExecuteLD( R_MCE_MOVE_CONFIRM ) )
hgs
parents:
diff changeset
   864
                {    
hgs
parents:
diff changeset
   865
                // Yes:
hgs
parents:
diff changeset
   866
                // other question: Do you want to save the original messages?
hgs
parents:
diff changeset
   867
                CAknQueryDialog* movesaveDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
   868
          
hgs
parents:
diff changeset
   869
                HBufC* text = NULL;
hgs
parents:
diff changeset
   870
                text = StringLoader::LoadLC( R_MCE_MOVE_SAVE_CONFIRM, CCoeEnv::Static() );
hgs
parents:
diff changeset
   871
                movesaveDialog->SetPromptL( *text );
hgs
parents:
diff changeset
   872
                CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
   873
                        
hgs
parents:
diff changeset
   874
                if ( movesaveDialog->ExecuteLD( R_MCE_MOVE_CONFIRM ) )
hgs
parents:
diff changeset
   875
                    {
hgs
parents:
diff changeset
   876
                    //Yes: Copy messages                     
hgs
parents:
diff changeset
   877
                    MoveMessageStoreL( currentDrive, selectedDrive, EFalse );
hgs
parents:
diff changeset
   878
                    }
hgs
parents:
diff changeset
   879
                else
hgs
parents:
diff changeset
   880
                    {
hgs
parents:
diff changeset
   881
                    //No: Move messages
hgs
parents:
diff changeset
   882
                    MoveMessageStoreL( currentDrive, selectedDrive, ETrue );
hgs
parents:
diff changeset
   883
                    }
hgs
parents:
diff changeset
   884
                }
hgs
parents:
diff changeset
   885
            else
hgs
parents:
diff changeset
   886
                {
hgs
parents:
diff changeset
   887
                // No: show empty message storage
hgs
parents:
diff changeset
   888
hgs
parents:
diff changeset
   889
                //if server is busy, do not change store
hgs
parents:
diff changeset
   890
                if( CheckIsServerBusyL() )
hgs
parents:
diff changeset
   891
                    {
hgs
parents:
diff changeset
   892
                    return;
hgs
parents:
diff changeset
   893
                    }
hgs
parents:
diff changeset
   894
hgs
parents:
diff changeset
   895
                // when empty store is created, it takes memory about 40kb
hgs
parents:
diff changeset
   896
                // check first free memory
hgs
parents:
diff changeset
   897
                if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iEikonEnv->FsSession(), 
hgs
parents:
diff changeset
   898
                        KMceEmptyMessageStore, selectedDrive ) )
hgs
parents:
diff changeset
   899
                    {
hgs
parents:
diff changeset
   900
                    User::Leave( KErrDiskFull );
hgs
parents:
diff changeset
   901
                    }
hgs
parents:
diff changeset
   902
                CAknInputBlock* comAbs=CAknInputBlock::NewLC(); 
hgs
parents:
diff changeset
   903
                CMuiuOperationWait* waiter=CMuiuOperationWait::NewLC(); 
hgs
parents:
diff changeset
   904
hgs
parents:
diff changeset
   905
                CMsvProgressReporterOperation* reportOp =
hgs
parents:
diff changeset
   906
                            CMsvProgressReporterOperation::NewL( *iSession, waiter->iStatus );
hgs
parents:
diff changeset
   907
                CleanupStack::PushL( reportOp );
hgs
parents:
diff changeset
   908
hgs
parents:
diff changeset
   909
                reportOp->SetProgressVisibilityDelay(EFalse);
hgs
parents:
diff changeset
   910
                HBufC* text = StringLoader::LoadLC( R_MCE_SETTINGS_SWITCHING_MESSAGE_STORE, 
hgs
parents:
diff changeset
   911
                                                                        iEikonEnv );  
hgs
parents:
diff changeset
   912
                reportOp->SetTitleL( *text ); 
hgs
parents:
diff changeset
   913
hgs
parents:
diff changeset
   914
                reportOp->SetCanCancelL( EFalse);
hgs
parents:
diff changeset
   915
hgs
parents:
diff changeset
   916
                CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
   917
                iChangeDrive = ETrue;
hgs
parents:
diff changeset
   918
                CMsvOperation* changeOp=iSession->ChangeDriveL( selectedDrive, 
hgs
parents:
diff changeset
   919
                                                                                                reportOp->RequestStatus() );
hgs
parents:
diff changeset
   920
                reportOp->SetOperationL( changeOp );
hgs
parents:
diff changeset
   921
hgs
parents:
diff changeset
   922
                waiter->Start();
hgs
parents:
diff changeset
   923
                iChangeDrive = EFalse;
hgs
parents:
diff changeset
   924
                CleanupStack::PopAndDestroy( reportOp ); 
hgs
parents:
diff changeset
   925
                CleanupStack::PopAndDestroy( waiter );
hgs
parents:
diff changeset
   926
                CleanupStack::PopAndDestroy( comAbs );
hgs
parents:
diff changeset
   927
                UpdateMemorySelectionL();
hgs
parents:
diff changeset
   928
                }                
hgs
parents:
diff changeset
   929
            }
hgs
parents:
diff changeset
   930
		
hgs
parents:
diff changeset
   931
        CEikTextListBox* list=STATIC_CAST( CEikTextListBox*, 
hgs
parents:
diff changeset
   932
            Control( EMceSettingsIdOtherItems ) );
hgs
parents:
diff changeset
   933
        list->DrawNow();        
hgs
parents:
diff changeset
   934
        }    
hgs
parents:
diff changeset
   935
   }
hgs
parents:
diff changeset
   936
hgs
parents:
diff changeset
   937
hgs
parents:
diff changeset
   938
// ----------------------------------------------------
hgs
parents:
diff changeset
   939
// CMceGeneralSettingsDialog::GetHelpContext
hgs
parents:
diff changeset
   940
// returns helpcontext as aContext
hgs
parents:
diff changeset
   941
//
hgs
parents:
diff changeset
   942
// ----------------------------------------------------
hgs
parents:
diff changeset
   943
void CMceGeneralSettingsDialog::GetHelpContext
hgs
parents:
diff changeset
   944
        ( TCoeHelpContext& aContext ) const
hgs
parents:
diff changeset
   945
    {
hgs
parents:
diff changeset
   946
    aContext.iMajor = KMceApplicationUid;
hgs
parents:
diff changeset
   947
    aContext.iContext = KMCE_HLP_SETTINGS_GEN;
hgs
parents:
diff changeset
   948
    }
hgs
parents:
diff changeset
   949
hgs
parents:
diff changeset
   950
// ----------------------------------------------------
hgs
parents:
diff changeset
   951
// CMceGeneralSettingsDialog::DynInitMenuPaneL
hgs
parents:
diff changeset
   952
// ----------------------------------------------------
hgs
parents:
diff changeset
   953
void CMceGeneralSettingsDialog::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
   954
    {
hgs
parents:
diff changeset
   955
    if ( aResourceId == R_MCE_GENERAL_SETTINGS_CHOICE_MENUPANE )
hgs
parents:
diff changeset
   956
        {
hgs
parents:
diff changeset
   957
        aMenuPane->SetItemDimmed( EMceSettingsCmdSettingsDialogHelp, 
hgs
parents:
diff changeset
   958
            !FeatureManager::FeatureSupported( KFeatureIdHelp ) );               
hgs
parents:
diff changeset
   959
        }
hgs
parents:
diff changeset
   960
    }
hgs
parents:
diff changeset
   961
hgs
parents:
diff changeset
   962
// ----------------------------------------------------
hgs
parents:
diff changeset
   963
// CMceGeneralSettingsDialog::LaunchHelpL
hgs
parents:
diff changeset
   964
// Launch help using context
hgs
parents:
diff changeset
   965
// 
hgs
parents:
diff changeset
   966
// ----------------------------------------------------
hgs
parents:
diff changeset
   967
void CMceGeneralSettingsDialog::LaunchHelpL() const
hgs
parents:
diff changeset
   968
    { 
hgs
parents:
diff changeset
   969
    CCoeAppUi* appUi = STATIC_CAST( CCoeAppUi*, ControlEnv()->AppUi() );       
hgs
parents:
diff changeset
   970
    CArrayFix<TCoeHelpContext>* helpContext = appUi->AppHelpContextL();   
hgs
parents:
diff changeset
   971
    HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext );
hgs
parents:
diff changeset
   972
    }
hgs
parents:
diff changeset
   973
hgs
parents:
diff changeset
   974
// ----------------------------------------------------
hgs
parents:
diff changeset
   975
// CMceGeneralSettingsDialog::ChangeMessageStoreL
hgs
parents:
diff changeset
   976
// Changes the drive of the message store
hgs
parents:
diff changeset
   977
//
hgs
parents:
diff changeset
   978
// ----------------------------------------------------
hgs
parents:
diff changeset
   979
#ifdef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   980
void CMceGeneralSettingsDialog::ChangeMessageStoreL( TInt aTargetDrive )
hgs
parents:
diff changeset
   981
#else
hgs
parents:
diff changeset
   982
void CMceGeneralSettingsDialog::ChangeMessageStoreL()
hgs
parents:
diff changeset
   983
#endif //RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   984
    {
hgs
parents:
diff changeset
   985
    //if server is busy, do not change store
hgs
parents:
diff changeset
   986
    if( CheckIsServerBusyL() )
hgs
parents:
diff changeset
   987
        {
hgs
parents:
diff changeset
   988
        return;
hgs
parents:
diff changeset
   989
        }
hgs
parents:
diff changeset
   990
hgs
parents:
diff changeset
   991
    RFs& fs=iEikonEnv->FsSession();
hgs
parents:
diff changeset
   992
    
hgs
parents:
diff changeset
   993
    TInt driveNumber;
hgs
parents:
diff changeset
   994
    
hgs
parents:
diff changeset
   995
#ifdef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
   996
    driveNumber = aTargetDrive;
hgs
parents:
diff changeset
   997
#else
hgs
parents:
diff changeset
   998
    // Get the current drive
hgs
parents:
diff changeset
   999
    TInt currentDrive=TInt( iSession->CurrentDriveL() );
hgs
parents:
diff changeset
  1000
hgs
parents:
diff changeset
  1001
    if ( currentDrive == EDriveC )
hgs
parents:
diff changeset
  1002
        {
hgs
parents:
diff changeset
  1003
        driveNumber = EDriveE;            
hgs
parents:
diff changeset
  1004
        }
hgs
parents:
diff changeset
  1005
    else
hgs
parents:
diff changeset
  1006
        {
hgs
parents:
diff changeset
  1007
        driveNumber = EDriveC;
hgs
parents:
diff changeset
  1008
        }
hgs
parents:
diff changeset
  1009
#endif //RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
  1010
hgs
parents:
diff changeset
  1011
    // change message store
hgs
parents:
diff changeset
  1012
    CMuiuOperationWait* waiter=CMuiuOperationWait::NewLC();
hgs
parents:
diff changeset
  1013
hgs
parents:
diff changeset
  1014
    CMsvProgressReporterOperation* reportOp =
hgs
parents:
diff changeset
  1015
                         CMsvProgressReporterOperation::NewL( *iSession, waiter->iStatus );
hgs
parents:
diff changeset
  1016
    CleanupStack::PushL( reportOp );
hgs
parents:
diff changeset
  1017
hgs
parents:
diff changeset
  1018
    HBufC* text = StringLoader::LoadLC( R_MCE_SETTINGS_SWITCHING_MESSAGE_STORE, 
hgs
parents:
diff changeset
  1019
                                                             iEikonEnv );  
hgs
parents:
diff changeset
  1020
    reportOp->SetTitleL( *text ); 
hgs
parents:
diff changeset
  1021
hgs
parents:
diff changeset
  1022
    reportOp->SetCanCancelL( EFalse );
hgs
parents:
diff changeset
  1023
hgs
parents:
diff changeset
  1024
    CleanupStack::PopAndDestroy( text );
hgs
parents:
diff changeset
  1025
            
hgs
parents:
diff changeset
  1026
    CMsvOperation* changeOp=iSession->ChangeDriveL( driveNumber, reportOp->RequestStatus() );
hgs
parents:
diff changeset
  1027
    reportOp->SetOperationL( changeOp );
hgs
parents:
diff changeset
  1028
hgs
parents:
diff changeset
  1029
    waiter->Start();
hgs
parents:
diff changeset
  1030
    
hgs
parents:
diff changeset
  1031
    CleanupStack::PopAndDestroy( reportOp );
hgs
parents:
diff changeset
  1032
    CleanupStack::PopAndDestroy( waiter ); 
hgs
parents:
diff changeset
  1033
    }
hgs
parents:
diff changeset
  1034
    
hgs
parents:
diff changeset
  1035
    
hgs
parents:
diff changeset
  1036
// ----------------------------------------------------
hgs
parents:
diff changeset
  1037
// void CMceGeneralSettingsDialog::SetMSKButtonL()
hgs
parents:
diff changeset
  1038
// ----------------------------------------------------
hgs
parents:
diff changeset
  1039
void CMceGeneralSettingsDialog::SetMSKButtonL()
hgs
parents:
diff changeset
  1040
    {
hgs
parents:
diff changeset
  1041
    CEikTextListBox* list=STATIC_CAST(
hgs
parents:
diff changeset
  1042
                    CEikTextListBox*,
hgs
parents:
diff changeset
  1043
                    Control( EMceSettingsIdOtherItems) );
hgs
parents:
diff changeset
  1044
    const TInt index = list->CurrentItemIndex();
hgs
parents:
diff changeset
  1045
    const TInt numberOfItem = list->Model()->NumberOfItems();
hgs
parents:
diff changeset
  1046
    const TInt resourceId = index==0 ?
hgs
parents:
diff changeset
  1047
         R_MCE_MSK_BUTTON_CHANGE : R_MCE_MSK_BUTTON_OPEN;
hgs
parents:
diff changeset
  1048
    CEikButtonGroupContainer& cba = ButtonGroupContainer();
hgs
parents:
diff changeset
  1049
    cba.SetCommandL( KMSKPosition, resourceId );
hgs
parents:
diff changeset
  1050
    cba.DrawNow();
hgs
parents:
diff changeset
  1051
    }
hgs
parents:
diff changeset
  1052
hgs
parents:
diff changeset
  1053
#ifdef RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
  1054
// ----------------------------------------------------
hgs
parents:
diff changeset
  1055
// CMceGeneralSettingsDialog::MakeDriveNameStringLC
hgs
parents:
diff changeset
  1056
// ----------------------------------------------------
hgs
parents:
diff changeset
  1057
HBufC* CMceGeneralSettingsDialog::MakeDriveNameStringLC( TInt aDriveNumber )
hgs
parents:
diff changeset
  1058
    {       
hgs
parents:
diff changeset
  1059
    // get drive later and delimiter, e.g. "C:"
hgs
parents:
diff changeset
  1060
    TDriveName driveName(TDriveUnit( aDriveNumber ).Name() );
hgs
parents:
diff changeset
  1061
    
hgs
parents:
diff changeset
  1062
    TUint driveStatus( 0 );
hgs
parents:
diff changeset
  1063
    RFs& fs=iEikonEnv->FsSession();
hgs
parents:
diff changeset
  1064
    User::LeaveIfError( DriveInfo::GetDriveStatus( fs, aDriveNumber, driveStatus ) );     
hgs
parents:
diff changeset
  1065
    
hgs
parents:
diff changeset
  1066
    //Following flitters are referred to filemanager application
hgs
parents:
diff changeset
  1067
    if ( driveStatus & DriveInfo::EDriveInternal )
hgs
parents:
diff changeset
  1068
        {
hgs
parents:
diff changeset
  1069
        //Device Memory and Mass storage drives
hgs
parents:
diff changeset
  1070
        if ( driveStatus & DriveInfo::EDriveExternallyMountable )
hgs
parents:
diff changeset
  1071
            {
hgs
parents:
diff changeset
  1072
            return StringLoader::LoadLC( R_MCE_SETT_MEM_MASS_STORAGE, driveName, iEikonEnv );
hgs
parents:
diff changeset
  1073
            }
hgs
parents:
diff changeset
  1074
        else 
hgs
parents:
diff changeset
  1075
            {
hgs
parents:
diff changeset
  1076
            return StringLoader::LoadLC( R_MCE_SETT_MEM_DEVICE, driveName, iEikonEnv );
hgs
parents:
diff changeset
  1077
            }
hgs
parents:
diff changeset
  1078
        }
hgs
parents:
diff changeset
  1079
    //memory card
hgs
parents:
diff changeset
  1080
    else
hgs
parents:
diff changeset
  1081
        {
hgs
parents:
diff changeset
  1082
        return StringLoader::LoadLC( R_MCE_SETT_MEM_MEMORY_CARD, driveName, iEikonEnv );            
hgs
parents:
diff changeset
  1083
        }
hgs
parents:
diff changeset
  1084
    }
hgs
parents:
diff changeset
  1085
#endif //RD_MULTIPLE_DRIVE
hgs
parents:
diff changeset
  1086
hgs
parents:
diff changeset
  1087
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1088
// CMceGeneralSettingsDialog::IsThirdPartyMailBox()
hgs
parents:
diff changeset
  1089
// 
hgs
parents:
diff changeset
  1090
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1091
//
hgs
parents:
diff changeset
  1092
TBool CMceGeneralSettingsDialog::IsThirdPartyMailBoxL()
hgs
parents:
diff changeset
  1093
    {
hgs
parents:
diff changeset
  1094
    CMsvEntry* entry = iSession->GetEntryL( KMsvRootIndexEntryId );
hgs
parents:
diff changeset
  1095
    CleanupStack::PushL( entry );
hgs
parents:
diff changeset
  1096
    TInt cnt = entry->Count();
hgs
parents:
diff changeset
  1097
    TBool isThirdPartyMail = EFalse;
hgs
parents:
diff changeset
  1098
    for ( TInt i=0; i < cnt ; i++)
hgs
parents:
diff changeset
  1099
        {
hgs
parents:
diff changeset
  1100
        if ( (*entry)[i].iType.iUid == KUidMsvServiceEntryValue &&
hgs
parents:
diff changeset
  1101
             (*entry)[i].Id() != KMsvLocalServiceIndexEntryIdValue &&
hgs
parents:
diff changeset
  1102
             ( !( (*entry)[i].iMtm.iUid == KUidMsgTypeCmailMtmVal ||
hgs
parents:
diff changeset
  1103
                  (*entry)[i].iMtm == KSenduiMtmImap4Uid          || 
hgs
parents:
diff changeset
  1104
                  (*entry)[i].iMtm == KSenduiMtmPop3Uid           ||
hgs
parents:
diff changeset
  1105
                  (*entry)[i].iMtm == KSenduiMtmSmtpUid   ))   &&
hgs
parents:
diff changeset
  1106
             IsEmailEntryL((*entry)[i]))
hgs
parents:
diff changeset
  1107
           {
hgs
parents:
diff changeset
  1108
           isThirdPartyMail = ETrue;
hgs
parents:
diff changeset
  1109
           break;
hgs
parents:
diff changeset
  1110
           }
hgs
parents:
diff changeset
  1111
        }
hgs
parents:
diff changeset
  1112
    CleanupStack::PopAndDestroy( entry );
hgs
parents:
diff changeset
  1113
    return isThirdPartyMail;
hgs
parents:
diff changeset
  1114
    }
hgs
parents:
diff changeset
  1115
hgs
parents:
diff changeset
  1116
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1117
// CMceGeneralSettingsDialog::IsEmailEntryL
hgs
parents:
diff changeset
  1118
// 
hgs
parents:
diff changeset
  1119
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1120
//
hgs
parents:
diff changeset
  1121
TBool CMceGeneralSettingsDialog::IsEmailEntryL(TMsvEntry tentry)
hgs
parents:
diff changeset
  1122
    {
hgs
parents:
diff changeset
  1123
    TBool IsEmail = EFalse;
hgs
parents:
diff changeset
  1124
hgs
parents:
diff changeset
  1125
    CMtmUiDataRegistry* uiRegistry =
hgs
parents:
diff changeset
  1126
                         CMtmUiDataRegistry::NewL( *iSession );
hgs
parents:
diff changeset
  1127
    CleanupStack::PushL(uiRegistry);
hgs
parents:
diff changeset
  1128
    if ( uiRegistry->IsPresent( tentry.iMtm ) &&
hgs
parents:
diff changeset
  1129
         uiRegistry->IsPresent( KUidMsgTypePOP3 ) )
hgs
parents:
diff changeset
  1130
         {
hgs
parents:
diff changeset
  1131
          TUid mailMTMTechType =
hgs
parents:
diff changeset
  1132
                  uiRegistry->TechnologyTypeUid( KUidMsgTypePOP3 );
hgs
parents:
diff changeset
  1133
          if( uiRegistry->TechnologyTypeUid( tentry.iMtm ) == mailMTMTechType )
hgs
parents:
diff changeset
  1134
                {
hgs
parents:
diff changeset
  1135
                IsEmail = ETrue;
hgs
parents:
diff changeset
  1136
                }
hgs
parents:
diff changeset
  1137
         }
hgs
parents:
diff changeset
  1138
    CleanupStack::PopAndDestroy( uiRegistry );
hgs
parents:
diff changeset
  1139
        
hgs
parents:
diff changeset
  1140
    return IsEmail;
hgs
parents:
diff changeset
  1141
    }
hgs
parents:
diff changeset
  1142
//  End of File