mobilemessaging/mmsui/notviewersrc/NotViewerAppUi.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) 2004 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
*       Provides CNotViewerAppUi class methods. 
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 <featmgr.h>                        // FeatureManager
hgs
parents:
diff changeset
    22
#include <bldvariant.hrh>
hgs
parents:
diff changeset
    23
#include <messagingvariant.hrh>
hgs
parents:
diff changeset
    24
#include <txtrich.h>                        // CRichText
hgs
parents:
diff changeset
    25
#include <eikrted.h>                        // CEikRichTextEditor
hgs
parents:
diff changeset
    26
#include <StringLoader.h>                   // StringLoader (load and format strings from resources)
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
#include <centralrepository.h>    // link against centralrepository.lib
hgs
parents:
diff changeset
    29
#include <CommonUiInternalCRKeys.h>
hgs
parents:
diff changeset
    30
#include <messaginginternalcrkeys.h> // for Central Repository keys
hgs
parents:
diff changeset
    31
#include <CoreApplicationUIsSDKCRKeys.h>
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
#include <AknFepGlobalEnums.h>              // Global Fep enums (ELatin, ENumber)
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// Base editor stuff
hgs
parents:
diff changeset
    36
#include <MsgBodyControl.h>                 // CMsgBodyControl
hgs
parents:
diff changeset
    37
#include <MsgEditorView.h>                  // CMsgEditorView
hgs
parents:
diff changeset
    38
#include <MsgAddressControl.h>              // CMsgAddressControl
hgs
parents:
diff changeset
    39
#include <MsgAttachmentUtils.h>             // CMsgAttachmentUtils
hgs
parents:
diff changeset
    40
#include <MsgEditorAppUiExtension.h>        // CMsgEditorAppUiExtension
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
// Help
hgs
parents:
diff changeset
    43
#include <csxhelp/mms.hlp.hrh>
hgs
parents:
diff changeset
    44
#include <hlplch.h>                         // For HlpLauncher 
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
// Phone
hgs
parents:
diff changeset
    47
#include <commonphoneparser.h>              // Common phone number validity checker
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
// Contacts
hgs
parents:
diff changeset
    50
#include <cntdef.h>                         // KNullContactId
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
// MUIU stuff
hgs
parents:
diff changeset
    53
#include <MuiuMsvUiServiceUtilities.h>      // Call back to sender
hgs
parents:
diff changeset
    54
#include <muiumsvuiserviceutilitiesinternal.h>
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
#include <MuiuOperationWait.h>              // CMuiuOperationWait
hgs
parents:
diff changeset
    57
#include <akninputblock.h>                  // CAknInputBlock
hgs
parents:
diff changeset
    58
#include <MuiuMsvProgressReporterOperation.h> // CMsvProgressReporterOperation
hgs
parents:
diff changeset
    59
#include <MuiuMsgEmbeddedEditorWatchingOperation.h>
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
// AKN Stuff
hgs
parents:
diff changeset
    62
#include <AknUtils.h>                       // Apac, layout, etc
hgs
parents:
diff changeset
    63
#include <AknsUtils.h>						// AknsUtils
hgs
parents:
diff changeset
    64
#include <aknnotewrappers.h>                // CAknInformationNote
hgs
parents:
diff changeset
    65
#include <applayout.cdl.h> // LAF
hgs
parents:
diff changeset
    66
#include <aknlayoutscalable_avkon.cdl.h>
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
// Client MTM Stuff
hgs
parents:
diff changeset
    69
#include <mmsnotificationclient.h>          // CMmsClientMtm
hgs
parents:
diff changeset
    70
#include <mtmuidef.hrh>                     // EMtmUiFlagEditorPreferEmbedded
hgs
parents:
diff changeset
    71
#include <mmsgenutils.h>                    // TMmsGenUtils
hgs
parents:
diff changeset
    72
#include <mmsmsventry.h>                    // TMmsMsvEntry
hgs
parents:
diff changeset
    73
#include <MtmExtendedCapabilities.hrh>      // function id of MessageInfo
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
// Send As Stuff
hgs
parents:
diff changeset
    76
#include <sendui.h>                         // SendUI (for Reply via SMS)
hgs
parents:
diff changeset
    77
#include <SenduiMtmUids.h>                  // MTM Uids
hgs
parents:
diff changeset
    78
#include <CMessageData.h>
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
// Find item
hgs
parents:
diff changeset
    81
#include <FindItemmenu.rsg>                 // Find item stuff
hgs
parents:
diff changeset
    82
#include <finditemmenu.h>                   //
hgs
parents:
diff changeset
    83
#include <finditemdialog.h>                 //
hgs
parents:
diff changeset
    84
#include <finditem.hrh>
hgs
parents:
diff changeset
    85
#include <ItemFinder.h>
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
    88
#include <akntoolbar.h>
hgs
parents:
diff changeset
    89
#endif
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
#include <aknnavi.h>                        // CAknNavigationControlContainer
hgs
parents:
diff changeset
    92
#include <aknnavide.h>                      // CAknNavigationDecorator
hgs
parents:
diff changeset
    93
#include <akntabgrp.h>                      // CAknTabGroup
hgs
parents:
diff changeset
    94
#include <akntitle.h>
hgs
parents:
diff changeset
    95
#include <mmserrors.h>
hgs
parents:
diff changeset
    96
#include <mmsregisteredapplications.h>
hgs
parents:
diff changeset
    97
#include <mmssettings.h>
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
#include <mmsui.mbg>                        // Bitmap identifiers
hgs
parents:
diff changeset
   100
#include <data_caging_path_literals.hrh>    // KDC_APP_BITMAP_DIR
hgs
parents:
diff changeset
   101
#include "MmsMtmConst.h"
hgs
parents:
diff changeset
   102
#include "NotMtmUi.h"                       // Notification MTM UI
hgs
parents:
diff changeset
   103
#include "NotMtmUiData.h"                   // Notification MTM UI Data
hgs
parents:
diff changeset
   104
#include "NotViewerAppUi.h"
hgs
parents:
diff changeset
   105
#include "NotViewerDocument.h"
hgs
parents:
diff changeset
   106
#include "NotViewer.hrh"
hgs
parents:
diff changeset
   107
#include <NotViewer.rsg>
hgs
parents:
diff changeset
   108
#include <uniaddresshandler.h>
hgs
parents:
diff changeset
   109
#include "MmsSettingsHandler.h"
hgs
parents:
diff changeset
   110
#include <msgvoipextension.h>
hgs
parents:
diff changeset
   111
#include <textresolver.h>
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
// CONSTANTS
hgs
parents:
diff changeset
   114
#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
hgs
parents:
diff changeset
   115
const TUint KNaviGranularity = 2;
hgs
parents:
diff changeset
   116
const TInt KIconDefaultColor = 0;
hgs
parents:
diff changeset
   117
#endif
hgs
parents:
diff changeset
   118
_LIT( KMmsUiMbmFile, "mmsui.mbm" );
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
const TInt KDateSize            = 30;
hgs
parents:
diff changeset
   121
const TInt KMaxDetailsLength    = 64;   // Copy max this many chars to TMsvEntry iDetails
hgs
parents:
diff changeset
   122
const TInt KReplyToSenderSize = 2048;
hgs
parents:
diff changeset
   123
// Exit time when using CIdle to close the application
hgs
parents:
diff changeset
   124
const TInt KDelayedExitDelay = 2500000;
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
// ---------------------------------------------------------
hgs
parents:
diff changeset
   127
// CNotViewerAppUi
hgs
parents:
diff changeset
   128
// ---------------------------------------------------------
hgs
parents:
diff changeset
   129
//
hgs
parents:
diff changeset
   130
CNotViewerAppUi::CNotViewerAppUi() :
hgs
parents:
diff changeset
   131
    iIdle( NULL ),
hgs
parents:
diff changeset
   132
    iAbsorber( NULL ),
hgs
parents:
diff changeset
   133
    iOperation( NULL ),
hgs
parents:
diff changeset
   134
    iSenderType( EMuiuAddressTypeNone ), 
hgs
parents:
diff changeset
   135
    iFlags(0),
hgs
parents:
diff changeset
   136
    iMsgId( 0 )
hgs
parents:
diff changeset
   137
    {
hgs
parents:
diff changeset
   138
    }
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
// ---------------------------------------------------------
hgs
parents:
diff changeset
   141
// ~CNotViewerAppUi
hgs
parents:
diff changeset
   142
// ---------------------------------------------------------
hgs
parents:
diff changeset
   143
//
hgs
parents:
diff changeset
   144
CNotViewerAppUi::~CNotViewerAppUi()
hgs
parents:
diff changeset
   145
    {
hgs
parents:
diff changeset
   146
    FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
   147
    delete iOperation;
hgs
parents:
diff changeset
   148
    if (    iView
hgs
parents:
diff changeset
   149
        &&  !( iFlags & ENotViewerIsNotification ) )
hgs
parents:
diff changeset
   150
        {   // FR mode
hgs
parents:
diff changeset
   151
        if ( !( iMtm->Entry( ).Entry( ).ReadOnly( ) ) )
hgs
parents:
diff changeset
   152
            { // FR in edit mode
hgs
parents:
diff changeset
   153
            CMsgAddressControl* to = 
hgs
parents:
diff changeset
   154
                static_cast<CMsgAddressControl*>( iView->ControlById( EMsgComponentIdTo ) );
hgs
parents:
diff changeset
   155
            if ( to )
hgs
parents:
diff changeset
   156
                { // Lets save the current input mode to shared data
hgs
parents:
diff changeset
   157
                TInt inputMode = to->Editor().AknEditorCurrentInputMode();
hgs
parents:
diff changeset
   158
                iMuiuSettRepository->Set( KMuiuToInputMode, inputMode );
hgs
parents:
diff changeset
   159
                }        
hgs
parents:
diff changeset
   160
            }
hgs
parents:
diff changeset
   161
        }
hgs
parents:
diff changeset
   162
    if ( iNotifyHandler )
hgs
parents:
diff changeset
   163
        {        
hgs
parents:
diff changeset
   164
        iNotifyHandler->StopListening();
hgs
parents:
diff changeset
   165
        }
hgs
parents:
diff changeset
   166
    delete iNotifyHandler;
hgs
parents:
diff changeset
   167
    delete iCUiRepository;
hgs
parents:
diff changeset
   168
    delete iMuiuSettRepository;
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
    delete iIdle;
hgs
parents:
diff changeset
   171
    delete iAbsorber;
hgs
parents:
diff changeset
   172
    delete iSendUi;
hgs
parents:
diff changeset
   173
    delete iFindItemMenu;
hgs
parents:
diff changeset
   174
#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
hgs
parents:
diff changeset
   175
    delete iNaviDecorator;
hgs
parents:
diff changeset
   176
#endif
hgs
parents:
diff changeset
   177
    delete iMsgVoIPExtension;
hgs
parents:
diff changeset
   178
	delete iAlias;
hgs
parents:
diff changeset
   179
    delete iAddressHandler;
hgs
parents:
diff changeset
   180
    delete iSettingsHandler;
hgs
parents:
diff changeset
   181
    delete iAppIcon;
hgs
parents:
diff changeset
   182
    }
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
// ---------------------------------------------------------
hgs
parents:
diff changeset
   185
// ConstructL
hgs
parents:
diff changeset
   186
// ---------------------------------------------------------
hgs
parents:
diff changeset
   187
//
hgs
parents:
diff changeset
   188
void CNotViewerAppUi::ConstructL()
hgs
parents:
diff changeset
   189
    {
hgs
parents:
diff changeset
   190
    LOGTEXT(_L8("NotViewerAppUi: Construct start"));
hgs
parents:
diff changeset
   191
    CMsgEditorAppUi::ConstructL(); // Constructor of the base class
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
    // Disable task swapper from options menu during launch
hgs
parents:
diff changeset
   194
    MenuBar()->SetMenuType( CEikMenuBar::EMenuOptionsNoTaskSwapper );
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
	FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
	if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
hgs
parents:
diff changeset
   199
		{
hgs
parents:
diff changeset
   200
		iFlags |= ENotViewerFlagsHelp;
hgs
parents:
diff changeset
   201
		}
hgs
parents:
diff changeset
   202
		
hgs
parents:
diff changeset
   203
    // KFeatureIdMmsNonDestructiveForward has been deprecated
hgs
parents:
diff changeset
   204
    // Check of TMsvEntry::iMtmData2 & KMmsStoredInMMBox replaces it. 
hgs
parents:
diff changeset
   205
    // MMSEngine sets KMmsStoredInMMBox for received notifications
hgs
parents:
diff changeset
   206
    
hgs
parents:
diff changeset
   207
    if ( FeatureManager::FeatureSupported( KFeatureIdOfflineMode ) )
hgs
parents:
diff changeset
   208
        {
hgs
parents:
diff changeset
   209
        iFlags |= ENotViewerOffline;
hgs
parents:
diff changeset
   210
        }    
hgs
parents:
diff changeset
   211
    if ( FeatureManager::FeatureSupported( KFeatureIdAudioMessaging ) )
hgs
parents:
diff changeset
   212
        {
hgs
parents:
diff changeset
   213
        iFlags |= ENotViewerAudioMessaging;
hgs
parents:
diff changeset
   214
        }
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
    iMtm = &(Document()->Mtm());
hgs
parents:
diff changeset
   217
    if ( !iMtm )
hgs
parents:
diff changeset
   218
        {
hgs
parents:
diff changeset
   219
        User::Leave( KErrBadHandle );
hgs
parents:
diff changeset
   220
        }
hgs
parents:
diff changeset
   221
    
hgs
parents:
diff changeset
   222
    iSettingsHandler = CMmsSettingsHandler::NewL( *iMtm );
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
#ifndef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   225
    iView = CMsgEditorView::NewL( *this, CMsgEditorView::EMsgReadOnly );
hgs
parents:
diff changeset
   226
#endif
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
    iNaviPane = static_cast<CAknNavigationControlContainer*>
hgs
parents:
diff changeset
   229
        ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
hgs
parents:
diff changeset
   230
    iTitlePane = static_cast<CAknTitlePane*>
hgs
parents:
diff changeset
   231
        ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
hgs
parents:
diff changeset
   232
    iSendUi = CSendUi::NewL();
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
    TInt highlight = 0;
hgs
parents:
diff changeset
   235
    iMuiuSettRepository = CRepository::NewL( KCRUidMuiuSettings );
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
    iCUiRepository = CRepository::NewL( KCRUidCommonUi );
hgs
parents:
diff changeset
   238
    iCUiRepository->Get( KCuiAutomaticHighlight, highlight  );
hgs
parents:
diff changeset
   239
    iNotifyHandler = CCenRepNotifyHandler::NewL( *this, 
hgs
parents:
diff changeset
   240
                                                 *iCUiRepository, 
hgs
parents:
diff changeset
   241
                                                 CCenRepNotifyHandler::EIntKey, 
hgs
parents:
diff changeset
   242
                                                 KCuiAutomaticHighlight );
hgs
parents:
diff changeset
   243
    iNotifyHandler->StartListeningL();
hgs
parents:
diff changeset
   244
    
hgs
parents:
diff changeset
   245
    if ( highlight == 0 )
hgs
parents:
diff changeset
   246
        { // Disable autofind if it's disable in Shared Data 
hgs
parents:
diff changeset
   247
        iFlags &= ~ENotViewerAutoFind;
hgs
parents:
diff changeset
   248
        }
hgs
parents:
diff changeset
   249
    else
hgs
parents:
diff changeset
   250
        {
hgs
parents:
diff changeset
   251
        iFlags |= ENotViewerAutoFind;
hgs
parents:
diff changeset
   252
        }
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
    // No other reply types as mms is not possible
hgs
parents:
diff changeset
   255
    TInt features( 0 );
hgs
parents:
diff changeset
   256
    CRepository* repository = CRepository::NewL( KCRUidMuiuVariation );
hgs
parents:
diff changeset
   257
    repository->Get( KMuiuUniEditorFeatures, features );
hgs
parents:
diff changeset
   258
    if ( features & KUniEditorFeatureIdRestrictedReplyMms )
hgs
parents:
diff changeset
   259
        {
hgs
parents:
diff changeset
   260
        iFlags |= ENotViewerRestrictedReply;
hgs
parents:
diff changeset
   261
        }
hgs
parents:
diff changeset
   262
    delete repository;
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
    LOGTEXT2(_L("CNotViewerAppUi::ConstructL: iFlags 0x%x"), iFlags );
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
    iFindItemMenu = CFindItemMenu::NewL( EFindItemMenuPlaceHolder );
hgs
parents:
diff changeset
   267
    iFindItemMenu->AttachItemFinderMenuL(0);
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
	if( !iEikonEnv->StartedAsServerApp( ) )
hgs
parents:
diff changeset
   270
		{
hgs
parents:
diff changeset
   271
	    Document()->PrepareToLaunchL( this );
hgs
parents:
diff changeset
   272
		}
hgs
parents:
diff changeset
   273
		
hgs
parents:
diff changeset
   274
    MenuBar()->SetContextMenuTitleResourceId( R_NOTVIEWER_SELECTIONMENUBAR );
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
  	// Set path of bitmap file
hgs
parents:
diff changeset
   277
  	TParse fileParse;
hgs
parents:
diff changeset
   278
  	fileParse.Set( KMmsUiMbmFile, &KDC_APP_BITMAP_DIR, NULL );
hgs
parents:
diff changeset
   279
    
hgs
parents:
diff changeset
   280
    iAppIcon = AknsUtils::CreateGulIconL( 
hgs
parents:
diff changeset
   281
        AknsUtils::SkinInstance(), 
hgs
parents:
diff changeset
   282
        KAknsIIDQgnPropMceMmsTitle,
hgs
parents:
diff changeset
   283
        fileParse.FullName(),
hgs
parents:
diff changeset
   284
        EMbmMmsuiQgn_prop_mce_mms_title,
hgs
parents:
diff changeset
   285
        EMbmMmsuiQgn_prop_mce_mms_title_mask );
hgs
parents:
diff changeset
   286
    
hgs
parents:
diff changeset
   287
    ApplyFormat(iLabelFormat, iLabelMask, ETrue);
hgs
parents:
diff changeset
   288
    ApplyFormat(iValueFormat, iValueMask, EFalse);    
hgs
parents:
diff changeset
   289
    LOGTEXT(_L8("NotViewerAppUi: Construct end"));
hgs
parents:
diff changeset
   290
    }
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
// ---------------------------------------------------------
hgs
parents:
diff changeset
   293
// LaunchViewL
hgs
parents:
diff changeset
   294
// ---------------------------------------------------------
hgs
parents:
diff changeset
   295
//
hgs
parents:
diff changeset
   296
void CNotViewerAppUi::LaunchViewL()
hgs
parents:
diff changeset
   297
    {
hgs
parents:
diff changeset
   298
    LOGTEXT(_L8("NotViewerAppUi: LaunchViewL start"));
hgs
parents:
diff changeset
   299
    
hgs
parents:
diff changeset
   300
    TRAPD( err, iMtm->LoadMessageL() );
hgs
parents:
diff changeset
   301
hgs
parents:
diff changeset
   302
   	if ( err )
hgs
parents:
diff changeset
   303
       	{
hgs
parents:
diff changeset
   304
       	if ( err != KErrNoMemory )
hgs
parents:
diff changeset
   305
           	{
hgs
parents:
diff changeset
   306
           	User::Leave( KErrCorrupt );
hgs
parents:
diff changeset
   307
           	}
hgs
parents:
diff changeset
   308
       	User::Leave( err );
hgs
parents:
diff changeset
   309
       	}
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
   	GetTypeL( ); // Updates the iFlag
hgs
parents:
diff changeset
   312
    
hgs
parents:
diff changeset
   313
    SetTitleIconL();   
hgs
parents:
diff changeset
   314
hgs
parents:
diff changeset
   315
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   316
    if ( AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
   317
        {
hgs
parents:
diff changeset
   318
        // iToolbar should have been assigned already in HandleForegroundEventL()
hgs
parents:
diff changeset
   319
        // If it failed,
hgs
parents:
diff changeset
   320
        // - catch it here
hgs
parents:
diff changeset
   321
        // - but it means also that some of functionality cannot be fulfilled
hgs
parents:
diff changeset
   322
        if ( !iToolbar )
hgs
parents:
diff changeset
   323
            {
hgs
parents:
diff changeset
   324
            iToolbar = CurrentFixedToolbar();  
hgs
parents:
diff changeset
   325
            if ( iToolbar )
hgs
parents:
diff changeset
   326
                {
hgs
parents:
diff changeset
   327
                iToolbar->SetToolbarObserver( this );
hgs
parents:
diff changeset
   328
                }
hgs
parents:
diff changeset
   329
            }
hgs
parents:
diff changeset
   330
        }
hgs
parents:
diff changeset
   331
hgs
parents:
diff changeset
   332
    if (    iToolbar
hgs
parents:
diff changeset
   333
        &&  iToolbar->IsToolbarDisabled() )
hgs
parents:
diff changeset
   334
        {
hgs
parents:
diff changeset
   335
        iToolbar->DisableToolbarL( EFalse ); 
hgs
parents:
diff changeset
   336
        iToolbar->SetToolbarVisibility( ETrue, EFalse );
hgs
parents:
diff changeset
   337
        }
hgs
parents:
diff changeset
   338
    // Creation of CMsgEditorView must be after toolbar is set visible otherwise layout things can go wrong. 
hgs
parents:
diff changeset
   339
    // This has been moved here from ConstructL(). For that reason couple of 'if ( iView &&' checks has been added 
hgs
parents:
diff changeset
   340
    // at locations which could use CMsgEditorView very early at startup
hgs
parents:
diff changeset
   341
    iView = CMsgEditorView::NewL( *this, CMsgEditorView::EMsgReadOnly );
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
#endif
hgs
parents:
diff changeset
   344
hgs
parents:
diff changeset
   345
    // Editors must not exit due to End key. Flag is set by GetTypeL();
hgs
parents:
diff changeset
   346
    if ( ! ( iFlags & ENotViewerIsNotification ) )
hgs
parents:
diff changeset
   347
        {
hgs
parents:
diff changeset
   348
        SetCloseWithEndKey( EFalse );
hgs
parents:
diff changeset
   349
        }
hgs
parents:
diff changeset
   350
        
hgs
parents:
diff changeset
   351
   	iMsgId = iMtm->Entry( ).Entry( ).Id( );
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
    TInt focusedControl = 0;
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
	if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
   356
    	{   // We are in the notification mode
hgs
parents:
diff changeset
   357
        focusedControl = EMsgComponentIdFrom;
hgs
parents:
diff changeset
   358
        iView->AddControlFromResourceL( 
hgs
parents:
diff changeset
   359
        	R_NOTVIEWER_FROM, 
hgs
parents:
diff changeset
   360
            EMsgAddressControl, 
hgs
parents:
diff changeset
   361
            EMsgAppendControl, 
hgs
parents:
diff changeset
   362
            EMsgHeader );
hgs
parents:
diff changeset
   363
    	}
hgs
parents:
diff changeset
   364
    else
hgs
parents:
diff changeset
   365
        {   // we are in the forward request mode
hgs
parents:
diff changeset
   366
        focusedControl = EMsgComponentIdTo;
hgs
parents:
diff changeset
   367
        iView->AddControlFromResourceL( 
hgs
parents:
diff changeset
   368
            R_NOTVIEWER_TO, 
hgs
parents:
diff changeset
   369
            EMsgAddressControl, 
hgs
parents:
diff changeset
   370
            EMsgAppendControl, 
hgs
parents:
diff changeset
   371
            EMsgHeader );
hgs
parents:
diff changeset
   372
        CMsgAddressControl* to = AddressControl( );
hgs
parents:
diff changeset
   373
hgs
parents:
diff changeset
   374
        // Remove the auto highlight in FR mode
hgs
parents:
diff changeset
   375
        iFlags &= ~ENotViewerAutoFind;
hgs
parents:
diff changeset
   376
hgs
parents:
diff changeset
   377
        TMsvEntry msvEntry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
   378
hgs
parents:
diff changeset
   379
        if( msvEntry.ReadOnly( ) ) // Sent 
hgs
parents:
diff changeset
   380
            {
hgs
parents:
diff changeset
   381
            to->SetReadOnly( ETrue );
hgs
parents:
diff changeset
   382
            }
hgs
parents:
diff changeset
   383
        else    // Unsent: To-control must not be read only
hgs
parents:
diff changeset
   384
            {
hgs
parents:
diff changeset
   385
            to->SetReadOnly( EFalse );
hgs
parents:
diff changeset
   386
            TInt inputMode = ENumber;
hgs
parents:
diff changeset
   387
hgs
parents:
diff changeset
   388
            if ( iMuiuSettRepository->Get( KMuiuToInputMode, inputMode ) )
hgs
parents:
diff changeset
   389
                {
hgs
parents:
diff changeset
   390
                inputMode = ENumber;
hgs
parents:
diff changeset
   391
                }
hgs
parents:
diff changeset
   392
            to->Editor( ).SetAknEditorCurrentInputMode( inputMode );
hgs
parents:
diff changeset
   393
            }
hgs
parents:
diff changeset
   394
        UpdateTitlePaneL( ); // Updates the "Forward Request" to Title pane
hgs
parents:
diff changeset
   395
        }
hgs
parents:
diff changeset
   396
        
hgs
parents:
diff changeset
   397
    // Adds the text in message body here
hgs
parents:
diff changeset
   398
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
   399
        { // We are in the Viewer so lets add from field
hgs
parents:
diff changeset
   400
        const TPtrC sender = iMtm->Sender();
hgs
parents:
diff changeset
   401
        const TPtrC details = iMtm->Entry().Entry().iDetails;
hgs
parents:
diff changeset
   402
        if ( sender.Length() )
hgs
parents:
diff changeset
   403
            {
hgs
parents:
diff changeset
   404
            iSenderType = MsvUiServiceUtilitiesInternal::ResolveAddressTypeL(    
hgs
parents:
diff changeset
   405
                TMmsGenUtils::PureAddress( sender ),
hgs
parents:
diff changeset
   406
                            CommonPhoneParser::ESMSNumber );
hgs
parents:
diff changeset
   407
            
hgs
parents:
diff changeset
   408
            if ( iSenderType != EMuiuAddressTypePhoneNumber )
hgs
parents:
diff changeset
   409
                {
hgs
parents:
diff changeset
   410
                //We trust on that there won't be illegal addresses
hgs
parents:
diff changeset
   411
                //in received messages
hgs
parents:
diff changeset
   412
                iSenderType = EMuiuAddressTypeEmail;
hgs
parents:
diff changeset
   413
                if ( iFindItemMenu )
hgs
parents:
diff changeset
   414
                    {
hgs
parents:
diff changeset
   415
                    iFindItemMenu->SetSenderDescriptorType( CItemFinder::EEmailAddress );
hgs
parents:
diff changeset
   416
                    }
hgs
parents:
diff changeset
   417
                }
hgs
parents:
diff changeset
   418
            CMsgAddressControl* fromControl = AddressControl( );
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
            //Check if MMS engine has put an alias into iDetails field
hgs
parents:
diff changeset
   421
            if ( sender.Compare( details ) != 0 )
hgs
parents:
diff changeset
   422
                {
hgs
parents:
diff changeset
   423
                TPtrC alias = KNullDesC();
hgs
parents:
diff changeset
   424
                if ( details.Length() && !iAlias )
hgs
parents:
diff changeset
   425
                    {
hgs
parents:
diff changeset
   426
                    iAlias = details.AllocL( );
hgs
parents:
diff changeset
   427
                    alias.Set( *iAlias );
hgs
parents:
diff changeset
   428
                    }
hgs
parents:
diff changeset
   429
hgs
parents:
diff changeset
   430
                // Resolve whether this is remote alias. Local alias takes precedence
hgs
parents:
diff changeset
   431
                TPtrC tempAlias( TMmsGenUtils::Alias( sender ) );
hgs
parents:
diff changeset
   432
                if (    iAlias
hgs
parents:
diff changeset
   433
                    &&  tempAlias.Length()
hgs
parents:
diff changeset
   434
                    &&  !tempAlias.CompareF( *iAlias ) )
hgs
parents:
diff changeset
   435
                    
hgs
parents:
diff changeset
   436
                    {
hgs
parents:
diff changeset
   437
                    iRemoteAlias = ETrue;
hgs
parents:
diff changeset
   438
                    }                    
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
                MVPbkContactLink* link = NULL;
hgs
parents:
diff changeset
   441
                fromControl->AddRecipientL( alias,
hgs
parents:
diff changeset
   442
                    TMmsGenUtils::PureAddress( sender ),
hgs
parents:
diff changeset
   443
                    ETrue,
hgs
parents:
diff changeset
   444
                    link );
hgs
parents:
diff changeset
   445
                }
hgs
parents:
diff changeset
   446
            else
hgs
parents:
diff changeset
   447
                {
hgs
parents:
diff changeset
   448
                MVPbkContactLink* link = NULL;
hgs
parents:
diff changeset
   449
                fromControl->AddRecipientL( TMmsGenUtils::Alias( sender ),
hgs
parents:
diff changeset
   450
                    TMmsGenUtils::PureAddress( sender ),
hgs
parents:
diff changeset
   451
                    ETrue,
hgs
parents:
diff changeset
   452
                    link );
hgs
parents:
diff changeset
   453
                }
hgs
parents:
diff changeset
   454
            }
hgs
parents:
diff changeset
   455
        else
hgs
parents:
diff changeset
   456
            {
hgs
parents:
diff changeset
   457
            // Leave the address control empty
hgs
parents:
diff changeset
   458
            // This should not happen, though
hgs
parents:
diff changeset
   459
            }
hgs
parents:
diff changeset
   460
        }
hgs
parents:
diff changeset
   461
    else
hgs
parents:
diff changeset
   462
        {
hgs
parents:
diff changeset
   463
        const CMsvRecipientList& addresses = iMtm->AddresseeList();
hgs
parents:
diff changeset
   464
hgs
parents:
diff changeset
   465
        TInt count = addresses.Count();
hgs
parents:
diff changeset
   466
        CMsgAddressControl* toControl = AddressControl( );
hgs
parents:
diff changeset
   467
hgs
parents:
diff changeset
   468
        if ( count > 0 )
hgs
parents:
diff changeset
   469
            {
hgs
parents:
diff changeset
   470
            CMsgRecipientList* recipientList = CMsgRecipientList::NewL();
hgs
parents:
diff changeset
   471
            CleanupStack::PushL( recipientList );
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
            for ( TInt i = 0; i < count; i++)
hgs
parents:
diff changeset
   474
                {
hgs
parents:
diff changeset
   475
                CMsgRecipientItem* recipient = CMsgRecipientItem::NewLC(
hgs
parents:
diff changeset
   476
                    TMmsGenUtils::Alias( addresses[i] ),
hgs
parents:
diff changeset
   477
                    TMmsGenUtils::PureAddress( addresses[i] ) );
hgs
parents:
diff changeset
   478
                recipient->SetVerified( ETrue );
hgs
parents:
diff changeset
   479
                recipientList->AppendL( recipient );
hgs
parents:
diff changeset
   480
                CleanupStack::Pop();
hgs
parents:
diff changeset
   481
                recipient = NULL;
hgs
parents:
diff changeset
   482
                }
hgs
parents:
diff changeset
   483
            toControl->AddRecipientsL( *recipientList );
hgs
parents:
diff changeset
   484
            CleanupStack::PopAndDestroy();
hgs
parents:
diff changeset
   485
            }
hgs
parents:
diff changeset
   486
        if ( !iMtm->Entry().Entry().ReadOnly( ) )
hgs
parents:
diff changeset
   487
            { // Address handler is created only when we have unsent Forward Request
hgs
parents:
diff changeset
   488
            iAddressHandler = CUniAddressHandler::NewL( Document()->Mtm(), *toControl, *iCoeEnv );
hgs
parents:
diff changeset
   489
            }
hgs
parents:
diff changeset
   490
        }
hgs
parents:
diff changeset
   491
hgs
parents:
diff changeset
   492
    // Add the body field stuff
hgs
parents:
diff changeset
   493
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
   494
        { // We are in the Viewer so lets add message field, too
hgs
parents:
diff changeset
   495
        AddMessageFieldL( );
hgs
parents:
diff changeset
   496
        }
hgs
parents:
diff changeset
   497
    AddSubjectFieldL( );
hgs
parents:
diff changeset
   498
    AddTextFieldL( );
hgs
parents:
diff changeset
   499
    AddSizeFieldL( );
hgs
parents:
diff changeset
   500
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
   501
        { // We are in the Viewer so lets add expiry field, too
hgs
parents:
diff changeset
   502
        AddExpiryFieldL( );
hgs
parents:
diff changeset
   503
        }
hgs
parents:
diff changeset
   504
    AddClassFieldL( );
hgs
parents:
diff changeset
   505
    AddPriorityFieldL( );
hgs
parents:
diff changeset
   506
hgs
parents:
diff changeset
   507
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
   508
        { // We are in the Viewer so Find stuff too
hgs
parents:
diff changeset
   509
        SetFindModeL( iFlags & ENotViewerAutoFind );
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
        }
hgs
parents:
diff changeset
   512
    else
hgs
parents:
diff changeset
   513
        {
hgs
parents:
diff changeset
   514
        if ( iView->ItemFinder() )
hgs
parents:
diff changeset
   515
            {
hgs
parents:
diff changeset
   516
	        iView->ItemFinder()->SetFindModeL(
hgs
parents:
diff changeset
   517
                CItemFinder::ENoneSelected );
hgs
parents:
diff changeset
   518
            }
hgs
parents:
diff changeset
   519
        }
hgs
parents:
diff changeset
   520
hgs
parents:
diff changeset
   521
    iView->ExecuteL( ClientRect(), focusedControl );
hgs
parents:
diff changeset
   522
    InitNavipaneL( );
hgs
parents:
diff changeset
   523
hgs
parents:
diff changeset
   524
    // Enable task swapper to options menu after launch has been completed.
hgs
parents:
diff changeset
   525
    MenuBar()->SetMenuType( CEikMenuBar::EMenuOptions );
hgs
parents:
diff changeset
   526
hgs
parents:
diff changeset
   527
hgs
parents:
diff changeset
   528
    LOGTEXT(_L8("NotViewerAppUi: LaunchViewL end"));
hgs
parents:
diff changeset
   529
    }
hgs
parents:
diff changeset
   530
hgs
parents:
diff changeset
   531
// ---------------------------------------------------------
hgs
parents:
diff changeset
   532
// DynInitMenuPaneL
hgs
parents:
diff changeset
   533
// ---------------------------------------------------------
hgs
parents:
diff changeset
   534
//
hgs
parents:
diff changeset
   535
void CNotViewerAppUi::DynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
   536
    {
hgs
parents:
diff changeset
   537
    if ( aMenuPane )
hgs
parents:
diff changeset
   538
        {       
hgs
parents:
diff changeset
   539
        TInt amountOfItems( aMenuPane->NumberOfItemsInPane() );
hgs
parents:
diff changeset
   540
        if ( !Document( )->IsLaunched( )  )
hgs
parents:
diff changeset
   541
            {
hgs
parents:
diff changeset
   542
            if ( amountOfItems )
hgs
parents:
diff changeset
   543
                {
hgs
parents:
diff changeset
   544
                aMenuPane->DeleteBetweenMenuItems( 0, amountOfItems - 1 );
hgs
parents:
diff changeset
   545
                }
hgs
parents:
diff changeset
   546
            return;
hgs
parents:
diff changeset
   547
            }
hgs
parents:
diff changeset
   548
        switch ( aMenuId )
hgs
parents:
diff changeset
   549
            {
hgs
parents:
diff changeset
   550
            case R_NOTVIEWER_OPTIONSMENU:
hgs
parents:
diff changeset
   551
                {
hgs
parents:
diff changeset
   552
                DynInitOptionsMenuL( aMenuPane );
hgs
parents:
diff changeset
   553
                break;
hgs
parents:
diff changeset
   554
                }
hgs
parents:
diff changeset
   555
            case R_NOTVIEWER_REPLY_SUBMENU:
hgs
parents:
diff changeset
   556
                {
hgs
parents:
diff changeset
   557
                DynInitReplyMenuL( aMenuPane );
hgs
parents:
diff changeset
   558
                break;
hgs
parents:
diff changeset
   559
                }
hgs
parents:
diff changeset
   560
            case R_NOTVIEWER_SELECTIONMENU:
hgs
parents:
diff changeset
   561
                {
hgs
parents:
diff changeset
   562
                DynInitContextMenuL( aMenuPane );
hgs
parents:
diff changeset
   563
                break;
hgs
parents:
diff changeset
   564
                }
hgs
parents:
diff changeset
   565
            case R_NOTVIEWER_ZOOM_SUBMENU:
hgs
parents:
diff changeset
   566
                {
hgs
parents:
diff changeset
   567
                TInt zoomLevel = KErrGeneral;
hgs
parents:
diff changeset
   568
                iMsgEditorAppUiExtension->
hgs
parents:
diff changeset
   569
                    iSettingCachePlugin.GetValue( KAknLocalZoomLayoutSwitch, zoomLevel );
hgs
parents:
diff changeset
   570
                switch ( zoomLevel )
hgs
parents:
diff changeset
   571
                    {
hgs
parents:
diff changeset
   572
                    case EAknUiZoomAutomatic:
hgs
parents:
diff changeset
   573
                        aMenuPane->SetItemButtonState(  EMsgDispSizeAutomatic,
hgs
parents:
diff changeset
   574
                                                        EEikMenuItemSymbolOn );
hgs
parents:
diff changeset
   575
                        break;
hgs
parents:
diff changeset
   576
                    case EAknUiZoomNormal:
hgs
parents:
diff changeset
   577
                        aMenuPane->SetItemButtonState(  EMsgDispSizeNormal,
hgs
parents:
diff changeset
   578
                                                        EEikMenuItemSymbolOn );
hgs
parents:
diff changeset
   579
                        break;
hgs
parents:
diff changeset
   580
                    case EAknUiZoomSmall:
hgs
parents:
diff changeset
   581
                        aMenuPane->SetItemButtonState(  EMsgDispSizeSmall,
hgs
parents:
diff changeset
   582
                                                        EEikMenuItemSymbolOn );
hgs
parents:
diff changeset
   583
                        break;
hgs
parents:
diff changeset
   584
                    case EAknUiZoomLarge:
hgs
parents:
diff changeset
   585
                        aMenuPane->SetItemButtonState(  EMsgDispSizeLarge,
hgs
parents:
diff changeset
   586
                                                        EEikMenuItemSymbolOn );
hgs
parents:
diff changeset
   587
                        break;
hgs
parents:
diff changeset
   588
                    default:
hgs
parents:
diff changeset
   589
                        break;
hgs
parents:
diff changeset
   590
                    }
hgs
parents:
diff changeset
   591
                }
hgs
parents:
diff changeset
   592
                break;
hgs
parents:
diff changeset
   593
            default:
hgs
parents:
diff changeset
   594
                {
hgs
parents:
diff changeset
   595
                // this does nothing if we're not, so this is safe
hgs
parents:
diff changeset
   596
                iFindItemMenu->UpdateItemFinderMenuL( aMenuId, aMenuPane );
hgs
parents:
diff changeset
   597
                break;
hgs
parents:
diff changeset
   598
                }
hgs
parents:
diff changeset
   599
            }
hgs
parents:
diff changeset
   600
        }
hgs
parents:
diff changeset
   601
    }
hgs
parents:
diff changeset
   602
hgs
parents:
diff changeset
   603
// ---------------------------------------------------------
hgs
parents:
diff changeset
   604
// DynInitOptionsMenuL
hgs
parents:
diff changeset
   605
// ---------------------------------------------------------
hgs
parents:
diff changeset
   606
//
hgs
parents:
diff changeset
   607
void CNotViewerAppUi::DynInitOptionsMenuL( CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
   608
    {
hgs
parents:
diff changeset
   609
    LOGTEXT(_L8("NotViewerAppUi: DynInitOptionsMenuL start"));
hgs
parents:
diff changeset
   610
    if( !(iFlags & ENotViewerFlagsHelp ) )
hgs
parents:
diff changeset
   611
        {
hgs
parents:
diff changeset
   612
        aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
hgs
parents:
diff changeset
   613
        }
hgs
parents:
diff changeset
   614
    if (    iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
   615
        {   // Notification mode        
hgs
parents:
diff changeset
   616
        if ( iView  )
hgs
parents:
diff changeset
   617
            {      
hgs
parents:
diff changeset
   618
            TInt focusedControl = FocusedControlId();                     
hgs
parents:
diff changeset
   619
            TBool senderHighlighted = EFalse;
hgs
parents:
diff changeset
   620
            
hgs
parents:
diff changeset
   621
            if ( focusedControl == EMsgComponentIdFrom )
hgs
parents:
diff changeset
   622
                {
hgs
parents:
diff changeset
   623
                CMsgAddressControl* address = static_cast<CMsgAddressControl*>(
hgs
parents:
diff changeset
   624
                    iView->ControlById( EMsgComponentIdFrom ) );
hgs
parents:
diff changeset
   625
                
hgs
parents:
diff changeset
   626
                if ( address && address->Editor().SelectionLength() 
hgs
parents:
diff changeset
   627
                        == address->Editor().TextLength() )
hgs
parents:
diff changeset
   628
                    {
hgs
parents:
diff changeset
   629
                    senderHighlighted = ETrue;
hgs
parents:
diff changeset
   630
                    }
hgs
parents:
diff changeset
   631
                }
hgs
parents:
diff changeset
   632
        
hgs
parents:
diff changeset
   633
            if( ( focusedControl == EMsgComponentIdFrom ) && ( ( iMtm->Sender( ) ).Length() )
hgs
parents:
diff changeset
   634
                  && senderHighlighted )
hgs
parents:
diff changeset
   635
                {
hgs
parents:
diff changeset
   636
                iFindItemMenu->SetSenderHighlightStatus( ETrue );
hgs
parents:
diff changeset
   637
                iFindItemMenu->SetSenderDisplayText( TMmsGenUtils::PureAddress( iMtm->Sender( ) ) );
hgs
parents:
diff changeset
   638
                }
hgs
parents:
diff changeset
   639
	        else
hgs
parents:
diff changeset
   640
	     	    {
hgs
parents:
diff changeset
   641
                iFindItemMenu->SetSenderHighlightStatus( EFalse );
hgs
parents:
diff changeset
   642
		        }
hgs
parents:
diff changeset
   643
		    iFindItemMenu->AddItemFindMenuL( 
hgs
parents:
diff changeset
   644
		        ( iView->ItemFinder() && 
hgs
parents:
diff changeset
   645
		          iView->ItemFinder()->CurrentSelection().Length() ) 
hgs
parents:
diff changeset
   646
		        ? iView->ItemFinder() : 0,
hgs
parents:
diff changeset
   647
    			aMenuPane, 
hgs
parents:
diff changeset
   648
                EFindItemMenuPlaceHolder,
hgs
parents:
diff changeset
   649
                senderHighlighted ? 
hgs
parents:
diff changeset
   650
                iMtm->Sender( ) : KNullDesC(),
hgs
parents:
diff changeset
   651
                iAlias && !iRemoteAlias ? ETrue : EFalse, //"Is sender known"
hgs
parents:
diff changeset
   652
    			EFalse );
hgs
parents:
diff changeset
   653
            }
hgs
parents:
diff changeset
   654
hgs
parents:
diff changeset
   655
        aMenuPane->SetItemDimmed( ENotViewerSend, ETrue );
hgs
parents:
diff changeset
   656
        aMenuPane->SetItemDimmed( ENotViewerAddRecipient, ETrue );
hgs
parents:
diff changeset
   657
        aMenuPane->SetItemDimmed( ENotViewerCheckNames, ETrue );
hgs
parents:
diff changeset
   658
hgs
parents:
diff changeset
   659
        CNotViewerDocument* doc = Document( );
hgs
parents:
diff changeset
   660
hgs
parents:
diff changeset
   661
        CNotMtmUiData* uiData = &doc->MtmUiDataL( );
hgs
parents:
diff changeset
   662
        
hgs
parents:
diff changeset
   663
        TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
   664
hgs
parents:
diff changeset
   665
        // Note: OperationSupportedL returns 0 if operation is supported,
hgs
parents:
diff changeset
   666
        // otherwise it returns some kind of error code
hgs
parents:
diff changeset
   667
hgs
parents:
diff changeset
   668
        if( uiData->OperationSupportedL( KMtmUiFunctionFetchMMS, entry ) )
hgs
parents:
diff changeset
   669
            {
hgs
parents:
diff changeset
   670
            aMenuPane->SetItemDimmed( ENotViewerRetrieve, ETrue );
hgs
parents:
diff changeset
   671
            }
hgs
parents:
diff changeset
   672
hgs
parents:
diff changeset
   673
        if( uiData->OperationSupportedL( KMtmUiFunctionDeleteMessage, entry ) )
hgs
parents:
diff changeset
   674
            {
hgs
parents:
diff changeset
   675
            aMenuPane->SetItemDimmed( ENotViewerDelete, ETrue );
hgs
parents:
diff changeset
   676
            }
hgs
parents:
diff changeset
   677
hgs
parents:
diff changeset
   678
        if( uiData->OperationSupportedL( KMtmUiFunctionForward, entry ) )
hgs
parents:
diff changeset
   679
            {
hgs
parents:
diff changeset
   680
            aMenuPane->SetItemDimmed( ENotViewerForward, ETrue ); 
hgs
parents:
diff changeset
   681
            }
hgs
parents:
diff changeset
   682
hgs
parents:
diff changeset
   683
        if( iMtm->Sender().Length()==0 )
hgs
parents:
diff changeset
   684
            {
hgs
parents:
diff changeset
   685
            aMenuPane->SetItemDimmed( ENotViewerReplyMenu, ETrue );
hgs
parents:
diff changeset
   686
            }
hgs
parents:
diff changeset
   687
hgs
parents:
diff changeset
   688
        }
hgs
parents:
diff changeset
   689
    else
hgs
parents:
diff changeset
   690
        {   // ForwReq mode
hgs
parents:
diff changeset
   691
        aMenuPane->SetItemDimmed( EFindItemMenuPlaceHolder, ETrue );
hgs
parents:
diff changeset
   692
        aMenuPane->SetItemDimmed( ENotViewerRetrieve, ETrue );
hgs
parents:
diff changeset
   693
        aMenuPane->SetItemDimmed( ENotViewerForward, ETrue );
hgs
parents:
diff changeset
   694
        aMenuPane->SetItemDimmed( ENotViewerReplyMenu, ETrue );
hgs
parents:
diff changeset
   695
        if ( iMtm->Entry( ).Entry( ).ReadOnly( ) )
hgs
parents:
diff changeset
   696
            { // Sent ForwReq
hgs
parents:
diff changeset
   697
            aMenuPane->SetItemDimmed( ENotViewerMessageDetails, ETrue );
hgs
parents:
diff changeset
   698
            aMenuPane->SetItemDimmed( ENotViewerSend, ETrue );
hgs
parents:
diff changeset
   699
            aMenuPane->SetItemDimmed( ENotViewerAddRecipient, ETrue );
hgs
parents:
diff changeset
   700
            aMenuPane->SetItemDimmed( ENotViewerCheckNames, ETrue );
hgs
parents:
diff changeset
   701
            }
hgs
parents:
diff changeset
   702
        else
hgs
parents:
diff changeset
   703
            { 
hgs
parents:
diff changeset
   704
            // This is not needed when we are in edit mode  
hgs
parents:
diff changeset
   705
            // Send is always visible
hgs
parents:
diff changeset
   706
            aMenuPane->SetItemDimmed( ENotViewerDelete, ETrue );
hgs
parents:
diff changeset
   707
            // Lets check if we need Send or not
hgs
parents:
diff changeset
   708
            if ( iView  )
hgs
parents:
diff changeset
   709
                {
hgs
parents:
diff changeset
   710
                CMsgAddressControl* toCtrl = 
hgs
parents:
diff changeset
   711
                    static_cast<CMsgAddressControl*>( iView->ControlById( EMsgComponentIdTo ) );
hgs
parents:
diff changeset
   712
                if ( toCtrl && toCtrl->GetRecipientsL()->Count() < 1 )
hgs
parents:
diff changeset
   713
                    {
hgs
parents:
diff changeset
   714
                    // To field empty -> cannot send.
hgs
parents:
diff changeset
   715
                    aMenuPane->SetItemDimmed( ENotViewerCheckNames, ETrue );
hgs
parents:
diff changeset
   716
                    }            
hgs
parents:
diff changeset
   717
                }
hgs
parents:
diff changeset
   718
            }
hgs
parents:
diff changeset
   719
        }
hgs
parents:
diff changeset
   720
    LOGTEXT(_L8("NotViewerAppUi: DynInitOptionsMenuL end"));
hgs
parents:
diff changeset
   721
    }
hgs
parents:
diff changeset
   722
hgs
parents:
diff changeset
   723
// ---------------------------------------------------------
hgs
parents:
diff changeset
   724
// DynInitReplyMenuL
hgs
parents:
diff changeset
   725
// ---------------------------------------------------------
hgs
parents:
diff changeset
   726
//
hgs
parents:
diff changeset
   727
void CNotViewerAppUi::DynInitReplyMenuL( CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
   728
    {
hgs
parents:
diff changeset
   729
    if( iSenderType == EMuiuAddressTypeNone )
hgs
parents:
diff changeset
   730
        {   // If sender type is email, disable SMS
hgs
parents:
diff changeset
   731
        aMenuPane->SetItemDimmed( ENotViewerReplyViaMessage, ETrue );
hgs
parents:
diff changeset
   732
        }
hgs
parents:
diff changeset
   733
hgs
parents:
diff changeset
   734
    if (    ! ( iFlags & ENotViewerAudioMessaging ) 
hgs
parents:
diff changeset
   735
        ||  iFlags & ENotViewerRestrictedReply
hgs
parents:
diff changeset
   736
        ||  iSenderType == EMuiuAddressTypeNone )
hgs
parents:
diff changeset
   737
        {   
hgs
parents:
diff changeset
   738
        aMenuPane->SetItemDimmed( ENotViewerReplyViaAudio, ETrue );
hgs
parents:
diff changeset
   739
        }        
hgs
parents:
diff changeset
   740
hgs
parents:
diff changeset
   741
    if ( iSenderType != EMuiuAddressTypeEmail   ||
hgs
parents:
diff changeset
   742
         iFlags & ENotViewerRestrictedReply     ||
hgs
parents:
diff changeset
   743
         MsvUiServiceUtilitiesInternal::DefaultServiceForMTML(
hgs
parents:
diff changeset
   744
            Document()->Session(),
hgs
parents:
diff changeset
   745
            KSenduiMtmSmtpUid,
hgs
parents:
diff changeset
   746
            ETrue )
hgs
parents:
diff changeset
   747
            == KMsvUnknownServiceIndexEntryId )
hgs
parents:
diff changeset
   748
        {
hgs
parents:
diff changeset
   749
        // "Reply via e-mail" feature
hgs
parents:
diff changeset
   750
        aMenuPane->SetItemDimmed( ENotViewerReplyViaMail, ETrue );
hgs
parents:
diff changeset
   751
        }
hgs
parents:
diff changeset
   752
    }
hgs
parents:
diff changeset
   753
hgs
parents:
diff changeset
   754
// ---------------------------------------------------------
hgs
parents:
diff changeset
   755
// DynInitContextMenuL
hgs
parents:
diff changeset
   756
// ---------------------------------------------------------
hgs
parents:
diff changeset
   757
//
hgs
parents:
diff changeset
   758
void CNotViewerAppUi::DynInitContextMenuL( CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
   759
    {
hgs
parents:
diff changeset
   760
    LOGTEXT(_L8("NotViewerAppUi: DynInitContextMenuL start"));
hgs
parents:
diff changeset
   761
    if (  iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
   762
        {   // Notification
hgs
parents:
diff changeset
   763
        if ( iView  )
hgs
parents:
diff changeset
   764
            {
hgs
parents:
diff changeset
   765
            if( (FocusedControlId( ) == EMsgComponentIdFrom) && ( ( iMtm->Sender( ) ).Length() ) )
hgs
parents:
diff changeset
   766
                {
hgs
parents:
diff changeset
   767
                iFindItemMenu->SetSenderHighlightStatus( ETrue );
hgs
parents:
diff changeset
   768
           	    iFindItemMenu->SetSenderDisplayText( TMmsGenUtils::PureAddress( iMtm->Sender( ) ) );
hgs
parents:
diff changeset
   769
           	    }
hgs
parents:
diff changeset
   770
	        else
hgs
parents:
diff changeset
   771
	     	    {
hgs
parents:
diff changeset
   772
                iFindItemMenu->SetSenderHighlightStatus( EFalse );
hgs
parents:
diff changeset
   773
		        }
hgs
parents:
diff changeset
   774
		    iFindItemMenu->AddItemFindMenuL( 
hgs
parents:
diff changeset
   775
                ( FocusedControlId() == EMsgComponentIdBody ) ? iView->ItemFinder() : 0,
hgs
parents:
diff changeset
   776
    			aMenuPane, 
hgs
parents:
diff changeset
   777
                EFindItemContextMenuPlaceHolder,
hgs
parents:
diff changeset
   778
                iMtm->Sender(),
hgs
parents:
diff changeset
   779
                iAlias && !iRemoteAlias ? ETrue : EFalse, //"Is sender known"
hgs
parents:
diff changeset
   780
    			ETrue );
hgs
parents:
diff changeset
   781
            }
hgs
parents:
diff changeset
   782
hgs
parents:
diff changeset
   783
        if( iSenderType == EMuiuAddressTypeNone )
hgs
parents:
diff changeset
   784
            {   // If sender type is none, disable Reply menu
hgs
parents:
diff changeset
   785
            aMenuPane->SetItemDimmed( ENotViewerReplyMenu, ETrue );
hgs
parents:
diff changeset
   786
            }
hgs
parents:
diff changeset
   787
        aMenuPane->SetItemDimmed( ENotViewerSend, ETrue );
hgs
parents:
diff changeset
   788
        aMenuPane->SetItemDimmed( ENotViewerAddRecipient, ETrue );
hgs
parents:
diff changeset
   789
hgs
parents:
diff changeset
   790
        CNotViewerDocument* doc = Document( );
hgs
parents:
diff changeset
   791
hgs
parents:
diff changeset
   792
        CNotMtmUiData* uiData = &doc->MtmUiDataL( );
hgs
parents:
diff changeset
   793
hgs
parents:
diff changeset
   794
        TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
        // Note: OperationSupportedL returns 0 if operation is supported,
hgs
parents:
diff changeset
   797
        // otherwise it returns some kind of error code
hgs
parents:
diff changeset
   798
hgs
parents:
diff changeset
   799
        if( uiData->OperationSupportedL( KMtmUiFunctionFetchMMS, entry ) )
hgs
parents:
diff changeset
   800
            {
hgs
parents:
diff changeset
   801
            aMenuPane->SetItemDimmed( ENotViewerRetrieve, ETrue );
hgs
parents:
diff changeset
   802
            }
hgs
parents:
diff changeset
   803
        }
hgs
parents:
diff changeset
   804
    else
hgs
parents:
diff changeset
   805
        {   // ForwReq
hgs
parents:
diff changeset
   806
        aMenuPane->SetItemDimmed( ENotViewerRetrieve, ETrue );
hgs
parents:
diff changeset
   807
        aMenuPane->SetItemDimmed( ENotViewerReplyMenu, ETrue );
hgs
parents:
diff changeset
   808
        aMenuPane->SetItemDimmed( EFindItemContextMenuPlaceHolder, ETrue );
hgs
parents:
diff changeset
   809
        if ( iMtm->Entry( ).Entry( ).ReadOnly( ) )
hgs
parents:
diff changeset
   810
            {
hgs
parents:
diff changeset
   811
            aMenuPane->SetItemDimmed( ENotViewerSend, ETrue );
hgs
parents:
diff changeset
   812
            aMenuPane->SetItemDimmed( ENotViewerAddRecipient, ETrue );
hgs
parents:
diff changeset
   813
            }
hgs
parents:
diff changeset
   814
        // else - send key is always available
hgs
parents:
diff changeset
   815
        }
hgs
parents:
diff changeset
   816
    LOGTEXT(_L8("NotViewerAppUi: DynInitContextMenuL end"));
hgs
parents:
diff changeset
   817
    }
hgs
parents:
diff changeset
   818
hgs
parents:
diff changeset
   819
// ---------------------------------------------------------
hgs
parents:
diff changeset
   820
// HandleKeyEventL
hgs
parents:
diff changeset
   821
// ---------------------------------------------------------
hgs
parents:
diff changeset
   822
//
hgs
parents:
diff changeset
   823
TKeyResponse CNotViewerAppUi::HandleKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
hgs
parents:
diff changeset
   824
    {
hgs
parents:
diff changeset
   825
    LOGTEXT(_L8("NotViewerAppUi: HandleKeyEventL start"));
hgs
parents:
diff changeset
   826
    if ( !Document()->IsLaunched() || !iView )
hgs
parents:
diff changeset
   827
        {
hgs
parents:
diff changeset
   828
        return EKeyWasNotConsumed;
hgs
parents:
diff changeset
   829
        }
hgs
parents:
diff changeset
   830
    if ( aType != EEventKey )
hgs
parents:
diff changeset
   831
        {
hgs
parents:
diff changeset
   832
        return EKeyWasNotConsumed;
hgs
parents:
diff changeset
   833
        }
hgs
parents:
diff changeset
   834
    TMsvEntry msvEntry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
   835
hgs
parents:
diff changeset
   836
    switch ( aKeyEvent.iCode )
hgs
parents:
diff changeset
   837
        {
hgs
parents:
diff changeset
   838
        case EKeyBackspace:
hgs
parents:
diff changeset
   839
            {
hgs
parents:
diff changeset
   840
            if ( msvEntry.ReadOnly( ) || iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
   841
                { // We have either a notification or sent FR open
hgs
parents:
diff changeset
   842
                CNotViewerDocument* doc = Document( );
hgs
parents:
diff changeset
   843
                CNotMtmUiData* uiData = &doc->MtmUiDataL( );
hgs
parents:
diff changeset
   844
                TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
   845
                if( !uiData->OperationSupportedL( KMtmUiFunctionDeleteMessage, entry ) )
hgs
parents:
diff changeset
   846
                    {
hgs
parents:
diff changeset
   847
                    DeleteNotificationL( );
hgs
parents:
diff changeset
   848
                    }
hgs
parents:
diff changeset
   849
                // We can consume this because Delete is the only possible function here
hgs
parents:
diff changeset
   850
                return EKeyWasConsumed;
hgs
parents:
diff changeset
   851
                }
hgs
parents:
diff changeset
   852
            // else we need to be able to delete characters in To field
hgs
parents:
diff changeset
   853
            break;
hgs
parents:
diff changeset
   854
            }
hgs
parents:
diff changeset
   855
        case EKeyRightArrow:
hgs
parents:
diff changeset
   856
            {
hgs
parents:
diff changeset
   857
            if ( msvEntry.ReadOnly( ) || iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
   858
                { // We have either a notification or sent FR open
hgs
parents:
diff changeset
   859
                if(     iNaviDecorator
hgs
parents:
diff changeset
   860
                    &&  IsNextMessageAvailableL( ETrue ) )
hgs
parents:
diff changeset
   861
                    {
hgs
parents:
diff changeset
   862
                    NextMessageL( ETrue );
hgs
parents:
diff changeset
   863
                    }
hgs
parents:
diff changeset
   864
                // We can consume this because Next msg is the only possible function here
hgs
parents:
diff changeset
   865
                return EKeyWasConsumed;
hgs
parents:
diff changeset
   866
                }
hgs
parents:
diff changeset
   867
            // else we need to be able to move inside To field
hgs
parents:
diff changeset
   868
            break;
hgs
parents:
diff changeset
   869
            }
hgs
parents:
diff changeset
   870
        case EKeyLeftArrow:
hgs
parents:
diff changeset
   871
            {
hgs
parents:
diff changeset
   872
            if ( msvEntry.ReadOnly( ) || iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
   873
                { // We have either a notification or sent FR open
hgs
parents:
diff changeset
   874
                if(     iNaviDecorator
hgs
parents:
diff changeset
   875
                    &&  IsNextMessageAvailableL( EFalse ) )
hgs
parents:
diff changeset
   876
                    {
hgs
parents:
diff changeset
   877
                    NextMessageL( EFalse );
hgs
parents:
diff changeset
   878
                    }
hgs
parents:
diff changeset
   879
                // We can consume this because Next msg is the only possible function here
hgs
parents:
diff changeset
   880
                return EKeyWasConsumed;
hgs
parents:
diff changeset
   881
                }
hgs
parents:
diff changeset
   882
            // else we need to be able to move inside To field
hgs
parents:
diff changeset
   883
            break;
hgs
parents:
diff changeset
   884
            }
hgs
parents:
diff changeset
   885
    
hgs
parents:
diff changeset
   886
        case EKeyDevice3:       //Selection key
hgs
parents:
diff changeset
   887
        case EKeyEnter:         //Enter Key
hgs
parents:
diff changeset
   888
            {
hgs
parents:
diff changeset
   889
            CMsgExpandableControl* ctrl = NULL;
hgs
parents:
diff changeset
   890
            TBool checkHighlight = EFalse;
hgs
parents:
diff changeset
   891
            
hgs
parents:
diff changeset
   892
            if( iView->FocusedControl() )
hgs
parents:
diff changeset
   893
                {
hgs
parents:
diff changeset
   894
                ctrl = static_cast<CMsgExpandableControl*>( iView->FocusedControl() );
hgs
parents:
diff changeset
   895
                if ( ctrl )
hgs
parents:
diff changeset
   896
                	{
hgs
parents:
diff changeset
   897
                	if ( ctrl->ControlType() == EMsgAddressControl
hgs
parents:
diff changeset
   898
                        && !ctrl->Editor().SelectionLength()  ) 
hgs
parents:
diff changeset
   899
                    {
hgs
parents:
diff changeset
   900
                    checkHighlight = ETrue;
hgs
parents:
diff changeset
   901
                    }
hgs
parents:
diff changeset
   902
                	else if ( ctrl->ControlType() == EMsgBodyControl )
hgs
parents:
diff changeset
   903
                    {       
hgs
parents:
diff changeset
   904
                    CItemFinder* itemFinder = iView->ItemFinder();
hgs
parents:
diff changeset
   905
                    if ( FocusedControlId() == EMsgComponentIdBody && itemFinder
hgs
parents:
diff changeset
   906
                            && !itemFinder->CurrentSelection().Length() )
hgs
parents:
diff changeset
   907
                        {                                                              
hgs
parents:
diff changeset
   908
                        checkHighlight = ETrue;
hgs
parents:
diff changeset
   909
                        }
hgs
parents:
diff changeset
   910
                    }
hgs
parents:
diff changeset
   911
                  }
hgs
parents:
diff changeset
   912
                }
hgs
parents:
diff changeset
   913
            if ( ctrl && checkHighlight )
hgs
parents:
diff changeset
   914
                {
hgs
parents:
diff changeset
   915
                // Check if highlight needs to be restored to editor,
hgs
parents:
diff changeset
   916
                // address/body editor offerkeyevent will handle it
hgs
parents:
diff changeset
   917
                if ( ctrl->Editor().OfferKeyEventL( aKeyEvent, aType ) 
hgs
parents:
diff changeset
   918
                        == EKeyWasConsumed )
hgs
parents:
diff changeset
   919
                    {
hgs
parents:
diff changeset
   920
                    // Highlight was restored, just return, no cs menu needed
hgs
parents:
diff changeset
   921
                    return EKeyWasConsumed;
hgs
parents:
diff changeset
   922
                    }
hgs
parents:
diff changeset
   923
                } 
hgs
parents:
diff changeset
   924
  
hgs
parents:
diff changeset
   925
            if ( DoSelectionKeyL( ) )
hgs
parents:
diff changeset
   926
                {
hgs
parents:
diff changeset
   927
                return EKeyWasConsumed;
hgs
parents:
diff changeset
   928
                }
hgs
parents:
diff changeset
   929
            break;  //Lint e527
hgs
parents:
diff changeset
   930
            }
hgs
parents:
diff changeset
   931
        case EKeyYes:           //Send key
hgs
parents:
diff changeset
   932
            {
hgs
parents:
diff changeset
   933
            DoHandleSendKeyL( );
hgs
parents:
diff changeset
   934
            return EKeyWasConsumed;           
hgs
parents:
diff changeset
   935
            }
hgs
parents:
diff changeset
   936
        default:
hgs
parents:
diff changeset
   937
            break;
hgs
parents:
diff changeset
   938
        }
hgs
parents:
diff changeset
   939
    return iView->OfferKeyEventL( aKeyEvent, aType );
hgs
parents:
diff changeset
   940
    }
hgs
parents:
diff changeset
   941
hgs
parents:
diff changeset
   942
// ---------------------------------------------------------
hgs
parents:
diff changeset
   943
// HandleCommandL
hgs
parents:
diff changeset
   944
// ---------------------------------------------------------
hgs
parents:
diff changeset
   945
//
hgs
parents:
diff changeset
   946
void CNotViewerAppUi::HandleCommandL( TInt aCommand )
hgs
parents:
diff changeset
   947
    {
hgs
parents:
diff changeset
   948
    LOGTEXT(_L8("NotViewerAppUi: HandleCommandL start"));
hgs
parents:
diff changeset
   949
    if ( aCommand != EEikCmdExit &&
hgs
parents:
diff changeset
   950
        ! Document()->IsLaunched() )
hgs
parents:
diff changeset
   951
        {
hgs
parents:
diff changeset
   952
        return;
hgs
parents:
diff changeset
   953
        }
hgs
parents:
diff changeset
   954
    if ( iFindItemMenu && iFindItemMenu->CommandIsValidL( aCommand ) )
hgs
parents:
diff changeset
   955
        {
hgs
parents:
diff changeset
   956
        iFindItemMenu->HandleItemFinderCommandL( aCommand );
hgs
parents:
diff changeset
   957
        return;
hgs
parents:
diff changeset
   958
        }
hgs
parents:
diff changeset
   959
    switch ( aCommand )
hgs
parents:
diff changeset
   960
        {
hgs
parents:
diff changeset
   961
        case ENotViewerRetrieve:
hgs
parents:
diff changeset
   962
            {
hgs
parents:
diff changeset
   963
            FetchL( );
hgs
parents:
diff changeset
   964
            break;
hgs
parents:
diff changeset
   965
            }
hgs
parents:
diff changeset
   966
        case ENotViewerForward:
hgs
parents:
diff changeset
   967
            {
hgs
parents:
diff changeset
   968
            DoForwardL( );
hgs
parents:
diff changeset
   969
            break;
hgs
parents:
diff changeset
   970
            }
hgs
parents:
diff changeset
   971
        case ENotViewerSend:
hgs
parents:
diff changeset
   972
            {
hgs
parents:
diff changeset
   973
            DoHandleSendKeyL( );
hgs
parents:
diff changeset
   974
            break;
hgs
parents:
diff changeset
   975
            }
hgs
parents:
diff changeset
   976
        case ENotViewerReplyViaMessage:
hgs
parents:
diff changeset
   977
        case ENotViewerReplyViaAudio:
hgs
parents:
diff changeset
   978
        case ENotViewerReplyViaMail:
hgs
parents:
diff changeset
   979
            {
hgs
parents:
diff changeset
   980
            UniReplyL( aCommand );
hgs
parents:
diff changeset
   981
            break;
hgs
parents:
diff changeset
   982
            }
hgs
parents:
diff changeset
   983
        case ENotViewerAddRecipient:
hgs
parents:
diff changeset
   984
            {
hgs
parents:
diff changeset
   985
            AddRecipientL( );
hgs
parents:
diff changeset
   986
            break;
hgs
parents:
diff changeset
   987
            }
hgs
parents:
diff changeset
   988
        case ENotViewerCheckNames:
hgs
parents:
diff changeset
   989
            {
hgs
parents:
diff changeset
   990
            CheckNamesL( );
hgs
parents:
diff changeset
   991
            break;
hgs
parents:
diff changeset
   992
            }
hgs
parents:
diff changeset
   993
        case ENotViewerDelete:
hgs
parents:
diff changeset
   994
            {
hgs
parents:
diff changeset
   995
            DeleteNotificationL( );
hgs
parents:
diff changeset
   996
            break;
hgs
parents:
diff changeset
   997
            }
hgs
parents:
diff changeset
   998
        case ENotViewerMessageDetails:
hgs
parents:
diff changeset
   999
            {
hgs
parents:
diff changeset
  1000
            MessageDetailsL( );
hgs
parents:
diff changeset
  1001
            break;
hgs
parents:
diff changeset
  1002
            }
hgs
parents:
diff changeset
  1003
        case EMsgDispSizeAutomatic:
hgs
parents:
diff changeset
  1004
        case EMsgDispSizeLarge:
hgs
parents:
diff changeset
  1005
        case EMsgDispSizeNormal:
hgs
parents:
diff changeset
  1006
        case EMsgDispSizeSmall:
hgs
parents:
diff changeset
  1007
            HandleLocalZoomChangeL( (TMsgCommonCommands)aCommand );
hgs
parents:
diff changeset
  1008
            break;
hgs
parents:
diff changeset
  1009
        case EAknCmdHelp:
hgs
parents:
diff changeset
  1010
            {
hgs
parents:
diff changeset
  1011
            LaunchHelpL( );
hgs
parents:
diff changeset
  1012
            break;
hgs
parents:
diff changeset
  1013
            }
hgs
parents:
diff changeset
  1014
        case EEikCmdExit:
hgs
parents:
diff changeset
  1015
            iExitMode = MApaEmbeddedDocObserver::TExitMode(CMsgEmbeddedEditorWatchingOperation::EMsgExternalExit);        
hgs
parents:
diff changeset
  1016
            // Let it flow thru..
hgs
parents:
diff changeset
  1017
        case EAknSoftkeyBack:
hgs
parents:
diff changeset
  1018
        case EAknSoftkeyClose:
hgs
parents:
diff changeset
  1019
        case EAknSoftkeyCancel:
hgs
parents:
diff changeset
  1020
            // system exit
hgs
parents:
diff changeset
  1021
            Exit( aCommand );
hgs
parents:
diff changeset
  1022
            break;
hgs
parents:
diff changeset
  1023
        default:
hgs
parents:
diff changeset
  1024
            break;
hgs
parents:
diff changeset
  1025
        }
hgs
parents:
diff changeset
  1026
    LOGTEXT(_L8("NotViewerAppUi: HandleCommandL end"));
hgs
parents:
diff changeset
  1027
    }
hgs
parents:
diff changeset
  1028
hgs
parents:
diff changeset
  1029
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1030
// DoSelectionKeyL
hgs
parents:
diff changeset
  1031
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1032
TBool CNotViewerAppUi::DoSelectionKeyL()
hgs
parents:
diff changeset
  1033
    {
hgs
parents:
diff changeset
  1034
    if ( iView )
hgs
parents:
diff changeset
  1035
        {
hgs
parents:
diff changeset
  1036
        CMsgBaseControl* ctrl = iView->FocusedControl();
hgs
parents:
diff changeset
  1037
hgs
parents:
diff changeset
  1038
        if ( ctrl )
hgs
parents:
diff changeset
  1039
            {
hgs
parents:
diff changeset
  1040
            switch ( FocusedControlId() )
hgs
parents:
diff changeset
  1041
                {
hgs
parents:
diff changeset
  1042
                case EMsgComponentIdTo:
hgs
parents:
diff changeset
  1043
                    {
hgs
parents:
diff changeset
  1044
                    if( iFlags & ENotViewerIsNotification ) 
hgs
parents:
diff changeset
  1045
                        {   // We have a notification, we should handle recipients
hgs
parents:
diff changeset
  1046
                        CMsgAddressControl* to = AddressControl( );
hgs
parents:
diff changeset
  1047
                        // Check is there any recipients in address ctrl
hgs
parents:
diff changeset
  1048
                        TBool modified = EFalse;
hgs
parents:
diff changeset
  1049
                        if ( to->GetRecipientsL()->Count() )
hgs
parents:
diff changeset
  1050
                            {
hgs
parents:
diff changeset
  1051
                            // Recipients found. Verify addresses.
hgs
parents:
diff changeset
  1052
                            if ( !VerifyAddressesL( modified ) )
hgs
parents:
diff changeset
  1053
                                {
hgs
parents:
diff changeset
  1054
                                // Illegal address found.
hgs
parents:
diff changeset
  1055
                                modified = ETrue;
hgs
parents:
diff changeset
  1056
                                }
hgs
parents:
diff changeset
  1057
                            }
hgs
parents:
diff changeset
  1058
                        if ( !modified )//else
hgs
parents:
diff changeset
  1059
                            {
hgs
parents:
diff changeset
  1060
                            // Nothing changed on the UI. Open PhoneBook.
hgs
parents:
diff changeset
  1061
                            AddRecipientL();
hgs
parents:
diff changeset
  1062
                            }
hgs
parents:
diff changeset
  1063
                        break; // break only if notification
hgs
parents:
diff changeset
  1064
                        }
hgs
parents:
diff changeset
  1065
                    else // If we are in Forward Request, it's ok to go down to menubar
hgs
parents:
diff changeset
  1066
                        {
hgs
parents:
diff changeset
  1067
                        return EFalse;
hgs
parents:
diff changeset
  1068
                        }
hgs
parents:
diff changeset
  1069
                    }
hgs
parents:
diff changeset
  1070
                case EMsgComponentIdFrom:
hgs
parents:
diff changeset
  1071
                case EMsgComponentIdBody:
hgs
parents:
diff changeset
  1072
                    {
hgs
parents:
diff changeset
  1073
                    MenuBar()->SetMenuTitleResourceId( R_NOTVIEWER_SELECTIONMENUBAR );
hgs
parents:
diff changeset
  1074
                    MenuBar()->SetMenuType(CEikMenuBar::EMenuContext);
hgs
parents:
diff changeset
  1075
                    TRAPD( err, MenuBar()->TryDisplayMenuBarL() );
hgs
parents:
diff changeset
  1076
                    MenuBar()->SetMenuTitleResourceId( R_NOTVIEWER_MENU );
hgs
parents:
diff changeset
  1077
                    MenuBar()->SetMenuType(CEikMenuBar::EMenuOptions);
hgs
parents:
diff changeset
  1078
                    User::LeaveIfError( err );
hgs
parents:
diff changeset
  1079
                    }
hgs
parents:
diff changeset
  1080
                    break;
hgs
parents:
diff changeset
  1081
                            
hgs
parents:
diff changeset
  1082
                default:
hgs
parents:
diff changeset
  1083
                    break;
hgs
parents:
diff changeset
  1084
                }
hgs
parents:
diff changeset
  1085
            }
hgs
parents:
diff changeset
  1086
        }
hgs
parents:
diff changeset
  1087
    return ETrue;
hgs
parents:
diff changeset
  1088
    }
hgs
parents:
diff changeset
  1089
hgs
parents:
diff changeset
  1090
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1091
// DoHandleSendKeyL
hgs
parents:
diff changeset
  1092
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1093
//
hgs
parents:
diff changeset
  1094
void CNotViewerAppUi::DoHandleSendKeyL()
hgs
parents:
diff changeset
  1095
    {
hgs
parents:
diff changeset
  1096
    if( iFlags & ENotViewerIsNotification ) 
hgs
parents:
diff changeset
  1097
        {   // We have a notification, we should call to sender
hgs
parents:
diff changeset
  1098
        CallToNumberL( );
hgs
parents:
diff changeset
  1099
        }
hgs
parents:
diff changeset
  1100
    else if ( !iMtm->Entry( ).Entry( ).ReadOnly( ) )                                 
hgs
parents:
diff changeset
  1101
        {   // We are not-readonly Forward Request -> Send is possible
hgs
parents:
diff changeset
  1102
hgs
parents:
diff changeset
  1103
        // Disable dialer
hgs
parents:
diff changeset
  1104
        iAvkonAppUi->SetKeyEventFlags( 
hgs
parents:
diff changeset
  1105
              CAknAppUiBase::EDisableSendKeyShort | 
hgs
parents:
diff changeset
  1106
              CAknAppUiBase::EDisableSendKeyLong );
hgs
parents:
diff changeset
  1107
              
hgs
parents:
diff changeset
  1108
        // CallCreationKey: Send message if recipients.
hgs
parents:
diff changeset
  1109
        //                  Otherwise fetch recipients
hgs
parents:
diff changeset
  1110
        CMsgAddressControl* to = AddressControl();
hgs
parents:
diff changeset
  1111
hgs
parents:
diff changeset
  1112
        if ( to->GetRecipientsL()->Count() > 0 )
hgs
parents:
diff changeset
  1113
            {
hgs
parents:
diff changeset
  1114
            // has addresses -> Send
hgs
parents:
diff changeset
  1115
            SendL();
hgs
parents:
diff changeset
  1116
            }
hgs
parents:
diff changeset
  1117
        else
hgs
parents:
diff changeset
  1118
            {
hgs
parents:
diff changeset
  1119
            AddRecipientL();
hgs
parents:
diff changeset
  1120
            }
hgs
parents:
diff changeset
  1121
        }
hgs
parents:
diff changeset
  1122
    }
hgs
parents:
diff changeset
  1123
hgs
parents:
diff changeset
  1124
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1125
// FetchL
hgs
parents:
diff changeset
  1126
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1127
//
hgs
parents:
diff changeset
  1128
void CNotViewerAppUi::FetchL( )
hgs
parents:
diff changeset
  1129
    {
hgs
parents:
diff changeset
  1130
    LOGTEXT(_L8("NotViewerAppUi: Fetch start"));
hgs
parents:
diff changeset
  1131
    if( !(iFlags & ENotViewerIsNotification) )
hgs
parents:
diff changeset
  1132
        {   // We are in forward request
hgs
parents:
diff changeset
  1133
        return;
hgs
parents:
diff changeset
  1134
        }
hgs
parents:
diff changeset
  1135
hgs
parents:
diff changeset
  1136
    if(     iFlags & ENotViewerOffline 
hgs
parents:
diff changeset
  1137
        &&  MsvUiServiceUtilitiesInternal::IsPhoneOfflineL() )
hgs
parents:
diff changeset
  1138
        {   // We are in offline at the moment -> Infonote & exit
hgs
parents:
diff changeset
  1139
        ShowInformationNoteL( R_NOTVIEWER_OFFLINE_NOT_POSSIBLE, EFalse );
hgs
parents:
diff changeset
  1140
		DoDelayedExitL( KDelayedExitDelay );
hgs
parents:
diff changeset
  1141
		return;
hgs
parents:
diff changeset
  1142
        }
hgs
parents:
diff changeset
  1143
hgs
parents:
diff changeset
  1144
    if( !CheckAPSettingsL( ) )
hgs
parents:
diff changeset
  1145
        {
hgs
parents:
diff changeset
  1146
        return;
hgs
parents:
diff changeset
  1147
        }
hgs
parents:
diff changeset
  1148
    TTime currentTime;
hgs
parents:
diff changeset
  1149
    currentTime.HomeTime( );
hgs
parents:
diff changeset
  1150
    TTime expiryTime = iMtm->ExpiryDate( );
hgs
parents:
diff changeset
  1151
	TLocale locale;
hgs
parents:
diff changeset
  1152
    expiryTime += locale.UniversalTimeOffset();
hgs
parents:
diff changeset
  1153
	if (locale.QueryHomeHasDaylightSavingOn())          
hgs
parents:
diff changeset
  1154
		{
hgs
parents:
diff changeset
  1155
		TTimeIntervalHours daylightSaving(1);          
hgs
parents:
diff changeset
  1156
		expiryTime += daylightSaving;
hgs
parents:
diff changeset
  1157
		}
hgs
parents:
diff changeset
  1158
hgs
parents:
diff changeset
  1159
    if( currentTime > expiryTime )
hgs
parents:
diff changeset
  1160
        {   // Message is expired
hgs
parents:
diff changeset
  1161
        if ( !ShowConfirmationQueryL( R_NOTVIEWER_QUEST_MSG_EXPIRED ) )
hgs
parents:
diff changeset
  1162
            {   // User did not want to fetch expired message
hgs
parents:
diff changeset
  1163
            return;
hgs
parents:
diff changeset
  1164
            }
hgs
parents:
diff changeset
  1165
        }
hgs
parents:
diff changeset
  1166
hgs
parents:
diff changeset
  1167
    CAknInputBlock* abs = CAknInputBlock::NewLC( );  
hgs
parents:
diff changeset
  1168
hgs
parents:
diff changeset
  1169
    ShowInformationNoteL( R_NOTVIEWER_RETRIEVING_MESSAGE, EFalse );
hgs
parents:
diff changeset
  1170
hgs
parents:
diff changeset
  1171
    TMsvId entryId = iMtm->Entry( ).Entry( ).Id( );
hgs
parents:
diff changeset
  1172
    CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
hgs
parents:
diff changeset
  1173
hgs
parents:
diff changeset
  1174
    CMsvEntrySelection* sel = new ( ELeave ) CMsvEntrySelection;
hgs
parents:
diff changeset
  1175
    CleanupStack::PushL( sel );
hgs
parents:
diff changeset
  1176
	sel->AppendL( entryId );    
hgs
parents:
diff changeset
  1177
    
hgs
parents:
diff changeset
  1178
    CMsvOperation* op = iMtm->FetchMessagesL( *sel, wait->iStatus );
hgs
parents:
diff changeset
  1179
hgs
parents:
diff changeset
  1180
    if( !op )
hgs
parents:
diff changeset
  1181
        {  
hgs
parents:
diff changeset
  1182
        CleanupStack::PopAndDestroy( sel ); // selection
hgs
parents:
diff changeset
  1183
        CleanupStack::PopAndDestroy( wait ); // wait
hgs
parents:
diff changeset
  1184
        CleanupStack::PopAndDestroy( abs ); // abs
hgs
parents:
diff changeset
  1185
        return; 
hgs
parents:
diff changeset
  1186
        }
hgs
parents:
diff changeset
  1187
hgs
parents:
diff changeset
  1188
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  1189
    wait->Start();
hgs
parents:
diff changeset
  1190
hgs
parents:
diff changeset
  1191
    // Lets ignore the return value of wait
hgs
parents:
diff changeset
  1192
hgs
parents:
diff changeset
  1193
    CleanupStack::PopAndDestroy( op ); // op 
hgs
parents:
diff changeset
  1194
    CleanupStack::PopAndDestroy( sel ); // selection
hgs
parents:
diff changeset
  1195
    CleanupStack::PopAndDestroy( wait ); // wait
hgs
parents:
diff changeset
  1196
    CleanupStack::PopAndDestroy( abs ); // abs
hgs
parents:
diff changeset
  1197
    LOGTEXT(_L8("NotViewerAppUi: Fetch end"));
hgs
parents:
diff changeset
  1198
    // Let information note time to exit
hgs
parents:
diff changeset
  1199
    DoDelayedExitL( KDelayedExitDelay );
hgs
parents:
diff changeset
  1200
    }
hgs
parents:
diff changeset
  1201
hgs
parents:
diff changeset
  1202
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1203
// DoForwardL
hgs
parents:
diff changeset
  1204
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1205
//
hgs
parents:
diff changeset
  1206
void CNotViewerAppUi::DoForwardL( )
hgs
parents:
diff changeset
  1207
    {
hgs
parents:
diff changeset
  1208
    LOGTEXT(_L8("NotViewerAppUi: ForwardL start"));
hgs
parents:
diff changeset
  1209
    if( !(iFlags & ENotViewerIsNotification) )
hgs
parents:
diff changeset
  1210
        {   // We are in forward request
hgs
parents:
diff changeset
  1211
        return;
hgs
parents:
diff changeset
  1212
        }
hgs
parents:
diff changeset
  1213
hgs
parents:
diff changeset
  1214
    // Lets check the disk space
hgs
parents:
diff changeset
  1215
    if ( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL(
hgs
parents:
diff changeset
  1216
        Document()->Session( ),
hgs
parents:
diff changeset
  1217
        KReplyToSenderSize ) )
hgs
parents:
diff changeset
  1218
        {
hgs
parents:
diff changeset
  1219
        User::Leave( KErrDiskFull );
hgs
parents:
diff changeset
  1220
        }
hgs
parents:
diff changeset
  1221
hgs
parents:
diff changeset
  1222
    if( !CheckAPSettingsL( ) )
hgs
parents:
diff changeset
  1223
        {
hgs
parents:
diff changeset
  1224
        return;
hgs
parents:
diff changeset
  1225
        }
hgs
parents:
diff changeset
  1226
hgs
parents:
diff changeset
  1227
    TTime currentTime;
hgs
parents:
diff changeset
  1228
    currentTime.HomeTime( );
hgs
parents:
diff changeset
  1229
    TTime expiryTime = iMtm->ExpiryDate( );
hgs
parents:
diff changeset
  1230
	TLocale locale;
hgs
parents:
diff changeset
  1231
    expiryTime += locale.UniversalTimeOffset();
hgs
parents:
diff changeset
  1232
	if (locale.QueryHomeHasDaylightSavingOn())          
hgs
parents:
diff changeset
  1233
		{
hgs
parents:
diff changeset
  1234
		TTimeIntervalHours daylightSaving(1);          
hgs
parents:
diff changeset
  1235
		expiryTime += daylightSaving;
hgs
parents:
diff changeset
  1236
		}
hgs
parents:
diff changeset
  1237
hgs
parents:
diff changeset
  1238
    if( currentTime > expiryTime )
hgs
parents:
diff changeset
  1239
        {   // Message is expired
hgs
parents:
diff changeset
  1240
        if ( !ShowConfirmationQueryL( R_NOTVIEWER_QUEST_MSG_EXPIRED ) )
hgs
parents:
diff changeset
  1241
            {   
hgs
parents:
diff changeset
  1242
            // User did not want to forward expired message
hgs
parents:
diff changeset
  1243
            return;
hgs
parents:
diff changeset
  1244
            }
hgs
parents:
diff changeset
  1245
        }
hgs
parents:
diff changeset
  1246
    TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
  1247
    if( ! ( entry.iMtmData2 & KMmsStoredInMMBox ) )
hgs
parents:
diff changeset
  1248
        {   // Query, if multiple forward is not possible
hgs
parents:
diff changeset
  1249
        if ( !ShowConfirmationQueryL( R_NOTVIEWER_QUEST_FORWARD_NOTIF ) )
hgs
parents:
diff changeset
  1250
            {   
hgs
parents:
diff changeset
  1251
            // User did not want forward message, as it cannot not be fetched to the phone after that
hgs
parents:
diff changeset
  1252
            return;
hgs
parents:
diff changeset
  1253
            }
hgs
parents:
diff changeset
  1254
        }
hgs
parents:
diff changeset
  1255
hgs
parents:
diff changeset
  1256
    TRAPD ( error,
hgs
parents:
diff changeset
  1257
        {
hgs
parents:
diff changeset
  1258
        ForwardL( Document()->DefaultMsgFolder() );  //Draft
hgs
parents:
diff changeset
  1259
        } ); //end TRAP
hgs
parents:
diff changeset
  1260
    if ( error )
hgs
parents:
diff changeset
  1261
        {
hgs
parents:
diff changeset
  1262
        User::Leave( error );
hgs
parents:
diff changeset
  1263
        }
hgs
parents:
diff changeset
  1264
    iMtm->Entry( ).SetEntryL( iMsgId );
hgs
parents:
diff changeset
  1265
    TRAP_IGNORE( iMtm->LoadMessageL( ) );
hgs
parents:
diff changeset
  1266
    EntryChangedL( );
hgs
parents:
diff changeset
  1267
    LOGTEXT(_L8("NotViewerAppUi: ForwardL end"));
hgs
parents:
diff changeset
  1268
    }
hgs
parents:
diff changeset
  1269
hgs
parents:
diff changeset
  1270
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1271
// SendL
hgs
parents:
diff changeset
  1272
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1273
//
hgs
parents:
diff changeset
  1274
void CNotViewerAppUi::SendL( )
hgs
parents:
diff changeset
  1275
    {
hgs
parents:
diff changeset
  1276
    LOGTEXT(_L8("NotViewerAppUi: SendL start"));
hgs
parents:
diff changeset
  1277
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  1278
        {   // We are in notification
hgs
parents:
diff changeset
  1279
        return;
hgs
parents:
diff changeset
  1280
        }
hgs
parents:
diff changeset
  1281
    TBool dummy;
hgs
parents:
diff changeset
  1282
    if ( !VerifyAddressesL( dummy ) )
hgs
parents:
diff changeset
  1283
        {
hgs
parents:
diff changeset
  1284
        return;
hgs
parents:
diff changeset
  1285
        }
hgs
parents:
diff changeset
  1286
hgs
parents:
diff changeset
  1287
    // For eating key presses
hgs
parents:
diff changeset
  1288
    CAknInputBlock* abs = CAknInputBlock::NewLC( );
hgs
parents:
diff changeset
  1289
hgs
parents:
diff changeset
  1290
    DoSaveL( );
hgs
parents:
diff changeset
  1291
hgs
parents:
diff changeset
  1292
    CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
hgs
parents:
diff changeset
  1293
    CMsvOperation* op = iMtm->SendL( wait->iStatus );
hgs
parents:
diff changeset
  1294
hgs
parents:
diff changeset
  1295
    if( !op )
hgs
parents:
diff changeset
  1296
        {
hgs
parents:
diff changeset
  1297
        CleanupStack::PopAndDestroy( wait );
hgs
parents:
diff changeset
  1298
        CleanupStack::PopAndDestroy( abs ); 
hgs
parents:
diff changeset
  1299
        return;
hgs
parents:
diff changeset
  1300
        }
hgs
parents:
diff changeset
  1301
hgs
parents:
diff changeset
  1302
    CleanupStack::PushL( op );
hgs
parents:
diff changeset
  1303
    wait->Start();
hgs
parents:
diff changeset
  1304
   
hgs
parents:
diff changeset
  1305
    // Let's ignore the return value of wait
hgs
parents:
diff changeset
  1306
hgs
parents:
diff changeset
  1307
    CleanupStack::PopAndDestroy( 2 ); // op, wait
hgs
parents:
diff changeset
  1308
hgs
parents:
diff changeset
  1309
    CleanupStack::PopAndDestroy( abs ); 
hgs
parents:
diff changeset
  1310
    if(     iFlags & ENotViewerOffline 
hgs
parents:
diff changeset
  1311
        &&  MsvUiServiceUtilitiesInternal::IsPhoneOfflineL() )
hgs
parents:
diff changeset
  1312
        {   // We are in offline at the moment -> Infonote
hgs
parents:
diff changeset
  1313
        ShowInformationNoteL( R_NOTVIEWER_SAVED_OUTBOX, EFalse );
hgs
parents:
diff changeset
  1314
        DoDelayedExitL( KDelayedExitDelay  );
hgs
parents:
diff changeset
  1315
        LOGTEXT(_L8("NotViewerAppUi: Offline SendL end"));
hgs
parents:
diff changeset
  1316
        return;
hgs
parents:
diff changeset
  1317
        }
hgs
parents:
diff changeset
  1318
hgs
parents:
diff changeset
  1319
    LOGTEXT(_L8("NotViewerAppUi: SendL end"));
hgs
parents:
diff changeset
  1320
    Exit( EAknSoftkeyBack );
hgs
parents:
diff changeset
  1321
    }
hgs
parents:
diff changeset
  1322
hgs
parents:
diff changeset
  1323
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1324
// UniReplyL
hgs
parents:
diff changeset
  1325
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1326
//
hgs
parents:
diff changeset
  1327
void CNotViewerAppUi::UniReplyL( TInt aCommand )
hgs
parents:
diff changeset
  1328
    {
hgs
parents:
diff changeset
  1329
    LOGTEXT(_L8("NotViewerAppUi: ReplyL start"));
hgs
parents:
diff changeset
  1330
    if( !(iFlags & ENotViewerIsNotification) )
hgs
parents:
diff changeset
  1331
        {   // We are in forward request
hgs
parents:
diff changeset
  1332
        return;
hgs
parents:
diff changeset
  1333
        }
hgs
parents:
diff changeset
  1334
hgs
parents:
diff changeset
  1335
    // Lets check the disk space
hgs
parents:
diff changeset
  1336
    if ( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL(
hgs
parents:
diff changeset
  1337
        Document()->Session( ),
hgs
parents:
diff changeset
  1338
        KReplyToSenderSize ) )
hgs
parents:
diff changeset
  1339
        {
hgs
parents:
diff changeset
  1340
        User::Leave( KErrDiskFull );
hgs
parents:
diff changeset
  1341
        }
hgs
parents:
diff changeset
  1342
hgs
parents:
diff changeset
  1343
    CMessageData* msgData = CMessageData::NewLC();
hgs
parents:
diff changeset
  1344
hgs
parents:
diff changeset
  1345
    const TPtrC sender = iMtm->Sender();
hgs
parents:
diff changeset
  1346
    
hgs
parents:
diff changeset
  1347
    if ( sender != KNullDesC() )
hgs
parents:
diff changeset
  1348
        {
hgs
parents:
diff changeset
  1349
		TMsvEntry entry = iMtm->Entry().Entry();
hgs
parents:
diff changeset
  1350
hgs
parents:
diff changeset
  1351
	    if ( sender.Compare( entry.iDetails ) )
hgs
parents:
diff changeset
  1352
	        {
hgs
parents:
diff changeset
  1353
	        msgData->AppendToAddressL( TMmsGenUtils::PureAddress( sender ), *iAlias );
hgs
parents:
diff changeset
  1354
	        }
hgs
parents:
diff changeset
  1355
	    else
hgs
parents:
diff changeset
  1356
	        {
hgs
parents:
diff changeset
  1357
		    msgData->AppendToAddressL( 	TMmsGenUtils::PureAddress( sender ), 
hgs
parents:
diff changeset
  1358
		        						TMmsGenUtils::Alias( sender ) );
hgs
parents:
diff changeset
  1359
	        }
hgs
parents:
diff changeset
  1360
        }
hgs
parents:
diff changeset
  1361
        
hgs
parents:
diff changeset
  1362
    // audio message has not subject field
hgs
parents:
diff changeset
  1363
    if( aCommand != ENotViewerReplyViaAudio ) 
hgs
parents:
diff changeset
  1364
        {
hgs
parents:
diff changeset
  1365
        HBufC* prefixSubject = CreateSubjectPrefixStringL( iMtm->SubjectL(), ETrue );
hgs
parents:
diff changeset
  1366
        CleanupStack::PushL( prefixSubject ); 
hgs
parents:
diff changeset
  1367
        if ( prefixSubject )
hgs
parents:
diff changeset
  1368
            {
hgs
parents:
diff changeset
  1369
            msgData->SetSubjectL( prefixSubject );
hgs
parents:
diff changeset
  1370
            }
hgs
parents:
diff changeset
  1371
        else
hgs
parents:
diff changeset
  1372
            {
hgs
parents:
diff changeset
  1373
            TPtrC subjectDes = iMtm->SubjectL();
hgs
parents:
diff changeset
  1374
            msgData->SetSubjectL( &subjectDes );
hgs
parents:
diff changeset
  1375
            }
hgs
parents:
diff changeset
  1376
        CleanupStack::PopAndDestroy( prefixSubject ); 
hgs
parents:
diff changeset
  1377
        }
hgs
parents:
diff changeset
  1378
hgs
parents:
diff changeset
  1379
hgs
parents:
diff changeset
  1380
    TUid mtmUid = KSenduiMtmUniMessageUid;
hgs
parents:
diff changeset
  1381
    switch ( aCommand )
hgs
parents:
diff changeset
  1382
        {
hgs
parents:
diff changeset
  1383
        case ENotViewerReplyViaAudio:
hgs
parents:
diff changeset
  1384
            mtmUid = KSenduiMtmAudioMessageUid;
hgs
parents:
diff changeset
  1385
            break;
hgs
parents:
diff changeset
  1386
        case ENotViewerReplyViaMail:
hgs
parents:
diff changeset
  1387
            mtmUid = KSenduiMtmSmtpUid;
hgs
parents:
diff changeset
  1388
            break;
hgs
parents:
diff changeset
  1389
        case ENotViewerReplyViaMessage:
hgs
parents:
diff changeset
  1390
        default:
hgs
parents:
diff changeset
  1391
	     if( iFlags & ENotViewerRestrictedReply  )
hgs
parents:
diff changeset
  1392
	     {
hgs
parents:
diff changeset
  1393
            mtmUid = KSenduiMtmMmsUid;
hgs
parents:
diff changeset
  1394
	     }
hgs
parents:
diff changeset
  1395
            break;
hgs
parents:
diff changeset
  1396
        }
hgs
parents:
diff changeset
  1397
        
hgs
parents:
diff changeset
  1398
    // And do the sending
hgs
parents:
diff changeset
  1399
    TInt error;
hgs
parents:
diff changeset
  1400
    TRAP ( error,
hgs
parents:
diff changeset
  1401
            {
hgs
parents:
diff changeset
  1402
            iSendUi->CreateAndSendMessageL(
hgs
parents:
diff changeset
  1403
            mtmUid,
hgs
parents:
diff changeset
  1404
            msgData);
hgs
parents:
diff changeset
  1405
            } ); //TRAP
hgs
parents:
diff changeset
  1406
hgs
parents:
diff changeset
  1407
    CleanupStack::PopAndDestroy( msgData ); // msgData
hgs
parents:
diff changeset
  1408
hgs
parents:
diff changeset
  1409
    if ( error )
hgs
parents:
diff changeset
  1410
        {
hgs
parents:
diff changeset
  1411
        iMtm->Entry( ).SetEntryL( iMsgId );
hgs
parents:
diff changeset
  1412
        TRAP_IGNORE( iMtm->LoadMessageL() );
hgs
parents:
diff changeset
  1413
        EntryChangedL( );
hgs
parents:
diff changeset
  1414
        LOGTEXT(_L8("NotViewerAppUi: Reply end error"));
hgs
parents:
diff changeset
  1415
        User::Leave( error );
hgs
parents:
diff changeset
  1416
        }
hgs
parents:
diff changeset
  1417
	else
hgs
parents:
diff changeset
  1418
		{
hgs
parents:
diff changeset
  1419
        LOGTEXT(_L8("NotViewerAppUi: Reply end success"));
hgs
parents:
diff changeset
  1420
		if (!(iEditorBaseFeatures & EStayInViewerAfterReply))
hgs
parents:
diff changeset
  1421
            {
hgs
parents:
diff changeset
  1422
            Exit( EAknSoftkeyBack );
hgs
parents:
diff changeset
  1423
            }
hgs
parents:
diff changeset
  1424
		}
hgs
parents:
diff changeset
  1425
    }
hgs
parents:
diff changeset
  1426
hgs
parents:
diff changeset
  1427
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1428
// DeleteNotificationL
hgs
parents:
diff changeset
  1429
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1430
//
hgs
parents:
diff changeset
  1431
void CNotViewerAppUi::DeleteNotificationL()
hgs
parents:
diff changeset
  1432
    {
hgs
parents:
diff changeset
  1433
    LOGTEXT(_L8("NotViewerAppUi: Delete start"));
hgs
parents:
diff changeset
  1434
    __ASSERT_DEBUG( iOperation == NULL, Panic( ENotViewerOperationNotFinished ) );
hgs
parents:
diff changeset
  1435
    CMsgEditorDocument* doc = Document( );
hgs
parents:
diff changeset
  1436
    CNotMtmUi* uiMtm = static_cast<CNotMtmUi*>( &doc->MtmUi( ) );
hgs
parents:
diff changeset
  1437
hgs
parents:
diff changeset
  1438
hgs
parents:
diff changeset
  1439
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  1440
        { // This is a notification -> lets see if we have options
hgs
parents:
diff changeset
  1441
        LOGTEXT(_L8("NotViewerAppUi: Delete: We r dealing with a notification"));
hgs
parents:
diff changeset
  1442
hgs
parents:
diff changeset
  1443
        TBool inboxNotification = EFalse;   
hgs
parents:
diff changeset
  1444
hgs
parents:
diff changeset
  1445
        if( iMtm->Entry().Entry().Parent() == KMsvGlobalInBoxIndexEntryId )
hgs
parents:
diff changeset
  1446
            {// Are we in Inbox now
hgs
parents:
diff changeset
  1447
            inboxNotification = ETrue;
hgs
parents:
diff changeset
  1448
            LOGTEXT(_L8("NotViewerAppUi: Delete: in Inbox"));
hgs
parents:
diff changeset
  1449
            }
hgs
parents:
diff changeset
  1450
          
hgs
parents:
diff changeset
  1451
        if( inboxNotification && uiMtm->DeleteQueryRequiredByMtm( ) && !AlreadyDeletedFromServer( ) )
hgs
parents:
diff changeset
  1452
            { // We are in Inbox, delete options supported and not deleted from server
hgs
parents:
diff changeset
  1453
            LOGTEXT(_L8("NotViewerAppUi: Delete: Lets show the delete options"));
hgs
parents:
diff changeset
  1454
            TInt index = 0;
hgs
parents:
diff changeset
  1455
hgs
parents:
diff changeset
  1456
            CAknListQueryDialog* dlg = new (ELeave) CAknListQueryDialog( &index );
hgs
parents:
diff changeset
  1457
            dlg->PrepareLC( R_NOTVIEWER_DELETE_FROM_QUERY );
hgs
parents:
diff changeset
  1458
hgs
parents:
diff changeset
  1459
            // Populate list query array
hgs
parents:
diff changeset
  1460
            CDesCArrayFlat *array = new(ELeave) CDesCArrayFlat(2);
hgs
parents:
diff changeset
  1461
            CleanupStack::PushL(array);
hgs
parents:
diff changeset
  1462
            HBufC* buf = StringLoader::LoadLC( R_NOTVIEWER_DELETE_QUERY_REMOTEONLY );
hgs
parents:
diff changeset
  1463
            array->AppendL( *buf );
hgs
parents:
diff changeset
  1464
            CleanupStack::PopAndDestroy(); //buf
hgs
parents:
diff changeset
  1465
            buf = StringLoader::LoadLC( R_NOTVIEWER_DELETE_QUERY_BOTHLOCALANDREMOTE );
hgs
parents:
diff changeset
  1466
            array->AppendL( *buf );
hgs
parents:
diff changeset
  1467
            CleanupStack::PopAndDestroy(); //buf
hgs
parents:
diff changeset
  1468
            dlg->SetItemTextArray( array );
hgs
parents:
diff changeset
  1469
            CleanupStack::Pop(); //array
hgs
parents:
diff changeset
  1470
hgs
parents:
diff changeset
  1471
            LOGTEXT(_L8("NotViewerAppUi: Delete: Next asks the delete options"));
hgs
parents:
diff changeset
  1472
            TInt queryOk = dlg->RunLD();
hgs
parents:
diff changeset
  1473
            if( queryOk )
hgs
parents:
diff changeset
  1474
                {
hgs
parents:
diff changeset
  1475
                /* list query approved, index is usable to see what list item was selected */
hgs
parents:
diff changeset
  1476
                if( index == 0 )
hgs
parents:
diff changeset
  1477
                    {
hgs
parents:
diff changeset
  1478
                    iFlags &= ~ENotViewerDeleteBoth;
hgs
parents:
diff changeset
  1479
                    LOGTEXT(_L8("NotViewerAppUi: Delete: Just the server"));
hgs
parents:
diff changeset
  1480
                    }
hgs
parents:
diff changeset
  1481
                else
hgs
parents:
diff changeset
  1482
                    { // If action withe server was selected, keep it in mind
hgs
parents:
diff changeset
  1483
                    iFlags |= ENotViewerDeleteBoth;
hgs
parents:
diff changeset
  1484
                    LOGTEXT(_L8("NotViewerAppUi: Delete: Both ones"));
hgs
parents:
diff changeset
  1485
                    }
hgs
parents:
diff changeset
  1486
                // The deletion process starts a bit later
hgs
parents:
diff changeset
  1487
                }
hgs
parents:
diff changeset
  1488
            else
hgs
parents:
diff changeset
  1489
                {
hgs
parents:
diff changeset
  1490
                // list query was cancelled -> just return
hgs
parents:
diff changeset
  1491
            LOGTEXT(_L8("NotViewerAppUi: Delete: Query cancelled"));
hgs
parents:
diff changeset
  1492
                return;
hgs
parents:
diff changeset
  1493
                }
hgs
parents:
diff changeset
  1494
            }
hgs
parents:
diff changeset
  1495
        else
hgs
parents:
diff changeset
  1496
            { // In this case we need just a query "Delete message?"
hgs
parents:
diff changeset
  1497
            LOGTEXT(_L8("NotViewerAppUi: Delete: Show just Delete message?"));
hgs
parents:
diff changeset
  1498
            if( ShowConfirmationQueryL( R_NOTVIEWER_QUEST_DELETE_MESSAGE ) )
hgs
parents:
diff changeset
  1499
                { // Delete message confirmed
hgs
parents:
diff changeset
  1500
                LOGTEXT(_L8("NotViewerAppUi: Delete: Answered Yes"));
hgs
parents:
diff changeset
  1501
                if( inboxNotification )
hgs
parents:
diff changeset
  1502
                    {
hgs
parents:
diff changeset
  1503
                    // We are in Inbox, so it means we delete just the local one
hgs
parents:
diff changeset
  1504
                    LOGTEXT(_L8("NotViewerAppUi: Delete: Inbox notification again"));
hgs
parents:
diff changeset
  1505
                    CAknInputBlock* abs = CAknInputBlock::NewLC( );  
hgs
parents:
diff changeset
  1506
    
hgs
parents:
diff changeset
  1507
                    CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection;
hgs
parents:
diff changeset
  1508
                    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  1509
                    selection->AppendL( iMtm->Entry().EntryId() );
hgs
parents:
diff changeset
  1510
                
hgs
parents:
diff changeset
  1511
                    CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
hgs
parents:
diff changeset
  1512
hgs
parents:
diff changeset
  1513
                    LOGTEXT(_L8("NotViewerAppUi: Delete: Inbox locl deletion starts"));
hgs
parents:
diff changeset
  1514
                    CMsvOperation* deleteop = iMtm->DeleteNotificationL(
hgs
parents:
diff changeset
  1515
                                        *selection,
hgs
parents:
diff changeset
  1516
                                        EMmsDeleteNotificationOnly,
hgs
parents:
diff changeset
  1517
                                        wait->iStatus );
hgs
parents:
diff changeset
  1518
hgs
parents:
diff changeset
  1519
                   LOGTEXT(_L8("NotViewerAppUi: Delete: and goes on.."));
hgs
parents:
diff changeset
  1520
                   if( !deleteop )   // Check this just in case
hgs
parents:
diff changeset
  1521
                        {  
hgs
parents:
diff changeset
  1522
                        CleanupStack::PopAndDestroy( wait ); 
hgs
parents:
diff changeset
  1523
                        CleanupStack::PopAndDestroy( selection  ); 
hgs
parents:
diff changeset
  1524
                        CleanupStack::PopAndDestroy( abs );
hgs
parents:
diff changeset
  1525
                        LOGTEXT(_L8("NotViewerAppUi: Delete: NULL returned"));
hgs
parents:
diff changeset
  1526
                        return; 
hgs
parents:
diff changeset
  1527
                        }
hgs
parents:
diff changeset
  1528
hgs
parents:
diff changeset
  1529
                    CleanupStack::PushL( deleteop );
hgs
parents:
diff changeset
  1530
                    wait->Start();
hgs
parents:
diff changeset
  1531
    
hgs
parents:
diff changeset
  1532
                    if( wait->iStatus != KErrNone )
hgs
parents:
diff changeset
  1533
                        {
hgs
parents:
diff changeset
  1534
                        LOGTEXT(_L8("NotViewerAppUi: Delete: Wait->iStatus != KErrNone "));
hgs
parents:
diff changeset
  1535
                        CleanupStack::PopAndDestroy( 3 ); // op, wait, sel
hgs
parents:
diff changeset
  1536
                        CleanupStack::PopAndDestroy( abs );
hgs
parents:
diff changeset
  1537
                        return;
hgs
parents:
diff changeset
  1538
                        }
hgs
parents:
diff changeset
  1539
hgs
parents:
diff changeset
  1540
                    // -> no error, we can exit the viewer
hgs
parents:
diff changeset
  1541
                    CleanupStack::PopAndDestroy( 3 ); // op, wait, sel
hgs
parents:
diff changeset
  1542
                    CleanupStack::PopAndDestroy( abs );
hgs
parents:
diff changeset
  1543
                    // This was the local deletion so lets just exit from here
hgs
parents:
diff changeset
  1544
                    LOGTEXT(_L8("NotViewerAppUi: Delete: Local delete succesfull - exit"));
hgs
parents:
diff changeset
  1545
                	Exit( EAknSoftkeyBack );
hgs
parents:
diff changeset
  1546
                    }
hgs
parents:
diff changeset
  1547
                else
hgs
parents:
diff changeset
  1548
                    {
hgs
parents:
diff changeset
  1549
                    // else we are in MMBoxFolder and we can continue
hgs
parents:
diff changeset
  1550
                    // there we always need action with server and local
hgs
parents:
diff changeset
  1551
                    LOGTEXT(_L8("NotViewerAppUi: Delete: We have mmbox notification"));
hgs
parents:
diff changeset
  1552
                    iFlags |= ENotViewerDeleteBoth;
hgs
parents:
diff changeset
  1553
                    }
hgs
parents:
diff changeset
  1554
                }
hgs
parents:
diff changeset
  1555
            else
hgs
parents:
diff changeset
  1556
                { // Answer was NO.
hgs
parents:
diff changeset
  1557
                return;
hgs
parents:
diff changeset
  1558
                }
hgs
parents:
diff changeset
  1559
            }
hgs
parents:
diff changeset
  1560
        // OK, now we are either in Inbox and chose some action related to server
hgs
parents:
diff changeset
  1561
        // or we are in MMBoxView and wanted to delete a message in there..
hgs
parents:
diff changeset
  1562
            
hgs
parents:
diff changeset
  1563
        if( !CheckAPSettingsL( ) )
hgs
parents:
diff changeset
  1564
            { // Are the settings OK
hgs
parents:
diff changeset
  1565
            return;
hgs
parents:
diff changeset
  1566
            }
hgs
parents:
diff changeset
  1567
        LOGTEXT(_L8("NotViewerAppUi: Delete: AP Checked"));
hgs
parents:
diff changeset
  1568
        // Just in case to make sure after checking settings
hgs
parents:
diff changeset
  1569
        iMtm->Entry( ).SetEntryL( iMsgId );
hgs
parents:
diff changeset
  1570
        iMtm->LoadMessageL( );
hgs
parents:
diff changeset
  1571
hgs
parents:
diff changeset
  1572
        if(     iFlags & ENotViewerOffline 
hgs
parents:
diff changeset
  1573
            &&  MsvUiServiceUtilitiesInternal::IsPhoneOfflineL() )
hgs
parents:
diff changeset
  1574
            {   // We are in offline at the moment -> Infonote and return
hgs
parents:
diff changeset
  1575
            ShowInformationNoteL( R_NOTVIEWER_OFFLINE_NOT_POSSIBLE, EFalse );
hgs
parents:
diff changeset
  1576
            return;
hgs
parents:
diff changeset
  1577
            }
hgs
parents:
diff changeset
  1578
        LOGTEXT(_L8("NotViewerAppUi: Delete: Not Offline"));
hgs
parents:
diff changeset
  1579
hgs
parents:
diff changeset
  1580
        // OK, lets go on with the deletion process
hgs
parents:
diff changeset
  1581
        CAknInputBlock* abs = CAknInputBlock::NewLC( );  
hgs
parents:
diff changeset
  1582
hgs
parents:
diff changeset
  1583
        CMsvSingleOpWatcher* singleOpWatcher=CMsvSingleOpWatcher::NewL(*this);
hgs
parents:
diff changeset
  1584
        CleanupStack::PushL(singleOpWatcher);
hgs
parents:
diff changeset
  1585
hgs
parents:
diff changeset
  1586
        CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection;
hgs
parents:
diff changeset
  1587
        CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  1588
        selection->AppendL( iMtm->Entry().EntryId() );
hgs
parents:
diff changeset
  1589
hgs
parents:
diff changeset
  1590
        CMsvProgressReporterOperation* reporter = 
hgs
parents:
diff changeset
  1591
            CMsvProgressReporterOperation::NewL(
hgs
parents:
diff changeset
  1592
                doc->Session(),
hgs
parents:
diff changeset
  1593
                singleOpWatcher->iStatus,
hgs
parents:
diff changeset
  1594
                EMbmAvkonQgn_note_erased );
hgs
parents:
diff changeset
  1595
        CleanupStack::PushL(reporter);
hgs
parents:
diff changeset
  1596
hgs
parents:
diff changeset
  1597
        LOGTEXT(_L8("NotViewerAppUi: Delete: Call unscheduled delete"));
hgs
parents:
diff changeset
  1598
        CMsvOperation* deleteop = iMtm->UnscheduledDeleteNotificationL(
hgs
parents:
diff changeset
  1599
                *selection,
hgs
parents:
diff changeset
  1600
                EMmsDeleteMMBoxOnly,
hgs
parents:
diff changeset
  1601
                reporter->RequestStatus() );
hgs
parents:
diff changeset
  1602
        LOGTEXT(_L8("NotViewerAppUi: Delete: End of call"));
hgs
parents:
diff changeset
  1603
        reporter->SetProgressDecoder( *this );
hgs
parents:
diff changeset
  1604
        reporter->SetOperationL( deleteop ); // Takes immediate ownership
hgs
parents:
diff changeset
  1605
        CleanupStack::Pop( reporter ); //reporter
hgs
parents:
diff changeset
  1606
        CleanupStack::PopAndDestroy( selection); // selection ownership moved to reporter?
hgs
parents:
diff changeset
  1607
        CleanupStack::Pop( singleOpWatcher );
hgs
parents:
diff changeset
  1608
hgs
parents:
diff changeset
  1609
        iOperation = singleOpWatcher;
hgs
parents:
diff changeset
  1610
        LOGTEXT(_L8("NotViewerAppUi: Delete: Set operation"));
hgs
parents:
diff changeset
  1611
        iOperation->SetOperation( reporter );
hgs
parents:
diff changeset
  1612
hgs
parents:
diff changeset
  1613
        CleanupStack::PopAndDestroy( abs ); 
hgs
parents:
diff changeset
  1614
        }       
hgs
parents:
diff changeset
  1615
    else if( !iMtm->Entry( ).Entry( ).ReadOnly( ) )
hgs
parents:
diff changeset
  1616
        {   // New Forward Request: It's not been saved -> just Exit
hgs
parents:
diff changeset
  1617
        if( ShowConfirmationQueryL( R_NOTVIEWER_QUEST_DELETE_MESSAGE ) )
hgs
parents:
diff changeset
  1618
            {
hgs
parents:
diff changeset
  1619
        	Exit( EAknSoftkeyBack );
hgs
parents:
diff changeset
  1620
            }
hgs
parents:
diff changeset
  1621
        }
hgs
parents:
diff changeset
  1622
    else
hgs
parents:
diff changeset
  1623
        {   // We have an open Sent Forward Request open
hgs
parents:
diff changeset
  1624
        if( ShowConfirmationQueryL( R_NOTVIEWER_QUEST_DELETE_MESSAGE ) )
hgs
parents:
diff changeset
  1625
            {
hgs
parents:
diff changeset
  1626
            DeleteAndExitL( );
hgs
parents:
diff changeset
  1627
            }
hgs
parents:
diff changeset
  1628
        }
hgs
parents:
diff changeset
  1629
    LOGTEXT(_L8("NotViewerAppUi: Delete: End"));
hgs
parents:
diff changeset
  1630
    }
hgs
parents:
diff changeset
  1631
hgs
parents:
diff changeset
  1632
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1633
// CallToNumberL
hgs
parents:
diff changeset
  1634
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1635
//
hgs
parents:
diff changeset
  1636
void CNotViewerAppUi::CallToNumberL()
hgs
parents:
diff changeset
  1637
    {
hgs
parents:
diff changeset
  1638
    if( !(iFlags & ENotViewerIsNotification) )
hgs
parents:
diff changeset
  1639
        {   // We are in forward request
hgs
parents:
diff changeset
  1640
        return;
hgs
parents:
diff changeset
  1641
        }
hgs
parents:
diff changeset
  1642
    if ( !iMsgVoIPExtension )
hgs
parents:
diff changeset
  1643
        {
hgs
parents:
diff changeset
  1644
        iMsgVoIPExtension = CMsgVoIPExtension::NewL();
hgs
parents:
diff changeset
  1645
        }
hgs
parents:
diff changeset
  1646
  	
hgs
parents:
diff changeset
  1647
    TPtrC senderAddr = KNullDesC( );
hgs
parents:
diff changeset
  1648
    TPtrC senderAlias = KNullDesC( );
hgs
parents:
diff changeset
  1649
    TPtrC focusedAddr = KNullDesC( );
hgs
parents:
diff changeset
  1650
    TBool dialerDisabled = EFalse;
hgs
parents:
diff changeset
  1651
hgs
parents:
diff changeset
  1652
    senderAddr.Set( TMmsGenUtils::PureAddress( iMtm->Sender() ) );
hgs
parents:
diff changeset
  1653
    if ( iAlias )
hgs
parents:
diff changeset
  1654
        {
hgs
parents:
diff changeset
  1655
        senderAlias.Set( *iAlias );
hgs
parents:
diff changeset
  1656
        }
hgs
parents:
diff changeset
  1657
hgs
parents:
diff changeset
  1658
    if (    FocusedControlId( ) == EMsgComponentIdBody
hgs
parents:
diff changeset
  1659
        &&  iView
hgs
parents:
diff changeset
  1660
        &&  iView->ItemFinder( ) )
hgs
parents:
diff changeset
  1661
        {
hgs
parents:
diff changeset
  1662
        const CItemFinder::CFindItemExt& item =
hgs
parents:
diff changeset
  1663
            iView->ItemFinder( )->CurrentItemExt( );
hgs
parents:
diff changeset
  1664
        if (    item.iItemDescriptor
hgs
parents:
diff changeset
  1665
            &&  (   item.iItemType == CItemFinder::EPhoneNumber
hgs
parents:
diff changeset
  1666
                ||  item.iItemType == CItemFinder::EEmailAddress ) )
hgs
parents:
diff changeset
  1667
            {
hgs
parents:
diff changeset
  1668
            if ( item.iItemType == CItemFinder::EPhoneNumber )
hgs
parents:
diff changeset
  1669
                {
hgs
parents:
diff changeset
  1670
                // Disable dialer
hgs
parents:
diff changeset
  1671
                iAvkonAppUi->SetKeyEventFlags( 
hgs
parents:
diff changeset
  1672
                    CAknAppUiBase::EDisableSendKeyShort | 
hgs
parents:
diff changeset
  1673
                    CAknAppUiBase::EDisableSendKeyLong );		
hgs
parents:
diff changeset
  1674
                dialerDisabled = ETrue;    
hgs
parents:
diff changeset
  1675
                }
hgs
parents:
diff changeset
  1676
            focusedAddr.Set( *(item.iItemDescriptor) );
hgs
parents:
diff changeset
  1677
            }
hgs
parents:
diff changeset
  1678
        }
hgs
parents:
diff changeset
  1679
hgs
parents:
diff changeset
  1680
    if ( FocusedControlId( ) == EMsgComponentIdFrom && 
hgs
parents:
diff changeset
  1681
         senderAddr.Length() &&
hgs
parents:
diff changeset
  1682
         iSenderType == EMuiuAddressTypePhoneNumber )    
hgs
parents:
diff changeset
  1683
        {
hgs
parents:
diff changeset
  1684
        // Disable dialer
hgs
parents:
diff changeset
  1685
        iAvkonAppUi->SetKeyEventFlags( 
hgs
parents:
diff changeset
  1686
            CAknAppUiBase::EDisableSendKeyShort | 
hgs
parents:
diff changeset
  1687
            CAknAppUiBase::EDisableSendKeyLong );	
hgs
parents:
diff changeset
  1688
        dialerDisabled = ETrue;
hgs
parents:
diff changeset
  1689
        }
hgs
parents:
diff changeset
  1690
    // Only when dialer is disabled try placing the call    
hgs
parents:
diff changeset
  1691
    if ( dialerDisabled )
hgs
parents:
diff changeset
  1692
        {
hgs
parents:
diff changeset
  1693
    	MsvUiServiceUtilitiesInternal::InternetOrVoiceCallServiceL( 
hgs
parents:
diff changeset
  1694
            *iMsgVoIPExtension,
hgs
parents:
diff changeset
  1695
            senderAddr,
hgs
parents:
diff changeset
  1696
            senderAlias,
hgs
parents:
diff changeset
  1697
            focusedAddr,
hgs
parents:
diff changeset
  1698
            ETrue,
hgs
parents:
diff changeset
  1699
            iEikonEnv );
hgs
parents:
diff changeset
  1700
        }
hgs
parents:
diff changeset
  1701
    }
hgs
parents:
diff changeset
  1702
hgs
parents:
diff changeset
  1703
hgs
parents:
diff changeset
  1704
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1705
// MessageDetailsL
hgs
parents:
diff changeset
  1706
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1707
//
hgs
parents:
diff changeset
  1708
void CNotViewerAppUi::MessageDetailsL( )
hgs
parents:
diff changeset
  1709
    {
hgs
parents:
diff changeset
  1710
    LOGTEXT(_L8("NotViewerAppUi: Details start"));
hgs
parents:
diff changeset
  1711
    //These are not used! They just have to be there.
hgs
parents:
diff changeset
  1712
    CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection;
hgs
parents:
diff changeset
  1713
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  1714
    TBuf8<1> param;
hgs
parents:
diff changeset
  1715
    param.Zero();
hgs
parents:
diff changeset
  1716
hgs
parents:
diff changeset
  1717
    CAknInputBlock::NewLC( );  
hgs
parents:
diff changeset
  1718
hgs
parents:
diff changeset
  1719
    CMsvSingleOpWatcher* watch = CMsvSingleOpWatcher::NewLC( *Document() );
hgs
parents:
diff changeset
  1720
    
hgs
parents:
diff changeset
  1721
    CMsgEditorDocument* doc = Document( );
hgs
parents:
diff changeset
  1722
hgs
parents:
diff changeset
  1723
    CMsgAddressControl* cntrl = AddressControl( );
hgs
parents:
diff changeset
  1724
hgs
parents:
diff changeset
  1725
    if ( !cntrl )
hgs
parents:
diff changeset
  1726
        {
hgs
parents:
diff changeset
  1727
        return;
hgs
parents:
diff changeset
  1728
        }
hgs
parents:
diff changeset
  1729
hgs
parents:
diff changeset
  1730
    CNotMtmUi* uiMtm = static_cast<CNotMtmUi*>( &doc->MtmUi( ) );
hgs
parents:
diff changeset
  1731
hgs
parents:
diff changeset
  1732
    if ( !(iFlags & ENotViewerIsNotification) )
hgs
parents:
diff changeset
  1733
        {
hgs
parents:
diff changeset
  1734
        // Need to save only if addresses are changed.
hgs
parents:
diff changeset
  1735
        if ( cntrl && cntrl->IsModified() )
hgs
parents:
diff changeset
  1736
            {
hgs
parents:
diff changeset
  1737
            iAddressHandler->CopyAddressesToMtmL( EMsvRecipientTo );
hgs
parents:
diff changeset
  1738
            iMtm->SaveMessageL();
hgs
parents:
diff changeset
  1739
            }
hgs
parents:
diff changeset
  1740
        }
hgs
parents:
diff changeset
  1741
    
hgs
parents:
diff changeset
  1742
    CMsvOperation* op = uiMtm->InvokeAsyncFunctionL(
hgs
parents:
diff changeset
  1743
        KMtmUiFunctionMessageInfo,
hgs
parents:
diff changeset
  1744
        *selection,
hgs
parents:
diff changeset
  1745
        watch->iStatus,
hgs
parents:
diff changeset
  1746
        param );
hgs
parents:
diff changeset
  1747
    CleanupStack::Pop(); // watch
hgs
parents:
diff changeset
  1748
    Document()->AddSingleOperationL( op, watch );
hgs
parents:
diff changeset
  1749
hgs
parents:
diff changeset
  1750
    CleanupStack::PopAndDestroy( 2 ); // selection, CAknInputBlock
hgs
parents:
diff changeset
  1751
    LOGTEXT(_L8("NotViewerAppUi: Details end"));
hgs
parents:
diff changeset
  1752
    }
hgs
parents:
diff changeset
  1753
hgs
parents:
diff changeset
  1754
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1755
// AddRecipientL
hgs
parents:
diff changeset
  1756
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1757
//
hgs
parents:
diff changeset
  1758
void CNotViewerAppUi::AddRecipientL(  )
hgs
parents:
diff changeset
  1759
    {
hgs
parents:
diff changeset
  1760
    LOGTEXT(_L8("NotViewerAppUi: AddRecipient start"));
hgs
parents:
diff changeset
  1761
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  1762
        {   // We are in notification
hgs
parents:
diff changeset
  1763
        return;
hgs
parents:
diff changeset
  1764
        }
hgs
parents:
diff changeset
  1765
hgs
parents:
diff changeset
  1766
    TBool invalid = EFalse;
hgs
parents:
diff changeset
  1767
hgs
parents:
diff changeset
  1768
    TBool addressesAdded = iAddressHandler->AddRecipientL( invalid );
hgs
parents:
diff changeset
  1769
hgs
parents:
diff changeset
  1770
    if ( addressesAdded )
hgs
parents:
diff changeset
  1771
        {
hgs
parents:
diff changeset
  1772
hgs
parents:
diff changeset
  1773
        Document()->SetHeaderModified( ETrue );
hgs
parents:
diff changeset
  1774
hgs
parents:
diff changeset
  1775
        CMsgAddressControl* to = NULL; 
hgs
parents:
diff changeset
  1776
        to = AddressControl( ); 
hgs
parents:
diff changeset
  1777
hgs
parents:
diff changeset
  1778
        if ( iView->FocusedControl() != to )
hgs
parents:
diff changeset
  1779
            {
hgs
parents:
diff changeset
  1780
            // Focus was not in address control -> Move it
hgs
parents:
diff changeset
  1781
            iView->SetFocus( EMsgComponentIdTo );
hgs
parents:
diff changeset
  1782
            }
hgs
parents:
diff changeset
  1783
        }
hgs
parents:
diff changeset
  1784
    LOGTEXT(_L8("NotViewerAppUi: AddRecipient end"));
hgs
parents:
diff changeset
  1785
    }
hgs
parents:
diff changeset
  1786
hgs
parents:
diff changeset
  1787
hgs
parents:
diff changeset
  1788
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1789
// CheckNamesL
hgs
parents:
diff changeset
  1790
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1791
//
hgs
parents:
diff changeset
  1792
void CNotViewerAppUi::CheckNamesL(  )
hgs
parents:
diff changeset
  1793
    {
hgs
parents:
diff changeset
  1794
    LOGTEXT(_L8("NotViewerAppUi: CheckNamesL start"));
hgs
parents:
diff changeset
  1795
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  1796
        {   // We are in notification
hgs
parents:
diff changeset
  1797
        return;
hgs
parents:
diff changeset
  1798
        }
hgs
parents:
diff changeset
  1799
    TBool dummy;
hgs
parents:
diff changeset
  1800
    VerifyAddressesL( dummy );
hgs
parents:
diff changeset
  1801
    }
hgs
parents:
diff changeset
  1802
hgs
parents:
diff changeset
  1803
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1804
// VerifyAddressesL
hgs
parents:
diff changeset
  1805
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1806
//
hgs
parents:
diff changeset
  1807
TBool CNotViewerAppUi::VerifyAddressesL( TBool& aModified )
hgs
parents:
diff changeset
  1808
    {
hgs
parents:
diff changeset
  1809
    LOGTEXT(_L8("NotViewerAppUi: VerifyAddresses start"));
hgs
parents:
diff changeset
  1810
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  1811
        {   // We are in notification
hgs
parents:
diff changeset
  1812
        return EFalse;
hgs
parents:
diff changeset
  1813
        }
hgs
parents:
diff changeset
  1814
    aModified = EFalse;
hgs
parents:
diff changeset
  1815
    TBool retVal = iAddressHandler->VerifyAddressesL( aModified );
hgs
parents:
diff changeset
  1816
    if ( aModified )
hgs
parents:
diff changeset
  1817
        {
hgs
parents:
diff changeset
  1818
        Document()->SetHeaderModified( ETrue );
hgs
parents:
diff changeset
  1819
        }
hgs
parents:
diff changeset
  1820
    LOGTEXT(_L8("NotViewerAppUi: VerifyAddressesL end"));
hgs
parents:
diff changeset
  1821
    return retVal;
hgs
parents:
diff changeset
  1822
    }
hgs
parents:
diff changeset
  1823
hgs
parents:
diff changeset
  1824
hgs
parents:
diff changeset
  1825
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1826
// RichText
hgs
parents:
diff changeset
  1827
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1828
//
hgs
parents:
diff changeset
  1829
CRichText& CNotViewerAppUi::RichText() const
hgs
parents:
diff changeset
  1830
    {
hgs
parents:
diff changeset
  1831
    CMsgBaseControl* baseControl = iView->ControlById( 
hgs
parents:
diff changeset
  1832
        EMsgComponentIdBody );
hgs
parents:
diff changeset
  1833
    CMsgBodyControl* bodyControl = STATIC_CAST( 
hgs
parents:
diff changeset
  1834
        CMsgBodyControl*, 
hgs
parents:
diff changeset
  1835
        baseControl );
hgs
parents:
diff changeset
  1836
    return bodyControl->TextContent( );
hgs
parents:
diff changeset
  1837
    }
hgs
parents:
diff changeset
  1838
hgs
parents:
diff changeset
  1839
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1840
// DoSaveL
hgs
parents:
diff changeset
  1841
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1842
//
hgs
parents:
diff changeset
  1843
void CNotViewerAppUi::DoSaveL( )
hgs
parents:
diff changeset
  1844
    {
hgs
parents:
diff changeset
  1845
    LOGTEXT(_L8("NotViewerAppUi: DoSaveL start"));
hgs
parents:
diff changeset
  1846
    iMtm = &(Document()->Mtm());
hgs
parents:
diff changeset
  1847
    if( !(iFlags & ENotViewerIsNotification) && !iMtm->Entry( ).Entry( ).ReadOnly( ) )
hgs
parents:
diff changeset
  1848
        {
hgs
parents:
diff changeset
  1849
        iAddressHandler->CopyAddressesToMtmL( EMsvRecipientTo );
hgs
parents:
diff changeset
  1850
hgs
parents:
diff changeset
  1851
        iMtm->SaveMessageL();
hgs
parents:
diff changeset
  1852
hgs
parents:
diff changeset
  1853
        TMmsMsvEntry tEntry = static_cast<TMmsMsvEntry>( Document()->Entry() );
hgs
parents:
diff changeset
  1854
hgs
parents:
diff changeset
  1855
        TBuf<KMaxDetailsLength> detailsBuf; 
hgs
parents:
diff changeset
  1856
        iAddressHandler->MakeDetailsL( detailsBuf );
hgs
parents:
diff changeset
  1857
        tEntry.iDetails.Set( detailsBuf );
hgs
parents:
diff changeset
  1858
        if ( !tEntry.EditorOriented() )
hgs
parents:
diff changeset
  1859
            {
hgs
parents:
diff changeset
  1860
            tEntry.SetEditorOriented( ETrue );
hgs
parents:
diff changeset
  1861
            }
hgs
parents:
diff changeset
  1862
        tEntry.iDate.UniversalTime();
hgs
parents:
diff changeset
  1863
hgs
parents:
diff changeset
  1864
        if ( !tEntry.Visible() )
hgs
parents:
diff changeset
  1865
            {
hgs
parents:
diff changeset
  1866
            // Save from close or exit save.
hgs
parents:
diff changeset
  1867
            // Message should be visible after save
hgs
parents:
diff changeset
  1868
            tEntry.SetVisible( ETrue );
hgs
parents:
diff changeset
  1869
            tEntry.SetInPreparation( EFalse );
hgs
parents:
diff changeset
  1870
            }
hgs
parents:
diff changeset
  1871
        Document()->CurrentEntry().ChangeL( tEntry );
hgs
parents:
diff changeset
  1872
hgs
parents:
diff changeset
  1873
        Document()->SetHeaderModified( EFalse );
hgs
parents:
diff changeset
  1874
        }
hgs
parents:
diff changeset
  1875
    LOGTEXT(_L8("NotViewerAppUi: DoSaveL end"));
hgs
parents:
diff changeset
  1876
    }
hgs
parents:
diff changeset
  1877
hgs
parents:
diff changeset
  1878
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1879
// DoMsgSaveExitL
hgs
parents:
diff changeset
  1880
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1881
//
hgs
parents:
diff changeset
  1882
void CNotViewerAppUi::DoMsgSaveExitL( )
hgs
parents:
diff changeset
  1883
    {
hgs
parents:
diff changeset
  1884
    LOGTEXT(_L8("NotViewerAppUi: DoMsgSaveExitL"));
hgs
parents:
diff changeset
  1885
	Exit( EAknSoftkeyBack );
hgs
parents:
diff changeset
  1886
	}
hgs
parents:
diff changeset
  1887
    
hgs
parents:
diff changeset
  1888
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1889
// HandleEntryDeletedL
hgs
parents:
diff changeset
  1890
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1891
//
hgs
parents:
diff changeset
  1892
void CNotViewerAppUi::HandleEntryDeletedL()
hgs
parents:
diff changeset
  1893
    {
hgs
parents:
diff changeset
  1894
    LOGTEXT(_L8("NotViewerAppUi: HandleEntryDeletedL"));
hgs
parents:
diff changeset
  1895
	Exit( EAknSoftkeyBack );
hgs
parents:
diff changeset
  1896
    }
hgs
parents:
diff changeset
  1897
hgs
parents:
diff changeset
  1898
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1899
// HandleEntryChangeL
hgs
parents:
diff changeset
  1900
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1901
//
hgs
parents:
diff changeset
  1902
void CNotViewerAppUi::HandleEntryChangeL()
hgs
parents:
diff changeset
  1903
    { // Call EntryChangedL to update the status
hgs
parents:
diff changeset
  1904
    LOGTEXT(_L8("NotViewerAppUi: HandleEntryChangeL start"));
hgs
parents:
diff changeset
  1905
    if( !( iFlags & ENotViewerIsNotification ) )
hgs
parents:
diff changeset
  1906
        {   // We are not in notification mode -> entry change can be ignored
hgs
parents:
diff changeset
  1907
        return;
hgs
parents:
diff changeset
  1908
        }
hgs
parents:
diff changeset
  1909
    iMtm->Entry( ).SetEntryL( iMsgId );
hgs
parents:
diff changeset
  1910
    TRAP_IGNORE( iMtm->LoadMessageL() );
hgs
parents:
diff changeset
  1911
    EntryChangedL( );
hgs
parents:
diff changeset
  1912
    LOGTEXT(_L8("NotViewerAppUi: HandleEntryChangeL end"));
hgs
parents:
diff changeset
  1913
    }
hgs
parents:
diff changeset
  1914
hgs
parents:
diff changeset
  1915
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1916
// AddItemL
hgs
parents:
diff changeset
  1917
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1918
//
hgs
parents:
diff changeset
  1919
void CNotViewerAppUi::AddItemL(const TDesC& aLabel, const TDesC& aValue )
hgs
parents:
diff changeset
  1920
    {
hgs
parents:
diff changeset
  1921
    if ( aLabel.Length() > 0 )
hgs
parents:
diff changeset
  1922
        {
hgs
parents:
diff changeset
  1923
        AppendTextL( aLabel , iLabelFormat, iLabelMask );
hgs
parents:
diff changeset
  1924
        }
hgs
parents:
diff changeset
  1925
hgs
parents:
diff changeset
  1926
    if ( aValue.Length() > 0 )
hgs
parents:
diff changeset
  1927
        {
hgs
parents:
diff changeset
  1928
        AppendTextL( aValue , iValueFormat, iValueMask );
hgs
parents:
diff changeset
  1929
        }
hgs
parents:
diff changeset
  1930
    }
hgs
parents:
diff changeset
  1931
hgs
parents:
diff changeset
  1932
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1933
// ApplyFormat
hgs
parents:
diff changeset
  1934
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1935
//
hgs
parents:
diff changeset
  1936
void CNotViewerAppUi::ApplyFormat(TCharFormat& aFormat, TCharFormatMask& aMask, TBool aIsLabel)
hgs
parents:
diff changeset
  1937
    {
hgs
parents:
diff changeset
  1938
    TRect mainPane;
hgs
parents:
diff changeset
  1939
    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPane );
hgs
parents:
diff changeset
  1940
    TAknLayoutText textLayout;
hgs
parents:
diff changeset
  1941
hgs
parents:
diff changeset
  1942
    if( aIsLabel )
hgs
parents:
diff changeset
  1943
        { // Font for headings
hgs
parents:
diff changeset
  1944
        textLayout.LayoutText(
hgs
parents:
diff changeset
  1945
            mainPane,
hgs
parents:
diff changeset
  1946
            AppLayout::Smart_Messages_Line_1( 0 ) );
hgs
parents:
diff changeset
  1947
        }
hgs
parents:
diff changeset
  1948
    else
hgs
parents:
diff changeset
  1949
        { // Font for data
hgs
parents:
diff changeset
  1950
        textLayout.LayoutText(
hgs
parents:
diff changeset
  1951
            mainPane,
hgs
parents:
diff changeset
  1952
            AppLayout::Smart_Messages_Line_2( 0 ) );
hgs
parents:
diff changeset
  1953
        }
hgs
parents:
diff changeset
  1954
hgs
parents:
diff changeset
  1955
    aFormat.iFontSpec = textLayout.Font( )->FontSpecInTwips();    
hgs
parents:
diff changeset
  1956
    aMask.ClearAll();
hgs
parents:
diff changeset
  1957
    aMask.SetAttrib(EAttFontStrokeWeight);
hgs
parents:
diff changeset
  1958
    // If following line in use, it disables text zooming
hgs
parents:
diff changeset
  1959
    //aMask.SetAttrib(EAttFontHeight);
hgs
parents:
diff changeset
  1960
    aMask.SetAttrib(EAttFontTypeface);
hgs
parents:
diff changeset
  1961
    }
hgs
parents:
diff changeset
  1962
hgs
parents:
diff changeset
  1963
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1964
// AppendTextL
hgs
parents:
diff changeset
  1965
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1966
//
hgs
parents:
diff changeset
  1967
void CNotViewerAppUi::AppendTextL( const TDesC& aText,
hgs
parents:
diff changeset
  1968
    const TCharFormat& aFormat, 
hgs
parents:
diff changeset
  1969
    const TCharFormatMask& aMask )
hgs
parents:
diff changeset
  1970
    {
hgs
parents:
diff changeset
  1971
    // Create the modifiable descriptor
hgs
parents:
diff changeset
  1972
    HBufC* buf = HBufC::NewLC( aText.Length() );
hgs
parents:
diff changeset
  1973
    TPtr modifiedText = buf->Des();
hgs
parents:
diff changeset
  1974
    modifiedText = aText;
hgs
parents:
diff changeset
  1975
    TInt pos(0);
hgs
parents:
diff changeset
  1976
hgs
parents:
diff changeset
  1977
	AknTextUtils::DisplayTextLanguageSpecificNumberConversion( modifiedText );
hgs
parents:
diff changeset
  1978
hgs
parents:
diff changeset
  1979
    /*
hgs
parents:
diff changeset
  1980
    We have three cases, where specific character(s) must be
hgs
parents:
diff changeset
  1981
    converted to the CRichText understandable linebreak character
hgs
parents:
diff changeset
  1982
    (CEditableText::ELineBreak).
hgs
parents:
diff changeset
  1983
    1)  Text contains ascii code linefeed (LF) character 0x0A, which
hgs
parents:
diff changeset
  1984
        is converted to linebreak.
hgs
parents:
diff changeset
  1985
    2)  Text contains ascii code carrier return (CR) character 0x0D
hgs
parents:
diff changeset
  1986
    3)  Text contains both CR and LF characters particularly in this order.
hgs
parents:
diff changeset
  1987
        These two characters must be converted to one linebreak.
hgs
parents:
diff changeset
  1988
    */
hgs
parents:
diff changeset
  1989
    
hgs
parents:
diff changeset
  1990
    TUint LF(0x0A); // Linefeed character in ascii set
hgs
parents:
diff changeset
  1991
    TUint CR(0x0D); // Carriage return character in ascii set
hgs
parents:
diff changeset
  1992
hgs
parents:
diff changeset
  1993
    // Case 2 and 3
hgs
parents:
diff changeset
  1994
    while ( ( pos = modifiedText.Locate( CR ) ) != KErrNotFound ) // Locate CR
hgs
parents:
diff changeset
  1995
        {
hgs
parents:
diff changeset
  1996
        if ( pos + 1 < modifiedText.Length() && LF == modifiedText[pos + 1] ) // Is the next LF?
hgs
parents:
diff changeset
  1997
            {
hgs
parents:
diff changeset
  1998
            modifiedText.Delete( pos + 1, 1 ); // Delete if LF
hgs
parents:
diff changeset
  1999
            }
hgs
parents:
diff changeset
  2000
        modifiedText[pos] = CEditableText::ELineBreak; // Replace CR with linebreak
hgs
parents:
diff changeset
  2001
        }
hgs
parents:
diff changeset
  2002
hgs
parents:
diff changeset
  2003
    // Case 1
hgs
parents:
diff changeset
  2004
    while ( ( pos = modifiedText.Locate( LF ) ) != KErrNotFound ) // Locate LF
hgs
parents:
diff changeset
  2005
        {        
hgs
parents:
diff changeset
  2006
        modifiedText[pos] = CEditableText::ELineBreak; // Replace LF with linebreak
hgs
parents:
diff changeset
  2007
        }
hgs
parents:
diff changeset
  2008
hgs
parents:
diff changeset
  2009
    // Append the modified text to the richtext.
hgs
parents:
diff changeset
  2010
    CRichText& rich = RichText();
hgs
parents:
diff changeset
  2011
    
hgs
parents:
diff changeset
  2012
    TInt documentPos = rich.DocumentLength();
hgs
parents:
diff changeset
  2013
hgs
parents:
diff changeset
  2014
    // Every time when text is added, the cursor is left at the end of the line.
hgs
parents:
diff changeset
  2015
    // When the new text is added we must first add linebreak and then the text
hgs
parents:
diff changeset
  2016
    // linebreak is not added if the text is first item.
hgs
parents:
diff changeset
  2017
    if ( iFlags & ENotViewerIsNotFirstItem )
hgs
parents:
diff changeset
  2018
        {
hgs
parents:
diff changeset
  2019
        //Append the linebreak to the end of the richtext.
hgs
parents:
diff changeset
  2020
        rich.InsertL(documentPos, CEditableText::ELineBreak);
hgs
parents:
diff changeset
  2021
hgs
parents:
diff changeset
  2022
        }
hgs
parents:
diff changeset
  2023
    else
hgs
parents:
diff changeset
  2024
        {
hgs
parents:
diff changeset
  2025
        iFlags |= ENotViewerIsNotFirstItem;
hgs
parents:
diff changeset
  2026
        }
hgs
parents:
diff changeset
  2027
hgs
parents:
diff changeset
  2028
    documentPos = rich.DocumentLength();
hgs
parents:
diff changeset
  2029
    rich.SetInsertCharFormatL(aFormat, aMask, documentPos);
hgs
parents:
diff changeset
  2030
    rich.InsertL( documentPos, *buf );
hgs
parents:
diff changeset
  2031
    rich.CancelInsertCharFormat();
hgs
parents:
diff changeset
  2032
    
hgs
parents:
diff changeset
  2033
    CleanupStack::PopAndDestroy( buf );
hgs
parents:
diff changeset
  2034
    }
hgs
parents:
diff changeset
  2035
hgs
parents:
diff changeset
  2036
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2037
// CNotViewerAppUi::FocusedControlId
hgs
parents:
diff changeset
  2038
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2039
//
hgs
parents:
diff changeset
  2040
TInt CNotViewerAppUi::FocusedControlId()
hgs
parents:
diff changeset
  2041
    {
hgs
parents:
diff changeset
  2042
    TInt ret = EMsgComponentIdNull;
hgs
parents:
diff changeset
  2043
    if ( iView && iView->FocusedControl() )
hgs
parents:
diff changeset
  2044
        {
hgs
parents:
diff changeset
  2045
        ret = iView->FocusedControl()->ControlId();
hgs
parents:
diff changeset
  2046
        }
hgs
parents:
diff changeset
  2047
    return ret;
hgs
parents:
diff changeset
  2048
    }
hgs
parents:
diff changeset
  2049
hgs
parents:
diff changeset
  2050
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2051
// Document
hgs
parents:
diff changeset
  2052
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2053
//
hgs
parents:
diff changeset
  2054
CNotViewerDocument* CNotViewerAppUi::Document() const
hgs
parents:
diff changeset
  2055
    {
hgs
parents:
diff changeset
  2056
    return static_cast<CNotViewerDocument*>( CMsgEditorAppUi::Document() );
hgs
parents:
diff changeset
  2057
    }
hgs
parents:
diff changeset
  2058
hgs
parents:
diff changeset
  2059
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2060
// LaunchHelpL
hgs
parents:
diff changeset
  2061
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2062
//
hgs
parents:
diff changeset
  2063
void CNotViewerAppUi::LaunchHelpL()
hgs
parents:
diff changeset
  2064
    {
hgs
parents:
diff changeset
  2065
    LOGTEXT(_L8("NotViewerAppUi: LaunchHelp"));
hgs
parents:
diff changeset
  2066
	if ( iFlags & ENotViewerFlagsHelp )
hgs
parents:
diff changeset
  2067
		{
hgs
parents:
diff changeset
  2068
	    CArrayFix<TCoeHelpContext>* helpContext = AppHelpContextL();
hgs
parents:
diff changeset
  2069
		HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext );
hgs
parents:
diff changeset
  2070
		}
hgs
parents:
diff changeset
  2071
    }
hgs
parents:
diff changeset
  2072
hgs
parents:
diff changeset
  2073
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2074
// HelpContextL
hgs
parents:
diff changeset
  2075
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2076
//
hgs
parents:
diff changeset
  2077
CArrayFix<TCoeHelpContext>* CNotViewerAppUi::HelpContextL() const
hgs
parents:
diff changeset
  2078
    {
hgs
parents:
diff changeset
  2079
	if ( iFlags & ENotViewerFlagsHelp )
hgs
parents:
diff changeset
  2080
		{
hgs
parents:
diff changeset
  2081
	    CArrayFix<TCoeHelpContext>* r = new ( ELeave ) CArrayFixFlat<TCoeHelpContext>(1);
hgs
parents:
diff changeset
  2082
		CleanupStack::PushL( r );     
hgs
parents:
diff changeset
  2083
hgs
parents:
diff changeset
  2084
        if ( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  2085
            {   // Notification mode
hgs
parents:
diff changeset
  2086
    	    r->AppendL( TCoeHelpContext( KUidMmsViewer, KMMS_HLP_NOTIFICATION_VIEWER() ) );
hgs
parents:
diff changeset
  2087
            }
hgs
parents:
diff changeset
  2088
        else
hgs
parents:
diff changeset
  2089
            {
hgs
parents:
diff changeset
  2090
            if ( iMtm->Entry( ).Entry( ).ReadOnly( ) )
hgs
parents:
diff changeset
  2091
                {
hgs
parents:
diff changeset
  2092
        	    r->AppendL( TCoeHelpContext( KUidMmsViewer, KMMS_HLP_NOTIFICATION_VIEWER() ) );
hgs
parents:
diff changeset
  2093
                }
hgs
parents:
diff changeset
  2094
            else
hgs
parents:
diff changeset
  2095
                {
hgs
parents:
diff changeset
  2096
        	    r->AppendL( TCoeHelpContext( KUidMmsViewer, KMMS_HLP_MMS_FWD_REQUEST() ) );
hgs
parents:
diff changeset
  2097
                }
hgs
parents:
diff changeset
  2098
            }
hgs
parents:
diff changeset
  2099
		CleanupStack::Pop( r );
hgs
parents:
diff changeset
  2100
		return r;
hgs
parents:
diff changeset
  2101
		}
hgs
parents:
diff changeset
  2102
	return NULL;
hgs
parents:
diff changeset
  2103
    }
hgs
parents:
diff changeset
  2104
hgs
parents:
diff changeset
  2105
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2106
// AddMessageFieldL
hgs
parents:
diff changeset
  2107
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2108
void CNotViewerAppUi::AddMessageFieldL( )
hgs
parents:
diff changeset
  2109
    {
hgs
parents:
diff changeset
  2110
    LOGTEXT(_L8("NotViewerAppUi: AddMessageField start"));
hgs
parents:
diff changeset
  2111
    TInt resourceId = 0;
hgs
parents:
diff changeset
  2112
    TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
  2113
hgs
parents:
diff changeset
  2114
    CTextResolver* resolver = CTextResolver::NewLC();
hgs
parents:
diff changeset
  2115
    const TDesC& error = resolver->ResolveErrorString( entry.iError, CTextResolver::ECtxNoCtxNoSeparator );
hgs
parents:
diff changeset
  2116
    
hgs
parents:
diff changeset
  2117
    switch( iMsgStatus )
hgs
parents:
diff changeset
  2118
        {
hgs
parents:
diff changeset
  2119
        case ENotViewerStatusFailed:
hgs
parents:
diff changeset
  2120
            resourceId = R_NOTVIEWER_INFO_FAILED;
hgs
parents:
diff changeset
  2121
            break;
hgs
parents:
diff changeset
  2122
        case ENotViewerStatusExpired:
hgs
parents:
diff changeset
  2123
            resourceId = R_NOTVIEWER_INFO_EXPIRED;
hgs
parents:
diff changeset
  2124
            break;
hgs
parents:
diff changeset
  2125
        case ENotViewerStatusForwarding:
hgs
parents:
diff changeset
  2126
            resourceId = R_NOTVIEWER_INFO_FORWARDING;
hgs
parents:
diff changeset
  2127
            break;
hgs
parents:
diff changeset
  2128
        case ENotViewerStatusForwarded:
hgs
parents:
diff changeset
  2129
            resourceId = R_NOTVIEWER_INFO_FORWARDED;
hgs
parents:
diff changeset
  2130
            break;
hgs
parents:
diff changeset
  2131
        case ENotViewerStatusNull:
hgs
parents:
diff changeset
  2132
        case ENotViewerStatusWaiting:
hgs
parents:
diff changeset
  2133
        default:
hgs
parents:
diff changeset
  2134
            resourceId = R_NOTVIEWER_INFO_WAITING;
hgs
parents:
diff changeset
  2135
            break;
hgs
parents:
diff changeset
  2136
        }
hgs
parents:
diff changeset
  2137
    HBufC* message = StringLoader::LoadLC( resourceId );
hgs
parents:
diff changeset
  2138
    AddItemL( message->Des( ), error );
hgs
parents:
diff changeset
  2139
    CleanupStack::PopAndDestroy( 2 ); //message, resolver
hgs
parents:
diff changeset
  2140
    LOGTEXT(_L8("NotViewerAppUi: AddMessageField end"));
hgs
parents:
diff changeset
  2141
    }
hgs
parents:
diff changeset
  2142
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2143
// AddSubjectFieldL
hgs
parents:
diff changeset
  2144
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2145
void CNotViewerAppUi::AddSubjectFieldL( )
hgs
parents:
diff changeset
  2146
    {
hgs
parents:
diff changeset
  2147
    LOGTEXT(_L8("NotViewerAppUi: AddSubject start"));
hgs
parents:
diff changeset
  2148
    TPtrC subject = iMtm->SubjectL( );
hgs
parents:
diff changeset
  2149
    if( subject.Length( ) > 0 )
hgs
parents:
diff changeset
  2150
        {
hgs
parents:
diff changeset
  2151
        HBufC* label = StringLoader::LoadLC( R_NOTVIEWER_LABEL_SUBJECT );
hgs
parents:
diff changeset
  2152
        AddItemL( label->Des( ), subject );
hgs
parents:
diff changeset
  2153
        CleanupStack::PopAndDestroy( label );
hgs
parents:
diff changeset
  2154
        }
hgs
parents:
diff changeset
  2155
    LOGTEXT(_L8("NotViewerAppUi: AddSubject end"));
hgs
parents:
diff changeset
  2156
    }
hgs
parents:
diff changeset
  2157
hgs
parents:
diff changeset
  2158
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2159
// AddTextFieldL
hgs
parents:
diff changeset
  2160
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2161
//
hgs
parents:
diff changeset
  2162
void CNotViewerAppUi::AddTextFieldL( )
hgs
parents:
diff changeset
  2163
    {
hgs
parents:
diff changeset
  2164
    LOGTEXT(_L8("NotViewerAppUi: AddText start"));
hgs
parents:
diff changeset
  2165
    TPtrC text = iMtm->GetExtendedText( );
hgs
parents:
diff changeset
  2166
    if( text.Length( ) > 0 )
hgs
parents:
diff changeset
  2167
        {
hgs
parents:
diff changeset
  2168
        HBufC* label = StringLoader::LoadLC( R_NOTVIEWER_LABEL_TEXT );
hgs
parents:
diff changeset
  2169
        AddItemL( label->Des( ), text );
hgs
parents:
diff changeset
  2170
        CleanupStack::PopAndDestroy( label );
hgs
parents:
diff changeset
  2171
        }
hgs
parents:
diff changeset
  2172
    LOGTEXT(_L8("NotViewerAppUi: AddText end"));
hgs
parents:
diff changeset
  2173
    }
hgs
parents:
diff changeset
  2174
hgs
parents:
diff changeset
  2175
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2176
// AddExpiryFieldL
hgs
parents:
diff changeset
  2177
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2178
void CNotViewerAppUi::AddExpiryFieldL( )
hgs
parents:
diff changeset
  2179
    {
hgs
parents:
diff changeset
  2180
    LOGTEXT(_L8("NotViewerAppUi: AddExpiry start"));
hgs
parents:
diff changeset
  2181
    HBufC* label = StringLoader::LoadLC( R_NOTVIEWER_LABEL_EXPIRES );
hgs
parents:
diff changeset
  2182
    TTime messageDate = iMtm->ExpiryDate( );
hgs
parents:
diff changeset
  2183
hgs
parents:
diff changeset
  2184
	TLocale locale;
hgs
parents:
diff changeset
  2185
    messageDate += locale.UniversalTimeOffset();
hgs
parents:
diff changeset
  2186
	if (locale.QueryHomeHasDaylightSavingOn())          
hgs
parents:
diff changeset
  2187
		{
hgs
parents:
diff changeset
  2188
		TTimeIntervalHours daylightSaving(1);          
hgs
parents:
diff changeset
  2189
		messageDate += daylightSaving;
hgs
parents:
diff changeset
  2190
		}
hgs
parents:
diff changeset
  2191
hgs
parents:
diff changeset
  2192
    HBufC* dateFormat = StringLoader::LoadLC( R_QTN_DATE_USUAL_WITH_ZERO, iCoeEnv );
hgs
parents:
diff changeset
  2193
    TBuf<KDateSize> dateString;
hgs
parents:
diff changeset
  2194
    messageDate.FormatL( dateString, *dateFormat );
hgs
parents:
diff changeset
  2195
    CleanupStack::PopAndDestroy(); //dateFormat
hgs
parents:
diff changeset
  2196
hgs
parents:
diff changeset
  2197
    dateFormat = StringLoader::LoadLC( R_QTN_TIME_USUAL_WITH_ZERO, iCoeEnv );
hgs
parents:
diff changeset
  2198
    TBuf<KDateSize> timeString;
hgs
parents:
diff changeset
  2199
    messageDate.FormatL( timeString, *dateFormat );
hgs
parents:
diff changeset
  2200
    CleanupStack::PopAndDestroy(); //dateFormat
hgs
parents:
diff changeset
  2201
hgs
parents:
diff changeset
  2202
    CDesC16ArrayFlat* array = new(ELeave) CDesC16ArrayFlat( 2 );
hgs
parents:
diff changeset
  2203
    CleanupStack::PushL( array );
hgs
parents:
diff changeset
  2204
    array->AppendL( timeString );
hgs
parents:
diff changeset
  2205
    array->AppendL( dateString );
hgs
parents:
diff changeset
  2206
    HBufC* expiryString = 
hgs
parents:
diff changeset
  2207
        StringLoader::LoadLC( R_NOTVIEWER_VALUE_EXPIRES, *array, iCoeEnv );
hgs
parents:
diff changeset
  2208
    AddItemL( label->Des( ), expiryString->Des( ) );
hgs
parents:
diff changeset
  2209
    CleanupStack::PopAndDestroy( expiryString );
hgs
parents:
diff changeset
  2210
    CleanupStack::PopAndDestroy( array );
hgs
parents:
diff changeset
  2211
    CleanupStack::PopAndDestroy( label );        
hgs
parents:
diff changeset
  2212
    LOGTEXT(_L8("NotViewerAppUi: AddExpiry end"));
hgs
parents:
diff changeset
  2213
    }
hgs
parents:
diff changeset
  2214
hgs
parents:
diff changeset
  2215
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2216
// AddSizeFieldL
hgs
parents:
diff changeset
  2217
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2218
void CNotViewerAppUi::AddSizeFieldL( )
hgs
parents:
diff changeset
  2219
    {
hgs
parents:
diff changeset
  2220
    LOGTEXT(_L8("NotViewerAppUi: AddSize start"));
hgs
parents:
diff changeset
  2221
    TInt size = iMtm->MessageTransferSize( );
hgs
parents:
diff changeset
  2222
hgs
parents:
diff changeset
  2223
    TInt maxSize = static_cast<TInt>( iMtm->MmsSettings().MaximumReceiveSize( ) );
hgs
parents:
diff changeset
  2224
    if( maxSize > 0 )
hgs
parents:
diff changeset
  2225
        {
hgs
parents:
diff changeset
  2226
        if( size > maxSize )
hgs
parents:
diff changeset
  2227
            {
hgs
parents:
diff changeset
  2228
            size = maxSize;
hgs
parents:
diff changeset
  2229
            }
hgs
parents:
diff changeset
  2230
        }
hgs
parents:
diff changeset
  2231
hgs
parents:
diff changeset
  2232
    HBufC* label = StringLoader::LoadLC( R_NOTVIEWER_LABEL_SIZE );
hgs
parents:
diff changeset
  2233
hgs
parents:
diff changeset
  2234
    TBuf<20> sizeString;
hgs
parents:
diff changeset
  2235
hgs
parents:
diff changeset
  2236
    MsgAttachmentUtils::FileSizeToStringL( sizeString, size, ETrue );
hgs
parents:
diff changeset
  2237
hgs
parents:
diff changeset
  2238
    sizeString.Trim();
hgs
parents:
diff changeset
  2239
hgs
parents:
diff changeset
  2240
    AddItemL( label->Des( ), sizeString );
hgs
parents:
diff changeset
  2241
    CleanupStack::PopAndDestroy( label );
hgs
parents:
diff changeset
  2242
    LOGTEXT(_L8("NotViewerAppUi: AddSize end"));
hgs
parents:
diff changeset
  2243
    }
hgs
parents:
diff changeset
  2244
hgs
parents:
diff changeset
  2245
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2246
// AddClassFieldL
hgs
parents:
diff changeset
  2247
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2248
void CNotViewerAppUi::AddClassFieldL( )
hgs
parents:
diff changeset
  2249
    {
hgs
parents:
diff changeset
  2250
    LOGTEXT(_L8("NotViewerAppUi: AddClass start"));
hgs
parents:
diff changeset
  2251
    TInt msgClass = iMtm->MessageClass( );
hgs
parents:
diff changeset
  2252
    TInt resourceId;
hgs
parents:
diff changeset
  2253
    switch( msgClass )
hgs
parents:
diff changeset
  2254
        {
hgs
parents:
diff changeset
  2255
        case EMmsClassPersonal:
hgs
parents:
diff changeset
  2256
            {
hgs
parents:
diff changeset
  2257
            resourceId = R_NOTVIEWER_VALUE_CLASS_PERSONAL;
hgs
parents:
diff changeset
  2258
            break;
hgs
parents:
diff changeset
  2259
            }
hgs
parents:
diff changeset
  2260
        case EMmsClassAdvertisement:
hgs
parents:
diff changeset
  2261
            {
hgs
parents:
diff changeset
  2262
            resourceId = R_NOTVIEWER_VALUE_CLASS_ADVERTISEMENT;
hgs
parents:
diff changeset
  2263
            break;
hgs
parents:
diff changeset
  2264
            }
hgs
parents:
diff changeset
  2265
        case EMmsClassInformational:
hgs
parents:
diff changeset
  2266
            {
hgs
parents:
diff changeset
  2267
            resourceId = R_NOTVIEWER_VALUE_CLASS_INFORMATIVE;
hgs
parents:
diff changeset
  2268
            break;
hgs
parents:
diff changeset
  2269
            }
hgs
parents:
diff changeset
  2270
        default:
hgs
parents:
diff changeset
  2271
            {   // In case no class is returned (0), don't add the field
hgs
parents:
diff changeset
  2272
            return;
hgs
parents:
diff changeset
  2273
            }
hgs
parents:
diff changeset
  2274
        }
hgs
parents:
diff changeset
  2275
    HBufC* label = StringLoader::LoadLC( R_NOTVIEWER_LABEL_CLASS );
hgs
parents:
diff changeset
  2276
    HBufC* value = StringLoader::LoadLC( resourceId );
hgs
parents:
diff changeset
  2277
    AddItemL( label->Des( ), value->Des( ) );
hgs
parents:
diff changeset
  2278
    CleanupStack::PopAndDestroy( value );
hgs
parents:
diff changeset
  2279
    CleanupStack::PopAndDestroy( label );
hgs
parents:
diff changeset
  2280
    LOGTEXT(_L8("NotViewerAppUi: AddClass end"));
hgs
parents:
diff changeset
  2281
    }
hgs
parents:
diff changeset
  2282
hgs
parents:
diff changeset
  2283
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2284
// AddPriorityFieldL
hgs
parents:
diff changeset
  2285
// -------------------------------------------------------------
hgs
parents:
diff changeset
  2286
void CNotViewerAppUi::AddPriorityFieldL( )
hgs
parents:
diff changeset
  2287
    {
hgs
parents:
diff changeset
  2288
    LOGTEXT(_L8("NotViewerAppUi: AddPriority start"));
hgs
parents:
diff changeset
  2289
    TInt msgPri = iMtm->MessagePriority( );
hgs
parents:
diff changeset
  2290
    TInt resourceId;
hgs
parents:
diff changeset
  2291
    switch( msgPri )
hgs
parents:
diff changeset
  2292
        {
hgs
parents:
diff changeset
  2293
        case EMmsPriorityLow:
hgs
parents:
diff changeset
  2294
            {
hgs
parents:
diff changeset
  2295
            resourceId = R_NOTVIEWER_VALUE_PRIORITY_LOW;
hgs
parents:
diff changeset
  2296
            break;
hgs
parents:
diff changeset
  2297
            }
hgs
parents:
diff changeset
  2298
        case EMmsPriorityHigh:
hgs
parents:
diff changeset
  2299
            {
hgs
parents:
diff changeset
  2300
            resourceId = R_NOTVIEWER_VALUE_PRIORITY_HIGH;
hgs
parents:
diff changeset
  2301
            break;
hgs
parents:
diff changeset
  2302
            }
hgs
parents:
diff changeset
  2303
        case EMmsPriorityNormal:
hgs
parents:
diff changeset
  2304
            {
hgs
parents:
diff changeset
  2305
            resourceId = R_NOTVIEWER_VALUE_PRIORITY_NORMAL;
hgs
parents:
diff changeset
  2306
            break;
hgs
parents:
diff changeset
  2307
            }
hgs
parents:
diff changeset
  2308
        default:
hgs
parents:
diff changeset
  2309
            {   // In case no priority is returned (0), don't add the field
hgs
parents:
diff changeset
  2310
            return;
hgs
parents:
diff changeset
  2311
            }
hgs
parents:
diff changeset
  2312
        }
hgs
parents:
diff changeset
  2313
    HBufC* label = StringLoader::LoadLC( R_NOTVIEWER_LABEL_PRIORITY );
hgs
parents:
diff changeset
  2314
    HBufC* value = StringLoader::LoadLC( resourceId );
hgs
parents:
diff changeset
  2315
    AddItemL( label->Des( ), value->Des( ) );
hgs
parents:
diff changeset
  2316
    CleanupStack::PopAndDestroy( value );
hgs
parents:
diff changeset
  2317
    CleanupStack::PopAndDestroy( label );
hgs
parents:
diff changeset
  2318
    LOGTEXT(_L8("NotViewerAppUi: AddPriority end"));
hgs
parents:
diff changeset
  2319
    }
hgs
parents:
diff changeset
  2320
hgs
parents:
diff changeset
  2321
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2322
// CNotViewerAppUi::ShowConfirmationQueryL
hgs
parents:
diff changeset
  2323
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2324
//
hgs
parents:
diff changeset
  2325
TInt CNotViewerAppUi::ShowConfirmationQueryL( TInt aResourceId ) const
hgs
parents:
diff changeset
  2326
    {
hgs
parents:
diff changeset
  2327
    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  2328
    HBufC* prompt = StringLoader::LoadLC( aResourceId, iCoeEnv );
hgs
parents:
diff changeset
  2329
    TInt retVal = dlg->ExecuteLD( R_NOTVIEWER_CONFIRMATION_QUERY, *prompt );
hgs
parents:
diff changeset
  2330
    CleanupStack::PopAndDestroy( prompt );
hgs
parents:
diff changeset
  2331
    return retVal;
hgs
parents:
diff changeset
  2332
    }
hgs
parents:
diff changeset
  2333
hgs
parents:
diff changeset
  2334
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2335
// CNotViewerAppUi::ShowInformationNoteL
hgs
parents:
diff changeset
  2336
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2337
//
hgs
parents:
diff changeset
  2338
void CNotViewerAppUi::ShowInformationNoteL( TInt aResourceID, TBool aWaiting )
hgs
parents:
diff changeset
  2339
    {
hgs
parents:
diff changeset
  2340
    HBufC* string = NULL;
hgs
parents:
diff changeset
  2341
    string = StringLoader::LoadLC( aResourceID, iCoeEnv );
hgs
parents:
diff changeset
  2342
hgs
parents:
diff changeset
  2343
    CAknInformationNote* note = new ( ELeave )
hgs
parents:
diff changeset
  2344
        CAknInformationNote( aWaiting );
hgs
parents:
diff changeset
  2345
    note->ExecuteLD( *string );
hgs
parents:
diff changeset
  2346
hgs
parents:
diff changeset
  2347
    CleanupStack::PopAndDestroy(); //string
hgs
parents:
diff changeset
  2348
    }
hgs
parents:
diff changeset
  2349
hgs
parents:
diff changeset
  2350
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2351
// CNotViewerAppUi::AddressControl
hgs
parents:
diff changeset
  2352
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2353
//
hgs
parents:
diff changeset
  2354
CMsgAddressControl* CNotViewerAppUi::AddressControl( )
hgs
parents:
diff changeset
  2355
    {
hgs
parents:
diff changeset
  2356
    TInt controlType = 0;
hgs
parents:
diff changeset
  2357
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  2358
        {   // We are in notification mode
hgs
parents:
diff changeset
  2359
        controlType = EMsgComponentIdFrom;
hgs
parents:
diff changeset
  2360
        }
hgs
parents:
diff changeset
  2361
    else
hgs
parents:
diff changeset
  2362
        {   // we are in the ForwReq mode
hgs
parents:
diff changeset
  2363
        controlType = EMsgComponentIdTo;
hgs
parents:
diff changeset
  2364
        }
hgs
parents:
diff changeset
  2365
    return static_cast<CMsgAddressControl*>( iView->ControlById( controlType ) );
hgs
parents:
diff changeset
  2366
    }
hgs
parents:
diff changeset
  2367
hgs
parents:
diff changeset
  2368
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2369
// CNotViewerAppUi::EntryChangedL
hgs
parents:
diff changeset
  2370
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2371
//
hgs
parents:
diff changeset
  2372
void CNotViewerAppUi::EntryChangedL( )
hgs
parents:
diff changeset
  2373
    {
hgs
parents:
diff changeset
  2374
    LOGTEXT(_L8("NotViewerAppUi: EntryChangedL start"));
hgs
parents:
diff changeset
  2375
    if ( !Document()->IsLaunched() )
hgs
parents:
diff changeset
  2376
        {
hgs
parents:
diff changeset
  2377
        return;
hgs
parents:
diff changeset
  2378
        }
hgs
parents:
diff changeset
  2379
hgs
parents:
diff changeset
  2380
    TNotViewerStatus status = MessageStatus( );
hgs
parents:
diff changeset
  2381
    if( iMsgStatus != status )
hgs
parents:
diff changeset
  2382
        {
hgs
parents:
diff changeset
  2383
        iMsgStatus = status;
hgs
parents:
diff changeset
  2384
hgs
parents:
diff changeset
  2385
        iFlags &= ~ENotViewerIsNotFirstItem;
hgs
parents:
diff changeset
  2386
    
hgs
parents:
diff changeset
  2387
        CMsgBaseControl* control = iView->RemoveControlL( EMsgComponentIdBody );
hgs
parents:
diff changeset
  2388
        delete control;
hgs
parents:
diff changeset
  2389
hgs
parents:
diff changeset
  2390
        CMsgBodyControl* bodyC = CMsgBodyControl::NewL(iView);
hgs
parents:
diff changeset
  2391
        iView->AddControlL(bodyC, EMsgComponentIdBody, EMsgAppendControl, EMsgBody);
hgs
parents:
diff changeset
  2392
hgs
parents:
diff changeset
  2393
        AddMessageFieldL( );
hgs
parents:
diff changeset
  2394
        AddSubjectFieldL( );
hgs
parents:
diff changeset
  2395
        AddTextFieldL( );
hgs
parents:
diff changeset
  2396
        AddSizeFieldL( );
hgs
parents:
diff changeset
  2397
        if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  2398
            { // We are in the Viewer so lets add expiry, too
hgs
parents:
diff changeset
  2399
            AddExpiryFieldL( );
hgs
parents:
diff changeset
  2400
            }
hgs
parents:
diff changeset
  2401
        AddClassFieldL( );
hgs
parents:
diff changeset
  2402
        AddPriorityFieldL( );
hgs
parents:
diff changeset
  2403
hgs
parents:
diff changeset
  2404
        // without this editor control does not become properly visible
hgs
parents:
diff changeset
  2405
        bodyC->Editor( ).NotifyNewDocumentL( );
hgs
parents:
diff changeset
  2406
        }
hgs
parents:
diff changeset
  2407
hgs
parents:
diff changeset
  2408
    // update toolbar
hgs
parents:
diff changeset
  2409
    if(  iToolbar )   //check to be provided for non-touch devices.
hgs
parents:
diff changeset
  2410
        {
hgs
parents:
diff changeset
  2411
        CNotViewerDocument* doc = Document( );
hgs
parents:
diff changeset
  2412
        CNotMtmUiData* uiData = &doc->MtmUiDataL( );
hgs
parents:
diff changeset
  2413
        TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
  2414
hgs
parents:
diff changeset
  2415
	    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  2416
	        {
hgs
parents:
diff changeset
  2417
	        // return value 0=> OK, !=0 => NOK
hgs
parents:
diff changeset
  2418
            if( uiData->OperationSupportedL( KMtmUiFunctionFetchMMS, entry ) )
hgs
parents:
diff changeset
  2419
                {
hgs
parents:
diff changeset
  2420
                iToolbar->SetItemDimmed(    ENotViewerToolbarRetrieve,
hgs
parents:
diff changeset
  2421
                                            ETrue,
hgs
parents:
diff changeset
  2422
                                            ETrue );
hgs
parents:
diff changeset
  2423
                }
hgs
parents:
diff changeset
  2424
            else
hgs
parents:
diff changeset
  2425
                {                        
hgs
parents:
diff changeset
  2426
                iToolbar->SetItemDimmed(    ENotViewerToolbarRetrieve,
hgs
parents:
diff changeset
  2427
                                            EFalse,
hgs
parents:
diff changeset
  2428
                                            ETrue );
hgs
parents:
diff changeset
  2429
                }
hgs
parents:
diff changeset
  2430
	        }
hgs
parents:
diff changeset
  2431
        }
hgs
parents:
diff changeset
  2432
hgs
parents:
diff changeset
  2433
    LOGTEXT(_L8("NotViewerAppUi: EntryChangedL end"));
hgs
parents:
diff changeset
  2434
    }
hgs
parents:
diff changeset
  2435
hgs
parents:
diff changeset
  2436
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2437
// CNotViewerAppUi::UpdateTitlePaneL
hgs
parents:
diff changeset
  2438
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2439
//
hgs
parents:
diff changeset
  2440
void CNotViewerAppUi::UpdateTitlePaneL( )
hgs
parents:
diff changeset
  2441
    {
hgs
parents:
diff changeset
  2442
    LOGTEXT(_L8("NotViewerAppUi: UpdateTitle"));
hgs
parents:
diff changeset
  2443
    HBufC*  str = StringLoader::LoadLC( R_NOTVIEWER_TITLE_FWD_RQST, iCoeEnv );
hgs
parents:
diff changeset
  2444
    CAknTitlePane* title = static_cast<CAknTitlePane*>
hgs
parents:
diff changeset
  2445
        ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
hgs
parents:
diff changeset
  2446
    title->SetTextL( str->Des( ) );
hgs
parents:
diff changeset
  2447
    CleanupStack::PopAndDestroy(); //str
hgs
parents:
diff changeset
  2448
    if( !iMtm->Entry( ).Entry( ).ReadOnly() )
hgs
parents:
diff changeset
  2449
        { // We have a new unsent FR, change CBA too
hgs
parents:
diff changeset
  2450
        Cba()->SetCommandSetL( R_NOTVIEWER_SOFTKEYS_FORWARD_OPTIONS_CANCEL__CONTEXTOPTIONS );
hgs
parents:
diff changeset
  2451
        Cba()->DrawNow();
hgs
parents:
diff changeset
  2452
        }
hgs
parents:
diff changeset
  2453
    }
hgs
parents:
diff changeset
  2454
hgs
parents:
diff changeset
  2455
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2456
// CNotViewerAppUi::MessageStatus
hgs
parents:
diff changeset
  2457
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2458
//
hgs
parents:
diff changeset
  2459
TNotViewerStatus CNotViewerAppUi::MessageStatus( ) const
hgs
parents:
diff changeset
  2460
    {
hgs
parents:
diff changeset
  2461
    TNotViewerStatus status = ENotViewerStatusNull; 
hgs
parents:
diff changeset
  2462
    TTime currentTime;
hgs
parents:
diff changeset
  2463
    currentTime.HomeTime( );
hgs
parents:
diff changeset
  2464
    TTime expiryTime = iMtm->ExpiryDate( );
hgs
parents:
diff changeset
  2465
	TLocale locale;
hgs
parents:
diff changeset
  2466
    expiryTime += locale.UniversalTimeOffset();
hgs
parents:
diff changeset
  2467
	if (locale.QueryHomeHasDaylightSavingOn())          
hgs
parents:
diff changeset
  2468
		{
hgs
parents:
diff changeset
  2469
		TTimeIntervalHours daylightSaving(1);          
hgs
parents:
diff changeset
  2470
		expiryTime += daylightSaving;
hgs
parents:
diff changeset
  2471
		}
hgs
parents:
diff changeset
  2472
hgs
parents:
diff changeset
  2473
    TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
  2474
hgs
parents:
diff changeset
  2475
    if( ( entry.iMtmData1 & KMmsMessageTypeMask ) == KMmsMessageMNotificationInd ) // Notification
hgs
parents:
diff changeset
  2476
        {
hgs
parents:
diff changeset
  2477
        if(     !( entry.iMtmData2 & KMmsOperationForward ) 
hgs
parents:
diff changeset
  2478
            &&   ( entry.iMtmData2 & KMmsOperationFetch )
hgs
parents:
diff changeset
  2479
            &&  !( entry.iMtmData2 & KMmsOperationOngoing )  // It's !ongoing
hgs
parents:
diff changeset
  2480
            &&   ( entry.iMtmData2 & KMmsOperationFinished ) // It's finished
hgs
parents:
diff changeset
  2481
            &&   ( entry.iMtmData2 & KMmsOperationResult || 
hgs
parents:
diff changeset
  2482
                   entry.iError ) ) // There's error code
hgs
parents:
diff changeset
  2483
            { // Fetch has been failed
hgs
parents:
diff changeset
  2484
            status = ENotViewerStatusFailed;
hgs
parents:
diff changeset
  2485
            }
hgs
parents:
diff changeset
  2486
        else if( currentTime > expiryTime )
hgs
parents:
diff changeset
  2487
            {
hgs
parents:
diff changeset
  2488
            status = ENotViewerStatusExpired;
hgs
parents:
diff changeset
  2489
            }
hgs
parents:
diff changeset
  2490
        else if( ( entry.iMtmData2 & KMmsOperationForward )     // It's forward
hgs
parents:
diff changeset
  2491
            &&  !( entry.iMtmData2 & KMmsOperationFetch )   // It's not delete
hgs
parents:
diff changeset
  2492
            &&   ( entry.iMtmData2 & KMmsOperationOngoing )     // It's ongoing
hgs
parents:
diff changeset
  2493
            &&  !( entry.iMtmData2 & KMmsOperationFinished ) )    // It's not finished
hgs
parents:
diff changeset
  2494
            { // Message is being forwarded
hgs
parents:
diff changeset
  2495
            status = ENotViewerStatusForwarding;
hgs
parents:
diff changeset
  2496
            }
hgs
parents:
diff changeset
  2497
        else if( ( entry.iMtmData2 & KMmsOperationForward )     // It's forward
hgs
parents:
diff changeset
  2498
            &&  !( entry.iMtmData2 & KMmsOperationFetch )   // It's not delete
hgs
parents:
diff changeset
  2499
            &&  !( entry.iMtmData2 & KMmsOperationOngoing )     // It's !ongoing
hgs
parents:
diff changeset
  2500
            &&   ( entry.iMtmData2 & KMmsOperationFinished )    // It's finished
hgs
parents:
diff changeset
  2501
            &&  !( entry.iMtmData2 & KMmsOperationResult ) )    // There was no error
hgs
parents:
diff changeset
  2502
            { // Message has been forwarded
hgs
parents:
diff changeset
  2503
            status = ENotViewerStatusForwarded;
hgs
parents:
diff changeset
  2504
            }
hgs
parents:
diff changeset
  2505
        else 
hgs
parents:
diff changeset
  2506
            {   // Normal waiting state
hgs
parents:
diff changeset
  2507
            status = ENotViewerStatusWaiting;
hgs
parents:
diff changeset
  2508
            }
hgs
parents:
diff changeset
  2509
        }
hgs
parents:
diff changeset
  2510
    
hgs
parents:
diff changeset
  2511
    return status;
hgs
parents:
diff changeset
  2512
    }
hgs
parents:
diff changeset
  2513
hgs
parents:
diff changeset
  2514
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2515
// CNotViewerAppUi::GetTypeL
hgs
parents:
diff changeset
  2516
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2517
//
hgs
parents:
diff changeset
  2518
void CNotViewerAppUi::GetTypeL( )
hgs
parents:
diff changeset
  2519
    {
hgs
parents:
diff changeset
  2520
    TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
  2521
hgs
parents:
diff changeset
  2522
    if( ( entry.iMtmData1 & KMmsMessageTypeMask ) == KMmsMessageMNotificationInd ) // Notification
hgs
parents:
diff changeset
  2523
        {
hgs
parents:
diff changeset
  2524
        iFlags |= ENotViewerIsNotification;
hgs
parents:
diff changeset
  2525
        }
hgs
parents:
diff changeset
  2526
    else if( ( entry.iMtmData1 & KMmsMessageTypeMask ) == KMmsMessageForwardReq ) // Forward Request
hgs
parents:
diff changeset
  2527
        {
hgs
parents:
diff changeset
  2528
        iFlags &= ~ENotViewerIsNotification;
hgs
parents:
diff changeset
  2529
        }
hgs
parents:
diff changeset
  2530
    else
hgs
parents:
diff changeset
  2531
        {
hgs
parents:
diff changeset
  2532
        User::Leave( KErrNotSupported); // Unsupported msg type
hgs
parents:
diff changeset
  2533
        }
hgs
parents:
diff changeset
  2534
    iMsgStatus = MessageStatus( );
hgs
parents:
diff changeset
  2535
    }
hgs
parents:
diff changeset
  2536
hgs
parents:
diff changeset
  2537
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2538
// CNotViewerAppUi::HandleNotifyInt
hgs
parents:
diff changeset
  2539
//
hgs
parents:
diff changeset
  2540
// Notification from central repository
hgs
parents:
diff changeset
  2541
//
hgs
parents:
diff changeset
  2542
// There is no need to check aId as we are listening events 
hgs
parents:
diff changeset
  2543
// only from one key
hgs
parents:
diff changeset
  2544
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2545
//
hgs
parents:
diff changeset
  2546
void CNotViewerAppUi::HandleNotifyInt( TUint32 /*aId*/, TInt aNewValue )
hgs
parents:
diff changeset
  2547
    {    
hgs
parents:
diff changeset
  2548
    LOGTEXT(_L8("NotViewerAppUi: HandleNotifyInt"));
hgs
parents:
diff changeset
  2549
    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  2550
        {
hgs
parents:
diff changeset
  2551
        if ( aNewValue == 0 )
hgs
parents:
diff changeset
  2552
            {
hgs
parents:
diff changeset
  2553
            iFlags &= ~ENotViewerAutoFind;
hgs
parents:
diff changeset
  2554
            }
hgs
parents:
diff changeset
  2555
        else
hgs
parents:
diff changeset
  2556
            {
hgs
parents:
diff changeset
  2557
            iFlags |= ENotViewerAutoFind;
hgs
parents:
diff changeset
  2558
            }
hgs
parents:
diff changeset
  2559
        TRAP_IGNORE( SetFindModeL( iFlags & ENotViewerAutoFind ) );
hgs
parents:
diff changeset
  2560
        }
hgs
parents:
diff changeset
  2561
    }
hgs
parents:
diff changeset
  2562
hgs
parents:
diff changeset
  2563
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2564
// CNotViewerAppUi::HandleNotifyGeneric
hgs
parents:
diff changeset
  2565
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2566
//
hgs
parents:
diff changeset
  2567
void CNotViewerAppUi::HandleNotifyGeneric( TUint32 /*aId*/ )
hgs
parents:
diff changeset
  2568
    {
hgs
parents:
diff changeset
  2569
    //Nothing.
hgs
parents:
diff changeset
  2570
    }
hgs
parents:
diff changeset
  2571
    
hgs
parents:
diff changeset
  2572
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2573
// CNotViewerAppUi::HandleNotifyError
hgs
parents:
diff changeset
  2574
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2575
//
hgs
parents:
diff changeset
  2576
void CNotViewerAppUi::HandleNotifyError( TUint32 /*aId*/, TInt /*error*/, CCenRepNotifyHandler* /*aHandler*/ )
hgs
parents:
diff changeset
  2577
    {
hgs
parents:
diff changeset
  2578
    //Nothing.
hgs
parents:
diff changeset
  2579
    }
hgs
parents:
diff changeset
  2580
  
hgs
parents:
diff changeset
  2581
//  
hgs
parents:
diff changeset
  2582
// NOTICE:
hgs
parents:
diff changeset
  2583
//
hgs
parents:
diff changeset
  2584
// Startup observer moved to own class because Publish & Subscribe
hgs
parents:
diff changeset
  2585
// requires an active object for event handling.
hgs
parents:
diff changeset
  2586
//
hgs
parents:
diff changeset
  2587
hgs
parents:
diff changeset
  2588
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2589
// CNotViewerAppUi::SetFindModeL
hgs
parents:
diff changeset
  2590
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2591
//
hgs
parents:
diff changeset
  2592
void CNotViewerAppUi::SetFindModeL( TBool aEnable )
hgs
parents:
diff changeset
  2593
    {
hgs
parents:
diff changeset
  2594
    if ( iView )
hgs
parents:
diff changeset
  2595
        {
hgs
parents:
diff changeset
  2596
        if ( iView->ItemFinder() )
hgs
parents:
diff changeset
  2597
            {
hgs
parents:
diff changeset
  2598
            TInt findMode = aEnable ?
hgs
parents:
diff changeset
  2599
                CItemFinder::EPhoneNumber |
hgs
parents:
diff changeset
  2600
                CItemFinder::EUrlAddress |
hgs
parents:
diff changeset
  2601
                CItemFinder::EEmailAddress :
hgs
parents:
diff changeset
  2602
                CItemFinder::ENoneSelected;
hgs
parents:
diff changeset
  2603
            iView->ItemFinder()->SetFindModeL( findMode );
hgs
parents:
diff changeset
  2604
            }
hgs
parents:
diff changeset
  2605
        CMsgBaseControl* fromControl = iView->ControlById( EMsgComponentIdFrom );
hgs
parents:
diff changeset
  2606
        if ( fromControl && iMtm->Sender().Length() )
hgs
parents:
diff changeset
  2607
            {
hgs
parents:
diff changeset
  2608
            static_cast<CMsgAddressControl*>( fromControl )
hgs
parents:
diff changeset
  2609
                ->SetAddressFieldAutoHighlight( aEnable );
hgs
parents:
diff changeset
  2610
            }
hgs
parents:
diff changeset
  2611
        }
hgs
parents:
diff changeset
  2612
    }
hgs
parents:
diff changeset
  2613
hgs
parents:
diff changeset
  2614
// ----------------------------------------------------
hgs
parents:
diff changeset
  2615
// CNotViewerAppUi::OpCompleted
hgs
parents:
diff changeset
  2616
// ----------------------------------------------------
hgs
parents:
diff changeset
  2617
//
hgs
parents:
diff changeset
  2618
void CNotViewerAppUi::OpCompleted(
hgs
parents:
diff changeset
  2619
    CMsvSingleOpWatcher& aOpWatcher,
hgs
parents:
diff changeset
  2620
    TInt aCompletionCode )
hgs
parents:
diff changeset
  2621
    {
hgs
parents:
diff changeset
  2622
    LOGTEXT(_L8("NotViewerAppUi: OpCompleted start"));
hgs
parents:
diff changeset
  2623
    CMsvOperation* op=&aOpWatcher.Operation();
hgs
parents:
diff changeset
  2624
hgs
parents:
diff changeset
  2625
    if( iOperation )
hgs
parents:
diff changeset
  2626
        {
hgs
parents:
diff changeset
  2627
        if( iOperation->Operation( ).Id( ) == op->Id( ) )
hgs
parents:
diff changeset
  2628
            {
hgs
parents:
diff changeset
  2629
            delete iOperation;
hgs
parents:
diff changeset
  2630
            iOperation = NULL;
hgs
parents:
diff changeset
  2631
            }
hgs
parents:
diff changeset
  2632
        else
hgs
parents:
diff changeset
  2633
            {
hgs
parents:
diff changeset
  2634
            // This should never happen ie. unrecognised operation completed
hgs
parents:
diff changeset
  2635
            return;
hgs
parents:
diff changeset
  2636
            }
hgs
parents:
diff changeset
  2637
        }
hgs
parents:
diff changeset
  2638
    else
hgs
parents:
diff changeset
  2639
        {
hgs
parents:
diff changeset
  2640
        // This should never happen ie. unrecognised operation completed
hgs
parents:
diff changeset
  2641
        return;
hgs
parents:
diff changeset
  2642
        }
hgs
parents:
diff changeset
  2643
hgs
parents:
diff changeset
  2644
    if ( aCompletionCode == KErrCancel )
hgs
parents:
diff changeset
  2645
        {
hgs
parents:
diff changeset
  2646
        LOGTEXT(_L8("NotViewerAppUi: OpCompleted end3"));
hgs
parents:
diff changeset
  2647
        return;
hgs
parents:
diff changeset
  2648
        }
hgs
parents:
diff changeset
  2649
hgs
parents:
diff changeset
  2650
    TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
  2651
hgs
parents:
diff changeset
  2652
    if(      ( entry.iMtmData2 & KMmsOperationFetch )   // Fetch + forward
hgs
parents:
diff changeset
  2653
        &&   ( entry.iMtmData2 & KMmsOperationForward ) // == DELETE!
hgs
parents:
diff changeset
  2654
        &&   ( entry.iMtmData2 & KMmsOperationFinished ) // It's finished
hgs
parents:
diff changeset
  2655
        &&   ( entry.iMtmData2 & KMmsOperationResult ) ) // Error code
hgs
parents:
diff changeset
  2656
        {
hgs
parents:
diff changeset
  2657
        // Error note here!
hgs
parents:
diff changeset
  2658
        TRAP_IGNORE( ShowInformationNoteL( R_NOTVIEWER_REMOTE_DELETE_FAILED, EFalse ) );
hgs
parents:
diff changeset
  2659
        // Ignore err
hgs
parents:
diff changeset
  2660
        }
hgs
parents:
diff changeset
  2661
    else
hgs
parents:
diff changeset
  2662
        {
hgs
parents:
diff changeset
  2663
        LOGTEXT(_L8("NotViewerAppUi: OpCompleted: First delete successful"));
hgs
parents:
diff changeset
  2664
        // If also local chosen, call that and exit
hgs
parents:
diff changeset
  2665
        // else show completed note
hgs
parents:
diff changeset
  2666
        if( iFlags & ENotViewerDeleteBoth )
hgs
parents:
diff changeset
  2667
            { // Deletion was succesfull, but also local delete still needed
hgs
parents:
diff changeset
  2668
            TRAPD( err, DoDeleteOpCompletedL( ) );
hgs
parents:
diff changeset
  2669
            if( err )
hgs
parents:
diff changeset
  2670
                { // We may not leave as we are in non-leaving function
hgs
parents:
diff changeset
  2671
                delete iAbsorber;
hgs
parents:
diff changeset
  2672
                iAbsorber = NULL;
hgs
parents:
diff changeset
  2673
                }
hgs
parents:
diff changeset
  2674
            LOGTEXT(_L8("NotViewerAppUi: OpCompleted end2"));
hgs
parents:
diff changeset
  2675
            return;
hgs
parents:
diff changeset
  2676
            }
hgs
parents:
diff changeset
  2677
        else
hgs
parents:
diff changeset
  2678
            {
hgs
parents:
diff changeset
  2679
            // MMBox Deletion was succesfull
hgs
parents:
diff changeset
  2680
            TRAP_IGNORE( ShowInformationNoteL( R_NOTVIEWER_REMOTE_DELETED, EFalse ) );
hgs
parents:
diff changeset
  2681
            // Ignore err 
hgs
parents:
diff changeset
  2682
            }
hgs
parents:
diff changeset
  2683
        }
hgs
parents:
diff changeset
  2684
    LOGTEXT(_L8("NotViewerAppUi: OpCompleted end"));
hgs
parents:
diff changeset
  2685
    }
hgs
parents:
diff changeset
  2686
hgs
parents:
diff changeset
  2687
// ----------------------------------------------------
hgs
parents:
diff changeset
  2688
// CNotViewerAppUi::DoDeleteOpCompletedL
hgs
parents:
diff changeset
  2689
// ----------------------------------------------------
hgs
parents:
diff changeset
  2690
//
hgs
parents:
diff changeset
  2691
void CNotViewerAppUi::DoDeleteOpCompletedL( )
hgs
parents:
diff changeset
  2692
    {
hgs
parents:
diff changeset
  2693
    LOGTEXT(_L8("NotViewerAppUi: DoDeleteOpCompletedL start"));
hgs
parents:
diff changeset
  2694
    iAbsorber = CAknInputBlock::NewLC( );
hgs
parents:
diff changeset
  2695
    CleanupStack::Pop(); // Pop the absorber
hgs
parents:
diff changeset
  2696
hgs
parents:
diff changeset
  2697
    CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection;
hgs
parents:
diff changeset
  2698
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  2699
    selection->AppendL( iMtm->Entry().EntryId() );
hgs
parents:
diff changeset
  2700
hgs
parents:
diff changeset
  2701
    CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
hgs
parents:
diff changeset
  2702
hgs
parents:
diff changeset
  2703
    CMsvOperation* deleteop = iMtm->DeleteNotificationL(
hgs
parents:
diff changeset
  2704
                        *selection,
hgs
parents:
diff changeset
  2705
                        EMmsDeleteNotificationOnly,
hgs
parents:
diff changeset
  2706
                        wait->iStatus );
hgs
parents:
diff changeset
  2707
hgs
parents:
diff changeset
  2708
    if( !deleteop )   // Check this just in case
hgs
parents:
diff changeset
  2709
        {  
hgs
parents:
diff changeset
  2710
        CleanupStack::PopAndDestroy( 2 ); // wait, sel
hgs
parents:
diff changeset
  2711
        return; 
hgs
parents:
diff changeset
  2712
        }
hgs
parents:
diff changeset
  2713
hgs
parents:
diff changeset
  2714
    CleanupStack::PushL( deleteop );
hgs
parents:
diff changeset
  2715
    wait->Start();
hgs
parents:
diff changeset
  2716
hgs
parents:
diff changeset
  2717
    if( wait->iStatus != KErrNone )
hgs
parents:
diff changeset
  2718
        {
hgs
parents:
diff changeset
  2719
        CleanupStack::PopAndDestroy( 3 ); // op, wait, sel
hgs
parents:
diff changeset
  2720
        return;
hgs
parents:
diff changeset
  2721
        }
hgs
parents:
diff changeset
  2722
hgs
parents:
diff changeset
  2723
    // -> no error, we can exit the viewer
hgs
parents:
diff changeset
  2724
    CleanupStack::PopAndDestroy( 3 ); // op, wait, sel
hgs
parents:
diff changeset
  2725
hgs
parents:
diff changeset
  2726
	DoDelayedExitL( 0 );
hgs
parents:
diff changeset
  2727
    LOGTEXT(_L8("NotViewerAppUi: DoDeleteOpCompleted end"));
hgs
parents:
diff changeset
  2728
    return;
hgs
parents:
diff changeset
  2729
    }
hgs
parents:
diff changeset
  2730
hgs
parents:
diff changeset
  2731
//--------------------------------
hgs
parents:
diff changeset
  2732
// DecodeProgress
hgs
parents:
diff changeset
  2733
//--------------------------------
hgs
parents:
diff changeset
  2734
TInt CNotViewerAppUi::DecodeProgress(
hgs
parents:
diff changeset
  2735
    const TDesC8& /*aProgress*/, 
hgs
parents:
diff changeset
  2736
    TBuf<CBaseMtmUi::EProgressStringMaxLen>& aReturnString, 
hgs
parents:
diff changeset
  2737
    TInt& aTotalEntryCount, 
hgs
parents:
diff changeset
  2738
    TInt& aEntriesDone,
hgs
parents:
diff changeset
  2739
    TInt& aCurrentEntrySize, 
hgs
parents:
diff changeset
  2740
    TInt& aCurrentBytesTrans, 
hgs
parents:
diff changeset
  2741
    TBool /*aInternal*/ )
hgs
parents:
diff changeset
  2742
    {
hgs
parents:
diff changeset
  2743
    aCurrentEntrySize = 0;
hgs
parents:
diff changeset
  2744
    aCurrentBytesTrans = 0;   
hgs
parents:
diff changeset
  2745
    aEntriesDone = 0;
hgs
parents:
diff changeset
  2746
    aTotalEntryCount = 0;
hgs
parents:
diff changeset
  2747
    StringLoader::Load( aReturnString,
hgs
parents:
diff changeset
  2748
                        R_NOTVIEWER_WAIT_DELETING_REMOTE,
hgs
parents:
diff changeset
  2749
                        iCoeEnv );
hgs
parents:
diff changeset
  2750
    return KErrNone;
hgs
parents:
diff changeset
  2751
    }
hgs
parents:
diff changeset
  2752
hgs
parents:
diff changeset
  2753
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2754
// CNotViewerAppUi::HandleIteratorEventL
hgs
parents:
diff changeset
  2755
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2756
//
hgs
parents:
diff changeset
  2757
#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
hgs
parents:
diff changeset
  2758
void CNotViewerAppUi::HandleIteratorEventL( TMessageIteratorEvent aEvent )
hgs
parents:
diff changeset
  2759
    {
hgs
parents:
diff changeset
  2760
    LOGTEXT(_L8("NotViewerAppUi: HandleIteratorEventL"));
hgs
parents:
diff changeset
  2761
    if (aEvent == EFolderCountChanged)
hgs
parents:
diff changeset
  2762
        {
hgs
parents:
diff changeset
  2763
        InitNavipaneL();
hgs
parents:
diff changeset
  2764
        }
hgs
parents:
diff changeset
  2765
    }
hgs
parents:
diff changeset
  2766
#endif
hgs
parents:
diff changeset
  2767
hgs
parents:
diff changeset
  2768
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2769
// CNotViewerAppUi::InitNavipaneL
hgs
parents:
diff changeset
  2770
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2771
//
hgs
parents:
diff changeset
  2772
void CNotViewerAppUi::InitNavipaneL()
hgs
parents:
diff changeset
  2773
    {
hgs
parents:
diff changeset
  2774
    LOGTEXT(_L8("NotViewerAppUi: InitNavipaneL start"));
hgs
parents:
diff changeset
  2775
#ifdef RD_MSG_NAVIPANE_IMPROVEMENT
hgs
parents:
diff changeset
  2776
    if ( !iNaviDecorator )
hgs
parents:
diff changeset
  2777
        {
hgs
parents:
diff changeset
  2778
        TMsgEditorMsgPriority priority = EMsgEditorMsgPriorityNormal;
hgs
parents:
diff changeset
  2779
    
hgs
parents:
diff changeset
  2780
        if ( iMtm->MessagePriority() == EMmsPriorityHigh )
hgs
parents:
diff changeset
  2781
            {
hgs
parents:
diff changeset
  2782
            priority = EMsgEditorMsgPriorityHigh;
hgs
parents:
diff changeset
  2783
            }
hgs
parents:
diff changeset
  2784
        else if ( iMtm->MessagePriority() == EMmsPriorityLow )
hgs
parents:
diff changeset
  2785
            {
hgs
parents:
diff changeset
  2786
            priority = EMsgEditorMsgPriorityLow;
hgs
parents:
diff changeset
  2787
            }        
hgs
parents:
diff changeset
  2788
        CreateViewerNaviPaneL( Document()->Entry().iDate, priority, ETrue );
hgs
parents:
diff changeset
  2789
        }
hgs
parents:
diff changeset
  2790
        
hgs
parents:
diff changeset
  2791
    iNaviPane->PushL( *iNaviDecorator );
hgs
parents:
diff changeset
  2792
#else
hgs
parents:
diff changeset
  2793
    TMsvEntry msvEntry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
  2794
hgs
parents:
diff changeset
  2795
    if( msvEntry.ReadOnly( ) || iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  2796
        // If message is readonly or it is a notification ->
hgs
parents:
diff changeset
  2797
        // we need msg ordinal number and scroll arrows visible
hgs
parents:
diff changeset
  2798
        {
hgs
parents:
diff changeset
  2799
        TInt indexInFolder = 0;
hgs
parents:
diff changeset
  2800
        TInt msgsInFolder = 0;
hgs
parents:
diff changeset
  2801
        MessageIndexInFolderL( indexInFolder, msgsInFolder );
hgs
parents:
diff changeset
  2802
hgs
parents:
diff changeset
  2803
        if (    indexInFolder < 0
hgs
parents:
diff changeset
  2804
            ||  msgsInFolder == 0 )
hgs
parents:
diff changeset
  2805
            {
hgs
parents:
diff changeset
  2806
            // this may occur when viewer is used in cover ui. Viewer is started as 
hgs
parents:
diff changeset
  2807
            // stand alone without current folder and '1/0' would be visible. 
hgs
parents:
diff changeset
  2808
            iNaviPane->PushDefaultL( );
hgs
parents:
diff changeset
  2809
            return;
hgs
parents:
diff changeset
  2810
            }
hgs
parents:
diff changeset
  2811
hgs
parents:
diff changeset
  2812
        CArrayFixFlat<TInt>* array = new ( ELeave ) CArrayFixFlat<TInt>(KNaviGranularity);
hgs
parents:
diff changeset
  2813
        CleanupStack::PushL( array );
hgs
parents:
diff changeset
  2814
        array->AppendL( indexInFolder + 1 );
hgs
parents:
diff changeset
  2815
        array->AppendL( msgsInFolder );
hgs
parents:
diff changeset
  2816
hgs
parents:
diff changeset
  2817
        HBufC* buf = StringLoader::LoadLC( R_NOTVIEWER_ORDINAL_NUMBER, *array, iCoeEnv );
hgs
parents:
diff changeset
  2818
        CreateTabGroupL( *buf );
hgs
parents:
diff changeset
  2819
        CleanupStack::PopAndDestroy( 2 ); //buf, array
hgs
parents:
diff changeset
  2820
hgs
parents:
diff changeset
  2821
        iNaviDecorator->MakeScrollButtonVisible( ETrue );
hgs
parents:
diff changeset
  2822
hgs
parents:
diff changeset
  2823
        //NaviButtons are dimmed by default
hgs
parents:
diff changeset
  2824
        if ( IsNextMessageAvailableL( ETrue ) )
hgs
parents:
diff changeset
  2825
            {
hgs
parents:
diff changeset
  2826
            iNaviDecorator->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, EFalse );
hgs
parents:
diff changeset
  2827
            }
hgs
parents:
diff changeset
  2828
        if ( IsNextMessageAvailableL( EFalse ) )
hgs
parents:
diff changeset
  2829
            {
hgs
parents:
diff changeset
  2830
            iNaviDecorator->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, EFalse );
hgs
parents:
diff changeset
  2831
            }        
hgs
parents:
diff changeset
  2832
        }
hgs
parents:
diff changeset
  2833
    else    // Unsent FR: Make navipane null
hgs
parents:
diff changeset
  2834
        {
hgs
parents:
diff changeset
  2835
        CreateTabGroupL( KNullDesC );
hgs
parents:
diff changeset
  2836
        }
hgs
parents:
diff changeset
  2837
    iNaviPane->PushL( *iNaviDecorator );  // Make it visible
hgs
parents:
diff changeset
  2838
#endif // RD_MSG_NAVIPANE_IMPROVEMENT
hgs
parents:
diff changeset
  2839
    LOGTEXT(_L8("NotViewerAppUi: InitNavipaneL end"));
hgs
parents:
diff changeset
  2840
    }
hgs
parents:
diff changeset
  2841
hgs
parents:
diff changeset
  2842
#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
hgs
parents:
diff changeset
  2843
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2844
// CNotViewerAppUi::CreateTabGroupL
hgs
parents:
diff changeset
  2845
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2846
//
hgs
parents:
diff changeset
  2847
void CNotViewerAppUi::CreateTabGroupL( const TDesC& aText )
hgs
parents:
diff changeset
  2848
    {
hgs
parents:
diff changeset
  2849
    //Delete (possibly) existing navi decorator
hgs
parents:
diff changeset
  2850
    delete iNaviDecorator;
hgs
parents:
diff changeset
  2851
    iNaviDecorator = NULL;
hgs
parents:
diff changeset
  2852
hgs
parents:
diff changeset
  2853
    //Create TabGroup
hgs
parents:
diff changeset
  2854
    iNaviDecorator = iNaviPane->CreateTabGroupL();
hgs
parents:
diff changeset
  2855
    CAknTabGroup* tabGroup = static_cast<CAknTabGroup*>
hgs
parents:
diff changeset
  2856
        ( iNaviDecorator->DecoratedControl() );
hgs
parents:
diff changeset
  2857
hgs
parents:
diff changeset
  2858
    
hgs
parents:
diff changeset
  2859
    TRect naviPane;
hgs
parents:
diff changeset
  2860
    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::ENaviPane, naviPane );
hgs
parents:
diff changeset
  2861
    
hgs
parents:
diff changeset
  2862
    TAknLayoutRect naviTabsPane;
hgs
parents:
diff changeset
  2863
    naviTabsPane.LayoutRect( naviPane,
hgs
parents:
diff changeset
  2864
                             AknLayoutScalable_Avkon::navi_navi_tabs_pane().LayoutLine() );
hgs
parents:
diff changeset
  2865
    
hgs
parents:
diff changeset
  2866
    TAknLayoutRect navi2TabsPane;
hgs
parents:
diff changeset
  2867
    navi2TabsPane.LayoutRect( naviTabsPane.Rect(),
hgs
parents:
diff changeset
  2868
                              AknLayoutScalable_Avkon::navi_tabs_2_pane().LayoutLine() );
hgs
parents:
diff changeset
  2869
hgs
parents:
diff changeset
  2870
    TAknLayoutRect tabs2ActivePane;
hgs
parents:
diff changeset
  2871
    tabs2ActivePane.LayoutRect( navi2TabsPane.Rect(),
hgs
parents:
diff changeset
  2872
                                AknLayoutScalable_Avkon::tabs_2_active_pane( 0 ).LayoutLine() );
hgs
parents:
diff changeset
  2873
hgs
parents:
diff changeset
  2874
    TAknLayoutRect tabs2ActivePaneIcon;
hgs
parents:
diff changeset
  2875
    tabs2ActivePaneIcon.LayoutRect( tabs2ActivePane.Rect(),
hgs
parents:
diff changeset
  2876
                                    AknLayoutScalable_Avkon::tabs_2_active_pane_g1().LayoutLine() );
hgs
parents:
diff changeset
  2877
hgs
parents:
diff changeset
  2878
    TSize indicatorIconSize( tabs2ActivePaneIcon.Rect().Size() );
hgs
parents:
diff changeset
  2879
    
hgs
parents:
diff changeset
  2880
    CFbsBitmap* bitmapPriority = NULL;
hgs
parents:
diff changeset
  2881
	CFbsBitmap* maskPriority = NULL;
hgs
parents:
diff changeset
  2882
    
hgs
parents:
diff changeset
  2883
    // Create message priority bitmap
hgs
parents:
diff changeset
  2884
    if ( iMtm->MessagePriority() == EMmsPriorityHigh || 
hgs
parents:
diff changeset
  2885
         iMtm->MessagePriority() == EMmsPriorityLow )
hgs
parents:
diff changeset
  2886
        {
hgs
parents:
diff changeset
  2887
        // Set path of bitmap file
hgs
parents:
diff changeset
  2888
        TParse fileParse;
hgs
parents:
diff changeset
  2889
        fileParse.Set( KMmsUiMbmFile, &KDC_APP_BITMAP_DIR, NULL );
hgs
parents:
diff changeset
  2890
        
hgs
parents:
diff changeset
  2891
        if ( iMtm->MessagePriority() == EMmsPriorityHigh )
hgs
parents:
diff changeset
  2892
            {
hgs
parents:
diff changeset
  2893
            // Create high priority bitmap
hgs
parents:
diff changeset
  2894
            AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
  2895
                                         KAknsIIDQgnIndiMcePriorityHigh,
hgs
parents:
diff changeset
  2896
                                         KAknsIIDQsnIconColors,
hgs
parents:
diff changeset
  2897
                                         EAknsCIQsnIconColorsCG7,
hgs
parents:
diff changeset
  2898
                                         bitmapPriority,
hgs
parents:
diff changeset
  2899
                                         maskPriority,
hgs
parents:
diff changeset
  2900
                                         fileParse.FullName(),
hgs
parents:
diff changeset
  2901
                                         EMbmMmsuiQgn_indi_mce_priority_high,
hgs
parents:
diff changeset
  2902
                                         EMbmMmsuiQgn_indi_mce_priority_high_mask,
hgs
parents:
diff changeset
  2903
                                         AKN_LAF_COLOR( KIconDefaultColor ),
hgs
parents:
diff changeset
  2904
                                         indicatorIconSize,
hgs
parents:
diff changeset
  2905
                                         EAspectRatioPreserved );    
hgs
parents:
diff changeset
  2906
            }
hgs
parents:
diff changeset
  2907
        else
hgs
parents:
diff changeset
  2908
            {
hgs
parents:
diff changeset
  2909
            // Create low priority bitmap
hgs
parents:
diff changeset
  2910
            AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
  2911
                                         KAknsIIDQgnIndiMcePriorityLow,
hgs
parents:
diff changeset
  2912
                                         KAknsIIDQsnIconColors,
hgs
parents:
diff changeset
  2913
                                         EAknsCIQsnIconColorsCG7,
hgs
parents:
diff changeset
  2914
                                         bitmapPriority,
hgs
parents:
diff changeset
  2915
                                         maskPriority,
hgs
parents:
diff changeset
  2916
                                         fileParse.FullName(),
hgs
parents:
diff changeset
  2917
                                         EMbmMmsuiQgn_indi_mce_priority_low,
hgs
parents:
diff changeset
  2918
                                         EMbmMmsuiQgn_indi_mce_priority_low_mask,
hgs
parents:
diff changeset
  2919
                                         AKN_LAF_COLOR( KIconDefaultColor ),
hgs
parents:
diff changeset
  2920
                                         indicatorIconSize,                                         
hgs
parents:
diff changeset
  2921
                                         EAspectRatioPreserved ); 
hgs
parents:
diff changeset
  2922
            }
hgs
parents:
diff changeset
  2923
            
hgs
parents:
diff changeset
  2924
        if ( !bitmapPriority )            
hgs
parents:
diff changeset
  2925
            {
hgs
parents:
diff changeset
  2926
            User::Leave( KErrNotFound );
hgs
parents:
diff changeset
  2927
            }
hgs
parents:
diff changeset
  2928
            
hgs
parents:
diff changeset
  2929
        CleanupStack::PushL( bitmapPriority );
hgs
parents:
diff changeset
  2930
        CleanupStack::PushL( maskPriority );
hgs
parents:
diff changeset
  2931
hgs
parents:
diff changeset
  2932
        if ( tabGroup->TabCount() == 0 )
hgs
parents:
diff changeset
  2933
            {
hgs
parents:
diff changeset
  2934
            tabGroup->AddTabL( 0, aText, bitmapPriority, maskPriority );
hgs
parents:
diff changeset
  2935
            }
hgs
parents:
diff changeset
  2936
        else
hgs
parents:
diff changeset
  2937
            {
hgs
parents:
diff changeset
  2938
            tabGroup->ReplaceTabL( 0, aText, bitmapPriority, maskPriority );
hgs
parents:
diff changeset
  2939
            }
hgs
parents:
diff changeset
  2940
	      
hgs
parents:
diff changeset
  2941
    	CleanupStack::Pop( maskPriority );
hgs
parents:
diff changeset
  2942
        CleanupStack::Pop( bitmapPriority );
hgs
parents:
diff changeset
  2943
        }
hgs
parents:
diff changeset
  2944
    else
hgs
parents:
diff changeset
  2945
	    {
hgs
parents:
diff changeset
  2946
        if ( tabGroup->TabCount() == 0 )
hgs
parents:
diff changeset
  2947
            {
hgs
parents:
diff changeset
  2948
	        tabGroup->AddTabL( 0, aText );	
hgs
parents:
diff changeset
  2949
            }
hgs
parents:
diff changeset
  2950
        else
hgs
parents:
diff changeset
  2951
            {
hgs
parents:
diff changeset
  2952
	        tabGroup->ReplaceTabL( 0, aText );	
hgs
parents:
diff changeset
  2953
            }
hgs
parents:
diff changeset
  2954
	    }
hgs
parents:
diff changeset
  2955
	    
hgs
parents:
diff changeset
  2956
	tabGroup->SetActiveTabById( 0 );
hgs
parents:
diff changeset
  2957
    tabGroup->SetTabFixedWidthL( KTabWidthWithOneTab );
hgs
parents:
diff changeset
  2958
    }
hgs
parents:
diff changeset
  2959
#endif // !RD_MSG_NAVIPANE_IMPROVEMENT
hgs
parents:
diff changeset
  2960
hgs
parents:
diff changeset
  2961
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2962
// CNotViewerAppUi::AlreadyDeletedFromServer
hgs
parents:
diff changeset
  2963
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2964
//
hgs
parents:
diff changeset
  2965
TBool CNotViewerAppUi::AlreadyDeletedFromServer( )
hgs
parents:
diff changeset
  2966
    {
hgs
parents:
diff changeset
  2967
    TBool resp = EFalse;
hgs
parents:
diff changeset
  2968
    TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
  2969
    if(      ( entry.iMtmData2 & KMmsOperationFetch )   // Fetch + forward
hgs
parents:
diff changeset
  2970
        &&   ( entry.iMtmData2 & KMmsOperationForward ) // == DELETE!
hgs
parents:
diff changeset
  2971
        &&   ( entry.iMtmData2 & KMmsOperationFinished ) // It's finished
hgs
parents:
diff changeset
  2972
        &&  !( entry.iMtmData2 & KMmsOperationResult ) ) // No error code
hgs
parents:
diff changeset
  2973
        { // Message fetch has been failed
hgs
parents:
diff changeset
  2974
        resp = ETrue;
hgs
parents:
diff changeset
  2975
        }
hgs
parents:
diff changeset
  2976
    return resp;
hgs
parents:
diff changeset
  2977
    }
hgs
parents:
diff changeset
  2978
hgs
parents:
diff changeset
  2979
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2980
// CNotViewerAppUi::CheckAPSettingsL
hgs
parents:
diff changeset
  2981
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2982
//
hgs
parents:
diff changeset
  2983
TBool CNotViewerAppUi::CheckAPSettingsL( )
hgs
parents:
diff changeset
  2984
    {
hgs
parents:
diff changeset
  2985
    LOGTEXT(_L8("NotViewerAppUi: CheckAPSettingsL start"));
hgs
parents:
diff changeset
  2986
    CMsgEditorDocument* doc = Document( );
hgs
parents:
diff changeset
  2987
hgs
parents:
diff changeset
  2988
    CNotMtmUi* uiMtm = static_cast<CNotMtmUi*>( &doc->MtmUi( ) );
hgs
parents:
diff changeset
  2989
hgs
parents:
diff changeset
  2990
    CMmsSettingsDialog::TMmsExitCode exitCode = CMmsSettingsDialog::EMmsExternalInterrupt;
hgs
parents:
diff changeset
  2991
hgs
parents:
diff changeset
  2992
    if ( iToolbar ) //check to be provided for non-touch devices.
hgs
parents:
diff changeset
  2993
        {    
hgs
parents:
diff changeset
  2994
    iToolbar->HideItemsAndDrawOnlyBackground( ETrue ); // Hide the toolbar before settings dialog is launched
hgs
parents:
diff changeset
  2995
        }
hgs
parents:
diff changeset
  2996
    // Enable Dialer as MMS Settings dialog may be launched
hgs
parents:
diff changeset
  2997
    iAvkonAppUi->SetKeyEventFlags( 0x00 );	
hgs
parents:
diff changeset
  2998
    if( !uiMtm->CheckSettingsL( exitCode ) )
hgs
parents:
diff changeset
  2999
        {
hgs
parents:
diff changeset
  3000
hgs
parents:
diff changeset
  3001
        // Refresh the settings because they were changed
hgs
parents:
diff changeset
  3002
        iSettingsHandler->RefreshSettingsL( );
hgs
parents:
diff changeset
  3003
        TInt32 ap = iSettingsHandler->MmsSettings( )->AccessPoint( 0 );
hgs
parents:
diff changeset
  3004
hgs
parents:
diff changeset
  3005
        //settings saved
hgs
parents:
diff changeset
  3006
        if( !( exitCode==CMmsSettingsDialog::EMmsBack && uiMtm->ApExistsL( ap ) ) )
hgs
parents:
diff changeset
  3007
            { // Settings NOK
hgs
parents:
diff changeset
  3008
             if ( iToolbar ) //check to be provided for non-touch devices.
hgs
parents:
diff changeset
  3009
                {            
hgs
parents:
diff changeset
  3010
            iToolbar->HideItemsAndDrawOnlyBackground( EFalse ); // Show the toolbar 
hgs
parents:
diff changeset
  3011
                }  
hgs
parents:
diff changeset
  3012
            return EFalse;
hgs
parents:
diff changeset
  3013
            }
hgs
parents:
diff changeset
  3014
        //Settings now OK
hgs
parents:
diff changeset
  3015
        }
hgs
parents:
diff changeset
  3016
    if ( iToolbar ) //check to be provided for non-touch devices.
hgs
parents:
diff changeset
  3017
        {
hgs
parents:
diff changeset
  3018
    iToolbar->HideItemsAndDrawOnlyBackground( EFalse ); // Show the toolbar 
hgs
parents:
diff changeset
  3019
        }
hgs
parents:
diff changeset
  3020
    if( exitCode==CMmsSettingsDialog::EMmsExit )
hgs
parents:
diff changeset
  3021
        {
hgs
parents:
diff changeset
  3022
        // Exit was called
hgs
parents:
diff changeset
  3023
        Exit( );
hgs
parents:
diff changeset
  3024
        }
hgs
parents:
diff changeset
  3025
hgs
parents:
diff changeset
  3026
    LOGTEXT(_L8("NotViewerAppUi: CheckAPSettingsL end"));
hgs
parents:
diff changeset
  3027
    return ETrue;
hgs
parents:
diff changeset
  3028
    }
hgs
parents:
diff changeset
  3029
hgs
parents:
diff changeset
  3030
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3031
// DoDelayedExitL
hgs
parents:
diff changeset
  3032
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3033
void CNotViewerAppUi::DoDelayedExitL( const TInt aDelay )
hgs
parents:
diff changeset
  3034
    {
hgs
parents:
diff changeset
  3035
    delete iIdle;
hgs
parents:
diff changeset
  3036
    iIdle = 0;
hgs
parents:
diff changeset
  3037
    iIdle = CPeriodic::NewL( EPriorityNormal - 1 );
hgs
parents:
diff changeset
  3038
    iIdle->Start(   aDelay,
hgs
parents:
diff changeset
  3039
                    aDelay,
hgs
parents:
diff changeset
  3040
                    TCallBack( DelayedExit, this ) );
hgs
parents:
diff changeset
  3041
    }
hgs
parents:
diff changeset
  3042
hgs
parents:
diff changeset
  3043
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3044
// DelayedExit
hgs
parents:
diff changeset
  3045
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3046
TInt CNotViewerAppUi::DelayedExit( TAny* aThis )
hgs
parents:
diff changeset
  3047
    {
hgs
parents:
diff changeset
  3048
    CNotViewerAppUi* editor = static_cast<CNotViewerAppUi*>( aThis );
hgs
parents:
diff changeset
  3049
    TRAP_IGNORE( editor->DoInternalExitL() );
hgs
parents:
diff changeset
  3050
	CAknEnv::RunAppShutter( );
hgs
parents:
diff changeset
  3051
    return KErrNone;
hgs
parents:
diff changeset
  3052
    }
hgs
parents:
diff changeset
  3053
hgs
parents:
diff changeset
  3054
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3055
// DoExternalExitL
hgs
parents:
diff changeset
  3056
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3057
void CNotViewerAppUi::DoInternalExitL()
hgs
parents:
diff changeset
  3058
    {
hgs
parents:
diff changeset
  3059
    delete iAbsorber; // Remove absorber now just in case
hgs
parents:
diff changeset
  3060
    iAbsorber = NULL;
hgs
parents:
diff changeset
  3061
    Exit( EAknSoftkeyBack );
hgs
parents:
diff changeset
  3062
    }
hgs
parents:
diff changeset
  3063
hgs
parents:
diff changeset
  3064
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3065
// EditorObserver
hgs
parents:
diff changeset
  3066
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3067
void CNotViewerAppUi::EditorObserver(TMsgEditorObserverFunc aFunc, TAny* aArg1, TAny* aArg2, TAny* aArg3)
hgs
parents:
diff changeset
  3068
    {
hgs
parents:
diff changeset
  3069
    TRAP_IGNORE(DoEditorObserverL(aFunc,aArg1,aArg2,aArg3 ) );
hgs
parents:
diff changeset
  3070
    }
hgs
parents:
diff changeset
  3071
hgs
parents:
diff changeset
  3072
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3073
// EditorObserver
hgs
parents:
diff changeset
  3074
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3075
void CNotViewerAppUi::DoEditorObserverL(TMsgEditorObserverFunc aFunc, TAny* aArg1, TAny* /*aArg2*/, TAny* /*aArg3*/)
hgs
parents:
diff changeset
  3076
    {
hgs
parents:
diff changeset
  3077
    switch ( aFunc )
hgs
parents:
diff changeset
  3078
        {
hgs
parents:
diff changeset
  3079
        case EMsgButtonEvent:
hgs
parents:
diff changeset
  3080
            {
hgs
parents:
diff changeset
  3081
            if( !( iFlags & ENotViewerIsNotification ) &&  !iMtm->Entry( ).Entry( ).ReadOnly( ) )
hgs
parents:
diff changeset
  3082
            	{
hgs
parents:
diff changeset
  3083
            	CMsgAddressControl* addrControl = AddressControl( );
hgs
parents:
diff changeset
  3084
				if( addrControl == static_cast<CMsgAddressControl*>( aArg1 ) )
hgs
parents:
diff changeset
  3085
					{
hgs
parents:
diff changeset
  3086
                    TBool modified = EFalse;
hgs
parents:
diff changeset
  3087
                    if ( addrControl->GetRecipientsL()->Count() )
hgs
parents:
diff changeset
  3088
                        {
hgs
parents:
diff changeset
  3089
                        // Recipients found. Verify addresses.
hgs
parents:
diff changeset
  3090
                        if ( !VerifyAddressesL( modified ) )
hgs
parents:
diff changeset
  3091
                            {
hgs
parents:
diff changeset
  3092
                            // Illegal address found.
hgs
parents:
diff changeset
  3093
                            modified = ETrue;
hgs
parents:
diff changeset
  3094
                            }
hgs
parents:
diff changeset
  3095
                        }
hgs
parents:
diff changeset
  3096
                    if ( !modified )//else
hgs
parents:
diff changeset
  3097
                        {
hgs
parents:
diff changeset
  3098
                        // Nothing changed on the UI. Open PhoneBook.
hgs
parents:
diff changeset
  3099
                        AddRecipientL();
hgs
parents:
diff changeset
  3100
                        }
hgs
parents:
diff changeset
  3101
					}
hgs
parents:
diff changeset
  3102
            	}
hgs
parents:
diff changeset
  3103
            }
hgs
parents:
diff changeset
  3104
            break;
hgs
parents:
diff changeset
  3105
         case EMsgHandleFocusChange:
hgs
parents:
diff changeset
  3106
         case EMsgControlPointerEvent:
hgs
parents:
diff changeset
  3107
            {
hgs
parents:
diff changeset
  3108
            // Enable Dialer 
hgs
parents:
diff changeset
  3109
            iAvkonAppUi->SetKeyEventFlags( 0x00 );
hgs
parents:
diff changeset
  3110
            break; 
hgs
parents:
diff changeset
  3111
            }
hgs
parents:
diff changeset
  3112
		default:
hgs
parents:
diff changeset
  3113
			break;
hgs
parents:
diff changeset
  3114
        }
hgs
parents:
diff changeset
  3115
    }
hgs
parents:
diff changeset
  3116
hgs
parents:
diff changeset
  3117
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  3118
// handles the touch-ui related control events for next/previous message
hgs
parents:
diff changeset
  3119
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  3120
//
hgs
parents:
diff changeset
  3121
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  3122
#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
hgs
parents:
diff changeset
  3123
void CNotViewerAppUi::HandleNaviDecoratorEventL( TInt aEventID )     
hgs
parents:
diff changeset
  3124
    {
hgs
parents:
diff changeset
  3125
    if ( AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
  3126
        {
hgs
parents:
diff changeset
  3127
        if (    iNaviDecorator
hgs
parents:
diff changeset
  3128
            &&  iNaviPane->Top( ) == iNaviDecorator )
hgs
parents:
diff changeset
  3129
            {
hgs
parents:
diff changeset
  3130
            if( IsNextMessageAvailableL( aEventID == EAknNaviDecoratorEventRightTabArrow ) )
hgs
parents:
diff changeset
  3131
                {
hgs
parents:
diff changeset
  3132
                /* no need for separate checks for right and left arrows
hgs
parents:
diff changeset
  3133
                    because IsNextMessageAvailableL() and NextMessageL
hgs
parents:
diff changeset
  3134
                    are called with the truth-value of the same comparison */
hgs
parents:
diff changeset
  3135
                NextMessageL( aEventID == EAknNaviDecoratorEventRightTabArrow );
hgs
parents:
diff changeset
  3136
                }
hgs
parents:
diff changeset
  3137
            }
hgs
parents:
diff changeset
  3138
        }
hgs
parents:
diff changeset
  3139
    }
hgs
parents:
diff changeset
  3140
#endif
hgs
parents:
diff changeset
  3141
#endif
hgs
parents:
diff changeset
  3142
hgs
parents:
diff changeset
  3143
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3144
// DynInitToolbarL
hgs
parents:
diff changeset
  3145
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3146
//
hgs
parents:
diff changeset
  3147
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  3148
void CNotViewerAppUi::DynInitToolbarL(  TInt            /*aResourceId*/, 
hgs
parents:
diff changeset
  3149
                                        CAknToolbar*    aToolbar )
hgs
parents:
diff changeset
  3150
    {
hgs
parents:
diff changeset
  3151
    if (    iToolbar
hgs
parents:
diff changeset
  3152
        &&  iToolbar  == aToolbar )
hgs
parents:
diff changeset
  3153
        {
hgs
parents:
diff changeset
  3154
        // Dimming buttons follow     
hgs
parents:
diff changeset
  3155
        CNotViewerDocument* doc = Document( );
hgs
parents:
diff changeset
  3156
        CNotMtmUiData* uiData = &doc->MtmUiDataL( );
hgs
parents:
diff changeset
  3157
        TMsvEntry entry = iMtm->Entry( ).Entry( );
hgs
parents:
diff changeset
  3158
hgs
parents:
diff changeset
  3159
	    if( iFlags & ENotViewerIsNotification )
hgs
parents:
diff changeset
  3160
	        {
hgs
parents:
diff changeset
  3161
            // Hide always Send and Add
hgs
parents:
diff changeset
  3162
            iToolbar->HideItem( ENotViewerToolbarSend,
hgs
parents:
diff changeset
  3163
                                ETrue,
hgs
parents:
diff changeset
  3164
                                EFalse );
hgs
parents:
diff changeset
  3165
            iToolbar->HideItem( ENotViewerToolbarAdd,
hgs
parents:
diff changeset
  3166
                                ETrue,
hgs
parents:
diff changeset
  3167
                                EFalse );
hgs
parents:
diff changeset
  3168
            
hgs
parents:
diff changeset
  3169
            if( uiData->OperationSupportedL( KMtmUiFunctionFetchMMS, entry ) )
hgs
parents:
diff changeset
  3170
                {
hgs
parents:
diff changeset
  3171
                iToolbar->SetItemDimmed(    ENotViewerToolbarRetrieve,
hgs
parents:
diff changeset
  3172
                                            ETrue,
hgs
parents:
diff changeset
  3173
                                            EFalse );
hgs
parents:
diff changeset
  3174
                }
hgs
parents:
diff changeset
  3175
            if( iMtm->Sender().Length()==0 )
hgs
parents:
diff changeset
  3176
                {
hgs
parents:
diff changeset
  3177
                iToolbar->SetItemDimmed(    ENotViewerToolbarReply,
hgs
parents:
diff changeset
  3178
                                            ETrue,
hgs
parents:
diff changeset
  3179
                                            EFalse );
hgs
parents:
diff changeset
  3180
                }
hgs
parents:
diff changeset
  3181
            if( uiData->OperationSupportedL( KMtmUiFunctionDeleteMessage, entry ) )
hgs
parents:
diff changeset
  3182
                {
hgs
parents:
diff changeset
  3183
                iToolbar->SetItemDimmed(    ENotViewerToolbarDelete,
hgs
parents:
diff changeset
  3184
                                            ETrue,
hgs
parents:
diff changeset
  3185
                                            EFalse );
hgs
parents:
diff changeset
  3186
                }
hgs
parents:
diff changeset
  3187
	        }
hgs
parents:
diff changeset
  3188
	    else 
hgs
parents:
diff changeset
  3189
            {            
hgs
parents:
diff changeset
  3190
            // Hide always Retrieve and Reply
hgs
parents:
diff changeset
  3191
            iToolbar->HideItem( ENotViewerToolbarRetrieve,
hgs
parents:
diff changeset
  3192
                                ETrue,
hgs
parents:
diff changeset
  3193
                                EFalse );
hgs
parents:
diff changeset
  3194
            iToolbar->HideItem( ENotViewerToolbarReply,
hgs
parents:
diff changeset
  3195
                                ETrue,
hgs
parents:
diff changeset
  3196
                                EFalse );
hgs
parents:
diff changeset
  3197
            
hgs
parents:
diff changeset
  3198
	        if( !iMtm->Entry( ).Entry( ).ReadOnly( ) )
hgs
parents:
diff changeset
  3199
	            {
hgs
parents:
diff changeset
  3200
                iToolbar->SetItemDimmed(    ENotViewerToolbarDelete,
hgs
parents:
diff changeset
  3201
                                            ETrue,
hgs
parents:
diff changeset
  3202
                                            EFalse );
hgs
parents:
diff changeset
  3203
	            }
hgs
parents:
diff changeset
  3204
	        if( iMtm->Entry( ).Entry( ).ReadOnly( ) )
hgs
parents:
diff changeset
  3205
	            {
hgs
parents:
diff changeset
  3206
                iToolbar->SetItemDimmed(    ENotViewerToolbarSend,
hgs
parents:
diff changeset
  3207
                                            ETrue,
hgs
parents:
diff changeset
  3208
                                            EFalse );	            
hgs
parents:
diff changeset
  3209
                iToolbar->SetItemDimmed(    ENotViewerToolbarAdd,
hgs
parents:
diff changeset
  3210
                                            ETrue,
hgs
parents:
diff changeset
  3211
                                            EFalse );	            
hgs
parents:
diff changeset
  3212
	            }
hgs
parents:
diff changeset
  3213
            }
hgs
parents:
diff changeset
  3214
	                
hgs
parents:
diff changeset
  3215
        }
hgs
parents:
diff changeset
  3216
    }
hgs
parents:
diff changeset
  3217
#endif        
hgs
parents:
diff changeset
  3218
hgs
parents:
diff changeset
  3219
hgs
parents:
diff changeset
  3220
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3221
// OfferToolbarEventL
hgs
parents:
diff changeset
  3222
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3223
//
hgs
parents:
diff changeset
  3224
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  3225
void CNotViewerAppUi::OfferToolbarEventL( TInt aCommand )
hgs
parents:
diff changeset
  3226
    {
hgs
parents:
diff changeset
  3227
    switch ( aCommand )
hgs
parents:
diff changeset
  3228
        {
hgs
parents:
diff changeset
  3229
        case ENotViewerToolbarRetrieve:
hgs
parents:
diff changeset
  3230
            HandleCommandL( ENotViewerRetrieve );
hgs
parents:
diff changeset
  3231
            break;
hgs
parents:
diff changeset
  3232
            
hgs
parents:
diff changeset
  3233
        case ENotViewerToolbarReply:
hgs
parents:
diff changeset
  3234
            HandleCommandL( ENotViewerReplyViaMessage );            
hgs
parents:
diff changeset
  3235
            break;
hgs
parents:
diff changeset
  3236
            
hgs
parents:
diff changeset
  3237
        case ENotViewerToolbarSend:
hgs
parents:
diff changeset
  3238
            HandleCommandL( ENotViewerSend );
hgs
parents:
diff changeset
  3239
            break;
hgs
parents:
diff changeset
  3240
            
hgs
parents:
diff changeset
  3241
        case ENotViewerToolbarAdd:
hgs
parents:
diff changeset
  3242
            HandleCommandL( ENotViewerAddRecipient );            
hgs
parents:
diff changeset
  3243
            break;
hgs
parents:
diff changeset
  3244
hgs
parents:
diff changeset
  3245
        case ENotViewerToolbarDelete:
hgs
parents:
diff changeset
  3246
            HandleCommandL( ENotViewerDelete );
hgs
parents:
diff changeset
  3247
            break;
hgs
parents:
diff changeset
  3248
hgs
parents:
diff changeset
  3249
        default:
hgs
parents:
diff changeset
  3250
            break;
hgs
parents:
diff changeset
  3251
        }
hgs
parents:
diff changeset
  3252
    }
hgs
parents:
diff changeset
  3253
hgs
parents:
diff changeset
  3254
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3255
// OperationOngoing
hgs
parents:
diff changeset
  3256
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3257
//
hgs
parents:
diff changeset
  3258
TBool CNotViewerAppUi::OperationOngoing( const TMsvEntry& aEntry ) const
hgs
parents:
diff changeset
  3259
    {
hgs
parents:
diff changeset
  3260
    return (    aEntry.iMtmData2 & KMmsOperationOngoing 
hgs
parents:
diff changeset
  3261
            &&  !( aEntry.iMtmData2 & KMmsOperationFinished ) );
hgs
parents:
diff changeset
  3262
    }
hgs
parents:
diff changeset
  3263
hgs
parents:
diff changeset
  3264
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3265
// OperationFinished
hgs
parents:
diff changeset
  3266
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3267
//
hgs
parents:
diff changeset
  3268
TBool CNotViewerAppUi::OperationFinished( const TMsvEntry& aEntry ) const
hgs
parents:
diff changeset
  3269
    {
hgs
parents:
diff changeset
  3270
    return (    aEntry.iMtmData2 & KMmsOperationFinished
hgs
parents:
diff changeset
  3271
            &&  !( aEntry.iMtmData2 & KMmsOperationOngoing ) );
hgs
parents:
diff changeset
  3272
    }
hgs
parents:
diff changeset
  3273
    
hgs
parents:
diff changeset
  3274
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3275
// HandleForegroundEventL
hgs
parents:
diff changeset
  3276
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3277
//
hgs
parents:
diff changeset
  3278
void CNotViewerAppUi::HandleForegroundEventL(TBool aForeground)
hgs
parents:
diff changeset
  3279
    {
hgs
parents:
diff changeset
  3280
    if ( AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
  3281
        {                
hgs
parents:
diff changeset
  3282
        if ( !iToolbar )
hgs
parents:
diff changeset
  3283
            {
hgs
parents:
diff changeset
  3284
            iToolbar = CurrentFixedToolbar();  
hgs
parents:
diff changeset
  3285
            if ( iToolbar )
hgs
parents:
diff changeset
  3286
                {
hgs
parents:
diff changeset
  3287
                iToolbar->SetToolbarObserver( this );
hgs
parents:
diff changeset
  3288
                iToolbar->DisableToolbarL( ETrue ); 
hgs
parents:
diff changeset
  3289
                }
hgs
parents:
diff changeset
  3290
            }
hgs
parents:
diff changeset
  3291
        }
hgs
parents:
diff changeset
  3292
    CMsgEditorAppUi::HandleForegroundEventL( aForeground );
hgs
parents:
diff changeset
  3293
    }
hgs
parents:
diff changeset
  3294
#endif
hgs
parents:
diff changeset
  3295
hgs
parents:
diff changeset
  3296
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3297
// HandleResourceChangeL
hgs
parents:
diff changeset
  3298
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3299
//
hgs
parents:
diff changeset
  3300
void CNotViewerAppUi::HandleResourceChangeL(TInt aType)
hgs
parents:
diff changeset
  3301
    {
hgs
parents:
diff changeset
  3302
    // Base class call must be first
hgs
parents:
diff changeset
  3303
    CMsgEditorAppUi::HandleResourceChangeL(aType);
hgs
parents:
diff changeset
  3304
hgs
parents:
diff changeset
  3305
    if ( aType == KAknsMessageSkinChange )
hgs
parents:
diff changeset
  3306
        {
hgs
parents:
diff changeset
  3307
        if ( iAppIcon )
hgs
parents:
diff changeset
  3308
            {
hgs
parents:
diff changeset
  3309
            delete iAppIcon;
hgs
parents:
diff changeset
  3310
            iAppIcon = NULL;
hgs
parents:
diff changeset
  3311
            }
hgs
parents:
diff changeset
  3312
    
hgs
parents:
diff changeset
  3313
      	// Set path of bitmap file
hgs
parents:
diff changeset
  3314
      	TParse fileParse;
hgs
parents:
diff changeset
  3315
      	fileParse.Set( KMmsUiMbmFile, &KDC_APP_BITMAP_DIR, NULL );
hgs
parents:
diff changeset
  3316
        
hgs
parents:
diff changeset
  3317
        iAppIcon = AknsUtils::CreateGulIconL( 
hgs
parents:
diff changeset
  3318
            AknsUtils::SkinInstance(), 
hgs
parents:
diff changeset
  3319
            KAknsIIDQgnPropMceMmsTitle,
hgs
parents:
diff changeset
  3320
            fileParse.FullName(),
hgs
parents:
diff changeset
  3321
            EMbmMmsuiQgn_prop_mce_mms_title,
hgs
parents:
diff changeset
  3322
            EMbmMmsuiQgn_prop_mce_mms_title_mask );
hgs
parents:
diff changeset
  3323
        SetTitleIconL();   
hgs
parents:
diff changeset
  3324
        }
hgs
parents:
diff changeset
  3325
    else if ( aType == KEikDynamicLayoutVariantSwitch )
hgs
parents:
diff changeset
  3326
        {
hgs
parents:
diff changeset
  3327
        SetTitleIconL();   
hgs
parents:
diff changeset
  3328
        }
hgs
parents:
diff changeset
  3329
    }
hgs
parents:
diff changeset
  3330
hgs
parents:
diff changeset
  3331
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3332
// SetTitleIconL
hgs
parents:
diff changeset
  3333
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3334
//
hgs
parents:
diff changeset
  3335
void CNotViewerAppUi::SetTitleIconL()
hgs
parents:
diff changeset
  3336
    {
hgs
parents:
diff changeset
  3337
    SetTitleIconSizeL( iAppIcon->Bitmap() );
hgs
parents:
diff changeset
  3338
    // Create duplicates of the icon to be used
hgs
parents:
diff changeset
  3339
    CFbsBitmap* bitmap = new( ELeave ) CFbsBitmap();
hgs
parents:
diff changeset
  3340
    CleanupStack::PushL( bitmap );
hgs
parents:
diff changeset
  3341
    
hgs
parents:
diff changeset
  3342
    CFbsBitmap* bitmapMask = new( ELeave ) CFbsBitmap();
hgs
parents:
diff changeset
  3343
    CleanupStack::PushL( bitmapMask );
hgs
parents:
diff changeset
  3344
    
hgs
parents:
diff changeset
  3345
    User::LeaveIfError( bitmap->Duplicate( iAppIcon->Bitmap()->Handle() ) );
hgs
parents:
diff changeset
  3346
    User::LeaveIfError( bitmapMask->Duplicate( iAppIcon->Mask()->Handle() ) );
hgs
parents:
diff changeset
  3347
hgs
parents:
diff changeset
  3348
    iTitlePane->SetSmallPicture( bitmap, bitmapMask, ETrue );
hgs
parents:
diff changeset
  3349
    iTitlePane->DrawNow();
hgs
parents:
diff changeset
  3350
    
hgs
parents:
diff changeset
  3351
    CleanupStack::Pop( bitmapMask );
hgs
parents:
diff changeset
  3352
    CleanupStack::Pop( bitmap );
hgs
parents:
diff changeset
  3353
    }