messagingappbase/msgeditor/appuisrc/MsgEditorAppUi.cpp
author hgs
Thu, 04 Nov 2010 02:02:03 +0530
changeset 81 2043ea884c04
parent 79 2981cb3aa489
permissions -rw-r--r--
201044_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  MsgEditorAppUi implementation
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// ========== INCLUDE FILES ================================
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <featmgr.h>                // for feature manager
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include <eikenv.h>                 // Eikon Enviroment
hgs
parents:
diff changeset
    25
#include <txtrich.h>                // Rich Text
hgs
parents:
diff changeset
    26
#include <eikrted.h>                // CEikRichTextEditor
hgs
parents:
diff changeset
    27
#include <eikmenub.h>               // CEikMenuBar
hgs
parents:
diff changeset
    28
#include <eikspane.h>               // status panel
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include <eikapp.h>                 // CEikApplication
hgs
parents:
diff changeset
    31
#include <eikserverapp.h>
hgs
parents:
diff changeset
    32
#include <bautils.h>                // NearestLanguageFile
hgs
parents:
diff changeset
    33
#include <eikdialg.h>               // CEikDialog
hgs
parents:
diff changeset
    34
#include <data_caging_path_literals.hrh>
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
#include <msvapi.h>                 //
hgs
parents:
diff changeset
    37
#include <mtmuibas.h>               // MTM UI
hgs
parents:
diff changeset
    38
#include <mtmuidef.hrh>             // Preferences
hgs
parents:
diff changeset
    39
#include <mtmdef.h>                 // TMsvPartList
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
#include <MuiuMsgEmbeddedEditorWatchingOperation.h>
hgs
parents:
diff changeset
    42
#include <MuiuMsgEditorLauncher.h>  // for TEditorParameters
hgs
parents:
diff changeset
    43
#include <MuiuMessageIterator.h>    // for CMessageIterator
hgs
parents:
diff changeset
    44
#include <MuiuOperationWait.h>      // for CMuiuOperationWait
hgs
parents:
diff changeset
    45
#include <muiu.mbg>
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
#include <aknenv.h>
hgs
parents:
diff changeset
    48
#include <aknnavi.h>                // CAknNavigationControlContainer
hgs
parents:
diff changeset
    49
#include <aknnavide.h>              // CAknNavigationDecorator
hgs
parents:
diff changeset
    50
#include <akntabgrp.h>              // CAknTabGroup
hgs
parents:
diff changeset
    51
#include <akninputblock.h>          // CAknInputBlock
hgs
parents:
diff changeset
    52
#include <aknnotewrappers.h>
hgs
parents:
diff changeset
    53
#include <AknIndicatorContainer.h>
hgs
parents:
diff changeset
    54
#include <akncontext.h>             // For message store in MMC -indication
hgs
parents:
diff changeset
    55
#include <AknsUtils.h>
hgs
parents:
diff changeset
    56
#include <AknsConstants.h>
hgs
parents:
diff changeset
    57
#include <commonphoneparser.h>      // Common phone number validity checker
hgs
parents:
diff changeset
    58
#include <apgicnfl.h>               // apamasked bitmaps
hgs
parents:
diff changeset
    59
#include <ErrorUI.h>				// CErrorUI - to show global error notes
hgs
parents:
diff changeset
    60
#include <StringLoader.h>           // StringLoader
hgs
parents:
diff changeset
    61
#include <NpdApi.h>                 // Notepad API
hgs
parents:
diff changeset
    62
#include <avkon.hrh>
hgs
parents:
diff changeset
    63
#include <AknStatuspaneUtils.h>
hgs
parents:
diff changeset
    64
#include <AknSettingCache.h>
hgs
parents:
diff changeset
    65
#include <messaginginternalcrkeys.h>
hgs
parents:
diff changeset
    66
#include <MessagingSDKCRKeys.h>
hgs
parents:
diff changeset
    67
#include "MsgEditorAppUiExtension.h"
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
#include <aknlayoutscalable_avkon.cdl.h>
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
#include "MsgEditorShutter.h"
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
#include "MsgEditorCommon.h"
hgs
parents:
diff changeset
    74
#include "MsgEditorAppUi.h"         // class header
hgs
parents:
diff changeset
    75
#include "MsgEditorView.h"          // View
hgs
parents:
diff changeset
    76
#include "MsgBodyControl.h"         // Body Control
hgs
parents:
diff changeset
    77
#include "MsgSendKeyAcceptingQuery.h"
hgs
parents:
diff changeset
    78
#include "MsgEditorAppUiPanic.h"    // Panics
hgs
parents:
diff changeset
    79
#include "MsgEditorFlags.h"         // EditorFlags
hgs
parents:
diff changeset
    80
#include "MsgAttachmentUtils.h"
hgs
parents:
diff changeset
    81
#include <MsgEditorAppUi.rsg>       // resource identifiers
hgs
parents:
diff changeset
    82
#include "MsgNaviPaneControl.h"
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
#include <aknpriv.hrh> 
hgs
parents:
diff changeset
    85
#include <akntoolbar.h> 
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
#ifdef RD_MSG_FAST_PREV_NEXT
hgs
parents:
diff changeset
    88
#include <messaginginternalpskeys.h>
hgs
parents:
diff changeset
    89
#endif
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
#include "MsgEditorLogging.h"
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
// ========== EXTERNAL DATA STRUCTURES =====================
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
// ========== EXTERNAL FUNCTION PROTOTYPES =================
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
// ========== CONSTANTS ====================================
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
const TInt KMsgDiskSpaceForDelete = ( 5 * 1024 ); // minimum disk space needed when deleting messages
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
// ========== MACROS =======================================
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
_LIT( KMsgEditorAppUiResourceFileName, "msgeditorappui.rsc" );
hgs
parents:
diff changeset
   104
_LIT( KMuiuBitmapFileName, "muiu.mbm" );
hgs
parents:
diff changeset
   105
_LIT( KMsgEditorAppUiFilterRe, "RE:" );
hgs
parents:
diff changeset
   106
_LIT( KMsgEditorAppUiFilterFw, "FW:" );
hgs
parents:
diff changeset
   107
_LIT( KMsgEditorAppUiFilterFwd, "FWD:" );
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
// ========== LOCAL CONSTANTS AND MACROS ===================
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
// ========== MODULE DATA STRUCTURES =======================
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
// ========== LOCAL FUNCTION PROTOTYPES ====================
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
// ========== LOCAL FUNCTIONS ==============================
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
// ========== MEMBER FUNCTIONS =============================
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
// ---------------------------------------------------------
hgs
parents:
diff changeset
   120
// CMsgEditorAppUi::CMsgEditorAppUi
hgs
parents:
diff changeset
   121
//
hgs
parents:
diff changeset
   122
// Constructor.
hgs
parents:
diff changeset
   123
// ---------------------------------------------------------
hgs
parents:
diff changeset
   124
//
hgs
parents:
diff changeset
   125
EXPORT_C CMsgEditorAppUi::CMsgEditorAppUi() : 
hgs
parents:
diff changeset
   126
    iExitMode( MApaEmbeddedDocObserver::EKeepChanges ),
hgs
parents:
diff changeset
   127
    iCloseWithEndKey( ETrue )
hgs
parents:
diff changeset
   128
    {
hgs
parents:
diff changeset
   129
    }
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
// ---------------------------------------------------------
hgs
parents:
diff changeset
   132
// CMsgEditorAppUi::ConstructL
hgs
parents:
diff changeset
   133
//
hgs
parents:
diff changeset
   134
// 2nd phase constructor.
hgs
parents:
diff changeset
   135
// ---------------------------------------------------------
hgs
parents:
diff changeset
   136
//
hgs
parents:
diff changeset
   137
EXPORT_C void CMsgEditorAppUi::ConstructL()
hgs
parents:
diff changeset
   138
    {
hgs
parents:
diff changeset
   139
    CMsgEditorBaseUi::ConstructL();
hgs
parents:
diff changeset
   140
    
hgs
parents:
diff changeset
   141
    iMsgNaviDirection = KErrNotFound; 
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
    // initialize feature manager to check supported features
hgs
parents:
diff changeset
   144
    FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
   145
    iMmcFeatureSupported = FeatureManager::FeatureSupported( KFeatureIdMmc );
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
    TParse parse;
hgs
parents:
diff changeset
   148
    parse.Set( KMsgEditorAppUiResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL );
hgs
parents:
diff changeset
   149
    TFileName fileName( parse.FullName() );
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
    BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
hgs
parents:
diff changeset
   152
    iResourceFileOffset = iEikonEnv->AddResourceFileL( fileName );
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
    Document()->SetEditorModelObserver( this );
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
    iFileMan = CFileMan::NewL( iEikonEnv->FsSession() );
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
    // create msgeditor temp directory.
hgs
parents:
diff changeset
   159
    TFileName temppath;
hgs
parents:
diff changeset
   160
    MsgAttachmentUtils::GetMsgEditorTempPath( temppath );
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    RFs& fs = iEikonEnv->FsSession();
hgs
parents:
diff changeset
   163
    fs.MkDir( temppath );
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
    CEikStatusPane* sp = StatusPane();
hgs
parents:
diff changeset
   166
    if ( iMmcFeatureSupported && 
hgs
parents:
diff changeset
   167
        TInt( Document()->Session().CurrentDriveL() ) == EDriveE )
hgs
parents:
diff changeset
   168
        {
hgs
parents:
diff changeset
   169
        CAknContextPane* contextPane = static_cast<CAknContextPane*>
hgs
parents:
diff changeset
   170
            ( sp->ControlL( TUid::Uid( EEikStatusPaneUidContext ) ) );
hgs
parents:
diff changeset
   171
        TParse fileParse;
hgs
parents:
diff changeset
   172
        fileParse.Set( KMuiuBitmapFileName, &KDC_APP_BITMAP_DIR, NULL );
hgs
parents:
diff changeset
   173
        CFbsBitmap* bmp = NULL;
hgs
parents:
diff changeset
   174
        CFbsBitmap* mask = NULL;
hgs
parents:
diff changeset
   175
#ifdef __SCALABLE_ICONS
hgs
parents:
diff changeset
   176
        AknsUtils::CreateIconL(
hgs
parents:
diff changeset
   177
            AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
   178
            KAknsIIDQgnMenuMceMmcCxt,
hgs
parents:
diff changeset
   179
            bmp,
hgs
parents:
diff changeset
   180
            mask,
hgs
parents:
diff changeset
   181
            fileParse.FullName(),
hgs
parents:
diff changeset
   182
            EMbmMuiuQgn_menu_mce_mmc,
hgs
parents:
diff changeset
   183
            EMbmMuiuQgn_menu_mce_mmc_mask );
hgs
parents:
diff changeset
   184
#else
hgs
parents:
diff changeset
   185
        AknsUtils::CreateIconL(
hgs
parents:
diff changeset
   186
            AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
   187
            KAknsIIDQgnMenuMceMmcCxt,
hgs
parents:
diff changeset
   188
            bmp,
hgs
parents:
diff changeset
   189
            mask,
hgs
parents:
diff changeset
   190
            fileParse.FullName(),
hgs
parents:
diff changeset
   191
            EMbmMuiuQgn_menu_mce_mmc_cxt,
hgs
parents:
diff changeset
   192
            EMbmMuiuQgn_menu_mce_mmc_cxt_mask );
hgs
parents:
diff changeset
   193
#endif  //__SCALABLE_ICONS
hgs
parents:
diff changeset
   194
        contextPane->SetPicture( bmp, mask );
hgs
parents:
diff changeset
   195
        }
hgs
parents:
diff changeset
   196
    iOwnNaviPane = static_cast<CAknNavigationControlContainer*>
hgs
parents:
diff changeset
   197
        ( sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
hgs
parents:
diff changeset
   198
    iCoeEnv->FsSession().ReserveDriveSpace(
hgs
parents:
diff changeset
   199
        TInt( Document()->Session().CurrentDriveL() ),
hgs
parents:
diff changeset
   200
        KMsgDiskSpaceForDelete );
hgs
parents:
diff changeset
   201
  
hgs
parents:
diff changeset
   202
    CMsgEditorDocument* doc = Document();
hgs
parents:
diff changeset
   203
    iEditorShutter = CMsgEditorShutter::NewL(*doc);
hgs
parents:
diff changeset
   204
  
hgs
parents:
diff changeset
   205
    iMsgEditorAppUiExtension = new(ELeave) CMsgEditorAppUiExtension( this );
hgs
parents:
diff changeset
   206
    CAknEnv* env = iAvkonEnv;
hgs
parents:
diff changeset
   207
    CAknSettingCache& cache = env->SettingCache();
hgs
parents:
diff changeset
   208
    cache.RegisterPluginL( &( iMsgEditorAppUiExtension->iSettingCachePlugin ) );    
hgs
parents:
diff changeset
   209
    
hgs
parents:
diff changeset
   210
    iStatusPaneRes = StatusPane()->CurrentLayoutResId();
hgs
parents:
diff changeset
   211
    
hgs
parents:
diff changeset
   212
    iIterator = NULL;
hgs
parents:
diff changeset
   213
    }
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
// ---------------------------------------------------------
hgs
parents:
diff changeset
   216
// CMsgEditorAppUi::~CMsgEditorAppUi
hgs
parents:
diff changeset
   217
//
hgs
parents:
diff changeset
   218
// Destructor.
hgs
parents:
diff changeset
   219
// ---------------------------------------------------------
hgs
parents:
diff changeset
   220
//
hgs
parents:
diff changeset
   221
EXPORT_C CMsgEditorAppUi::~CMsgEditorAppUi()
hgs
parents:
diff changeset
   222
    {
hgs
parents:
diff changeset
   223
    delete iEditorShutter;
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
    Document()->SetEditorModelObserver( NULL );
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
    // remove resource file from CONE-maintained resource file list.
hgs
parents:
diff changeset
   228
    if ( iResourceFileOffset )
hgs
parents:
diff changeset
   229
        {
hgs
parents:
diff changeset
   230
        iEikonEnv->DeleteResourceFile( iResourceFileOffset );
hgs
parents:
diff changeset
   231
        }
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
    // call NotifyExit on completion of editing of an embedded document.
hgs
parents:
diff changeset
   234
    if ( iDoorObserver )
hgs
parents:
diff changeset
   235
        {
hgs
parents:
diff changeset
   236
        MEBLOGGER_WRITEF( _L( "MEB: CMsgEditorAppUi: Closing with exit mode %d" ), iExitMode );
hgs
parents:
diff changeset
   237
        iDoorObserver->NotifyExit( iExitMode );
hgs
parents:
diff changeset
   238
        }
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
    delete iView;
hgs
parents:
diff changeset
   241
    delete iLock;
hgs
parents:
diff changeset
   242
    delete iNaviDecorator;
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
    // we are referring instance of nvaidecoratoir only
hgs
parents:
diff changeset
   245
    // no need to delete, alreday deleted in  delete iNaviDecorator;
hgs
parents:
diff changeset
   246
    //delete iIterator;
hgs
parents:
diff changeset
   247
hgs
parents:
diff changeset
   248
    // delete files from our temp directory.
hgs
parents:
diff changeset
   249
    if ( iFileMan )
hgs
parents:
diff changeset
   250
        {
hgs
parents:
diff changeset
   251
        TFileName temppath;
hgs
parents:
diff changeset
   252
        MsgAttachmentUtils::GetMsgEditorTempPath( temppath );
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
        /*TInt err =*/ iFileMan->Delete( temppath /*, CFileMan::ERecurse*/ );
hgs
parents:
diff changeset
   255
        //TInt err2 = iFileMan->RmDir(temppath); // remove directory
hgs
parents:
diff changeset
   256
        }
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
    delete iFileMan;
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260
    // Uninitialize FeatureManager and members
hgs
parents:
diff changeset
   261
    FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
   262
    if( iMsgEditorAppUiExtension )
hgs
parents:
diff changeset
   263
        {
hgs
parents:
diff changeset
   264
        CAknEnv* env = iAvkonEnv;
hgs
parents:
diff changeset
   265
        CAknSettingCache& cache = env->SettingCache();
hgs
parents:
diff changeset
   266
        cache.DeRegisterPlugin( &( iMsgEditorAppUiExtension->iSettingCachePlugin ) );
hgs
parents:
diff changeset
   267
        delete iMsgEditorAppUiExtension;
hgs
parents:
diff changeset
   268
        }    
hgs
parents:
diff changeset
   269
    }
hgs
parents:
diff changeset
   270
hgs
parents:
diff changeset
   271
// ---------------------------------------------------------
hgs
parents:
diff changeset
   272
// CMsgEditorAppUi::HandleKeyEventL
hgs
parents:
diff changeset
   273
//
hgs
parents:
diff changeset
   274
// Route key events to view.
hgs
parents:
diff changeset
   275
// ---------------------------------------------------------
hgs
parents:
diff changeset
   276
//
hgs
parents:
diff changeset
   277
EXPORT_C TKeyResponse CMsgEditorAppUi::HandleKeyEventL(
hgs
parents:
diff changeset
   278
    const TKeyEvent& aKeyEvent, TEventCode aType )
hgs
parents:
diff changeset
   279
    {
hgs
parents:
diff changeset
   280
    if ( iView )
hgs
parents:
diff changeset
   281
        {
hgs
parents:
diff changeset
   282
        return iView->OfferKeyEventL( aKeyEvent, aType );
hgs
parents:
diff changeset
   283
        }
hgs
parents:
diff changeset
   284
    return EKeyWasNotConsumed;
hgs
parents:
diff changeset
   285
    }
hgs
parents:
diff changeset
   286
hgs
parents:
diff changeset
   287
// ---------------------------------------------------------
hgs
parents:
diff changeset
   288
// CMsgEditorAppUi::HandleWsEventL
hgs
parents:
diff changeset
   289
//
hgs
parents:
diff changeset
   290
//
hgs
parents:
diff changeset
   291
// ---------------------------------------------------------
hgs
parents:
diff changeset
   292
//
hgs
parents:
diff changeset
   293
EXPORT_C void CMsgEditorAppUi::HandleWsEventL( const TWsEvent& aEvent,CCoeControl* aDestination )
hgs
parents:
diff changeset
   294
    {
hgs
parents:
diff changeset
   295
    TInt type = aEvent.Type();
hgs
parents:
diff changeset
   296
hgs
parents:
diff changeset
   297
    if ( type == EEventKey )
hgs
parents:
diff changeset
   298
        {
hgs
parents:
diff changeset
   299
        TKeyEvent* key = aEvent.Key();
hgs
parents:
diff changeset
   300
        if ( ( key->iModifiers & EModifierShift ) &&
hgs
parents:
diff changeset
   301
            ( key->iCode == EKeyBackspace ) )
hgs
parents:
diff changeset
   302
            {
hgs
parents:
diff changeset
   303
            if ( iView )
hgs
parents:
diff changeset
   304
                {
hgs
parents:
diff changeset
   305
                CMsgBodyControl* body = 
hgs
parents:
diff changeset
   306
                        static_cast<CMsgBodyControl*>( iView->ControlById( EMsgComponentIdBody ) );
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
                if ( body && body->IsReadOnly() )
hgs
parents:
diff changeset
   309
                    {
hgs
parents:
diff changeset
   310
                    TRAP_IGNORE( SaveBodyL( body ) );
hgs
parents:
diff changeset
   311
                    }
hgs
parents:
diff changeset
   312
                }
hgs
parents:
diff changeset
   313
hgs
parents:
diff changeset
   314
            key->iModifiers &= ~EModifierShift;
hgs
parents:
diff changeset
   315
            key->iCode = EKeyDelete;
hgs
parents:
diff changeset
   316
            }
hgs
parents:
diff changeset
   317
        }
hgs
parents:
diff changeset
   318
        
hgs
parents:
diff changeset
   319
    if ( type != KAknUidValueEndKeyCloseEvent ||
hgs
parents:
diff changeset
   320
         iCloseWithEndKey )
hgs
parents:
diff changeset
   321
        {
hgs
parents:
diff changeset
   322
        CAknAppUi::HandleWsEventL( aEvent, aDestination );
hgs
parents:
diff changeset
   323
        }
hgs
parents:
diff changeset
   324
    }
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
// ---------------------------------------------------------
hgs
parents:
diff changeset
   327
// CMsgEditorAppUi::NextMessageL
hgs
parents:
diff changeset
   328
//
hgs
parents:
diff changeset
   329
// Set a specific exit code for opening next or previous message. Codes are
hgs
parents:
diff changeset
   330
// defined in MuiuMsgEmbeddedEditorWatchingOperation.h 
hgs
parents:
diff changeset
   331
// and handled by MCE after msg viewer has been closed.
hgs
parents:
diff changeset
   332
// ---------------------------------------------------------
hgs
parents:
diff changeset
   333
//
hgs
parents:
diff changeset
   334
EXPORT_C void CMsgEditorAppUi::NextMessageL( TBool aForward )
hgs
parents:
diff changeset
   335
    {
hgs
parents:
diff changeset
   336
    // Next is ETrue if layout is EAknLayoutIdABRW,
hgs
parents:
diff changeset
   337
    // EFalse if EAknLayoutIdELAF or EAknLayoutIdAPAC
hgs
parents:
diff changeset
   338
    if ( AknLayoutUtils::LayoutMirrored() )
hgs
parents:
diff changeset
   339
        {
hgs
parents:
diff changeset
   340
        aForward = !aForward;
hgs
parents:
diff changeset
   341
        }
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
    iMsgNaviDirection = aForward;
hgs
parents:
diff changeset
   344
    
hgs
parents:
diff changeset
   345
    // Check if next/previous message 
hgs
parents:
diff changeset
   346
    __ASSERT_DEBUG( iIterator != NULL, Panic( ENullPointer1 ) );
hgs
parents:
diff changeset
   347
     if ( aForward )
hgs
parents:
diff changeset
   348
         {
hgs
parents:
diff changeset
   349
         iIterator->SetNextMessage();
hgs
parents:
diff changeset
   350
         
hgs
parents:
diff changeset
   351
         }
hgs
parents:
diff changeset
   352
     else
hgs
parents:
diff changeset
   353
         {
hgs
parents:
diff changeset
   354
         iIterator->SetPreviousMessage();
hgs
parents:
diff changeset
   355
         }
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
     RProperty::Set( KPSUidMuiu, KMuiuKeyNextMsg,
hgs
parents:
diff changeset
   358
              iIterator->CurrentMessage().Id() );
hgs
parents:
diff changeset
   359
         
hgs
parents:
diff changeset
   360
#ifdef RD_MSG_FAST_PREV_NEXT
hgs
parents:
diff changeset
   361
    // Check if next/previous message can be fast opened by viewer
hgs
parents:
diff changeset
   362
    
hgs
parents:
diff changeset
   363
    if ( CanFastOpenL( *iIterator) )
hgs
parents:
diff changeset
   364
        {
hgs
parents:
diff changeset
   365
        // Load next/previous message
hgs
parents:
diff changeset
   366
        TRAPD( err, Document()->SetEntryL( iIterator->CurrentMessage().Id() ) );
hgs
parents:
diff changeset
   367
        // If fast open fails, view is incompletely constructed
hgs
parents:
diff changeset
   368
        // Drop back to mce
hgs
parents:
diff changeset
   369
        if( err == KErrCancel )
hgs
parents:
diff changeset
   370
            {
hgs
parents:
diff changeset
   371
            /* It is a known-valid failure(quick lauch cancelled in viewers due to heterogenous messages)
hgs
parents:
diff changeset
   372
             * In that case, reset the current entry to original and exit with correct code so that message
hgs
parents:
diff changeset
   373
             * will be launched completely from MCE.
hgs
parents:
diff changeset
   374
             */
hgs
parents:
diff changeset
   375
            if ( iMsgNaviDirection )
hgs
parents:
diff changeset
   376
                {
hgs
parents:
diff changeset
   377
                iIterator->SetPreviousMessage();
hgs
parents:
diff changeset
   378
                }
hgs
parents:
diff changeset
   379
            else
hgs
parents:
diff changeset
   380
                {
hgs
parents:
diff changeset
   381
                iIterator->SetNextMessage();
hgs
parents:
diff changeset
   382
                }
hgs
parents:
diff changeset
   383
            Document()->SetEntryWithoutNotificationL( iIterator->CurrentMessage().Id() );
hgs
parents:
diff changeset
   384
            iExitMode = iMsgNaviDirection ?
hgs
parents:
diff changeset
   385
                MApaEmbeddedDocObserver::TExitMode(
hgs
parents:
diff changeset
   386
                    CMsgEmbeddedEditorWatchingOperation::EMsgExitNext) :
hgs
parents:
diff changeset
   387
                MApaEmbeddedDocObserver::TExitMode(
hgs
parents:
diff changeset
   388
                    CMsgEmbeddedEditorWatchingOperation::EMsgExitPrevious);
hgs
parents:
diff changeset
   389
            Exit( iExitMode );
hgs
parents:
diff changeset
   390
            }
hgs
parents:
diff changeset
   391
        else if ( err != KErrNone )
hgs
parents:
diff changeset
   392
            {
hgs
parents:
diff changeset
   393
            // Reset the KMuiuKeyNextMsg to 0 
hgs
parents:
diff changeset
   394
            RProperty::Set( KPSUidMuiu, KMuiuKeyNextMsg,0 );
hgs
parents:
diff changeset
   395
            // Unknown error during quick launch.
hgs
parents:
diff changeset
   396
            iCoeEnv->HandleError( err );
hgs
parents:
diff changeset
   397
            iExitMode = MApaEmbeddedDocObserver::ENoChanges;
hgs
parents:
diff changeset
   398
            Exit( EAknSoftkeyClose );
hgs
parents:
diff changeset
   399
            }
hgs
parents:
diff changeset
   400
        }
hgs
parents:
diff changeset
   401
    else
hgs
parents:
diff changeset
   402
#endif // RD_MSG_FAST_PREV_NEXT
hgs
parents:
diff changeset
   403
        {
hgs
parents:
diff changeset
   404
        iExitMode = aForward ?
hgs
parents:
diff changeset
   405
            MApaEmbeddedDocObserver::TExitMode(
hgs
parents:
diff changeset
   406
                CMsgEmbeddedEditorWatchingOperation::EMsgExitNext) :
hgs
parents:
diff changeset
   407
            MApaEmbeddedDocObserver::TExitMode(
hgs
parents:
diff changeset
   408
                CMsgEmbeddedEditorWatchingOperation::EMsgExitPrevious);
hgs
parents:
diff changeset
   409
        Exit( iExitMode );
hgs
parents:
diff changeset
   410
        }
hgs
parents:
diff changeset
   411
    iMsgNaviDirection = KErrNotFound;
hgs
parents:
diff changeset
   412
    }
hgs
parents:
diff changeset
   413
hgs
parents:
diff changeset
   414
// ---------------------------------------------------------
hgs
parents:
diff changeset
   415
// CMsgEditorAppUi::IsNextMessageAvailableL
hgs
parents:
diff changeset
   416
//
hgs
parents:
diff changeset
   417
// Check if next or previous msg is available.
hgs
parents:
diff changeset
   418
// ---------------------------------------------------------
hgs
parents:
diff changeset
   419
//
hgs
parents:
diff changeset
   420
EXPORT_C TBool CMsgEditorAppUi::IsNextMessageAvailableL( TBool aForward )
hgs
parents:
diff changeset
   421
    {
hgs
parents:
diff changeset
   422
    TBool ret = EFalse;
hgs
parents:
diff changeset
   423
    
hgs
parents:
diff changeset
   424
    if ( iEikonEnv->StartedAsServerApp() )
hgs
parents:
diff changeset
   425
        {
hgs
parents:
diff changeset
   426
        CMsgEditorDocument* doc = Document();
hgs
parents:
diff changeset
   427
hgs
parents:
diff changeset
   428
        //We should not create iterator here  navi pane iterator
hgs
parents:
diff changeset
   429
        //will be refered  in  CMsgEditorAppUi
hgs
parents:
diff changeset
   430
         
hgs
parents:
diff changeset
   431
hgs
parents:
diff changeset
   432
        // Next is ETrue if layout is EAknLayoutIdABRW,
hgs
parents:
diff changeset
   433
        // EFalse if EAknLayoutIdELAF or EAknLayoutIdAPAC
hgs
parents:
diff changeset
   434
        if ( AknLayoutUtils::LayoutMirrored() )
hgs
parents:
diff changeset
   435
            {
hgs
parents:
diff changeset
   436
            aForward = !aForward;
hgs
parents:
diff changeset
   437
            }
hgs
parents:
diff changeset
   438
		if(iIterator)
hgs
parents:
diff changeset
   439
		{
hgs
parents:
diff changeset
   440
        	if ( aForward )
hgs
parents:
diff changeset
   441
            	{
hgs
parents:
diff changeset
   442
            	if ( iIterator->NextMessageExists() )
hgs
parents:
diff changeset
   443
                	{
hgs
parents:
diff changeset
   444
                	ret = ETrue;
hgs
parents:
diff changeset
   445
                	}
hgs
parents:
diff changeset
   446
            	}
hgs
parents:
diff changeset
   447
        	else
hgs
parents:
diff changeset
   448
            	{
hgs
parents:
diff changeset
   449
            	if ( iIterator->PreviousMessageExists() )
hgs
parents:
diff changeset
   450
                	{
hgs
parents:
diff changeset
   451
                	ret = ETrue;
hgs
parents:
diff changeset
   452
                	}
hgs
parents:
diff changeset
   453
            	}
hgs
parents:
diff changeset
   454
		}
hgs
parents:
diff changeset
   455
	
hgs
parents:
diff changeset
   456
        }
hgs
parents:
diff changeset
   457
        
hgs
parents:
diff changeset
   458
    return ret;
hgs
parents:
diff changeset
   459
    }
hgs
parents:
diff changeset
   460
hgs
parents:
diff changeset
   461
// ---------------------------------------------------------
hgs
parents:
diff changeset
   462
// CMsgEditorAppUi::MessageIndexInFolderL
hgs
parents:
diff changeset
   463
//
hgs
parents:
diff changeset
   464
// Returns index of current msg and also total number of msgs in folder.
hgs
parents:
diff changeset
   465
// ---------------------------------------------------------
hgs
parents:
diff changeset
   466
//
hgs
parents:
diff changeset
   467
EXPORT_C void CMsgEditorAppUi::MessageIndexInFolderL( TInt& aCurrentIndex, 
hgs
parents:
diff changeset
   468
                                                      TInt& aMsgsInFolder )
hgs
parents:
diff changeset
   469
    {
hgs
parents:
diff changeset
   470
    if ( iEikonEnv->StartedAsServerApp() )
hgs
parents:
diff changeset
   471
        {
hgs
parents:
diff changeset
   472
        CMsgEditorDocument* doc = Document();
hgs
parents:
diff changeset
   473
        //We should not create iterator here, navi pane iterator
hgs
parents:
diff changeset
   474
        //will be refered  in  CMsgEditorAppUi
hgs
parents:
diff changeset
   475
        if(iIterator)
hgs
parents:
diff changeset
   476
            {
hgs
parents:
diff changeset
   477
        	aCurrentIndex = iIterator->CurrentMessageIndex();
hgs
parents:
diff changeset
   478
        	aMsgsInFolder = iIterator->MessagesInFolder();
hgs
parents:
diff changeset
   479
            }
hgs
parents:
diff changeset
   480
        }
hgs
parents:
diff changeset
   481
    else
hgs
parents:
diff changeset
   482
        {
hgs
parents:
diff changeset
   483
        aCurrentIndex = 0;
hgs
parents:
diff changeset
   484
        aMsgsInFolder = 0;
hgs
parents:
diff changeset
   485
        }
hgs
parents:
diff changeset
   486
    }
hgs
parents:
diff changeset
   487
hgs
parents:
diff changeset
   488
// ---------------------------------------------------------
hgs
parents:
diff changeset
   489
// CMsgEditorAppUi::MoveMessageEntryL
hgs
parents:
diff changeset
   490
//
hgs
parents:
diff changeset
   491
// Moves an entry to another location.
hgs
parents:
diff changeset
   492
// ---------------------------------------------------------
hgs
parents:
diff changeset
   493
//
hgs
parents:
diff changeset
   494
EXPORT_C TMsvId CMsgEditorAppUi::MoveMessageEntryL( TMsvId aTarget ) const
hgs
parents:
diff changeset
   495
    {
hgs
parents:
diff changeset
   496
    TMsvEntry msvEntry = Document()->Entry();
hgs
parents:
diff changeset
   497
    TMsvId id = KMsvNullIndexEntryId;
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
    if ( msvEntry.Parent() != aTarget )
hgs
parents:
diff changeset
   500
        {
hgs
parents:
diff changeset
   501
        CAknInputBlock::NewLC();
hgs
parents:
diff changeset
   502
hgs
parents:
diff changeset
   503
        CMsvEntry* parentEntry = Document()->Session().GetEntryL( msvEntry.Parent() );
hgs
parents:
diff changeset
   504
        CleanupStack::PushL( parentEntry );
hgs
parents:
diff changeset
   505
hgs
parents:
diff changeset
   506
        // -- Change sort parameters so that parentEntry->MoveL does not leave as the child is invisible.
hgs
parents:
diff changeset
   507
        TMsvSelectionOrdering sort = parentEntry->SortType();
hgs
parents:
diff changeset
   508
        sort.SetShowInvisibleEntries( ETrue );
hgs
parents:
diff changeset
   509
        parentEntry->SetSortTypeL( sort );
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
        // Copy original from the parent to the new location.
hgs
parents:
diff changeset
   512
        CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
hgs
parents:
diff changeset
   513
hgs
parents:
diff changeset
   514
        CMsvOperation* op = parentEntry->MoveL(
hgs
parents:
diff changeset
   515
            msvEntry.Id(), aTarget, wait->iStatus );
hgs
parents:
diff changeset
   516
        CleanupStack::PushL( op );
hgs
parents:
diff changeset
   517
        wait->Start(); // wait for asynch operation
hgs
parents:
diff changeset
   518
hgs
parents:
diff changeset
   519
        TMsvLocalOperationProgress prog = McliUtils::GetLocalProgressL( *op );
hgs
parents:
diff changeset
   520
        User::LeaveIfError( prog.iError );
hgs
parents:
diff changeset
   521
        id = prog.iId;
hgs
parents:
diff changeset
   522
hgs
parents:
diff changeset
   523
        CleanupStack::PopAndDestroy( 4 );  // op, wait, parentEntry, absorber
hgs
parents:
diff changeset
   524
        }
hgs
parents:
diff changeset
   525
hgs
parents:
diff changeset
   526
    return id;
hgs
parents:
diff changeset
   527
    }
hgs
parents:
diff changeset
   528
hgs
parents:
diff changeset
   529
// ---------------------------------------------------------
hgs
parents:
diff changeset
   530
// CMsgEditorAppUi::DeleteAndExitL
hgs
parents:
diff changeset
   531
//
hgs
parents:
diff changeset
   532
// Deletes current entry and then exits.
hgs
parents:
diff changeset
   533
// ---------------------------------------------------------
hgs
parents:
diff changeset
   534
//
hgs
parents:
diff changeset
   535
EXPORT_C void CMsgEditorAppUi::DeleteAndExitL()
hgs
parents:
diff changeset
   536
    {
hgs
parents:
diff changeset
   537
    DeleteCurrentEntryL();
hgs
parents:
diff changeset
   538
    Exit( EAknSoftkeyBack );
hgs
parents:
diff changeset
   539
    }
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
// ---------------------------------------------------------
hgs
parents:
diff changeset
   542
// CMsgEditorAppUi::DeleteCurrentEntryL
hgs
parents:
diff changeset
   543
//
hgs
parents:
diff changeset
   544
// Deletes current entry.
hgs
parents:
diff changeset
   545
// ---------------------------------------------------------
hgs
parents:
diff changeset
   546
//
hgs
parents:
diff changeset
   547
EXPORT_C void CMsgEditorAppUi::DeleteCurrentEntryL()
hgs
parents:
diff changeset
   548
    {
hgs
parents:
diff changeset
   549
    CMsgEditorDocument* doc = Document();
hgs
parents:
diff changeset
   550
    UnlockEntry();
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
    TInt msgStoreDrive = TInt( doc->Session().CurrentDriveL() );
hgs
parents:
diff changeset
   553
    iCoeEnv->FsSession().GetReserveAccess( msgStoreDrive );
hgs
parents:
diff changeset
   554
hgs
parents:
diff changeset
   555
    if ( doc->CurrentEntry().OwningService() == KMsvLocalServiceIndexEntryId )
hgs
parents:
diff changeset
   556
        {
hgs
parents:
diff changeset
   557
        const TMsvId id = doc->Entry().Id();
hgs
parents:
diff changeset
   558
        //doc->CurrentEntry().SetEntryL( doc->Entry().Parent() );
hgs
parents:
diff changeset
   559
        TRAPD( 
hgs
parents:
diff changeset
   560
                err, 
hgs
parents:
diff changeset
   561
                {
hgs
parents:
diff changeset
   562
                doc->CurrentEntry().SetEntryL( doc->Entry().Parent() ); 
hgs
parents:
diff changeset
   563
                doc->CurrentEntry().DeleteL( id ); 
hgs
parents:
diff changeset
   564
                }
hgs
parents:
diff changeset
   565
            );
hgs
parents:
diff changeset
   566
        if ( err != KErrNone )
hgs
parents:
diff changeset
   567
            {
hgs
parents:
diff changeset
   568
            doc->Session().RemoveEntry( id );
hgs
parents:
diff changeset
   569
            }
hgs
parents:
diff changeset
   570
        }
hgs
parents:
diff changeset
   571
    else
hgs
parents:
diff changeset
   572
        {
hgs
parents:
diff changeset
   573
        CMsvEntrySelection* sel = new ( ELeave ) CMsvEntrySelection;
hgs
parents:
diff changeset
   574
        CleanupStack::PushL( sel );
hgs
parents:
diff changeset
   575
        TMsvId id = doc->Entry().Id();
hgs
parents:
diff changeset
   576
        sel->AppendL( id );
hgs
parents:
diff changeset
   577
        doc->Mtm().SwitchCurrentEntryL( doc->Entry().Parent() );
hgs
parents:
diff changeset
   578
hgs
parents:
diff changeset
   579
        CMuiuOperationWait* wait = CMuiuOperationWait::NewLC();
hgs
parents:
diff changeset
   580
hgs
parents:
diff changeset
   581
        CMsvOperation* op = doc->MtmUi().DeleteFromL( *sel, wait->iStatus );
hgs
parents:
diff changeset
   582
        CleanupStack::PushL( op );
hgs
parents:
diff changeset
   583
hgs
parents:
diff changeset
   584
        wait->Start();
hgs
parents:
diff changeset
   585
hgs
parents:
diff changeset
   586
        const TInt err = doc->MtmUi().DisplayProgressSummary( op->ProgressL() );
hgs
parents:
diff changeset
   587
        CleanupStack::PopAndDestroy( 3, sel );  // sel, wait, op
hgs
parents:
diff changeset
   588
        if ( err == KErrCancel )
hgs
parents:
diff changeset
   589
            {
hgs
parents:
diff changeset
   590
            doc->Mtm().SwitchCurrentEntryL( id );
hgs
parents:
diff changeset
   591
            LockEntryL();
hgs
parents:
diff changeset
   592
            return ;
hgs
parents:
diff changeset
   593
            }
hgs
parents:
diff changeset
   594
        User::LeaveIfError( err );
hgs
parents:
diff changeset
   595
        }
hgs
parents:
diff changeset
   596
hgs
parents:
diff changeset
   597
    iCoeEnv->FsSession().ReleaseReserveAccess( msgStoreDrive );
hgs
parents:
diff changeset
   598
    }
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
// ---------------------------------------------------------
hgs
parents:
diff changeset
   601
// CMsgEditorAppUi::PrepareToExit
hgs
parents:
diff changeset
   602
//
hgs
parents:
diff changeset
   603
//
hgs
parents:
diff changeset
   604
// ---------------------------------------------------------
hgs
parents:
diff changeset
   605
//
hgs
parents:
diff changeset
   606
EXPORT_C void CMsgEditorAppUi::PrepareToExit()
hgs
parents:
diff changeset
   607
    {
hgs
parents:
diff changeset
   608
    CMsgEditorDocument* doc = Document();
hgs
parents:
diff changeset
   609
hgs
parents:
diff changeset
   610
    if ( doc->HasModel() )
hgs
parents:
diff changeset
   611
        {
hgs
parents:
diff changeset
   612
        if ( doc->Entry().InPreparation() )
hgs
parents:
diff changeset
   613
            {
hgs
parents:
diff changeset
   614
            doc->Session().RemoveEntry( doc->Entry().Id() );
hgs
parents:
diff changeset
   615
            }
hgs
parents:
diff changeset
   616
        }
hgs
parents:
diff changeset
   617
hgs
parents:
diff changeset
   618
    CEikAppUi::PrepareToExit();
hgs
parents:
diff changeset
   619
    }
hgs
parents:
diff changeset
   620
hgs
parents:
diff changeset
   621
// ---------------------------------------------------------
hgs
parents:
diff changeset
   622
// CMsgEditorAppUi::ReplyL
hgs
parents:
diff changeset
   623
//
hgs
parents:
diff changeset
   624
// Asynchronous Mtm reply command.
hgs
parents:
diff changeset
   625
// ---------------------------------------------------------
hgs
parents:
diff changeset
   626
//
hgs
parents:
diff changeset
   627
EXPORT_C void CMsgEditorAppUi::ReplyL(
hgs
parents:
diff changeset
   628
    TMsvId aTarget, TBool aIncludeOriginal /*= ETrue*/ )
hgs
parents:
diff changeset
   629
    {
hgs
parents:
diff changeset
   630
    TMsvPartList parts =
hgs
parents:
diff changeset
   631
        KMsvMessagePartDescription |
hgs
parents:
diff changeset
   632
        KMsvMessagePartOriginator;
hgs
parents:
diff changeset
   633
hgs
parents:
diff changeset
   634
    if ( aIncludeOriginal )
hgs
parents:
diff changeset
   635
        {
hgs
parents:
diff changeset
   636
        parts |= KMsvMessagePartBody;
hgs
parents:
diff changeset
   637
        }
hgs
parents:
diff changeset
   638
hgs
parents:
diff changeset
   639
    CBaseMtmUi& mtmUi = Document()->MtmUi();
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
    // to by-pass scanner warning about member variable being stored into
hgs
parents:
diff changeset
   642
    // cleanup stack blocker is first stored into temporary variable. Storing
hgs
parents:
diff changeset
   643
    // is allowed here as it is not owned.
hgs
parents:
diff changeset
   644
hgs
parents:
diff changeset
   645
    CMuiuOperationWait* wait =
hgs
parents:
diff changeset
   646
        CMuiuOperationWait::NewLC( EActivePriorityWsEvents + 10 );
hgs
parents:
diff changeset
   647
hgs
parents:
diff changeset
   648
    mtmUi.SetPreferences( mtmUi.Preferences() | EMtmUiFlagEditorPreferEmbedded );
hgs
parents:
diff changeset
   649
    CMsvOperation* oper = mtmUi.ReplyL( aTarget, parts, wait->iStatus );
hgs
parents:
diff changeset
   650
    CleanupStack::PushL( oper );
hgs
parents:
diff changeset
   651
hgs
parents:
diff changeset
   652
    wait->Start();
hgs
parents:
diff changeset
   653
    
hgs
parents:
diff changeset
   654
    CleanupStack::PopAndDestroy( 2 );  // absorber, wait, oper
hgs
parents:
diff changeset
   655
    }
hgs
parents:
diff changeset
   656
hgs
parents:
diff changeset
   657
// ---------------------------------------------------------
hgs
parents:
diff changeset
   658
// CMsgEditorAppUi::ReplyToAllL
hgs
parents:
diff changeset
   659
//
hgs
parents:
diff changeset
   660
// Asynchronous Mtm reply all command.
hgs
parents:
diff changeset
   661
// ---------------------------------------------------------
hgs
parents:
diff changeset
   662
//
hgs
parents:
diff changeset
   663
EXPORT_C void CMsgEditorAppUi::ReplyToAllL(
hgs
parents:
diff changeset
   664
    TMsvId aTarget, TBool aIncludeOriginal /*= ETrue*/ )
hgs
parents:
diff changeset
   665
    {
hgs
parents:
diff changeset
   666
    TMsvPartList parts =
hgs
parents:
diff changeset
   667
        KMsvMessagePartDescription |
hgs
parents:
diff changeset
   668
        KMsvMessagePartRecipient |
hgs
parents:
diff changeset
   669
        KMsvMessagePartOriginator ;
hgs
parents:
diff changeset
   670
hgs
parents:
diff changeset
   671
    if ( aIncludeOriginal )
hgs
parents:
diff changeset
   672
        {
hgs
parents:
diff changeset
   673
        parts |= KMsvMessagePartBody;
hgs
parents:
diff changeset
   674
        }
hgs
parents:
diff changeset
   675
hgs
parents:
diff changeset
   676
    CBaseMtmUi& mtmUi = Document()->MtmUi();
hgs
parents:
diff changeset
   677
    
hgs
parents:
diff changeset
   678
    // to by-pass scanner warning about member variable being stored into
hgs
parents:
diff changeset
   679
    // cleanup stack blocker is first stored into temporary variable. Storing
hgs
parents:
diff changeset
   680
    // is allowed here as it is not owned.
hgs
parents:
diff changeset
   681
    CAknInputBlock* blocker = CAknInputBlock::NewCancelHandlerLC( this );
hgs
parents:
diff changeset
   682
    iInputBlocker = blocker;
hgs
parents:
diff changeset
   683
hgs
parents:
diff changeset
   684
    CMuiuOperationWait* wait =
hgs
parents:
diff changeset
   685
        CMuiuOperationWait::NewLC( EActivePriorityWsEvents + 10 );
hgs
parents:
diff changeset
   686
hgs
parents:
diff changeset
   687
    mtmUi.SetPreferences( mtmUi.Preferences() | EMtmUiFlagEditorPreferEmbedded );
hgs
parents:
diff changeset
   688
    CMsvOperation* oper = mtmUi.ReplyL( aTarget, parts, wait->iStatus );
hgs
parents:
diff changeset
   689
    CleanupStack::PushL( oper );
hgs
parents:
diff changeset
   690
hgs
parents:
diff changeset
   691
    wait->Start();
hgs
parents:
diff changeset
   692
    
hgs
parents:
diff changeset
   693
    CleanupStack::PopAndDestroy( 3, iInputBlocker );  // absorber, wait, oper
hgs
parents:
diff changeset
   694
    iInputBlocker = NULL;
hgs
parents:
diff changeset
   695
    }
hgs
parents:
diff changeset
   696
hgs
parents:
diff changeset
   697
// ---------------------------------------------------------
hgs
parents:
diff changeset
   698
// CMsgEditorAppUi::ForwardL
hgs
parents:
diff changeset
   699
//
hgs
parents:
diff changeset
   700
// Asynchronous Mtm forward command.
hgs
parents:
diff changeset
   701
// ---------------------------------------------------------
hgs
parents:
diff changeset
   702
//
hgs
parents:
diff changeset
   703
EXPORT_C void CMsgEditorAppUi::ForwardL( TMsvId aTarget )
hgs
parents:
diff changeset
   704
    {
hgs
parents:
diff changeset
   705
    TMsvPartList parts =
hgs
parents:
diff changeset
   706
        KMsvMessagePartBody |
hgs
parents:
diff changeset
   707
        KMsvMessagePartDescription |
hgs
parents:
diff changeset
   708
        KMsvMessagePartAttachments;
hgs
parents:
diff changeset
   709
hgs
parents:
diff changeset
   710
    CBaseMtmUi& mtmUi = Document()->MtmUi();
hgs
parents:
diff changeset
   711
    mtmUi.SetPreferences( mtmUi.Preferences() | EMtmUiFlagEditorPreferEmbedded );
hgs
parents:
diff changeset
   712
    
hgs
parents:
diff changeset
   713
    // to by-pass scanner warning about member variable being stored into
hgs
parents:
diff changeset
   714
    // cleanup stack blocker is first stored into temporary variable. Storing
hgs
parents:
diff changeset
   715
    // is allowed here as it is not owned.
hgs
parents:
diff changeset
   716
    CAknInputBlock* blocker = CAknInputBlock::NewCancelHandlerLC( this );
hgs
parents:
diff changeset
   717
    iInputBlocker = blocker;
hgs
parents:
diff changeset
   718
    
hgs
parents:
diff changeset
   719
    CMuiuOperationWait* wait = CMuiuOperationWait::NewLC( EActivePriorityWsEvents + 10 );
hgs
parents:
diff changeset
   720
    
hgs
parents:
diff changeset
   721
    CMsvOperation* oper = mtmUi.ForwardL( aTarget, parts, wait->iStatus );
hgs
parents:
diff changeset
   722
    CleanupStack::PushL( oper );
hgs
parents:
diff changeset
   723
hgs
parents:
diff changeset
   724
    wait->Start();
hgs
parents:
diff changeset
   725
hgs
parents:
diff changeset
   726
    CleanupStack::PopAndDestroy( 3, iInputBlocker );  // absorber, wait, oper
hgs
parents:
diff changeset
   727
    iInputBlocker = NULL;
hgs
parents:
diff changeset
   728
    }
hgs
parents:
diff changeset
   729
hgs
parents:
diff changeset
   730
// ---------------------------------------------------------
hgs
parents:
diff changeset
   731
// CMsgEditorAppUi::InsertTemplate
hgs
parents:
diff changeset
   732
//
hgs
parents:
diff changeset
   733
//
hgs
parents:
diff changeset
   734
// ---------------------------------------------------------
hgs
parents:
diff changeset
   735
//
hgs
parents:
diff changeset
   736
EXPORT_C TInt CMsgEditorAppUi::InsertTemplateL( TInt aMaxChars /*= -1*/ )
hgs
parents:
diff changeset
   737
    {
hgs
parents:
diff changeset
   738
    __ASSERT_DEBUG( iView != NULL, Panic( ENullPointer1 ) );
hgs
parents:
diff changeset
   739
hgs
parents:
diff changeset
   740
    // get memo content from notepad to buffer.
hgs
parents:
diff changeset
   741
    HBufC* title = iEikonEnv->AllocReadResourceLC( R_QTN_MAIL_POPUP_TEXT_SEL_TEMP );
hgs
parents:
diff changeset
   742
hgs
parents:
diff changeset
   743
    HBufC* buf = CNotepadApi::FetchTemplateL( title );
hgs
parents:
diff changeset
   744
    CleanupStack::PushL( buf );
hgs
parents:
diff changeset
   745
hgs
parents:
diff changeset
   746
    TInt err = DoInsertTextL( buf, aMaxChars );
hgs
parents:
diff changeset
   747
hgs
parents:
diff changeset
   748
    CleanupStack::PopAndDestroy( 2, title ); // buf, title
hgs
parents:
diff changeset
   749
    return err;
hgs
parents:
diff changeset
   750
    }
hgs
parents:
diff changeset
   751
hgs
parents:
diff changeset
   752
// ---------------------------------------------------------
hgs
parents:
diff changeset
   753
// CMsgEditorAppUi::InsertTextMemoL
hgs
parents:
diff changeset
   754
//
hgs
parents:
diff changeset
   755
//
hgs
parents:
diff changeset
   756
// ---------------------------------------------------------
hgs
parents:
diff changeset
   757
//
hgs
parents:
diff changeset
   758
EXPORT_C TInt CMsgEditorAppUi::InsertTextMemoL( TInt aMaxChars )
hgs
parents:
diff changeset
   759
    {
hgs
parents:
diff changeset
   760
    __ASSERT_DEBUG( iView != NULL, Panic( ENullPointer1 ) );
hgs
parents:
diff changeset
   761
hgs
parents:
diff changeset
   762
    // get memo content from notepad to buffer.
hgs
parents:
diff changeset
   763
    HBufC* title = iEikonEnv->AllocReadResourceLC( R_QTN_NMAKE_FETCH_MEMO_PRMPT );
hgs
parents:
diff changeset
   764
hgs
parents:
diff changeset
   765
    HBufC* buf = CNotepadApi::FetchMemoL( title );
hgs
parents:
diff changeset
   766
    CleanupStack::PushL( buf );
hgs
parents:
diff changeset
   767
hgs
parents:
diff changeset
   768
    TInt err = DoInsertTextL( buf, aMaxChars );
hgs
parents:
diff changeset
   769
    
hgs
parents:
diff changeset
   770
    CleanupStack::PopAndDestroy( 2, title ); // buf, title
hgs
parents:
diff changeset
   771
    return err;
hgs
parents:
diff changeset
   772
    }
hgs
parents:
diff changeset
   773
hgs
parents:
diff changeset
   774
// ---------------------------------------------------------
hgs
parents:
diff changeset
   775
// CMsgEditorAppUi::DoInsertTextL
hgs
parents:
diff changeset
   776
//
hgs
parents:
diff changeset
   777
//
hgs
parents:
diff changeset
   778
// ---------------------------------------------------------
hgs
parents:
diff changeset
   779
//
hgs
parents:
diff changeset
   780
TInt CMsgEditorAppUi::DoInsertTextL( HBufC* aBuffer, TInt aMaxChars )
hgs
parents:
diff changeset
   781
    {
hgs
parents:
diff changeset
   782
    TInt err( KErrNone );
hgs
parents:
diff changeset
   783
    if ( aBuffer )
hgs
parents:
diff changeset
   784
        {
hgs
parents:
diff changeset
   785
        TInt buflen = aBuffer->Length();
hgs
parents:
diff changeset
   786
hgs
parents:
diff changeset
   787
        if ( aMaxChars == -1 || buflen <= aMaxChars )
hgs
parents:
diff changeset
   788
            {
hgs
parents:
diff changeset
   789
            CMsgBodyControl* body = 
hgs
parents:
diff changeset
   790
                    static_cast<CMsgBodyControl*>( iView->ControlById( EMsgComponentIdBody ) );
hgs
parents:
diff changeset
   791
hgs
parents:
diff changeset
   792
            if ( body )
hgs
parents:
diff changeset
   793
                {
hgs
parents:
diff changeset
   794
                CEikRichTextEditor& editor = body->Editor();
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
                if ( body != iView->FocusedControl() )
hgs
parents:
diff changeset
   797
                    {
hgs
parents:
diff changeset
   798
                    editor.SetCursorPosL( editor.TextLength(), EFalse );
hgs
parents:
diff changeset
   799
                    }
hgs
parents:
diff changeset
   800
hgs
parents:
diff changeset
   801
                body->InsertTextL( *aBuffer );
hgs
parents:
diff changeset
   802
hgs
parents:
diff changeset
   803
                iView->SetFocus( EMsgComponentIdBody );
hgs
parents:
diff changeset
   804
hgs
parents:
diff changeset
   805
                Document()->SetChanged( ETrue );
hgs
parents:
diff changeset
   806
                }
hgs
parents:
diff changeset
   807
            }
hgs
parents:
diff changeset
   808
        else
hgs
parents:
diff changeset
   809
            {
hgs
parents:
diff changeset
   810
            err = KErrOverflow;
hgs
parents:
diff changeset
   811
            }
hgs
parents:
diff changeset
   812
        }
hgs
parents:
diff changeset
   813
    else
hgs
parents:
diff changeset
   814
        {
hgs
parents:
diff changeset
   815
        err = KErrCancel;
hgs
parents:
diff changeset
   816
        }
hgs
parents:
diff changeset
   817
        
hgs
parents:
diff changeset
   818
    return err;
hgs
parents:
diff changeset
   819
    }
hgs
parents:
diff changeset
   820
hgs
parents:
diff changeset
   821
// ---------------------------------------------------------
hgs
parents:
diff changeset
   822
// CMsgEditorAppUi::UpdateNaviPaneL
hgs
parents:
diff changeset
   823
//
hgs
parents:
diff changeset
   824
// Updates navi pane.
hgs
parents:
diff changeset
   825
// ---------------------------------------------------------
hgs
parents:
diff changeset
   826
//
hgs
parents:
diff changeset
   827
EXPORT_C void CMsgEditorAppUi::UpdateNaviPaneL(
hgs
parents:
diff changeset
   828
    const CFbsBitmap* aBitmap     /*= NULL*/,
hgs
parents:
diff changeset
   829
    const CFbsBitmap* aBitmapMask /*= NULL*/ )
hgs
parents:
diff changeset
   830
    {
hgs
parents:
diff changeset
   831
    UpdateNaviPaneL( EFalse, aBitmap, aBitmapMask );
hgs
parents:
diff changeset
   832
    }
hgs
parents:
diff changeset
   833
hgs
parents:
diff changeset
   834
// ---------------------------------------------------------
hgs
parents:
diff changeset
   835
// CMsgEditorAppUi::UpdateNaviPaneL
hgs
parents:
diff changeset
   836
//
hgs
parents:
diff changeset
   837
// Updates navi pane.
hgs
parents:
diff changeset
   838
// ---------------------------------------------------------
hgs
parents:
diff changeset
   839
//
hgs
parents:
diff changeset
   840
void CMsgEditorAppUi::UpdateNaviPaneL(
hgs
parents:
diff changeset
   841
    TBool             aUpdateExisting,
hgs
parents:
diff changeset
   842
    const CFbsBitmap* aBitmap     /*= NULL*/,
hgs
parents:
diff changeset
   843
    const CFbsBitmap* aBitmapMask /*= NULL*/ )
hgs
parents:
diff changeset
   844
    {
hgs
parents:
diff changeset
   845
    if ( !iOwnNaviPane )
hgs
parents:
diff changeset
   846
        {
hgs
parents:
diff changeset
   847
        return;
hgs
parents:
diff changeset
   848
        }
hgs
parents:
diff changeset
   849
    TInt index = 0;
hgs
parents:
diff changeset
   850
    TInt msgs = 0;
hgs
parents:
diff changeset
   851
    HBufC* buf;
hgs
parents:
diff changeset
   852
hgs
parents:
diff changeset
   853
    MessageIndexInFolderL( index, msgs );
hgs
parents:
diff changeset
   854
hgs
parents:
diff changeset
   855
    TBool prevAvailable = IsNextMessageAvailableL( EFalse );
hgs
parents:
diff changeset
   856
    TBool nextAvailable = IsNextMessageAvailableL( ETrue );
hgs
parents:
diff changeset
   857
hgs
parents:
diff changeset
   858
    CArrayFixFlat<TInt>* array = new( ELeave ) CArrayFixFlat<TInt>( 2 );
hgs
parents:
diff changeset
   859
    CleanupStack::PushL( array );
hgs
parents:
diff changeset
   860
hgs
parents:
diff changeset
   861
    if ( msgs )
hgs
parents:
diff changeset
   862
        {
hgs
parents:
diff changeset
   863
        array->AppendL( index + 1 );
hgs
parents:
diff changeset
   864
        array->AppendL( msgs );
hgs
parents:
diff changeset
   865
        buf = StringLoader::LoadLC( R_QTN_STAT_MSG_NUMBER, *array, iCoeEnv );
hgs
parents:
diff changeset
   866
        }
hgs
parents:
diff changeset
   867
    else
hgs
parents:
diff changeset
   868
        {
hgs
parents:
diff changeset
   869
        // if no messages make empty message label.
hgs
parents:
diff changeset
   870
        buf = HBufC::NewLC( 0 );
hgs
parents:
diff changeset
   871
        prevAvailable = nextAvailable = 0;
hgs
parents:
diff changeset
   872
        }
hgs
parents:
diff changeset
   873
hgs
parents:
diff changeset
   874
    if ( aUpdateExisting )
hgs
parents:
diff changeset
   875
        {
hgs
parents:
diff changeset
   876
        if ( iNaviDecorator )
hgs
parents:
diff changeset
   877
            {
hgs
parents:
diff changeset
   878
            CAknTabGroup* tabGroup =
hgs
parents:
diff changeset
   879
                static_cast<CAknTabGroup*>( iNaviDecorator->DecoratedControl() );
hgs
parents:
diff changeset
   880
            tabGroup->ReplaceTabTextL( 0, *buf );
hgs
parents:
diff changeset
   881
hgs
parents:
diff changeset
   882
            iNaviDecorator->MakeScrollButtonVisible( ETrue );
hgs
parents:
diff changeset
   883
            iNaviDecorator->SetScrollButtonDimmed(
hgs
parents:
diff changeset
   884
                CAknNavigationDecorator::ELeftButton,
hgs
parents:
diff changeset
   885
                !prevAvailable );
hgs
parents:
diff changeset
   886
            iNaviDecorator->SetScrollButtonDimmed(
hgs
parents:
diff changeset
   887
                CAknNavigationDecorator::ERightButton,
hgs
parents:
diff changeset
   888
                !nextAvailable );
hgs
parents:
diff changeset
   889
hgs
parents:
diff changeset
   890
            iOwnNaviPane->PushL( *iNaviDecorator );
hgs
parents:
diff changeset
   891
            }
hgs
parents:
diff changeset
   892
        }
hgs
parents:
diff changeset
   893
    else
hgs
parents:
diff changeset
   894
        {
hgs
parents:
diff changeset
   895
        delete iNaviDecorator;
hgs
parents:
diff changeset
   896
        iNaviDecorator = NULL;
hgs
parents:
diff changeset
   897
        iNaviDecorator = iOwnNaviPane->CreateTabGroupL();
hgs
parents:
diff changeset
   898
        
hgs
parents:
diff changeset
   899
        CAknTabGroup* tabGroup =
hgs
parents:
diff changeset
   900
            static_cast<CAknTabGroup*>( iNaviDecorator->DecoratedControl() );
hgs
parents:
diff changeset
   901
        tabGroup->AddTabL( 0, *buf );            
hgs
parents:
diff changeset
   902
        tabGroup->SetActiveTabById( 0 );
hgs
parents:
diff changeset
   903
        // does not leave with one tab.
hgs
parents:
diff changeset
   904
        tabGroup->SetTabFixedWidthL( KTabWidthWithOneTab );
hgs
parents:
diff changeset
   905
hgs
parents:
diff changeset
   906
        iNaviDecorator->MakeScrollButtonVisible( ETrue );
hgs
parents:
diff changeset
   907
        iNaviDecorator->SetScrollButtonDimmed(
hgs
parents:
diff changeset
   908
            CAknNavigationDecorator::ELeftButton,
hgs
parents:
diff changeset
   909
            !prevAvailable );
hgs
parents:
diff changeset
   910
        iNaviDecorator->SetScrollButtonDimmed(
hgs
parents:
diff changeset
   911
            CAknNavigationDecorator::ERightButton,
hgs
parents:
diff changeset
   912
            !nextAvailable );
hgs
parents:
diff changeset
   913
hgs
parents:
diff changeset
   914
        iOwnNaviPane->PushL( *iNaviDecorator );
hgs
parents:
diff changeset
   915
hgs
parents:
diff changeset
   916
        if ( aBitmap && aBitmapMask )
hgs
parents:
diff changeset
   917
            {
hgs
parents:
diff changeset
   918
            // replace tab with new one containing text and bitmaps.
hgs
parents:
diff changeset
   919
            // this must be done after PushL because this transfers
hgs
parents:
diff changeset
   920
            // ownership of caller's bitmaps to tab group.
hgs
parents:
diff changeset
   921
            tabGroup->ReplaceTabL( 0, *buf, aBitmap, aBitmapMask );
hgs
parents:
diff changeset
   922
            }
hgs
parents:
diff changeset
   923
        }
hgs
parents:
diff changeset
   924
    CleanupStack::PopAndDestroy( 2, array ); // buf, array
hgs
parents:
diff changeset
   925
    }
hgs
parents:
diff changeset
   926
hgs
parents:
diff changeset
   927
// ---------------------------------------------------------
hgs
parents:
diff changeset
   928
// CMsgEditorAppUi::HandleIteratorEventL
hgs
parents:
diff changeset
   929
//
hgs
parents:
diff changeset
   930
//
hgs
parents:
diff changeset
   931
// ---------------------------------------------------------
hgs
parents:
diff changeset
   932
//
hgs
parents:
diff changeset
   933
EXPORT_C void CMsgEditorAppUi::HandleIteratorEventL(
hgs
parents:
diff changeset
   934
    TMessageIteratorEvent aEvent )
hgs
parents:
diff changeset
   935
    {
hgs
parents:
diff changeset
   936
    if ( aEvent == EFolderCountChanged )
hgs
parents:
diff changeset
   937
        {
hgs
parents:
diff changeset
   938
        UpdateNaviPaneL( ETrue );
hgs
parents:
diff changeset
   939
        }
hgs
parents:
diff changeset
   940
    }
hgs
parents:
diff changeset
   941
hgs
parents:
diff changeset
   942
// ---------------------------------------------------------
hgs
parents:
diff changeset
   943
// CMsgEditorAppUi::CallToSenderQueryL
hgs
parents:
diff changeset
   944
//
hgs
parents:
diff changeset
   945
//
hgs
parents:
diff changeset
   946
// ---------------------------------------------------------
hgs
parents:
diff changeset
   947
//
hgs
parents:
diff changeset
   948
EXPORT_C TBool CMsgEditorAppUi::CallToSenderQueryL(
hgs
parents:
diff changeset
   949
    const TDesC& aNumber, const TDesC& aAlias )
hgs
parents:
diff changeset
   950
    {
hgs
parents:
diff changeset
   951
    CDesCArrayFlat* strings = new ( ELeave ) CDesCArrayFlat( 2 );
hgs
parents:
diff changeset
   952
    CleanupStack::PushL( strings );
hgs
parents:
diff changeset
   953
hgs
parents:
diff changeset
   954
    strings->AppendL( aAlias );  // %0U
hgs
parents:
diff changeset
   955
    strings->AppendL( aNumber ); // %1U
hgs
parents:
diff changeset
   956
hgs
parents:
diff changeset
   957
    HBufC* prompt = StringLoader::LoadLC(
hgs
parents:
diff changeset
   958
        R_QTN_SMS_QUEST_CALL, *strings, iCoeEnv );
hgs
parents:
diff changeset
   959
hgs
parents:
diff changeset
   960
    CMsgSendKeyAcceptingQuery* dlg = CMsgSendKeyAcceptingQuery::NewL( *prompt );
hgs
parents:
diff changeset
   961
    TInt ret = dlg->ExecuteLD( R_MEB_CALLBACK_QUERY );
hgs
parents:
diff changeset
   962
hgs
parents:
diff changeset
   963
    CleanupStack::PopAndDestroy( 2, strings ); // strings, prompt
hgs
parents:
diff changeset
   964
hgs
parents:
diff changeset
   965
    return ( ret != 0 ); // No = EFalse, others = ETrue.
hgs
parents:
diff changeset
   966
    }
hgs
parents:
diff changeset
   967
hgs
parents:
diff changeset
   968
// ---------------------------------------------------------
hgs
parents:
diff changeset
   969
// CMsgEditorAppUi::ProcessCommandParametersL
hgs
parents:
diff changeset
   970
//
hgs
parents:
diff changeset
   971
// Parses command line parameter and launch model accoring to them.
hgs
parents:
diff changeset
   972
// ---------------------------------------------------------
hgs
parents:
diff changeset
   973
//
hgs
parents:
diff changeset
   974
EXPORT_C TBool CMsgEditorAppUi::ProcessCommandParametersL(
hgs
parents:
diff changeset
   975
    TApaCommand /*aCommand*/,
hgs
parents:
diff changeset
   976
    TFileName& /*aDocumentName*/,
hgs
parents:
diff changeset
   977
    const TDesC8& aTail )
hgs
parents:
diff changeset
   978
    {
hgs
parents:
diff changeset
   979
    CMsgEditorDocument& doc = *Document();
hgs
parents:
diff changeset
   980
hgs
parents:
diff changeset
   981
    if ( aTail.Length() > 0 )
hgs
parents:
diff changeset
   982
        {
hgs
parents:
diff changeset
   983
        // Get the parameters passed by the launching MTMUI.
hgs
parents:
diff changeset
   984
        TPckgBuf<TEditorParameters> paramPack;
hgs
parents:
diff changeset
   985
        const TInt paramSize = sizeof( TEditorParameters );
hgs
parents:
diff changeset
   986
hgs
parents:
diff changeset
   987
        __ASSERT_ALWAYS( aTail.Length() == paramSize, Panic( EInvalidArgument ) );
hgs
parents:
diff changeset
   988
hgs
parents:
diff changeset
   989
        paramPack.Copy( aTail );
hgs
parents:
diff changeset
   990
        const TEditorParameters& params = paramPack();
hgs
parents:
diff changeset
   991
        
hgs
parents:
diff changeset
   992
        // to by-pass scanner warning about member variable being stored into
hgs
parents:
diff changeset
   993
        // cleanup stack blocker is first stored into temporary variable. Storing
hgs
parents:
diff changeset
   994
        // is allowed here as it is not owned.
hgs
parents:
diff changeset
   995
        CAknInputBlock* blocker = CAknInputBlock::NewCancelHandlerLC( this );
hgs
parents:
diff changeset
   996
        iInputBlocker = blocker;
hgs
parents:
diff changeset
   997
hgs
parents:
diff changeset
   998
        doc.LaunchParametersL( params );
hgs
parents:
diff changeset
   999
        doc.EntryChangedL();  // notified after is unique (and unlocked).
hgs
parents:
diff changeset
  1000
        doc.PrepareToLaunchL( this );
hgs
parents:
diff changeset
  1001
hgs
parents:
diff changeset
  1002
        CleanupStack::PopAndDestroy( iInputBlocker );
hgs
parents:
diff changeset
  1003
        iInputBlocker = NULL;
hgs
parents:
diff changeset
  1004
        }
hgs
parents:
diff changeset
  1005
    else
hgs
parents:
diff changeset
  1006
        {
hgs
parents:
diff changeset
  1007
        // no parameters enable TestEditor launching...
hgs
parents:
diff changeset
  1008
        doc.PrepareToLaunchL( this );
hgs
parents:
diff changeset
  1009
        }
hgs
parents:
diff changeset
  1010
hgs
parents:
diff changeset
  1011
    return EFalse;
hgs
parents:
diff changeset
  1012
    }
hgs
parents:
diff changeset
  1013
hgs
parents:
diff changeset
  1014
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1015
// CMsgEditorAppUi::MenuBar
hgs
parents:
diff changeset
  1016
//
hgs
parents:
diff changeset
  1017
// Returns application menubar.
hgs
parents:
diff changeset
  1018
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1019
//
hgs
parents:
diff changeset
  1020
EXPORT_C CEikMenuBar* CMsgEditorAppUi::MenuBar() const
hgs
parents:
diff changeset
  1021
    {
hgs
parents:
diff changeset
  1022
    return iEikonEnv->AppUiFactory()->MenuBar();
hgs
parents:
diff changeset
  1023
    }
hgs
parents:
diff changeset
  1024
hgs
parents:
diff changeset
  1025
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1026
// CMsgEditorAppUi::SetEmphasis
hgs
parents:
diff changeset
  1027
//
hgs
parents:
diff changeset
  1028
// From MEikMenuObserver (called when menu is opened).
hgs
parents:
diff changeset
  1029
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1030
//
hgs
parents:
diff changeset
  1031
EXPORT_C void CMsgEditorAppUi::SetEmphasis(
hgs
parents:
diff changeset
  1032
    CCoeControl* aMenuControl, TBool aEmphasis )
hgs
parents:
diff changeset
  1033
    {
hgs
parents:
diff changeset
  1034
    if ( iView )
hgs
parents:
diff changeset
  1035
        {
hgs
parents:
diff changeset
  1036
        UpdateStackedControlFlags(
hgs
parents:
diff changeset
  1037
            iView,
hgs
parents:
diff changeset
  1038
            aEmphasis ? ECoeStackFlagRefusesFocus : 0,
hgs
parents:
diff changeset
  1039
            ECoeStackFlagRefusesFocus );
hgs
parents:
diff changeset
  1040
        }
hgs
parents:
diff changeset
  1041
hgs
parents:
diff changeset
  1042
    UpdateStackedControlFlags(
hgs
parents:
diff changeset
  1043
        aMenuControl,
hgs
parents:
diff changeset
  1044
        aEmphasis ? 0 : ECoeStackFlagRefusesFocus,
hgs
parents:
diff changeset
  1045
        ECoeStackFlagRefusesFocus );
hgs
parents:
diff changeset
  1046
hgs
parents:
diff changeset
  1047
    HandleStackChanged();
hgs
parents:
diff changeset
  1048
    }
hgs
parents:
diff changeset
  1049
hgs
parents:
diff changeset
  1050
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1051
// CMsgEditorAppUi::HandleEntryChangeL
hgs
parents:
diff changeset
  1052
//
hgs
parents:
diff changeset
  1053
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1054
// HandleEntryChangeL is called when the currently open message
hgs
parents:
diff changeset
  1055
// has been modified by some other messaging client. The default
hgs
parents:
diff changeset
  1056
// action is "do nothing", but editors can define their own event
hgs
parents:
diff changeset
  1057
// processing by overriding this function.
hgs
parents:
diff changeset
  1058
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1059
//
hgs
parents:
diff changeset
  1060
EXPORT_C void CMsgEditorAppUi::HandleEntryChangeL()
hgs
parents:
diff changeset
  1061
    {
hgs
parents:
diff changeset
  1062
    // no action
hgs
parents:
diff changeset
  1063
    }
hgs
parents:
diff changeset
  1064
hgs
parents:
diff changeset
  1065
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1066
// CMsgEditorAppUi::HandleEntryDeletedL
hgs
parents:
diff changeset
  1067
//
hgs
parents:
diff changeset
  1068
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1069
// HandleEntryDeletedL is called when the currently open message
hgs
parents:
diff changeset
  1070
// has been deleted by some other messaging client.
hgs
parents:
diff changeset
  1071
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1072
//
hgs
parents:
diff changeset
  1073
EXPORT_C void CMsgEditorAppUi::HandleEntryDeletedL()
hgs
parents:
diff changeset
  1074
    {
hgs
parents:
diff changeset
  1075
    // TODO: get error code from errorres.
hgs
parents:
diff changeset
  1076
    ViewErrorL(-7005);
hgs
parents:
diff changeset
  1077
hgs
parents:
diff changeset
  1078
    // close the application (and possible chain of viewers, editors and mce etc.).
hgs
parents:
diff changeset
  1079
    ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
  1080
    //Exit();
hgs
parents:
diff changeset
  1081
    }
hgs
parents:
diff changeset
  1082
hgs
parents:
diff changeset
  1083
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1084
// CMsgEditorAppUi::HandleEntryMovedL
hgs
parents:
diff changeset
  1085
//
hgs
parents:
diff changeset
  1086
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1087
// HandleEntryMovedL is called when the currently open message
hgs
parents:
diff changeset
  1088
// has been moved to some other folder, by some other messaging
hgs
parents:
diff changeset
  1089
// client.
hgs
parents:
diff changeset
  1090
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1091
//
hgs
parents:
diff changeset
  1092
EXPORT_C void CMsgEditorAppUi::HandleEntryMovedL(
hgs
parents:
diff changeset
  1093
    TMsvId /*aOldParent*/, TMsvId /*aNewParent*/ )
hgs
parents:
diff changeset
  1094
    {
hgs
parents:
diff changeset
  1095
    // refresh model content.
hgs
parents:
diff changeset
  1096
    Document()->SetEntryWithoutNotificationL( Document()->Entry().Id() );
hgs
parents:
diff changeset
  1097
    }
hgs
parents:
diff changeset
  1098
hgs
parents:
diff changeset
  1099
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1100
// CMsgEditorAppUi::HandleMtmGroupDeinstalledL
hgs
parents:
diff changeset
  1101
//
hgs
parents:
diff changeset
  1102
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1103
// HandleMtmGroupDeinstalledL is called when the MTM Group used
hgs
parents:
diff changeset
  1104
// by the currently open message has been removed from the device.
hgs
parents:
diff changeset
  1105
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1106
//
hgs
parents:
diff changeset
  1107
EXPORT_C void CMsgEditorAppUi::HandleMtmGroupDeinstalledL()
hgs
parents:
diff changeset
  1108
    {
hgs
parents:
diff changeset
  1109
    // TODO: get error code from errorres.
hgs
parents:
diff changeset
  1110
    ViewErrorL( -7006 );
hgs
parents:
diff changeset
  1111
hgs
parents:
diff changeset
  1112
    // close the application (and possible chain of viewers, editors and mce etc.).
hgs
parents:
diff changeset
  1113
    ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
  1114
    //Exit();
hgs
parents:
diff changeset
  1115
    }
hgs
parents:
diff changeset
  1116
hgs
parents:
diff changeset
  1117
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1118
// CMsgEditorAppUi::HandleGeneralErrorL
hgs
parents:
diff changeset
  1119
//
hgs
parents:
diff changeset
  1120
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1121
// HandleGeneralErrorL is called when some unknown error has
hgs
parents:
diff changeset
  1122
// happened. The aErrorCode parameter contains the error code.
hgs
parents:
diff changeset
  1123
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1124
//
hgs
parents:
diff changeset
  1125
EXPORT_C void CMsgEditorAppUi::HandleGeneralErrorL( TInt /*aErrorCode*/ )
hgs
parents:
diff changeset
  1126
    {
hgs
parents:
diff changeset
  1127
    // TODO: show note?
hgs
parents:
diff changeset
  1128
hgs
parents:
diff changeset
  1129
    // close the application (and possible chain of viewers, editors and mce etc.).
hgs
parents:
diff changeset
  1130
    ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
  1131
    //Exit();
hgs
parents:
diff changeset
  1132
    }
hgs
parents:
diff changeset
  1133
hgs
parents:
diff changeset
  1134
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1135
// CMsgEditorAppUi::HandleCloseSessionL
hgs
parents:
diff changeset
  1136
//
hgs
parents:
diff changeset
  1137
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1138
// HandleCloseSessionL is called when the messaging server wants
hgs
parents:
diff changeset
  1139
// to close the session (e.g. because it's closing down and wants
hgs
parents:
diff changeset
  1140
// to get rid of all messaging clients).
hgs
parents:
diff changeset
  1141
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1142
//
hgs
parents:
diff changeset
  1143
EXPORT_C void CMsgEditorAppUi::HandleCloseSessionL()
hgs
parents:
diff changeset
  1144
    {
hgs
parents:
diff changeset
  1145
    // save changes and close the application.
hgs
parents:
diff changeset
  1146
    DoMsgSaveExitL();
hgs
parents:
diff changeset
  1147
    }
hgs
parents:
diff changeset
  1148
hgs
parents:
diff changeset
  1149
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1150
// CMsgEditorAppUi::HandleServerFailedToStartL
hgs
parents:
diff changeset
  1151
//
hgs
parents:
diff changeset
  1152
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1153
// HandleServerFailedToStartL is called when the message server
hgs
parents:
diff changeset
  1154
// start-up was not successful.
hgs
parents:
diff changeset
  1155
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1156
//
hgs
parents:
diff changeset
  1157
EXPORT_C void CMsgEditorAppUi::HandleServerFailedToStartL()
hgs
parents:
diff changeset
  1158
    {
hgs
parents:
diff changeset
  1159
    // TODO: get error code from errorres.
hgs
parents:
diff changeset
  1160
    ViewErrorL( -7007 );
hgs
parents:
diff changeset
  1161
hgs
parents:
diff changeset
  1162
    // close the application (and possible chain of viewers, editors and mce etc.).
hgs
parents:
diff changeset
  1163
    ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
  1164
    //Exit();
hgs
parents:
diff changeset
  1165
    }
hgs
parents:
diff changeset
  1166
hgs
parents:
diff changeset
  1167
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1168
// CMsgEditorAppUi::HandleServerTerminatedL
hgs
parents:
diff changeset
  1169
//
hgs
parents:
diff changeset
  1170
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1171
// HandleServerTerminatedL is called when the messaging server has
hgs
parents:
diff changeset
  1172
// died. Application cannot use the message server session any more.
hgs
parents:
diff changeset
  1173
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1174
//
hgs
parents:
diff changeset
  1175
EXPORT_C void CMsgEditorAppUi::HandleServerTerminatedL()
hgs
parents:
diff changeset
  1176
    {
hgs
parents:
diff changeset
  1177
    // TODO: get error code from errorres.
hgs
parents:
diff changeset
  1178
    ViewErrorL( -7008 );
hgs
parents:
diff changeset
  1179
hgs
parents:
diff changeset
  1180
    // close the application (and possible chain of viewers, editors and mce etc.).
hgs
parents:
diff changeset
  1181
    ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
  1182
    //Exit();
hgs
parents:
diff changeset
  1183
    }
hgs
parents:
diff changeset
  1184
hgs
parents:
diff changeset
  1185
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1186
// CMsgEditorAppUi::HandleMediaChangedL
hgs
parents:
diff changeset
  1187
//
hgs
parents:
diff changeset
  1188
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1189
// HandleMediaChangedL is called when the messaging storage has
hgs
parents:
diff changeset
  1190
// been moved into another disk, This means that the current
hgs
parents:
diff changeset
  1191
// message entry is not valid any more. This function creates
hgs
parents:
diff changeset
  1192
// new entry in the new messaging store, in order to enable saving
hgs
parents:
diff changeset
  1193
// the message. The new entry is left in InPreparation state, so
hgs
parents:
diff changeset
  1194
// that it will be deleted if the application (e.g. viewer) does
hgs
parents:
diff changeset
  1195
// not save anything in it.
hgs
parents:
diff changeset
  1196
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1197
//
hgs
parents:
diff changeset
  1198
EXPORT_C void CMsgEditorAppUi::HandleMediaChangedL()
hgs
parents:
diff changeset
  1199
    {
hgs
parents:
diff changeset
  1200
    if( iMmcFeatureSupported )
hgs
parents:
diff changeset
  1201
        {
hgs
parents:
diff changeset
  1202
        // create new InPreparation entry in the new messaging store.
hgs
parents:
diff changeset
  1203
        CMsgEditorDocument* doc = Document();
hgs
parents:
diff changeset
  1204
        doc->CreateNewL( doc->DefaultMsgService(), doc->DefaultMsgFolder() );
hgs
parents:
diff changeset
  1205
        }
hgs
parents:
diff changeset
  1206
    }
hgs
parents:
diff changeset
  1207
hgs
parents:
diff changeset
  1208
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1209
// CMsgEditorAppUi::HandleMediaUnavailableL
hgs
parents:
diff changeset
  1210
//
hgs
parents:
diff changeset
  1211
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1212
// The media state is recorded in model and default action in AppUi
hgs
parents:
diff changeset
  1213
// is to display warning message to the user.
hgs
parents:
diff changeset
  1214
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1215
//
hgs
parents:
diff changeset
  1216
EXPORT_C void CMsgEditorAppUi::HandleMediaUnavailableL()
hgs
parents:
diff changeset
  1217
    {
hgs
parents:
diff changeset
  1218
    if( iMmcFeatureSupported )
hgs
parents:
diff changeset
  1219
        {
hgs
parents:
diff changeset
  1220
        ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
  1221
        }
hgs
parents:
diff changeset
  1222
    }
hgs
parents:
diff changeset
  1223
hgs
parents:
diff changeset
  1224
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1225
// CMsgEditorAppUi::HandleMediaAvailableL
hgs
parents:
diff changeset
  1226
//
hgs
parents:
diff changeset
  1227
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1228
// No action made by default, the media state is recorded in model.
hgs
parents:
diff changeset
  1229
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1230
//
hgs
parents:
diff changeset
  1231
EXPORT_C void CMsgEditorAppUi::HandleMediaAvailableL()
hgs
parents:
diff changeset
  1232
    {
hgs
parents:
diff changeset
  1233
    // no action
hgs
parents:
diff changeset
  1234
    }
hgs
parents:
diff changeset
  1235
hgs
parents:
diff changeset
  1236
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1237
// CMsgEditorAppUi::HandleMediaIncorrectL
hgs
parents:
diff changeset
  1238
//
hgs
parents:
diff changeset
  1239
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1240
// The media state is recorded in model, and warning note is displayed
hgs
parents:
diff changeset
  1241
// to the user here.
hgs
parents:
diff changeset
  1242
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1243
//
hgs
parents:
diff changeset
  1244
EXPORT_C void CMsgEditorAppUi::HandleMediaIncorrectL()
hgs
parents:
diff changeset
  1245
    {
hgs
parents:
diff changeset
  1246
    if( iMmcFeatureSupported )
hgs
parents:
diff changeset
  1247
        {
hgs
parents:
diff changeset
  1248
        ViewErrorL( KMsvMediaIncorrect );
hgs
parents:
diff changeset
  1249
        }
hgs
parents:
diff changeset
  1250
    }
hgs
parents:
diff changeset
  1251
hgs
parents:
diff changeset
  1252
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1253
// CMsgEditorAppUi::HandleCorruptedIndexRebuildingL
hgs
parents:
diff changeset
  1254
//
hgs
parents:
diff changeset
  1255
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1256
// The default action is to put busy note on the screen. The busy
hgs
parents:
diff changeset
  1257
// note will be displayed while the index is being rebuilt - until
hgs
parents:
diff changeset
  1258
// we get "index rebuilt" event in HandleCorruptedIndexRebuiltL().
hgs
parents:
diff changeset
  1259
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1260
//
hgs
parents:
diff changeset
  1261
EXPORT_C void CMsgEditorAppUi::HandleCorruptedIndexRebuildingL()
hgs
parents:
diff changeset
  1262
    {
hgs
parents:
diff changeset
  1263
    HBufC* line = iEikonEnv->AllocReadResourceLC( R_MEB_N_IN_REBUILDING_INDEX );
hgs
parents:
diff changeset
  1264
    iEikonEnv->BusyMsgL( *line );
hgs
parents:
diff changeset
  1265
    CleanupStack::PopAndDestroy( line );  // line
hgs
parents:
diff changeset
  1266
    }
hgs
parents:
diff changeset
  1267
hgs
parents:
diff changeset
  1268
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1269
// CMsgEditorAppUi::HandleCorruptedIndexRebuiltL
hgs
parents:
diff changeset
  1270
//
hgs
parents:
diff changeset
  1271
// Default error handling for all messaging editors and viewers.
hgs
parents:
diff changeset
  1272
// The default action is to remove the busy note displayed when
hgs
parents:
diff changeset
  1273
// the index rebuilding event was received.
hgs
parents:
diff changeset
  1274
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1275
//
hgs
parents:
diff changeset
  1276
EXPORT_C void CMsgEditorAppUi::HandleCorruptedIndexRebuiltL()
hgs
parents:
diff changeset
  1277
    {
hgs
parents:
diff changeset
  1278
    iEikonEnv->BusyMsgCancel();
hgs
parents:
diff changeset
  1279
    }
hgs
parents:
diff changeset
  1280
hgs
parents:
diff changeset
  1281
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1282
// CMsgEditorAppUi::CreateCustomControlL
hgs
parents:
diff changeset
  1283
//
hgs
parents:
diff changeset
  1284
// Default implementation is NULL since viewers do not need this.
hgs
parents:
diff changeset
  1285
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1286
//
hgs
parents:
diff changeset
  1287
EXPORT_C CMsgBaseControl* CMsgEditorAppUi::CreateCustomControlL( TInt /*aControlType*/ )
hgs
parents:
diff changeset
  1288
    {
hgs
parents:
diff changeset
  1289
    return NULL;
hgs
parents:
diff changeset
  1290
    }
hgs
parents:
diff changeset
  1291
hgs
parents:
diff changeset
  1292
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1293
// CMsgEditorAppUi::IsLaunchedL
hgs
parents:
diff changeset
  1294
//
hgs
parents:
diff changeset
  1295
// Checks if document has finished launching.
hgs
parents:
diff changeset
  1296
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1297
//
hgs
parents:
diff changeset
  1298
EXPORT_C TBool CMsgEditorAppUi::IsLaunchedL() const
hgs
parents:
diff changeset
  1299
    {
hgs
parents:
diff changeset
  1300
    return Document()->IsLaunched();
hgs
parents:
diff changeset
  1301
    }
hgs
parents:
diff changeset
  1302
hgs
parents:
diff changeset
  1303
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1304
// CMsgEditorAppUi::EditorObserver
hgs
parents:
diff changeset
  1305
//
hgs
parents:
diff changeset
  1306
// Default implementation.
hgs
parents:
diff changeset
  1307
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1308
//
hgs
parents:
diff changeset
  1309
EXPORT_C void CMsgEditorAppUi::EditorObserver(
hgs
parents:
diff changeset
  1310
    TMsgEditorObserverFunc aFunc,
hgs
parents:
diff changeset
  1311
    TAny* /*aArg1*/,
hgs
parents:
diff changeset
  1312
    TAny* aArg2,
hgs
parents:
diff changeset
  1313
    TAny* /*aArg3*/ )
hgs
parents:
diff changeset
  1314
    {
hgs
parents:
diff changeset
  1315
    switch (aFunc)
hgs
parents:
diff changeset
  1316
        {
hgs
parents:
diff changeset
  1317
        case EMsgDenyClipboardOperation:
hgs
parents:
diff changeset
  1318
            {
hgs
parents:
diff changeset
  1319
            TInt* ret = static_cast<TInt*>( aArg2 );
hgs
parents:
diff changeset
  1320
            *ret = 0;
hgs
parents:
diff changeset
  1321
            }
hgs
parents:
diff changeset
  1322
            break;
hgs
parents:
diff changeset
  1323
hgs
parents:
diff changeset
  1324
        case EMsgHandleFocusChange:
hgs
parents:
diff changeset
  1325
        default:
hgs
parents:
diff changeset
  1326
            break;
hgs
parents:
diff changeset
  1327
        }
hgs
parents:
diff changeset
  1328
    }
hgs
parents:
diff changeset
  1329
hgs
parents:
diff changeset
  1330
hgs
parents:
diff changeset
  1331
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1332
// CMsgEditorAppUi::DoMtmCmdL
hgs
parents:
diff changeset
  1333
//
hgs
parents:
diff changeset
  1334
// Get services from mtm's and offers them to APP UI.
hgs
parents:
diff changeset
  1335
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1336
//
hgs
parents:
diff changeset
  1337
void CMsgEditorAppUi::DoMtmCmdL( const TUid& /*aQuery*/, TInt aCmd ) const
hgs
parents:
diff changeset
  1338
    {
hgs
parents:
diff changeset
  1339
    CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection;
hgs
parents:
diff changeset
  1340
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  1341
    selection->AppendL( Document()->Entry().Id() );
hgs
parents:
diff changeset
  1342
    TBuf8<1> null;
hgs
parents:
diff changeset
  1343
    TMsvId origMessageId = Document()->Entry().Id();
hgs
parents:
diff changeset
  1344
    Document()->MtmUi().InvokeSyncFunctionL( aCmd, *selection, null );
hgs
parents:
diff changeset
  1345
    CleanupStack::PopAndDestroy( selection );  // selection
hgs
parents:
diff changeset
  1346
    Document()->SetEntryL( origMessageId );
hgs
parents:
diff changeset
  1347
    }
hgs
parents:
diff changeset
  1348
hgs
parents:
diff changeset
  1349
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1350
// CMsgEditorAppUi::ViewErrorL
hgs
parents:
diff changeset
  1351
//
hgs
parents:
diff changeset
  1352
// Helper function for Handle... methods.
hgs
parents:
diff changeset
  1353
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1354
//
hgs
parents:
diff changeset
  1355
void CMsgEditorAppUi::ViewErrorL( TInt aTitle )
hgs
parents:
diff changeset
  1356
    {
hgs
parents:
diff changeset
  1357
    // TODO: check if app in foreground and show error note only then.
hgs
parents:
diff changeset
  1358
    CErrorUI* errorUI = CErrorUI::NewLC( *iCoeEnv );
hgs
parents:
diff changeset
  1359
    errorUI->ShowGlobalErrorNoteL( aTitle );
hgs
parents:
diff changeset
  1360
    CleanupStack::PopAndDestroy( errorUI ); // errorUI
hgs
parents:
diff changeset
  1361
    }
hgs
parents:
diff changeset
  1362
hgs
parents:
diff changeset
  1363
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1364
// CMsgEditorAppUi::HandleResourceChangeL
hgs
parents:
diff changeset
  1365
//
hgs
parents:
diff changeset
  1366
//
hgs
parents:
diff changeset
  1367
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1368
//
hgs
parents:
diff changeset
  1369
EXPORT_C void CMsgEditorAppUi::HandleResourceChangeL(TInt aType)
hgs
parents:
diff changeset
  1370
    {
hgs
parents:
diff changeset
  1371
    CAknAppUi::HandleResourceChangeL( aType );
hgs
parents:
diff changeset
  1372
    
hgs
parents:
diff changeset
  1373
    if( ( aType == KAknSplitInputEnabled ) || 
hgs
parents:
diff changeset
  1374
        ( aType == KAknSplitInputDisabled ) )
hgs
parents:
diff changeset
  1375
         { 
hgs
parents:
diff changeset
  1376
        TBool splitDisabled(aType == KAknSplitInputDisabled);
hgs
parents:
diff changeset
  1377
         if (CurrentFixedToolbar())
hgs
parents:
diff changeset
  1378
             {
hgs
parents:
diff changeset
  1379
             CurrentFixedToolbar()->SetToolbarVisibility( splitDisabled );
hgs
parents:
diff changeset
  1380
             }
hgs
parents:
diff changeset
  1381
         StatusPane()->MakeVisible( splitDisabled );
hgs
parents:
diff changeset
  1382
         iView->HandleResourceChange( KEikDynamicLayoutVariantSwitch );
hgs
parents:
diff changeset
  1383
         }
hgs
parents:
diff changeset
  1384
    else if ( iView )
hgs
parents:
diff changeset
  1385
        {
hgs
parents:
diff changeset
  1386
        iView->HandleResourceChange( aType );
hgs
parents:
diff changeset
  1387
        }
hgs
parents:
diff changeset
  1388
    
hgs
parents:
diff changeset
  1389
    if ( aType == KEikDynamicLayoutVariantSwitch )
hgs
parents:
diff changeset
  1390
        {
hgs
parents:
diff changeset
  1391
        iStatusPaneRes = StatusPane()->CurrentLayoutResId();
hgs
parents:
diff changeset
  1392
        }
hgs
parents:
diff changeset
  1393
    }
hgs
parents:
diff changeset
  1394
hgs
parents:
diff changeset
  1395
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1396
// CMsgEditorAppUi::SaveBodyL
hgs
parents:
diff changeset
  1397
//
hgs
parents:
diff changeset
  1398
//
hgs
parents:
diff changeset
  1399
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1400
//
hgs
parents:
diff changeset
  1401
void CMsgEditorAppUi::SaveBodyL( CMsgBodyControl* aBody )
hgs
parents:
diff changeset
  1402
    {
hgs
parents:
diff changeset
  1403
    CEikRichTextEditor* bodyEditor = &aBody->Editor();
hgs
parents:
diff changeset
  1404
    if ( bodyEditor )
hgs
parents:
diff changeset
  1405
        {
hgs
parents:
diff changeset
  1406
        CRichText* richText = bodyEditor->RichText();
hgs
parents:
diff changeset
  1407
        if ( richText )
hgs
parents:
diff changeset
  1408
            {
hgs
parents:
diff changeset
  1409
            TInt len = richText->DocumentLength();
hgs
parents:
diff changeset
  1410
            if ( len )
hgs
parents:
diff changeset
  1411
                {
hgs
parents:
diff changeset
  1412
                HBufC* buf = HBufC::NewLC( len );
hgs
parents:
diff changeset
  1413
                TPtr ptr = buf->Des();
hgs
parents:
diff changeset
  1414
                richText->Extract( ptr, 0 );
hgs
parents:
diff changeset
  1415
                CNotepadApi::AddContentL( ptr );
hgs
parents:
diff changeset
  1416
                CleanupStack::PopAndDestroy( buf );
hgs
parents:
diff changeset
  1417
                }
hgs
parents:
diff changeset
  1418
            }
hgs
parents:
diff changeset
  1419
        } 
hgs
parents:
diff changeset
  1420
    }
hgs
parents:
diff changeset
  1421
hgs
parents:
diff changeset
  1422
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1423
// CMsgEditorAppUi::ShowCloseQueryL
hgs
parents:
diff changeset
  1424
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1425
//
hgs
parents:
diff changeset
  1426
EXPORT_C TInt CMsgEditorAppUi::ShowCloseQueryL()
hgs
parents:
diff changeset
  1427
    {
hgs
parents:
diff changeset
  1428
    TInt selectedIndex( 0 );
hgs
parents:
diff changeset
  1429
    CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog( &selectedIndex );
hgs
parents:
diff changeset
  1430
    dlg->PrepareLC( R_MEB_CLOSE_QUERY );
hgs
parents:
diff changeset
  1431
    if ( dlg->RunLD() )
hgs
parents:
diff changeset
  1432
        {
hgs
parents:
diff changeset
  1433
        return ( selectedIndex == 0 )
hgs
parents:
diff changeset
  1434
            ? EMsgCloseSave
hgs
parents:
diff changeset
  1435
            : EMsgCloseDelete;
hgs
parents:
diff changeset
  1436
        }
hgs
parents:
diff changeset
  1437
    else
hgs
parents:
diff changeset
  1438
        {
hgs
parents:
diff changeset
  1439
        return EMsgCloseCancel;
hgs
parents:
diff changeset
  1440
        }
hgs
parents:
diff changeset
  1441
    }
hgs
parents:
diff changeset
  1442
hgs
parents:
diff changeset
  1443
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1444
// CMsgEditorAppUi::CreateSubjectPrefixStringL
hgs
parents:
diff changeset
  1445
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1446
//
hgs
parents:
diff changeset
  1447
EXPORT_C HBufC* CMsgEditorAppUi::CreateSubjectPrefixStringL(
hgs
parents:
diff changeset
  1448
        const TDesC& aSubject,
hgs
parents:
diff changeset
  1449
        TBool aReply )
hgs
parents:
diff changeset
  1450
    {
hgs
parents:
diff changeset
  1451
    HBufC* newSubject = NULL;
hgs
parents:
diff changeset
  1452
    TInt subjectLength = aSubject.Length();
hgs
parents:
diff changeset
  1453
    if ( subjectLength >= 0 )
hgs
parents:
diff changeset
  1454
        {
hgs
parents:
diff changeset
  1455
        TInt formatResource = aReply
hgs
parents:
diff changeset
  1456
            ? R_MSG_REPLY_PREFIX
hgs
parents:
diff changeset
  1457
            : R_MSG_FORWARD_PREFIX;
hgs
parents:
diff changeset
  1458
hgs
parents:
diff changeset
  1459
        HBufC* subjectFormat = StringLoader::LoadLC(
hgs
parents:
diff changeset
  1460
            formatResource,
hgs
parents:
diff changeset
  1461
            iCoeEnv );
hgs
parents:
diff changeset
  1462
        
hgs
parents:
diff changeset
  1463
        HBufC* filteredSubject = RemovePrefixesL( aSubject );    
hgs
parents:
diff changeset
  1464
        CleanupStack::PushL( filteredSubject );
hgs
parents:
diff changeset
  1465
        
hgs
parents:
diff changeset
  1466
        if ( filteredSubject->Length() > 0 )
hgs
parents:
diff changeset
  1467
        	{
hgs
parents:
diff changeset
  1468
	        // Create a buffer large enough to hold the re-formated subject
hgs
parents:
diff changeset
  1469
	        newSubject = HBufC::NewL( subjectLength + subjectFormat->Length());
hgs
parents:
diff changeset
  1470
	        
hgs
parents:
diff changeset
  1471
	        TPtr ptr( newSubject->Des() );            
hgs
parents:
diff changeset
  1472
	        ptr.Append( *subjectFormat );
hgs
parents:
diff changeset
  1473
	        ptr.Append( *filteredSubject );	        
hgs
parents:
diff changeset
  1474
        	}
hgs
parents:
diff changeset
  1475
        else
hgs
parents:
diff changeset
  1476
        	{
hgs
parents:
diff changeset
  1477
        	newSubject = HBufC::NewL( 0 );
hgs
parents:
diff changeset
  1478
        	}
hgs
parents:
diff changeset
  1479
        
hgs
parents:
diff changeset
  1480
        CleanupStack::PopAndDestroy( filteredSubject );
hgs
parents:
diff changeset
  1481
        CleanupStack::PopAndDestroy( subjectFormat );
hgs
parents:
diff changeset
  1482
        }
hgs
parents:
diff changeset
  1483
    return newSubject;
hgs
parents:
diff changeset
  1484
    }
hgs
parents:
diff changeset
  1485
hgs
parents:
diff changeset
  1486
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1487
// CMsgEditorAppUi::RemovePrefixesL
hgs
parents:
diff changeset
  1488
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1489
//
hgs
parents:
diff changeset
  1490
HBufC* CMsgEditorAppUi::RemovePrefixesL( const TDesC& aSubject )
hgs
parents:
diff changeset
  1491
    {
hgs
parents:
diff changeset
  1492
    // filter setup
hgs
parents:
diff changeset
  1493
    RPointerArray<TDesC> prefixArray;
hgs
parents:
diff changeset
  1494
    CleanupClosePushL( prefixArray );
hgs
parents:
diff changeset
  1495
    
hgs
parents:
diff changeset
  1496
    // add prefixes to remove
hgs
parents:
diff changeset
  1497
    TPtrC filterRe( KMsgEditorAppUiFilterRe );
hgs
parents:
diff changeset
  1498
    prefixArray.AppendL( &filterRe );  
hgs
parents:
diff changeset
  1499
    
hgs
parents:
diff changeset
  1500
    TPtrC filterFw( KMsgEditorAppUiFilterFw );
hgs
parents:
diff changeset
  1501
    prefixArray.AppendL( &filterFw );
hgs
parents:
diff changeset
  1502
    
hgs
parents:
diff changeset
  1503
    TPtrC filterFwd( KMsgEditorAppUiFilterFwd );
hgs
parents:
diff changeset
  1504
    prefixArray.AppendL( &filterFwd ); 
hgs
parents:
diff changeset
  1505
    
hgs
parents:
diff changeset
  1506
    // corresponding prefixes for the current language variant
hgs
parents:
diff changeset
  1507
    HBufC* prefixReply = StringLoader::LoadLC( R_MSG_REPLY_PREFIX, iCoeEnv );
hgs
parents:
diff changeset
  1508
    TPtr prefixReplyPtr = prefixReply->Des();
hgs
parents:
diff changeset
  1509
    prefixReplyPtr.Trim();        
hgs
parents:
diff changeset
  1510
    prefixArray.AppendL( &prefixReplyPtr );
hgs
parents:
diff changeset
  1511
    
hgs
parents:
diff changeset
  1512
    HBufC* prefixForward = StringLoader::LoadLC( R_MSG_FORWARD_PREFIX, iCoeEnv );
hgs
parents:
diff changeset
  1513
    TPtr prefixForwardPtr = prefixForward->Des();
hgs
parents:
diff changeset
  1514
    prefixForwardPtr.Trim();
hgs
parents:
diff changeset
  1515
    prefixArray.AppendL( &prefixForwardPtr );
hgs
parents:
diff changeset
  1516
    
hgs
parents:
diff changeset
  1517
    // Remove prefixes 
hgs
parents:
diff changeset
  1518
    HBufC* subject = aSubject.AllocL();
hgs
parents:
diff changeset
  1519
    TPtr ptr( subject->Des() );
hgs
parents:
diff changeset
  1520
    TBool prefixFound;
hgs
parents:
diff changeset
  1521
    // Search until no prefixes found
hgs
parents:
diff changeset
  1522
    do
hgs
parents:
diff changeset
  1523
        {
hgs
parents:
diff changeset
  1524
        // Loop all prefixes
hgs
parents:
diff changeset
  1525
        prefixFound = EFalse;
hgs
parents:
diff changeset
  1526
        ptr.TrimLeft();
hgs
parents:
diff changeset
  1527
        for ( TInt i = 0; i < prefixArray.Count(); i++ )  
hgs
parents:
diff changeset
  1528
            {
hgs
parents:
diff changeset
  1529
            TPtrC prefix( *prefixArray[i] );
hgs
parents:
diff changeset
  1530
            
hgs
parents:
diff changeset
  1531
            // Remove prefixes while same prefix found at begining of subject    
hgs
parents:
diff changeset
  1532
            while ( ptr.FindC( prefix ) == 0 )
hgs
parents:
diff changeset
  1533
                {
hgs
parents:
diff changeset
  1534
                ptr.Delete( 0, prefix.Length() ); 
hgs
parents:
diff changeset
  1535
                prefixFound = ETrue;
hgs
parents:
diff changeset
  1536
                ptr.TrimLeft();
hgs
parents:
diff changeset
  1537
                }
hgs
parents:
diff changeset
  1538
            }
hgs
parents:
diff changeset
  1539
        } while ( prefixFound );
hgs
parents:
diff changeset
  1540
    
hgs
parents:
diff changeset
  1541
    CleanupStack::PopAndDestroy(3, &prefixArray ); 
hgs
parents:
diff changeset
  1542
    
hgs
parents:
diff changeset
  1543
    return subject;        
hgs
parents:
diff changeset
  1544
    }    
hgs
parents:
diff changeset
  1545
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1546
// CMsgEditorAppUi::LockEntryL
hgs
parents:
diff changeset
  1547
//
hgs
parents:
diff changeset
  1548
//
hgs
parents:
diff changeset
  1549
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1550
//
hgs
parents:
diff changeset
  1551
EXPORT_C void CMsgEditorAppUi::LockEntryL()
hgs
parents:
diff changeset
  1552
    {
hgs
parents:
diff changeset
  1553
    if ( iLock == NULL )
hgs
parents:
diff changeset
  1554
        {
hgs
parents:
diff changeset
  1555
        iLock = CLock::LockL( *Document() );
hgs
parents:
diff changeset
  1556
        }
hgs
parents:
diff changeset
  1557
    }
hgs
parents:
diff changeset
  1558
hgs
parents:
diff changeset
  1559
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1560
// CMsgEditorAppUi::UnlockEntry
hgs
parents:
diff changeset
  1561
//
hgs
parents:
diff changeset
  1562
//
hgs
parents:
diff changeset
  1563
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1564
//
hgs
parents:
diff changeset
  1565
EXPORT_C void CMsgEditorAppUi::UnlockEntry()
hgs
parents:
diff changeset
  1566
    {
hgs
parents:
diff changeset
  1567
    delete iLock;
hgs
parents:
diff changeset
  1568
    iLock = NULL;
hgs
parents:
diff changeset
  1569
    }
hgs
parents:
diff changeset
  1570
hgs
parents:
diff changeset
  1571
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1572
// CMsgEditorAppUi::IsLockedEntry
hgs
parents:
diff changeset
  1573
//
hgs
parents:
diff changeset
  1574
//
hgs
parents:
diff changeset
  1575
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1576
//
hgs
parents:
diff changeset
  1577
EXPORT_C TBool CMsgEditorAppUi::IsLockedEntry() const
hgs
parents:
diff changeset
  1578
    {
hgs
parents:
diff changeset
  1579
    return iLock != NULL;
hgs
parents:
diff changeset
  1580
    }
hgs
parents:
diff changeset
  1581
hgs
parents:
diff changeset
  1582
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1583
// CMsgEditorAppUi::Exit
hgs
parents:
diff changeset
  1584
//
hgs
parents:
diff changeset
  1585
//
hgs
parents:
diff changeset
  1586
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1587
//
hgs
parents:
diff changeset
  1588
EXPORT_C void CMsgEditorAppUi::Exit( TInt aReason /*= EEikCmdExit*/ )
hgs
parents:
diff changeset
  1589
	{
hgs
parents:
diff changeset
  1590
#ifdef RD_MSG_FAST_PREV_NEXT
hgs
parents:
diff changeset
  1591
    // Communicate message id via publish and subscribe to MCE
hgs
parents:
diff changeset
  1592
    RProperty::Set( KPSUidMuiu, KMuiuKeyCurrentMsg,
hgs
parents:
diff changeset
  1593
        Document()->Entry().Id() );
hgs
parents:
diff changeset
  1594
#endif // RD_MSG_FAST_PREV_NEXT
hgs
parents:
diff changeset
  1595
hgs
parents:
diff changeset
  1596
	CEikAppServer* server = iEikonEnv->AppServer();
hgs
parents:
diff changeset
  1597
	if ( server )
hgs
parents:
diff changeset
  1598
        {
hgs
parents:
diff changeset
  1599
		server->NotifyServerExit( aReason );
hgs
parents:
diff changeset
  1600
        }
hgs
parents:
diff changeset
  1601
	CEikAppUi::Exit();
hgs
parents:
diff changeset
  1602
	}
hgs
parents:
diff changeset
  1603
hgs
parents:
diff changeset
  1604
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1605
// CMsgEditorAppUi::HandleLocalZoomChangeL
hgs
parents:
diff changeset
  1606
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1607
//
hgs
parents:
diff changeset
  1608
EXPORT_C void CMsgEditorAppUi::HandleLocalZoomChangeL( TMsgCommonCommands aNewZoom )
hgs
parents:
diff changeset
  1609
    {
hgs
parents:
diff changeset
  1610
    TInt localZoom = 0;
hgs
parents:
diff changeset
  1611
    TInt oldLocalZoom = EAknUiZoomAutomatic;
hgs
parents:
diff changeset
  1612
    CRepository* repository = CRepository::NewL( KCRUidMessagingUiSettings );
hgs
parents:
diff changeset
  1613
    TInt ret = repository->Get( KMessagingEditorLocalUiZoom, oldLocalZoom );
hgs
parents:
diff changeset
  1614
    if ( ret == KErrNone )
hgs
parents:
diff changeset
  1615
        {
hgs
parents:
diff changeset
  1616
        switch( aNewZoom )
hgs
parents:
diff changeset
  1617
            {
hgs
parents:
diff changeset
  1618
            case EMsgDispSizeAutomatic:
hgs
parents:
diff changeset
  1619
                {
hgs
parents:
diff changeset
  1620
                localZoom = EAknUiZoomAutomatic;
hgs
parents:
diff changeset
  1621
                break;
hgs
parents:
diff changeset
  1622
                }
hgs
parents:
diff changeset
  1623
            case EMsgDispSizeLarge:
hgs
parents:
diff changeset
  1624
                {
hgs
parents:
diff changeset
  1625
                localZoom = EAknUiZoomLarge;
hgs
parents:
diff changeset
  1626
                break;
hgs
parents:
diff changeset
  1627
                }
hgs
parents:
diff changeset
  1628
            case EMsgDispSizeNormal:
hgs
parents:
diff changeset
  1629
                {
hgs
parents:
diff changeset
  1630
                localZoom = EAknUiZoomNormal;
hgs
parents:
diff changeset
  1631
                break;
hgs
parents:
diff changeset
  1632
                }
hgs
parents:
diff changeset
  1633
            case EMsgDispSizeSmall:
hgs
parents:
diff changeset
  1634
                {
hgs
parents:
diff changeset
  1635
                localZoom = EAknUiZoomSmall;
hgs
parents:
diff changeset
  1636
                break;
hgs
parents:
diff changeset
  1637
                }
hgs
parents:
diff changeset
  1638
            default:
hgs
parents:
diff changeset
  1639
                break; 
hgs
parents:
diff changeset
  1640
            }
hgs
parents:
diff changeset
  1641
        if( oldLocalZoom != localZoom )
hgs
parents:
diff changeset
  1642
            {
hgs
parents:
diff changeset
  1643
            ret = repository->Set( KMessagingEditorLocalUiZoom, localZoom );
hgs
parents:
diff changeset
  1644
            __ASSERT_DEBUG( !ret, Panic( EMsgRepositorySettingFailure ) );
hgs
parents:
diff changeset
  1645
            TWsEvent event; 
hgs
parents:
diff changeset
  1646
            event.SetType( KAknLocalZoomLayoutSwitch ); 
hgs
parents:
diff changeset
  1647
            ret = iEikonEnv->WsSession().SendEventToAllWindowGroups( event );
hgs
parents:
diff changeset
  1648
            }
hgs
parents:
diff changeset
  1649
        }
hgs
parents:
diff changeset
  1650
hgs
parents:
diff changeset
  1651
    delete repository;          
hgs
parents:
diff changeset
  1652
    }
hgs
parents:
diff changeset
  1653
    
hgs
parents:
diff changeset
  1654
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1655
// CMsgEditorAppUi::CreateViewerNaviPaneL
hgs
parents:
diff changeset
  1656
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1657
//
hgs
parents:
diff changeset
  1658
EXPORT_C void CMsgEditorAppUi::CreateViewerNaviPaneL( TTime aTime, 
hgs
parents:
diff changeset
  1659
                                                      TMsgEditorMsgPriority aPriority,
hgs
parents:
diff changeset
  1660
                                                      TBool aUtcTime )
hgs
parents:
diff changeset
  1661
    {
hgs
parents:
diff changeset
  1662
    CAknNavigationControlContainer* naviContainer = 
hgs
parents:
diff changeset
  1663
        static_cast<CAknNavigationControlContainer*>( StatusPane()->ControlL( 
hgs
parents:
diff changeset
  1664
                                                            TUid::Uid( EEikStatusPaneUidNavi ) ) );
hgs
parents:
diff changeset
  1665
    if ( !iNaviDecorator )
hgs
parents:
diff changeset
  1666
        {
hgs
parents:
diff changeset
  1667
        CMsgNaviPaneControl* naviPaneControl = CMsgNaviPaneControl::NewL( naviContainer );
hgs
parents:
diff changeset
  1668
        naviPaneControl->SetNavigationControlObserver( this );
hgs
parents:
diff changeset
  1669
        
hgs
parents:
diff changeset
  1670
        // naviPaneControl ownership transferred to iNaviDecorator.
hgs
parents:
diff changeset
  1671
        iNaviDecorator = CAknNavigationDecorator::NewL( naviContainer, naviPaneControl );
hgs
parents:
diff changeset
  1672
        
hgs
parents:
diff changeset
  1673
        naviPaneControl->SetTimeIndicatorL( aTime, aUtcTime );
hgs
parents:
diff changeset
  1674
        naviPaneControl->SetPriorityIndicatorL( aPriority );
hgs
parents:
diff changeset
  1675
        
hgs
parents:
diff changeset
  1676
        CMsgEditorDocument* doc = Document();
hgs
parents:
diff changeset
  1677
        naviPaneControl->SetNavigationIndicatorL( doc->Session(), doc->Entry() );
hgs
parents:
diff changeset
  1678
        
hgs
parents:
diff changeset
  1679
        // this function will always be called when viwer is launched
hgs
parents:
diff changeset
  1680
        // always navi decorater will be created.
hgs
parents:
diff changeset
  1681
        // refer navi decorator iterator instance here
hgs
parents:
diff changeset
  1682
        iIterator =  naviPaneControl->GetMessageIterator();
hgs
parents:
diff changeset
  1683
        iIterator->SetMessageIteratorObserver( this );
hgs
parents:
diff changeset
  1684
        
hgs
parents:
diff changeset
  1685
        iNaviDecorator->SetContainerWindowL( *naviContainer );
hgs
parents:
diff changeset
  1686
        iNaviDecorator->MakeScrollButtonVisible( EFalse );
hgs
parents:
diff changeset
  1687
        iNaviDecorator->SetComponentsToInheritVisibility( ETrue );
hgs
parents:
diff changeset
  1688
        iOwnNaviPane = NULL;
hgs
parents:
diff changeset
  1689
        }
hgs
parents:
diff changeset
  1690
    else
hgs
parents:
diff changeset
  1691
        {
hgs
parents:
diff changeset
  1692
        User::Leave( KErrAlreadyExists );
hgs
parents:
diff changeset
  1693
        }
hgs
parents:
diff changeset
  1694
    }
hgs
parents:
diff changeset
  1695
hgs
parents:
diff changeset
  1696
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1697
// CMsgEditorAppUi::HandleNavigationControlEventL
hgs
parents:
diff changeset
  1698
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1699
//
hgs
parents:
diff changeset
  1700
EXPORT_C void CMsgEditorAppUi::HandleNavigationControlEventL( TMsgNaviControlEventId aEvent )
hgs
parents:
diff changeset
  1701
    {
hgs
parents:
diff changeset
  1702
    if ( aEvent ==  MMsgNaviPaneControlObserver::EMsgNaviLeftArrowPressed ||
hgs
parents:
diff changeset
  1703
         aEvent == MMsgNaviPaneControlObserver::EMsgNaviRightArrowPressed )
hgs
parents:
diff changeset
  1704
        {
hgs
parents:
diff changeset
  1705
        if ( IsNextMessageAvailableL( aEvent == MMsgNaviPaneControlObserver::EMsgNaviRightArrowPressed ) )
hgs
parents:
diff changeset
  1706
            {
hgs
parents:
diff changeset
  1707
            /* no need for separate checks for right and left arrows
hgs
parents:
diff changeset
  1708
            because IsNextMessageAvailableL() and NextMessageL
hgs
parents:
diff changeset
  1709
            are called with the truth-value of the same comparison */
hgs
parents:
diff changeset
  1710
            NextMessageL( aEvent == MMsgNaviPaneControlObserver::EMsgNaviRightArrowPressed );
hgs
parents:
diff changeset
  1711
            } 
hgs
parents:
diff changeset
  1712
        }
hgs
parents:
diff changeset
  1713
    }
hgs
parents:
diff changeset
  1714
hgs
parents:
diff changeset
  1715
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1716
// CMsgEditorAppUi::CLock::LockL
hgs
parents:
diff changeset
  1717
//
hgs
parents:
diff changeset
  1718
//
hgs
parents:
diff changeset
  1719
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1720
//
hgs
parents:
diff changeset
  1721
CMsgEditorAppUi::CLock* CMsgEditorAppUi::CLock::LockL(
hgs
parents:
diff changeset
  1722
    const CMsgEditorDocument& aDoc)
hgs
parents:
diff changeset
  1723
    {
hgs
parents:
diff changeset
  1724
    CLock* lock = new ( ELeave ) CLock();
hgs
parents:
diff changeset
  1725
    CleanupStack::PushL( lock );
hgs
parents:
diff changeset
  1726
    
hgs
parents:
diff changeset
  1727
    lock->iStore = aDoc.CurrentEntry().EditStoreL();
hgs
parents:
diff changeset
  1728
    lock->iStream.AssignL( *( lock->iStore ), KMsvEntryRichTextBody );
hgs
parents:
diff changeset
  1729
    
hgs
parents:
diff changeset
  1730
    CleanupStack::Pop( lock );
hgs
parents:
diff changeset
  1731
    return lock;
hgs
parents:
diff changeset
  1732
    }
hgs
parents:
diff changeset
  1733
hgs
parents:
diff changeset
  1734
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1735
// CMsgEditorAppUi::CLock::CLock
hgs
parents:
diff changeset
  1736
//
hgs
parents:
diff changeset
  1737
//
hgs
parents:
diff changeset
  1738
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1739
//
hgs
parents:
diff changeset
  1740
CMsgEditorAppUi::CLock::CLock()
hgs
parents:
diff changeset
  1741
    {
hgs
parents:
diff changeset
  1742
    }
hgs
parents:
diff changeset
  1743
hgs
parents:
diff changeset
  1744
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1745
// CMsgEditorAppUi::CLock::~CLock
hgs
parents:
diff changeset
  1746
//
hgs
parents:
diff changeset
  1747
//
hgs
parents:
diff changeset
  1748
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1749
//
hgs
parents:
diff changeset
  1750
CMsgEditorAppUi::CLock::~CLock()
hgs
parents:
diff changeset
  1751
    {
hgs
parents:
diff changeset
  1752
    if ( iStore != NULL )
hgs
parents:
diff changeset
  1753
        {
hgs
parents:
diff changeset
  1754
        iStream.Release();
hgs
parents:
diff changeset
  1755
        iStream.Close();
hgs
parents:
diff changeset
  1756
        iStore->Revert();
hgs
parents:
diff changeset
  1757
        delete iStore;
hgs
parents:
diff changeset
  1758
        }
hgs
parents:
diff changeset
  1759
    }
hgs
parents:
diff changeset
  1760
hgs
parents:
diff changeset
  1761
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1762
// CMsgEditorAppUi::CanFastOpenL
hgs
parents:
diff changeset
  1763
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1764
//
hgs
parents:
diff changeset
  1765
EXPORT_C TBool CMsgEditorAppUi::CanFastOpenL( const CMessageIterator& /*aIterator*/ )
hgs
parents:
diff changeset
  1766
    {
hgs
parents:
diff changeset
  1767
    return EFalse;
hgs
parents:
diff changeset
  1768
    }
hgs
parents:
diff changeset
  1769
hgs
parents:
diff changeset
  1770
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1771
// CMsgEditorAppUi::AknInputBlockCancel
hgs
parents:
diff changeset
  1772
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1773
//
hgs
parents:
diff changeset
  1774
EXPORT_C void CMsgEditorAppUi::AknInputBlockCancel()
hgs
parents:
diff changeset
  1775
    {
hgs
parents:
diff changeset
  1776
    if ( iInputBlocker )
hgs
parents:
diff changeset
  1777
        {
hgs
parents:
diff changeset
  1778
        iInputBlocker->MakeVisible( EFalse );
hgs
parents:
diff changeset
  1779
        iInputBlocker->ControlEnv()->AppUi()->RemoveFromStack( iInputBlocker );
hgs
parents:
diff changeset
  1780
        }
hgs
parents:
diff changeset
  1781
    }
hgs
parents:
diff changeset
  1782
hgs
parents:
diff changeset
  1783
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1784
// CMsgEditorAppUi::SetTitleIconSizeL
hgs
parents:
diff changeset
  1785
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1786
//
hgs
parents:
diff changeset
  1787
EXPORT_C void CMsgEditorAppUi::SetTitleIconSizeL( CFbsBitmap* aTitleBitmap )
hgs
parents:
diff changeset
  1788
    {
hgs
parents:
diff changeset
  1789
    TRect mainPane;
hgs
parents:
diff changeset
  1790
    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::ETitlePane, mainPane );
hgs
parents:
diff changeset
  1791
    TAknLayoutRect titleIconPaneLayoutRect;
hgs
parents:
diff changeset
  1792
    
hgs
parents:
diff changeset
  1793
    if ( AknStatuspaneUtils::StaconPaneActive() )
hgs
parents:
diff changeset
  1794
        {
hgs
parents:
diff changeset
  1795
        titleIconPaneLayoutRect.LayoutRect( mainPane,
hgs
parents:
diff changeset
  1796
                                            AknLayoutScalable_Avkon::title_pane_stacon_g1( 0 ).LayoutLine() );
hgs
parents:
diff changeset
  1797
        }
hgs
parents:
diff changeset
  1798
    else
hgs
parents:
diff changeset
  1799
        {
hgs
parents:
diff changeset
  1800
        titleIconPaneLayoutRect.LayoutRect( mainPane,
hgs
parents:
diff changeset
  1801
                                            AknLayoutScalable_Avkon::title_pane_g2( 0 ).LayoutLine() );
hgs
parents:
diff changeset
  1802
        }
hgs
parents:
diff changeset
  1803
    
hgs
parents:
diff changeset
  1804
    TSize iconSize = titleIconPaneLayoutRect.Rect().Size();
hgs
parents:
diff changeset
  1805
hgs
parents:
diff changeset
  1806
    User::LeaveIfError( AknIconUtils::SetSize( aTitleBitmap, iconSize, EAspectRatioPreserved ) );
hgs
parents:
diff changeset
  1807
    }
hgs
parents:
diff changeset
  1808
hgs
parents:
diff changeset
  1809
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1810
// CMsgEditorAppUi::HandleStatusPaneSizeChange
hgs
parents:
diff changeset
  1811
//
hgs
parents:
diff changeset
  1812
// Performs layout switch on view area if statuspane is changed to 
hgs
parents:
diff changeset
  1813
// same statuspane that is used by CMsgEditorAppUi. This is for
hgs
parents:
diff changeset
  1814
// correcting the layout if layout switch was performed when 
hgs
parents:
diff changeset
  1815
// SMIL player or SMIL editor that use different statuspane
hgs
parents:
diff changeset
  1816
// were displayed. Without this the layout would be shown as if
hgs
parents:
diff changeset
  1817
// statuspane that SMIL components use would be used.
hgs
parents:
diff changeset
  1818
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1819
//
hgs
parents:
diff changeset
  1820
EXPORT_C void CMsgEditorAppUi::HandleStatusPaneSizeChange()
hgs
parents:
diff changeset
  1821
    {
hgs
parents:
diff changeset
  1822
    CAknAppUi::HandleStatusPaneSizeChange();
hgs
parents:
diff changeset
  1823
    }
hgs
parents:
diff changeset
  1824
hgs
parents:
diff changeset
  1825
//  End of File