mobilemessaging/unieditor/application/src/UniEditorAppUi.cpp
author hgs
Wed, 03 Nov 2010 09:52:46 +0530
changeset 79 2981cb3aa489
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2006-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:   Provides Uni Editor App UI methods. 
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
// Symbian OS
hgs
parents:
diff changeset
    23
#include <apmstd.h>                 // TDataType, KMaxDataTypeLength 
hgs
parents:
diff changeset
    24
#include <data_caging_path_literals.hrh> 
hgs
parents:
diff changeset
    25
#include <eiklbv.h>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// Messaging
hgs
parents:
diff changeset
    28
#include <msvapi.h>
hgs
parents:
diff changeset
    29
#include <msvuids.h>                // Msgs Uids
hgs
parents:
diff changeset
    30
#include <msvstd.hrh>               // KUidMsvMessageEntryValue
hgs
parents:
diff changeset
    31
#include <mtmdef.h>                 // TMsvPartList
hgs
parents:
diff changeset
    32
#include <mtmuidef.hrh>             // EMtmUiFlagEditorPreferEmbedded
hgs
parents:
diff changeset
    33
#include <MtmExtendedCapabilities.hrh>  // function id of MessageInfo
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// Eikon
hgs
parents:
diff changeset
    36
#include <eikedwin.h>               // Editor TextLenght etc
hgs
parents:
diff changeset
    37
#include <eikrted.h>                // for CEikRichTextEditor
hgs
parents:
diff changeset
    38
#include <eikcolib.h>
hgs
parents:
diff changeset
    39
#include <DocumentHandler.h>
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
// Avkon
hgs
parents:
diff changeset
    42
#include <aknenv.h>
hgs
parents:
diff changeset
    43
#include <aknnavi.h>
hgs
parents:
diff changeset
    44
#include <aknnavide.h>              // CAknNavigationDecorator
hgs
parents:
diff changeset
    45
#include <aknnavilabel.h>
hgs
parents:
diff changeset
    46
#include <aknEditStateIndicator.h> 
hgs
parents:
diff changeset
    47
#include <AknIndicatorContainer.h> 
hgs
parents:
diff changeset
    48
#include <akntitle.h>
hgs
parents:
diff changeset
    49
#include <aknclearer.h>
hgs
parents:
diff changeset
    50
#include <AknsConstants.h>
hgs
parents:
diff changeset
    51
#include <AknInfoPopupNoteController.h>
hgs
parents:
diff changeset
    52
#include <akninputblock.h>            // for CAknInputBlock
hgs
parents:
diff changeset
    53
#include <aknbutton.h>
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
#include <aknlayoutscalable_apps.cdl.h>
hgs
parents:
diff changeset
    56
#include <aknlayoutscalable_avkon.cdl.h>
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
#include <aknnotewrappers.h>        // CAknNoteWrappers
hgs
parents:
diff changeset
    59
#include <aknnotedialog.h>          // CAknNoteDialog
hgs
parents:
diff changeset
    60
#include <AknQueryDialog.h>         // CAknQueryDialog
hgs
parents:
diff changeset
    61
#include <AknWaitDialog.h>          // CAknWaitDialog
hgs
parents:
diff changeset
    62
#include <akncheckboxsettingpage.h>     // also CSelectionItemList and CSelectableItem
hgs
parents:
diff changeset
    63
#include <aknsettingpage.h>         // for Priority bit dialog
hgs
parents:
diff changeset
    64
#include <aknradiobuttonsettingpage.h>
hgs
parents:
diff changeset
    65
#include <akntoolbar.h>
hgs
parents:
diff changeset
    66
#include <akntoolbarextension.h>
hgs
parents:
diff changeset
    67
#include <AknIconArray.h>           // CAknIconArray
hgs
parents:
diff changeset
    68
#include <avkon.mbg>                // 
hgs
parents:
diff changeset
    69
#include <AknStatuspaneUtils.h>     // AknStatuspaneUtils
hgs
parents:
diff changeset
    70
#include <AknUtils.h>
hgs
parents:
diff changeset
    71
#include <aknclearer.h>     // CAknLocalScreenClearer
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
#include <AknFepGlobalEnums.h>              // Global Fep enums (ELatin, ENumber)
hgs
parents:
diff changeset
    74
#include <AknFepInternalCRKeys.h>
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
// Misc
hgs
parents:
diff changeset
    77
#include <txtrich.h>                // for CRichText
hgs
parents:
diff changeset
    78
#include <badesca.h>                // CDesC16Array
hgs
parents:
diff changeset
    79
#include <barsread.h>               // TResReader
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
// MUIU
hgs
parents:
diff changeset
    82
#include <MuiuOperationWait.h>      // CMuiuOperationWait
hgs
parents:
diff changeset
    83
#include <MuiuMsvUiServiceUtilities.h>  //Disk space check, offline check
hgs
parents:
diff changeset
    84
#include <muiumsvuiserviceutilitiesinternal.h> 
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
#include <fileprotectionresolver.h>
hgs
parents:
diff changeset
    87
hgs
parents:
diff changeset
    88
// Common components
hgs
parents:
diff changeset
    89
#include <StringLoader.h>           // for StringLoader (load and foramt strings from resources)
hgs
parents:
diff changeset
    90
#include <AiwGenericParam.h>        // CAiwGenericParamList
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
// Base editor 
hgs
parents:
diff changeset
    93
#include <MsgRecipientItem.h>       // for CMsgRecipientItem
hgs
parents:
diff changeset
    94
#include <MsgAttachmentUtils.h>     // for MsgAttachmentUtils
hgs
parents:
diff changeset
    95
#include <MsgBaseControl.h>         // for CMsgBaseControl
hgs
parents:
diff changeset
    96
#include <MsgBodyControl.h>         // for CMsgBodyControl
hgs
parents:
diff changeset
    97
#include <MsgAddressControl.h>      // for CMsgAddressControl
hgs
parents:
diff changeset
    98
#include <MsgEditorView.h>          // for CMsgEditorView
hgs
parents:
diff changeset
    99
#include <MsgEditor.hrh>            // for TMsgIndicatorFlags
hgs
parents:
diff changeset
   100
#include <msgimagecontrol.h>        // for CMsgImageControl
hgs
parents:
diff changeset
   101
#include <MsgAttachmentModel.h>     // for CMsgAttachmentModel
hgs
parents:
diff changeset
   102
#include <MsgEditorCommon.h>
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
#include <MsgEditorAppUiExtension.h>// for iMsgEditorAppUiExtension
hgs
parents:
diff changeset
   105
#include <MsgEditorSettingCacheUpdatePlugin.h>
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
// MmsEngine
hgs
parents:
diff changeset
   108
#include <mmsgenutils.h>
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
// Features
hgs
parents:
diff changeset
   111
#include <featmgr.h>    
hgs
parents:
diff changeset
   112
#include <messagingvariant.hrh>
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
#include <centralrepository.h>    // link against centralrepository.lib
hgs
parents:
diff changeset
   115
#include <messaginginternalcrkeys.h> // for Central Repository keys
hgs
parents:
diff changeset
   116
#include <CoreApplicationUIsSDKCRKeys.h>
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
#include <RCustomerServiceProfileCache.h>   // CSP bits
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
// HELP
hgs
parents:
diff changeset
   121
#include <hlplch.h>
hgs
parents:
diff changeset
   122
#include <csxhelp/unif.hlp.hrh>
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
// SMIL Player
hgs
parents:
diff changeset
   125
#include <MMediaFactoryFileInfo.h>
hgs
parents:
diff changeset
   126
#include <SmilPlayerDialog.h>
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
// Other SMIL stuff
hgs
parents:
diff changeset
   129
#include <gmxmldocument.h>
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
// MsgMedia
hgs
parents:
diff changeset
   132
#include <MsgMimeTypes.h>
hgs
parents:
diff changeset
   133
#include <MsgAudioInfo.h>
hgs
parents:
diff changeset
   134
#include <MsgVideoInfo.h>
hgs
parents:
diff changeset
   135
#include <MsgImageInfo.h>
hgs
parents:
diff changeset
   136
#include <MsgTextInfo.h>
hgs
parents:
diff changeset
   137
#include <MsgMediaResolver.h>
hgs
parents:
diff changeset
   138
#include <MsgMedia.hrh>
hgs
parents:
diff changeset
   139
#include <MmsConformance.h>
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
// Resource identifiers
hgs
parents:
diff changeset
   142
#include <UniEditor.rsg>
hgs
parents:
diff changeset
   143
#include <MsgEditorAppUi.rsg>
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
#include <akndiscreetpopup.h>
hgs
parents:
diff changeset
   146
#include <aknsconstants.hrh>
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
#include "UniSendingSettings.h"
hgs
parents:
diff changeset
   149
#include "UniPluginApi.h"
hgs
parents:
diff changeset
   150
#include "UniSmsPlugin.h"
hgs
parents:
diff changeset
   151
#include "UniClientMtm.h"
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
/// UniEditor other component
hgs
parents:
diff changeset
   154
#include "uniutils.h"               // Object type flags, MBM filename
hgs
parents:
diff changeset
   155
#include <uniutils.mbg>  
hgs
parents:
diff changeset
   156
#include <unimsventry.h>          
hgs
parents:
diff changeset
   157
#include "unislideloader.h"
hgs
parents:
diff changeset
   158
#include "unidatautils.h"
hgs
parents:
diff changeset
   159
#include "uniobjectlist.h"
hgs
parents:
diff changeset
   160
#include "unidatamodel.h"             // CUniDataModel
hgs
parents:
diff changeset
   161
#include "unismilmodel.h"           // CUniSmilModel
hgs
parents:
diff changeset
   162
#include "unimodelconst.h"          // Uni constants
hgs
parents:
diff changeset
   163
#include "uniobjectsmodel.h"        // Model part of the objects view 
hgs
parents:
diff changeset
   164
#include "unitextobject.h"
hgs
parents:
diff changeset
   165
#include "unimimeinfo.h"
hgs
parents:
diff changeset
   166
#include "uniobjectsviewdialog.h"
hgs
parents:
diff changeset
   167
#include "unidrminfo.h"
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
// This must be included after unidatamodel.h as both GMXMParserxxx and this define KNewLine
hgs
parents:
diff changeset
   170
#include <aknconsts.h>              // KAvkonBitmapFile
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
// UniEditor application
hgs
parents:
diff changeset
   173
#include "UniEditorApp.h"           // To get app UID
hgs
parents:
diff changeset
   174
#include "UniEditorEnum.h"          // Panic codes
hgs
parents:
diff changeset
   175
#include "UniEditorApp.hrh"            // application specific commands
hgs
parents:
diff changeset
   176
#include "UniEditorAppUi.h"         // MmsEditorAppUi class
hgs
parents:
diff changeset
   177
#include "UniEditorHeader.h"
hgs
parents:
diff changeset
   178
#include "UniEditorChangeSlideOperation.h"
hgs
parents:
diff changeset
   179
#include "UniEditorInsertOperation.h"
hgs
parents:
diff changeset
   180
#include "UniEditorLaunchOperation.h"
hgs
parents:
diff changeset
   181
#include "UniEditorSaveOperation.h"
hgs
parents:
diff changeset
   182
#include "UniEditorSendOperation.h"
hgs
parents:
diff changeset
   183
#include "UniEditorVCardOperation.h"
hgs
parents:
diff changeset
   184
#include "UniEditorAddHeaderDialog.h"
hgs
parents:
diff changeset
   185
#include "UniSendingSettingsDialog.h"
hgs
parents:
diff changeset
   186
#include "UniEditorLogging.h"
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
#include <gsmuelem.h>     // Turkish SMS-PREQ2265 specific
hgs
parents:
diff changeset
   189
#include <aknstyluspopupmenu.h> //Added for displaying object specific stylus menus in editor
hgs
parents:
diff changeset
   190
// ========== LOCAL CONSTANTS AND MACROS ===================
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
// SMS related
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
// Character count used in unicode check buffer
hgs
parents:
diff changeset
   195
const TInt KUnicodeCheckChars = 10;
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
// Downwards arrow with tip leftwards
hgs
parents:
diff changeset
   198
// This does not count as unconvertible character as it will be
hgs
parents:
diff changeset
   199
// replaced by paragraph separator or line feed by UI
hgs
parents:
diff changeset
   200
const TUint KSmsDownwardsArrowLeft = 0x21B2;
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
const TInt  KSmsEdPDUInfoCalcReplaceCharacterCount = 2;
hgs
parents:
diff changeset
   203
const TUint KSmsEdUnicodeLFSupportedByBasicPhones = 0x000A;
hgs
parents:
diff changeset
   204
const TUint KSmsEnterCharacter = 0x2029;
hgs
parents:
diff changeset
   205
// Unicode char codes for GSM 03.38 7 bit ext table characters 
hgs
parents:
diff changeset
   206
const TUint KUniEdEuroSymbol = 0x20ac;
hgs
parents:
diff changeset
   207
const TUint KUniEdLeftSquareBracket = 0x5b;
hgs
parents:
diff changeset
   208
const TUint KUniEdReverseSolidus = 0x5c;
hgs
parents:
diff changeset
   209
const TUint KUniEdRightSquareBracket = 0x5d;
hgs
parents:
diff changeset
   210
const TUint KUniEdCircumflexAccent = 0x5e;
hgs
parents:
diff changeset
   211
const TUint KUniEdLeftCurlyBracket = 0x7b;
hgs
parents:
diff changeset
   212
const TUint KUniEdVerticalLine = 0x7c;
hgs
parents:
diff changeset
   213
const TUint KUniEdRightCurlyBracket = 0x7d;
hgs
parents:
diff changeset
   214
const TUint KUniEdTilde = 0x7e;
hgs
parents:
diff changeset
   215
const TUid  KUniEditorAppId = { 0x102072D8 };
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
// Amount of chars reserved for msg length and message count indication text
hgs
parents:
diff changeset
   218
const TInt KMsgLengthIndicationBuffer = 64;
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
// Bytes. Estimated disk space needed in addition to filesize when file is created as an attachment.
hgs
parents:
diff changeset
   221
const TInt  KUniAttachmentOverhead          = 1024; 
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
// Some functions determine and return the info note 
hgs
parents:
diff changeset
   224
// resource id at error situations. When not determined
hgs
parents:
diff changeset
   225
// this value is returned.  
hgs
parents:
diff changeset
   226
const TInt  KUniInvalidResourceId           = -1;   
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
// Non-empty par tag + one media object takes ~90 bytes
hgs
parents:
diff changeset
   229
const TInt  KEmptySlideSize                 = 90;  
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
// Kilobyte is 1024 not 1000 bytes 
hgs
parents:
diff changeset
   232
const TInt  KBytesInKilo                    = 1024; 
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
// Kilobyte limit when to stop showing message size
hgs
parents:
diff changeset
   235
// with kilo accuracy 
hgs
parents:
diff changeset
   236
const TInt  KOneDigitLimit                  = 10;   
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
// BodyText + subject, needed when counted the message size
hgs
parents:
diff changeset
   239
const TInt KUniEdNumberOfEditors            = 2; 
hgs
parents:
diff changeset
   240
hgs
parents:
diff changeset
   241
// Extra length added to SMS length when there's subject
hgs
parents:
diff changeset
   242
const TInt KUniEdExtraLenCausedBySubject    = 2; 
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
const TInt KUniEdMaxSubjectLen              = 40;
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
// For creation of checkbox list
hgs
parents:
diff changeset
   247
_LIT(KItemStart, "1\t");                    
hgs
parents:
diff changeset
   248
hgs
parents:
diff changeset
   249
// Exiting in launch. Let this time to show error notes
hgs
parents:
diff changeset
   250
const TInt  KDelayedExitShort = 100000;
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
// ========== MODULE DATA STRUCTURES =======================
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
// ========== LOCAL FUNCTION PROTOTYPES ====================
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
// ========== LOCAL FUNCTIONS ==============================
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
// ========== MEMBER FUNCTIONS ==============================
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260
// ---------------------------------------------------------
hgs
parents:
diff changeset
   261
// CUniEditorAppUi::CUniEditorAppUi
hgs
parents:
diff changeset
   262
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
   263
// might leave.
hgs
parents:
diff changeset
   264
// ---------------------------------------------------------
hgs
parents:
diff changeset
   265
//
hgs
parents:
diff changeset
   266
CUniEditorAppUi::CUniEditorAppUi() :   
hgs
parents:
diff changeset
   267
    iDisplaySize( -1 ),
hgs
parents:
diff changeset
   268
    iWaitResId( -1 ),
hgs
parents:
diff changeset
   269
    iOriginalSlide( -1 ),
hgs
parents:
diff changeset
   270
    iNextFocus( EMsgComponentIdNull ),
hgs
parents:
diff changeset
   271
    iPopupChangedMmsBuffer(NULL),
hgs
parents:
diff changeset
   272
    iPopupChangedSmsBuffer(NULL),
hgs
parents:
diff changeset
   273
    iEditorFlags( EShowInfoPopups ),
hgs
parents:
diff changeset
   274
    iMskResId( R_UNIEDITOR_OPTIONS_CLOSE ),
hgs
parents:
diff changeset
   275
    iOptimizedFlow(EFalse),
hgs
parents:
diff changeset
   276
    iScreenClearerPartialVKBOn( NULL )
hgs
parents:
diff changeset
   277
    {
hgs
parents:
diff changeset
   278
    }
hgs
parents:
diff changeset
   279
    
hgs
parents:
diff changeset
   280
// ---------------------------------------------------------
hgs
parents:
diff changeset
   281
// CUniEditorAppUi::ConstructL
hgs
parents:
diff changeset
   282
// Second phase contructor
hgs
parents:
diff changeset
   283
// NOTE: Don't call here any function that uses iMtm 
hgs
parents:
diff changeset
   284
//       and/or iSmilModel members, because they are 
hgs
parents:
diff changeset
   285
//       initialized at LaunchViewL.
hgs
parents:
diff changeset
   286
// ---------------------------------------------------------
hgs
parents:
diff changeset
   287
//
hgs
parents:
diff changeset
   288
void CUniEditorAppUi::ConstructL()
hgs
parents:
diff changeset
   289
    {
hgs
parents:
diff changeset
   290
    iFinalizeLaunchL = EFalse;
hgs
parents:
diff changeset
   291
    // We don't have any app ui if launched from idle
hgs
parents:
diff changeset
   292
    if ( iEikonEnv->EikAppUi() )
hgs
parents:
diff changeset
   293
        {
hgs
parents:
diff changeset
   294
        ActivateInputBlockerL( NULL );
hgs
parents:
diff changeset
   295
        }
hgs
parents:
diff changeset
   296
        
hgs
parents:
diff changeset
   297
    CMsgEditorAppUi::ConstructL();
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
	SetKeyEventFlags( EDisableSendKeyShort | EDisableSendKeyLong );
hgs
parents:
diff changeset
   300
    SetCloseWithEndKey( ETrue );
hgs
parents:
diff changeset
   301
    
hgs
parents:
diff changeset
   302
    FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
   303
    
hgs
parents:
diff changeset
   304
    // Get supported features from feature manager.    
hgs
parents:
diff changeset
   305
    if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
hgs
parents:
diff changeset
   306
        {
hgs
parents:
diff changeset
   307
        iSupportedFeatures |= EUniFeatureHelp;
hgs
parents:
diff changeset
   308
        }
hgs
parents:
diff changeset
   309
    if ( FeatureManager::FeatureSupported( KFeatureIdOfflineMode ) )
hgs
parents:
diff changeset
   310
        {
hgs
parents:
diff changeset
   311
        iSupportedFeatures |= EUniFeatureOffline;
hgs
parents:
diff changeset
   312
        }
hgs
parents:
diff changeset
   313
    if ( FeatureManager::FeatureSupported( KFeatureIdDrmFull ) )
hgs
parents:
diff changeset
   314
        {
hgs
parents:
diff changeset
   315
        iSupportedFeatures |= EUniFeatureDrmFull;
hgs
parents:
diff changeset
   316
        }
hgs
parents:
diff changeset
   317
    if ( FeatureManager::FeatureSupported( KFeatureIdCamera ) )
hgs
parents:
diff changeset
   318
        {
hgs
parents:
diff changeset
   319
        iSupportedFeatures |= EUniFeatureCamcorder;
hgs
parents:
diff changeset
   320
        }
hgs
parents:
diff changeset
   321
    if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) )
hgs
parents:
diff changeset
   322
        {
hgs
parents:
diff changeset
   323
        iSupportedFeatures |= EUniFeatureJapanese;
hgs
parents:
diff changeset
   324
        }
hgs
parents:
diff changeset
   325
    //Turkish SMS-PREQ2265 specific
hgs
parents:
diff changeset
   326
    if( FeatureManager::FeatureSupported( KFeatureIdNltSupport ) )
hgs
parents:
diff changeset
   327
        {
hgs
parents:
diff changeset
   328
        iNLTFeatureSupport = ETrue;
hgs
parents:
diff changeset
   329
        }
hgs
parents:
diff changeset
   330
    else
hgs
parents:
diff changeset
   331
        {
hgs
parents:
diff changeset
   332
        iNLTFeatureSupport = EFalse;
hgs
parents:
diff changeset
   333
        }
hgs
parents:
diff changeset
   334
    
hgs
parents:
diff changeset
   335
    FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
    iMuiuSettRepository = CRepository::NewL( KCRUidMuiuSettings );
hgs
parents:
diff changeset
   338
hgs
parents:
diff changeset
   339
    TInt featureBitmask = 0;
hgs
parents:
diff changeset
   340
    
hgs
parents:
diff changeset
   341
    CRepository* repository = CRepository::NewL( KCRUidMuiuVariation );
hgs
parents:
diff changeset
   342
    repository->Get( KMuiuMmsFeatures, featureBitmask );
hgs
parents:
diff changeset
   343
    
hgs
parents:
diff changeset
   344
    if ( featureBitmask & KMmsFeatureIdEditorSubjectField )
hgs
parents:
diff changeset
   345
        {
hgs
parents:
diff changeset
   346
        iSupportedFeatures |= EUniFeatureSubject;
hgs
parents:
diff changeset
   347
        }
hgs
parents:
diff changeset
   348
        
hgs
parents:
diff changeset
   349
    if ( featureBitmask & KMmsFeatureIdPrioritySupport )
hgs
parents:
diff changeset
   350
        {
hgs
parents:
diff changeset
   351
        iSupportedFeatures |= EUniFeaturePriority;
hgs
parents:
diff changeset
   352
        }    
hgs
parents:
diff changeset
   353
    
hgs
parents:
diff changeset
   354
    iInputTxtLangRepository = CRepository::NewL(  KCRUidAknFep   );     
hgs
parents:
diff changeset
   355
    iNotifyHandler = CCenRepNotifyHandler::NewL( *this,
hgs
parents:
diff changeset
   356
                                                 *iInputTxtLangRepository,                                                 
hgs
parents:
diff changeset
   357
                                                 CCenRepNotifyHandler::EIntKey,
hgs
parents:
diff changeset
   358
                                                 KAknFepInputTxtLang );
hgs
parents:
diff changeset
   359
    featureBitmask = 0;    
hgs
parents:
diff changeset
   360
    repository->Get( KMuiuUniEditorFeatures, featureBitmask );
hgs
parents:
diff changeset
   361
    
hgs
parents:
diff changeset
   362
    if ( featureBitmask & KUniEditorFeatureIdHideMsgTypeChangedPopup )
hgs
parents:
diff changeset
   363
        {
hgs
parents:
diff changeset
   364
        iEditorFlags &= ~EShowInfoPopups;
hgs
parents:
diff changeset
   365
        }    
hgs
parents:
diff changeset
   366
        
hgs
parents:
diff changeset
   367
    if ( featureBitmask & KUniEditorFeatureIdHideSizeCounter )
hgs
parents:
diff changeset
   368
        {
hgs
parents:
diff changeset
   369
        iEditorFlags |= EHideSizeCounter;
hgs
parents:
diff changeset
   370
        }    
hgs
parents:
diff changeset
   371
    if ( featureBitmask & KUniEditorFeatureIdHideMessageTypeOption )
hgs
parents:
diff changeset
   372
		{
hgs
parents:
diff changeset
   373
		iEditorFlags |= EHideMessageTypeOption;
hgs
parents:
diff changeset
   374
		}     
hgs
parents:
diff changeset
   375
    repository->Get( KMuiuSmsFeatures, featureBitmask );
hgs
parents:
diff changeset
   376
    
hgs
parents:
diff changeset
   377
    if ( featureBitmask & KSmsFeatureIdShowConcatenatedQuery )
hgs
parents:
diff changeset
   378
        {
hgs
parents:
diff changeset
   379
        iEditorFlags |= EShowSmsSentInManyParts;
hgs
parents:
diff changeset
   380
        }  
hgs
parents:
diff changeset
   381
       
hgs
parents:
diff changeset
   382
    delete repository;  
hgs
parents:
diff changeset
   383
    
hgs
parents:
diff changeset
   384
    iNotifyHandler->StartListeningL();    
hgs
parents:
diff changeset
   385
    // Disable task swapper from options menu during launch
hgs
parents:
diff changeset
   386
    MenuBar()->SetMenuType( CEikMenuBar::EMenuOptionsNoTaskSwapper );
hgs
parents:
diff changeset
   387
    
hgs
parents:
diff changeset
   388
    iTitleSms = StringLoader::LoadL( R_UNIEDITOR_TITLE_SMS, iCoeEnv );    
hgs
parents:
diff changeset
   389
    iTitleMms = StringLoader::LoadL( R_UNIEDITOR_TITLE_MMS, iCoeEnv );    
hgs
parents:
diff changeset
   390
    
hgs
parents:
diff changeset
   391
    // Load msg length format string from resource
hgs
parents:
diff changeset
   392
    iSmsLengthFormatBuffer = StringLoader::LoadL( R_UNIEDITOR_SMS_LENGTH, iCoeEnv );
hgs
parents:
diff changeset
   393
    iMmsLengthFormatBuffer = StringLoader::LoadL( R_UNIEDITOR_MMS_LENGTH, iCoeEnv );
hgs
parents:
diff changeset
   394
hgs
parents:
diff changeset
   395
    CEikStatusPane* statusPane = StatusPane();
hgs
parents:
diff changeset
   396
    
hgs
parents:
diff changeset
   397
    // Set generic title text as message type is not known yet.
hgs
parents:
diff changeset
   398
    HBufC* titleString = StringLoader::LoadLC( R_UNIEDITOR_TITLE, iCoeEnv );    
hgs
parents:
diff changeset
   399
        
hgs
parents:
diff changeset
   400
    iTitlePane = static_cast<CAknTitlePane*>( statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
hgs
parents:
diff changeset
   401
    iTitlePane->SetTextL( titleString->Des(), ETrue );
hgs
parents:
diff changeset
   402
    
hgs
parents:
diff changeset
   403
    CleanupStack::PopAndDestroy( titleString );
hgs
parents:
diff changeset
   404
    
hgs
parents:
diff changeset
   405
    iNaviPane = static_cast<CAknNavigationControlContainer*>( statusPane->ControlL( 
hgs
parents:
diff changeset
   406
                                                                TUid::Uid( EEikStatusPaneUidNavi ) ) );
hgs
parents:
diff changeset
   407
    
hgs
parents:
diff changeset
   408
    iNaviDecorator = iNaviPane->CreateEditorIndicatorContainerL();
hgs
parents:
diff changeset
   409
    
hgs
parents:
diff changeset
   410
    TParse fileParse;
hgs
parents:
diff changeset
   411
    fileParse.Set( KUniUtilsMBMFileName, &KDC_APP_BITMAP_DIR, NULL );
hgs
parents:
diff changeset
   412
hgs
parents:
diff changeset
   413
    iIconSms = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
   414
                                          KAknsIIDQgnPropMceSmsTitle,
hgs
parents:
diff changeset
   415
                                          fileParse.FullName(),
hgs
parents:
diff changeset
   416
                                          EMbmUniutilsQgn_prop_mce_sms_title,
hgs
parents:
diff changeset
   417
                                          EMbmUniutilsQgn_prop_mce_sms_title_mask );
hgs
parents:
diff changeset
   418
hgs
parents:
diff changeset
   419
    iIconMms = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
   420
                                          KAknsIIDQgnPropMceMmsTitle,
hgs
parents:
diff changeset
   421
                                          fileParse.FullName(),
hgs
parents:
diff changeset
   422
                                          EMbmUniutilsQgn_prop_mce_mms_title,
hgs
parents:
diff changeset
   423
                                          EMbmUniutilsQgn_prop_mce_mms_title_mask );
hgs
parents:
diff changeset
   424
    
hgs
parents:
diff changeset
   425
    SetTitleIconsSizeL();
hgs
parents:
diff changeset
   426
    
hgs
parents:
diff changeset
   427
    if ( Document()->CreationMode() == EMmsCreationModeWarning )
hgs
parents:
diff changeset
   428
        {
hgs
parents:
diff changeset
   429
        iEditorFlags |= EShowGuidedConf;
hgs
parents:
diff changeset
   430
        }
hgs
parents:
diff changeset
   431
        
hgs
parents:
diff changeset
   432
    // Prepare to launch msgeditorview to display the message
hgs
parents:
diff changeset
   433
    if ( !iEikonEnv->StartedAsServerApp() )
hgs
parents:
diff changeset
   434
        {
hgs
parents:
diff changeset
   435
        Document()->PrepareToLaunchL( this );
hgs
parents:
diff changeset
   436
        }
hgs
parents:
diff changeset
   437
hgs
parents:
diff changeset
   438
    iScreenClearer = CAknLocalScreenClearer::NewLC( ETrue );
hgs
parents:
diff changeset
   439
    CleanupStack::Pop( iScreenClearer );        
hgs
parents:
diff changeset
   440
	CreateFixedToolbarL( ETrue);
hgs
parents:
diff changeset
   441
    
hgs
parents:
diff changeset
   442
    // Priority must be lower than the priority of iWrappedWaitDialog
hgs
parents:
diff changeset
   443
    // Constructed here to ensure exit on low memory situations.
hgs
parents:
diff changeset
   444
    iIdle = CPeriodic::NewL( EPriorityNormal - 1 );
hgs
parents:
diff changeset
   445
    
hgs
parents:
diff changeset
   446
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   447
    if ( AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
   448
        {
hgs
parents:
diff changeset
   449
            User::LeaveIfError( iPeninputServer.Connect() );
hgs
parents:
diff changeset
   450
            iPeninputServer.AddPenUiActivationHandler( this, EPluginInputModeAll );
hgs
parents:
diff changeset
   451
            iPrevSmsLength = -1;    
hgs
parents:
diff changeset
   452
            iMsgLenToVKB = ETrue; 
hgs
parents:
diff changeset
   453
        }
hgs
parents:
diff changeset
   454
#endif
hgs
parents:
diff changeset
   455
    	iLongTapDetector = CAknLongTapDetector::NewL( this );
hgs
parents:
diff changeset
   456
		iLongTapDetector->SetTimeDelayBeforeAnimation( KUniLongTapStartDelay );
hgs
parents:
diff changeset
   457
		iLongTapDetector->SetLongTapDelay( KUniLongTapTimeDelay );
hgs
parents:
diff changeset
   458
		iTapConsumed = EFalse;
hgs
parents:
diff changeset
   459
hgs
parents:
diff changeset
   460
		//Korean Req: 415-5434
hgs
parents:
diff changeset
   461
		if ( iEditorFlags & EShowInfoPopups )
hgs
parents:
diff changeset
   462
     		{
hgs
parents:
diff changeset
   463
	        iPopupNote = CAknInfoPopupNoteController::NewL();
hgs
parents:
diff changeset
   464
            iPopupNote->SetTimeDelayBeforeShow( 0 );
hgs
parents:
diff changeset
   465
            iPopupNote->SetTimePopupInView( 3000 );
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
			iPopupSmsSizeAboveLimitBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_SMS_SIZE_ABOVE_LIMIT, Document()->SmsSizeWarningBytes(), iCoeEnv );
hgs
parents:
diff changeset
   468
			iPopupSmsSizeBelowLimitBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_SMS_SIZE_UNDER_LIMIT, Document()->SmsSizeWarningBytes(), iCoeEnv );		
hgs
parents:
diff changeset
   469
	    	}
hgs
parents:
diff changeset
   470
hgs
parents:
diff changeset
   471
    }
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
hgs
parents:
diff changeset
   474
// ---------------------------------------------------------
hgs
parents:
diff changeset
   475
// CUniEditorAppUi::~CUniEditorAppUi
hgs
parents:
diff changeset
   476
// Destructor
hgs
parents:
diff changeset
   477
// ---------------------------------------------------------
hgs
parents:
diff changeset
   478
//
hgs
parents:
diff changeset
   479
CUniEditorAppUi::~CUniEditorAppUi()
hgs
parents:
diff changeset
   480
    {
hgs
parents:
diff changeset
   481
    iEditorFlags |= EEditorExiting;
hgs
parents:
diff changeset
   482
    
hgs
parents:
diff changeset
   483
	
hgs
parents:
diff changeset
   484
    if ( iView )
hgs
parents:
diff changeset
   485
        {
hgs
parents:
diff changeset
   486
        // To prevent focus changes caused by input blocker deletion & toolbar extension
hgs
parents:
diff changeset
   487
        // closing.
hgs
parents:
diff changeset
   488
        iEikonEnv->EikAppUi()->RemoveFromStack( iView );
hgs
parents:
diff changeset
   489
        
hgs
parents:
diff changeset
   490
        if ( iEditorFlags & ELaunchSuccessful )
hgs
parents:
diff changeset
   491
            {    
hgs
parents:
diff changeset
   492
            TInt id( EMsgComponentIdNull );
hgs
parents:
diff changeset
   493
            
hgs
parents:
diff changeset
   494
            // remember input mode:
hgs
parents:
diff changeset
   495
            // observer does not get event, if editor is closed 
hgs
parents:
diff changeset
   496
            CMsgBaseControl* ctrl = iView->FocusedControl();  // ctrl can be NULL.
hgs
parents:
diff changeset
   497
            if ( ctrl )
hgs
parents:
diff changeset
   498
                {
hgs
parents:
diff changeset
   499
                id = ctrl->ControlId();
hgs
parents:
diff changeset
   500
                if ( iHeader &&  
hgs
parents:
diff changeset
   501
                     !iHeader->IsAddressControl( id ) )
hgs
parents:
diff changeset
   502
                    {
hgs
parents:
diff changeset
   503
                    id = EMsgComponentIdNull;
hgs
parents:
diff changeset
   504
                    }
hgs
parents:
diff changeset
   505
                }
hgs
parents:
diff changeset
   506
                
hgs
parents:
diff changeset
   507
            if ( id == EMsgComponentIdNull )
hgs
parents:
diff changeset
   508
                { 
hgs
parents:
diff changeset
   509
                id = EMsgComponentIdTo;
hgs
parents:
diff changeset
   510
                }
hgs
parents:
diff changeset
   511
            
hgs
parents:
diff changeset
   512
            CUniBaseHeader::THeaderFields headerField = CUniBaseHeader::EHeaderAddressTo;
hgs
parents:
diff changeset
   513
            
hgs
parents:
diff changeset
   514
            if ( id == EMsgComponentIdCc )
hgs
parents:
diff changeset
   515
                {
hgs
parents:
diff changeset
   516
                headerField = CUniBaseHeader::EHeaderAddressCc;
hgs
parents:
diff changeset
   517
                }
hgs
parents:
diff changeset
   518
            else if ( id == EMsgComponentIdBcc )
hgs
parents:
diff changeset
   519
                {
hgs
parents:
diff changeset
   520
                headerField = CUniBaseHeader::EHeaderAddressBcc;
hgs
parents:
diff changeset
   521
                }
hgs
parents:
diff changeset
   522
            
hgs
parents:
diff changeset
   523
            CMsgAddressControl* rec = 
hgs
parents:
diff changeset
   524
                iHeader ? static_cast<CMsgAddressControl*>( iHeader->AddressControl( headerField ) ) :
hgs
parents:
diff changeset
   525
                        NULL;
hgs
parents:
diff changeset
   526
hgs
parents:
diff changeset
   527
            if ( rec ) 
hgs
parents:
diff changeset
   528
                {
hgs
parents:
diff changeset
   529
                TInt inputMode = rec->Editor().AknEditorCurrentInputMode();
hgs
parents:
diff changeset
   530
                
hgs
parents:
diff changeset
   531
                if ( iMuiuSettRepository )
hgs
parents:
diff changeset
   532
                    {
hgs
parents:
diff changeset
   533
                    iMuiuSettRepository->Set( KMuiuToInputMode, inputMode );
hgs
parents:
diff changeset
   534
                    }
hgs
parents:
diff changeset
   535
                }
hgs
parents:
diff changeset
   536
            }
hgs
parents:
diff changeset
   537
        }
hgs
parents:
diff changeset
   538
    
hgs
parents:
diff changeset
   539
    delete iLaunchOperation;
hgs
parents:
diff changeset
   540
    delete iSaveOperation;
hgs
parents:
diff changeset
   541
    delete iSendOperation;
hgs
parents:
diff changeset
   542
    delete iInsertOperation;
hgs
parents:
diff changeset
   543
    delete iChangeSlideOperation;
hgs
parents:
diff changeset
   544
    delete iVCardOperation;
hgs
parents:
diff changeset
   545
    
hgs
parents:
diff changeset
   546
    delete iParser;
hgs
parents:
diff changeset
   547
    delete iDom;
hgs
parents:
diff changeset
   548
    
hgs
parents:
diff changeset
   549
    delete iInputBlocker;
hgs
parents:
diff changeset
   550
hgs
parents:
diff changeset
   551
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
   552
    if ( AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
   553
         {
hgs
parents:
diff changeset
   554
          iPeninputServer.Close();
hgs
parents:
diff changeset
   555
         }
hgs
parents:
diff changeset
   556
#endif
hgs
parents:
diff changeset
   557
    
hgs
parents:
diff changeset
   558
    delete iTitleSms;
hgs
parents:
diff changeset
   559
    delete iTitleMms;
hgs
parents:
diff changeset
   560
hgs
parents:
diff changeset
   561
    delete iIconSms;
hgs
parents:
diff changeset
   562
    delete iIconMms;
hgs
parents:
diff changeset
   563
    
hgs
parents:
diff changeset
   564
    delete iSmsLengthFormatBuffer;
hgs
parents:
diff changeset
   565
    delete iMmsLengthFormatBuffer;
hgs
parents:
diff changeset
   566
    
hgs
parents:
diff changeset
   567
    delete iPopupNote;
hgs
parents:
diff changeset
   568
    delete iPopupChangedMmsBuffer;
hgs
parents:
diff changeset
   569
    delete iPopupChangedSmsBuffer;
hgs
parents:
diff changeset
   570
    
hgs
parents:
diff changeset
   571
    delete iMuiuSettRepository;
hgs
parents:
diff changeset
   572
hgs
parents:
diff changeset
   573
    delete iWaitDialog;
hgs
parents:
diff changeset
   574
    delete iIdle;
hgs
parents:
diff changeset
   575
hgs
parents:
diff changeset
   576
    delete iInsertingMedia;
hgs
parents:
diff changeset
   577
    delete iHeader;
hgs
parents:
diff changeset
   578
    delete iSlideLoader;
hgs
parents:
diff changeset
   579
    delete iScreenClearer;
hgs
parents:
diff changeset
   580
hgs
parents:
diff changeset
   581
    delete iDocHandler;
hgs
parents:
diff changeset
   582
    delete iStoredBodyControl;
hgs
parents:
diff changeset
   583
    
hgs
parents:
diff changeset
   584
    delete iFixedToolbar;
hgs
parents:
diff changeset
   585
    if( iNotifyHandler )
hgs
parents:
diff changeset
   586
        {
hgs
parents:
diff changeset
   587
         iNotifyHandler->StopListening();         
hgs
parents:
diff changeset
   588
          delete iNotifyHandler;
hgs
parents:
diff changeset
   589
         }
hgs
parents:
diff changeset
   590
    
hgs
parents:
diff changeset
   591
   if(iInputTxtLangRepository)
hgs
parents:
diff changeset
   592
    {
hgs
parents:
diff changeset
   593
    delete iInputTxtLangRepository;
hgs
parents:
diff changeset
   594
    }
hgs
parents:
diff changeset
   595
  if(iNLTFeatureSupport)
hgs
parents:
diff changeset
   596
    {   
hgs
parents:
diff changeset
   597
    delete iPrevBuffer;
hgs
parents:
diff changeset
   598
    }
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
    delete iPopupSmsSizeAboveLimitBuffer;
hgs
parents:
diff changeset
   601
    delete iPopupSmsSizeBelowLimitBuffer;
hgs
parents:
diff changeset
   602
	if(iLongTapDetector)
hgs
parents:
diff changeset
   603
	{
hgs
parents:
diff changeset
   604
    delete iLongTapDetector;
hgs
parents:
diff changeset
   605
	}
hgs
parents:
diff changeset
   606
	if(iEmbeddedObjectStylusPopup)
hgs
parents:
diff changeset
   607
	{
hgs
parents:
diff changeset
   608
    delete iEmbeddedObjectStylusPopup;
hgs
parents:
diff changeset
   609
	iEmbeddedObjectStylusPopup = NULL;
hgs
parents:
diff changeset
   610
	}	
hgs
parents:
diff changeset
   611
	if( iScreenClearerPartialVKBOn )
hgs
parents:
diff changeset
   612
	    {
hgs
parents:
diff changeset
   613
	    delete iScreenClearerPartialVKBOn;
hgs
parents:
diff changeset
   614
	    iScreenClearerPartialVKBOn = NULL;
hgs
parents:
diff changeset
   615
	    }
hgs
parents:
diff changeset
   616
   
hgs
parents:
diff changeset
   617
    }
hgs
parents:
diff changeset
   618
hgs
parents:
diff changeset
   619
// ---------------------------------------------------------
hgs
parents:
diff changeset
   620
// CUniEditorAppUi::LaunchViewL
hgs
parents:
diff changeset
   621
//
hgs
parents:
diff changeset
   622
// Called by the document when application view launch should be
hgs
parents:
diff changeset
   623
// started.
hgs
parents:
diff changeset
   624
// ---------------------------------------------------------
hgs
parents:
diff changeset
   625
//
hgs
parents:
diff changeset
   626
void CUniEditorAppUi::LaunchViewL()
hgs
parents:
diff changeset
   627
    {
hgs
parents:
diff changeset
   628
hgs
parents:
diff changeset
   629
    // Initialize these members here.
hgs
parents:
diff changeset
   630
    iMtm = &( Document()->Mtm() );
hgs
parents:
diff changeset
   631
hgs
parents:
diff changeset
   632
    const TMsvEntry& entry = Document()->Entry();
hgs
parents:
diff changeset
   633
    if ( entry.iType.iUid != KUidMsvMessageEntryValue )
hgs
parents:
diff changeset
   634
        {
hgs
parents:
diff changeset
   635
        // Fixing: JHUA-5SCF8W
hgs
parents:
diff changeset
   636
        // Backup / Restore restarts editor without proper
hgs
parents:
diff changeset
   637
        // context. Leave with KErrGeneral.
hgs
parents:
diff changeset
   638
        User::Leave( KErrGeneral );
hgs
parents:
diff changeset
   639
        }
hgs
parents:
diff changeset
   640
        
hgs
parents:
diff changeset
   641
    if ( entry.Parent() != KMsvDraftEntryIdValue )
hgs
parents:
diff changeset
   642
        {
hgs
parents:
diff changeset
   643
        User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   644
        }
hgs
parents:
diff changeset
   645
    if ( !( Document()->LaunchFlags() & EMsgCreateNewMessage ) )
hgs
parents:
diff changeset
   646
        {
hgs
parents:
diff changeset
   647
        TRAPD( error, iMtm->LoadMessageL() );
hgs
parents:
diff changeset
   648
        if ( error )
hgs
parents:
diff changeset
   649
            {
hgs
parents:
diff changeset
   650
            if ( error != KErrNoMemory &&
hgs
parents:
diff changeset
   651
                 error != KErrDiskFull )
hgs
parents:
diff changeset
   652
                {
hgs
parents:
diff changeset
   653
                ShowErrorNoteL( R_UNIEDITOR_ERROR_MSG_CORRUPT, ETrue );
hgs
parents:
diff changeset
   654
                }
hgs
parents:
diff changeset
   655
            User::Leave( error );
hgs
parents:
diff changeset
   656
            }
hgs
parents:
diff changeset
   657
        }    
hgs
parents:
diff changeset
   658
    
hgs
parents:
diff changeset
   659
    Document()->SetMessageType();
hgs
parents:
diff changeset
   660
hgs
parents:
diff changeset
   661
    if ( TUniMsvEntry::IsMmsUpload( Document()->Entry() ) )
hgs
parents:
diff changeset
   662
        {
hgs
parents:
diff changeset
   663
        Document()->SetCreationMode( EMmsCreationModeFree );
hgs
parents:
diff changeset
   664
        
hgs
parents:
diff changeset
   665
        if ( iFixedToolbar )
hgs
parents:
diff changeset
   666
            {
hgs
parents:
diff changeset
   667
            iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarAddRecipient, ETrue, EFalse );
hgs
parents:
diff changeset
   668
            }
hgs
parents:
diff changeset
   669
        }
hgs
parents:
diff changeset
   670
    
hgs
parents:
diff changeset
   671
    iView = CMsgEditorView::NewL( *this, CMsgEditorView::EMsgDoNotUseDefaultBodyControl );
hgs
parents:
diff changeset
   672
    iView->SetEdwinObserverL( this );
hgs
parents:
diff changeset
   673
    
hgs
parents:
diff changeset
   674
hgs
parents:
diff changeset
   675
    iLaunchOperation = CUniEditorLaunchOperation::NewL( *this,
hgs
parents:
diff changeset
   676
                                                        *this,
hgs
parents:
diff changeset
   677
                                                        *Document(),
hgs
parents:
diff changeset
   678
                                                        *iView,
hgs
parents:
diff changeset
   679
                                                        *this,
hgs
parents:
diff changeset
   680
                                                        FsSession() );
hgs
parents:
diff changeset
   681
hgs
parents:
diff changeset
   682
    iLaunchOperation->Launch();
hgs
parents:
diff changeset
   683
    }
hgs
parents:
diff changeset
   684
hgs
parents:
diff changeset
   685
// ---------------------------------------------------------
hgs
parents:
diff changeset
   686
// CUniEditorAppUi::FinalizeLaunchL
hgs
parents:
diff changeset
   687
//
hgs
parents:
diff changeset
   688
// Performs all the last actions before editor launch ends.
hgs
parents:
diff changeset
   689
// ---------------------------------------------------------
hgs
parents:
diff changeset
   690
//
hgs
parents:
diff changeset
   691
void CUniEditorAppUi::FinalizeLaunchL()
hgs
parents:
diff changeset
   692
    {
hgs
parents:
diff changeset
   693
    iFinalizeLaunchL = ETrue;
hgs
parents:
diff changeset
   694
    iSmilModel = &Document()->DataModel()->SmilModel();
hgs
parents:
diff changeset
   695
    iHeader = iLaunchOperation->DetachHeader();
hgs
parents:
diff changeset
   696
    iSlideLoader = iLaunchOperation->DetachSlideLoader();
hgs
parents:
diff changeset
   697
    
hgs
parents:
diff changeset
   698
    SetMessageTypeLockingL();
hgs
parents:
diff changeset
   699
    
hgs
parents:
diff changeset
   700
    TInt headersVariation = iHeader->AddHeadersVariation();
hgs
parents:
diff changeset
   701
hgs
parents:
diff changeset
   702
    if ( Document()->EmailOverSmsSupported() ||
hgs
parents:
diff changeset
   703
         ( headersVariation & EUniFeatureSubject && 
hgs
parents:
diff changeset
   704
           !( headersVariation & EUniFeatureSubjectConfigurable ) ) )
hgs
parents:
diff changeset
   705
        { 
hgs
parents:
diff changeset
   706
        // Enable subject in SMS when it's not selectable in additional headers
hgs
parents:
diff changeset
   707
        // and when EmailOverSms is supported
hgs
parents:
diff changeset
   708
        iEditorFlags |= ESubjectOkInSms;
hgs
parents:
diff changeset
   709
        }
hgs
parents:
diff changeset
   710
    
hgs
parents:
diff changeset
   711
    SetAddressSize();
hgs
parents:
diff changeset
   712
    SetSubjectSize();
hgs
parents:
diff changeset
   713
    
hgs
parents:
diff changeset
   714
    // "Remember input mode" feature
hgs
parents:
diff changeset
   715
    TInt inputMode = EAknEditorNumericInputMode;
hgs
parents:
diff changeset
   716
    if ( iMuiuSettRepository->Get( KMuiuToInputMode, inputMode ) != KErrNone )
hgs
parents:
diff changeset
   717
        {
hgs
parents:
diff changeset
   718
        inputMode = EAknEditorNumericInputMode;
hgs
parents:
diff changeset
   719
        }
hgs
parents:
diff changeset
   720
hgs
parents:
diff changeset
   721
    SetInputModeToAddressFields( inputMode );
hgs
parents:
diff changeset
   722
    
hgs
parents:
diff changeset
   723
    CheckLockedSmsWithAttaL();
hgs
parents:
diff changeset
   724
    
hgs
parents:
diff changeset
   725
    if ( iSupportedFeatures & EUniFeatureJapanese &&
hgs
parents:
diff changeset
   726
         Document()->MessageType() != EUniForward )
hgs
parents:
diff changeset
   727
        {
hgs
parents:
diff changeset
   728
        // Image first layout is always used in Japanese variant when dealing
hgs
parents:
diff changeset
   729
        // with any other messages than those that where originally forwarded by user.
hgs
parents:
diff changeset
   730
        // With forwarded messages the original layout is kept unchanged.
hgs
parents:
diff changeset
   731
        ChangeOrderL( EUniImageFirst );
hgs
parents:
diff changeset
   732
        iSmilModel->SetLayoutL( EUniImageFirst );
hgs
parents:
diff changeset
   733
        }
hgs
parents:
diff changeset
   734
    
hgs
parents:
diff changeset
   735
    TMsgControlId focusedControlId = ResolveLaunchFocusedControlL();
hgs
parents:
diff changeset
   736
            
hgs
parents:
diff changeset
   737
    
hgs
parents:
diff changeset
   738
    CEikStatusPane* statusPane = StatusPane();
hgs
parents:
diff changeset
   739
    
hgs
parents:
diff changeset
   740
    if ( focusedControlId == EMsgComponentIdBody )
hgs
parents:
diff changeset
   741
        {
hgs
parents:
diff changeset
   742
        BodyCtrl()->SetCursorPosL( BodyCtrlEditor()->TextLength() );
hgs
parents:
diff changeset
   743
        }
hgs
parents:
diff changeset
   744
    
hgs
parents:
diff changeset
   745
    if( iNLTFeatureSupport )
hgs
parents:
diff changeset
   746
        {
hgs
parents:
diff changeset
   747
        iPrevBuffer = NULL;
hgs
parents:
diff changeset
   748
        //Turskish SMS-PREQ2265 specific
hgs
parents:
diff changeset
   749
        TSmsEncoding alternateEncodingType;
hgs
parents:
diff changeset
   750
        TUniMessageCharSetSupport charSet;
hgs
parents:
diff changeset
   751
        TInt inputLang = iAvkonEnv->SettingCache().InputLanguage();
hgs
parents:
diff changeset
   752
        CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
   753
        
hgs
parents:
diff changeset
   754
        alternateEncodingType = doc->GetLanguageSpecificAltEncodingType(inputLang);
hgs
parents:
diff changeset
   755
        charSet = doc->CharSetSupport();
hgs
parents:
diff changeset
   756
        
hgs
parents:
diff changeset
   757
        doc->SetAlternativeEncodingType(alternateEncodingType);
hgs
parents:
diff changeset
   758
        if(SmsPlugin())
hgs
parents:
diff changeset
   759
            {
hgs
parents:
diff changeset
   760
            //Initialize corresponding language alternative encoding types and character set selected
hgs
parents:
diff changeset
   761
            SmsPlugin()->SetEncodingSettings(EFalse, alternateEncodingType, charSet);
hgs
parents:
diff changeset
   762
            }
hgs
parents:
diff changeset
   763
        }
hgs
parents:
diff changeset
   764
    
hgs
parents:
diff changeset
   765
    CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
   766
    CheckHeaderForMessageTypeL();
hgs
parents:
diff changeset
   767
    
hgs
parents:
diff changeset
   768
    SetOrRemoveMaxSizeInEdwin();
hgs
parents:
diff changeset
   769
    
hgs
parents:
diff changeset
   770
    InitNaviPaneL();
hgs
parents:
diff changeset
   771
    SetTitleL();
hgs
parents:
diff changeset
   772
    if ( Document()->MessageType() == EUniSendUi )
hgs
parents:
diff changeset
   773
        {
hgs
parents:
diff changeset
   774
        // Show invalid contact notes and verify unvalidated addresses.
hgs
parents:
diff changeset
   775
        iHeader->ShowInvalidContactNotesL();
hgs
parents:
diff changeset
   776
        
hgs
parents:
diff changeset
   777
        TBool unused;
hgs
parents:
diff changeset
   778
        VerifyAddressesL( unused );
hgs
parents:
diff changeset
   779
        }
hgs
parents:
diff changeset
   780
        
hgs
parents:
diff changeset
   781
    if ( iEditorFlags & EShowInfoPopups )
hgs
parents:
diff changeset
   782
        {
hgs
parents:
diff changeset
   783
        iPopupChangedMmsBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_MSG_CHANGED_MMS, iCoeEnv );
hgs
parents:
diff changeset
   784
		iPopupChangedSmsBuffer = StringLoader::LoadL( R_UNIEDITOR_POPUP_MSG_CHANGED_SMS, iCoeEnv );
hgs
parents:
diff changeset
   785
hgs
parents:
diff changeset
   786
        }
hgs
parents:
diff changeset
   787
hgs
parents:
diff changeset
   788
    CheckMaxRecipientsAndShowNoteL();
hgs
parents:
diff changeset
   789
    
hgs
parents:
diff changeset
   790
    // Enable task swapper to options menu after launch has been completed.
hgs
parents:
diff changeset
   791
    MenuBar()->SetMenuType( CEikMenuBar::EMenuOptions );
hgs
parents:
diff changeset
   792
    
hgs
parents:
diff changeset
   793
    UpdateToolbarL();
hgs
parents:
diff changeset
   794
    
hgs
parents:
diff changeset
   795
    iEditorFlags |= ELaunchSuccessful;
hgs
parents:
diff changeset
   796
	
hgs
parents:
diff changeset
   797
    iView->ExecuteL( ClientRect(), focusedControlId );
hgs
parents:
diff changeset
   798
    delete iScreenClearer;
hgs
parents:
diff changeset
   799
    iScreenClearer = NULL;
hgs
parents:
diff changeset
   800
	
hgs
parents:
diff changeset
   801
    }
hgs
parents:
diff changeset
   802
    
hgs
parents:
diff changeset
   803
// ---------------------------------------------------------
hgs
parents:
diff changeset
   804
// CUniEditorAppUi::ShowLaunchNotesL
hgs
parents:
diff changeset
   805
//
hgs
parents:
diff changeset
   806
// Tries to resolve correct note(s) to be shown when editor is
hgs
parents:
diff changeset
   807
// launched. First disables showing of guided conformance note if
hgs
parents:
diff changeset
   808
// message is forwarded with non-conformant content as viewer should
hgs
parents:
diff changeset
   809
// be responsible of showing this. After this goes through 
hgs
parents:
diff changeset
   810
// error list and sets correct error resource depending of 
hgs
parents:
diff changeset
   811
// editor mode and message content. Priority & plural solving
hgs
parents:
diff changeset
   812
// is performed on SetErrorResource function. Some notes can
hgs
parents:
diff changeset
   813
// be grouped together so that if error notes from different
hgs
parents:
diff changeset
   814
// groups are set then general error note should be shown instead.
hgs
parents:
diff changeset
   815
// After correct error note resource is resolved then notes 
hgs
parents:
diff changeset
   816
// related to conformance are shown. Do note that there is 
hgs
parents:
diff changeset
   817
// a EShowGuidedConf flag that controls the visibility of guided
hgs
parents:
diff changeset
   818
// note. After this if still appropriate and specified
hgs
parents:
diff changeset
   819
// error note is shown to user.
hgs
parents:
diff changeset
   820
// ---------------------------------------------------------
hgs
parents:
diff changeset
   821
//
hgs
parents:
diff changeset
   822
void CUniEditorAppUi::ShowLaunchNotesL( TBool& aShutDown )
hgs
parents:
diff changeset
   823
    {
hgs
parents:
diff changeset
   824
    TInt errRes( KErrNotFound );
hgs
parents:
diff changeset
   825
    
hgs
parents:
diff changeset
   826
    if ( Document()->LaunchFlags() & EMsgForwardMessage &&
hgs
parents:
diff changeset
   827
         ( Document()->UpdatedNonConformantCount() > 0 || 
hgs
parents:
diff changeset
   828
           Document()->DataModel()->SmilType() == ETemplateSmil ||
hgs
parents:
diff changeset
   829
           Document()->DataModel()->SmilType() == E3GPPSmil ) )
hgs
parents:
diff changeset
   830
        {
hgs
parents:
diff changeset
   831
        iEditorFlags &= ~EShowGuidedConf;
hgs
parents:
diff changeset
   832
        }
hgs
parents:
diff changeset
   833
    
hgs
parents:
diff changeset
   834
    // Tells whether message has files included.
hgs
parents:
diff changeset
   835
    TBool containsFiles = Document()->DataModel()->ObjectList().Count() > 0 || 
hgs
parents:
diff changeset
   836
                          Document()->DataModel()->AttachmentList().Count() > 0;
hgs
parents:
diff changeset
   837
    
hgs
parents:
diff changeset
   838
    TBool useRModeStrings = Document()->CreationModeUserChangeable() &&
hgs
parents:
diff changeset
   839
                            Document()->CreationMode() == EMmsCreationModeRestricted;
hgs
parents:
diff changeset
   840
    
hgs
parents:
diff changeset
   841
    CArrayFixFlat<TInt>* errors = iLaunchOperation->GetErrors();
hgs
parents:
diff changeset
   842
    
hgs
parents:
diff changeset
   843
    if ( Document()->DataModel()->ParseResult() & EObjectRemoved )
hgs
parents:
diff changeset
   844
        {
hgs
parents:
diff changeset
   845
        SetErrorResource( errRes, R_UNIEDITOR_INFO_MAX_SLIDES_SOME );
hgs
parents:
diff changeset
   846
        }
hgs
parents:
diff changeset
   847
    
hgs
parents:
diff changeset
   848
    for ( TInt i = 0; i < errors->Count(); i++ )
hgs
parents:
diff changeset
   849
        {
hgs
parents:
diff changeset
   850
        switch ( errors->At( i ) )
hgs
parents:
diff changeset
   851
            {
hgs
parents:
diff changeset
   852
            case KUniLaunchAbortPresRestricted:
hgs
parents:
diff changeset
   853
                {
hgs
parents:
diff changeset
   854
                // Set only for 3GPP or template SMIL presentations when creation
hgs
parents:
diff changeset
   855
                // mode is restricted.
hgs
parents:
diff changeset
   856
                if ( useRModeStrings )
hgs
parents:
diff changeset
   857
                    {
hgs
parents:
diff changeset
   858
                    SetErrorResource( errRes, R_UNIEDITOR_ERROR_RMODE_CANNOT_OPEN );
hgs
parents:
diff changeset
   859
                    }
hgs
parents:
diff changeset
   860
                else
hgs
parents:
diff changeset
   861
                    {
hgs
parents:
diff changeset
   862
                    SetErrorResource( errRes, R_UNIEDITOR_ERROR_CANNOT_OPEN );
hgs
parents:
diff changeset
   863
                    }
hgs
parents:
diff changeset
   864
                    
hgs
parents:
diff changeset
   865
                break;
hgs
parents:
diff changeset
   866
                }
hgs
parents:
diff changeset
   867
            case KUniLaunchPresGuided:
hgs
parents:
diff changeset
   868
                {
hgs
parents:
diff changeset
   869
                // Set only for 3GPP or template SMIL presentations when creation
hgs
parents:
diff changeset
   870
                // mode is guided.
hgs
parents:
diff changeset
   871
                SetErrorResource( errRes, R_UNIEDITOR_QUEST_GUIDED_PRESENTATION );
hgs
parents:
diff changeset
   872
                break;
hgs
parents:
diff changeset
   873
                }
hgs
parents:
diff changeset
   874
            case EUniProcessImgOutOfMemory:
hgs
parents:
diff changeset
   875
            case EUniProcessImgOutOfDisk:
hgs
parents:
diff changeset
   876
            case EUniProcessImgNotFound:
hgs
parents:
diff changeset
   877
            case EUniProcessImgNonConformant:
hgs
parents:
diff changeset
   878
            case EUniProcessImgScalingFailed:
hgs
parents:
diff changeset
   879
            case EUniProcessImgCompressFailed:
hgs
parents:
diff changeset
   880
            case EUniProcessImgCouldNotScale:
hgs
parents:
diff changeset
   881
                {                
hgs
parents:
diff changeset
   882
                if ( useRModeStrings )
hgs
parents:
diff changeset
   883
                    {
hgs
parents:
diff changeset
   884
                    SetErrorResource( errRes, R_UNIEDITOR_INFO_RMODE_SCALING_FAILED );
hgs
parents:
diff changeset
   885
                    }
hgs
parents:
diff changeset
   886
                else
hgs
parents:
diff changeset
   887
                    {
hgs
parents:
diff changeset
   888
                    SetErrorResource( errRes, R_UNIEDITOR_INFO_SCALING_FAILED );
hgs
parents:
diff changeset
   889
                    }    
hgs
parents:
diff changeset
   890
                break;
hgs
parents:
diff changeset
   891
                }
hgs
parents:
diff changeset
   892
            case EUniSendUiUnsupported:
hgs
parents:
diff changeset
   893
                {                
hgs
parents:
diff changeset
   894
                if ( containsFiles )
hgs
parents:
diff changeset
   895
                    {
hgs
parents:
diff changeset
   896
                    if ( useRModeStrings )
hgs
parents:
diff changeset
   897
                        {
hgs
parents:
diff changeset
   898
                        SetErrorResource( errRes, R_UNIEDITOR_INFO_RMODE_SOME_NOT_SUPPORTED );
hgs
parents:
diff changeset
   899
                        }
hgs
parents:
diff changeset
   900
                    else
hgs
parents:
diff changeset
   901
                        {
hgs
parents:
diff changeset
   902
                        SetErrorResource( errRes, R_UNIEDITOR_INFO_SOME_NOT_SUPPORTED );
hgs
parents:
diff changeset
   903
                        }   
hgs
parents:
diff changeset
   904
                    }
hgs
parents:
diff changeset
   905
                else
hgs
parents:
diff changeset
   906
                    {
hgs
parents:
diff changeset
   907
                    if ( useRModeStrings )
hgs
parents:
diff changeset
   908
                        {
hgs
parents:
diff changeset
   909
                        SetErrorResource( errRes, R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECT );
hgs
parents:
diff changeset
   910
                        }
hgs
parents:
diff changeset
   911
                    else
hgs
parents:
diff changeset
   912
                        {
hgs
parents:
diff changeset
   913
                        SetErrorResource( errRes, R_UNIEDITOR_INFO_UNSUPPORTED_OBJECT );
hgs
parents:
diff changeset
   914
                        }   
hgs
parents:
diff changeset
   915
                    }
hgs
parents:
diff changeset
   916
                break;
hgs
parents:
diff changeset
   917
                }
hgs
parents:
diff changeset
   918
            case EUniSendUiForbidden:
hgs
parents:
diff changeset
   919
                {
hgs
parents:
diff changeset
   920
                // Note showing should be handled by SendUI in this case.
hgs
parents:
diff changeset
   921
                break;
hgs
parents:
diff changeset
   922
                }
hgs
parents:
diff changeset
   923
            case EUniSendUiTooBig:
hgs
parents:
diff changeset
   924
                {
hgs
parents:
diff changeset
   925
                if ( containsFiles )
hgs
parents:
diff changeset
   926
                    {
hgs
parents:
diff changeset
   927
                    SetErrorResource( errRes, R_UNIEDITOR_INFO_OBJECT_SEND_AS_TOO_BIG );
hgs
parents:
diff changeset
   928
                    }
hgs
parents:
diff changeset
   929
                else
hgs
parents:
diff changeset
   930
                    {
hgs
parents:
diff changeset
   931
                    SetErrorResource( errRes, R_UNIEDITOR_INFO_OBJECT_TOO_BIG );
hgs
parents:
diff changeset
   932
                    }
hgs
parents:
diff changeset
   933
                    
hgs
parents:
diff changeset
   934
                break;
hgs
parents:
diff changeset
   935
                }
hgs
parents:
diff changeset
   936
            case EUniEditorExit:
hgs
parents:
diff changeset
   937
            case EUniProcessImgUserAbort:
hgs
parents:
diff changeset
   938
                {
hgs
parents:
diff changeset
   939
                // Program error or user has selected to abort image processing at some stage.
hgs
parents:
diff changeset
   940
                // -> shutdown immediatelly.
hgs
parents:
diff changeset
   941
                aShutDown = ETrue;  
hgs
parents:
diff changeset
   942
                return;
hgs
parents:
diff changeset
   943
                }
hgs
parents:
diff changeset
   944
            default:
hgs
parents:
diff changeset
   945
                {
hgs
parents:
diff changeset
   946
                // e.g leave in startup 
hgs
parents:
diff changeset
   947
                break;
hgs
parents:
diff changeset
   948
                }
hgs
parents:
diff changeset
   949
            }
hgs
parents:
diff changeset
   950
        }
hgs
parents:
diff changeset
   951
        
hgs
parents:
diff changeset
   952
    if ( errRes == R_UNIEDITOR_ERROR_CANNOT_OPEN ||
hgs
parents:
diff changeset
   953
         errRes == R_UNIEDITOR_ERROR_RMODE_CANNOT_OPEN )
hgs
parents:
diff changeset
   954
        {
hgs
parents:
diff changeset
   955
        // Message cannot be opened.
hgs
parents:
diff changeset
   956
        ShowConfirmableInfoL( errRes );
hgs
parents:
diff changeset
   957
        
hgs
parents:
diff changeset
   958
        aShutDown = ETrue;
hgs
parents:
diff changeset
   959
        return;
hgs
parents:
diff changeset
   960
        }   
hgs
parents:
diff changeset
   961
    else if ( errRes == R_UNIEDITOR_INFO_OBJECT_TOO_BIG ||
hgs
parents:
diff changeset
   962
              errRes == R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECT ||
hgs
parents:
diff changeset
   963
              errRes == R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECTS ||
hgs
parents:
diff changeset
   964
              errRes == R_UNIEDITOR_INFO_UNSUPPORTED_OBJECT ||
hgs
parents:
diff changeset
   965
              errRes == R_UNIEDITOR_INFO_UNSUPPORTED_OBJECTS )
hgs
parents:
diff changeset
   966
        {
hgs
parents:
diff changeset
   967
        ShowInformationNoteL( errRes, ETrue );
hgs
parents:
diff changeset
   968
        
hgs
parents:
diff changeset
   969
        aShutDown = ETrue;
hgs
parents:
diff changeset
   970
        return;
hgs
parents:
diff changeset
   971
        }
hgs
parents:
diff changeset
   972
    else if ( errRes == R_UNIEDITOR_INFO_OBJECT_SEND_AS_TOO_BIG || 
hgs
parents:
diff changeset
   973
              errRes == R_UNIEDITOR_INFO_RMODE_SOME_NOT_SUPPORTED ||
hgs
parents:
diff changeset
   974
              errRes == R_UNIEDITOR_INFO_SOME_NOT_SUPPORTED )
hgs
parents:
diff changeset
   975
        {
hgs
parents:
diff changeset
   976
        ShowInformationNoteL( errRes, ETrue );
hgs
parents:
diff changeset
   977
        }
hgs
parents:
diff changeset
   978
    else if ( errRes == R_UNIEDITOR_INFO_MAX_SLIDES_SOME )
hgs
parents:
diff changeset
   979
        {
hgs
parents:
diff changeset
   980
        ShowConfirmableInfoL( errRes );
hgs
parents:
diff changeset
   981
        }
hgs
parents:
diff changeset
   982
    
hgs
parents:
diff changeset
   983
    if ( errRes == R_UNIEDITOR_QUEST_GUIDED_PRESENTATION )
hgs
parents:
diff changeset
   984
        {
hgs
parents:
diff changeset
   985
        if ( !ShowGuidedModeConfirmationQueryL( errRes ) ) 
hgs
parents:
diff changeset
   986
            {
hgs
parents:
diff changeset
   987
            aShutDown = ETrue;
hgs
parents:
diff changeset
   988
            }
hgs
parents:
diff changeset
   989
        }
hgs
parents:
diff changeset
   990
    else
hgs
parents:
diff changeset
   991
        {
hgs
parents:
diff changeset
   992
        if ( Document()->CreationMode() != EMmsCreationModeFree )
hgs
parents:
diff changeset
   993
            {
hgs
parents:
diff changeset
   994
            TInt nonConformantObjects = iLaunchOperation->ParseResult();
hgs
parents:
diff changeset
   995
            
hgs
parents:
diff changeset
   996
            if ( nonConformantObjects > 0 )
hgs
parents:
diff changeset
   997
                {
hgs
parents:
diff changeset
   998
                if ( Document()->CreationMode() == EMmsCreationModeRestricted )
hgs
parents:
diff changeset
   999
                    {
hgs
parents:
diff changeset
  1000
                    if ( Document()->CreationModeUserChangeable() )
hgs
parents:
diff changeset
  1001
                        {
hgs
parents:
diff changeset
  1002
                        ShowConfirmableInfoL( R_UNIEDITOR_ERROR_RMODE_CANNOT_OPEN );
hgs
parents:
diff changeset
  1003
                        }
hgs
parents:
diff changeset
  1004
                    else
hgs
parents:
diff changeset
  1005
                        {
hgs
parents:
diff changeset
  1006
                        ShowConfirmableInfoL( R_UNIEDITOR_ERROR_CANNOT_OPEN );
hgs
parents:
diff changeset
  1007
                        }
hgs
parents:
diff changeset
  1008
                        
hgs
parents:
diff changeset
  1009
                    aShutDown = ETrue;
hgs
parents:
diff changeset
  1010
                    return;
hgs
parents:
diff changeset
  1011
                    }
hgs
parents:
diff changeset
  1012
                else if ( Document()->SuperDistributableObjectCount() == 0 ||  
hgs
parents:
diff changeset
  1013
                          Document()->MessageType() != EUniSendUi )
hgs
parents:
diff changeset
  1014
                    {
hgs
parents:
diff changeset
  1015
                    // Not shown if DRM note has been shown already by SendUi.
hgs
parents:
diff changeset
  1016
                    TInt confRes( KErrNotFound );
hgs
parents:
diff changeset
  1017
                    
hgs
parents:
diff changeset
  1018
                    if ( Document()->Saved() )
hgs
parents:
diff changeset
  1019
                        {
hgs
parents:
diff changeset
  1020
                        confRes = R_UNIEDITOR_QUEST_GUIDED_INC_OBJ;
hgs
parents:
diff changeset
  1021
                        if ( nonConformantObjects > 1 )
hgs
parents:
diff changeset
  1022
                            {
hgs
parents:
diff changeset
  1023
                            confRes = R_UNIEDITOR_QUEST_GUIDED_INC_OBJS;
hgs
parents:
diff changeset
  1024
                            }
hgs
parents:
diff changeset
  1025
                        }
hgs
parents:
diff changeset
  1026
                    else
hgs
parents:
diff changeset
  1027
                        {
hgs
parents:
diff changeset
  1028
                        confRes = R_UNIEDITOR_QUEST_GUIDED_OBJ;
hgs
parents:
diff changeset
  1029
                        if ( nonConformantObjects > 1 )
hgs
parents:
diff changeset
  1030
                            {
hgs
parents:
diff changeset
  1031
                            confRes = R_UNIEDITOR_QUEST_GUIDED_OBJS;
hgs
parents:
diff changeset
  1032
                            }
hgs
parents:
diff changeset
  1033
                        }
hgs
parents:
diff changeset
  1034
                    
hgs
parents:
diff changeset
  1035
                    if ( !ShowGuidedModeConfirmationQueryL( confRes ) ) 
hgs
parents:
diff changeset
  1036
                        {
hgs
parents:
diff changeset
  1037
                        // Query not accepted
hgs
parents:
diff changeset
  1038
                        aShutDown = ETrue;
hgs
parents:
diff changeset
  1039
                        return;
hgs
parents:
diff changeset
  1040
                        }
hgs
parents:
diff changeset
  1041
                    }
hgs
parents:
diff changeset
  1042
                }
hgs
parents:
diff changeset
  1043
            }
hgs
parents:
diff changeset
  1044
        }
hgs
parents:
diff changeset
  1045
        
hgs
parents:
diff changeset
  1046
    if ( errRes == R_UNIEDITOR_INFO_RMODE_SCALING_FAILED ||
hgs
parents:
diff changeset
  1047
         errRes == R_UNIEDITOR_INFO_SCALING_FAILED )
hgs
parents:
diff changeset
  1048
        {
hgs
parents:
diff changeset
  1049
        ShowInformationNoteL( errRes, ETrue );
hgs
parents:
diff changeset
  1050
        }
hgs
parents:
diff changeset
  1051
    }
hgs
parents:
diff changeset
  1052
hgs
parents:
diff changeset
  1053
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1054
// CUniEditorAppUi::InsertPresentation
hgs
parents:
diff changeset
  1055
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1056
//
hgs
parents:
diff changeset
  1057
void CUniEditorAppUi::InsertPresentationL( TBool aEditable )
hgs
parents:
diff changeset
  1058
    {
hgs
parents:
diff changeset
  1059
    if ( Document()->DataModel()->SmilType() != EMmsSmil )
hgs
parents:
diff changeset
  1060
        {
hgs
parents:
diff changeset
  1061
        //Delete body control. OK if dooesn't exist.
hgs
parents:
diff changeset
  1062
        iView->DeleteControlL( EMsgComponentIdBody );
hgs
parents:
diff changeset
  1063
        
hgs
parents:
diff changeset
  1064
        CMsgImageControl* imgCtrl = CMsgImageControl::NewL( *iView,
hgs
parents:
diff changeset
  1065
                                                            this );
hgs
parents:
diff changeset
  1066
        CleanupStack::PushL( imgCtrl );
hgs
parents:
diff changeset
  1067
        
hgs
parents:
diff changeset
  1068
        TAknsItemID id = KAknsIIDQgnGrafMmsUnedit;
hgs
parents:
diff changeset
  1069
        TInt icon = EMbmUniutilsQgn_graf_mms_unedit;
hgs
parents:
diff changeset
  1070
        TInt mask = EMbmUniutilsQgn_graf_mms_unedit_mask;
hgs
parents:
diff changeset
  1071
hgs
parents:
diff changeset
  1072
        if ( aEditable )
hgs
parents:
diff changeset
  1073
            {
hgs
parents:
diff changeset
  1074
            id.Set( KAknsIIDQgnGrafMmsEdit );
hgs
parents:
diff changeset
  1075
            icon = EMbmUniutilsQgn_graf_mms_edit;
hgs
parents:
diff changeset
  1076
            mask = EMbmUniutilsQgn_graf_mms_edit_mask;
hgs
parents:
diff changeset
  1077
            }
hgs
parents:
diff changeset
  1078
hgs
parents:
diff changeset
  1079
        TParse fileParse;
hgs
parents:
diff changeset
  1080
        fileParse.Set( KUniUtilsMBMFileName, &KDC_APP_BITMAP_DIR, NULL );
hgs
parents:
diff changeset
  1081
        imgCtrl->LoadIconL( fileParse.FullName(), id, icon, mask );
hgs
parents:
diff changeset
  1082
        
hgs
parents:
diff changeset
  1083
        TAknLayoutRect iconLayout;
hgs
parents:
diff changeset
  1084
        iconLayout.LayoutRect( MsgEditorCommons::MsgDataPane(),
hgs
parents:
diff changeset
  1085
                               AknLayoutScalable_Apps::msg_data_pane_g4().LayoutLine() );
hgs
parents:
diff changeset
  1086
        
hgs
parents:
diff changeset
  1087
        imgCtrl->SetIconSizeL( iconLayout.Rect().Size() );
hgs
parents:
diff changeset
  1088
        
hgs
parents:
diff changeset
  1089
        //Draw it
hgs
parents:
diff changeset
  1090
        imgCtrl->SetIconVisible( ETrue );
hgs
parents:
diff changeset
  1091
        iView->AddControlL( imgCtrl, EMsgComponentIdImage, EMsgFirstControl, EMsgBody );
hgs
parents:
diff changeset
  1092
hgs
parents:
diff changeset
  1093
        CleanupStack::Pop( imgCtrl );
hgs
parents:
diff changeset
  1094
        }
hgs
parents:
diff changeset
  1095
    else
hgs
parents:
diff changeset
  1096
        {
hgs
parents:
diff changeset
  1097
        User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
  1098
        }
hgs
parents:
diff changeset
  1099
    }
hgs
parents:
diff changeset
  1100
hgs
parents:
diff changeset
  1101
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1102
// CUniEditorAppUi::MsgLengthToNavipaneL
hgs
parents:
diff changeset
  1103
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1104
//
hgs
parents:
diff changeset
  1105
void CUniEditorAppUi::MsgLengthToNavipaneL( TBool aForceDraw )
hgs
parents:
diff changeset
  1106
    {
hgs
parents:
diff changeset
  1107
    UNILOGGER_WRITE( "-> CUniEditorAppUi::MsgLengthToNavipaneL" );
hgs
parents:
diff changeset
  1108
    
hgs
parents:
diff changeset
  1109
    TBuf<KMsgLengthIndicationBuffer> sizeString;
hgs
parents:
diff changeset
  1110
hgs
parents:
diff changeset
  1111
    // If message is SMS type, iSmsBodyLength + iSmsSubjectLnegth will be used as length
hgs
parents:
diff changeset
  1112
    // If EUnicodeMode is set, they will be handled as unicode length
hgs
parents:
diff changeset
  1113
    if ( !( iEditorFlags & EHideSizeCounter ) )
hgs
parents:
diff changeset
  1114
        { 
hgs
parents:
diff changeset
  1115
        CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  1116
        
hgs
parents:
diff changeset
  1117
        // It's ok to show the counter
hgs
parents:
diff changeset
  1118
        if ( doc->UniState() == EUniSms )
hgs
parents:
diff changeset
  1119
            {
hgs
parents:
diff changeset
  1120
           
hgs
parents:
diff changeset
  1121
            CUniDataModel* model = doc->DataModel();           
hgs
parents:
diff changeset
  1122
                       
hgs
parents:
diff changeset
  1123
         
hgs
parents:
diff changeset
  1124
                TInt charsLeft,msgsParts;
hgs
parents:
diff changeset
  1125
                TInt lengthOne = 0;
hgs
parents:
diff changeset
  1126
                TInt lengthMany = 0;
hgs
parents:
diff changeset
  1127
                
hgs
parents:
diff changeset
  1128
                doc->SmsCharacterLimits( lengthOne, lengthMany );
hgs
parents:
diff changeset
  1129
                TInt maxSmsCharacters = doc->AbsoluteMaxSmsCharacters();
hgs
parents:
diff changeset
  1130
                TInt maxSmsParts = doc->AbsoluteMaxSmsParts();
hgs
parents:
diff changeset
  1131
                 
hgs
parents:
diff changeset
  1132
                if ( maxSmsCharacters <= 0 )
hgs
parents:
diff changeset
  1133
                    {
hgs
parents:
diff changeset
  1134
                    // No absolute maximum characters defined -> Calculate
hgs
parents:
diff changeset
  1135
                    // character maximum using maximum SMS part limit.
hgs
parents:
diff changeset
  1136
hgs
parents:
diff changeset
  1137
                    if( maxSmsParts > 1 )
hgs
parents:
diff changeset
  1138
                        {
hgs
parents:
diff changeset
  1139
                        maxSmsCharacters = maxSmsParts * lengthMany;
hgs
parents:
diff changeset
  1140
                        }
hgs
parents:
diff changeset
  1141
                    else
hgs
parents:
diff changeset
  1142
                        {
hgs
parents:
diff changeset
  1143
						// for korean variant
hgs
parents:
diff changeset
  1144
                        maxSmsCharacters = lengthOne;
hgs
parents:
diff changeset
  1145
                        }
hgs
parents:
diff changeset
  1146
hgs
parents:
diff changeset
  1147
                    }
hgs
parents:
diff changeset
  1148
                CalculateSMSMsgLen(charsLeft,msgsParts);
hgs
parents:
diff changeset
  1149
                if( model->ObjectList().Count() == 0 &&
hgs
parents:
diff changeset
  1150
                    model->AttachmentList().Count() == 1 &&
hgs
parents:
diff changeset
  1151
                    iSmilModel->SlideCount() == 1 &&
hgs
parents:
diff changeset
  1152
                    iSmsSubjectLength == 0)
hgs
parents:
diff changeset
  1153
                        {
hgs
parents:
diff changeset
  1154
                     
hgs
parents:
diff changeset
  1155
                         sizeString.AppendNum( msgsParts );                        
hgs
parents:
diff changeset
  1156
                        
hgs
parents:
diff changeset
  1157
                        }
hgs
parents:
diff changeset
  1158
                else if ( maxSmsCharacters <= lengthOne )
hgs
parents:
diff changeset
  1159
                    {
hgs
parents:
diff changeset
  1160
                    // Maximum less or equal to length of
hgs
parents:
diff changeset
  1161
                    // one part -> show only characters left value.
hgs
parents:
diff changeset
  1162
                    sizeString.AppendNum( charsLeft );
hgs
parents:
diff changeset
  1163
                    }
hgs
parents:
diff changeset
  1164
                else
hgs
parents:
diff changeset
  1165
                    {
hgs
parents:
diff changeset
  1166
                    HBufC* tempBuf = iSmsLengthFormatBuffer;
hgs
parents:
diff changeset
  1167
hgs
parents:
diff changeset
  1168
                    if ( AknLayoutUtils::LayoutMirrored() )
hgs
parents:
diff changeset
  1169
                        { 
hgs
parents:
diff changeset
  1170
                        // Add the RTL marker in the format buffer
hgs
parents:
diff changeset
  1171
                        tempBuf = iSmsLengthFormatBuffer->AllocL();
hgs
parents:
diff changeset
  1172
                        tempBuf = tempBuf->ReAllocL( tempBuf->Length() + 2 );
hgs
parents:
diff changeset
  1173
                        CleanupStack::PushL( tempBuf );
hgs
parents:
diff changeset
  1174
                        TPtr tempPtr = tempBuf->Des();
hgs
parents:
diff changeset
  1175
                        TChar KUniRLMUnicode( 0x200F ); // Right to Left Marker
hgs
parents:
diff changeset
  1176
                        TBuf<1> charBuf;
hgs
parents:
diff changeset
  1177
                        charBuf.Append(KUniRLMUnicode);
hgs
parents:
diff changeset
  1178
                        tempPtr.Insert( 4, charBuf );
hgs
parents:
diff changeset
  1179
                        tempPtr.Insert( 9, charBuf );
hgs
parents:
diff changeset
  1180
                        }
hgs
parents:
diff changeset
  1181
hgs
parents:
diff changeset
  1182
                    StringLoader::Format( sizeString, tempBuf->Des(), 0, charsLeft );
hgs
parents:
diff changeset
  1183
hgs
parents:
diff changeset
  1184
                    if( tempBuf != iSmsLengthFormatBuffer )
hgs
parents:
diff changeset
  1185
                        {
hgs
parents:
diff changeset
  1186
                        CleanupStack::PopAndDestroy( tempBuf );
hgs
parents:
diff changeset
  1187
                        }
hgs
parents:
diff changeset
  1188
                        
hgs
parents:
diff changeset
  1189
                    HBufC* temp = sizeString.AllocLC();
hgs
parents:
diff changeset
  1190
                    
hgs
parents:
diff changeset
  1191
                    StringLoader::Format( sizeString, *temp, 1, msgsParts );
hgs
parents:
diff changeset
  1192
hgs
parents:
diff changeset
  1193
                    CleanupStack::PopAndDestroy( temp );
hgs
parents:
diff changeset
  1194
                    }
hgs
parents:
diff changeset
  1195
                iEditorFlags |= ESmsCounterShownLast;
hgs
parents:
diff changeset
  1196
                
hgs
parents:
diff changeset
  1197
                // Now the string is in buf     
hgs
parents:
diff changeset
  1198
                
hgs
parents:
diff changeset
  1199
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  1200
                if ( ( AknLayoutUtils::PenEnabled() && iPrevSmsLength != charsLeft ) || ( AknLayoutUtils::PenEnabled() &&  aForceDraw ))
hgs
parents:
diff changeset
  1201
                    {
hgs
parents:
diff changeset
  1202
                    if(!(iPrevSmsLength == -1 && !UpdateMsgLenToPenInput() ) ) // converted from MMS back to SMS
hgs
parents:
diff changeset
  1203
                        {                     
hgs
parents:
diff changeset
  1204
	                    iPrevSmsLength = charsLeft;
hgs
parents:
diff changeset
  1205
	                    iPeninputServer.UpdateAppInfo( sizeString, EAppIndicatorMsg );
hgs
parents:
diff changeset
  1206
                        }
hgs
parents:
diff changeset
  1207
                    }
hgs
parents:
diff changeset
  1208
#endif
hgs
parents:
diff changeset
  1209
               
hgs
parents:
diff changeset
  1210
            // Reset this so that MMS size is drawn when it's shown next time
hgs
parents:
diff changeset
  1211
            iDisplaySize = 0; 
hgs
parents:
diff changeset
  1212
            }
hgs
parents:
diff changeset
  1213
        else
hgs
parents:
diff changeset
  1214
            { 
hgs
parents:
diff changeset
  1215
            // OK we are dealing with MMS now
hgs
parents:
diff changeset
  1216
            // Just take the size of the whole message and show it in the navipane
hgs
parents:
diff changeset
  1217
            TInt bytes = MessageSizeInBytes();   
hgs
parents:
diff changeset
  1218
hgs
parents:
diff changeset
  1219
            TInt integer = iDisplaySize / 10;
hgs
parents:
diff changeset
  1220
            TInt fragment = iDisplaySize % 10;
hgs
parents:
diff changeset
  1221
hgs
parents:
diff changeset
  1222
            CreateMmsNaviSizeStringL(      bytes,      sizeString,
hgs
parents:
diff changeset
  1223
                                        integer,    fragment );
hgs
parents:
diff changeset
  1224
hgs
parents:
diff changeset
  1225
            TInt tempDispSize = integer * 10 + fragment;
hgs
parents:
diff changeset
  1226
hgs
parents:
diff changeset
  1227
            if ( !aForceDraw && iDisplaySize == tempDispSize && !( iEditorFlags & ESmsCounterShownLast ) )
hgs
parents:
diff changeset
  1228
                {
hgs
parents:
diff changeset
  1229
                // No changes to navipane
hgs
parents:
diff changeset
  1230
                return;
hgs
parents:
diff changeset
  1231
                }
hgs
parents:
diff changeset
  1232
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  1233
            if (  AknLayoutUtils::PenEnabled() && (iEditorFlags & ESmsCounterShownLast ))
hgs
parents:
diff changeset
  1234
                {
hgs
parents:
diff changeset
  1235
                     iPeninputServer.UpdateAppInfo( KNullDesC, EAppIndicatorMsg );
hgs
parents:
diff changeset
  1236
                     iPrevSmsLength = -1;
hgs
parents:
diff changeset
  1237
                }
hgs
parents:
diff changeset
  1238
#endif
hgs
parents:
diff changeset
  1239
hgs
parents:
diff changeset
  1240
            iEditorFlags &= ~ESmsCounterShownLast;
hgs
parents:
diff changeset
  1241
            iDisplaySize = tempDispSize;
hgs
parents:
diff changeset
  1242
        
hgs
parents:
diff changeset
  1243
            }
hgs
parents:
diff changeset
  1244
        }
hgs
parents:
diff changeset
  1245
hgs
parents:
diff changeset
  1246
    // Update both Edwin indicator pane and navi indicator pane
hgs
parents:
diff changeset
  1247
    MAknEditingStateIndicator* editIndi = iAvkonEnv->EditingStateIndicator();
hgs
parents:
diff changeset
  1248
    
hgs
parents:
diff changeset
  1249
    CAknIndicatorContainer* naviIndi = 
hgs
parents:
diff changeset
  1250
        static_cast<CAknIndicatorContainer*>( iNaviDecorator->DecoratedControl() );
hgs
parents:
diff changeset
  1251
    
hgs
parents:
diff changeset
  1252
    if( editIndi )
hgs
parents:
diff changeset
  1253
        {
hgs
parents:
diff changeset
  1254
        CAknIndicatorContainer* indiContainer = editIndi->IndicatorContainer();
hgs
parents:
diff changeset
  1255
        if ( indiContainer )
hgs
parents:
diff changeset
  1256
            {
hgs
parents:
diff changeset
  1257
            if( iEditorFlags & EHideSizeCounter )
hgs
parents:
diff changeset
  1258
                { 
hgs
parents:
diff changeset
  1259
                // Just hide it
hgs
parents:
diff changeset
  1260
                indiContainer->SetIndicatorState(TUid::Uid(EAknNaviPaneEditorIndicatorMessageLength), 
hgs
parents:
diff changeset
  1261
                        EAknIndicatorStateOff);
hgs
parents:
diff changeset
  1262
                }
hgs
parents:
diff changeset
  1263
            else
hgs
parents:
diff changeset
  1264
                {
hgs
parents:
diff changeset
  1265
                indiContainer->SetIndicatorValueL(TUid::Uid(EAknNaviPaneEditorIndicatorMessageLength), sizeString);
hgs
parents:
diff changeset
  1266
                indiContainer->SetIndicatorState(TUid::Uid(EAknNaviPaneEditorIndicatorMessageLength), 
hgs
parents:
diff changeset
  1267
                        EAknIndicatorStateOn);
hgs
parents:
diff changeset
  1268
                }            
hgs
parents:
diff changeset
  1269
            }
hgs
parents:
diff changeset
  1270
        }
hgs
parents:
diff changeset
  1271
        
hgs
parents:
diff changeset
  1272
    if( naviIndi )
hgs
parents:
diff changeset
  1273
        {
hgs
parents:
diff changeset
  1274
        if( iEditorFlags & EHideSizeCounter )
hgs
parents:
diff changeset
  1275
            { 
hgs
parents:
diff changeset
  1276
            // Just hide it
hgs
parents:
diff changeset
  1277
            naviIndi->SetIndicatorState(TUid::Uid(EAknNaviPaneEditorIndicatorMessageLength), 
hgs
parents:
diff changeset
  1278
                    EAknIndicatorStateOff);
hgs
parents:
diff changeset
  1279
            }
hgs
parents:
diff changeset
  1280
        else
hgs
parents:
diff changeset
  1281
            {
hgs
parents:
diff changeset
  1282
            naviIndi->SetIndicatorValueL(TUid::Uid(EAknNaviPaneEditorIndicatorMessageLength), sizeString);
hgs
parents:
diff changeset
  1283
            naviIndi->SetIndicatorState(TUid::Uid(EAknNaviPaneEditorIndicatorMessageLength), 
hgs
parents:
diff changeset
  1284
                        EAknIndicatorStateOn);
hgs
parents:
diff changeset
  1285
            }
hgs
parents:
diff changeset
  1286
        }
hgs
parents:
diff changeset
  1287
    
hgs
parents:
diff changeset
  1288
    UNILOGGER_WRITE( "<- CUniEditorAppUi::MsgLengthToNavipaneL" );
hgs
parents:
diff changeset
  1289
    }
hgs
parents:
diff changeset
  1290
hgs
parents:
diff changeset
  1291
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1292
// CUniEditorAppUi::CalculateSMSMsgLen
hgs
parents:
diff changeset
  1293
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1294
//
hgs
parents:
diff changeset
  1295
void CUniEditorAppUi::CalculateSMSMsgLen(TInt& charsLeft, TInt& msgsParts)
hgs
parents:
diff changeset
  1296
    {
hgs
parents:
diff changeset
  1297
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  1298
    if ( doc->UniState() == EUniSms ) 
hgs
parents:
diff changeset
  1299
        {
hgs
parents:
diff changeset
  1300
        CUniDataModel* model = doc->DataModel();
hgs
parents:
diff changeset
  1301
        TInt lengthOne = 0;
hgs
parents:
diff changeset
  1302
        TInt lengthMany = 0;
hgs
parents:
diff changeset
  1303
        
hgs
parents:
diff changeset
  1304
        doc->SmsCharacterLimits( lengthOne, lengthMany );
hgs
parents:
diff changeset
  1305
        
hgs
parents:
diff changeset
  1306
        TInt totalLen = iSmsBodyLength + iSmsSubjectLength;
hgs
parents:
diff changeset
  1307
hgs
parents:
diff changeset
  1308
        if ( doc->EmailOverSmsSupported()  )
hgs
parents:
diff changeset
  1309
            { 
hgs
parents:
diff changeset
  1310
            // Email over Sms so get the longest email address from To field
hgs
parents:
diff changeset
  1311
            TInt emailLen = iHeader->LongestEmailAddress();
hgs
parents:
diff changeset
  1312
            if ( emailLen > 0 )
hgs
parents:
diff changeset
  1313
                { 
hgs
parents:
diff changeset
  1314
                // increase by one so that the separator sign is included too
hgs
parents:
diff changeset
  1315
                emailLen++;
hgs
parents:
diff changeset
  1316
                }
hgs
parents:
diff changeset
  1317
                
hgs
parents:
diff changeset
  1318
            totalLen += emailLen;
hgs
parents:
diff changeset
  1319
            }
hgs
parents:
diff changeset
  1320
        
hgs
parents:
diff changeset
  1321
        TInt maxSmsCharacters = doc->AbsoluteMaxSmsCharacters();
hgs
parents:
diff changeset
  1322
        TInt maxSmsParts = doc->AbsoluteMaxSmsParts();
hgs
parents:
diff changeset
  1323
        
hgs
parents:
diff changeset
  1324
        if ( maxSmsCharacters <= 0 )
hgs
parents:
diff changeset
  1325
            {                    
hgs
parents:
diff changeset
  1326
             // maxSmsCharacters is set to minimum lengthOne.            
hgs
parents:
diff changeset
  1327
             if( maxSmsParts > 1 )
hgs
parents:
diff changeset
  1328
             	{
hgs
parents:
diff changeset
  1329
                maxSmsCharacters = maxSmsParts * lengthMany;
hgs
parents:
diff changeset
  1330
                }
hgs
parents:
diff changeset
  1331
             else
hgs
parents:
diff changeset
  1332
                {
hgs
parents:
diff changeset
  1333
                maxSmsCharacters = lengthOne;
hgs
parents:
diff changeset
  1334
                }
hgs
parents:
diff changeset
  1335
            }
hgs
parents:
diff changeset
  1336
            
hgs
parents:
diff changeset
  1337
        TInt thisPartChars = 0;
hgs
parents:
diff changeset
  1338
        TInt maxThisPartChars = 0;
hgs
parents:
diff changeset
  1339
   
hgs
parents:
diff changeset
  1340
        if( iNLTFeatureSupport )
hgs
parents:
diff changeset
  1341
            {
hgs
parents:
diff changeset
  1342
            //Turkish SMS-PREQ2265 specific
hgs
parents:
diff changeset
  1343
            msgsParts = iNumOfPDUs;
hgs
parents:
diff changeset
  1344
            maxThisPartChars = iCharsLeft;
hgs
parents:
diff changeset
  1345
            thisPartChars = totalLen;
hgs
parents:
diff changeset
  1346
hgs
parents:
diff changeset
  1347
            if(msgsParts > 1)
hgs
parents:
diff changeset
  1348
                {
hgs
parents:
diff changeset
  1349
                // More characters than one SMS segment.                    
hgs
parents:
diff changeset
  1350
                // Calculate characters that are located on this part.
hgs
parents:
diff changeset
  1351
                thisPartChars = lengthMany - maxThisPartChars;
hgs
parents:
diff changeset
  1352
                }                
hgs
parents:
diff changeset
  1353
            }
hgs
parents:
diff changeset
  1354
        else
hgs
parents:
diff changeset
  1355
            {
hgs
parents:
diff changeset
  1356
            if ( totalLen <= lengthOne )
hgs
parents:
diff changeset
  1357
                {
hgs
parents:
diff changeset
  1358
                // Less or equal characters than one SMS segment.
hgs
parents:
diff changeset
  1359
                
hgs
parents:
diff changeset
  1360
                // All the characters are located in this part
hgs
parents:
diff changeset
  1361
                thisPartChars = totalLen;
hgs
parents:
diff changeset
  1362
                
hgs
parents:
diff changeset
  1363
                maxThisPartChars = lengthOne - thisPartChars;
hgs
parents:
diff changeset
  1364
                msgsParts = 1;
hgs
parents:
diff changeset
  1365
                }
hgs
parents:
diff changeset
  1366
            else
hgs
parents:
diff changeset
  1367
                {
hgs
parents:
diff changeset
  1368
                // More characters than one SMS segment.
hgs
parents:
diff changeset
  1369
                
hgs
parents:
diff changeset
  1370
                // Calculate characters that are located on
hgs
parents:
diff changeset
  1371
                // this part.
hgs
parents:
diff changeset
  1372
                thisPartChars = totalLen % lengthMany;
hgs
parents:
diff changeset
  1373
                
hgs
parents:
diff changeset
  1374
                if ( thisPartChars == 0 )
hgs
parents:
diff changeset
  1375
                    {
hgs
parents:
diff changeset
  1376
                    // Last part has maximum characters.
hgs
parents:
diff changeset
  1377
                    thisPartChars = lengthMany;
hgs
parents:
diff changeset
  1378
                    }
hgs
parents:
diff changeset
  1379
                    
hgs
parents:
diff changeset
  1380
                maxThisPartChars = lengthMany - thisPartChars;
hgs
parents:
diff changeset
  1381
                
hgs
parents:
diff changeset
  1382
                msgsParts = totalLen / lengthMany;
hgs
parents:
diff changeset
  1383
                if ( thisPartChars != lengthMany )
hgs
parents:
diff changeset
  1384
                    { 
hgs
parents:
diff changeset
  1385
                    // Chars in this part so lets add one part.
hgs
parents:
diff changeset
  1386
                    msgsParts++;
hgs
parents:
diff changeset
  1387
                    }
hgs
parents:
diff changeset
  1388
                }                
hgs
parents:
diff changeset
  1389
            }
hgs
parents:
diff changeset
  1390
             
hgs
parents:
diff changeset
  1391
        if ( totalLen <= maxSmsCharacters )
hgs
parents:
diff changeset
  1392
            { 
hgs
parents:
diff changeset
  1393
            // Calculate the characters left in this part.
hgs
parents:
diff changeset
  1394
            charsLeft = maxSmsCharacters -  ( msgsParts - 1 ) * lengthMany - thisPartChars;
hgs
parents:
diff changeset
  1395
            // Bound check.
hgs
parents:
diff changeset
  1396
            charsLeft = Min( charsLeft, maxThisPartChars );
hgs
parents:
diff changeset
  1397
            }
hgs
parents:
diff changeset
  1398
        else
hgs
parents:
diff changeset
  1399
            { 
hgs
parents:
diff changeset
  1400
            // More than max -> show -xx(yy)
hgs
parents:
diff changeset
  1401
            charsLeft = maxSmsCharacters - totalLen;
hgs
parents:
diff changeset
  1402
            }
hgs
parents:
diff changeset
  1403
        if( model->ObjectList().Count() == 0 &&
hgs
parents:
diff changeset
  1404
            model->AttachmentList().Count() == 1 &&
hgs
parents:
diff changeset
  1405
            iSmilModel->SlideCount() == 1 &&
hgs
parents:
diff changeset
  1406
            iSmsSubjectLength == 0)
hgs
parents:
diff changeset
  1407
            {                     
hgs
parents:
diff changeset
  1408
            charsLeft =  msgsParts;                        
hgs
parents:
diff changeset
  1409
            }      
hgs
parents:
diff changeset
  1410
        }
hgs
parents:
diff changeset
  1411
    }
hgs
parents:
diff changeset
  1412
    
hgs
parents:
diff changeset
  1413
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1414
// CUniEditorAppUi::ProcessCommandL
hgs
parents:
diff changeset
  1415
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1416
//
hgs
parents:
diff changeset
  1417
void CUniEditorAppUi::ProcessCommandL(TInt aCommand)
hgs
parents:
diff changeset
  1418
    {
hgs
parents:
diff changeset
  1419
    switch(aCommand)
hgs
parents:
diff changeset
  1420
        {
hgs
parents:
diff changeset
  1421
        case EAknCmdExit:
hgs
parents:
diff changeset
  1422
            {
hgs
parents:
diff changeset
  1423
            /*
hgs
parents:
diff changeset
  1424
            Exit command is handle handled here since handling the same in HandleCommandL is too late for
hgs
parents:
diff changeset
  1425
            themes effect to shown when application is exiting while progress note is shown.
hgs
parents:
diff changeset
  1426
            BeginFullScreen is called after ProcessCommandL and before HandleCommandL,  progress note is 
hgs
parents:
diff changeset
  1427
            shown in ProcessCommandL ie before BeginFullScreen is made.  
hgs
parents:
diff changeset
  1428
            */
hgs
parents:
diff changeset
  1429
            
hgs
parents:
diff changeset
  1430
            //Only after processing the command, option menu is removed
hgs
parents:
diff changeset
  1431
            //ProcessCommandL is called with some false command id which is unique and not used in any other place
hgs
parents:
diff changeset
  1432
            const TInt KRandomCommand(8975462);
hgs
parents:
diff changeset
  1433
            CAknAppUi::ProcessCommandL( KRandomCommand );
hgs
parents:
diff changeset
  1434
            
hgs
parents:
diff changeset
  1435
            // Run the app shutter instead of exiting stright way
hgs
parents:
diff changeset
  1436
            iEditorFlags |= ERunAppShutterAtExit;
hgs
parents:
diff changeset
  1437
            
hgs
parents:
diff changeset
  1438
            RemoveWaitNote();
hgs
parents:
diff changeset
  1439
            ExitAndSaveL();
hgs
parents:
diff changeset
  1440
            break;
hgs
parents:
diff changeset
  1441
            }
hgs
parents:
diff changeset
  1442
        default:
hgs
parents:
diff changeset
  1443
            break;
hgs
parents:
diff changeset
  1444
        }
hgs
parents:
diff changeset
  1445
    
hgs
parents:
diff changeset
  1446
    CAknAppUi::ProcessCommandL( aCommand );
hgs
parents:
diff changeset
  1447
    
hgs
parents:
diff changeset
  1448
    }
hgs
parents:
diff changeset
  1449
hgs
parents:
diff changeset
  1450
hgs
parents:
diff changeset
  1451
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1452
// CUniEditorAppUi::HandleCommandL
hgs
parents:
diff changeset
  1453
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1454
//
hgs
parents:
diff changeset
  1455
void CUniEditorAppUi::HandleCommandL( TInt aCommand )
hgs
parents:
diff changeset
  1456
    {
hgs
parents:
diff changeset
  1457
    if ( iFixedToolbar )
hgs
parents:
diff changeset
  1458
        {
hgs
parents:
diff changeset
  1459
        SetFixedToolbarDimmed();
hgs
parents:
diff changeset
  1460
        }
hgs
parents:
diff changeset
  1461
     if ( !IsLaunched() || ( iEditorFlags & ( EEditorClosing | EEditorExiting ) ) )
hgs
parents:
diff changeset
  1462
        {
hgs
parents:
diff changeset
  1463
        if ( aCommand == EEikCmdExit )
hgs
parents:
diff changeset
  1464
            {           
hgs
parents:
diff changeset
  1465
            TRAPD( error, DoHandleCommandL( EEikCmdExit ) );
hgs
parents:
diff changeset
  1466
            User::LeaveIfError(error);                     
hgs
parents:
diff changeset
  1467
            }
hgs
parents:
diff changeset
  1468
        }   
hgs
parents:
diff changeset
  1469
     else
hgs
parents:
diff changeset
  1470
        {                
hgs
parents:
diff changeset
  1471
        TRAPD( error, DoHandleCommandL( aCommand ) );
hgs
parents:
diff changeset
  1472
        
hgs
parents:
diff changeset
  1473
        if ( iFixedToolbar )
hgs
parents:
diff changeset
  1474
            {
hgs
parents:
diff changeset
  1475
            UpdateToolbarL();
hgs
parents:
diff changeset
  1476
            }
hgs
parents:
diff changeset
  1477
        
hgs
parents:
diff changeset
  1478
        User::LeaveIfError( error );
hgs
parents:
diff changeset
  1479
        }
hgs
parents:
diff changeset
  1480
    }
hgs
parents:
diff changeset
  1481
hgs
parents:
diff changeset
  1482
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1483
// CUniEditorAppUi::DoHandleCommandL
hgs
parents:
diff changeset
  1484
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1485
//
hgs
parents:
diff changeset
  1486
void CUniEditorAppUi::DoHandleCommandL( TInt aCommand )
hgs
parents:
diff changeset
  1487
    {
hgs
parents:
diff changeset
  1488
    if ( !IsLaunched() || ( iEditorFlags & ( EEditorClosing | EEditorExiting | EMsgEditInProgress ) ) )
hgs
parents:
diff changeset
  1489
        {
hgs
parents:
diff changeset
  1490
        if ( aCommand != EEikCmdExit )
hgs
parents:
diff changeset
  1491
            {
hgs
parents:
diff changeset
  1492
            // Do not handle other than exit command if application has not
hgs
parents:
diff changeset
  1493
            // finished launching.
hgs
parents:
diff changeset
  1494
            return;
hgs
parents:
diff changeset
  1495
            }
hgs
parents:
diff changeset
  1496
        }
hgs
parents:
diff changeset
  1497
hgs
parents:
diff changeset
  1498
    switch (aCommand)
hgs
parents:
diff changeset
  1499
        {
hgs
parents:
diff changeset
  1500
        // Main options menu commands
hgs
parents:
diff changeset
  1501
        case EUniCmdViewImage:
hgs
parents:
diff changeset
  1502
        case EUniCmdPlayAudio:
hgs
parents:
diff changeset
  1503
        case EUniCmdPlayVideo:
hgs
parents:
diff changeset
  1504
        case EUniCmdPlaySvg:
hgs
parents:
diff changeset
  1505
        case EUniCmdPlayPres:
hgs
parents:
diff changeset
  1506
            {
hgs
parents:
diff changeset
  1507
            PlayFocusedItemL();
hgs
parents:
diff changeset
  1508
            break;
hgs
parents:
diff changeset
  1509
            }
hgs
parents:
diff changeset
  1510
        case EUniCmdRemovePres:
hgs
parents:
diff changeset
  1511
            {
hgs
parents:
diff changeset
  1512
            RemoveTemplateL();
hgs
parents:
diff changeset
  1513
            break;
hgs
parents:
diff changeset
  1514
            }
hgs
parents:
diff changeset
  1515
        case EUniCmdSendSMS:
hgs
parents:
diff changeset
  1516
        case EUniCmdSendMMS:
hgs
parents:
diff changeset
  1517
            {
hgs
parents:
diff changeset
  1518
            if ( iHeader->HasRecipients() > 0 )
hgs
parents:
diff changeset
  1519
                {
hgs
parents:
diff changeset
  1520
                // has addresses -> Send
hgs
parents:
diff changeset
  1521
                DoUserSendL();
hgs
parents:
diff changeset
  1522
                }
hgs
parents:
diff changeset
  1523
            else
hgs
parents:
diff changeset
  1524
                {
hgs
parents:
diff changeset
  1525
                DoUserAddRecipientL();
hgs
parents:
diff changeset
  1526
                }
hgs
parents:
diff changeset
  1527
            break;
hgs
parents:
diff changeset
  1528
            }
hgs
parents:
diff changeset
  1529
        case EUniCmdAddRecipient:
hgs
parents:
diff changeset
  1530
            {
hgs
parents:
diff changeset
  1531
            DoUserAddRecipientL();
hgs
parents:
diff changeset
  1532
            break;
hgs
parents:
diff changeset
  1533
            }
hgs
parents:
diff changeset
  1534
        case EUniCmdAddRecipientMSK:
hgs
parents:
diff changeset
  1535
            {
hgs
parents:
diff changeset
  1536
            // Call this function so that check name functionality is called first
hgs
parents:
diff changeset
  1537
            DoSelectionKeyL();
hgs
parents:
diff changeset
  1538
            break;
hgs
parents:
diff changeset
  1539
            }
hgs
parents:
diff changeset
  1540
        case EUniCmdInsertMedia:
hgs
parents:
diff changeset
  1541
            {
hgs
parents:
diff changeset
  1542
            DoUserInsertMediaL();
hgs
parents:
diff changeset
  1543
            break;
hgs
parents:
diff changeset
  1544
            }
hgs
parents:
diff changeset
  1545
        case EUniCmdInsertTemplateText:
hgs
parents:
diff changeset
  1546
            {
hgs
parents:
diff changeset
  1547
            DoUserInsertTextL( ETemplateText );
hgs
parents:
diff changeset
  1548
            break;
hgs
parents:
diff changeset
  1549
            }
hgs
parents:
diff changeset
  1550
        case EUniCmdInsertNote:
hgs
parents:
diff changeset
  1551
            {
hgs
parents:
diff changeset
  1552
            DoUserInsertTextL( EMemoText );
hgs
parents:
diff changeset
  1553
            break;
hgs
parents:
diff changeset
  1554
            }
hgs
parents:
diff changeset
  1555
        case EUniCmdPlaceTextFirst:
hgs
parents:
diff changeset
  1556
            {
hgs
parents:
diff changeset
  1557
            DoUserChangeOrderL( EUniTextFirst );
hgs
parents:
diff changeset
  1558
            break;
hgs
parents:
diff changeset
  1559
            }
hgs
parents:
diff changeset
  1560
        case EUniCmdPlaceTextSecond:
hgs
parents:
diff changeset
  1561
            {
hgs
parents:
diff changeset
  1562
            DoUserChangeOrderL( EUniImageFirst );
hgs
parents:
diff changeset
  1563
            break;
hgs
parents:
diff changeset
  1564
            }
hgs
parents:
diff changeset
  1565
        case EUniCmdMovePage:
hgs
parents:
diff changeset
  1566
            {
hgs
parents:
diff changeset
  1567
            DoUserMoveOrSelectPageL( ETrue );
hgs
parents:
diff changeset
  1568
            break;
hgs
parents:
diff changeset
  1569
            }
hgs
parents:
diff changeset
  1570
        case EUniCmdSelectPage:
hgs
parents:
diff changeset
  1571
            {
hgs
parents:
diff changeset
  1572
            DoUserMoveOrSelectPageL( EFalse );
hgs
parents:
diff changeset
  1573
            break;
hgs
parents:
diff changeset
  1574
            }
hgs
parents:
diff changeset
  1575
        case EUniCmdAddHeaders:
hgs
parents:
diff changeset
  1576
            {
hgs
parents:
diff changeset
  1577
            DoUserAddHeadersL();
hgs
parents:
diff changeset
  1578
            break;
hgs
parents:
diff changeset
  1579
            }
hgs
parents:
diff changeset
  1580
        case EUniCmdObjects:
hgs
parents:
diff changeset
  1581
            {
hgs
parents:
diff changeset
  1582
            DoUserObjectsViewL( EFalse );
hgs
parents:
diff changeset
  1583
            break;
hgs
parents:
diff changeset
  1584
            }
hgs
parents:
diff changeset
  1585
        case EUniCmdObjectsAttachment:
hgs
parents:
diff changeset
  1586
            {
hgs
parents:
diff changeset
  1587
            DoUserObjectsViewL( ETrue );
hgs
parents:
diff changeset
  1588
            break;
hgs
parents:
diff changeset
  1589
            }
hgs
parents:
diff changeset
  1590
        case EUniCmdSendingOptions:
hgs
parents:
diff changeset
  1591
            {
hgs
parents:
diff changeset
  1592
            DoUserSendingOptionsL();
hgs
parents:
diff changeset
  1593
            break;
hgs
parents:
diff changeset
  1594
            }
hgs
parents:
diff changeset
  1595
        case EUniCmdMessageInfo:
hgs
parents:
diff changeset
  1596
            {
hgs
parents:
diff changeset
  1597
            DoUserMessageInfoL();
hgs
parents:
diff changeset
  1598
            break;
hgs
parents:
diff changeset
  1599
            }
hgs
parents:
diff changeset
  1600
        case EUniCmdRemovePage:
hgs
parents:
diff changeset
  1601
            {
hgs
parents:
diff changeset
  1602
            DoUserRemoveSlideL();
hgs
parents:
diff changeset
  1603
            break;
hgs
parents:
diff changeset
  1604
            }
hgs
parents:
diff changeset
  1605
        case EUniCmdRemoveText:
hgs
parents:
diff changeset
  1606
            {
hgs
parents:
diff changeset
  1607
            RemoveCurrentTextObjectL();
hgs
parents:
diff changeset
  1608
            break;
hgs
parents:
diff changeset
  1609
            }
hgs
parents:
diff changeset
  1610
        case EUniCmdChangePriority:
hgs
parents:
diff changeset
  1611
            {
hgs
parents:
diff changeset
  1612
            DoEditMmsPriorityL();
hgs
parents:
diff changeset
  1613
            break;        
hgs
parents:
diff changeset
  1614
            }
hgs
parents:
diff changeset
  1615
        case EUniCmdRemoveImage:
hgs
parents:
diff changeset
  1616
            {
hgs
parents:
diff changeset
  1617
            DoUserRemoveMediaL( EMsgComponentIdImage, EUniRegionImage );
hgs
parents:
diff changeset
  1618
            break;
hgs
parents:
diff changeset
  1619
            }
hgs
parents:
diff changeset
  1620
        case EUniCmdRemoveAudio:
hgs
parents:
diff changeset
  1621
            {
hgs
parents:
diff changeset
  1622
            DoUserRemoveMediaL( EMsgComponentIdAudio, EUniRegionAudio );
hgs
parents:
diff changeset
  1623
            break;
hgs
parents:
diff changeset
  1624
            }
hgs
parents:
diff changeset
  1625
        case EUniCmdRemoveVideo:
hgs
parents:
diff changeset
  1626
            {
hgs
parents:
diff changeset
  1627
            DoUserRemoveMediaL( EMsgComponentIdVideo, EUniRegionImage );
hgs
parents:
diff changeset
  1628
            break;
hgs
parents:
diff changeset
  1629
            }
hgs
parents:
diff changeset
  1630
        case EUniCmdRemoveSvg:
hgs
parents:
diff changeset
  1631
            {
hgs
parents:
diff changeset
  1632
            DoUserRemoveMediaL( EMsgComponentIdSvg, EUniRegionImage );
hgs
parents:
diff changeset
  1633
            break;
hgs
parents:
diff changeset
  1634
            }
hgs
parents:
diff changeset
  1635
        case EUniCmdRemove:
hgs
parents:
diff changeset
  1636
            {
hgs
parents:
diff changeset
  1637
            CMsgBaseControl* ctrl = iView->FocusedControl();  // ctrl can be NULL.
hgs
parents:
diff changeset
  1638
			if(ctrl)
hgs
parents:
diff changeset
  1639
			{
hgs
parents:
diff changeset
  1640
            TMsgControlId controlId = TMsgControlId(ctrl->ControlId()); 
hgs
parents:
diff changeset
  1641
			if(controlId == EMsgComponentIdAudio)
hgs
parents:
diff changeset
  1642
			{
hgs
parents:
diff changeset
  1643
                DoUserRemoveMediaL( controlId, EUniRegionAudio );
hgs
parents:
diff changeset
  1644
			}
hgs
parents:
diff changeset
  1645
            else if ( controlId == EMsgComponentIdImage ||
hgs
parents:
diff changeset
  1646
			          controlId == EMsgComponentIdVideo ||
hgs
parents:
diff changeset
  1647
                      controlId == EMsgComponentIdSvg )
hgs
parents:
diff changeset
  1648
			{
hgs
parents:
diff changeset
  1649
				if( (Document()->DataModel()->SmilType() == ETemplateSmil) || (Document()->DataModel()->SmilType() == E3GPPSmil))
hgs
parents:
diff changeset
  1650
				   {
hgs
parents:
diff changeset
  1651
				     // focus is on SMIL presentation icon
hgs
parents:
diff changeset
  1652
				      RemoveTemplateL();
hgs
parents:
diff changeset
  1653
				   }
hgs
parents:
diff changeset
  1654
				else
hgs
parents:
diff changeset
  1655
				    {
hgs
parents:
diff changeset
  1656
                		DoUserRemoveMediaL( controlId, EUniRegionImage );
hgs
parents:
diff changeset
  1657
				    }
hgs
parents:
diff changeset
  1658
			}
hgs
parents:
diff changeset
  1659
			} 
hgs
parents:
diff changeset
  1660
            break;
hgs
parents:
diff changeset
  1661
            }
hgs
parents:
diff changeset
  1662
        case EMsgDispSizeAutomatic:
hgs
parents:
diff changeset
  1663
        case EMsgDispSizeLarge:
hgs
parents:
diff changeset
  1664
        case EMsgDispSizeNormal:
hgs
parents:
diff changeset
  1665
        case EMsgDispSizeSmall:
hgs
parents:
diff changeset
  1666
            {
hgs
parents:
diff changeset
  1667
            HandleLocalZoomChangeL( (TMsgCommonCommands)aCommand );
hgs
parents:
diff changeset
  1668
            break;
hgs
parents:
diff changeset
  1669
            }
hgs
parents:
diff changeset
  1670
        case EEikCmdExit:
hgs
parents:
diff changeset
  1671
            {
hgs
parents:
diff changeset
  1672
            //Save message when unieditor is closed though FSW
hgs
parents:
diff changeset
  1673
			//We won't get here when option->exit is selscted since while handling CAknCmdExit in overriden
hgs
parents:
diff changeset
  1674
			//ProcessCommandL we call Exit() 
hgs
parents:
diff changeset
  1675
            RemoveWaitNote();
hgs
parents:
diff changeset
  1676
            ExitAndSaveL();
hgs
parents:
diff changeset
  1677
            break;
hgs
parents:
diff changeset
  1678
            }
hgs
parents:
diff changeset
  1679
        case EAknSoftkeyClose:
hgs
parents:
diff changeset
  1680
            {
hgs
parents:
diff changeset
  1681
            DoBackSaveL();
hgs
parents:
diff changeset
  1682
            break;
hgs
parents:
diff changeset
  1683
            }
hgs
parents:
diff changeset
  1684
        case EAknCmdHelp:
hgs
parents:
diff changeset
  1685
            {
hgs
parents:
diff changeset
  1686
            LaunchHelpL();
hgs
parents:
diff changeset
  1687
            break;
hgs
parents:
diff changeset
  1688
            }
hgs
parents:
diff changeset
  1689
        default:
hgs
parents:
diff changeset
  1690
            {
hgs
parents:
diff changeset
  1691
            CMsgEditorAppUi::HandleCommandL(aCommand);
hgs
parents:
diff changeset
  1692
            break;
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
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1698
// CUniEditorAppUi::EditorObserver
hgs
parents:
diff changeset
  1699
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1700
//
hgs
parents:
diff changeset
  1701
void CUniEditorAppUi::EditorObserver( TMsgEditorObserverFunc aFunc, 
hgs
parents:
diff changeset
  1702
                                      TAny* aArg1, 
hgs
parents:
diff changeset
  1703
                                      TAny* aArg2, 
hgs
parents:
diff changeset
  1704
                                      TAny* aArg3)
hgs
parents:
diff changeset
  1705
    {
hgs
parents:
diff changeset
  1706
    TRAPD( error, DoEditorObserverL( aFunc, aArg1, aArg2, aArg3 ) );
hgs
parents:
diff changeset
  1707
    if ( error == KLeaveExit )
hgs
parents:
diff changeset
  1708
        {
hgs
parents:
diff changeset
  1709
        User::Leave( KLeaveExit );
hgs
parents:
diff changeset
  1710
        }
hgs
parents:
diff changeset
  1711
    }
hgs
parents:
diff changeset
  1712
hgs
parents:
diff changeset
  1713
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1714
// CUniEditorAppUi::DoEditorObserverL
hgs
parents:
diff changeset
  1715
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1716
//
hgs
parents:
diff changeset
  1717
void CUniEditorAppUi::DoEditorObserverL( TMsgEditorObserverFunc aFunc, 
hgs
parents:
diff changeset
  1718
                                         TAny* aArg1, 
hgs
parents:
diff changeset
  1719
                                         TAny* aArg2, 
hgs
parents:
diff changeset
  1720
                                         TAny* aArg3)
hgs
parents:
diff changeset
  1721
    {
hgs
parents:
diff changeset
  1722
    
hgs
parents:
diff changeset
  1723
    UNILOGGER_WRITE( "-> CUniEditorAppUi::DoEditorObserverL" );
hgs
parents:
diff changeset
  1724
    TInt slides = iSmilModel->SlideCount();
hgs
parents:
diff changeset
  1725
    TInt currSlide = Document()->CurrentSlide();
hgs
parents:
diff changeset
  1726
hgs
parents:
diff changeset
  1727
    switch( aFunc )
hgs
parents:
diff changeset
  1728
        {
hgs
parents:
diff changeset
  1729
        case EMsgScrollParts:
hgs
parents:
diff changeset
  1730
            {
hgs
parents:
diff changeset
  1731
            TInt* parts = static_cast<TInt*>( aArg1 );
hgs
parents:
diff changeset
  1732
            *parts = slides;
hgs
parents:
diff changeset
  1733
            break;
hgs
parents:
diff changeset
  1734
            }
hgs
parents:
diff changeset
  1735
        case MMsgEditorObserver::EMsgHandleFocusChange:
hgs
parents:
diff changeset
  1736
            {
hgs
parents:
diff changeset
  1737
            TMsgFocusEvent* event = static_cast<TMsgFocusEvent*>( aArg1 );
hgs
parents:
diff changeset
  1738
            TMsgAfterFocusEventFunc* after = static_cast<TMsgAfterFocusEventFunc*>( aArg2 );
hgs
parents:
diff changeset
  1739
            TInt* currPart = static_cast<TInt*>( aArg3 );
hgs
parents:
diff changeset
  1740
hgs
parents:
diff changeset
  1741
            *after = EMsgAfterFocusNone;
hgs
parents:
diff changeset
  1742
            UNILOGGER_WRITE( "-> DoEditorObserverL ->MMsgEditorObserver::EMsgHandleFocusChange " );
hgs
parents:
diff changeset
  1743
            
hgs
parents:
diff changeset
  1744
            switch ( *event )
hgs
parents:
diff changeset
  1745
                {
hgs
parents:
diff changeset
  1746
                case EMsgFocusAtBottom:
hgs
parents:
diff changeset
  1747
                    {
hgs
parents:
diff changeset
  1748
                    UNILOGGER_WRITE( "-> DoEditorObserverL ->EMsgFocusAtBottom ");
hgs
parents:
diff changeset
  1749
                    if ( currSlide + 1 < slides )
hgs
parents:
diff changeset
  1750
                        {
hgs
parents:
diff changeset
  1751
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  1752
                        DoUserChangeSlideL( *currPart );
hgs
parents:
diff changeset
  1753
                        *after = EMsgCursorToBodyBeginning;
hgs
parents:
diff changeset
  1754
                        *currPart = Document()->CurrentSlide();
hgs
parents:
diff changeset
  1755
#else
hgs
parents:
diff changeset
  1756
                        DoUserChangeSlideL( currSlide + 1 );
hgs
parents:
diff changeset
  1757
                        *after = EMsgCursorToBodyBeginning;
hgs
parents:
diff changeset
  1758
                        *currPart = currSlide + 1;
hgs
parents:
diff changeset
  1759
#endif
hgs
parents:
diff changeset
  1760
                        }
hgs
parents:
diff changeset
  1761
                    break;
hgs
parents:
diff changeset
  1762
                    }
hgs
parents:
diff changeset
  1763
                case EMsgFocusAtTop:
hgs
parents:
diff changeset
  1764
                    {
hgs
parents:
diff changeset
  1765
                     UNILOGGER_WRITE( "-> DoEditorObserverL ->EMsgFocusAtTop ");
hgs
parents:
diff changeset
  1766
                    if ( currSlide > 0 )
hgs
parents:
diff changeset
  1767
                        {
hgs
parents:
diff changeset
  1768
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  1769
                        DoUserChangeSlideL( *currPart );
hgs
parents:
diff changeset
  1770
                        *after = EMsgCursorToBodyEnd;
hgs
parents:
diff changeset
  1771
                        *currPart = Document()->CurrentSlide();
hgs
parents:
diff changeset
  1772
#else
hgs
parents:
diff changeset
  1773
                         DoUserChangeSlideL( currSlide - 1 );
hgs
parents:
diff changeset
  1774
                        *after = EMsgCursorToBodyEnd;
hgs
parents:
diff changeset
  1775
                        *currPart = currSlide - 1;
hgs
parents:
diff changeset
  1776
#endif
hgs
parents:
diff changeset
  1777
                        }
hgs
parents:
diff changeset
  1778
                    break;
hgs
parents:
diff changeset
  1779
                    }
hgs
parents:
diff changeset
  1780
                case EMsgFocusMovingFrom:
hgs
parents:
diff changeset
  1781
                    {
hgs
parents:
diff changeset
  1782
                    UNILOGGER_WRITE( "-> DoEditorObserverL ->EMsgFocusMovingFrom ");
hgs
parents:
diff changeset
  1783
                    TInt id( EMsgComponentIdNull );
hgs
parents:
diff changeset
  1784
                    CMsgBaseControl* ctrl = iView->FocusedControl();  // ctrl can be NULL.
hgs
parents:
diff changeset
  1785
                    if ( !ctrl )
hgs
parents:
diff changeset
  1786
                        {
hgs
parents:
diff changeset
  1787
                        break;
hgs
parents:
diff changeset
  1788
                        }
hgs
parents:
diff changeset
  1789
hgs
parents:
diff changeset
  1790
                    id = ctrl->ControlId();
hgs
parents:
diff changeset
  1791
                    if ( id == EMsgComponentIdAudio ||
hgs
parents:
diff changeset
  1792
                         id == EMsgComponentIdImage ||
hgs
parents:
diff changeset
  1793
                         id == EMsgComponentIdVideo )
hgs
parents:
diff changeset
  1794
                        {
hgs
parents:
diff changeset
  1795
                        break;
hgs
parents:
diff changeset
  1796
                        }
hgs
parents:
diff changeset
  1797
hgs
parents:
diff changeset
  1798
                    // not in first slide -> return
hgs
parents:
diff changeset
  1799
                    if ( currSlide > 0 )
hgs
parents:
diff changeset
  1800
                        {
hgs
parents:
diff changeset
  1801
                        break;
hgs
parents:
diff changeset
  1802
                        }
hgs
parents:
diff changeset
  1803
                        
hgs
parents:
diff changeset
  1804
                    if ( iHeader &&  
hgs
parents:
diff changeset
  1805
                         iHeader->IsAddressControl( id ) )
hgs
parents:
diff changeset
  1806
                        {
hgs
parents:
diff changeset
  1807
                        // We are moving from address control -> set max edwin sizes..
hgs
parents:
diff changeset
  1808
                        SetOrRemoveMaxSizeInEdwin();
hgs
parents:
diff changeset
  1809
                        
hgs
parents:
diff changeset
  1810
                        CMsgAddressControl* rec = iView ? 
hgs
parents:
diff changeset
  1811
                            static_cast<CMsgAddressControl*>( iView->ControlById( id ) ) :
hgs
parents:
diff changeset
  1812
                            NULL;
hgs
parents:
diff changeset
  1813
hgs
parents:
diff changeset
  1814
                        if ( rec ) 
hgs
parents:
diff changeset
  1815
                            {
hgs
parents:
diff changeset
  1816
                            TInt inputMode = rec->Editor().AknEditorCurrentInputMode();
hgs
parents:
diff changeset
  1817
                            SetInputModeToAddressFields( inputMode );
hgs
parents:
diff changeset
  1818
                            }
hgs
parents:
diff changeset
  1819
                        }
hgs
parents:
diff changeset
  1820
                    break;
hgs
parents:
diff changeset
  1821
                    }
hgs
parents:
diff changeset
  1822
                case EMsgFocusMovedTo:
hgs
parents:
diff changeset
  1823
                    {
hgs
parents:
diff changeset
  1824
                    UNILOGGER_WRITE( "-> DoEditorObserverL ->EMsgFocusMovedTo ");
hgs
parents:
diff changeset
  1825
                    TInt id( EMsgComponentIdNull );
hgs
parents:
diff changeset
  1826
                    CMsgBaseControl* ctrl = iView->FocusedControl();  // ctrl can be NULL.
hgs
parents:
diff changeset
  1827
                    if ( !ctrl )
hgs
parents:
diff changeset
  1828
                        {
hgs
parents:
diff changeset
  1829
                        break;
hgs
parents:
diff changeset
  1830
                        }
hgs
parents:
diff changeset
  1831
                    
hgs
parents:
diff changeset
  1832
                    id = ctrl->ControlId();
hgs
parents:
diff changeset
  1833
                    if ( id == EMsgComponentIdAudio ||
hgs
parents:
diff changeset
  1834
                         id == EMsgComponentIdImage ||
hgs
parents:
diff changeset
  1835
                         id == EMsgComponentIdVideo ||
hgs
parents:
diff changeset
  1836
                         id == EMsgComponentIdAttachment ||
hgs
parents:
diff changeset
  1837
                         id == EMsgComponentIdSvg )
hgs
parents:
diff changeset
  1838
                        {
hgs
parents:
diff changeset
  1839
                        iNaviPane->PushL( *iNaviDecorator );
hgs
parents:
diff changeset
  1840
                        }
hgs
parents:
diff changeset
  1841
                        
hgs
parents:
diff changeset
  1842
                    UpdateMiddleSoftkeyL();
hgs
parents:
diff changeset
  1843
                    break;
hgs
parents:
diff changeset
  1844
                    }
hgs
parents:
diff changeset
  1845
                case EMsgFocusToBody:
hgs
parents:
diff changeset
  1846
                case EMsgFocusToHeader:
hgs
parents:
diff changeset
  1847
                    {
hgs
parents:
diff changeset
  1848
                    UNILOGGER_WRITE( "-> DoEditorObserverL ->EMsgFocusToBody or EMsgFocusToHeader  ");
hgs
parents:
diff changeset
  1849
                    
hgs
parents:
diff changeset
  1850
                    SmsMsgLenToPenInputL();
hgs
parents:
diff changeset
  1851
                    UpdateMiddleSoftkeyL(); // fallthrough
hgs
parents:
diff changeset
  1852
                    break;
hgs
parents:
diff changeset
  1853
                    }
hgs
parents:
diff changeset
  1854
                default:
hgs
parents:
diff changeset
  1855
                    {
hgs
parents:
diff changeset
  1856
                    break;
hgs
parents:
diff changeset
  1857
                    }
hgs
parents:
diff changeset
  1858
                }
hgs
parents:
diff changeset
  1859
            break;
hgs
parents:
diff changeset
  1860
            }
hgs
parents:
diff changeset
  1861
        case MMsgEditorObserver::EMsgControlPointerEvent:
hgs
parents:
diff changeset
  1862
            {
hgs
parents:
diff changeset
  1863
            TPointerEvent* event = static_cast<TPointerEvent*>( aArg2 );
hgs
parents:
diff changeset
  1864
            CMsgBaseControl* control = static_cast<CMsgBaseControl*>( aArg1 );
hgs
parents:
diff changeset
  1865
            TWsEvent* wsEvent = static_cast<TWsEvent*>(aArg2);
hgs
parents:
diff changeset
  1866
            if ( event->iType == TPointerEvent::EButton1Down )
hgs
parents:
diff changeset
  1867
                {
hgs
parents:
diff changeset
  1868
                iFocusedControl = control;
hgs
parents:
diff changeset
  1869
                if ( control && 
hgs
parents:
diff changeset
  1870
                        ( control->ControlId() == EMsgComponentIdAudio ||
hgs
parents:
diff changeset
  1871
                                control->ControlId() == EMsgComponentIdImage ||
hgs
parents:
diff changeset
  1872
                                control->ControlId() == EMsgComponentIdVideo ||
hgs
parents:
diff changeset
  1873
                                control->ControlId() == EMsgComponentIdAttachment ||
hgs
parents:
diff changeset
  1874
                                control->ControlId() == EMsgComponentIdSvg ) )
hgs
parents:
diff changeset
  1875
                    {
hgs
parents:
diff changeset
  1876
                    if(iLongTapDetector)
hgs
parents:
diff changeset
  1877
                        {
hgs
parents:
diff changeset
  1878
                        iLongTapDetector->EnableLongTapAnimation(ETrue);
hgs
parents:
diff changeset
  1879
                        iLongTapDetector->PointerEventL( *event );
hgs
parents:
diff changeset
  1880
                        }
hgs
parents:
diff changeset
  1881
                    }
hgs
parents:
diff changeset
  1882
                iTapConsumed = EFalse;
hgs
parents:
diff changeset
  1883
                }
hgs
parents:
diff changeset
  1884
            else if ( (!iTapConsumed) && (event->iType == TPointerEvent::EButton1Up) )
hgs
parents:
diff changeset
  1885
                {
hgs
parents:
diff changeset
  1886
                iLongTapDetector->MonitorWsMessage(*wsEvent);
hgs
parents:
diff changeset
  1887
                iTapConsumed = ETrue;
hgs
parents:
diff changeset
  1888
                if ( control && 
hgs
parents:
diff changeset
  1889
                     iFocusedControl == control &&
hgs
parents:
diff changeset
  1890
                     ( control->ControlId() == EMsgComponentIdAudio ||
hgs
parents:
diff changeset
  1891
                       control->ControlId() == EMsgComponentIdImage ||
hgs
parents:
diff changeset
  1892
                       control->ControlId() == EMsgComponentIdVideo ||
hgs
parents:
diff changeset
  1893
                       control->ControlId() == EMsgComponentIdAttachment ||
hgs
parents:
diff changeset
  1894
                       control->ControlId() == EMsgComponentIdSvg ) )
hgs
parents:
diff changeset
  1895
                    {
hgs
parents:
diff changeset
  1896
                    DoSelectionKeyL();
hgs
parents:
diff changeset
  1897
                    }
hgs
parents:
diff changeset
  1898
                }
hgs
parents:
diff changeset
  1899
            break;
hgs
parents:
diff changeset
  1900
            }
hgs
parents:
diff changeset
  1901
        case MMsgEditorObserver::EMsgButtonEvent:
hgs
parents:
diff changeset
  1902
            {
hgs
parents:
diff changeset
  1903
            CMsgBaseControl* control = static_cast<CMsgBaseControl*>( aArg1 );
hgs
parents:
diff changeset
  1904
            
hgs
parents:
diff changeset
  1905
            if ( control &&
hgs
parents:
diff changeset
  1906
                 ( control->ControlId() != EMsgComponentIdAttachment ||
hgs
parents:
diff changeset
  1907
                   iFocusedControl != control ) )
hgs
parents:
diff changeset
  1908
                {
hgs
parents:
diff changeset
  1909
                DoSelectionKeyL();
hgs
parents:
diff changeset
  1910
                }
hgs
parents:
diff changeset
  1911
            break;
hgs
parents:
diff changeset
  1912
            }
hgs
parents:
diff changeset
  1913
        default:
hgs
parents:
diff changeset
  1914
            {
hgs
parents:
diff changeset
  1915
            // Other events not handled.
hgs
parents:
diff changeset
  1916
            break;
hgs
parents:
diff changeset
  1917
            }
hgs
parents:
diff changeset
  1918
        }
hgs
parents:
diff changeset
  1919
    }
hgs
parents:
diff changeset
  1920
hgs
parents:
diff changeset
  1921
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1922
// CUniEditorAppUi::FetchFileL
hgs
parents:
diff changeset
  1923
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1924
//
hgs
parents:
diff changeset
  1925
TBool CUniEditorAppUi::FetchFileL( MsgAttachmentUtils::TMsgAttachmentFetchType aFetchType )
hgs
parents:
diff changeset
  1926
    {
hgs
parents:
diff changeset
  1927
    // do not start if()ing. Sets parameter always
hgs
parents:
diff changeset
  1928
    TAiwVariant sizeLimit( Document()->MaxMessageSize() 
hgs
parents:
diff changeset
  1929
                            - ( MessageSizeInBytes() + KUniAttachmentOverhead ) );
hgs
parents:
diff changeset
  1930
    TAiwGenericParam sizeLimitParam( EGenericParamMMSSizeLimit, sizeLimit );
hgs
parents:
diff changeset
  1931
hgs
parents:
diff changeset
  1932
    CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC();
hgs
parents:
diff changeset
  1933
    paramList->AppendL( sizeLimitParam );
hgs
parents:
diff changeset
  1934
    
hgs
parents:
diff changeset
  1935
    CDesCArrayFlat* files = new( ELeave ) CDesC16ArrayFlat( 1 );
hgs
parents:
diff changeset
  1936
    CleanupStack::PushL( files );
hgs
parents:
diff changeset
  1937
    
hgs
parents:
diff changeset
  1938
    TBool fetchOK = MsgAttachmentUtils::FetchFileL( aFetchType,
hgs
parents:
diff changeset
  1939
                                                    *files,
hgs
parents:
diff changeset
  1940
                                                    paramList,
hgs
parents:
diff changeset
  1941
                                                    EFalse, // disk space checked in VerifySelectionL or CUniEditorInsertOperation, if image scaled/compressed
hgs
parents:
diff changeset
  1942
                                                    EFalse,
hgs
parents:
diff changeset
  1943
                                                    this );
hgs
parents:
diff changeset
  1944
hgs
parents:
diff changeset
  1945
    switch ( aFetchType )
hgs
parents:
diff changeset
  1946
        {
hgs
parents:
diff changeset
  1947
        case MsgAttachmentUtils::ENewImage:
hgs
parents:
diff changeset
  1948
        case MsgAttachmentUtils::ENewAudio:
hgs
parents:
diff changeset
  1949
        case MsgAttachmentUtils::ENewVideo:
hgs
parents:
diff changeset
  1950
        case MsgAttachmentUtils::ENote:
hgs
parents:
diff changeset
  1951
            {
hgs
parents:
diff changeset
  1952
            if ( fetchOK )
hgs
parents:
diff changeset
  1953
                {
hgs
parents:
diff changeset
  1954
                TFileName* fileName = new( ELeave ) TFileName;
hgs
parents:
diff changeset
  1955
                CleanupStack::PushL( fileName );
hgs
parents:
diff changeset
  1956
    
hgs
parents:
diff changeset
  1957
                if ( files->MdcaCount() > 0 )
hgs
parents:
diff changeset
  1958
                    {
hgs
parents:
diff changeset
  1959
                    *fileName = files->MdcaPoint( 0 );
hgs
parents:
diff changeset
  1960
                    }
hgs
parents:
diff changeset
  1961
                    
hgs
parents:
diff changeset
  1962
                // Something was fetched
hgs
parents:
diff changeset
  1963
                __ASSERT_DEBUG( !iInsertingMedia, Panic( EUniIllegalMediaObject ) );
hgs
parents:
diff changeset
  1964
                fetchOK = CreateMediaInfoForInsertL( iInsertingType, *fileName ) ? ETrue : 
hgs
parents:
diff changeset
  1965
                                                                                   EFalse;
hgs
parents:
diff changeset
  1966
                CleanupStack::PopAndDestroy( fileName );
hgs
parents:
diff changeset
  1967
                }
hgs
parents:
diff changeset
  1968
            break;
hgs
parents:
diff changeset
  1969
            }
hgs
parents:
diff changeset
  1970
        case MsgAttachmentUtils::EImage:
hgs
parents:
diff changeset
  1971
        case MsgAttachmentUtils::EAudio:
hgs
parents:
diff changeset
  1972
        case MsgAttachmentUtils::EVideo:
hgs
parents:
diff changeset
  1973
        case MsgAttachmentUtils::ESVG:
hgs
parents:
diff changeset
  1974
        default:
hgs
parents:
diff changeset
  1975
            {
hgs
parents:
diff changeset
  1976
            // CreateMediaInfoForInsertL is called in VeritySelectionL
hgs
parents:
diff changeset
  1977
            break;
hgs
parents:
diff changeset
  1978
            }
hgs
parents:
diff changeset
  1979
        }
hgs
parents:
diff changeset
  1980
    
hgs
parents:
diff changeset
  1981
    CleanupStack::PopAndDestroy( 2, paramList );    // + files
hgs
parents:
diff changeset
  1982
    
hgs
parents:
diff changeset
  1983
    return fetchOK;
hgs
parents:
diff changeset
  1984
    }
hgs
parents:
diff changeset
  1985
hgs
parents:
diff changeset
  1986
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1987
// CUniEditorAppUi::VerifySelectionL
hgs
parents:
diff changeset
  1988
// ---------------------------------------------------------
hgs
parents:
diff changeset
  1989
//
hgs
parents:
diff changeset
  1990
TBool CUniEditorAppUi::VerifySelectionL( const MDesCArray* aSelectedFiles )
hgs
parents:
diff changeset
  1991
    {
hgs
parents:
diff changeset
  1992
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  1993
hgs
parents:
diff changeset
  1994
    TBool ret = EFalse;
hgs
parents:
diff changeset
  1995
    if ( aSelectedFiles->MdcaCount() == 1 )
hgs
parents:
diff changeset
  1996
        {
hgs
parents:
diff changeset
  1997
        __ASSERT_DEBUG( !iInsertingMedia, Panic( EUniIllegalMediaObject ) );
hgs
parents:
diff changeset
  1998
        if ( CreateMediaInfoForInsertL( iInsertingType, aSelectedFiles->MdcaPoint( 0 ) ) )
hgs
parents:
diff changeset
  1999
            {
hgs
parents:
diff changeset
  2000
            ret = ETrue;
hgs
parents:
diff changeset
  2001
            }
hgs
parents:
diff changeset
  2002
        }
hgs
parents:
diff changeset
  2003
    
hgs
parents:
diff changeset
  2004
    CleanupStack::PopAndDestroy(); // CAknInputBlock
hgs
parents:
diff changeset
  2005
    return ret;
hgs
parents:
diff changeset
  2006
    }
hgs
parents:
diff changeset
  2007
hgs
parents:
diff changeset
  2008
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2009
// CUniEditorAppUi::DynInitToolbarL
hgs
parents:
diff changeset
  2010
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2011
//
hgs
parents:
diff changeset
  2012
void CUniEditorAppUi::DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar )
hgs
parents:
diff changeset
  2013
    {
hgs
parents:
diff changeset
  2014
    if ( aResourceId == EUniCmdFixedToolbarInsert )
hgs
parents:
diff changeset
  2015
        {
hgs
parents:
diff changeset
  2016
        CAknToolbarExtension* extension = aToolbar->ToolbarExtension();
hgs
parents:
diff changeset
  2017
        
hgs
parents:
diff changeset
  2018
        if ( iSmilModel )
hgs
parents:
diff changeset
  2019
            {
hgs
parents:
diff changeset
  2020
            if ( iSmilModel->SlideCount() >= iSmilModel->MaxSlideCount() )
hgs
parents:
diff changeset
  2021
                {
hgs
parents:
diff changeset
  2022
                if ( ObjectsAvailable() & ( EUniImageFlag |  EUniSvgFlag | EUniVideoFlag ) )
hgs
parents:
diff changeset
  2023
                    {
hgs
parents:
diff changeset
  2024
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertImage, ETrue );
hgs
parents:
diff changeset
  2025
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewImage, ETrue );
hgs
parents:
diff changeset
  2026
                    }
hgs
parents:
diff changeset
  2027
               else
hgs
parents:
diff changeset
  2028
                    {
hgs
parents:
diff changeset
  2029
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertImage, EFalse );
hgs
parents:
diff changeset
  2030
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewImage, EFalse );
hgs
parents:
diff changeset
  2031
                    }
hgs
parents:
diff changeset
  2032
                    
hgs
parents:
diff changeset
  2033
                if ( ObjectsAvailable() & ( EUniImageFlag |  EUniSvgFlag | EUniVideoFlag | EUniAudioFlag ) )
hgs
parents:
diff changeset
  2034
                    {
hgs
parents:
diff changeset
  2035
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertVideo, ETrue );
hgs
parents:
diff changeset
  2036
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewVideo, ETrue );
hgs
parents:
diff changeset
  2037
                    }
hgs
parents:
diff changeset
  2038
                else
hgs
parents:
diff changeset
  2039
                    {
hgs
parents:
diff changeset
  2040
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertVideo, EFalse );
hgs
parents:
diff changeset
  2041
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewVideo, EFalse );
hgs
parents:
diff changeset
  2042
                    }
hgs
parents:
diff changeset
  2043
                
hgs
parents:
diff changeset
  2044
                if ( ObjectsAvailable() & ( EUniVideoFlag | EUniAudioFlag | EUniSvgFlag ) )
hgs
parents:
diff changeset
  2045
                    {
hgs
parents:
diff changeset
  2046
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertAudio, ETrue );
hgs
parents:
diff changeset
  2047
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewAudio, ETrue );
hgs
parents:
diff changeset
  2048
                    }
hgs
parents:
diff changeset
  2049
                else 
hgs
parents:
diff changeset
  2050
                    {
hgs
parents:
diff changeset
  2051
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertAudio, EFalse );
hgs
parents:
diff changeset
  2052
                    SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewAudio, EFalse );
hgs
parents:
diff changeset
  2053
                    }
hgs
parents:
diff changeset
  2054
                
hgs
parents:
diff changeset
  2055
                SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertSlide, ETrue );
hgs
parents:
diff changeset
  2056
                }
hgs
parents:
diff changeset
  2057
            else 
hgs
parents:
diff changeset
  2058
                {
hgs
parents:
diff changeset
  2059
                SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertImage, EFalse );
hgs
parents:
diff changeset
  2060
                SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewImage, EFalse );
hgs
parents:
diff changeset
  2061
                SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertVideo, EFalse );
hgs
parents:
diff changeset
  2062
                SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewVideo, EFalse );
hgs
parents:
diff changeset
  2063
                SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertAudio, EFalse );
hgs
parents:
diff changeset
  2064
                SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewAudio, EFalse );
hgs
parents:
diff changeset
  2065
                SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtInsertSlide, EFalse );                
hgs
parents:
diff changeset
  2066
                }
hgs
parents:
diff changeset
  2067
            }
hgs
parents:
diff changeset
  2068
        
hgs
parents:
diff changeset
  2069
        if ( !( iSupportedFeatures & EUniFeatureCamcorder ) )
hgs
parents:
diff changeset
  2070
            {
hgs
parents:
diff changeset
  2071
            SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewImage, ETrue );
hgs
parents:
diff changeset
  2072
            SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewVideo, ETrue );
hgs
parents:
diff changeset
  2073
            }
hgs
parents:
diff changeset
  2074
hgs
parents:
diff changeset
  2075
        if ( Document()->CreationMode() == EMmsCreationModeRestricted )
hgs
parents:
diff changeset
  2076
             {
hgs
parents:
diff changeset
  2077
             SetExtensionButtonDimmed( extension, EUniCmdFixedToolbarExtNewSmil, ETrue );             
hgs
parents:
diff changeset
  2078
             }
hgs
parents:
diff changeset
  2079
        }
hgs
parents:
diff changeset
  2080
    }
hgs
parents:
diff changeset
  2081
hgs
parents:
diff changeset
  2082
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2083
// CUniEditorAppUi::OfferToolbarEventL
hgs
parents:
diff changeset
  2084
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2085
//        
hgs
parents:
diff changeset
  2086
void CUniEditorAppUi::OfferToolbarEventL( TInt aCommand )
hgs
parents:
diff changeset
  2087
    {
hgs
parents:
diff changeset
  2088
    if ( iFixedToolbar )
hgs
parents:
diff changeset
  2089
        {
hgs
parents:
diff changeset
  2090
        iFixedToolbar->ToolbarExtension()->SetShown( EFalse );
hgs
parents:
diff changeset
  2091
        }
hgs
parents:
diff changeset
  2092
            
hgs
parents:
diff changeset
  2093
    TRAPD( error, DoOfferToolbarEventL( aCommand ) );
hgs
parents:
diff changeset
  2094
            
hgs
parents:
diff changeset
  2095
    User::LeaveIfError( error );
hgs
parents:
diff changeset
  2096
    }
hgs
parents:
diff changeset
  2097
hgs
parents:
diff changeset
  2098
        
hgs
parents:
diff changeset
  2099
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2100
// CUniEditorAppUi::DoOfferToolbarEventL
hgs
parents:
diff changeset
  2101
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2102
//        
hgs
parents:
diff changeset
  2103
void CUniEditorAppUi::DoOfferToolbarEventL( TInt aCommand )
hgs
parents:
diff changeset
  2104
    {
hgs
parents:
diff changeset
  2105
    switch( aCommand )
hgs
parents:
diff changeset
  2106
        {
hgs
parents:
diff changeset
  2107
        case EUniCmdFixedToolbarSend:
hgs
parents:
diff changeset
  2108
            {
hgs
parents:
diff changeset
  2109
            DoHandleCommandL( EUniCmdSendSMS );
hgs
parents:
diff changeset
  2110
            break;
hgs
parents:
diff changeset
  2111
            }
hgs
parents:
diff changeset
  2112
        case EUniCmdFixedToolbarInsert:
hgs
parents:
diff changeset
  2113
            {
hgs
parents:
diff changeset
  2114
            DoHandleCommandL( EUniCmdInsertMedia );
hgs
parents:
diff changeset
  2115
            break;
hgs
parents:
diff changeset
  2116
            }
hgs
parents:
diff changeset
  2117
        case EUniCmdFixedToolbarAddRecipient:
hgs
parents:
diff changeset
  2118
            {
hgs
parents:
diff changeset
  2119
            DoHandleCommandL( EUniCmdAddRecipient );
hgs
parents:
diff changeset
  2120
            break;
hgs
parents:
diff changeset
  2121
            }
hgs
parents:
diff changeset
  2122
        case EUniCmdFixedToolbarExtInsertImage:
hgs
parents:
diff changeset
  2123
            {
hgs
parents:
diff changeset
  2124
            DoUserInsertImageL( MsgAttachmentUtils::EImage );
hgs
parents:
diff changeset
  2125
            break;
hgs
parents:
diff changeset
  2126
            }
hgs
parents:
diff changeset
  2127
        case EUniCmdFixedToolbarExtInsertVideo:
hgs
parents:
diff changeset
  2128
            {
hgs
parents:
diff changeset
  2129
            DoUserInsertVideoL( MsgAttachmentUtils::EVideo );
hgs
parents:
diff changeset
  2130
            break;
hgs
parents:
diff changeset
  2131
            }
hgs
parents:
diff changeset
  2132
        case EUniCmdFixedToolbarExtInsertAudio:
hgs
parents:
diff changeset
  2133
            {
hgs
parents:
diff changeset
  2134
            DoUserInsertAudioL( MsgAttachmentUtils::EAudio );
hgs
parents:
diff changeset
  2135
            break;
hgs
parents:
diff changeset
  2136
            }
hgs
parents:
diff changeset
  2137
        case EUniCmdFixedToolbarExtNewImage:
hgs
parents:
diff changeset
  2138
            {
hgs
parents:
diff changeset
  2139
            DoUserInsertImageL( MsgAttachmentUtils::ENewImage );
hgs
parents:
diff changeset
  2140
            break;
hgs
parents:
diff changeset
  2141
            }
hgs
parents:
diff changeset
  2142
        case EUniCmdFixedToolbarExtNewVideo:
hgs
parents:
diff changeset
  2143
            {
hgs
parents:
diff changeset
  2144
            DoUserInsertVideoL( MsgAttachmentUtils::ENewVideo );
hgs
parents:
diff changeset
  2145
            break;
hgs
parents:
diff changeset
  2146
            }
hgs
parents:
diff changeset
  2147
        case EUniCmdFixedToolbarExtNewAudio:
hgs
parents:
diff changeset
  2148
            {
hgs
parents:
diff changeset
  2149
            DoUserInsertAudioL( MsgAttachmentUtils::ENewAudio );
hgs
parents:
diff changeset
  2150
            break;
hgs
parents:
diff changeset
  2151
            }
hgs
parents:
diff changeset
  2152
        case EUniCmdFixedToolbarExtInsertSlide:
hgs
parents:
diff changeset
  2153
            {
hgs
parents:
diff changeset
  2154
            DoUserInsertSlideL();
hgs
parents:
diff changeset
  2155
            break;
hgs
parents:
diff changeset
  2156
            }
hgs
parents:
diff changeset
  2157
        case EUniCmdFixedToolbarExtInsertTemplate:
hgs
parents:
diff changeset
  2158
            {
hgs
parents:
diff changeset
  2159
            DoUserInsertTextL( ETemplateText );
hgs
parents:
diff changeset
  2160
            break;
hgs
parents:
diff changeset
  2161
            }
hgs
parents:
diff changeset
  2162
        case EUniCmdFixedToolbarExtInsertNote:
hgs
parents:
diff changeset
  2163
            {
hgs
parents:
diff changeset
  2164
            DoUserInsertTextL( EMemoText );
hgs
parents:
diff changeset
  2165
            break;
hgs
parents:
diff changeset
  2166
            }
hgs
parents:
diff changeset
  2167
        case EUniCmdFixedToolbarExtInsertvCard:
hgs
parents:
diff changeset
  2168
            {
hgs
parents:
diff changeset
  2169
            DoUserInsertVCardL();
hgs
parents:
diff changeset
  2170
            break;
hgs
parents:
diff changeset
  2171
            }
hgs
parents:
diff changeset
  2172
        case EUniCmdFixedToolbarExtOther:
hgs
parents:
diff changeset
  2173
            {
hgs
parents:
diff changeset
  2174
            DoToolbarInsertOtherL();
hgs
parents:
diff changeset
  2175
            break;
hgs
parents:
diff changeset
  2176
            }
hgs
parents:
diff changeset
  2177
        default:
hgs
parents:
diff changeset
  2178
            {
hgs
parents:
diff changeset
  2179
            break;
hgs
parents:
diff changeset
  2180
            }
hgs
parents:
diff changeset
  2181
        }
hgs
parents:
diff changeset
  2182
    }
hgs
parents:
diff changeset
  2183
hgs
parents:
diff changeset
  2184
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2185
// CUniEditorAppUi::HandleServerAppExit
hgs
parents:
diff changeset
  2186
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2187
// 
hgs
parents:
diff changeset
  2188
void CUniEditorAppUi::HandleServerAppExit( TInt /*aReason*/ )
hgs
parents:
diff changeset
  2189
    {
hgs
parents:
diff changeset
  2190
    CMsgBaseControl* ctrl = iView->FocusedControl();
hgs
parents:
diff changeset
  2191
hgs
parents:
diff changeset
  2192
    if ( ctrl )
hgs
parents:
diff changeset
  2193
        {
hgs
parents:
diff changeset
  2194
        TUniRegion region = EUniRegionImage;
hgs
parents:
diff changeset
  2195
        
hgs
parents:
diff changeset
  2196
        switch ( ctrl->ControlId() )
hgs
parents:
diff changeset
  2197
            {
hgs
parents:
diff changeset
  2198
            case EMsgComponentIdAudio:
hgs
parents:
diff changeset
  2199
                {
hgs
parents:
diff changeset
  2200
                region = EUniRegionAudio;
hgs
parents:
diff changeset
  2201
                // Fallthrough.
hgs
parents:
diff changeset
  2202
                }
hgs
parents:
diff changeset
  2203
            case EMsgComponentIdVideo:
hgs
parents:
diff changeset
  2204
                {
hgs
parents:
diff changeset
  2205
                CUniObject* object = iSmilModel->GetObject( Document()->CurrentSlide(), region );
hgs
parents:
diff changeset
  2206
                
hgs
parents:
diff changeset
  2207
                // Coverty fix, Null pointer return, http://ousrv057/cov.cgi?cid=37172
hgs
parents:
diff changeset
  2208
                if ( object )
hgs
parents:
diff changeset
  2209
                	{
hgs
parents:
diff changeset
  2210
                    if ( object->DrmInfo() )
hgs
parents:
diff changeset
  2211
                       {
hgs
parents:
diff changeset
  2212
                       object->DrmInfo()->FreezeRights();
hgs
parents:
diff changeset
  2213
                       }
hgs
parents:
diff changeset
  2214
                    }
hgs
parents:
diff changeset
  2215
                
hgs
parents:
diff changeset
  2216
                TRAP_IGNORE( iSlideLoader->UpdateControlIconL( 
hgs
parents:
diff changeset
  2217
                                                  *static_cast<CMsgMediaControl*>( ctrl ), 
hgs
parents:
diff changeset
  2218
                                                  object ) );
hgs
parents:
diff changeset
  2219
                ctrl->DrawNow();
hgs
parents:
diff changeset
  2220
                break;
hgs
parents:
diff changeset
  2221
                }
hgs
parents:
diff changeset
  2222
            default:
hgs
parents:
diff changeset
  2223
                {
hgs
parents:
diff changeset
  2224
                break;
hgs
parents:
diff changeset
  2225
                }
hgs
parents:
diff changeset
  2226
            }
hgs
parents:
diff changeset
  2227
        }
hgs
parents:
diff changeset
  2228
    iEditorFlags &= ~EMsgEditInProgress;
hgs
parents:
diff changeset
  2229
    DeactivateInputBlocker();
hgs
parents:
diff changeset
  2230
    }
hgs
parents:
diff changeset
  2231
hgs
parents:
diff changeset
  2232
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2233
// CUniEditorAppUi::HandleEdwinEventL
hgs
parents:
diff changeset
  2234
//
hgs
parents:
diff changeset
  2235
// Performs character counter updating if neccessary. This is needed
hgs
parents:
diff changeset
  2236
// for supporting on-screen keyboard. Normally character input
hgs
parents:
diff changeset
  2237
// is handled already on OfferKeyEventL function but it does no
hgs
parents:
diff changeset
  2238
// harm to do it here again. Character input is not handled if editor
hgs
parents:
diff changeset
  2239
// is not fully launched or it is about to close. Modified flag is turned
hgs
parents:
diff changeset
  2240
// on here since control state change event that should turn it on might 
hgs
parents:
diff changeset
  2241
// come after this event and HandleCharInputL will not work correctly if 
hgs
parents:
diff changeset
  2242
// modified flag is not set. Text update event is expected to come only
hgs
parents:
diff changeset
  2243
// in such cases that control is modified.
hgs
parents:
diff changeset
  2244
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2245
//
hgs
parents:
diff changeset
  2246
void CUniEditorAppUi::HandleEdwinEventL( CEikEdwin* /*aEdwin*/, TEdwinEvent aEventType )
hgs
parents:
diff changeset
  2247
    {
hgs
parents:
diff changeset
  2248
    if ( aEventType == MEikEdwinObserver::EEventTextUpdate &&
hgs
parents:
diff changeset
  2249
         !( iEditorFlags & EEditorClosing ||
hgs
parents:
diff changeset
  2250
            iEditorFlags & EEditorExiting ) &&
hgs
parents:
diff changeset
  2251
         IsLaunched() )
hgs
parents:
diff changeset
  2252
        {
hgs
parents:
diff changeset
  2253
        CMsgBaseControl* focusedControl = iView->FocusedControl();
hgs
parents:
diff changeset
  2254
        if ( focusedControl )
hgs
parents:
diff changeset
  2255
            {
hgs
parents:
diff changeset
  2256
            focusedControl->SetModified( ETrue );
hgs
parents:
diff changeset
  2257
            
hgs
parents:
diff changeset
  2258
            HandleCharInputL();            
hgs
parents:
diff changeset
  2259
            }
hgs
parents:
diff changeset
  2260
        }
hgs
parents:
diff changeset
  2261
    }
hgs
parents:
diff changeset
  2262
hgs
parents:
diff changeset
  2263
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2264
// CUniEditorAppUi::HandleEntryMovedL
hgs
parents:
diff changeset
  2265
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2266
//
hgs
parents:
diff changeset
  2267
void CUniEditorAppUi::HandleEntryMovedL( TMsvId /*aOldParent*/, TMsvId /*aNewParent*/ )
hgs
parents:
diff changeset
  2268
    {
hgs
parents:
diff changeset
  2269
    }
hgs
parents:
diff changeset
  2270
hgs
parents:
diff changeset
  2271
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2272
// CUniEditorAppUi::HandleStatusPaneSizeChange
hgs
parents:
diff changeset
  2273
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2274
//
hgs
parents:
diff changeset
  2275
void CUniEditorAppUi::HandleStatusPaneSizeChange( void )
hgs
parents:
diff changeset
  2276
    {
hgs
parents:
diff changeset
  2277
    if( iScreenClearerPartialVKBOn )
hgs
parents:
diff changeset
  2278
          {
hgs
parents:
diff changeset
  2279
          delete iScreenClearerPartialVKBOn;
hgs
parents:
diff changeset
  2280
          iScreenClearerPartialVKBOn = NULL;
hgs
parents:
diff changeset
  2281
          }
hgs
parents:
diff changeset
  2282
    CMsgEditorAppUi::HandleStatusPaneSizeChange();
hgs
parents:
diff changeset
  2283
    }
hgs
parents:
diff changeset
  2284
    
hgs
parents:
diff changeset
  2285
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2286
// CUniEditorAppUi::HandleKeyEventL
hgs
parents:
diff changeset
  2287
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2288
//
hgs
parents:
diff changeset
  2289
TKeyResponse CUniEditorAppUi::HandleKeyEventL( const TKeyEvent& aKeyEvent, 
hgs
parents:
diff changeset
  2290
                                               TEventCode aType )
hgs
parents:
diff changeset
  2291
    {
hgs
parents:
diff changeset
  2292
    if ( !IsLaunched() )
hgs
parents:
diff changeset
  2293
        {
hgs
parents:
diff changeset
  2294
        // Still launching
hgs
parents:
diff changeset
  2295
        return EKeyWasNotConsumed;
hgs
parents:
diff changeset
  2296
        }
hgs
parents:
diff changeset
  2297
        
hgs
parents:
diff changeset
  2298
    if ( !IsDisplayingMenuOrDialog() &&
hgs
parents:
diff changeset
  2299
         !( iEditorFlags & EEditorClosing ||
hgs
parents:
diff changeset
  2300
            iEditorFlags & EEditorExiting ) )
hgs
parents:
diff changeset
  2301
        {
hgs
parents:
diff changeset
  2302
        switch ( aKeyEvent.iCode )
hgs
parents:
diff changeset
  2303
            {
hgs
parents:
diff changeset
  2304
            case EKeyEnter:
hgs
parents:
diff changeset
  2305
                {
hgs
parents:
diff changeset
  2306
                if ( DoEnterKeyL() )
hgs
parents:
diff changeset
  2307
                    {
hgs
parents:
diff changeset
  2308
                    return EKeyWasConsumed;
hgs
parents:
diff changeset
  2309
                    }
hgs
parents:
diff changeset
  2310
                break;
hgs
parents:
diff changeset
  2311
                }
hgs
parents:
diff changeset
  2312
            case EKeyOK:
hgs
parents:
diff changeset
  2313
                {
hgs
parents:
diff changeset
  2314
                // Selection key: Show context menus
hgs
parents:
diff changeset
  2315
                DoSelectionKeyL();
hgs
parents:
diff changeset
  2316
                return EKeyWasConsumed;
hgs
parents:
diff changeset
  2317
                }
hgs
parents:
diff changeset
  2318
            case EKeyYes:
hgs
parents:
diff changeset
  2319
                {
hgs
parents:
diff changeset
  2320
                // CallCreationKey: Send message if recipients.
hgs
parents:
diff changeset
  2321
                //                  Otherwise fetch recipients
hgs
parents:
diff changeset
  2322
                if ( iHeader->HasRecipients() )
hgs
parents:
diff changeset
  2323
                    {
hgs
parents:
diff changeset
  2324
                    // has addresses -> Send
hgs
parents:
diff changeset
  2325
                    DoUserSendL();
hgs
parents:
diff changeset
  2326
                    }
hgs
parents:
diff changeset
  2327
                else
hgs
parents:
diff changeset
  2328
                    {
hgs
parents:
diff changeset
  2329
                    DoUserAddRecipientL();
hgs
parents:
diff changeset
  2330
                    }
hgs
parents:
diff changeset
  2331
                return EKeyWasConsumed;
hgs
parents:
diff changeset
  2332
                }
hgs
parents:
diff changeset
  2333
            case EKeyBackspace:
hgs
parents:
diff changeset
  2334
            case EKeyDelete:
hgs
parents:
diff changeset
  2335
                {
hgs
parents:
diff changeset
  2336
                CMsgBaseControl* ctrl = iView->FocusedControl();
hgs
parents:
diff changeset
  2337
                if ( ctrl )
hgs
parents:
diff changeset
  2338
                    {
hgs
parents:
diff changeset
  2339
                    switch( ctrl->ControlId() )
hgs
parents:
diff changeset
  2340
                        {
hgs
parents:
diff changeset
  2341
                        case EMsgComponentIdImage:
hgs
parents:
diff changeset
  2342
                            {
hgs
parents:
diff changeset
  2343
                            switch ( Document()->DataModel()->SmilType() )
hgs
parents:
diff changeset
  2344
                                {
hgs
parents:
diff changeset
  2345
                                case ETemplateSmil:
hgs
parents:
diff changeset
  2346
                                case E3GPPSmil:
hgs
parents:
diff changeset
  2347
                                    {
hgs
parents:
diff changeset
  2348
                                    // focus is on SMIL presentation icon
hgs
parents:
diff changeset
  2349
                                    RemoveTemplateL();
hgs
parents:
diff changeset
  2350
                                    break;
hgs
parents:
diff changeset
  2351
                                    }
hgs
parents:
diff changeset
  2352
                                default:
hgs
parents:
diff changeset
  2353
                                    {
hgs
parents:
diff changeset
  2354
                                    // real image
hgs
parents:
diff changeset
  2355
                                    DoUserRemoveMediaL( EMsgComponentIdImage, EUniRegionImage );
hgs
parents:
diff changeset
  2356
                                    break;
hgs
parents:
diff changeset
  2357
                                    }
hgs
parents:
diff changeset
  2358
                                }
hgs
parents:
diff changeset
  2359
                                
hgs
parents:
diff changeset
  2360
                            return EKeyWasConsumed;
hgs
parents:
diff changeset
  2361
                            }
hgs
parents:
diff changeset
  2362
                        case EMsgComponentIdAudio:
hgs
parents:
diff changeset
  2363
                            {
hgs
parents:
diff changeset
  2364
                            DoUserRemoveMediaL( EMsgComponentIdAudio, EUniRegionAudio );
hgs
parents:
diff changeset
  2365
                            return EKeyWasConsumed;
hgs
parents:
diff changeset
  2366
                            }
hgs
parents:
diff changeset
  2367
                        case EMsgComponentIdVideo:
hgs
parents:
diff changeset
  2368
                            {
hgs
parents:
diff changeset
  2369
                            DoUserRemoveMediaL( EMsgComponentIdVideo, EUniRegionImage );
hgs
parents:
diff changeset
  2370
                            return EKeyWasConsumed;
hgs
parents:
diff changeset
  2371
                            }
hgs
parents:
diff changeset
  2372
                        case EMsgComponentIdSvg:
hgs
parents:
diff changeset
  2373
                            {
hgs
parents:
diff changeset
  2374
                            DoUserRemoveMediaL( EMsgComponentIdSvg, EUniRegionImage );
hgs
parents:
diff changeset
  2375
                            return EKeyWasConsumed;
hgs
parents:
diff changeset
  2376
                            }
hgs
parents:
diff changeset
  2377
                        default:
hgs
parents:
diff changeset
  2378
                            {
hgs
parents:
diff changeset
  2379
                            break;
hgs
parents:
diff changeset
  2380
                            }
hgs
parents:
diff changeset
  2381
                        }
hgs
parents:
diff changeset
  2382
                    }
hgs
parents:
diff changeset
  2383
                break;
hgs
parents:
diff changeset
  2384
                }
hgs
parents:
diff changeset
  2385
            default:
hgs
parents:
diff changeset
  2386
                {
hgs
parents:
diff changeset
  2387
                break;
hgs
parents:
diff changeset
  2388
                }
hgs
parents:
diff changeset
  2389
            }
hgs
parents:
diff changeset
  2390
            
hgs
parents:
diff changeset
  2391
        switch ( aKeyEvent.iScanCode )
hgs
parents:
diff changeset
  2392
            {
hgs
parents:
diff changeset
  2393
            case EStdKeyUpArrow:
hgs
parents:
diff changeset
  2394
            case EStdKeyDownArrow:
hgs
parents:
diff changeset
  2395
            case EStdKeyLeftArrow:
hgs
parents:
diff changeset
  2396
            case EStdKeyRightArrow:
hgs
parents:
diff changeset
  2397
            case EStdKeyDevice1: // Close key                
hgs
parents:
diff changeset
  2398
            case EStdKeyRightShift: // Shift
hgs
parents:
diff changeset
  2399
            case EStdKeyApplication0: // Task switching
hgs
parents:
diff changeset
  2400
                {
hgs
parents:
diff changeset
  2401
				//If menu key is pressed with VKB On
hgs
parents:
diff changeset
  2402
                if( iPeninputServer.IsVisible() && (aKeyEvent.iRepeats > 0) && !iScreenClearerPartialVKBOn )
hgs
parents:
diff changeset
  2403
                    {
hgs
parents:
diff changeset
  2404
                    iScreenClearerPartialVKBOn =CAknLocalScreenClearer::NewLC(ETrue);
hgs
parents:
diff changeset
  2405
                    CleanupStack::Pop( iScreenClearerPartialVKBOn );
hgs
parents:
diff changeset
  2406
                    }
hgs
parents:
diff changeset
  2407
                return CMsgEditorAppUi::HandleKeyEventL( aKeyEvent, aType );
hgs
parents:
diff changeset
  2408
                }
hgs
parents:
diff changeset
  2409
            default:
hgs
parents:
diff changeset
  2410
                {
hgs
parents:
diff changeset
  2411
                break;
hgs
parents:
diff changeset
  2412
                }
hgs
parents:
diff changeset
  2413
            }
hgs
parents:
diff changeset
  2414
hgs
parents:
diff changeset
  2415
        TKeyResponse resp = CMsgEditorAppUi::HandleKeyEventL( aKeyEvent, aType );
hgs
parents:
diff changeset
  2416
hgs
parents:
diff changeset
  2417
        if ( aType == EEventKeyUp )
hgs
parents:
diff changeset
  2418
            {
hgs
parents:
diff changeset
  2419
            // Check if character inserted to controls
hgs
parents:
diff changeset
  2420
            HandleCharInputL();
hgs
parents:
diff changeset
  2421
            }
hgs
parents:
diff changeset
  2422
hgs
parents:
diff changeset
  2423
        return resp;
hgs
parents:
diff changeset
  2424
        }
hgs
parents:
diff changeset
  2425
    else
hgs
parents:
diff changeset
  2426
        {
hgs
parents:
diff changeset
  2427
        return CMsgEditorAppUi::HandleKeyEventL(aKeyEvent, aType);
hgs
parents:
diff changeset
  2428
        }
hgs
parents:
diff changeset
  2429
    }
hgs
parents:
diff changeset
  2430
hgs
parents:
diff changeset
  2431
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2432
// CUniEditorAppUi::HandleCharInputL
hgs
parents:
diff changeset
  2433
// Updates model
hgs
parents:
diff changeset
  2434
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2435
//
hgs
parents:
diff changeset
  2436
void CUniEditorAppUi::HandleCharInputL()
hgs
parents:
diff changeset
  2437
    {
hgs
parents:
diff changeset
  2438
    if ( IsLaunched() )
hgs
parents:
diff changeset
  2439
        {
hgs
parents:
diff changeset
  2440
        CMsgBaseControl* ctrl = iView->FocusedControl();
hgs
parents:
diff changeset
  2441
        TBool changed = EFalse;
hgs
parents:
diff changeset
  2442
hgs
parents:
diff changeset
  2443
        if ( ctrl )
hgs
parents:
diff changeset
  2444
            {
hgs
parents:
diff changeset
  2445
            switch ( ctrl->ControlId() )
hgs
parents:
diff changeset
  2446
                {
hgs
parents:
diff changeset
  2447
                case EMsgComponentIdTo:
hgs
parents:
diff changeset
  2448
                case EMsgComponentIdCc:
hgs
parents:
diff changeset
  2449
                case EMsgComponentIdBcc:
hgs
parents:
diff changeset
  2450
                    {
hgs
parents:
diff changeset
  2451
                    if ( ctrl->IsModified() )
hgs
parents:
diff changeset
  2452
                        {
hgs
parents:
diff changeset
  2453
                        Document()->SetHeaderModified( ETrue );
hgs
parents:
diff changeset
  2454
                        CheckHeaderForMessageTypeL();
hgs
parents:
diff changeset
  2455
                        changed = ETrue;
hgs
parents:
diff changeset
  2456
                        }
hgs
parents:
diff changeset
  2457
                    SetAddressSize();
hgs
parents:
diff changeset
  2458
                    break;
hgs
parents:
diff changeset
  2459
                    }
hgs
parents:
diff changeset
  2460
                case EMsgComponentIdSubject:
hgs
parents:
diff changeset
  2461
                    {
hgs
parents:
diff changeset
  2462
                    if ( ctrl->IsModified() )
hgs
parents:
diff changeset
  2463
                        {
hgs
parents:
diff changeset
  2464
                        Document()->SetHeaderModified( ETrue );
hgs
parents:
diff changeset
  2465
                        changed = ETrue;
hgs
parents:
diff changeset
  2466
                        }
hgs
parents:
diff changeset
  2467
                        
hgs
parents:
diff changeset
  2468
                    SetSubjectSize();
hgs
parents:
diff changeset
  2469
                    CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
  2470
                    CheckMaxSmsSizeAndShowNoteL();
hgs
parents:
diff changeset
  2471
                    SetOrRemoveMaxSizeInEdwin();
hgs
parents:
diff changeset
  2472
                    break;
hgs
parents:
diff changeset
  2473
                    }
hgs
parents:
diff changeset
  2474
                case EMsgComponentIdBody:
hgs
parents:
diff changeset
  2475
                    {
hgs
parents:
diff changeset
  2476
                    if ( ctrl->IsModified() )
hgs
parents:
diff changeset
  2477
                        {
hgs
parents:
diff changeset
  2478
                        UpdateSmilTextAttaL();
hgs
parents:
diff changeset
  2479
                        Document()->SetBodyModified( ETrue );
hgs
parents:
diff changeset
  2480
                        CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
  2481
                        CheckMaxSmsSizeAndShowNoteL();
hgs
parents:
diff changeset
  2482
                        SetOrRemoveMaxSizeInEdwin();
hgs
parents:
diff changeset
  2483
                        changed = ETrue;
hgs
parents:
diff changeset
  2484
                        }
hgs
parents:
diff changeset
  2485
                    break;
hgs
parents:
diff changeset
  2486
                    }
hgs
parents:
diff changeset
  2487
                default:
hgs
parents:
diff changeset
  2488
                    {
hgs
parents:
diff changeset
  2489
                    // Text control not focused.
hgs
parents:
diff changeset
  2490
                    break;
hgs
parents:
diff changeset
  2491
                    }
hgs
parents:
diff changeset
  2492
                }
hgs
parents:
diff changeset
  2493
            }
hgs
parents:
diff changeset
  2494
            
hgs
parents:
diff changeset
  2495
        if ( changed )
hgs
parents:
diff changeset
  2496
            {
hgs
parents:
diff changeset
  2497
            MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  2498
            }
hgs
parents:
diff changeset
  2499
        }
hgs
parents:
diff changeset
  2500
    }
hgs
parents:
diff changeset
  2501
hgs
parents:
diff changeset
  2502
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2503
// CUniEditorAppUi::HandleForegroundEventL
hgs
parents:
diff changeset
  2504
// 
hgs
parents:
diff changeset
  2505
// Updates navipane at editor start when launched from 
hgs
parents:
diff changeset
  2506
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2507
//
hgs
parents:
diff changeset
  2508
void CUniEditorAppUi::HandleForegroundEventL( TBool aForeground )
hgs
parents:
diff changeset
  2509
    {
hgs
parents:
diff changeset
  2510
    UNILOGGER_WRITE( "-> CUniEditorAppUi::HandleForegroundEventL" );
hgs
parents:
diff changeset
  2511
    
hgs
parents:
diff changeset
  2512
    CAknAppUi::HandleForegroundEventL( aForeground );
hgs
parents:
diff changeset
  2513
    
hgs
parents:
diff changeset
  2514
    if ( IsLaunched() &&
hgs
parents:
diff changeset
  2515
         aForeground && 
hgs
parents:
diff changeset
  2516
         !IsDisplayingDialog() &&
hgs
parents:
diff changeset
  2517
         !( iEditorFlags & ( EEditorExiting | EEditorClosing ) ) )
hgs
parents:
diff changeset
  2518
        {
hgs
parents:
diff changeset
  2519
        // This must be init.. not MsgLen... Otherwise returning
hgs
parents:
diff changeset
  2520
        // from embedded app loses msglength
hgs
parents:
diff changeset
  2521
        InitNaviPaneL();
hgs
parents:
diff changeset
  2522
        }
hgs
parents:
diff changeset
  2523
    
hgs
parents:
diff changeset
  2524
    UNILOGGER_WRITE( "-> CUniEditorAppUi::HandleForegroundEventL" );
hgs
parents:
diff changeset
  2525
    }
hgs
parents:
diff changeset
  2526
hgs
parents:
diff changeset
  2527
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2528
// CUniEditorAppUi::UpdateSmilTextAttaL
hgs
parents:
diff changeset
  2529
// 
hgs
parents:
diff changeset
  2530
// NOTE: This function should only be called when text is 
hgs
parents:
diff changeset
  2531
//       added/removed to/from bodycontrol.
hgs
parents:
diff changeset
  2532
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2533
//
hgs
parents:
diff changeset
  2534
void CUniEditorAppUi::UpdateSmilTextAttaL()
hgs
parents:
diff changeset
  2535
    {
hgs
parents:
diff changeset
  2536
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  2537
    
hgs
parents:
diff changeset
  2538
    TInt slideNum = Document()->CurrentSlide();
hgs
parents:
diff changeset
  2539
    if ( slideNum < 0 || slideNum >= iSmilModel->SlideCount() )
hgs
parents:
diff changeset
  2540
        {
hgs
parents:
diff changeset
  2541
        return;
hgs
parents:
diff changeset
  2542
        }
hgs
parents:
diff changeset
  2543
    
hgs
parents:
diff changeset
  2544
    // Update smilmodel
hgs
parents:
diff changeset
  2545
    if ( !BodyCtrl() || 
hgs
parents:
diff changeset
  2546
         BodyCtrl()->TextContent().DocumentLength() == 0 )
hgs
parents:
diff changeset
  2547
        {
hgs
parents:
diff changeset
  2548
        // Body control does not exist or it is empty
hgs
parents:
diff changeset
  2549
        CUniObject* obj = iSmilModel->GetObject( slideNum, EUniRegionText );
hgs
parents:
diff changeset
  2550
        if ( obj )
hgs
parents:
diff changeset
  2551
            {
hgs
parents:
diff changeset
  2552
            // If there is text atta in presentation it should be removed.
hgs
parents:
diff changeset
  2553
            // Note: Text atta is not removed from store at this point (removed in save)
hgs
parents:
diff changeset
  2554
            iSmilModel->RemoveObjectL( slideNum, obj );
hgs
parents:
diff changeset
  2555
            }
hgs
parents:
diff changeset
  2556
        }
hgs
parents:
diff changeset
  2557
    else
hgs
parents:
diff changeset
  2558
        {
hgs
parents:
diff changeset
  2559
        // Text added -> see if model already has text atta
hgs
parents:
diff changeset
  2560
        if ( !iSmilModel->GetObject( slideNum, EUniRegionText ) )
hgs
parents:
diff changeset
  2561
            {
hgs
parents:
diff changeset
  2562
            if ( !iSmilModel->IsSlide( slideNum ) )
hgs
parents:
diff changeset
  2563
                {
hgs
parents:
diff changeset
  2564
                // Add slide
hgs
parents:
diff changeset
  2565
                iSmilModel->AddSlideL( slideNum );
hgs
parents:
diff changeset
  2566
                }
hgs
parents:
diff changeset
  2567
            iSmilModel->AddTextObjectL( slideNum,
hgs
parents:
diff changeset
  2568
                                        &( BodyCtrl()->Editor() ) );
hgs
parents:
diff changeset
  2569
            }
hgs
parents:
diff changeset
  2570
        }
hgs
parents:
diff changeset
  2571
    }
hgs
parents:
diff changeset
  2572
hgs
parents:
diff changeset
  2573
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2574
// CUniEditorAppUi::DynInitMenuPaneL
hgs
parents:
diff changeset
  2575
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2576
//
hgs
parents:
diff changeset
  2577
void CUniEditorAppUi::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
  2578
    {
hgs
parents:
diff changeset
  2579
    // Confirm app is running properly (needed atleast now)
hgs
parents:
diff changeset
  2580
    if ( !IsLaunched() )
hgs
parents:
diff changeset
  2581
        {
hgs
parents:
diff changeset
  2582
        // If not, hide everything and return
hgs
parents:
diff changeset
  2583
        TInt amountOfItems = aMenuPane->NumberOfItemsInPane();
hgs
parents:
diff changeset
  2584
        if ( amountOfItems )
hgs
parents:
diff changeset
  2585
            {
hgs
parents:
diff changeset
  2586
            aMenuPane->DeleteBetweenMenuItems( 0, amountOfItems-1 );
hgs
parents:
diff changeset
  2587
            }
hgs
parents:
diff changeset
  2588
        return;
hgs
parents:
diff changeset
  2589
        }
hgs
parents:
diff changeset
  2590
hgs
parents:
diff changeset
  2591
    TUint32 objects = ObjectsAvailable();
hgs
parents:
diff changeset
  2592
hgs
parents:
diff changeset
  2593
    switch ( aResourceId ) 
hgs
parents:
diff changeset
  2594
        {
hgs
parents:
diff changeset
  2595
        case R_UNIEDITOR_MAIN_MENU:
hgs
parents:
diff changeset
  2596
            {
hgs
parents:
diff changeset
  2597
            // Features always visible:
hgs
parents:
diff changeset
  2598
            // EEikCmdExit
hgs
parents:
diff changeset
  2599
            // EUniCmdSendingOptions
hgs
parents:
diff changeset
  2600
            // EUniCmdMessageInfo
hgs
parents:
diff changeset
  2601
hgs
parents:
diff changeset
  2602
            // Features checked commonly
hgs
parents:
diff changeset
  2603
            if ( !( iSupportedFeatures & EUniFeatureHelp ) )
hgs
parents:
diff changeset
  2604
                { 
hgs
parents:
diff changeset
  2605
                // Help
hgs
parents:
diff changeset
  2606
                aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
hgs
parents:
diff changeset
  2607
                }
hgs
parents:
diff changeset
  2608
                
hgs
parents:
diff changeset
  2609
            // Features in locked SMS mode
hgs
parents:
diff changeset
  2610
            if ( IsHardcodedSms() )
hgs
parents:
diff changeset
  2611
                { 
hgs
parents:
diff changeset
  2612
                // Dim these items always in locked SMS mode
hgs
parents:
diff changeset
  2613
hgs
parents:
diff changeset
  2614
                aMenuPane->SetItemDimmed( EUniCmdPlayPreview, ETrue );
hgs
parents:
diff changeset
  2615
                aMenuPane->SetItemDimmed( EUniCmdSendMMS, ETrue );
hgs
parents:
diff changeset
  2616
                aMenuPane->SetItemDimmed( EUniCmdInsertMedia, ETrue );
hgs
parents:
diff changeset
  2617
                aMenuPane->SetItemDimmed( EUniCmdPlaceTextFirst, ETrue );
hgs
parents:
diff changeset
  2618
                aMenuPane->SetItemDimmed( EUniCmdPlaceTextSecond, ETrue );
hgs
parents:
diff changeset
  2619
                aMenuPane->SetItemDimmed( EUniCmdMovePage, ETrue );
hgs
parents:
diff changeset
  2620
                aMenuPane->SetItemDimmed( EUniCmdSelectPage, ETrue );
hgs
parents:
diff changeset
  2621
                aMenuPane->SetItemDimmed( EUniCmdChangePriority, ETrue );
hgs
parents:
diff changeset
  2622
                
hgs
parents:
diff changeset
  2623
                if ( Document()->DataModel()->ObjectList().Count() == 0 &&
hgs
parents:
diff changeset
  2624
                     Document()->DataModel()->AttachmentList().Count() == 0 )
hgs
parents:
diff changeset
  2625
                    {   
hgs
parents:
diff changeset
  2626
                    // If no objects -> hide the option
hgs
parents:
diff changeset
  2627
                    aMenuPane->SetItemDimmed( EUniCmdObjects, ETrue );
hgs
parents:
diff changeset
  2628
                    }
hgs
parents:
diff changeset
  2629
                
hgs
parents:
diff changeset
  2630
                if ( !Document()->EmailOverSmsSupported() ||
hgs
parents:
diff changeset
  2631
                     ( iHeader &&  
hgs
parents:
diff changeset
  2632
                       !( iHeader->AddHeadersVariation() & EUniFeatureSubjectConfigurable ) ) )
hgs
parents:
diff changeset
  2633
                    { 
hgs
parents:
diff changeset
  2634
                    // Locked SMS and no email over sms or email over SMS without selectable subject.
hgs
parents:
diff changeset
  2635
                    aMenuPane->SetItemDimmed( EUniCmdAddHeaders, ETrue );
hgs
parents:
diff changeset
  2636
                    }
hgs
parents:
diff changeset
  2637
                
hgs
parents:
diff changeset
  2638
                if ( !BodyCtrl() )
hgs
parents:
diff changeset
  2639
                    {
hgs
parents:
diff changeset
  2640
                    aMenuPane->SetItemDimmed( EUniCmdRemoveSubmenu, ETrue );                    
hgs
parents:
diff changeset
  2641
                    aMenuPane->SetItemDimmed( EUniCmdInsertSubmenu, ETrue );
hgs
parents:
diff changeset
  2642
                    }
hgs
parents:
diff changeset
  2643
                else if ( BodyCtrlEditor()->TextLength() == 0 )
hgs
parents:
diff changeset
  2644
                    {
hgs
parents:
diff changeset
  2645
                    aMenuPane->SetItemDimmed( EUniCmdRemoveSubmenu, ETrue );                    
hgs
parents:
diff changeset
  2646
                    }
hgs
parents:
diff changeset
  2647
                }
hgs
parents:
diff changeset
  2648
            else if ( TUniMsvEntry::IsMmsUpload( Document()->Entry() ) )
hgs
parents:
diff changeset
  2649
                {
hgs
parents:
diff changeset
  2650
                // MMS upload message
hgs
parents:
diff changeset
  2651
                aMenuPane->SetItemDimmed( EUniCmdInsertSubmenu, ETrue );
hgs
parents:
diff changeset
  2652
                aMenuPane->SetItemDimmed( EUniCmdAddHeaders, ETrue );
hgs
parents:
diff changeset
  2653
                aMenuPane->SetItemDimmed( EUniCmdAddRecipient, ETrue );                                    
hgs
parents:
diff changeset
  2654
                aMenuPane->SetItemDimmed( EUniCmdChangePriority, ETrue );
hgs
parents:
diff changeset
  2655
                
hgs
parents:
diff changeset
  2656
                if ( Document()->DataModel()->ObjectList().Count() == 0 &&
hgs
parents:
diff changeset
  2657
                     Document()->DataModel()->AttachmentList().Count() == 0 )
hgs
parents:
diff changeset
  2658
                    {   
hgs
parents:
diff changeset
  2659
                    // If no objects -> hide the option
hgs
parents:
diff changeset
  2660
                    aMenuPane->SetItemDimmed( EUniCmdObjects, ETrue );
hgs
parents:
diff changeset
  2661
                    }
hgs
parents:
diff changeset
  2662
                    
hgs
parents:
diff changeset
  2663
                DynInitFocusedMediaBasedOptionsL( aMenuPane );
hgs
parents:
diff changeset
  2664
                }
hgs
parents:
diff changeset
  2665
            else 
hgs
parents:
diff changeset
  2666
                {
hgs
parents:
diff changeset
  2667
                // It's automatic mode
hgs
parents:
diff changeset
  2668
                aMenuPane->SetItemDimmed( EUniCmdInsertSubmenu, ETrue );
hgs
parents:
diff changeset
  2669
                
hgs
parents:
diff changeset
  2670
                if ( Document()->DataModel()->ObjectList().Count() == 0 &&
hgs
parents:
diff changeset
  2671
                     Document()->DataModel()->AttachmentList().Count() == 0 )
hgs
parents:
diff changeset
  2672
                    {   // If no objects -> hide the option
hgs
parents:
diff changeset
  2673
                    aMenuPane->SetItemDimmed( EUniCmdObjects, ETrue );
hgs
parents:
diff changeset
  2674
                    }
hgs
parents:
diff changeset
  2675
                    
hgs
parents:
diff changeset
  2676
                if ( Document()->UniState() == EUniSms )
hgs
parents:
diff changeset
  2677
                    {
hgs
parents:
diff changeset
  2678
                    // It's currently a SMS message
hgs
parents:
diff changeset
  2679
hgs
parents:
diff changeset
  2680
                    aMenuPane->SetItemDimmed( EUniCmdPlayPreview, ETrue );
hgs
parents:
diff changeset
  2681
                    aMenuPane->SetItemDimmed( EUniCmdSendMMS, ETrue );
hgs
parents:
diff changeset
  2682
                    aMenuPane->SetItemDimmed( EUniCmdPlaceTextFirst, ETrue );
hgs
parents:
diff changeset
  2683
                    aMenuPane->SetItemDimmed( EUniCmdPlaceTextSecond, ETrue );
hgs
parents:
diff changeset
  2684
                    aMenuPane->SetItemDimmed( EUniCmdPlayPreview, ETrue );                    
hgs
parents:
diff changeset
  2685
                    aMenuPane->SetItemDimmed( EUniCmdMovePage, ETrue );  
hgs
parents:
diff changeset
  2686
                    aMenuPane->SetItemDimmed( EUniCmdSelectPage, ETrue );                    
hgs
parents:
diff changeset
  2687
                    aMenuPane->SetItemDimmed( EUniCmdChangePriority, ETrue );
hgs
parents:
diff changeset
  2688
                    if ( !BodyCtrlEditor() || BodyCtrlEditor()->TextLength() == 0 )
hgs
parents:
diff changeset
  2689
                        {
hgs
parents:
diff changeset
  2690
                        aMenuPane->SetItemDimmed( EUniCmdRemoveSubmenu, ETrue );                    
hgs
parents:
diff changeset
  2691
                        }
hgs
parents:
diff changeset
  2692
                    }
hgs
parents:
diff changeset
  2693
                else
hgs
parents:
diff changeset
  2694
                    { 
hgs
parents:
diff changeset
  2695
                    // It's currently a MMS message
hgs
parents:
diff changeset
  2696
					/*
hgs
parents:
diff changeset
  2697
                     * Do not show "Sending Options" menu item if:
hgs
parents:
diff changeset
  2698
                     * 1. It is a MMS and
hgs
parents:
diff changeset
  2699
                     * 2. The feature flag MpMessagingHideMessageTypeId is set
hgs
parents:
diff changeset
  2700
                     * This is because when we are composing a MMS, 
hgs
parents:
diff changeset
  2701
                     * "Character Support" option is not displayed in "Sending Options"
hgs
parents:
diff changeset
  2702
                     * and because of this flag, we are not going to show "Message Type"
hgs
parents:
diff changeset
  2703
                     * option as well - resulting in an empty "Sendings Options" dialog.
hgs
parents:
diff changeset
  2704
                     * Therefore, it was decided to hide this menu option when
hgs
parents:
diff changeset
  2705
                     * composing a MMS (if flag is defined)
hgs
parents:
diff changeset
  2706
                     */
hgs
parents:
diff changeset
  2707
                    if ( iEditorFlags & EHideMessageTypeOption ||
hgs
parents:
diff changeset
  2708
                         iMtm->MessageTypeLocking() == EUniMessageTypeLocked )
hgs
parents:
diff changeset
  2709
                        {
hgs
parents:
diff changeset
  2710
                        // Also, if message is permanently locked ( to mms ) -> no sending options
hgs
parents:
diff changeset
  2711
                        aMenuPane->SetItemDimmed( EUniCmdSendingOptions, ETrue );
hgs
parents:
diff changeset
  2712
                        }
hgs
parents:
diff changeset
  2713
                        
hgs
parents:
diff changeset
  2714
                    if ( !(iSupportedFeatures & EUniFeaturePriority) )
hgs
parents:
diff changeset
  2715
                        {
hgs
parents:
diff changeset
  2716
                        aMenuPane->SetItemDimmed( EUniCmdChangePriority, ETrue );
hgs
parents:
diff changeset
  2717
                        }
hgs
parents:
diff changeset
  2718
                        
hgs
parents:
diff changeset
  2719
                    // Always visible in MMS message:
hgs
parents:
diff changeset
  2720
                    // EUniCmdAddRecipient
hgs
parents:
diff changeset
  2721
                    if ( iHeader &&  
hgs
parents:
diff changeset
  2722
                         !iHeader->AddHeadersVariation() )
hgs
parents:
diff changeset
  2723
                        {
hgs
parents:
diff changeset
  2724
                        aMenuPane->SetItemDimmed( EUniCmdAddHeaders, ETrue );
hgs
parents:
diff changeset
  2725
                        }
hgs
parents:
diff changeset
  2726
                        
hgs
parents:
diff changeset
  2727
                    DynInitFocusedMediaBasedOptionsL( aMenuPane );
hgs
parents:
diff changeset
  2728
                    }
hgs
parents:
diff changeset
  2729
                }
hgs
parents:
diff changeset
  2730
            break;
hgs
parents:
diff changeset
  2731
            }
hgs
parents:
diff changeset
  2732
        case R_UNIEDITOR_REMOVE_SUBMENU:
hgs
parents:
diff changeset
  2733
            {
hgs
parents:
diff changeset
  2734
            // Remove submenu is visible only for MMS SMIL messages
hgs
parents:
diff changeset
  2735
            if ( !( objects & EUniImageFlag &&
hgs
parents:
diff changeset
  2736
                    Document()->DataModel()->SmilType() == EMmsSmil ) )
hgs
parents:
diff changeset
  2737
                {
hgs
parents:
diff changeset
  2738
                aMenuPane->SetItemDimmed( EUniCmdRemoveImage, ETrue );
hgs
parents:
diff changeset
  2739
                }
hgs
parents:
diff changeset
  2740
            if ( !( objects & EUniAudioFlag ) ) 
hgs
parents:
diff changeset
  2741
                {
hgs
parents:
diff changeset
  2742
                aMenuPane->SetItemDimmed( EUniCmdRemoveAudio, ETrue );
hgs
parents:
diff changeset
  2743
                }
hgs
parents:
diff changeset
  2744
            if ( !( objects & EUniVideoFlag ) ) 
hgs
parents:
diff changeset
  2745
                {
hgs
parents:
diff changeset
  2746
                aMenuPane->SetItemDimmed( EUniCmdRemoveVideo, ETrue );
hgs
parents:
diff changeset
  2747
                }
hgs
parents:
diff changeset
  2748
            if ( !( objects & EUniTextFlag ) ) 
hgs
parents:
diff changeset
  2749
                {
hgs
parents:
diff changeset
  2750
                aMenuPane->SetItemDimmed( EUniCmdRemoveText, ETrue );
hgs
parents:
diff changeset
  2751
                }
hgs
parents:
diff changeset
  2752
            if ( !( objects & EUniSvgFlag ) ) 
hgs
parents:
diff changeset
  2753
                {
hgs
parents:
diff changeset
  2754
                aMenuPane->SetItemDimmed( EUniCmdRemoveSvg, ETrue );
hgs
parents:
diff changeset
  2755
                }
hgs
parents:
diff changeset
  2756
                
hgs
parents:
diff changeset
  2757
            if ( Document()->DataModel()->SmilType() != ETemplateSmil &&
hgs
parents:
diff changeset
  2758
                 Document()->DataModel()->SmilType() != E3GPPSmil )
hgs
parents:
diff changeset
  2759
                {
hgs
parents:
diff changeset
  2760
                aMenuPane->SetItemDimmed( EUniCmdRemovePres, ETrue );
hgs
parents:
diff changeset
  2761
                }
hgs
parents:
diff changeset
  2762
                
hgs
parents:
diff changeset
  2763
            if ( iSmilModel->SlideCount() <= 1 )
hgs
parents:
diff changeset
  2764
                {
hgs
parents:
diff changeset
  2765
                aMenuPane->SetItemDimmed( EUniCmdRemovePage, ETrue );
hgs
parents:
diff changeset
  2766
                }
hgs
parents:
diff changeset
  2767
                
hgs
parents:
diff changeset
  2768
            break;
hgs
parents:
diff changeset
  2769
            }
hgs
parents:
diff changeset
  2770
        case R_UNIEDITOR_CONTEXT_MENU:
hgs
parents:
diff changeset
  2771
            {
hgs
parents:
diff changeset
  2772
            if ( Document()->UniState() == EUniSms )
hgs
parents:
diff changeset
  2773
                {
hgs
parents:
diff changeset
  2774
                aMenuPane->SetItemDimmed( EUniCmdSendMMS, ETrue );
hgs
parents:
diff changeset
  2775
                }
hgs
parents:
diff changeset
  2776
            else
hgs
parents:
diff changeset
  2777
                {
hgs
parents:
diff changeset
  2778
                aMenuPane->SetItemDimmed( EUniCmdSendSMS, ETrue );
hgs
parents:
diff changeset
  2779
                }
hgs
parents:
diff changeset
  2780
            
hgs
parents:
diff changeset
  2781
            if ( IsHardcodedSms() )
hgs
parents:
diff changeset
  2782
                {
hgs
parents:
diff changeset
  2783
                aMenuPane->SetItemDimmed( EUniCmdInsertMedia, ETrue );
hgs
parents:
diff changeset
  2784
                }
hgs
parents:
diff changeset
  2785
            
hgs
parents:
diff changeset
  2786
            if ( !( iSupportedFeatures & EUniFeatureJapanese ) ||
hgs
parents:
diff changeset
  2787
                 iSmilModel->SlideCount() <= 1 )
hgs
parents:
diff changeset
  2788
                {
hgs
parents:
diff changeset
  2789
                // Only shown on Japanese variant.
hgs
parents:
diff changeset
  2790
                aMenuPane->SetItemDimmed( EUniCmdSelectPage, ETrue );
hgs
parents:
diff changeset
  2791
                }
hgs
parents:
diff changeset
  2792
            
hgs
parents:
diff changeset
  2793
            break;
hgs
parents:
diff changeset
  2794
            }
hgs
parents:
diff changeset
  2795
        case R_UNIEDITOR_ZOOM_SUBMENU:
hgs
parents:
diff changeset
  2796
            {
hgs
parents:
diff changeset
  2797
            TInt zoomLevel = KErrGeneral;
hgs
parents:
diff changeset
  2798
            iMsgEditorAppUiExtension->iSettingCachePlugin.GetValue( KAknLocalZoomLayoutSwitch, 
hgs
parents:
diff changeset
  2799
                                                                    zoomLevel );
hgs
parents:
diff changeset
  2800
            switch ( zoomLevel )
hgs
parents:
diff changeset
  2801
                {
hgs
parents:
diff changeset
  2802
                case EAknUiZoomAutomatic:
hgs
parents:
diff changeset
  2803
                    {
hgs
parents:
diff changeset
  2804
                    aMenuPane->SetItemButtonState( EMsgDispSizeAutomatic,
hgs
parents:
diff changeset
  2805
                                                   EEikMenuItemSymbolOn );
hgs
parents:
diff changeset
  2806
                    break;
hgs
parents:
diff changeset
  2807
                    }
hgs
parents:
diff changeset
  2808
                case EAknUiZoomNormal:
hgs
parents:
diff changeset
  2809
                    {
hgs
parents:
diff changeset
  2810
                    aMenuPane->SetItemButtonState( EMsgDispSizeNormal,
hgs
parents:
diff changeset
  2811
                                                   EEikMenuItemSymbolOn );
hgs
parents:
diff changeset
  2812
                    break;
hgs
parents:
diff changeset
  2813
                    }
hgs
parents:
diff changeset
  2814
                case EAknUiZoomSmall:
hgs
parents:
diff changeset
  2815
                    {
hgs
parents:
diff changeset
  2816
                    aMenuPane->SetItemButtonState( EMsgDispSizeSmall,
hgs
parents:
diff changeset
  2817
                                                   EEikMenuItemSymbolOn );
hgs
parents:
diff changeset
  2818
                    break;
hgs
parents:
diff changeset
  2819
                    }
hgs
parents:
diff changeset
  2820
                case EAknUiZoomLarge:
hgs
parents:
diff changeset
  2821
                    {
hgs
parents:
diff changeset
  2822
                    aMenuPane->SetItemButtonState( EMsgDispSizeLarge,
hgs
parents:
diff changeset
  2823
                                                   EEikMenuItemSymbolOn );
hgs
parents:
diff changeset
  2824
                    break;
hgs
parents:
diff changeset
  2825
                    }
hgs
parents:
diff changeset
  2826
                default:
hgs
parents:
diff changeset
  2827
                    {
hgs
parents:
diff changeset
  2828
                    break;
hgs
parents:
diff changeset
  2829
                    }
hgs
parents:
diff changeset
  2830
                }
hgs
parents:
diff changeset
  2831
            break;
hgs
parents:
diff changeset
  2832
            }
hgs
parents:
diff changeset
  2833
        default:
hgs
parents:
diff changeset
  2834
            {
hgs
parents:
diff changeset
  2835
            break;
hgs
parents:
diff changeset
  2836
            }
hgs
parents:
diff changeset
  2837
        }
hgs
parents:
diff changeset
  2838
    }
hgs
parents:
diff changeset
  2839
hgs
parents:
diff changeset
  2840
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2841
// CUniEditorAppUi::DynInitFocusedMediaBasedOptionsL
hgs
parents:
diff changeset
  2842
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2843
//
hgs
parents:
diff changeset
  2844
void CUniEditorAppUi::DynInitFocusedMediaBasedOptionsL( CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
  2845
    {
hgs
parents:
diff changeset
  2846
    // Lets dim all the context sensitive options first
hgs
parents:
diff changeset
  2847
hgs
parents:
diff changeset
  2848
    aMenuPane->SetItemDimmed( EUniCmdPlayPreview, ETrue );                    
hgs
parents:
diff changeset
  2849
    aMenuPane->SetItemDimmed( EUniCmdSendSMS, ETrue );
hgs
parents:
diff changeset
  2850
    
hgs
parents:
diff changeset
  2851
    // Completely dim PlaceTextFirst and PlaceTextSecond from options menu
hgs
parents:
diff changeset
  2852
    aMenuPane->SetItemDimmed( EUniCmdPlaceTextFirst, ETrue );
hgs
parents:
diff changeset
  2853
    aMenuPane->SetItemDimmed( EUniCmdPlaceTextSecond, ETrue );
hgs
parents:
diff changeset
  2854
hgs
parents:
diff changeset
  2855
    if ( Document()->DataModel()->SmilType() != EMmsSmil ) 
hgs
parents:
diff changeset
  2856
        { 
hgs
parents:
diff changeset
  2857
        // It's 3GPP presentation
hgs
parents:
diff changeset
  2858
        aMenuPane->SetItemDimmed( EUniCmdInsertMedia, ETrue );    
hgs
parents:
diff changeset
  2859
        }
hgs
parents:
diff changeset
  2860
    
hgs
parents:
diff changeset
  2861
    
hgs
parents:
diff changeset
  2862
    /* This code can be used if PlaceTextFirst and PlaceTextSecond 
hgs
parents:
diff changeset
  2863
     * functionality is needed.
hgs
parents:
diff changeset
  2864
     if ( Document()->DataModel()->SmilType() != EMmsSmil ) 
hgs
parents:
diff changeset
  2865
        { 
hgs
parents:
diff changeset
  2866
        // It's 3GPP presentation
hgs
parents:
diff changeset
  2867
        aMenuPane->SetItemDimmed( EUniCmdInsertMedia, ETrue );
hgs
parents:
diff changeset
  2868
        aMenuPane->SetItemDimmed( EUniCmdPlaceTextFirst, ETrue );
hgs
parents:
diff changeset
  2869
        aMenuPane->SetItemDimmed( EUniCmdPlaceTextSecond, ETrue );
hgs
parents:
diff changeset
  2870
        }
hgs
parents:
diff changeset
  2871
      
hgs
parents:
diff changeset
  2872
     else if ( iSupportedFeatures & EUniFeatureJapanese )
hgs
parents:
diff changeset
  2873
        {
hgs
parents:
diff changeset
  2874
        // Not shown on japanese variant ever.
hgs
parents:
diff changeset
  2875
        aMenuPane->SetItemDimmed( EUniCmdPlaceTextFirst, ETrue );
hgs
parents:
diff changeset
  2876
        aMenuPane->SetItemDimmed( EUniCmdPlaceTextSecond, ETrue );        
hgs
parents:
diff changeset
  2877
        }
hgs
parents:
diff changeset
  2878
     else
hgs
parents:
diff changeset
  2879
        {
hgs
parents:
diff changeset
  2880
        if ( iSmilModel->Layout() == EUniImageFirst )
hgs
parents:
diff changeset
  2881
            {
hgs
parents:
diff changeset
  2882
            aMenuPane->SetItemDimmed( EUniCmdPlaceTextSecond, ETrue );
hgs
parents:
diff changeset
  2883
            }
hgs
parents:
diff changeset
  2884
        else
hgs
parents:
diff changeset
  2885
            {
hgs
parents:
diff changeset
  2886
            aMenuPane->SetItemDimmed( EUniCmdPlaceTextFirst, ETrue );
hgs
parents:
diff changeset
  2887
            }
hgs
parents:
diff changeset
  2888
        } */
hgs
parents:
diff changeset
  2889
hgs
parents:
diff changeset
  2890
    if ( Document()->DataModel()->SmilType() != EMmsSmil || 
hgs
parents:
diff changeset
  2891
         iSmilModel->SlideCount() <= 1 )
hgs
parents:
diff changeset
  2892
        { 
hgs
parents:
diff changeset
  2893
        // No move if not MmsSmil or only one page
hgs
parents:
diff changeset
  2894
        aMenuPane->SetItemDimmed( EUniCmdMovePage, ETrue );
hgs
parents:
diff changeset
  2895
        aMenuPane->SetItemDimmed( EUniCmdSelectPage, ETrue );
hgs
parents:
diff changeset
  2896
        }
hgs
parents:
diff changeset
  2897
    else if ( !( iSupportedFeatures & EUniFeatureJapanese ) )
hgs
parents:
diff changeset
  2898
        {
hgs
parents:
diff changeset
  2899
        // Only shown on Japanese variant.
hgs
parents:
diff changeset
  2900
        aMenuPane->SetItemDimmed( EUniCmdSelectPage, ETrue );
hgs
parents:
diff changeset
  2901
        }
hgs
parents:
diff changeset
  2902
    
hgs
parents:
diff changeset
  2903
    if( Document()->DataModel()->SmilType() == EMmsSmil &&
hgs
parents:
diff changeset
  2904
        Document()->DataModel()->ObjectList().Count() == 0 && 
hgs
parents:
diff changeset
  2905
        iSmilModel->SlideCount() == 1 )
hgs
parents:
diff changeset
  2906
        {
hgs
parents:
diff changeset
  2907
        aMenuPane->SetItemDimmed( EUniCmdRemoveSubmenu, ETrue );
hgs
parents:
diff changeset
  2908
        }
hgs
parents:
diff changeset
  2909
    }
hgs
parents:
diff changeset
  2910
hgs
parents:
diff changeset
  2911
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2912
// CUniEditorAppUi::IsMessageEmpty
hgs
parents:
diff changeset
  2913
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2914
//
hgs
parents:
diff changeset
  2915
TBool CUniEditorAppUi::IsMessageEmpty() const 
hgs
parents:
diff changeset
  2916
    {
hgs
parents:
diff changeset
  2917
    TBool smil = EFalse;
hgs
parents:
diff changeset
  2918
    if ( Document()->DataModel()->SmilType() != EMmsSmil &&
hgs
parents:
diff changeset
  2919
         Document()->DataModel()->SmilList().Count() > 0 )
hgs
parents:
diff changeset
  2920
        {
hgs
parents:
diff changeset
  2921
        smil = ETrue;
hgs
parents:
diff changeset
  2922
        }
hgs
parents:
diff changeset
  2923
    return !smil &&
hgs
parents:
diff changeset
  2924
           IsHeaderEmpty() &&
hgs
parents:
diff changeset
  2925
           IsBodyEmpty() &&
hgs
parents:
diff changeset
  2926
           Document()->DataModel()->AttachmentList().Count() == 0;
hgs
parents:
diff changeset
  2927
    }
hgs
parents:
diff changeset
  2928
hgs
parents:
diff changeset
  2929
hgs
parents:
diff changeset
  2930
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2931
// CUniEditorAppUi::DoUserSendL
hgs
parents:
diff changeset
  2932
//
hgs
parents:
diff changeset
  2933
// Message must be unlocked before coming here.
hgs
parents:
diff changeset
  2934
// ---------------------------------------------------------
hgs
parents:
diff changeset
  2935
//
hgs
parents:
diff changeset
  2936
void CUniEditorAppUi::DoUserSendL()
hgs
parents:
diff changeset
  2937
    {
hgs
parents:
diff changeset
  2938
    // Force FEP Update done only when SMIL is not 3GPP SMIL
hgs
parents:
diff changeset
  2939
    if ( Document()->DataModel()->SmilType() == EMmsSmil )
hgs
parents:
diff changeset
  2940
        {
hgs
parents:
diff changeset
  2941
        if ( BodyCtrl() )
hgs
parents:
diff changeset
  2942
            {
hgs
parents:
diff changeset
  2943
            BodyCtrl()->SetFocus( EFalse );
hgs
parents:
diff changeset
  2944
            }
hgs
parents:
diff changeset
  2945
            
hgs
parents:
diff changeset
  2946
        iCoeEnv->SyncNotifyFocusObserversOfChangeInFocus();
hgs
parents:
diff changeset
  2947
        }
hgs
parents:
diff changeset
  2948
    
hgs
parents:
diff changeset
  2949
    TUniState currentState = Document()->UniState();
hgs
parents:
diff changeset
  2950
    if(currentState == EUniMms)
hgs
parents:
diff changeset
  2951
        {
hgs
parents:
diff changeset
  2952
        TInt PrevSlidecount = iSmilModel->SlideCount();
hgs
parents:
diff changeset
  2953
        if( PrevSlidecount > 1 ) //do not delete the empty silde.
hgs
parents:
diff changeset
  2954
            {
hgs
parents:
diff changeset
  2955
            iSmilModel->RemoveEmptySlides();
hgs
parents:
diff changeset
  2956
            }
hgs
parents:
diff changeset
  2957
        if( PrevSlidecount != iSmilModel->SlideCount() )
hgs
parents:
diff changeset
  2958
            {
hgs
parents:
diff changeset
  2959
            Document()->SetBodyModified( ETrue );
hgs
parents:
diff changeset
  2960
            CheckBodyForMessageTypeL();  
hgs
parents:
diff changeset
  2961
            }
hgs
parents:
diff changeset
  2962
        }
hgs
parents:
diff changeset
  2963
    
hgs
parents:
diff changeset
  2964
    TBool modified( EFalse );
hgs
parents:
diff changeset
  2965
    if ( !VerifyAddressesL( modified ) )
hgs
parents:
diff changeset
  2966
        {
hgs
parents:
diff changeset
  2967
        // Invalid recipient found  -> abort sending.
hgs
parents:
diff changeset
  2968
        return;
hgs
parents:
diff changeset
  2969
        }
hgs
parents:
diff changeset
  2970
    
hgs
parents:
diff changeset
  2971
    if ( modified &&
hgs
parents:
diff changeset
  2972
         currentState != Document()->UniState() )
hgs
parents:
diff changeset
  2973
        {
hgs
parents:
diff changeset
  2974
        if ( !ShowConfirmationQueryL( R_UNIEDITOR_MSG_TYPE_CHANGED_WHILE_SENDING ) )
hgs
parents:
diff changeset
  2975
            {
hgs
parents:
diff changeset
  2976
            return;
hgs
parents:
diff changeset
  2977
            }
hgs
parents:
diff changeset
  2978
        }
hgs
parents:
diff changeset
  2979
    
hgs
parents:
diff changeset
  2980
    // Check MMS message size
hgs
parents:
diff changeset
  2981
    if ( TUint( MessageSizeInBytes() ) > Document()->MaxMessageSize() )
hgs
parents:
diff changeset
  2982
        {
hgs
parents:
diff changeset
  2983
        TInt maxInKilos = ( Document()->MaxMessageSize() + KBytesInKilo - 1 ) / KBytesInKilo;
hgs
parents:
diff changeset
  2984
        HBufC* string = StringLoader::LoadLC( R_UNIEDITOR_SEND_BIG_TEXT, 
hgs
parents:
diff changeset
  2985
                                              maxInKilos, 
hgs
parents:
diff changeset
  2986
                                              iCoeEnv );
hgs
parents:
diff changeset
  2987
                                              
hgs
parents:
diff changeset
  2988
        CAknInformationNote* note = new ( ELeave ) CAknInformationNote();
hgs
parents:
diff changeset
  2989
        note->ExecuteLD( *string );
hgs
parents:
diff changeset
  2990
        CleanupStack::PopAndDestroy( string );
hgs
parents:
diff changeset
  2991
        return;
hgs
parents:
diff changeset
  2992
        }
hgs
parents:
diff changeset
  2993
hgs
parents:
diff changeset
  2994
    // Check the max sms size
hgs
parents:
diff changeset
  2995
    CheckMaxSmsSizeAndShowNoteL( ETrue );
hgs
parents:
diff changeset
  2996
hgs
parents:
diff changeset
  2997
    if( iEditorFlags & EMaxSmsSizeNoteShown )
hgs
parents:
diff changeset
  2998
        { 
hgs
parents:
diff changeset
  2999
        // This flag was set by the funtion call above and it means an error note was shown to user
hgs
parents:
diff changeset
  3000
        return;
hgs
parents:
diff changeset
  3001
        }
hgs
parents:
diff changeset
  3002
hgs
parents:
diff changeset
  3003
    if( !CheckMaxRecipientsAndShowNoteL( ETrue ) )
hgs
parents:
diff changeset
  3004
        { 
hgs
parents:
diff changeset
  3005
        // Too many recipients. Info was shown so just return
hgs
parents:
diff changeset
  3006
        return;
hgs
parents:
diff changeset
  3007
        }
hgs
parents:
diff changeset
  3008
    
hgs
parents:
diff changeset
  3009
    CUniEditorPlugin* plugin = NULL;
hgs
parents:
diff changeset
  3010
    TInt resourceId = NULL;
hgs
parents:
diff changeset
  3011
    
hgs
parents:
diff changeset
  3012
    // Get the plugin
hgs
parents:
diff changeset
  3013
    if( Document()->UniState() == EUniSms )
hgs
parents:
diff changeset
  3014
        {
hgs
parents:
diff changeset
  3015
        plugin = SmsPlugin();
hgs
parents:
diff changeset
  3016
        resourceId = R_QTN_MSG_WAIT_SENDING_SMS;
hgs
parents:
diff changeset
  3017
        
hgs
parents:
diff changeset
  3018
        // Ask if it's ok to send the message in N parts
hgs
parents:
diff changeset
  3019
        if( !ConfirmSmsSendInMultiplePartsL() )
hgs
parents:
diff changeset
  3020
            {
hgs
parents:
diff changeset
  3021
            return;
hgs
parents:
diff changeset
  3022
            }
hgs
parents:
diff changeset
  3023
        }
hgs
parents:
diff changeset
  3024
    else
hgs
parents:
diff changeset
  3025
        {
hgs
parents:
diff changeset
  3026
        plugin = MmsPlugin();
hgs
parents:
diff changeset
  3027
        resourceId = R_QTN_MSG_WAIT_SENDING_MMS;
hgs
parents:
diff changeset
  3028
        }
hgs
parents:
diff changeset
  3029
hgs
parents:
diff changeset
  3030
    if( plugin )
hgs
parents:
diff changeset
  3031
        {
hgs
parents:
diff changeset
  3032
        TBool checkEmailSettings = EFalse;
hgs
parents:
diff changeset
  3033
        if( Document()->EmailOverSmsSupported() && iHeader->LongestEmailAddress() )
hgs
parents:
diff changeset
  3034
            {
hgs
parents:
diff changeset
  3035
            checkEmailSettings = ETrue;
hgs
parents:
diff changeset
  3036
            }
hgs
parents:
diff changeset
  3037
        
hgs
parents:
diff changeset
  3038
        if ( iFixedToolbar && !plugin->IsServiceValidL() )
hgs
parents:
diff changeset
  3039
            {
hgs
parents:
diff changeset
  3040
            iFixedToolbar->HideItemsAndDrawOnlyBackground( ETrue );
hgs
parents:
diff changeset
  3041
            }
hgs
parents:
diff changeset
  3042
        
hgs
parents:
diff changeset
  3043
        iEditorFlags |= EToolbarHidden;
hgs
parents:
diff changeset
  3044
        CleanupStack::PushL( TCleanupItem( EnableFixedToolbar, this ) );
hgs
parents:
diff changeset
  3045
        if (!plugin->IsServiceValidL())
hgs
parents:
diff changeset
  3046
        	{
hgs
parents:
diff changeset
  3047
        		SetKeyEventFlags(0);
hgs
parents:
diff changeset
  3048
        	}
hgs
parents:
diff changeset
  3049
            
hgs
parents:
diff changeset
  3050
        CleanupStack::PushL( TCleanupItem( DisableSendKey, this ) );
hgs
parents:
diff changeset
  3051
        
hgs
parents:
diff changeset
  3052
        iMsgLenToVKB = EFalse;
hgs
parents:
diff changeset
  3053
        TBool serviceValid( plugin->ValidateServiceL( checkEmailSettings ) );
hgs
parents:
diff changeset
  3054
        
hgs
parents:
diff changeset
  3055
        CleanupStack::PopAndDestroy(2); //DisableSendKey,EnableFixedToolbar
hgs
parents:
diff changeset
  3056
        
hgs
parents:
diff changeset
  3057
        if( !serviceValid )
hgs
parents:
diff changeset
  3058
            { 
hgs
parents:
diff changeset
  3059
            // Settings are not valid (AP/SC missing)
hgs
parents:
diff changeset
  3060
            iMsgLenToVKB = ETrue;
hgs
parents:
diff changeset
  3061
            return;
hgs
parents:
diff changeset
  3062
            }
hgs
parents:
diff changeset
  3063
        }
hgs
parents:
diff changeset
  3064
    else
hgs
parents:
diff changeset
  3065
        {
hgs
parents:
diff changeset
  3066
        // The plugin is not ok -> cannot send the message
hgs
parents:
diff changeset
  3067
        return;
hgs
parents:
diff changeset
  3068
        }
hgs
parents:
diff changeset
  3069
hgs
parents:
diff changeset
  3070
    if( IsPhoneOfflineL() )
hgs
parents:
diff changeset
  3071
        {
hgs
parents:
diff changeset
  3072
        resourceId = R_QTN_WAIT_MSG_SAVED_OUTBOX;
hgs
parents:
diff changeset
  3073
        }
hgs
parents:
diff changeset
  3074
hgs
parents:
diff changeset
  3075
    if (IsObjectsPathValidL())
hgs
parents:
diff changeset
  3076
        {
hgs
parents:
diff changeset
  3077
    	iSendOperation = CUniEditorSendOperation::NewL( *this,
hgs
parents:
diff changeset
  3078
                                                    	*Document(),
hgs
parents:
diff changeset
  3079
                                                    	*iHeader,
hgs
parents:
diff changeset
  3080
                                                    	*plugin,
hgs
parents:
diff changeset
  3081
                                                    	*iView,
hgs
parents:
diff changeset
  3082
                                                    	FsSession() );
hgs
parents:
diff changeset
  3083
        ActivateInputBlockerL(iSendOperation);
hgs
parents:
diff changeset
  3084
hgs
parents:
diff changeset
  3085
        ShowWaitNoteL(resourceId);
hgs
parents:
diff changeset
  3086
hgs
parents:
diff changeset
  3087
        iEditorFlags |= EEditorClosing;
hgs
parents:
diff changeset
  3088
hgs
parents:
diff changeset
  3089
        iSendOperation->Send();
hgs
parents:
diff changeset
  3090
        }
hgs
parents:
diff changeset
  3091
    else
hgs
parents:
diff changeset
  3092
        {
hgs
parents:
diff changeset
  3093
        if (ShowConfirmationQueryL(R_UNIEDITOR_QUEST_CLOSE_OOD))
hgs
parents:
diff changeset
  3094
            {
hgs
parents:
diff changeset
  3095
            // Exit without saving.
hgs
parents:
diff changeset
  3096
            Exit(EAknSoftkeyClose);
hgs
parents:
diff changeset
  3097
            }
hgs
parents:
diff changeset
  3098
        //else nothing.
hgs
parents:
diff changeset
  3099
        }
hgs
parents:
diff changeset
  3100
    }
hgs
parents:
diff changeset
  3101
hgs
parents:
diff changeset
  3102
hgs
parents:
diff changeset
  3103
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3104
// CUniEditorAppUi::DoMsgSaveExitL
hgs
parents:
diff changeset
  3105
// Exit from option menu 
hgs
parents:
diff changeset
  3106
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3107
//
hgs
parents:
diff changeset
  3108
void CUniEditorAppUi::DoMsgSaveExitL() 
hgs
parents:
diff changeset
  3109
    {
hgs
parents:
diff changeset
  3110
    if ( CAknEnv::AppWithShutterRunning() )
hgs
parents:
diff changeset
  3111
        {
hgs
parents:
diff changeset
  3112
        iEditorFlags |= ERunAppShutterAtExit;
hgs
parents:
diff changeset
  3113
        }
hgs
parents:
diff changeset
  3114
    
hgs
parents:
diff changeset
  3115
    delete iLaunchOperation;
hgs
parents:
diff changeset
  3116
    iLaunchOperation = NULL;
hgs
parents:
diff changeset
  3117
    
hgs
parents:
diff changeset
  3118
    delete iSendOperation;
hgs
parents:
diff changeset
  3119
    iSendOperation = NULL;
hgs
parents:
diff changeset
  3120
    
hgs
parents:
diff changeset
  3121
    delete iInsertOperation;
hgs
parents:
diff changeset
  3122
    iInsertOperation = NULL;        
hgs
parents:
diff changeset
  3123
    
hgs
parents:
diff changeset
  3124
    delete iChangeSlideOperation;
hgs
parents:
diff changeset
  3125
    iChangeSlideOperation = NULL;
hgs
parents:
diff changeset
  3126
    
hgs
parents:
diff changeset
  3127
    delete iVCardOperation;
hgs
parents:
diff changeset
  3128
    iVCardOperation = NULL;
hgs
parents:
diff changeset
  3129
    
hgs
parents:
diff changeset
  3130
    if ( IsMessageEmpty() )
hgs
parents:
diff changeset
  3131
        {
hgs
parents:
diff changeset
  3132
        DeleteCurrentEntryL();
hgs
parents:
diff changeset
  3133
        }
hgs
parents:
diff changeset
  3134
    else if ( ( Document()->Modified() || 
hgs
parents:
diff changeset
  3135
                Document()->PrevSaveType() < EClosingSave ) && 
hgs
parents:
diff changeset
  3136
              CanSaveMessageL())
hgs
parents:
diff changeset
  3137
        {
hgs
parents:
diff changeset
  3138
        // Needs saving
hgs
parents:
diff changeset
  3139
        if ( IsForeground() )
hgs
parents:
diff changeset
  3140
            {
hgs
parents:
diff changeset
  3141
            TInt resId = Document()->Saved() ? R_QTN_UNI_WAIT_SAVING_MESSAGE : 
hgs
parents:
diff changeset
  3142
                                               R_QTN_UNI_WAIT_SAVING_MESSAGE_NEW;
hgs
parents:
diff changeset
  3143
            // Cannot trap call below.
hgs
parents:
diff changeset
  3144
            DoSaveL( EClosingSave );
hgs
parents:
diff changeset
  3145
        
hgs
parents:
diff changeset
  3146
            
hgs
parents:
diff changeset
  3147
            ShowWaitNoteL( resId );
hgs
parents:
diff changeset
  3148
            }
hgs
parents:
diff changeset
  3149
        else
hgs
parents:
diff changeset
  3150
            {
hgs
parents:
diff changeset
  3151
            TInt err(KErrNone);
hgs
parents:
diff changeset
  3152
            TRAP( err, DoSaveL( EClosingSave ) );
hgs
parents:
diff changeset
  3153
            }
hgs
parents:
diff changeset
  3154
            
hgs
parents:
diff changeset
  3155
        BeginActiveWait( iSaveOperation );
hgs
parents:
diff changeset
  3156
        }
hgs
parents:
diff changeset
  3157
    
hgs
parents:
diff changeset
  3158
	    // Set the flag to closing state so that closing of object or other open views happen properly
hgs
parents:
diff changeset
  3159
        iEditorFlags |= EEditorClosing;
hgs
parents:
diff changeset
  3160
		// Don't call the app shutter if it is already running.
hgs
parents:
diff changeset
  3161
        if ( iEditorFlags & ERunAppShutterAtExit &&  (! CAknEnv::AppWithShutterRunning()) )
hgs
parents:
diff changeset
  3162
            {
hgs
parents:
diff changeset
  3163
            RunAppShutter();
hgs
parents:
diff changeset
  3164
            }
hgs
parents:
diff changeset
  3165
    }
hgs
parents:
diff changeset
  3166
hgs
parents:
diff changeset
  3167
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3168
// CUniEditorAppUi::ExitAndSaveL
hgs
parents:
diff changeset
  3169
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3170
//
hgs
parents:
diff changeset
  3171
void CUniEditorAppUi::ExitAndSaveL()
hgs
parents:
diff changeset
  3172
    {
hgs
parents:
diff changeset
  3173
    if ( iEditorFlags & EEditorClosing )
hgs
parents:
diff changeset
  3174
        {
hgs
parents:
diff changeset
  3175
        Exit( EAknSoftkeyClose );
hgs
parents:
diff changeset
  3176
        return;
hgs
parents:
diff changeset
  3177
        }
hgs
parents:
diff changeset
  3178
        
hgs
parents:
diff changeset
  3179
    if ( CAknEnv::AppWithShutterRunning() )
hgs
parents:
diff changeset
  3180
        {
hgs
parents:
diff changeset
  3181
        iEditorFlags |= ERunAppShutterAtExit;
hgs
parents:
diff changeset
  3182
        }
hgs
parents:
diff changeset
  3183
    if (IsObjectsPathValidL())
hgs
parents:
diff changeset
  3184
        {
hgs
parents:
diff changeset
  3185
        if (iEditorFlags & ELaunchSuccessful && Document()->MediaAvailable())
hgs
parents:
diff changeset
  3186
            {
hgs
parents:
diff changeset
  3187
            DoMsgSaveExitL();
hgs
parents:
diff changeset
  3188
            }
hgs
parents:
diff changeset
  3189
hgs
parents:
diff changeset
  3190
        // Don't call the Exit if App Shutter is already running
hgs
parents:
diff changeset
  3191
        if( ! CAknEnv::AppWithShutterRunning() )
hgs
parents:
diff changeset
  3192
            {
hgs
parents:
diff changeset
  3193
            Exit();
hgs
parents:
diff changeset
  3194
            }
hgs
parents:
diff changeset
  3195
        }
hgs
parents:
diff changeset
  3196
    else
hgs
parents:
diff changeset
  3197
        {
hgs
parents:
diff changeset
  3198
        if (ShowConfirmationQueryL(R_UNIEDITOR_QUEST_CLOSE_OOD))
hgs
parents:
diff changeset
  3199
            {
hgs
parents:
diff changeset
  3200
            // Exit without saving.
hgs
parents:
diff changeset
  3201
            Exit(EAknSoftkeyClose);
hgs
parents:
diff changeset
  3202
            }
hgs
parents:
diff changeset
  3203
        }
hgs
parents:
diff changeset
  3204
    
hgs
parents:
diff changeset
  3205
    }
hgs
parents:
diff changeset
  3206
hgs
parents:
diff changeset
  3207
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3208
// CUniEditorAppUi::DoBackSaveL
hgs
parents:
diff changeset
  3209
// Back button implementation
hgs
parents:
diff changeset
  3210
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3211
//
hgs
parents:
diff changeset
  3212
void CUniEditorAppUi::DoBackSaveL()
hgs
parents:
diff changeset
  3213
    {
hgs
parents:
diff changeset
  3214
    if ( IsMessageEmpty() ) 
hgs
parents:
diff changeset
  3215
        {
hgs
parents:
diff changeset
  3216
        if ( iMtm->Entry().Entry().Visible() )
hgs
parents:
diff changeset
  3217
            {
hgs
parents:
diff changeset
  3218
            ShowInformationNoteL( R_UNIEDITOR_INFO_DELETED, ETrue );
hgs
parents:
diff changeset
  3219
            }
hgs
parents:
diff changeset
  3220
        DeleteAndExitL();
hgs
parents:
diff changeset
  3221
        }
hgs
parents:
diff changeset
  3222
    else
hgs
parents:
diff changeset
  3223
        {
hgs
parents:
diff changeset
  3224
        TInt closeVal = ShowCloseQueryL();
hgs
parents:
diff changeset
  3225
        if ( closeVal == EMsgCloseCancel )
hgs
parents:
diff changeset
  3226
            {
hgs
parents:
diff changeset
  3227
            return;
hgs
parents:
diff changeset
  3228
            }
hgs
parents:
diff changeset
  3229
        else if ( closeVal == EMsgCloseDelete )
hgs
parents:
diff changeset
  3230
            {
hgs
parents:
diff changeset
  3231
            ReleaseImage( ETrue );
hgs
parents:
diff changeset
  3232
            DeleteAndExitL();
hgs
parents:
diff changeset
  3233
            }
hgs
parents:
diff changeset
  3234
        else // closeVal == EMsgCloseSave
hgs
parents:
diff changeset
  3235
            {
hgs
parents:
diff changeset
  3236
            // Message has data
hgs
parents:
diff changeset
  3237
            if ( Document()->Modified() || Document()->PrevSaveType() < EClosingSave )
hgs
parents:
diff changeset
  3238
                {
hgs
parents:
diff changeset
  3239
                if ( CanSaveMessageL() && IsObjectsPathValidL())                    
hgs
parents:
diff changeset
  3240
                    {
hgs
parents:
diff changeset
  3241
                    TInt resId = Document()->Saved() ? R_QTN_UNI_WAIT_SAVING_MESSAGE : 
hgs
parents:
diff changeset
  3242
                                                       R_QTN_UNI_WAIT_SAVING_MESSAGE_NEW;
hgs
parents:
diff changeset
  3243
                    DoSaveL( EClosingSave );
hgs
parents:
diff changeset
  3244
                    iEditorFlags |= EEditorClosing;
hgs
parents:
diff changeset
  3245
                    
hgs
parents:
diff changeset
  3246
                    ShowWaitNoteL( resId );
hgs
parents:
diff changeset
  3247
                    }
hgs
parents:
diff changeset
  3248
                else
hgs
parents:
diff changeset
  3249
                    {
hgs
parents:
diff changeset
  3250
                    if ( ShowConfirmationQueryL( R_UNIEDITOR_QUEST_CLOSE_OOD ) )
hgs
parents:
diff changeset
  3251
                        {
hgs
parents:
diff changeset
  3252
                        // Exit without saving.
hgs
parents:
diff changeset
  3253
                        Exit( EAknSoftkeyClose );
hgs
parents:
diff changeset
  3254
                        }
hgs
parents:
diff changeset
  3255
                    //else nothing.
hgs
parents:
diff changeset
  3256
                    }
hgs
parents:
diff changeset
  3257
                }
hgs
parents:
diff changeset
  3258
            else
hgs
parents:
diff changeset
  3259
                {
hgs
parents:
diff changeset
  3260
                // No changes -> just go away.
hgs
parents:
diff changeset
  3261
                Exit( EAknSoftkeyClose );
hgs
parents:
diff changeset
  3262
                }
hgs
parents:
diff changeset
  3263
            }
hgs
parents:
diff changeset
  3264
        }
hgs
parents:
diff changeset
  3265
    }   
hgs
parents:
diff changeset
  3266
hgs
parents:
diff changeset
  3267
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3268
// CUniEditorAppUi::CanSaveMessageL
hgs
parents:
diff changeset
  3269
// Checks whether there's enough diskspace to save the
hgs
parents:
diff changeset
  3270
// message.
hgs
parents:
diff changeset
  3271
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3272
//
hgs
parents:
diff changeset
  3273
TBool CUniEditorAppUi::CanSaveMessageL() const
hgs
parents:
diff changeset
  3274
    {
hgs
parents:
diff changeset
  3275
    TInt bytes = Document()->AddressSize() + Document()->SubjectSize();
hgs
parents:
diff changeset
  3276
    
hgs
parents:
diff changeset
  3277
    if ( Document()->DataModel()->SmilType() == EMmsSmil )
hgs
parents:
diff changeset
  3278
        {
hgs
parents:
diff changeset
  3279
        bytes += Document()->DataModel()->ObjectList().SpaceNeededForSaveAll();
hgs
parents:
diff changeset
  3280
        bytes += Document()->DataModel()->AttachmentList().SpaceNeededForSaveAll();
hgs
parents:
diff changeset
  3281
        bytes += iSmilModel->SmilComposeSize();
hgs
parents:
diff changeset
  3282
        }
hgs
parents:
diff changeset
  3283
        
hgs
parents:
diff changeset
  3284
    return !( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL( Document()->Session(),
hgs
parents:
diff changeset
  3285
                                                                   bytes ) );
hgs
parents:
diff changeset
  3286
    }
hgs
parents:
diff changeset
  3287
hgs
parents:
diff changeset
  3288
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3289
// CUniEditorAppUi::DoSaveL
hgs
parents:
diff changeset
  3290
// Saves message to OUTBOX.
hgs
parents:
diff changeset
  3291
// Message should be unlocked before coming here.
hgs
parents:
diff changeset
  3292
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3293
//
hgs
parents:
diff changeset
  3294
void CUniEditorAppUi::DoSaveL( TUniSaveType aSaveType ) 
hgs
parents:
diff changeset
  3295
    {
hgs
parents:
diff changeset
  3296
    if ( iSaveOperation && 
hgs
parents:
diff changeset
  3297
         iSaveOperation->IsActive() )
hgs
parents:
diff changeset
  3298
        {
hgs
parents:
diff changeset
  3299
        // To avoid starting save operation when there is already one running.
hgs
parents:
diff changeset
  3300
        return;
hgs
parents:
diff changeset
  3301
        }
hgs
parents:
diff changeset
  3302
        
hgs
parents:
diff changeset
  3303
    if ( !CanSaveMessageL() )
hgs
parents:
diff changeset
  3304
        {
hgs
parents:
diff changeset
  3305
        User::Leave( KErrDiskFull );
hgs
parents:
diff changeset
  3306
        }
hgs
parents:
diff changeset
  3307
hgs
parents:
diff changeset
  3308
    delete iSaveOperation;
hgs
parents:
diff changeset
  3309
    iSaveOperation = NULL;
hgs
parents:
diff changeset
  3310
    iSaveOperation = CUniEditorSaveOperation::NewL(
hgs
parents:
diff changeset
  3311
        *this,
hgs
parents:
diff changeset
  3312
        *Document(),
hgs
parents:
diff changeset
  3313
        *iHeader,
hgs
parents:
diff changeset
  3314
        *iView,
hgs
parents:
diff changeset
  3315
        FsSession() );
hgs
parents:
diff changeset
  3316
    
hgs
parents:
diff changeset
  3317
    iSaveOperation->Save( aSaveType );
hgs
parents:
diff changeset
  3318
    
hgs
parents:
diff changeset
  3319
    ActivateInputBlockerL( iSaveOperation );
hgs
parents:
diff changeset
  3320
    }
hgs
parents:
diff changeset
  3321
hgs
parents:
diff changeset
  3322
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3323
// CUniEditorAppUi::VerifyAddressesL
hgs
parents:
diff changeset
  3324
//
hgs
parents:
diff changeset
  3325
// Walks thru addresses in addresscontrol and counts errors. 
hgs
parents:
diff changeset
  3326
// If unverified address is valid, marks it validated (verified now). 
hgs
parents:
diff changeset
  3327
// Stops to first error.
hgs
parents:
diff changeset
  3328
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3329
//
hgs
parents:
diff changeset
  3330
TBool CUniEditorAppUi::VerifyAddressesL( TBool& aModified )
hgs
parents:
diff changeset
  3331
    {
hgs
parents:
diff changeset
  3332
    if ( TUniMsvEntry::IsMmsUpload( Document()->Entry() ) )
hgs
parents:
diff changeset
  3333
        {
hgs
parents:
diff changeset
  3334
        // Don't check the recipient in "Upload" case.
hgs
parents:
diff changeset
  3335
        return ETrue;
hgs
parents:
diff changeset
  3336
        }
hgs
parents:
diff changeset
  3337
        
hgs
parents:
diff changeset
  3338
    iCoeEnv->SyncNotifyFocusObserversOfChangeInFocus();
hgs
parents:
diff changeset
  3339
    
hgs
parents:
diff changeset
  3340
    aModified = EFalse;
hgs
parents:
diff changeset
  3341
hgs
parents:
diff changeset
  3342
    TBool retVal = iHeader->VerifyAddressesL( aModified, AcceptEmailAddresses() );
hgs
parents:
diff changeset
  3343
hgs
parents:
diff changeset
  3344
    if ( aModified )
hgs
parents:
diff changeset
  3345
        {
hgs
parents:
diff changeset
  3346
        Document()->SetHeaderModified( ETrue );
hgs
parents:
diff changeset
  3347
        CheckHeaderForMessageTypeL();
hgs
parents:
diff changeset
  3348
        
hgs
parents:
diff changeset
  3349
        SetAddressSize();
hgs
parents:
diff changeset
  3350
        MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  3351
        }
hgs
parents:
diff changeset
  3352
hgs
parents:
diff changeset
  3353
    if ( !retVal )
hgs
parents:
diff changeset
  3354
        {        
hgs
parents:
diff changeset
  3355
        //We'll get here if there's illegal addresses
hgs
parents:
diff changeset
  3356
        //when selecting send from not-first slide 
hgs
parents:
diff changeset
  3357
        for (TInt i = CUniEditorHeader::EHeaderAddressTo; 
hgs
parents:
diff changeset
  3358
            i <= CUniEditorHeader::EHeaderAddressBcc; i++ )
hgs
parents:
diff changeset
  3359
            { 
hgs
parents:
diff changeset
  3360
            TBool jumpOut( EFalse );
hgs
parents:
diff changeset
  3361
            if ( iHeader->AddressControl( static_cast<CUniEditorHeader::THeaderFields>( i ) ) )               
hgs
parents:
diff changeset
  3362
                {
hgs
parents:
diff changeset
  3363
                // Search first invalid address
hgs
parents:
diff changeset
  3364
                CMsgRecipientArray* recipients = iHeader->AddressControl( static_cast<CUniEditorHeader::THeaderFields>( i ) )->GetRecipientsL();
hgs
parents:
diff changeset
  3365
                TInt addrCnt = recipients->Count();
hgs
parents:
diff changeset
  3366
hgs
parents:
diff changeset
  3367
                for ( TInt k = 0; k < addrCnt ; k++ )
hgs
parents:
diff changeset
  3368
                    {
hgs
parents:
diff changeset
  3369
                    CMsgRecipientItem* addrItem = recipients->At(k);
hgs
parents:
diff changeset
  3370
                    
hgs
parents:
diff changeset
  3371
                    if (    addrItem 
hgs
parents:
diff changeset
  3372
                        &&  !addrItem->IsValidated() )
hgs
parents:
diff changeset
  3373
                        {     
hgs
parents:
diff changeset
  3374
                        iNextFocus =  iHeader->AddressControlId( 
hgs
parents:
diff changeset
  3375
                                        static_cast<CUniEditorHeader::THeaderFields>( i ) );
hgs
parents:
diff changeset
  3376
                        if ( Document()->CurrentSlide() )
hgs
parents:
diff changeset
  3377
                            {
hgs
parents:
diff changeset
  3378
                            DoUserChangeSlideL( 0 );
hgs
parents:
diff changeset
  3379
                            }
hgs
parents:
diff changeset
  3380
                        else
hgs
parents:
diff changeset
  3381
                            {
hgs
parents:
diff changeset
  3382
                            DoSetFocusL();
hgs
parents:
diff changeset
  3383
                            }
hgs
parents:
diff changeset
  3384
                            
hgs
parents:
diff changeset
  3385
                        TInt ret = iHeader->AddressControl( static_cast<CUniEditorHeader::THeaderFields> (i ) )
hgs
parents:
diff changeset
  3386
                                        ->HighlightUnvalidatedStringL();
hgs
parents:
diff changeset
  3387
                        if ( !ret )
hgs
parents:
diff changeset
  3388
                            {
hgs
parents:
diff changeset
  3389
                            // highlight succeeded
hgs
parents:
diff changeset
  3390
                            jumpOut = ETrue;
hgs
parents:
diff changeset
  3391
                            break;
hgs
parents:
diff changeset
  3392
                            }
hgs
parents:
diff changeset
  3393
                        // else - highlight failed. Should not occur...
hgs
parents:
diff changeset
  3394
                        }
hgs
parents:
diff changeset
  3395
                    }
hgs
parents:
diff changeset
  3396
                    // else - recipient OK. Continue searching
hgs
parents:
diff changeset
  3397
                if ( jumpOut )
hgs
parents:
diff changeset
  3398
                    {
hgs
parents:
diff changeset
  3399
                    break;
hgs
parents:
diff changeset
  3400
                    }
hgs
parents:
diff changeset
  3401
                }
hgs
parents:
diff changeset
  3402
            // else - address control does not exist
hgs
parents:
diff changeset
  3403
            }
hgs
parents:
diff changeset
  3404
        }
hgs
parents:
diff changeset
  3405
    // else - addresses OK
hgs
parents:
diff changeset
  3406
hgs
parents:
diff changeset
  3407
    return retVal;
hgs
parents:
diff changeset
  3408
    }
hgs
parents:
diff changeset
  3409
hgs
parents:
diff changeset
  3410
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3411
// CUniEditorAppUi::DoUserMoveOrSelectPageL
hgs
parents:
diff changeset
  3412
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3413
//
hgs
parents:
diff changeset
  3414
void CUniEditorAppUi::DoUserMoveOrSelectPageL( TBool aMovePage )
hgs
parents:
diff changeset
  3415
    {
hgs
parents:
diff changeset
  3416
    // Create listbox    
hgs
parents:
diff changeset
  3417
    CAknSingleGraphicPopupMenuStyleListBox* listBox = new (ELeave) CAknSingleGraphicPopupMenuStyleListBox;
hgs
parents:
diff changeset
  3418
    CleanupStack::PushL( listBox );
hgs
parents:
diff changeset
  3419
    
hgs
parents:
diff changeset
  3420
    // Create popup
hgs
parents:
diff changeset
  3421
    CAknPopupList* popup = CAknPopupList::NewL(  listBox, 
hgs
parents:
diff changeset
  3422
                                                 R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT, 
hgs
parents:
diff changeset
  3423
                                                 AknPopupLayouts::EMenuGraphicWindow );
hgs
parents:
diff changeset
  3424
    CleanupStack::PushL( popup );
hgs
parents:
diff changeset
  3425
hgs
parents:
diff changeset
  3426
    // Construct listbox
hgs
parents:
diff changeset
  3427
    listBox->ConstructL( popup, CEikListBox::ELeftDownInViewRect );
hgs
parents:
diff changeset
  3428
    listBox->CreateScrollBarFrameL( ETrue );
hgs
parents:
diff changeset
  3429
    listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
hgs
parents:
diff changeset
  3430
                                                        CEikScrollBarFrame::EAuto );
hgs
parents:
diff changeset
  3431
    
hgs
parents:
diff changeset
  3432
    if( iSmilModel->SlideCount() > 6 )
hgs
parents:
diff changeset
  3433
        {
hgs
parents:
diff changeset
  3434
        listBox->CreateScrollBarFrameL( ETrue );
hgs
parents:
diff changeset
  3435
        listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
hgs
parents:
diff changeset
  3436
                                                            CEikScrollBarFrame::EAuto );
hgs
parents:
diff changeset
  3437
        }
hgs
parents:
diff changeset
  3438
  
hgs
parents:
diff changeset
  3439
    TInt oldSlide = Document()->CurrentSlide();
hgs
parents:
diff changeset
  3440
hgs
parents:
diff changeset
  3441
    // Set title    
hgs
parents:
diff changeset
  3442
    HBufC* title = NULL;
hgs
parents:
diff changeset
  3443
    if ( aMovePage )
hgs
parents:
diff changeset
  3444
        {
hgs
parents:
diff changeset
  3445
        title = StringLoader::LoadLC( R_UNI_MOVE_PAGE_TITLE, oldSlide+1, iCoeEnv );
hgs
parents:
diff changeset
  3446
        }
hgs
parents:
diff changeset
  3447
    else
hgs
parents:
diff changeset
  3448
        {
hgs
parents:
diff changeset
  3449
        title = StringLoader::LoadLC( R_UNI_SELECT_PAGE_TITLE, iCoeEnv );
hgs
parents:
diff changeset
  3450
        }
hgs
parents:
diff changeset
  3451
    popup->SetTitleL( title->Des() );
hgs
parents:
diff changeset
  3452
    CleanupStack::PopAndDestroy( title );
hgs
parents:
diff changeset
  3453
hgs
parents:
diff changeset
  3454
    CAknIconArray* iconArray = RadioButtonArrayL();
hgs
parents:
diff changeset
  3455
    listBox->ItemDrawer()->FormattedCellData()->SetIconArray( iconArray ); // FormattedCellData owns
hgs
parents:
diff changeset
  3456
hgs
parents:
diff changeset
  3457
    listBox->HandleItemAdditionL();
hgs
parents:
diff changeset
  3458
hgs
parents:
diff changeset
  3459
    CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( 5 );
hgs
parents:
diff changeset
  3460
    CleanupStack::PushL( array );
hgs
parents:
diff changeset
  3461
    
hgs
parents:
diff changeset
  3462
    for ( TInt i = 0; i < iSmilModel->SlideCount(); i++ )
hgs
parents:
diff changeset
  3463
        {
hgs
parents:
diff changeset
  3464
        HBufC* buf = StringLoader::LoadLC( R_UNIEDITOR_MOVE_PAGE, i + 1, iCoeEnv );
hgs
parents:
diff changeset
  3465
hgs
parents:
diff changeset
  3466
        TBuf<20> itemString;
hgs
parents:
diff changeset
  3467
        if( oldSlide == i )
hgs
parents:
diff changeset
  3468
            { // This one is selected
hgs
parents:
diff changeset
  3469
            itemString.AppendNum( 1 );
hgs
parents:
diff changeset
  3470
            }
hgs
parents:
diff changeset
  3471
        else
hgs
parents:
diff changeset
  3472
            {
hgs
parents:
diff changeset
  3473
            itemString.AppendNum( 0 );
hgs
parents:
diff changeset
  3474
            }
hgs
parents:
diff changeset
  3475
        itemString.Append( _L("\t") );
hgs
parents:
diff changeset
  3476
        itemString.Append( buf->Des() );
hgs
parents:
diff changeset
  3477
        array->AppendL( itemString );
hgs
parents:
diff changeset
  3478
        
hgs
parents:
diff changeset
  3479
        CleanupStack::PopAndDestroy( buf );
hgs
parents:
diff changeset
  3480
        buf = NULL;
hgs
parents:
diff changeset
  3481
        }
hgs
parents:
diff changeset
  3482
hgs
parents:
diff changeset
  3483
    CTextListBoxModel* model = listBox->Model();
hgs
parents:
diff changeset
  3484
    model->SetItemTextArray( array );
hgs
parents:
diff changeset
  3485
    model->SetOwnershipType( ELbmOwnsItemArray );
hgs
parents:
diff changeset
  3486
    CleanupStack::Pop( array ); // model owns it now
hgs
parents:
diff changeset
  3487
hgs
parents:
diff changeset
  3488
    listBox->SetCurrentItemIndexAndDraw( oldSlide );
hgs
parents:
diff changeset
  3489
hgs
parents:
diff changeset
  3490
    TInt result = popup->ExecuteLD();
hgs
parents:
diff changeset
  3491
hgs
parents:
diff changeset
  3492
    if ( result )
hgs
parents:
diff changeset
  3493
        {
hgs
parents:
diff changeset
  3494
        // OK, user chose a new page
hgs
parents:
diff changeset
  3495
        TInt newSlide = listBox->CurrentItemIndex();
hgs
parents:
diff changeset
  3496
         
hgs
parents:
diff changeset
  3497
        if( oldSlide != newSlide )
hgs
parents:
diff changeset
  3498
            {
hgs
parents:
diff changeset
  3499
            if ( aMovePage )
hgs
parents:
diff changeset
  3500
                {
hgs
parents:
diff changeset
  3501
                iSmilModel->MoveSlideL( Document()->CurrentSlide(), newSlide );
hgs
parents:
diff changeset
  3502
                }
hgs
parents:
diff changeset
  3503
hgs
parents:
diff changeset
  3504
            //Set current slide to invalid in order
hgs
parents:
diff changeset
  3505
            //to prevent false events coming to wrong slides
hgs
parents:
diff changeset
  3506
            Document()->SetCurrentSlide( -1 );
hgs
parents:
diff changeset
  3507
            iView->SetScrollParts( iSmilModel->SlideCount() );
hgs
parents:
diff changeset
  3508
            iView->SetCurrentPart( newSlide );
hgs
parents:
diff changeset
  3509
hgs
parents:
diff changeset
  3510
            DoUserChangeSlideL( newSlide );
hgs
parents:
diff changeset
  3511
            
hgs
parents:
diff changeset
  3512
            if ( aMovePage )
hgs
parents:
diff changeset
  3513
                {
hgs
parents:
diff changeset
  3514
                Document()->SetBodyModified( ETrue );
hgs
parents:
diff changeset
  3515
                }
hgs
parents:
diff changeset
  3516
            }
hgs
parents:
diff changeset
  3517
        }
hgs
parents:
diff changeset
  3518
hgs
parents:
diff changeset
  3519
    CleanupStack::Pop(); // for popup
hgs
parents:
diff changeset
  3520
    CleanupStack::PopAndDestroy( listBox );
hgs
parents:
diff changeset
  3521
    }
hgs
parents:
diff changeset
  3522
hgs
parents:
diff changeset
  3523
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3524
// CUniEditorAppUi::DoUserObjectsViewL
hgs
parents:
diff changeset
  3525
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3526
//
hgs
parents:
diff changeset
  3527
void CUniEditorAppUi::DoUserObjectsViewL( TBool aFocusAttachments )
hgs
parents:
diff changeset
  3528
    {
hgs
parents:
diff changeset
  3529
    CUniObjectsModel& objectsViewModel =
hgs
parents:
diff changeset
  3530
        static_cast<CUniObjectsModel&>( Document()->AttachmentModel() );
hgs
parents:
diff changeset
  3531
hgs
parents:
diff changeset
  3532
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  3533
hgs
parents:
diff changeset
  3534
    if ( Document()->DataModel()->SmilType() == EMmsSmil && 
hgs
parents:
diff changeset
  3535
         Document()->BodyModified() )
hgs
parents:
diff changeset
  3536
        {
hgs
parents:
diff changeset
  3537
        delete iSaveOperation;
hgs
parents:
diff changeset
  3538
        iSaveOperation = NULL;
hgs
parents:
diff changeset
  3539
        
hgs
parents:
diff changeset
  3540
        iSaveOperation = CUniEditorSaveOperation::NewL(
hgs
parents:
diff changeset
  3541
            *this,
hgs
parents:
diff changeset
  3542
            *Document(),
hgs
parents:
diff changeset
  3543
            *iHeader,
hgs
parents:
diff changeset
  3544
            *iView,
hgs
parents:
diff changeset
  3545
            FsSession() );
hgs
parents:
diff changeset
  3546
        
hgs
parents:
diff changeset
  3547
        
hgs
parents:
diff changeset
  3548
        // Save current slide text object as content needs to be up-to-date when
hgs
parents:
diff changeset
  3549
        // it is opened from object's view.
hgs
parents:
diff changeset
  3550
        CUniObject* textObject = iSmilModel->GetObject( Document()->CurrentSlide(), EUniRegionText );
hgs
parents:
diff changeset
  3551
        if ( textObject )
hgs
parents:
diff changeset
  3552
            {
hgs
parents:
diff changeset
  3553
            iSaveOperation->SaveL( *textObject );
hgs
parents:
diff changeset
  3554
            BeginActiveWait( iSaveOperation );
hgs
parents:
diff changeset
  3555
            }
hgs
parents:
diff changeset
  3556
        }
hgs
parents:
diff changeset
  3557
hgs
parents:
diff changeset
  3558
    CMsgBaseControl* imageBase = iView->ControlById( EMsgComponentIdImage );
hgs
parents:
diff changeset
  3559
    if ( imageBase )
hgs
parents:
diff changeset
  3560
        {
hgs
parents:
diff changeset
  3561
        //Close image file (share flag conflict)
hgs
parents:
diff changeset
  3562
        CMsgImageControl* imageControl =
hgs
parents:
diff changeset
  3563
            static_cast<CMsgImageControl*>( imageBase );
hgs
parents:
diff changeset
  3564
        //Closes image, no matter if animation or not
hgs
parents:
diff changeset
  3565
        imageControl->Stop();
hgs
parents:
diff changeset
  3566
        //No need to reopen image file
hgs
parents:
diff changeset
  3567
        }
hgs
parents:
diff changeset
  3568
hgs
parents:
diff changeset
  3569
    iOriginalSlide = Document()->CurrentSlide();
hgs
parents:
diff changeset
  3570
  
hgs
parents:
diff changeset
  3571
    TUniObjectsDialogExitCmd dlgRet = EUniObjectsViewBack;
hgs
parents:
diff changeset
  3572
    // Flag is also used to judge whether toolbar update is done 
hgs
parents:
diff changeset
  3573
    iEditorFlags |= EDoNotUpdateTitlePane;
hgs
parents:
diff changeset
  3574
    
hgs
parents:
diff changeset
  3575
    CUniObjectsViewDialog::TUniObjectsDialogType dialogType;
hgs
parents:
diff changeset
  3576
    if ( Document()->DataModel()->SmilType() == EMmsSmil )
hgs
parents:
diff changeset
  3577
        {
hgs
parents:
diff changeset
  3578
        dialogType = CUniObjectsViewDialog::EEditor;
hgs
parents:
diff changeset
  3579
        }
hgs
parents:
diff changeset
  3580
    else
hgs
parents:
diff changeset
  3581
        {
hgs
parents:
diff changeset
  3582
        dialogType = CUniObjectsViewDialog::EForward;
hgs
parents:
diff changeset
  3583
        }
hgs
parents:
diff changeset
  3584
    
hgs
parents:
diff changeset
  3585
    TInt focusedItemIndex = -1;
hgs
parents:
diff changeset
  3586
    if ( aFocusAttachments )
hgs
parents:
diff changeset
  3587
        {
hgs
parents:
diff changeset
  3588
        TInt objectCount = Document()->DataModel()->ObjectList().Count();
hgs
parents:
diff changeset
  3589
        if ( objectCount == 0 )
hgs
parents:
diff changeset
  3590
            {
hgs
parents:
diff changeset
  3591
            focusedItemIndex = 1;
hgs
parents:
diff changeset
  3592
            }
hgs
parents:
diff changeset
  3593
        else
hgs
parents:
diff changeset
  3594
            {
hgs
parents:
diff changeset
  3595
            focusedItemIndex = objectCount;
hgs
parents:
diff changeset
  3596
            }
hgs
parents:
diff changeset
  3597
        }
hgs
parents:
diff changeset
  3598
    
hgs
parents:
diff changeset
  3599
    if ( iFixedToolbar )
hgs
parents:
diff changeset
  3600
        {
hgs
parents:
diff changeset
  3601
        SetFixedToolbarDimmed();
hgs
parents:
diff changeset
  3602
        }
hgs
parents:
diff changeset
  3603
    
hgs
parents:
diff changeset
  3604
    CleanupStack::PushL( TCleanupItem( UpdateFixedToolbar, this ) );
hgs
parents:
diff changeset
  3605
   	SetKeyEventFlags(0);
hgs
parents:
diff changeset
  3606
    
hgs
parents:
diff changeset
  3607
    CleanupStack::PushL( TCleanupItem( DisableSendKey, this ) );
hgs
parents:
diff changeset
  3608
    
hgs
parents:
diff changeset
  3609
    CUniObjectsViewDialog::ObjectsViewL(
hgs
parents:
diff changeset
  3610
            dialogType, 
hgs
parents:
diff changeset
  3611
            objectsViewModel,
hgs
parents:
diff changeset
  3612
            iEikonEnv,
hgs
parents:
diff changeset
  3613
            dlgRet,
hgs
parents:
diff changeset
  3614
            *Document()->DataModel(),
hgs
parents:
diff changeset
  3615
            focusedItemIndex );
hgs
parents:
diff changeset
  3616
    
hgs
parents:
diff changeset
  3617
    CleanupStack::PopAndDestroy(2); //DisableSendKey,EnableFixedToolbar
hgs
parents:
diff changeset
  3618
    
hgs
parents:
diff changeset
  3619
    iEditorFlags &= ~EDoNotUpdateTitlePane;
hgs
parents:
diff changeset
  3620
hgs
parents:
diff changeset
  3621
    Document()->SetCurrentSlide( iOriginalSlide );
hgs
parents:
diff changeset
  3622
    iOriginalSlide = -1;
hgs
parents:
diff changeset
  3623
hgs
parents:
diff changeset
  3624
    // Check if msg type was changed
hgs
parents:
diff changeset
  3625
    CheckBodyForMessageTypeL(); 
hgs
parents:
diff changeset
  3626
    
hgs
parents:
diff changeset
  3627
    // Update navipane here instead of AddObjectL callback otherwise it 
hgs
parents:
diff changeset
  3628
    // gets drawn while in objectsview
hgs
parents:
diff changeset
  3629
    UpdateIndicatorIconsL();
hgs
parents:
diff changeset
  3630
    
hgs
parents:
diff changeset
  3631
    CheckLockedSmsWithAttaL();
hgs
parents:
diff changeset
  3632
    
hgs
parents:
diff changeset
  3633
    CleanupStack::PopAndDestroy(); // CAknInputBlock
hgs
parents:
diff changeset
  3634
    
hgs
parents:
diff changeset
  3635
    objectsViewModel.Reset();
hgs
parents:
diff changeset
  3636
    MsgLengthToNavipaneL( ETrue );
hgs
parents:
diff changeset
  3637
    }
hgs
parents:
diff changeset
  3638
hgs
parents:
diff changeset
  3639
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3640
// CUniEditorAppUi::DoUserAddRecipientL
hgs
parents:
diff changeset
  3641
// Fetch an address from phonebook
hgs
parents:
diff changeset
  3642
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3643
//
hgs
parents:
diff changeset
  3644
void CUniEditorAppUi::DoUserAddRecipientL()
hgs
parents:
diff changeset
  3645
    {
hgs
parents:
diff changeset
  3646
    TBool invalid = EFalse;
hgs
parents:
diff changeset
  3647
    // We remove this flag so that it can be shown after the adding operation
hgs
parents:
diff changeset
  3648
    iEditorFlags &= ~EMaxRecipientShown;
hgs
parents:
diff changeset
  3649
hgs
parents:
diff changeset
  3650
	if(iEditorFlags & EMsgEditInProgress)
hgs
parents:
diff changeset
  3651
        {
hgs
parents:
diff changeset
  3652
        return;
hgs
parents:
diff changeset
  3653
        }
hgs
parents:
diff changeset
  3654
	
hgs
parents:
diff changeset
  3655
    // If VKB is on and To Control is pressed clear the screen to avoid flicker
hgs
parents:
diff changeset
  3656
	if( iPeninputServer.IsVisible()  && !iScreenClearerPartialVKBOn )
hgs
parents:
diff changeset
  3657
        {
hgs
parents:
diff changeset
  3658
        iScreenClearerPartialVKBOn =CAknLocalScreenClearer::NewLC(ETrue);
hgs
parents:
diff changeset
  3659
        CleanupStack::Pop( iScreenClearerPartialVKBOn );       
hgs
parents:
diff changeset
  3660
        }
hgs
parents:
diff changeset
  3661
hgs
parents:
diff changeset
  3662
hgs
parents:
diff changeset
  3663
    if ( iFixedToolbar )
hgs
parents:
diff changeset
  3664
        {
hgs
parents:
diff changeset
  3665
        SetFixedToolbarDimmed();    
hgs
parents:
diff changeset
  3666
        }
hgs
parents:
diff changeset
  3667
hgs
parents:
diff changeset
  3668
    iEditorFlags |= (EMsgEditInProgress);
hgs
parents:
diff changeset
  3669
    CleanupStack::PushL( TCleanupItem( UpdateFixedToolbar, this ) );
hgs
parents:
diff changeset
  3670
    
hgs
parents:
diff changeset
  3671
    SetKeyEventFlags(0);    
hgs
parents:
diff changeset
  3672
    CleanupStack::PushL( TCleanupItem( DisableSendKey, this ) );
hgs
parents:
diff changeset
  3673
    // add to current control or To control
hgs
parents:
diff changeset
  3674
    TBool addressesAdded(EFalse);
hgs
parents:
diff changeset
  3675
    TRAPD( err, addressesAdded = iHeader->AddRecipientL(  iView->FocusedControl(), 
hgs
parents:
diff changeset
  3676
                                                    iView, 
hgs
parents:
diff changeset
  3677
                                                    AcceptEmailAddresses(),
hgs
parents:
diff changeset
  3678
                                                    invalid ) );
hgs
parents:
diff changeset
  3679
	
hgs
parents:
diff changeset
  3680
    //Remove screen clear if created above 
hgs
parents:
diff changeset
  3681
    if( iScreenClearerPartialVKBOn )
hgs
parents:
diff changeset
  3682
        {
hgs
parents:
diff changeset
  3683
        delete iScreenClearerPartialVKBOn ;
hgs
parents:
diff changeset
  3684
        iScreenClearerPartialVKBOn = NULL ;
hgs
parents:
diff changeset
  3685
        }
hgs
parents:
diff changeset
  3686
    
hgs
parents:
diff changeset
  3687
    if( err == KLeaveExit )
hgs
parents:
diff changeset
  3688
        {
hgs
parents:
diff changeset
  3689
        CAknEnv::RunAppShutter();
hgs
parents:
diff changeset
  3690
        }
hgs
parents:
diff changeset
  3691
hgs
parents:
diff changeset
  3692
    CleanupStack::PopAndDestroy(2);//DisableSendKey,UpdateFixedToolbar
hgs
parents:
diff changeset
  3693
    iEditorFlags &= ~EMsgEditInProgress;
hgs
parents:
diff changeset
  3694
hgs
parents:
diff changeset
  3695
    TInt focused = iHeader->FocusedAddressField( iView->FocusedControl() );
hgs
parents:
diff changeset
  3696
hgs
parents:
diff changeset
  3697
    if ( addressesAdded )
hgs
parents:
diff changeset
  3698
        {
hgs
parents:
diff changeset
  3699
        Document()->SetHeaderModified( ETrue );
hgs
parents:
diff changeset
  3700
hgs
parents:
diff changeset
  3701
        if ( Document()->CurrentSlide() )
hgs
parents:
diff changeset
  3702
            {
hgs
parents:
diff changeset
  3703
            // Addresses were (tried to be) added
hgs
parents:
diff changeset
  3704
            // -> Change to first slide
hgs
parents:
diff changeset
  3705
            iNextFocus = EMsgComponentIdTo;
hgs
parents:
diff changeset
  3706
            DoUserChangeSlideL( 0 );
hgs
parents:
diff changeset
  3707
            }
hgs
parents:
diff changeset
  3708
hgs
parents:
diff changeset
  3709
        SetAddressSize(); 
hgs
parents:
diff changeset
  3710
        MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  3711
        
hgs
parents:
diff changeset
  3712
        if ( focused == KErrNotFound ||
hgs
parents:
diff changeset
  3713
             iEditorFlags & ELockedSmsWithAtta )
hgs
parents:
diff changeset
  3714
            {
hgs
parents:
diff changeset
  3715
            if ( focused != CUniBaseHeader::EHeaderAddressTo )
hgs
parents:
diff changeset
  3716
                {
hgs
parents:
diff changeset
  3717
                // Focus was not in address control -> Move it
hgs
parents:
diff changeset
  3718
                iView->SetFocus( EMsgComponentIdTo );
hgs
parents:
diff changeset
  3719
                }
hgs
parents:
diff changeset
  3720
                
hgs
parents:
diff changeset
  3721
            // Set bodytext cursor location to start of the text
hgs
parents:
diff changeset
  3722
            CMsgBodyControl* bodyCtrl = BodyCtrl();
hgs
parents:
diff changeset
  3723
            if ( bodyCtrl )
hgs
parents:
diff changeset
  3724
                {
hgs
parents:
diff changeset
  3725
                bodyCtrl->SetCursorPosL( 0 );
hgs
parents:
diff changeset
  3726
                }
hgs
parents:
diff changeset
  3727
            focused = CUniBaseHeader::EHeaderAddressTo;
hgs
parents:
diff changeset
  3728
            }
hgs
parents:
diff changeset
  3729
        else 
hgs
parents:
diff changeset
  3730
            {
hgs
parents:
diff changeset
  3731
        // Increase by one so it will be in the next field
hgs
parents:
diff changeset
  3732
            switch( focused+1 )
hgs
parents:
diff changeset
  3733
                {
hgs
parents:
diff changeset
  3734
                case CUniBaseHeader::EHeaderAddressCc:
hgs
parents:
diff changeset
  3735
                    {
hgs
parents:
diff changeset
  3736
                    if( iHeader->AddressControl( CUniBaseHeader::EHeaderAddressCc ) )
hgs
parents:
diff changeset
  3737
                        {
hgs
parents:
diff changeset
  3738
                        iView->SetFocus( EMsgComponentIdCc );
hgs
parents:
diff changeset
  3739
                        break;
hgs
parents:
diff changeset
  3740
                        }
hgs
parents:
diff changeset
  3741
                    } // otherwise fall through
hgs
parents:
diff changeset
  3742
                case CUniBaseHeader::EHeaderAddressBcc:
hgs
parents:
diff changeset
  3743
                    {
hgs
parents:
diff changeset
  3744
                    if( iHeader->AddressControl( CUniBaseHeader::EHeaderAddressBcc ) )
hgs
parents:
diff changeset
  3745
                        {
hgs
parents:
diff changeset
  3746
                        iView->SetFocus( EMsgComponentIdBcc );
hgs
parents:
diff changeset
  3747
                        break;
hgs
parents:
diff changeset
  3748
                        }
hgs
parents:
diff changeset
  3749
                    } // otherwise fall through
hgs
parents:
diff changeset
  3750
                case CUniBaseHeader::EHeaderSubject:
hgs
parents:
diff changeset
  3751
                    {
hgs
parents:
diff changeset
  3752
                    if( iHeader->SubjectControl() )
hgs
parents:
diff changeset
  3753
                        {
hgs
parents:
diff changeset
  3754
                        iView->SetFocus( EMsgComponentIdSubject );
hgs
parents:
diff changeset
  3755
                        break;
hgs
parents:
diff changeset
  3756
                        }
hgs
parents:
diff changeset
  3757
                    } // otherwise fall through
hgs
parents:
diff changeset
  3758
                default:
hgs
parents:
diff changeset
  3759
                    {
hgs
parents:
diff changeset
  3760
                    if ( Document()->DataModel()->SmilType() == EMmsSmil )
hgs
parents:
diff changeset
  3761
                        {
hgs
parents:
diff changeset
  3762
                        iView->SetFocus( EMsgComponentIdBody );                    
hgs
parents:
diff changeset
  3763
                        
hgs
parents:
diff changeset
  3764
                        // Set bodytext cursor location to end of the text
hgs
parents:
diff changeset
  3765
                        CMsgBodyControl* bodyCtrl = BodyCtrl();
hgs
parents:
diff changeset
  3766
                        if ( bodyCtrl )
hgs
parents:
diff changeset
  3767
                            {
hgs
parents:
diff changeset
  3768
                            bodyCtrl->SetCursorPosL( bodyCtrl->Editor().TextLength() );
hgs
parents:
diff changeset
  3769
                            }
hgs
parents:
diff changeset
  3770
                        }
hgs
parents:
diff changeset
  3771
                    else
hgs
parents:
diff changeset
  3772
                        {
hgs
parents:
diff changeset
  3773
                        iView->SetFocus( EMsgComponentIdImage );
hgs
parents:
diff changeset
  3774
                        }
hgs
parents:
diff changeset
  3775
                    }
hgs
parents:
diff changeset
  3776
                }
hgs
parents:
diff changeset
  3777
            }
hgs
parents:
diff changeset
  3778
        }
hgs
parents:
diff changeset
  3779
    // Check max recipients anyway
hgs
parents:
diff changeset
  3780
    CheckHeaderForMessageTypeL();
hgs
parents:
diff changeset
  3781
    MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  3782
hgs
parents:
diff changeset
  3783
    CheckMaxRecipientsAndShowNoteL();
hgs
parents:
diff changeset
  3784
hgs
parents:
diff changeset
  3785
    if( iEditorFlags & EMaxRecipientShown && addressesAdded )
hgs
parents:
diff changeset
  3786
        { // A note was shown so return the focus back to the original location
hgs
parents:
diff changeset
  3787
        TInt returnFocusTo = EMsgComponentIdTo;
hgs
parents:
diff changeset
  3788
        if( focused == CUniBaseHeader::EHeaderAddressCc )
hgs
parents:
diff changeset
  3789
            {
hgs
parents:
diff changeset
  3790
            returnFocusTo = EMsgComponentIdCc;
hgs
parents:
diff changeset
  3791
            }
hgs
parents:
diff changeset
  3792
        else if( focused == CUniBaseHeader::EHeaderAddressBcc )
hgs
parents:
diff changeset
  3793
            {
hgs
parents:
diff changeset
  3794
            returnFocusTo = EMsgComponentIdBcc;
hgs
parents:
diff changeset
  3795
            }
hgs
parents:
diff changeset
  3796
        iView->SetFocus( returnFocusTo );
hgs
parents:
diff changeset
  3797
        }
hgs
parents:
diff changeset
  3798
    }
hgs
parents:
diff changeset
  3799
hgs
parents:
diff changeset
  3800
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3801
// CUniEditorAppUi::DoUserMessageInfoL
hgs
parents:
diff changeset
  3802
// 
hgs
parents:
diff changeset
  3803
// Invokes message info from UI MTM.
hgs
parents:
diff changeset
  3804
// Message must be unlocked before coming here.
hgs
parents:
diff changeset
  3805
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3806
//
hgs
parents:
diff changeset
  3807
void CUniEditorAppUi::DoUserMessageInfoL()
hgs
parents:
diff changeset
  3808
    {
hgs
parents:
diff changeset
  3809
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  3810
    
hgs
parents:
diff changeset
  3811
    CUniMtmUi& uiMtm = doc->MtmUiL();
hgs
parents:
diff changeset
  3812
hgs
parents:
diff changeset
  3813
    CAknInputBlock::NewLC();
hgs
parents:
diff changeset
  3814
hgs
parents:
diff changeset
  3815
    iHeader->CopyHeadersToMtmL( doc->HeaderModified(),
hgs
parents:
diff changeset
  3816
                                ETrue );
hgs
parents:
diff changeset
  3817
hgs
parents:
diff changeset
  3818
    // Lets put the current message type into TMsvEntry
hgs
parents:
diff changeset
  3819
    TMsvEntry tEntry = doc->Entry();
hgs
parents:
diff changeset
  3820
hgs
parents:
diff changeset
  3821
    TUniMessageCurrentType curType = EUniMessageCurrentTypeSms;
hgs
parents:
diff changeset
  3822
    if( doc->UniState() == EUniMms )
hgs
parents:
diff changeset
  3823
        {
hgs
parents:
diff changeset
  3824
        curType = EUniMessageCurrentTypeMms;
hgs
parents:
diff changeset
  3825
        
hgs
parents:
diff changeset
  3826
        CUniEditorPlugin* mmsPlugin = doc->MmsPlugin();
hgs
parents:
diff changeset
  3827
            
hgs
parents:
diff changeset
  3828
        if ( mmsPlugin )
hgs
parents:
diff changeset
  3829
            {
hgs
parents:
diff changeset
  3830
            TUniSendingSettings settings;
hgs
parents:
diff changeset
  3831
            mmsPlugin->GetSendingSettingsL( settings );
hgs
parents:
diff changeset
  3832
            switch ( settings.iPriority )
hgs
parents:
diff changeset
  3833
                {
hgs
parents:
diff changeset
  3834
                case TUniSendingSettings::EUniPriorityHigh:
hgs
parents:
diff changeset
  3835
                    {
hgs
parents:
diff changeset
  3836
                    tEntry.SetPriority( EMsvHighPriority );
hgs
parents:
diff changeset
  3837
                    break;
hgs
parents:
diff changeset
  3838
                    }
hgs
parents:
diff changeset
  3839
                case TUniSendingSettings::EUniPriorityLow:
hgs
parents:
diff changeset
  3840
                    {
hgs
parents:
diff changeset
  3841
                    tEntry.SetPriority( EMsvLowPriority );
hgs
parents:
diff changeset
  3842
                    break;
hgs
parents:
diff changeset
  3843
                    }
hgs
parents:
diff changeset
  3844
                default:
hgs
parents:
diff changeset
  3845
                    {
hgs
parents:
diff changeset
  3846
                    tEntry.SetPriority( EMsvMediumPriority );
hgs
parents:
diff changeset
  3847
                    break;
hgs
parents:
diff changeset
  3848
                    }
hgs
parents:
diff changeset
  3849
                }
hgs
parents:
diff changeset
  3850
            }
hgs
parents:
diff changeset
  3851
        }
hgs
parents:
diff changeset
  3852
hgs
parents:
diff changeset
  3853
    TUniMsvEntry::SetCurrentMessageType( tEntry, curType );
hgs
parents:
diff changeset
  3854
    
hgs
parents:
diff changeset
  3855
    doc->CurrentEntry().ChangeL( tEntry );
hgs
parents:
diff changeset
  3856
    
hgs
parents:
diff changeset
  3857
    if ( !iMtm->Entry().HasStoreL() )
hgs
parents:
diff changeset
  3858
        {
hgs
parents:
diff changeset
  3859
        iMtm->SaveMessageL();
hgs
parents:
diff changeset
  3860
        }
hgs
parents:
diff changeset
  3861
    
hgs
parents:
diff changeset
  3862
    // Pack message size
hgs
parents:
diff changeset
  3863
    TInt sizeInKilos = ( MessageSizeInBytes() + KBytesInKilo - 1 ) / KBytesInKilo;
hgs
parents:
diff changeset
  3864
    TPckgBuf<TInt> param( sizeInKilos );
hgs
parents:
diff changeset
  3865
hgs
parents:
diff changeset
  3866
    //These are not used! They just have to be there
hgs
parents:
diff changeset
  3867
    CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection;
hgs
parents:
diff changeset
  3868
    CleanupStack::PushL( selection );
hgs
parents:
diff changeset
  3869
hgs
parents:
diff changeset
  3870
    CMsvSingleOpWatcher* watch = CMsvSingleOpWatcher::NewLC( *Document() );
hgs
parents:
diff changeset
  3871
    CMsvOperation* op = uiMtm.InvokeAsyncFunctionL(
hgs
parents:
diff changeset
  3872
        KMtmUiFunctionMessageInfo,
hgs
parents:
diff changeset
  3873
        *selection,
hgs
parents:
diff changeset
  3874
        watch->iStatus,
hgs
parents:
diff changeset
  3875
        param );
hgs
parents:
diff changeset
  3876
    CleanupStack::Pop(); // watch
hgs
parents:
diff changeset
  3877
    Document()->AddSingleOperationL( op, watch );
hgs
parents:
diff changeset
  3878
hgs
parents:
diff changeset
  3879
    CleanupStack::PopAndDestroy( 2 ); // selection, CAknInputBlock
hgs
parents:
diff changeset
  3880
hgs
parents:
diff changeset
  3881
    MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  3882
    }
hgs
parents:
diff changeset
  3883
hgs
parents:
diff changeset
  3884
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3885
// CUniEditorAppUi::DoUserSendingOptionsL
hgs
parents:
diff changeset
  3886
// 
hgs
parents:
diff changeset
  3887
// Invokes Sending Options from UI MTM.
hgs
parents:
diff changeset
  3888
// ---------------------------------------------------------
hgs
parents:
diff changeset
  3889
//
hgs
parents:
diff changeset
  3890
void CUniEditorAppUi::DoUserSendingOptionsL()
hgs
parents:
diff changeset
  3891
    {
hgs
parents:
diff changeset
  3892
    TInt flags = 0;
hgs
parents:
diff changeset
  3893
hgs
parents:
diff changeset
  3894
    TUniSendingSettings settings;
hgs
parents:
diff changeset
  3895
    
hgs
parents:
diff changeset
  3896
    CUniEditorPlugin* plugin = SmsPlugin();
hgs
parents:
diff changeset
  3897
hgs
parents:
diff changeset
  3898
    TBool currentlyLockedToSms = EFalse;
hgs
parents:
diff changeset
  3899
hgs
parents:
diff changeset
  3900
    if( plugin )
hgs
parents:
diff changeset
  3901
        { 
hgs
parents:
diff changeset
  3902
        // This should be available as if it's not -> sending options not available
hgs
parents:
diff changeset
  3903
        plugin->GetSendingSettingsL( settings );
hgs
parents:
diff changeset
  3904
        }
hgs
parents:
diff changeset
  3905
hgs
parents:
diff changeset
  3906
    //TUniSendingSettings::TUniMessageType origMessageType = settings.iMessageType;
hgs
parents:
diff changeset
  3907
    
hgs
parents:
diff changeset
  3908
    if( iMtm->MessageTypeLocking() == EUniMessageTypeLocked )
hgs
parents:
diff changeset
  3909
        { 
hgs
parents:
diff changeset
  3910
        // Pre-locked to SMS (We never get here in permanent MMS)
hgs
parents:
diff changeset
  3911
        flags |= EUniSettingsPermanentSms;
hgs
parents:
diff changeset
  3912
        currentlyLockedToSms = ETrue;
hgs
parents:
diff changeset
  3913
        }
hgs
parents:
diff changeset
  3914
    else if( iMtm->MessageTypeSetting() == EUniMessageTypeSettingSms && 
hgs
parents:
diff changeset
  3915
             settings.iMessageType != TUniSendingSettings::EUniMessageTypeAutomatic &&
hgs
parents:
diff changeset
  3916
             settings.iMessageType != TUniSendingSettings::EUniMessageTypeMultimedia )
hgs
parents:
diff changeset
  3917
        { 
hgs
parents:
diff changeset
  3918
        // msg type is temporarily locked to sms
hgs
parents:
diff changeset
  3919
        currentlyLockedToSms = ETrue;
hgs
parents:
diff changeset
  3920
        }
hgs
parents:
diff changeset
  3921
    else
hgs
parents:
diff changeset
  3922
        { 
hgs
parents:
diff changeset
  3923
        if( iMtm->MessageTypeSetting() == EUniMessageTypeSettingMms )
hgs
parents:
diff changeset
  3924
            {
hgs
parents:
diff changeset
  3925
            settings.iMessageType = TUniSendingSettings::EUniMessageTypeMultimedia;
hgs
parents:
diff changeset
  3926
            }
hgs
parents:
diff changeset
  3927
        else if( iMtm->MessageTypeSetting() == EUniMessageTypeSettingAutomatic )
hgs
parents:
diff changeset
  3928
            {
hgs
parents:
diff changeset
  3929
            settings.iMessageType = TUniSendingSettings::EUniMessageTypeAutomatic;
hgs
parents:
diff changeset
  3930
            }
hgs
parents:
diff changeset
  3931
        }
hgs
parents:
diff changeset
  3932
hgs
parents:
diff changeset
  3933
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  3934
hgs
parents:
diff changeset
  3935
    if ( !( IsBodySmsCompatibleL( EFalse ) && iHeader->IsHeaderSmsL() ) )
hgs
parents:
diff changeset
  3936
        {
hgs
parents:
diff changeset
  3937
        flags |= EUniSettingsContentNeedsMms;
hgs
parents:
diff changeset
  3938
        }
hgs
parents:
diff changeset
  3939
      
hgs
parents:
diff changeset
  3940
    TUniSendingSettings::TUniCharSupport origCharSet = TUniSendingSettings::EUniCharSupportReduced;
hgs
parents:
diff changeset
  3941
      
hgs
parents:
diff changeset
  3942
    settings.iCharSupport = TUniSendingSettings::EUniCharSupportReduced;
hgs
parents:
diff changeset
  3943
    
hgs
parents:
diff changeset
  3944
    if ( doc->CharSetSupport() == EUniMessageCharSetFullLocked ||
hgs
parents:
diff changeset
  3945
         doc->CharSetSupport() == EUniMessageCharSetReducedLocked )
hgs
parents:
diff changeset
  3946
        {
hgs
parents:
diff changeset
  3947
        flags |= EUniSettingsHideCharSet;
hgs
parents:
diff changeset
  3948
        }
hgs
parents:
diff changeset
  3949
    else if( doc->CharSetSupport() == EUniMessageCharSetFull )
hgs
parents:
diff changeset
  3950
        {
hgs
parents:
diff changeset
  3951
        settings.iCharSupport = TUniSendingSettings::EUniCharSupportFull;
hgs
parents:
diff changeset
  3952
        origCharSet = TUniSendingSettings::EUniCharSupportFull;
hgs
parents:
diff changeset
  3953
        }
hgs
parents:
diff changeset
  3954
hgs
parents:
diff changeset
  3955
    if( !( doc->CSPBits() & RMobilePhone::KCspProtocolID ) )
hgs
parents:
diff changeset
  3956
        {
hgs
parents:
diff changeset
  3957
        flags |= EUniSettingsCSPBitsOn;
hgs
parents:
diff changeset
  3958
        }
hgs
parents:
diff changeset
  3959
hgs
parents:
diff changeset
  3960
    if ( iEditorFlags & EHideMessageTypeOption )
hgs
parents:
diff changeset
  3961
        {
hgs
parents:
diff changeset
  3962
        flags |= EUniSettingsHideMessageTypeOption;
hgs
parents:
diff changeset
  3963
        }
hgs
parents:
diff changeset
  3964
    TUniState oldState = doc->UniState();
hgs
parents:
diff changeset
  3965
  
hgs
parents:
diff changeset
  3966
    CUniSendingSettingsDialog::TUniExitCode exitCode = CUniSendingSettingsDialog::EUniBack;
hgs
parents:
diff changeset
  3967
    
hgs
parents:
diff changeset
  3968
    CUniSendingSettingsDialog* dlg = new ( ELeave ) CUniSendingSettingsDialog( flags, settings, exitCode, *iTitlePane );
hgs
parents:
diff changeset
  3969
    CleanupStack::PushL( dlg );
hgs
parents:
diff changeset
  3970
    
hgs
parents:
diff changeset
  3971
    dlg->ConstructL( R_UNI_SENDINGSETTINGS_DIALOG_MENUBAR );
hgs
parents:
diff changeset
  3972
hgs
parents:
diff changeset
  3973
    // Flag is also used to judge whether toolbar update is done 
hgs
parents:
diff changeset
  3974
    iEditorFlags |= EDoNotUpdateTitlePane;
hgs
parents:
diff changeset
  3975
    
hgs
parents:
diff changeset
  3976
    CleanupStack::Pop( dlg );
hgs
parents:
diff changeset
  3977
    
hgs
parents:
diff changeset
  3978
    if ( iFixedToolbar )
hgs
parents:
diff changeset
  3979
        {
hgs
parents:
diff changeset
  3980
        SetFixedToolbarDimmed();
hgs
parents:
diff changeset
  3981
        }
hgs
parents:
diff changeset
  3982
    
hgs
parents:
diff changeset
  3983
  
hgs
parents:
diff changeset
  3984
    CleanupStack::PushL( TCleanupItem( UpdateFixedToolbar, this ) );
hgs
parents:
diff changeset
  3985
    SetKeyEventFlags(0);    
hgs
parents:
diff changeset
  3986
    CleanupStack::PushL( TCleanupItem( DisableSendKey, this ) );  
hgs
parents:
diff changeset
  3987
    
hgs
parents:
diff changeset
  3988
    dlg->ExecuteLD( R_UNI_SENDINGSETTINGS_DIALOG );
hgs
parents:
diff changeset
  3989
    
hgs
parents:
diff changeset
  3990
    CleanupStack::PopAndDestroy(2); //DisableSendKey,UpdateFixedToolbar
hgs
parents:
diff changeset
  3991
    
hgs
parents:
diff changeset
  3992
    iEditorFlags &= ~EDoNotUpdateTitlePane;
hgs
parents:
diff changeset
  3993
hgs
parents:
diff changeset
  3994
    // Now store the changed settings into sms plugin if it exists
hgs
parents:
diff changeset
  3995
    // (there's no need to save them in mms plugin as user cannot change anything there)
hgs
parents:
diff changeset
  3996
    if( plugin )
hgs
parents:
diff changeset
  3997
        {
hgs
parents:
diff changeset
  3998
        plugin->SetSendingSettingsL( settings );
hgs
parents:
diff changeset
  3999
        }
hgs
parents:
diff changeset
  4000
hgs
parents:
diff changeset
  4001
    TBool unhideConfigurableFields = EFalse;
hgs
parents:
diff changeset
  4002
hgs
parents:
diff changeset
  4003
    if ( !( flags & EUniSettingsHideCharSet ) )
hgs
parents:
diff changeset
  4004
        { 
hgs
parents:
diff changeset
  4005
        // Ok, it was possible to change the charset in the first place
hgs
parents:
diff changeset
  4006
        if ( settings.iCharSupport != origCharSet )
hgs
parents:
diff changeset
  4007
            { 
hgs
parents:
diff changeset
  4008
            // CharSet has changed -> create new converter
hgs
parents:
diff changeset
  4009
            TUniMessageCharSetSupport charSetSupport = EUniMessageCharSetFull;
hgs
parents:
diff changeset
  4010
            if ( settings.iCharSupport == TUniSendingSettings::EUniCharSupportReduced )
hgs
parents:
diff changeset
  4011
                {
hgs
parents:
diff changeset
  4012
                charSetSupport = EUniMessageCharSetReduced;
hgs
parents:
diff changeset
  4013
                } 
hgs
parents:
diff changeset
  4014
            doc->CreateCharConverterL( charSetSupport ); 
hgs
parents:
diff changeset
  4015
            if( iNLTFeatureSupport )
hgs
parents:
diff changeset
  4016
                {
hgs
parents:
diff changeset
  4017
               	iSettingsChanged = ETrue;                
hgs
parents:
diff changeset
  4018
                //Turkish SMS-PREQ2265 specific
hgs
parents:
diff changeset
  4019
                if(plugin)
hgs
parents:
diff changeset
  4020
                    {
hgs
parents:
diff changeset
  4021
                    //Update the new charset support selected by user.
hgs
parents:
diff changeset
  4022
                    //Reset uniCode mode flag to EFalse(Restarts encoding algorithm in smsPlugin for optimal length calculation) 
hgs
parents:
diff changeset
  4023
                    plugin->SetEncodingSettings(EFalse, doc->AlternativeEncodingType(), charSetSupport); 
hgs
parents:
diff changeset
  4024
                    }                
hgs
parents:
diff changeset
  4025
                }
hgs
parents:
diff changeset
  4026
            }
hgs
parents:
diff changeset
  4027
        }
hgs
parents:
diff changeset
  4028
hgs
parents:
diff changeset
  4029
    // Now lets see the msg type changes
hgs
parents:
diff changeset
  4030
hgs
parents:
diff changeset
  4031
    if( iMtm->MessageTypeLocking() == EUniMessageTypeLocked )
hgs
parents:
diff changeset
  4032
        { 
hgs
parents:
diff changeset
  4033
        // First lets handle pre locked sms
hgs
parents:
diff changeset
  4034
        // no operation here because the msg type does not change
hgs
parents:
diff changeset
  4035
        // but just the bit in the message settings
hgs
parents:
diff changeset
  4036
        }
hgs
parents:
diff changeset
  4037
    else if( settings.iMessageType == TUniSendingSettings::EUniMessageTypeAutomatic )
hgs
parents:
diff changeset
  4038
        { 
hgs
parents:
diff changeset
  4039
        // Message type is now automatic
hgs
parents:
diff changeset
  4040
        iMtm->SetMessageTypeSetting( EUniMessageTypeSettingAutomatic );
hgs
parents:
diff changeset
  4041
        
hgs
parents:
diff changeset
  4042
        if ( IsBodySmsCompatibleL() )
hgs
parents:
diff changeset
  4043
            {
hgs
parents:
diff changeset
  4044
            doc->SetBodyUniState( EUniSms );
hgs
parents:
diff changeset
  4045
            }
hgs
parents:
diff changeset
  4046
        else
hgs
parents:
diff changeset
  4047
            {
hgs
parents:
diff changeset
  4048
            doc->SetBodyUniState( EUniMms );
hgs
parents:
diff changeset
  4049
            }
hgs
parents:
diff changeset
  4050
        
hgs
parents:
diff changeset
  4051
        if ( iHeader->IsHeaderSmsL() )
hgs
parents:
diff changeset
  4052
            {
hgs
parents:
diff changeset
  4053
            doc->SetHeaderUniState( EUniSms );
hgs
parents:
diff changeset
  4054
            }
hgs
parents:
diff changeset
  4055
        else
hgs
parents:
diff changeset
  4056
            {            
hgs
parents:
diff changeset
  4057
            doc->SetHeaderUniState( EUniMms );
hgs
parents:
diff changeset
  4058
            }
hgs
parents:
diff changeset
  4059
    
hgs
parents:
diff changeset
  4060
        if ( currentlyLockedToSms )
hgs
parents:
diff changeset
  4061
            { 
hgs
parents:
diff changeset
  4062
            // Show the fields again
hgs
parents:
diff changeset
  4063
            unhideConfigurableFields = ETrue;
hgs
parents:
diff changeset
  4064
            }
hgs
parents:
diff changeset
  4065
        }
hgs
parents:
diff changeset
  4066
    else if ( settings.iMessageType == TUniSendingSettings::EUniMessageTypeMultimedia )
hgs
parents:
diff changeset
  4067
        {
hgs
parents:
diff changeset
  4068
        iMtm->SetMessageTypeSetting( EUniMessageTypeSettingMms );
hgs
parents:
diff changeset
  4069
        if ( IsBodySmsCompatibleL() )
hgs
parents:
diff changeset
  4070
            {
hgs
parents:
diff changeset
  4071
            doc->SetBodyUniState( EUniSms );
hgs
parents:
diff changeset
  4072
            }
hgs
parents:
diff changeset
  4073
        else
hgs
parents:
diff changeset
  4074
            {
hgs
parents:
diff changeset
  4075
            doc->SetBodyUniState( EUniMms );
hgs
parents:
diff changeset
  4076
            }
hgs
parents:
diff changeset
  4077
            
hgs
parents:
diff changeset
  4078
        if ( currentlyLockedToSms )
hgs
parents:
diff changeset
  4079
            { 
hgs
parents:
diff changeset
  4080
            // Show the fields again
hgs
parents:
diff changeset
  4081
            unhideConfigurableFields = ETrue;
hgs
parents:
diff changeset
  4082
            }
hgs
parents:
diff changeset
  4083
        }
hgs
parents:
diff changeset
  4084
    else
hgs
parents:
diff changeset
  4085
        { 
hgs
parents:
diff changeset
  4086
        // Settings is one of the sms conversions (none, fax, pager)
hgs
parents:
diff changeset
  4087
        if ( iMtm->MessageTypeSetting() != EUniMessageTypeSettingSms )
hgs
parents:
diff changeset
  4088
            {
hgs
parents:
diff changeset
  4089
            iMtm->SetMessageTypeSetting( EUniMessageTypeSettingSms );
hgs
parents:
diff changeset
  4090
            // Also remove those additional headers that need to be removed
hgs
parents:
diff changeset
  4091
            TInt removeHeaders( 0 ); 
hgs
parents:
diff changeset
  4092
            if ( iHeader->AddressControl( CUniBaseHeader::EHeaderAddressCc ) )
hgs
parents:
diff changeset
  4093
                {
hgs
parents:
diff changeset
  4094
                removeHeaders |= EUniFeatureCc;
hgs
parents:
diff changeset
  4095
                }
hgs
parents:
diff changeset
  4096
            if ( iHeader->AddressControl( CUniBaseHeader::EHeaderAddressBcc ) )
hgs
parents:
diff changeset
  4097
                {
hgs
parents:
diff changeset
  4098
                removeHeaders |= EUniFeatureBcc;
hgs
parents:
diff changeset
  4099
                }
hgs
parents:
diff changeset
  4100
            if ( !(iEditorFlags & ESubjectOkInSms ) && iHeader->SubjectControl() )
hgs
parents:
diff changeset
  4101
                {
hgs
parents:
diff changeset
  4102
                removeHeaders |= EUniFeatureSubject;
hgs
parents:
diff changeset
  4103
                }
hgs
parents:
diff changeset
  4104
            iHeader->AddHeadersDeleteL( removeHeaders, EFalse );
hgs
parents:
diff changeset
  4105
            }
hgs
parents:
diff changeset
  4106
        // We can change this here because if it was not then SMS/Fax/Pager would not have been available in options
hgs
parents:
diff changeset
  4107
        // This is needed here in case SMS soft and hard limits are different so we have to "hardcode" the type to SMS
hgs
parents:
diff changeset
  4108
        doc->SetBodyUniState( EUniSms );
hgs
parents:
diff changeset
  4109
        doc->SetHeaderUniState( EUniSms );
hgs
parents:
diff changeset
  4110
        }
hgs
parents:
diff changeset
  4111
hgs
parents:
diff changeset
  4112
    if ( unhideConfigurableFields )
hgs
parents:
diff changeset
  4113
        { 
hgs
parents:
diff changeset
  4114
        // Read the current situation
hgs
parents:
diff changeset
  4115
        TInt addHeaders = iHeader->AddHeadersConfigL();
hgs
parents:
diff changeset
  4116
        // Add them to header
hgs
parents:
diff changeset
  4117
        iHeader->AddHeadersAddL( addHeaders );
hgs
parents:
diff changeset
  4118
        }
hgs
parents:
diff changeset
  4119
hgs
parents:
diff changeset
  4120
    if ( oldState != doc->UniState() )
hgs
parents:
diff changeset
  4121
        {  
hgs
parents:
diff changeset
  4122
         // If the state is not the same anymore, show popup
hgs
parents:
diff changeset
  4123
        UpdateIndicatorIconsL();
hgs
parents:
diff changeset
  4124
        ShowPopupNoteL( doc->UniState() == EUniMms ? ETrue : EFalse );
hgs
parents:
diff changeset
  4125
        }
hgs
parents:
diff changeset
  4126
    
hgs
parents:
diff changeset
  4127
    CheckLockedSmsWithAttaL();
hgs
parents:
diff changeset
  4128
    
hgs
parents:
diff changeset
  4129
    UpdateToolbarL();
hgs
parents:
diff changeset
  4130
    
hgs
parents:
diff changeset
  4131
    SetTitleL();
hgs
parents:
diff changeset
  4132
    MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  4133
hgs
parents:
diff changeset
  4134
    // Removes or sets the max size according to the settings
hgs
parents:
diff changeset
  4135
    SetOrRemoveMaxSizeInEdwin();
hgs
parents:
diff changeset
  4136
    
hgs
parents:
diff changeset
  4137
    if ( exitCode != CUniSendingSettingsDialog::EUniBack )
hgs
parents:
diff changeset
  4138
        {
hgs
parents:
diff changeset
  4139
        CAknAppUi::ProcessCommandL( EAknCmdExit );
hgs
parents:
diff changeset
  4140
        return;
hgs
parents:
diff changeset
  4141
        }
hgs
parents:
diff changeset
  4142
hgs
parents:
diff changeset
  4143
    UpdateMiddleSoftkeyL();
hgs
parents:
diff changeset
  4144
    UpdateIndicatorIconsL();
hgs
parents:
diff changeset
  4145
    }
hgs
parents:
diff changeset
  4146
hgs
parents:
diff changeset
  4147
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4148
// CUniEditorAppUi::DoUserInsertMediaL
hgs
parents:
diff changeset
  4149
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4150
//
hgs
parents:
diff changeset
  4151
void CUniEditorAppUi::DoUserInsertMediaL()
hgs
parents:
diff changeset
  4152
    {
hgs
parents:
diff changeset
  4153
    RArray<TInt> disabledItems;
hgs
parents:
diff changeset
  4154
    CleanupClosePushL( disabledItems );  
hgs
parents:
diff changeset
  4155
hgs
parents:
diff changeset
  4156
    if ( !( iSupportedFeatures & EUniFeatureCamcorder ) )
hgs
parents:
diff changeset
  4157
        {
hgs
parents:
diff changeset
  4158
        disabledItems.Append( EUniCmdInsertMediaNewVideo );
hgs
parents:
diff changeset
  4159
        disabledItems.Append( EUniCmdInsertMediaNewImage );
hgs
parents:
diff changeset
  4160
        }
hgs
parents:
diff changeset
  4161
    
hgs
parents:
diff changeset
  4162
    TInt selectedIndex( 0 );
hgs
parents:
diff changeset
  4163
    CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog( &selectedIndex );
hgs
parents:
diff changeset
  4164
    dlg->PrepareLC( R_UNIEDITOR_INSERT_QUERY );
hgs
parents:
diff changeset
  4165
    
hgs
parents:
diff changeset
  4166
    CEikFormattedCellListBox* listbox = dlg->ListControl()->Listbox();
hgs
parents:
diff changeset
  4167
    CDesCArray* itemArray = static_cast<CDesCArray*>( listbox->Model()->ItemTextArray() );
hgs
parents:
diff changeset
  4168
    
hgs
parents:
diff changeset
  4169
    if ( disabledItems.Count() > 0 )
hgs
parents:
diff changeset
  4170
        {
hgs
parents:
diff changeset
  4171
        for ( TInt currentItem = 0; currentItem < disabledItems.Count(); currentItem++ )
hgs
parents:
diff changeset
  4172
            {
hgs
parents:
diff changeset
  4173
            itemArray->Delete( disabledItems[ currentItem ] );
hgs
parents:
diff changeset
  4174
            listbox->HandleItemRemovalL();
hgs
parents:
diff changeset
  4175
            }
hgs
parents:
diff changeset
  4176
        }
hgs
parents:
diff changeset
  4177
        
hgs
parents:
diff changeset
  4178
    if ( dlg->RunLD() )
hgs
parents:
diff changeset
  4179
        {
hgs
parents:
diff changeset
  4180
        for ( TInt currentItem = disabledItems.Count() - 1; currentItem >= 0 ; currentItem-- )
hgs
parents:
diff changeset
  4181
            {
hgs
parents:
diff changeset
  4182
            if ( selectedIndex >= disabledItems[ currentItem ] )
hgs
parents:
diff changeset
  4183
                {
hgs
parents:
diff changeset
  4184
                selectedIndex++;
hgs
parents:
diff changeset
  4185
                }
hgs
parents:
diff changeset
  4186
            }
hgs
parents:
diff changeset
  4187
                
hgs
parents:
diff changeset
  4188
        switch ( selectedIndex )    
hgs
parents:
diff changeset
  4189
            {
hgs
parents:
diff changeset
  4190
            case EUniCmdInsertMediaImage:
hgs
parents:
diff changeset
  4191
                {
hgs
parents:
diff changeset
  4192
                DoUserInsertImageL( MsgAttachmentUtils::EImage );
hgs
parents:
diff changeset
  4193
                break;
hgs
parents:
diff changeset
  4194
                } 
hgs
parents:
diff changeset
  4195
            case EUniCmdInsertMediaNewImage:
hgs
parents:
diff changeset
  4196
                {
hgs
parents:
diff changeset
  4197
                DoUserInsertImageL( MsgAttachmentUtils::ENewImage );
hgs
parents:
diff changeset
  4198
                break;
hgs
parents:
diff changeset
  4199
                } 
hgs
parents:
diff changeset
  4200
            case EUniCmdInsertMediaVideo:
hgs
parents:
diff changeset
  4201
                {
hgs
parents:
diff changeset
  4202
                DoUserInsertVideoL( MsgAttachmentUtils::EVideo );
hgs
parents:
diff changeset
  4203
                break;
hgs
parents:
diff changeset
  4204
                } 
hgs
parents:
diff changeset
  4205
            case EUniCmdInsertMediaNewVideo:
hgs
parents:
diff changeset
  4206
                {
hgs
parents:
diff changeset
  4207
                DoUserInsertVideoL( MsgAttachmentUtils::ENewVideo );
hgs
parents:
diff changeset
  4208
                break;
hgs
parents:
diff changeset
  4209
                } 
hgs
parents:
diff changeset
  4210
            case EUniCmdInsertMediaAudio:
hgs
parents:
diff changeset
  4211
                {
hgs
parents:
diff changeset
  4212
                DoUserInsertAudioL( MsgAttachmentUtils::EAudio );
hgs
parents:
diff changeset
  4213
                break;
hgs
parents:
diff changeset
  4214
                } 
hgs
parents:
diff changeset
  4215
            case EUniCmdInsertMediaNewAudio:
hgs
parents:
diff changeset
  4216
                {
hgs
parents:
diff changeset
  4217
                DoUserInsertAudioL( MsgAttachmentUtils::ENewAudio );
hgs
parents:
diff changeset
  4218
                break;
hgs
parents:
diff changeset
  4219
                } 
hgs
parents:
diff changeset
  4220
            case EUniCmdInsertMediavCard:
hgs
parents:
diff changeset
  4221
                {
hgs
parents:
diff changeset
  4222
                DoUserInsertVCardL();
hgs
parents:
diff changeset
  4223
                break;
hgs
parents:
diff changeset
  4224
                }
hgs
parents:
diff changeset
  4225
            case EUniCmdInsertMediaSlide:
hgs
parents:
diff changeset
  4226
                {
hgs
parents:
diff changeset
  4227
                DoUserInsertSlideL();
hgs
parents:
diff changeset
  4228
                break;
hgs
parents:
diff changeset
  4229
                }
hgs
parents:
diff changeset
  4230
            case EUniCmdInsertMediaNote:
hgs
parents:
diff changeset
  4231
                {
hgs
parents:
diff changeset
  4232
                DoUserInsertTextL( EMemoText );
hgs
parents:
diff changeset
  4233
                break;
hgs
parents:
diff changeset
  4234
                }
hgs
parents:
diff changeset
  4235
            case EUniCmdInsertMediaTextAtta:
hgs
parents:
diff changeset
  4236
                {
hgs
parents:
diff changeset
  4237
                DoUserInsertOtherFileL( ETextFile );
hgs
parents:
diff changeset
  4238
                break;
hgs
parents:
diff changeset
  4239
                }
hgs
parents:
diff changeset
  4240
            case EUniCmdInsertMediaTemplate:
hgs
parents:
diff changeset
  4241
                {
hgs
parents:
diff changeset
  4242
                DoUserInsertTextL( ETemplateText );
hgs
parents:
diff changeset
  4243
                break;
hgs
parents:
diff changeset
  4244
                }
hgs
parents:
diff changeset
  4245
//            case EUniCmdInsertMediaSVG:
hgs
parents:
diff changeset
  4246
//                {
hgs
parents:
diff changeset
  4247
//                DoUserInsertSvgL();
hgs
parents:
diff changeset
  4248
//                break;
hgs
parents:
diff changeset
  4249
//                }
hgs
parents:
diff changeset
  4250
            case EUniCmdInsertMediaOtherFile:
hgs
parents:
diff changeset
  4251
                {
hgs
parents:
diff changeset
  4252
                DoUserInsertOtherFileL( EOtherFile );
hgs
parents:
diff changeset
  4253
                break;
hgs
parents:
diff changeset
  4254
                }
hgs
parents:
diff changeset
  4255
            default: 
hgs
parents:
diff changeset
  4256
                {
hgs
parents:
diff changeset
  4257
                __ASSERT_DEBUG( EFalse, Panic( EUniUnsupportedCommand ) );
hgs
parents:
diff changeset
  4258
                break;
hgs
parents:
diff changeset
  4259
                }
hgs
parents:
diff changeset
  4260
            }
hgs
parents:
diff changeset
  4261
        }
hgs
parents:
diff changeset
  4262
        
hgs
parents:
diff changeset
  4263
    CleanupStack::PopAndDestroy( &disabledItems );
hgs
parents:
diff changeset
  4264
    }
hgs
parents:
diff changeset
  4265
hgs
parents:
diff changeset
  4266
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4267
// CUniEditorAppUi::DoStartInsertL
hgs
parents:
diff changeset
  4268
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4269
//
hgs
parents:
diff changeset
  4270
void CUniEditorAppUi::DoStartInsertL( TBool aAddSlide, TBool aAddAsAttachment )
hgs
parents:
diff changeset
  4271
    {
hgs
parents:
diff changeset
  4272
    if ( aAddSlide &&
hgs
parents:
diff changeset
  4273
         iSmilModel->MaxSlideCountReached() )
hgs
parents:
diff changeset
  4274
       {
hgs
parents:
diff changeset
  4275
       ShowConfirmableInfoL( R_UNIEDITOR_INFO_MAX_SLIDES_ALL );
hgs
parents:
diff changeset
  4276
       iEditorFlags &= ~EMsgEditInProgress;
hgs
parents:
diff changeset
  4277
       }
hgs
parents:
diff changeset
  4278
   else
hgs
parents:
diff changeset
  4279
       {
hgs
parents:
diff changeset
  4280
        if ( !iInsertOperation )
hgs
parents:
diff changeset
  4281
            {
hgs
parents:
diff changeset
  4282
            iInsertOperation = CUniEditorInsertOperation::NewL(
hgs
parents:
diff changeset
  4283
                *this,
hgs
parents:
diff changeset
  4284
                *Document(),
hgs
parents:
diff changeset
  4285
                *iHeader,
hgs
parents:
diff changeset
  4286
                *iSlideLoader,
hgs
parents:
diff changeset
  4287
                *iView,
hgs
parents:
diff changeset
  4288
                FsSession() );
hgs
parents:
diff changeset
  4289
            }
hgs
parents:
diff changeset
  4290
        
hgs
parents:
diff changeset
  4291
        if ( aAddSlide )
hgs
parents:
diff changeset
  4292
            {
hgs
parents:
diff changeset
  4293
            iEditorFlags |= EInsertAddsSlide;
hgs
parents:
diff changeset
  4294
            }
hgs
parents:
diff changeset
  4295
        else
hgs
parents:
diff changeset
  4296
            {
hgs
parents:
diff changeset
  4297
            iEditorFlags &= ~EInsertAddsSlide;
hgs
parents:
diff changeset
  4298
            }
hgs
parents:
diff changeset
  4299
            
hgs
parents:
diff changeset
  4300
        ShowWaitNoteL( R_QTN_UNI_WAIT_INSERTING );
hgs
parents:
diff changeset
  4301
        
hgs
parents:
diff changeset
  4302
        iInsertOperation->Insert(
hgs
parents:
diff changeset
  4303
            iInsertingMedia,
hgs
parents:
diff changeset
  4304
            aAddSlide,
hgs
parents:
diff changeset
  4305
            aAddAsAttachment );
hgs
parents:
diff changeset
  4306
        
hgs
parents:
diff changeset
  4307
        ActivateInputBlockerL( iInsertOperation );
hgs
parents:
diff changeset
  4308
        
hgs
parents:
diff changeset
  4309
        iInsertingMedia = NULL;
hgs
parents:
diff changeset
  4310
       }
hgs
parents:
diff changeset
  4311
       // Enable the toolbar since inputblockers will take care now
hgs
parents:
diff changeset
  4312
      if( iFixedToolbar )
hgs
parents:
diff changeset
  4313
        {
hgs
parents:
diff changeset
  4314
        iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, EFalse, ETrue );    
hgs
parents:
diff changeset
  4315
        }
hgs
parents:
diff changeset
  4316
    }
hgs
parents:
diff changeset
  4317
hgs
parents:
diff changeset
  4318
hgs
parents:
diff changeset
  4319
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4320
// CreateMediaInfoForInsertL
hgs
parents:
diff changeset
  4321
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4322
//
hgs
parents:
diff changeset
  4323
TBool CUniEditorAppUi::CreateMediaInfoForInsertL( TMsgMediaType aMediaType,
hgs
parents:
diff changeset
  4324
                                                  const TDesC& aFileName )
hgs
parents:
diff changeset
  4325
    {
hgs
parents:
diff changeset
  4326
    RFile file = Document()->DataModel()->MediaResolver().FileHandleL( aFileName );
hgs
parents:
diff changeset
  4327
    CleanupClosePushL( file );
hgs
parents:
diff changeset
  4328
    
hgs
parents:
diff changeset
  4329
    delete iInsertingMedia;
hgs
parents:
diff changeset
  4330
    iInsertingMedia = NULL;
hgs
parents:
diff changeset
  4331
    
hgs
parents:
diff changeset
  4332
    iInsertingMedia = Document()->DataModel()->MediaResolver().CreateMediaInfoL( file );
hgs
parents:
diff changeset
  4333
hgs
parents:
diff changeset
  4334
    Document()->DataModel()->MediaResolver().ParseInfoDetailsL( iInsertingMedia, file );
hgs
parents:
diff changeset
  4335
    
hgs
parents:
diff changeset
  4336
    TMmsConformance conformance = 
hgs
parents:
diff changeset
  4337
        Document()->DataModel()->MmsConformance().MediaConformance( *iInsertingMedia );
hgs
parents:
diff changeset
  4338
    
hgs
parents:
diff changeset
  4339
    CleanupStack::PopAndDestroy( &file );
hgs
parents:
diff changeset
  4340
    
hgs
parents:
diff changeset
  4341
    TInt errResId = KUniInvalidResourceId;
hgs
parents:
diff changeset
  4342
    TInt confStatus = conformance.iConfStatus;
hgs
parents:
diff changeset
  4343
hgs
parents:
diff changeset
  4344
    // Supported type check
hgs
parents:
diff changeset
  4345
    if ( confStatus & EMmsConfNokNotSupported ||
hgs
parents:
diff changeset
  4346
        ( Document()->CreationMode() == EMmsCreationModeRestricted &&
hgs
parents:
diff changeset
  4347
          confStatus & EMmsConfNokFreeModeOnly ) )
hgs
parents:
diff changeset
  4348
        {
hgs
parents:
diff changeset
  4349
        errResId = R_UNIEDITOR_INFO_UNSUPPORTED_OBJECT;
hgs
parents:
diff changeset
  4350
        if( Document()->CreationModeUserChangeable() &&
hgs
parents:
diff changeset
  4351
           !Document()->CreationMode() )
hgs
parents:
diff changeset
  4352
            {
hgs
parents:
diff changeset
  4353
            errResId = R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECT;
hgs
parents:
diff changeset
  4354
            }
hgs
parents:
diff changeset
  4355
        }
hgs
parents:
diff changeset
  4356
    else if ( confStatus & EMmsConfNokDRM )
hgs
parents:
diff changeset
  4357
        {
hgs
parents:
diff changeset
  4358
        // DRM check
hgs
parents:
diff changeset
  4359
        errResId = R_UNIEDITOR_INFO_SEND_FORBID_1;
hgs
parents:
diff changeset
  4360
        }
hgs
parents:
diff changeset
  4361
    else if ( aMediaType != EMsgMediaUnknown && 
hgs
parents:
diff changeset
  4362
              iInsertingMedia->MediaType() != aMediaType )
hgs
parents:
diff changeset
  4363
        {
hgs
parents:
diff changeset
  4364
        // Keep this after DRM check!
hgs
parents:
diff changeset
  4365
        errResId = R_UNIEDITOR_INFO_UNSUPPORTED_OBJECT;
hgs
parents:
diff changeset
  4366
        if( Document()->CreationModeUserChangeable() &&
hgs
parents:
diff changeset
  4367
            !Document()->CreationMode() )
hgs
parents:
diff changeset
  4368
            {
hgs
parents:
diff changeset
  4369
            errResId = R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECT;
hgs
parents:
diff changeset
  4370
            }
hgs
parents:
diff changeset
  4371
        }
hgs
parents:
diff changeset
  4372
    else if ( !conformance.iCanAdapt &&
hgs
parents:
diff changeset
  4373
        ( confStatus & EMmsConfNokTooBig ||
hgs
parents:
diff changeset
  4374
        TUint( MessageSizeInBytes() + iInsertingMedia->FileSize() )
hgs
parents:
diff changeset
  4375
        > Document()->MaxMessageSize() ) )
hgs
parents:
diff changeset
  4376
        {
hgs
parents:
diff changeset
  4377
        // File is too big and it cannot be adapted (e.g. scaled down)
hgs
parents:
diff changeset
  4378
        errResId = R_UNIEDITOR_INFO_OBJECT_TOO_BIG;
hgs
parents:
diff changeset
  4379
        }
hgs
parents:
diff changeset
  4380
hgs
parents:
diff changeset
  4381
    if ( errResId != KUniInvalidResourceId )
hgs
parents:
diff changeset
  4382
        {
hgs
parents:
diff changeset
  4383
        delete iInsertingMedia;
hgs
parents:
diff changeset
  4384
        iInsertingMedia = NULL;
hgs
parents:
diff changeset
  4385
        ShowInformationNoteL( errResId, EFalse );
hgs
parents:
diff changeset
  4386
        return EFalse;
hgs
parents:
diff changeset
  4387
        }
hgs
parents:
diff changeset
  4388
hgs
parents:
diff changeset
  4389
    if ( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL( Document()->Session(),
hgs
parents:
diff changeset
  4390
                                                              iInsertingMedia->FileSize() ) )
hgs
parents:
diff changeset
  4391
        {
hgs
parents:
diff changeset
  4392
         delete iInsertingMedia;
hgs
parents:
diff changeset
  4393
         iInsertingMedia = NULL;       
hgs
parents:
diff changeset
  4394
         ShowConfirmableInfoL( R_UNIEDITOR_NOT_ENOUGH_MEMORY );
hgs
parents:
diff changeset
  4395
         return EFalse;             
hgs
parents:
diff changeset
  4396
        }
hgs
parents:
diff changeset
  4397
        
hgs
parents:
diff changeset
  4398
    return ETrue;
hgs
parents:
diff changeset
  4399
    }
hgs
parents:
diff changeset
  4400
hgs
parents:
diff changeset
  4401
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4402
// CUniEditorAppUi::SuperDistributionCheckForInsertL
hgs
parents:
diff changeset
  4403
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4404
//
hgs
parents:
diff changeset
  4405
TBool CUniEditorAppUi::SuperDistributionCheckForInsertL()
hgs
parents:
diff changeset
  4406
    {
hgs
parents:
diff changeset
  4407
    // SuperDistribution check & query
hgs
parents:
diff changeset
  4408
    if ( iSupportedFeatures & EUniFeatureDrmFull &&
hgs
parents:
diff changeset
  4409
         iInsertingMedia->Protection() & EFileProtSuperDistributable )
hgs
parents:
diff changeset
  4410
        {
hgs
parents:
diff changeset
  4411
        if ( !ShowConfirmationQueryL( R_UNIEDITOR_QUEST_SEND_WO_RIGHTS ) )
hgs
parents:
diff changeset
  4412
            {
hgs
parents:
diff changeset
  4413
            delete iInsertingMedia;
hgs
parents:
diff changeset
  4414
            iInsertingMedia = NULL;
hgs
parents:
diff changeset
  4415
            return EFalse;
hgs
parents:
diff changeset
  4416
            }
hgs
parents:
diff changeset
  4417
        }
hgs
parents:
diff changeset
  4418
    return ETrue;
hgs
parents:
diff changeset
  4419
    }
hgs
parents:
diff changeset
  4420
hgs
parents:
diff changeset
  4421
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4422
// CUniEditorAppUi::CheckMediaInfoForInsertL
hgs
parents:
diff changeset
  4423
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4424
//
hgs
parents:
diff changeset
  4425
TBool CUniEditorAppUi::CheckMediaInfoForInsertL()
hgs
parents:
diff changeset
  4426
    {
hgs
parents:
diff changeset
  4427
    __ASSERT_DEBUG( iInsertingMedia, Panic( EUniNullPointer ) );
hgs
parents:
diff changeset
  4428
hgs
parents:
diff changeset
  4429
    TMmsConformance conformance = 
hgs
parents:
diff changeset
  4430
        Document()->DataModel()->MmsConformance().MediaConformance( *iInsertingMedia );
hgs
parents:
diff changeset
  4431
    
hgs
parents:
diff changeset
  4432
    TInt errResId = KUniInvalidResourceId;
hgs
parents:
diff changeset
  4433
    TInt confStatus = conformance.iConfStatus;
hgs
parents:
diff changeset
  4434
    
hgs
parents:
diff changeset
  4435
    // In "free" mode user can insert images that are larger by dimensions than allowed by conformance
hgs
parents:
diff changeset
  4436
    if ( Document()->CreationMode() != EMmsCreationModeRestricted )
hgs
parents:
diff changeset
  4437
        {
hgs
parents:
diff changeset
  4438
        //Mask "Corrupted" away in free & guided mode.
hgs
parents:
diff changeset
  4439
        confStatus &= ~EMmsConfNokCorrupt;
hgs
parents:
diff changeset
  4440
        
hgs
parents:
diff changeset
  4441
        // If user answers yes to Guided mode confirmation query he/she moves to free mode
hgs
parents:
diff changeset
  4442
        if ( ( confStatus & ( EMmsConfNokFreeModeOnly | EMmsConfNokScalingNeeded ) ) &&
hgs
parents:
diff changeset
  4443
             !( confStatus & ~( EMmsConfNokFreeModeOnly | EMmsConfNokScalingNeeded ) ) )
hgs
parents:
diff changeset
  4444
            {
hgs
parents:
diff changeset
  4445
            if ( iInsertingMedia->Protection() & EFileProtSuperDistributable )
hgs
parents:
diff changeset
  4446
                {
hgs
parents:
diff changeset
  4447
                // SuperDistribution not checked here
hgs
parents:
diff changeset
  4448
                // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
hgs
parents:
diff changeset
  4449
                confStatus &= ~EMmsConfNokFreeModeOnly;
hgs
parents:
diff changeset
  4450
                confStatus &= ~EMmsConfNokScalingNeeded;
hgs
parents:
diff changeset
  4451
                }
hgs
parents:
diff changeset
  4452
            else if ( ShowGuidedModeConfirmationQueryL( R_UNIEDITOR_QUEST_GUIDED_OBJ ) )
hgs
parents:
diff changeset
  4453
                {
hgs
parents:
diff changeset
  4454
                // Guided query accepted.
hgs
parents:
diff changeset
  4455
                // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
hgs
parents:
diff changeset
  4456
                confStatus &= ~EMmsConfNokFreeModeOnly;
hgs
parents:
diff changeset
  4457
                confStatus &= ~EMmsConfNokScalingNeeded;
hgs
parents:
diff changeset
  4458
                }
hgs
parents:
diff changeset
  4459
            else
hgs
parents:
diff changeset
  4460
                {
hgs
parents:
diff changeset
  4461
                // Guided query not accepted. Stop insertion.
hgs
parents:
diff changeset
  4462
                delete iInsertingMedia;
hgs
parents:
diff changeset
  4463
                iInsertingMedia = NULL;
hgs
parents:
diff changeset
  4464
                return EFalse;
hgs
parents:
diff changeset
  4465
                }
hgs
parents:
diff changeset
  4466
            }
hgs
parents:
diff changeset
  4467
        }
hgs
parents:
diff changeset
  4468
hgs
parents:
diff changeset
  4469
    if ( confStatus & EMmsConfNokTooBig ||
hgs
parents:
diff changeset
  4470
        TUint( MessageSizeInBytes() + iInsertingMedia->FileSize() )
hgs
parents:
diff changeset
  4471
        > Document()->MaxMessageSize() )
hgs
parents:
diff changeset
  4472
        {
hgs
parents:
diff changeset
  4473
        // Size check
hgs
parents:
diff changeset
  4474
        errResId = R_UNIEDITOR_INFO_OBJECT_TOO_BIG;
hgs
parents:
diff changeset
  4475
        }
hgs
parents:
diff changeset
  4476
    else if ( confStatus != EMmsConfOk )
hgs
parents:
diff changeset
  4477
        {
hgs
parents:
diff changeset
  4478
        // Sanity check
hgs
parents:
diff changeset
  4479
        errResId = R_UNIEDITOR_INFO_UNSUPPORTED_OBJECT;
hgs
parents:
diff changeset
  4480
        if( Document()->CreationModeUserChangeable() &&
hgs
parents:
diff changeset
  4481
            !Document()->CreationMode() )
hgs
parents:
diff changeset
  4482
            {
hgs
parents:
diff changeset
  4483
            errResId = R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECT;
hgs
parents:
diff changeset
  4484
            }
hgs
parents:
diff changeset
  4485
        }
hgs
parents:
diff changeset
  4486
hgs
parents:
diff changeset
  4487
    if ( errResId != KUniInvalidResourceId )
hgs
parents:
diff changeset
  4488
        {
hgs
parents:
diff changeset
  4489
        delete iInsertingMedia;
hgs
parents:
diff changeset
  4490
        iInsertingMedia = NULL;
hgs
parents:
diff changeset
  4491
        ShowInformationNoteL( errResId, EFalse );
hgs
parents:
diff changeset
  4492
        return EFalse;
hgs
parents:
diff changeset
  4493
        }
hgs
parents:
diff changeset
  4494
        
hgs
parents:
diff changeset
  4495
    return ETrue;
hgs
parents:
diff changeset
  4496
    }
hgs
parents:
diff changeset
  4497
hgs
parents:
diff changeset
  4498
hgs
parents:
diff changeset
  4499
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4500
// CUniEditorAppUi::DoUserInsertSlideL
hgs
parents:
diff changeset
  4501
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4502
//
hgs
parents:
diff changeset
  4503
void CUniEditorAppUi::DoUserInsertSlideL()
hgs
parents:
diff changeset
  4504
    {
hgs
parents:
diff changeset
  4505
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  4506
hgs
parents:
diff changeset
  4507
    if ( TUint( MessageSizeInBytes() + KEmptySlideSize ) > Document()->MaxMessageSize() )
hgs
parents:
diff changeset
  4508
        {
hgs
parents:
diff changeset
  4509
        ShowConfirmableInfoL( R_UNIEDITOR_INFO_OBJECT_TOO_BIG );
hgs
parents:
diff changeset
  4510
        }
hgs
parents:
diff changeset
  4511
    else if ( iSmilModel->MaxSlideCountReached() )
hgs
parents:
diff changeset
  4512
        {
hgs
parents:
diff changeset
  4513
        ShowConfirmableInfoL( R_UNIEDITOR_INFO_MAX_SLIDES_ALL );
hgs
parents:
diff changeset
  4514
        }
hgs
parents:
diff changeset
  4515
    else
hgs
parents:
diff changeset
  4516
        {
hgs
parents:
diff changeset
  4517
        TInt index = Document()->CurrentSlide() + 1;
hgs
parents:
diff changeset
  4518
        iSmilModel->AddSlideL( index );
hgs
parents:
diff changeset
  4519
        Document()->SetBodyModified( ETrue );
hgs
parents:
diff changeset
  4520
        DoUserChangeSlideL( index );
hgs
parents:
diff changeset
  4521
        }
hgs
parents:
diff changeset
  4522
    }
hgs
parents:
diff changeset
  4523
hgs
parents:
diff changeset
  4524
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4525
// CUniEditorAppUi::DoUserRemoveSlideL
hgs
parents:
diff changeset
  4526
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4527
//
hgs
parents:
diff changeset
  4528
void CUniEditorAppUi::DoUserRemoveSlideL()
hgs
parents:
diff changeset
  4529
    {
hgs
parents:
diff changeset
  4530
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  4531
hgs
parents:
diff changeset
  4532
    if ( ShowConfirmationQueryL( R_UNIEDITOR_QUEST_REMOVE_PAGE ) ) 
hgs
parents:
diff changeset
  4533
        {
hgs
parents:
diff changeset
  4534
        DoRemoveSlideL();
hgs
parents:
diff changeset
  4535
        }
hgs
parents:
diff changeset
  4536
        
hgs
parents:
diff changeset
  4537
    Document()->SetBodyModified( ETrue ); 
hgs
parents:
diff changeset
  4538
    }
hgs
parents:
diff changeset
  4539
hgs
parents:
diff changeset
  4540
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4541
// CUniEditorAppUi::DoRemoveSlideL
hgs
parents:
diff changeset
  4542
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4543
//
hgs
parents:
diff changeset
  4544
void CUniEditorAppUi::DoRemoveSlideL()
hgs
parents:
diff changeset
  4545
    {
hgs
parents:
diff changeset
  4546
    TInt currSlide = Document()->CurrentSlide();
hgs
parents:
diff changeset
  4547
    TMsgControlId focusedControl( EMsgComponentIdNull );
hgs
parents:
diff changeset
  4548
    
hgs
parents:
diff changeset
  4549
    if( Document()->DataModel()->SmilType() == EMmsSmil &&
hgs
parents:
diff changeset
  4550
        ( currSlide == 0 || currSlide == 1 ) )
hgs
parents:
diff changeset
  4551
        { 
hgs
parents:
diff changeset
  4552
        if ( Document()->DataModel()->SmilType() == EMmsSmil )
hgs
parents:
diff changeset
  4553
            {
hgs
parents:
diff changeset
  4554
            CMsgAddressControl* to = iHeader->AddressControl( CUniEditorHeader::EHeaderAddressTo );
hgs
parents:
diff changeset
  4555
            CMsgAddressControl* cc = iHeader->AddressControl( CUniEditorHeader::EHeaderAddressCc );
hgs
parents:
diff changeset
  4556
            CMsgAddressControl* bcc = iHeader->AddressControl( CUniEditorHeader::EHeaderAddressBcc );
hgs
parents:
diff changeset
  4557
            
hgs
parents:
diff changeset
  4558
            if( to && to->GetRecipientsL()->Count() == 0 )
hgs
parents:
diff changeset
  4559
                {
hgs
parents:
diff changeset
  4560
                focusedControl = EMsgComponentIdTo;
hgs
parents:
diff changeset
  4561
                }
hgs
parents:
diff changeset
  4562
            else if( cc && cc->GetRecipientsL()->Count() == 0 )
hgs
parents:
diff changeset
  4563
                {
hgs
parents:
diff changeset
  4564
                focusedControl = EMsgComponentIdCc;
hgs
parents:
diff changeset
  4565
                }
hgs
parents:
diff changeset
  4566
            else if( bcc && bcc->GetRecipientsL()->Count() == 0 )
hgs
parents:
diff changeset
  4567
                {
hgs
parents:
diff changeset
  4568
                focusedControl = EMsgComponentIdBcc;
hgs
parents:
diff changeset
  4569
                }
hgs
parents:
diff changeset
  4570
            else if( iSupportedFeatures & EUniFeatureSubject &&
hgs
parents:
diff changeset
  4571
                     SubjectCtrl() &&
hgs
parents:
diff changeset
  4572
                     SubjectCtrl()->TextContent().DocumentLength() == 0 )
hgs
parents:
diff changeset
  4573
                {
hgs
parents:
diff changeset
  4574
                focusedControl = EMsgComponentIdSubject;
hgs
parents:
diff changeset
  4575
                }
hgs
parents:
diff changeset
  4576
            }
hgs
parents:
diff changeset
  4577
        }
hgs
parents:
diff changeset
  4578
    
hgs
parents:
diff changeset
  4579
    TInt objCount = iSmilModel->SlideObjectCount( currSlide );
hgs
parents:
diff changeset
  4580
    ReleaseImage( ETrue );
hgs
parents:
diff changeset
  4581
    
hgs
parents:
diff changeset
  4582
    for ( TInt i = 0; i < objCount; i++ )
hgs
parents:
diff changeset
  4583
        {
hgs
parents:
diff changeset
  4584
        iSmilModel->RemoveObjectByIndexL( currSlide, 0 );
hgs
parents:
diff changeset
  4585
        }
hgs
parents:
diff changeset
  4586
    iSmilModel->RemoveSlide( currSlide );
hgs
parents:
diff changeset
  4587
    TInt nextSlide = currSlide;
hgs
parents:
diff changeset
  4588
    if ( nextSlide )
hgs
parents:
diff changeset
  4589
        {
hgs
parents:
diff changeset
  4590
        nextSlide--;
hgs
parents:
diff changeset
  4591
        }
hgs
parents:
diff changeset
  4592
    //Set current slide to invalid in order
hgs
parents:
diff changeset
  4593
    //to prevent false events coming to wrong slides
hgs
parents:
diff changeset
  4594
    Document()->SetCurrentSlide( -1 );
hgs
parents:
diff changeset
  4595
    iView->SetScrollParts( iSmilModel->SlideCount() );
hgs
parents:
diff changeset
  4596
    iView->SetCurrentPart( nextSlide );
hgs
parents:
diff changeset
  4597
    iNextFocus = focusedControl;
hgs
parents:
diff changeset
  4598
    DoUserChangeSlideL( nextSlide );
hgs
parents:
diff changeset
  4599
    }
hgs
parents:
diff changeset
  4600
hgs
parents:
diff changeset
  4601
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4602
// CUniEditorAppUi::DoUserChangeSlideL
hgs
parents:
diff changeset
  4603
//
hgs
parents:
diff changeset
  4604
// If change is made from first slide containing address fields into
hgs
parents:
diff changeset
  4605
// some other slide and address control is currently focused set
hgs
parents:
diff changeset
  4606
// the current input mode into all address fields. This enables
hgs
parents:
diff changeset
  4607
// correct input mode to be used if focus is set to different
hgs
parents:
diff changeset
  4608
// address field when returning to first slide and also if
hgs
parents:
diff changeset
  4609
// message is closed from different slide.
hgs
parents:
diff changeset
  4610
// After input mode is set operation is created if necessary and
hgs
parents:
diff changeset
  4611
// activated.
hgs
parents:
diff changeset
  4612
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4613
//
hgs
parents:
diff changeset
  4614
void CUniEditorAppUi::DoUserChangeSlideL( TInt aSlideNum )
hgs
parents:
diff changeset
  4615
    {
hgs
parents:
diff changeset
  4616
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  4617
    
hgs
parents:
diff changeset
  4618
    CMsgBaseControl* ctrl = iView->FocusedControl();  // ctrl can be NULL.
hgs
parents:
diff changeset
  4619
    if ( ctrl &&
hgs
parents:
diff changeset
  4620
         Document()->CurrentSlide() == 0 &&
hgs
parents:
diff changeset
  4621
         iHeader->IsAddressControl( ctrl->ControlId() ) )
hgs
parents:
diff changeset
  4622
        {
hgs
parents:
diff changeset
  4623
        SetInputModeToAddressFields( static_cast<CMsgAddressControl*>( ctrl )->Editor().AknEditorCurrentInputMode() );
hgs
parents:
diff changeset
  4624
        }
hgs
parents:
diff changeset
  4625
    
hgs
parents:
diff changeset
  4626
    if ( !iChangeSlideOperation )
hgs
parents:
diff changeset
  4627
        {
hgs
parents:
diff changeset
  4628
        iChangeSlideOperation = CUniEditorChangeSlideOperation::NewL(
hgs
parents:
diff changeset
  4629
            *this,
hgs
parents:
diff changeset
  4630
            *Document(),
hgs
parents:
diff changeset
  4631
            *iHeader,
hgs
parents:
diff changeset
  4632
            *iSlideLoader,
hgs
parents:
diff changeset
  4633
            *iView,
hgs
parents:
diff changeset
  4634
            FsSession() );
hgs
parents:
diff changeset
  4635
        }
hgs
parents:
diff changeset
  4636
    
hgs
parents:
diff changeset
  4637
    iChangeSlideOperation->ChangeSlide(  aSlideNum );
hgs
parents:
diff changeset
  4638
hgs
parents:
diff changeset
  4639
    iNextSlide = aSlideNum;
hgs
parents:
diff changeset
  4640
    
hgs
parents:
diff changeset
  4641
    iScreenClearer = CAknLocalScreenClearer::NewLC( EFalse );
hgs
parents:
diff changeset
  4642
    CleanupStack::Pop();
hgs
parents:
diff changeset
  4643
    iScreenClearer->SetExtent( iScreenClearer->Position(), ClientRect().Size() );
hgs
parents:
diff changeset
  4644
    
hgs
parents:
diff changeset
  4645
    ShowWaitNoteL( R_QTN_UNI_WAIT_SLIDE_CHANGE );
hgs
parents:
diff changeset
  4646
    
hgs
parents:
diff changeset
  4647
    ActivateInputBlockerL( iChangeSlideOperation );
hgs
parents:
diff changeset
  4648
        
hgs
parents:
diff changeset
  4649
    BeginActiveWait( iChangeSlideOperation );
hgs
parents:
diff changeset
  4650
    }
hgs
parents:
diff changeset
  4651
hgs
parents:
diff changeset
  4652
hgs
parents:
diff changeset
  4653
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4654
// CUniEditorAppUi::DoSetFocusL
hgs
parents:
diff changeset
  4655
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4656
//
hgs
parents:
diff changeset
  4657
void CUniEditorAppUi::DoSetFocusL()
hgs
parents:
diff changeset
  4658
    {
hgs
parents:
diff changeset
  4659
    // 1. to To: control, if empty and exists
hgs
parents:
diff changeset
  4660
    // 2. if not empty, to Subject: control, if empty and exists
hgs
parents:
diff changeset
  4661
    // 3. otherwise to body    
hgs
parents:
diff changeset
  4662
    TMsgControlId focusedControl( EMsgComponentIdTo );
hgs
parents:
diff changeset
  4663
    if ( iNextFocus != EMsgComponentIdNull )
hgs
parents:
diff changeset
  4664
        {
hgs
parents:
diff changeset
  4665
        // iNextFocus is set when changing slide
hgs
parents:
diff changeset
  4666
        focusedControl = iNextFocus;
hgs
parents:
diff changeset
  4667
        iNextFocus = EMsgComponentIdNull;
hgs
parents:
diff changeset
  4668
        }
hgs
parents:
diff changeset
  4669
    else
hgs
parents:
diff changeset
  4670
        {
hgs
parents:
diff changeset
  4671
        // To first empty field. Cc and Bcc are not supported here
hgs
parents:
diff changeset
  4672
        CMsgAddressControl* to = ToCtrl();
hgs
parents:
diff changeset
  4673
        
hgs
parents:
diff changeset
  4674
        if ( Document()->DataModel()->SmilType() == EMmsSmil &&  
hgs
parents:
diff changeset
  4675
             ( !to || 
hgs
parents:
diff changeset
  4676
               to->GetRecipientsL()->Count() > 0 ) )
hgs
parents:
diff changeset
  4677
            {
hgs
parents:
diff changeset
  4678
            // No To-control or there are recipients
hgs
parents:
diff changeset
  4679
            // -> focus to end of bodytext or to Subject field if empty
hgs
parents:
diff changeset
  4680
            focusedControl = EMsgComponentIdBody;
hgs
parents:
diff changeset
  4681
            if ( iSupportedFeatures & EUniFeatureSubject )
hgs
parents:
diff changeset
  4682
                {
hgs
parents:
diff changeset
  4683
                CMsgExpandableControl* subj = SubjectCtrl();
hgs
parents:
diff changeset
  4684
                if ( subj && 
hgs
parents:
diff changeset
  4685
                     subj->TextContent().DocumentLength() == 0 )
hgs
parents:
diff changeset
  4686
                    {
hgs
parents:
diff changeset
  4687
                    focusedControl = EMsgComponentIdSubject;
hgs
parents:
diff changeset
  4688
                    }
hgs
parents:
diff changeset
  4689
                }
hgs
parents:
diff changeset
  4690
            
hgs
parents:
diff changeset
  4691
            if ( !BodyCtrl() )
hgs
parents:
diff changeset
  4692
                {
hgs
parents:
diff changeset
  4693
                focusedControl = EMsgComponentIdTo;
hgs
parents:
diff changeset
  4694
                }
hgs
parents:
diff changeset
  4695
                
hgs
parents:
diff changeset
  4696
            if ( focusedControl == EMsgComponentIdBody )
hgs
parents:
diff changeset
  4697
                {
hgs
parents:
diff changeset
  4698
                BodyCtrl()->SetCursorPosL( BodyCtrlEditor()->TextLength() );
hgs
parents:
diff changeset
  4699
                }
hgs
parents:
diff changeset
  4700
            }
hgs
parents:
diff changeset
  4701
        }
hgs
parents:
diff changeset
  4702
    iView->SetFocus( focusedControl );
hgs
parents:
diff changeset
  4703
    }
hgs
parents:
diff changeset
  4704
hgs
parents:
diff changeset
  4705
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4706
// CUniEditorAppUi::SetTitleL
hgs
parents:
diff changeset
  4707
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4708
//
hgs
parents:
diff changeset
  4709
void CUniEditorAppUi::SetTitleL()
hgs
parents:
diff changeset
  4710
    {
hgs
parents:
diff changeset
  4711
    // If titlepane exists -> set the right title
hgs
parents:
diff changeset
  4712
    HBufC* titleString = Document()->UniState() == EUniMms ? iTitleMms : 
hgs
parents:
diff changeset
  4713
                                                             iTitleSms;
hgs
parents:
diff changeset
  4714
    iTitlePane->SetTextL( titleString->Des(), ETrue );
hgs
parents:
diff changeset
  4715
        
hgs
parents:
diff changeset
  4716
    CGulIcon* image = Document()->UniState() == EUniMms? iIconMms : 
hgs
parents:
diff changeset
  4717
                                                         iIconSms;
hgs
parents:
diff changeset
  4718
    
hgs
parents:
diff changeset
  4719
    // Create duplicates of the icon to be used
hgs
parents:
diff changeset
  4720
    CFbsBitmap* bitmap = new( ELeave ) CFbsBitmap();
hgs
parents:
diff changeset
  4721
    CleanupStack::PushL( bitmap );
hgs
parents:
diff changeset
  4722
    
hgs
parents:
diff changeset
  4723
    CFbsBitmap* bitmapMask = new( ELeave ) CFbsBitmap();
hgs
parents:
diff changeset
  4724
    CleanupStack::PushL( bitmapMask );
hgs
parents:
diff changeset
  4725
    
hgs
parents:
diff changeset
  4726
    User::LeaveIfError( bitmap->Duplicate( image->Bitmap()->Handle() ) );
hgs
parents:
diff changeset
  4727
    User::LeaveIfError( bitmapMask->Duplicate( image->Mask()->Handle() ) );
hgs
parents:
diff changeset
  4728
hgs
parents:
diff changeset
  4729
    iTitlePane->SetSmallPicture( bitmap, bitmapMask, ETrue );
hgs
parents:
diff changeset
  4730
    if(!iFinalizeLaunchL)
hgs
parents:
diff changeset
  4731
    iTitlePane->DrawNow();
hgs
parents:
diff changeset
  4732
    
hgs
parents:
diff changeset
  4733
    CleanupStack::Pop( 2, bitmap );
hgs
parents:
diff changeset
  4734
    }
hgs
parents:
diff changeset
  4735
hgs
parents:
diff changeset
  4736
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4737
// CUniEditorAppUi::DoUserInsertImageL
hgs
parents:
diff changeset
  4738
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4739
//
hgs
parents:
diff changeset
  4740
void CUniEditorAppUi::DoUserInsertImageL( MsgAttachmentUtils::TMsgAttachmentFetchType aFetchType )
hgs
parents:
diff changeset
  4741
    {
hgs
parents:
diff changeset
  4742
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  4743
    
hgs
parents:
diff changeset
  4744
    if( iFixedToolbar )
hgs
parents:
diff changeset
  4745
        {
hgs
parents:
diff changeset
  4746
        iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, ETrue, EFalse );    
hgs
parents:
diff changeset
  4747
        }
hgs
parents:
diff changeset
  4748
    iInsertingType = EMsgMediaImage;
hgs
parents:
diff changeset
  4749
    
hgs
parents:
diff changeset
  4750
    TBool fetchFile( ETrue );
hgs
parents:
diff changeset
  4751
    TBool enabletoolbarext = ETrue;
hgs
parents:
diff changeset
  4752
    while ( fetchFile )
hgs
parents:
diff changeset
  4753
        {
hgs
parents:
diff changeset
  4754
        fetchFile = EFalse;
hgs
parents:
diff changeset
  4755
        iEditorFlags |= EMsgEditInProgress;
hgs
parents:
diff changeset
  4756
        TBool stat= EFalse;
hgs
parents:
diff changeset
  4757
        TRAPD(Err,stat = FetchFileL( aFetchType ));
hgs
parents:
diff changeset
  4758
         if (Err == KErrNone && stat)        
hgs
parents:
diff changeset
  4759
            {
hgs
parents:
diff changeset
  4760
            if ( SuperDistributionCheckForInsertL() )
hgs
parents:
diff changeset
  4761
                {
hgs
parents:
diff changeset
  4762
                // CheckMediaInfoForInsertL() done in CUniEditorInsertOperation
hgs
parents:
diff changeset
  4763
                TBool addSlide = EFalse;
hgs
parents:
diff changeset
  4764
                if ( ObjectsAvailable() & 
hgs
parents:
diff changeset
  4765
                    ( EUniImageFlag | EUniVideoFlag | EUniSvgFlag ) )
hgs
parents:
diff changeset
  4766
                    {
hgs
parents:
diff changeset
  4767
                    addSlide = ETrue;
hgs
parents:
diff changeset
  4768
                    }
hgs
parents:
diff changeset
  4769
hgs
parents:
diff changeset
  4770
                DoStartInsertL( addSlide, EFalse );
hgs
parents:
diff changeset
  4771
                enabletoolbarext = EFalse;
hgs
parents:
diff changeset
  4772
                }
hgs
parents:
diff changeset
  4773
            else
hgs
parents:
diff changeset
  4774
                {
hgs
parents:
diff changeset
  4775
                fetchFile = ETrue;
hgs
parents:
diff changeset
  4776
                }
hgs
parents:
diff changeset
  4777
            }
hgs
parents:
diff changeset
  4778
         else if(Err == KLeaveExit)
hgs
parents:
diff changeset
  4779
             {
hgs
parents:
diff changeset
  4780
              User::Leave( Err );
hgs
parents:
diff changeset
  4781
             }
hgs
parents:
diff changeset
  4782
         else
hgs
parents:
diff changeset
  4783
            {
hgs
parents:
diff changeset
  4784
            iEditorFlags &= ~EMsgEditInProgress;           
hgs
parents:
diff changeset
  4785
            }
hgs
parents:
diff changeset
  4786
        }
hgs
parents:
diff changeset
  4787
        if(enabletoolbarext)
hgs
parents:
diff changeset
  4788
            {
hgs
parents:
diff changeset
  4789
                //Enable the insert toolbar 
hgs
parents:
diff changeset
  4790
            if( iFixedToolbar )
hgs
parents:
diff changeset
  4791
                {
hgs
parents:
diff changeset
  4792
                iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, EFalse, ETrue );
hgs
parents:
diff changeset
  4793
                HandleResourceChangeL(KEikDynamicLayoutVariantSwitch);
hgs
parents:
diff changeset
  4794
                }
hgs
parents:
diff changeset
  4795
            }
hgs
parents:
diff changeset
  4796
                                 
hgs
parents:
diff changeset
  4797
    }
hgs
parents:
diff changeset
  4798
hgs
parents:
diff changeset
  4799
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4800
// CUniEditorAppUi::DoUserInsertVideoL
hgs
parents:
diff changeset
  4801
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4802
//
hgs
parents:
diff changeset
  4803
void CUniEditorAppUi::DoUserInsertVideoL( MsgAttachmentUtils::TMsgAttachmentFetchType  aFetchType )
hgs
parents:
diff changeset
  4804
    {
hgs
parents:
diff changeset
  4805
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  4806
    
hgs
parents:
diff changeset
  4807
   if( iFixedToolbar )
hgs
parents:
diff changeset
  4808
        {
hgs
parents:
diff changeset
  4809
        iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, ETrue, EFalse );    
hgs
parents:
diff changeset
  4810
        }
hgs
parents:
diff changeset
  4811
    iInsertingType = EMsgMediaVideo;
hgs
parents:
diff changeset
  4812
    
hgs
parents:
diff changeset
  4813
    TBool fetchFile( ETrue );
hgs
parents:
diff changeset
  4814
    TBool enabletoolbarext = ETrue;
hgs
parents:
diff changeset
  4815
    while ( fetchFile )
hgs
parents:
diff changeset
  4816
        {
hgs
parents:
diff changeset
  4817
        fetchFile = EFalse;
hgs
parents:
diff changeset
  4818
        iEditorFlags |= EMsgEditInProgress;
hgs
parents:
diff changeset
  4819
        TBool stat= EFalse;
hgs
parents:
diff changeset
  4820
        TRAPD(Err,stat = FetchFileL( aFetchType ));
hgs
parents:
diff changeset
  4821
        if (Err == KErrNone && stat)        
hgs
parents:
diff changeset
  4822
            {
hgs
parents:
diff changeset
  4823
            if ( SuperDistributionCheckForInsertL() )
hgs
parents:
diff changeset
  4824
                {
hgs
parents:
diff changeset
  4825
                if ( CheckMediaInfoForInsertL() )
hgs
parents:
diff changeset
  4826
                    {
hgs
parents:
diff changeset
  4827
                    TBool addSlide = EFalse;
hgs
parents:
diff changeset
  4828
                
hgs
parents:
diff changeset
  4829
                    if ( ObjectsAvailable() & 
hgs
parents:
diff changeset
  4830
                        ( EUniAudioFlag | EUniImageFlag | EUniVideoFlag | EUniSvgFlag ) )
hgs
parents:
diff changeset
  4831
                        {
hgs
parents:
diff changeset
  4832
                        addSlide = ETrue;
hgs
parents:
diff changeset
  4833
                        }
hgs
parents:
diff changeset
  4834
                    DoStartInsertL( addSlide, EFalse );
hgs
parents:
diff changeset
  4835
                    enabletoolbarext = EFalse;
hgs
parents:
diff changeset
  4836
                    }
hgs
parents:
diff changeset
  4837
                else
hgs
parents:
diff changeset
  4838
                    {
hgs
parents:
diff changeset
  4839
                     iEditorFlags &= ~EMsgEditInProgress;
hgs
parents:
diff changeset
  4840
                    }
hgs
parents:
diff changeset
  4841
                }
hgs
parents:
diff changeset
  4842
            else
hgs
parents:
diff changeset
  4843
                {
hgs
parents:
diff changeset
  4844
                fetchFile = ETrue;
hgs
parents:
diff changeset
  4845
                }
hgs
parents:
diff changeset
  4846
            }
hgs
parents:
diff changeset
  4847
        else if(Err == KLeaveExit)
hgs
parents:
diff changeset
  4848
            {
hgs
parents:
diff changeset
  4849
             User::Leave( Err );
hgs
parents:
diff changeset
  4850
            }
hgs
parents:
diff changeset
  4851
        else
hgs
parents:
diff changeset
  4852
            {
hgs
parents:
diff changeset
  4853
            iEditorFlags &= ~EMsgEditInProgress;
hgs
parents:
diff changeset
  4854
            }
hgs
parents:
diff changeset
  4855
        }
hgs
parents:
diff changeset
  4856
      if(enabletoolbarext)
hgs
parents:
diff changeset
  4857
            {
hgs
parents:
diff changeset
  4858
                //Enable the insert toolbar 
hgs
parents:
diff changeset
  4859
            if( iFixedToolbar )
hgs
parents:
diff changeset
  4860
                {
hgs
parents:
diff changeset
  4861
                iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, EFalse, ETrue );    
hgs
parents:
diff changeset
  4862
                HandleResourceChangeL(KEikDynamicLayoutVariantSwitch);
hgs
parents:
diff changeset
  4863
                }
hgs
parents:
diff changeset
  4864
            }
hgs
parents:
diff changeset
  4865
                         
hgs
parents:
diff changeset
  4866
    }
hgs
parents:
diff changeset
  4867
hgs
parents:
diff changeset
  4868
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4869
// CUniEditorAppUi::DoUserInsertAudioL
hgs
parents:
diff changeset
  4870
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4871
//
hgs
parents:
diff changeset
  4872
void CUniEditorAppUi::DoUserInsertAudioL( MsgAttachmentUtils::TMsgAttachmentFetchType aFetchType )
hgs
parents:
diff changeset
  4873
    {
hgs
parents:
diff changeset
  4874
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  4875
    
hgs
parents:
diff changeset
  4876
   if( iFixedToolbar )
hgs
parents:
diff changeset
  4877
        {
hgs
parents:
diff changeset
  4878
        iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, ETrue, EFalse );    
hgs
parents:
diff changeset
  4879
        }
hgs
parents:
diff changeset
  4880
    iInsertingType = EMsgMediaAudio;
hgs
parents:
diff changeset
  4881
    
hgs
parents:
diff changeset
  4882
    TBool fetchFile( ETrue );
hgs
parents:
diff changeset
  4883
    TBool enabletoolbarext = ETrue;
hgs
parents:
diff changeset
  4884
    while ( fetchFile )
hgs
parents:
diff changeset
  4885
        {
hgs
parents:
diff changeset
  4886
        fetchFile = EFalse;
hgs
parents:
diff changeset
  4887
        iEditorFlags |= EMsgEditInProgress;
hgs
parents:
diff changeset
  4888
        TBool stat= EFalse;
hgs
parents:
diff changeset
  4889
        TRAPD(Err,stat = FetchFileL( aFetchType ));
hgs
parents:
diff changeset
  4890
        if (Err == KErrNone && stat)        
hgs
parents:
diff changeset
  4891
            {
hgs
parents:
diff changeset
  4892
            if ( SuperDistributionCheckForInsertL() )
hgs
parents:
diff changeset
  4893
                {
hgs
parents:
diff changeset
  4894
                if ( CheckMediaInfoForInsertL() )
hgs
parents:
diff changeset
  4895
                    {
hgs
parents:
diff changeset
  4896
                    TBool addSlide = EFalse;
hgs
parents:
diff changeset
  4897
                    if ( ObjectsAvailable() & 
hgs
parents:
diff changeset
  4898
                        ( EUniAudioFlag | EUniVideoFlag | EUniSvgFlag ) )
hgs
parents:
diff changeset
  4899
                        {
hgs
parents:
diff changeset
  4900
                        addSlide = ETrue;
hgs
parents:
diff changeset
  4901
                        }
hgs
parents:
diff changeset
  4902
                    DoStartInsertL( addSlide, EFalse );
hgs
parents:
diff changeset
  4903
                    enabletoolbarext = EFalse ; 
hgs
parents:
diff changeset
  4904
                    }
hgs
parents:
diff changeset
  4905
                else
hgs
parents:
diff changeset
  4906
                    {
hgs
parents:
diff changeset
  4907
                     iEditorFlags &= ~EMsgEditInProgress;
hgs
parents:
diff changeset
  4908
                    }
hgs
parents:
diff changeset
  4909
                }
hgs
parents:
diff changeset
  4910
            else
hgs
parents:
diff changeset
  4911
                {
hgs
parents:
diff changeset
  4912
                fetchFile = ETrue;
hgs
parents:
diff changeset
  4913
                }
hgs
parents:
diff changeset
  4914
            }
hgs
parents:
diff changeset
  4915
        else if(Err == KLeaveExit)
hgs
parents:
diff changeset
  4916
            {
hgs
parents:
diff changeset
  4917
             User::Leave( Err );
hgs
parents:
diff changeset
  4918
            }
hgs
parents:
diff changeset
  4919
         else
hgs
parents:
diff changeset
  4920
            {
hgs
parents:
diff changeset
  4921
            iEditorFlags &= ~EMsgEditInProgress;
hgs
parents:
diff changeset
  4922
            }
hgs
parents:
diff changeset
  4923
        }
hgs
parents:
diff changeset
  4924
        if(enabletoolbarext)
hgs
parents:
diff changeset
  4925
            {
hgs
parents:
diff changeset
  4926
                //Enable the insert toolbar 
hgs
parents:
diff changeset
  4927
            if( iFixedToolbar )
hgs
parents:
diff changeset
  4928
                {
hgs
parents:
diff changeset
  4929
                iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, EFalse, ETrue );    
hgs
parents:
diff changeset
  4930
                HandleResourceChangeL(KEikDynamicLayoutVariantSwitch);
hgs
parents:
diff changeset
  4931
                }
hgs
parents:
diff changeset
  4932
            }
hgs
parents:
diff changeset
  4933
                         
hgs
parents:
diff changeset
  4934
    }
hgs
parents:
diff changeset
  4935
hgs
parents:
diff changeset
  4936
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4937
// CUniEditorAppUi::DoUserInsertTextL
hgs
parents:
diff changeset
  4938
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4939
//
hgs
parents:
diff changeset
  4940
void CUniEditorAppUi::DoUserInsertTextL( TUniEditorInsertTextType aType )
hgs
parents:
diff changeset
  4941
    {
hgs
parents:
diff changeset
  4942
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  4943
    TInt err( KErrNone );
hgs
parents:
diff changeset
  4944
    TInt errResId = KUniInvalidResourceId;
hgs
parents:
diff changeset
  4945
    TInt sizeLimit( Document()->MaxMessageSize() - MessageSizeInBytes() ); 
hgs
parents:
diff changeset
  4946
hgs
parents:
diff changeset
  4947
     if( iFixedToolbar ) 
hgs
parents:
diff changeset
  4948
        {
hgs
parents:
diff changeset
  4949
        iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, ETrue, EFalse );    
hgs
parents:
diff changeset
  4950
        }
hgs
parents:
diff changeset
  4951
    if ( aType == ETemplateText )
hgs
parents:
diff changeset
  4952
        {
hgs
parents:
diff changeset
  4953
        InsertTemplateL();
hgs
parents:
diff changeset
  4954
        }
hgs
parents:
diff changeset
  4955
    else
hgs
parents:
diff changeset
  4956
        {
hgs
parents:
diff changeset
  4957
        err = InsertTextMemoL( sizeLimit );
hgs
parents:
diff changeset
  4958
        }
hgs
parents:
diff changeset
  4959
        
hgs
parents:
diff changeset
  4960
    if( iFixedToolbar )
hgs
parents:
diff changeset
  4961
        {
hgs
parents:
diff changeset
  4962
        iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, EFalse, EFalse );    
hgs
parents:
diff changeset
  4963
        }
hgs
parents:
diff changeset
  4964
    if ( err == KErrOverflow)
hgs
parents:
diff changeset
  4965
        {
hgs
parents:
diff changeset
  4966
        errResId = R_UNIEDITOR_INFO_OBJECT_TOO_BIG;
hgs
parents:
diff changeset
  4967
        ShowConfirmableInfoL( errResId );
hgs
parents:
diff changeset
  4968
        }
hgs
parents:
diff changeset
  4969
    else
hgs
parents:
diff changeset
  4970
        {
hgs
parents:
diff changeset
  4971
    UpdateSmilTextAttaL();
hgs
parents:
diff changeset
  4972
    
hgs
parents:
diff changeset
  4973
    Document()->SetBodyModified( ETrue );
hgs
parents:
diff changeset
  4974
    CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
  4975
    
hgs
parents:
diff changeset
  4976
    MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  4977
    CheckMaxSmsSizeAndShowNoteL();
hgs
parents:
diff changeset
  4978
    SetOrRemoveMaxSizeInEdwin();
hgs
parents:
diff changeset
  4979
        }
hgs
parents:
diff changeset
  4980
    }
hgs
parents:
diff changeset
  4981
hgs
parents:
diff changeset
  4982
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4983
// CUniEditorAppUi::DoUserInsertOtherFileL
hgs
parents:
diff changeset
  4984
// ---------------------------------------------------------
hgs
parents:
diff changeset
  4985
//
hgs
parents:
diff changeset
  4986
void CUniEditorAppUi::DoUserInsertOtherFileL( TUniEditorInsertOtherType aType )
hgs
parents:
diff changeset
  4987
    {
hgs
parents:
diff changeset
  4988
    TBool addAttachment( EFalse );
hgs
parents:
diff changeset
  4989
     if( iFixedToolbar )
hgs
parents:
diff changeset
  4990
        {
hgs
parents:
diff changeset
  4991
        iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, ETrue, EFalse );    
hgs
parents:
diff changeset
  4992
        }
hgs
parents:
diff changeset
  4993
    
hgs
parents:
diff changeset
  4994
    TBool enabletoolbarext = ETrue;
hgs
parents:
diff changeset
  4995
    if ( aType == ETextFile )
hgs
parents:
diff changeset
  4996
        {
hgs
parents:
diff changeset
  4997
        iInsertingType = EMsgMediaText;
hgs
parents:
diff changeset
  4998
        TBool stat= EFalse;
hgs
parents:
diff changeset
  4999
        TRAPD(Err,stat = FetchFileL( MsgAttachmentUtils::ENote ));
hgs
parents:
diff changeset
  5000
        if (Err == KErrNone && stat)  
hgs
parents:
diff changeset
  5001
            {            
hgs
parents:
diff changeset
  5002
            addAttachment = ETrue;
hgs
parents:
diff changeset
  5003
            }
hgs
parents:
diff changeset
  5004
        }
hgs
parents:
diff changeset
  5005
    else
hgs
parents:
diff changeset
  5006
        {
hgs
parents:
diff changeset
  5007
        TFileName* fileName = new( ELeave ) TFileName;
hgs
parents:
diff changeset
  5008
        CleanupStack::PushL( fileName );
hgs
parents:
diff changeset
  5009
            
hgs
parents:
diff changeset
  5010
        if ( MsgAttachmentUtils::FetchAnyFileL( *fileName, *iEikonEnv ) )
hgs
parents:
diff changeset
  5011
            {
hgs
parents:
diff changeset
  5012
            Document()->DataModel()->MediaResolver().SetCharacterSetRecognition( ETrue );
hgs
parents:
diff changeset
  5013
            
hgs
parents:
diff changeset
  5014
            TRAPD( error, CreateMediaInfoForInsertL( EMsgMediaUnknown, *fileName ) );
hgs
parents:
diff changeset
  5015
            
hgs
parents:
diff changeset
  5016
            Document()->DataModel()->MediaResolver().SetCharacterSetRecognition( EFalse );
hgs
parents:
diff changeset
  5017
            
hgs
parents:
diff changeset
  5018
            User::LeaveIfError( error );
hgs
parents:
diff changeset
  5019
            
hgs
parents:
diff changeset
  5020
            addAttachment = ETrue;
hgs
parents:
diff changeset
  5021
            }
hgs
parents:
diff changeset
  5022
        
hgs
parents:
diff changeset
  5023
        CleanupStack::PopAndDestroy( fileName );
hgs
parents:
diff changeset
  5024
        }
hgs
parents:
diff changeset
  5025
  
hgs
parents:
diff changeset
  5026
    if ( addAttachment && iInsertingMedia )
hgs
parents:
diff changeset
  5027
        {
hgs
parents:
diff changeset
  5028
        iInsertingType = iInsertingMedia->MediaType();
hgs
parents:
diff changeset
  5029
        if (    SuperDistributionCheckForInsertL() )
hgs
parents:
diff changeset
  5030
            {
hgs
parents:
diff changeset
  5031
            // CheckMediaInfoForInsertL() for images done in CUniEditorInsertOperation
hgs
parents:
diff changeset
  5032
            if (    iInsertingType == EMsgMediaImage
hgs
parents:
diff changeset
  5033
                ||  CheckMediaInfoForInsertL() )
hgs
parents:
diff changeset
  5034
                {
hgs
parents:
diff changeset
  5035
                TBool addSlide( EFalse );
hgs
parents:
diff changeset
  5036
                TBool addAsAttachment( ETrue );
hgs
parents:
diff changeset
  5037
                                
hgs
parents:
diff changeset
  5038
                if ( iInsertingType != EMsgMediaText &&
hgs
parents:
diff changeset
  5039
                     iInsertingType != EMsgMediaXhtml && 
hgs
parents:
diff changeset
  5040
                     iSmilModel->IsSupportedMediaType( iInsertingType ) )
hgs
parents:
diff changeset
  5041
                    {
hgs
parents:
diff changeset
  5042
                    addAsAttachment = EFalse;
hgs
parents:
diff changeset
  5043
                    if ( ( ( iInsertingType == EMsgMediaImage || 
hgs
parents:
diff changeset
  5044
                             iInsertingType == EMsgMediaVideo ||
hgs
parents:
diff changeset
  5045
                             iInsertingType == EMsgMediaAnimation ||
hgs
parents:
diff changeset
  5046
                             iInsertingType == EMsgMediaSvg ) &&
hgs
parents:
diff changeset
  5047
                           ( ObjectsAvailable() & ( EUniImageFlag | EUniVideoFlag | EUniSvgFlag ) ) )||
hgs
parents:
diff changeset
  5048
                         ( iInsertingType == EMsgMediaAudio &&
hgs
parents:
diff changeset
  5049
                           ( ObjectsAvailable() & ( EUniAudioFlag | EUniVideoFlag | EUniSvgFlag ) ) ) )
hgs
parents:
diff changeset
  5050
                        {
hgs
parents:
diff changeset
  5051
                        addSlide = ETrue;
hgs
parents:
diff changeset
  5052
                        }
hgs
parents:
diff changeset
  5053
                    }
hgs
parents:
diff changeset
  5054
                DoStartInsertL( addSlide, addAsAttachment );
hgs
parents:
diff changeset
  5055
                enabletoolbarext = EFalse ; 
hgs
parents:
diff changeset
  5056
                }
hgs
parents:
diff changeset
  5057
            }
hgs
parents:
diff changeset
  5058
        }
hgs
parents:
diff changeset
  5059
        if(enabletoolbarext)
hgs
parents:
diff changeset
  5060
            {
hgs
parents:
diff changeset
  5061
            if( iFixedToolbar )
hgs
parents:
diff changeset
  5062
                {
hgs
parents:
diff changeset
  5063
                iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, EFalse, ETrue );    
hgs
parents:
diff changeset
  5064
                }
hgs
parents:
diff changeset
  5065
            }
hgs
parents:
diff changeset
  5066
    }
hgs
parents:
diff changeset
  5067
hgs
parents:
diff changeset
  5068
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5069
// CUniEditorAppUi::DoUserInsertVCardL
hgs
parents:
diff changeset
  5070
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5071
//
hgs
parents:
diff changeset
  5072
void CUniEditorAppUi::DoUserInsertVCardL()
hgs
parents:
diff changeset
  5073
    {
hgs
parents:
diff changeset
  5074
    if ( !iVCardOperation )
hgs
parents:
diff changeset
  5075
        {
hgs
parents:
diff changeset
  5076
        iVCardOperation = CUniEditorVCardOperation::NewL( *this,
hgs
parents:
diff changeset
  5077
                                                          *Document(),
hgs
parents:
diff changeset
  5078
                                                          FsSession() );
hgs
parents:
diff changeset
  5079
        }
hgs
parents:
diff changeset
  5080
    
hgs
parents:
diff changeset
  5081
    if ( iFixedToolbar )
hgs
parents:
diff changeset
  5082
        {
hgs
parents:
diff changeset
  5083
          iFixedToolbar->HideItem( EUniCmdFixedToolbarSend, ETrue, ETrue );
hgs
parents:
diff changeset
  5084
          iFixedToolbar->HideItem( EUniCmdFixedToolbarAddRecipient, ETrue, ETrue );        
hgs
parents:
diff changeset
  5085
          iFixedToolbar->HideItem( EUniCmdFixedToolbarInsert, ETrue, ETrue );      
hgs
parents:
diff changeset
  5086
        }
hgs
parents:
diff changeset
  5087
hgs
parents:
diff changeset
  5088
    iEditorFlags |= EToolbarHidden;
hgs
parents:
diff changeset
  5089
    
hgs
parents:
diff changeset
  5090
    iVCardOperation->Start();    
hgs
parents:
diff changeset
  5091
        
hgs
parents:
diff changeset
  5092
    ActivateInputBlockerL( iVCardOperation );
hgs
parents:
diff changeset
  5093
    }
hgs
parents:
diff changeset
  5094
hgs
parents:
diff changeset
  5095
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5096
// CUniEditorAppUi::DoUserInsertSvgL
hgs
parents:
diff changeset
  5097
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5098
//
hgs
parents:
diff changeset
  5099
//void CUniEditorAppUi::DoUserInsertSvgL()
hgs
parents:
diff changeset
  5100
//    {
hgs
parents:
diff changeset
  5101
//    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  5102
//    
hgs
parents:
diff changeset
  5103
//     if( iFixedToolbar ) 
hgs
parents:
diff changeset
  5104
//        {
hgs
parents:
diff changeset
  5105
//        iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, ETrue, EFalse );    
hgs
parents:
diff changeset
  5106
//        }
hgs
parents:
diff changeset
  5107
//    iInsertingType = EMsgMediaSvg;
hgs
parents:
diff changeset
  5108
//    
hgs
parents:
diff changeset
  5109
//    TBool fetchFile( ETrue );
hgs
parents:
diff changeset
  5110
//    TBool enabletoolbarext = ETrue;
hgs
parents:
diff changeset
  5111
//    while ( fetchFile )
hgs
parents:
diff changeset
  5112
//        {
hgs
parents:
diff changeset
  5113
//        fetchFile = EFalse;
hgs
parents:
diff changeset
  5114
//        TBool stat= EFalse;
hgs
parents:
diff changeset
  5115
//        TRAPD(Err,stat = FetchFileL( MsgAttachmentUtils::ESVG ));
hgs
parents:
diff changeset
  5116
//        if (Err == KErrNone && stat)  
hgs
parents:
diff changeset
  5117
//            {
hgs
parents:
diff changeset
  5118
//            if ( SuperDistributionCheckForInsertL() )
hgs
parents:
diff changeset
  5119
//                {
hgs
parents:
diff changeset
  5120
//                if ( CheckMediaInfoForInsertL() )
hgs
parents:
diff changeset
  5121
//                    {
hgs
parents:
diff changeset
  5122
//                    TBool addSlide = EFalse;
hgs
parents:
diff changeset
  5123
//                    if ( ObjectsAvailable() & 
hgs
parents:
diff changeset
  5124
//                        ( EUniAudioFlag | EUniVideoFlag | EUniImageFlag | EUniSvgFlag ) )
hgs
parents:
diff changeset
  5125
//                        {
hgs
parents:
diff changeset
  5126
//                        addSlide = ETrue;
hgs
parents:
diff changeset
  5127
//                        }
hgs
parents:
diff changeset
  5128
//                    
hgs
parents:
diff changeset
  5129
//                    DoStartInsertL( addSlide, EFalse );
hgs
parents:
diff changeset
  5130
//                    enabletoolbarext = EFalse; 
hgs
parents:
diff changeset
  5131
//                    }
hgs
parents:
diff changeset
  5132
//                }
hgs
parents:
diff changeset
  5133
//            else
hgs
parents:
diff changeset
  5134
//                {
hgs
parents:
diff changeset
  5135
//                fetchFile = ETrue;
hgs
parents:
diff changeset
  5136
//                }
hgs
parents:
diff changeset
  5137
//            }
hgs
parents:
diff changeset
  5138
//        }
hgs
parents:
diff changeset
  5139
//        if(enabletoolbarext)
hgs
parents:
diff changeset
  5140
//            {
hgs
parents:
diff changeset
  5141
//                //Enable the insert toolbar 
hgs
parents:
diff changeset
  5142
//            if( iFixedToolbar )
hgs
parents:
diff changeset
  5143
//                {
hgs
parents:
diff changeset
  5144
//                iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, EFalse, ETrue );    
hgs
parents:
diff changeset
  5145
//                }
hgs
parents:
diff changeset
  5146
//            }
hgs
parents:
diff changeset
  5147
//    }
hgs
parents:
diff changeset
  5148
    
hgs
parents:
diff changeset
  5149
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5150
// CUniEditorAppUi::InitNaviPaneL
hgs
parents:
diff changeset
  5151
// Draws navipane.
hgs
parents:
diff changeset
  5152
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5153
//
hgs
parents:
diff changeset
  5154
void CUniEditorAppUi::InitNaviPaneL()
hgs
parents:
diff changeset
  5155
    {
hgs
parents:
diff changeset
  5156
    UNILOGGER_WRITE( "-> CUniEditorAppUi::InitNaviPaneL" );
hgs
parents:
diff changeset
  5157
    
hgs
parents:
diff changeset
  5158
    UpdateIndicatorIconsL();
hgs
parents:
diff changeset
  5159
    
hgs
parents:
diff changeset
  5160
    TInt charsLeft = 0;
hgs
parents:
diff changeset
  5161
    TInt msgsParts = 0;               
hgs
parents:
diff changeset
  5162
    CalculateSMSMsgLen(charsLeft,msgsParts);
hgs
parents:
diff changeset
  5163
    iPrevSmsLength = charsLeft;
hgs
parents:
diff changeset
  5164
    MsgLengthToNavipaneL( EFalse );            
hgs
parents:
diff changeset
  5165
    
hgs
parents:
diff changeset
  5166
    UNILOGGER_WRITE( "<- CUniEditorAppUi::InitNaviPaneL" );
hgs
parents:
diff changeset
  5167
    }
hgs
parents:
diff changeset
  5168
hgs
parents:
diff changeset
  5169
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5170
// CUniEditorAppUi::UpdateIndicatorIconsL
hgs
parents:
diff changeset
  5171
//
hgs
parents:
diff changeset
  5172
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5173
//
hgs
parents:
diff changeset
  5174
void CUniEditorAppUi::UpdateIndicatorIconsL()
hgs
parents:
diff changeset
  5175
    {
hgs
parents:
diff changeset
  5176
    UNILOGGER_WRITE( "-> CUniEditorAppUi::UpdateIndicatorIconsL" );
hgs
parents:
diff changeset
  5177
    
hgs
parents:
diff changeset
  5178
    TInt priorityHigh;
hgs
parents:
diff changeset
  5179
    TInt priorityLow;
hgs
parents:
diff changeset
  5180
hgs
parents:
diff changeset
  5181
    if( Document()->UniState() == EUniSms )
hgs
parents:
diff changeset
  5182
        { 
hgs
parents:
diff changeset
  5183
        UNILOGGER_WRITE( "-> CUniEditorAppUi::UpdateIndicatorIconsL SMS" );
hgs
parents:
diff changeset
  5184
        
hgs
parents:
diff changeset
  5185
        // If dealing with SMS -> disable them
hgs
parents:
diff changeset
  5186
        priorityHigh = EAknIndicatorStateOff;
hgs
parents:
diff changeset
  5187
        priorityLow = EAknIndicatorStateOff;
hgs
parents:
diff changeset
  5188
        }
hgs
parents:
diff changeset
  5189
    else 
hgs
parents:
diff changeset
  5190
        {
hgs
parents:
diff changeset
  5191
        TUniSendingSettings settings;
hgs
parents:
diff changeset
  5192
        CUniEditorPlugin* plugin = MmsPlugin();
hgs
parents:
diff changeset
  5193
hgs
parents:
diff changeset
  5194
        if ( plugin )
hgs
parents:
diff changeset
  5195
            {
hgs
parents:
diff changeset
  5196
            plugin->GetSendingSettingsL( settings );
hgs
parents:
diff changeset
  5197
            }
hgs
parents:
diff changeset
  5198
hgs
parents:
diff changeset
  5199
        if ( settings.iPriority == TUniSendingSettings::EUniPriorityLow )
hgs
parents:
diff changeset
  5200
            {
hgs
parents:
diff changeset
  5201
            priorityHigh = EAknIndicatorStateOff;
hgs
parents:
diff changeset
  5202
            priorityLow = EAknIndicatorStateOn;
hgs
parents:
diff changeset
  5203
            }
hgs
parents:
diff changeset
  5204
        else if ( settings.iPriority == TUniSendingSettings::EUniPriorityHigh )
hgs
parents:
diff changeset
  5205
            {
hgs
parents:
diff changeset
  5206
            priorityHigh = EAknIndicatorStateOn;
hgs
parents:
diff changeset
  5207
            priorityLow = EAknIndicatorStateOff;
hgs
parents:
diff changeset
  5208
            }
hgs
parents:
diff changeset
  5209
        else
hgs
parents:
diff changeset
  5210
            {
hgs
parents:
diff changeset
  5211
            priorityHigh = EAknIndicatorStateOff;
hgs
parents:
diff changeset
  5212
            priorityLow = EAknIndicatorStateOff;
hgs
parents:
diff changeset
  5213
            }
hgs
parents:
diff changeset
  5214
        }
hgs
parents:
diff changeset
  5215
    
hgs
parents:
diff changeset
  5216
    if ( iSupportedFeatures & EUniFeaturePriority) 
hgs
parents:
diff changeset
  5217
        {
hgs
parents:
diff changeset
  5218
        UNILOGGER_WRITE( "-> CUniEditorAppUi::UpdateIndicatorIconsL priority" );
hgs
parents:
diff changeset
  5219
        
hgs
parents:
diff changeset
  5220
        MAknEditingStateIndicator* editIndi = iAvkonEnv->EditingStateIndicator();
hgs
parents:
diff changeset
  5221
        
hgs
parents:
diff changeset
  5222
        CAknIndicatorContainer* naviIndi = 
hgs
parents:
diff changeset
  5223
            static_cast<CAknIndicatorContainer*>( iNaviDecorator->DecoratedControl() );
hgs
parents:
diff changeset
  5224
    
hgs
parents:
diff changeset
  5225
        // Update the Edwin indicator pane
hgs
parents:
diff changeset
  5226
        if ( editIndi )
hgs
parents:
diff changeset
  5227
            {
hgs
parents:
diff changeset
  5228
            CAknIndicatorContainer* indiContainer = editIndi->IndicatorContainer();
hgs
parents:
diff changeset
  5229
            if ( indiContainer )
hgs
parents:
diff changeset
  5230
                {
hgs
parents:
diff changeset
  5231
                indiContainer->SetIndicatorState( TUid::Uid(EAknNaviPaneEditorIndicatorMcePriorityHigh), 
hgs
parents:
diff changeset
  5232
                                                  priorityHigh );
hgs
parents:
diff changeset
  5233
                indiContainer->SetIndicatorState( TUid::Uid(EAknNaviPaneEditorIndicatorMcePriorityLow), 
hgs
parents:
diff changeset
  5234
                                                  priorityLow );
hgs
parents:
diff changeset
  5235
                }
hgs
parents:
diff changeset
  5236
            }
hgs
parents:
diff changeset
  5237
            
hgs
parents:
diff changeset
  5238
        // Update the navi indicator pane
hgs
parents:
diff changeset
  5239
        if ( naviIndi )
hgs
parents:
diff changeset
  5240
            {
hgs
parents:
diff changeset
  5241
            naviIndi->SetIndicatorState( TUid::Uid(EAknNaviPaneEditorIndicatorMcePriorityHigh), 
hgs
parents:
diff changeset
  5242
                                         priorityHigh );
hgs
parents:
diff changeset
  5243
            naviIndi->SetIndicatorState( TUid::Uid(EAknNaviPaneEditorIndicatorMcePriorityLow), 
hgs
parents:
diff changeset
  5244
                                         priorityLow );
hgs
parents:
diff changeset
  5245
            }
hgs
parents:
diff changeset
  5246
hgs
parents:
diff changeset
  5247
        }
hgs
parents:
diff changeset
  5248
    
hgs
parents:
diff changeset
  5249
    UNILOGGER_WRITE( "<- CUniEditorAppUi::UpdateIndicatorIconsL" );
hgs
parents:
diff changeset
  5250
    }
hgs
parents:
diff changeset
  5251
hgs
parents:
diff changeset
  5252
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5253
// CUniEditorAppUi::ShowInformationNoteL
hgs
parents:
diff changeset
  5254
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5255
//
hgs
parents:
diff changeset
  5256
void CUniEditorAppUi::ShowInformationNoteL( TInt aResourceID, TBool aWaiting )
hgs
parents:
diff changeset
  5257
    {
hgs
parents:
diff changeset
  5258
    HBufC* prompt = NULL;
hgs
parents:
diff changeset
  5259
    
hgs
parents:
diff changeset
  5260
    switch ( aResourceID )
hgs
parents:
diff changeset
  5261
        {
hgs
parents:
diff changeset
  5262
        case R_UNIEDITOR_INFO_OBJECT_TOO_BIG:
hgs
parents:
diff changeset
  5263
        case R_UNIEDITOR_INFO_OBJECT_SEND_AS_TOO_BIG:
hgs
parents:
diff changeset
  5264
            {
hgs
parents:
diff changeset
  5265
            // These are not anymore information notes
hgs
parents:
diff changeset
  5266
            ShowConfirmableInfoL( aResourceID );
hgs
parents:
diff changeset
  5267
            return;
hgs
parents:
diff changeset
  5268
            }
hgs
parents:
diff changeset
  5269
        default:
hgs
parents:
diff changeset
  5270
            {
hgs
parents:
diff changeset
  5271
            prompt = StringLoader::LoadLC( aResourceID, iCoeEnv );
hgs
parents:
diff changeset
  5272
            break;
hgs
parents:
diff changeset
  5273
            }
hgs
parents:
diff changeset
  5274
        }
hgs
parents:
diff changeset
  5275
hgs
parents:
diff changeset
  5276
    CAknInformationNote* note = new ( ELeave ) CAknInformationNote( aWaiting );
hgs
parents:
diff changeset
  5277
    note->ExecuteLD( *prompt );
hgs
parents:
diff changeset
  5278
    
hgs
parents:
diff changeset
  5279
    CleanupStack::PopAndDestroy( prompt );
hgs
parents:
diff changeset
  5280
    }
hgs
parents:
diff changeset
  5281
hgs
parents:
diff changeset
  5282
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5283
// CUniEditorAppUi::ShowErrorNoteL
hgs
parents:
diff changeset
  5284
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5285
//
hgs
parents:
diff changeset
  5286
void CUniEditorAppUi::ShowErrorNoteL( TInt aResourceID, TBool aWaiting )
hgs
parents:
diff changeset
  5287
    {
hgs
parents:
diff changeset
  5288
    HBufC* prompt = StringLoader::LoadLC( aResourceID, iCoeEnv );
hgs
parents:
diff changeset
  5289
    
hgs
parents:
diff changeset
  5290
    CAknErrorNote* note = new ( ELeave ) CAknErrorNote( aWaiting );
hgs
parents:
diff changeset
  5291
    note->ExecuteLD( *prompt );
hgs
parents:
diff changeset
  5292
    
hgs
parents:
diff changeset
  5293
    CleanupStack::PopAndDestroy( prompt );
hgs
parents:
diff changeset
  5294
    }
hgs
parents:
diff changeset
  5295
hgs
parents:
diff changeset
  5296
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5297
// CUniEditorAppUi::ShowConfirmationQueryL
hgs
parents:
diff changeset
  5298
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5299
//
hgs
parents:
diff changeset
  5300
TInt CUniEditorAppUi::ShowConfirmationQueryL( TInt aResourceID )
hgs
parents:
diff changeset
  5301
    {
hgs
parents:
diff changeset
  5302
    HBufC* prompt = StringLoader::LoadLC( aResourceID, iCoeEnv );
hgs
parents:
diff changeset
  5303
    
hgs
parents:
diff changeset
  5304
    TInt retVal = ShowConfirmationQueryL( *prompt );
hgs
parents:
diff changeset
  5305
    
hgs
parents:
diff changeset
  5306
    CleanupStack::PopAndDestroy( prompt );
hgs
parents:
diff changeset
  5307
    
hgs
parents:
diff changeset
  5308
    return retVal;
hgs
parents:
diff changeset
  5309
    }
hgs
parents:
diff changeset
  5310
hgs
parents:
diff changeset
  5311
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5312
// CUniEditorAppUi::ShowConfirmationQueryL
hgs
parents:
diff changeset
  5313
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5314
TInt CUniEditorAppUi::ShowConfirmationQueryL( const TDesC& aText ) const
hgs
parents:
diff changeset
  5315
    {
hgs
parents:
diff changeset
  5316
    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  5317
    return dlg->ExecuteLD( R_UNIEDITOR_CONFIRMATION_QUERY, aText );    
hgs
parents:
diff changeset
  5318
    }
hgs
parents:
diff changeset
  5319
hgs
parents:
diff changeset
  5320
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5321
// CUniEditorAppUi::ShowConfirmationNoQuestionQueryL
hgs
parents:
diff changeset
  5322
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5323
TInt CUniEditorAppUi::ShowConfirmationNoQuestionQueryL( const TDesC& aText ) const
hgs
parents:
diff changeset
  5324
    {
hgs
parents:
diff changeset
  5325
    // Utilize OK and CANCEL softkeys in confirmation query. Required when 
hgs
parents:
diff changeset
  5326
    // the query does not include a question.
hgs
parents:
diff changeset
  5327
    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  5328
    return dlg->ExecuteLD( R_UNIEDITOR_CONFIRMATION_NO_QUESTION_QUERY, aText );    
hgs
parents:
diff changeset
  5329
    }
hgs
parents:
diff changeset
  5330
hgs
parents:
diff changeset
  5331
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5332
// CUniEditorAppUi::ShowConfirmableInfoL
hgs
parents:
diff changeset
  5333
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5334
//
hgs
parents:
diff changeset
  5335
TInt CUniEditorAppUi::ShowConfirmableInfoL( TInt aResourceID )
hgs
parents:
diff changeset
  5336
    {
hgs
parents:
diff changeset
  5337
    HBufC* prompt = NULL;
hgs
parents:
diff changeset
  5338
    
hgs
parents:
diff changeset
  5339
    switch ( aResourceID )
hgs
parents:
diff changeset
  5340
        {
hgs
parents:
diff changeset
  5341
        case R_UNIEDITOR_INFO_OBJECT_TOO_BIG:
hgs
parents:
diff changeset
  5342
        case R_UNIEDITOR_INFO_OBJECT_SEND_AS_TOO_BIG:
hgs
parents:
diff changeset
  5343
            {
hgs
parents:
diff changeset
  5344
            TInt maxInKilos = ( Document()->MaxMessageSize() + KBytesInKilo - 1 ) / KBytesInKilo;
hgs
parents:
diff changeset
  5345
            prompt = StringLoader::LoadLC( aResourceID, maxInKilos, iCoeEnv  );
hgs
parents:
diff changeset
  5346
            break;
hgs
parents:
diff changeset
  5347
            }
hgs
parents:
diff changeset
  5348
        case R_UNIEDITOR_INFO_MAX_SLIDES_ALL:
hgs
parents:
diff changeset
  5349
        case R_UNIEDITOR_INFO_MAX_SLIDES_SOME:
hgs
parents:
diff changeset
  5350
            {
hgs
parents:
diff changeset
  5351
            prompt = StringLoader::LoadLC( aResourceID, Document()->DataModel()->SmilModel().MaxSlideCount(), iCoeEnv  );            
hgs
parents:
diff changeset
  5352
            break;
hgs
parents:
diff changeset
  5353
            }
hgs
parents:
diff changeset
  5354
        default:
hgs
parents:
diff changeset
  5355
            {
hgs
parents:
diff changeset
  5356
            prompt = StringLoader::LoadLC( aResourceID, iCoeEnv );
hgs
parents:
diff changeset
  5357
            break;
hgs
parents:
diff changeset
  5358
            }
hgs
parents:
diff changeset
  5359
        }
hgs
parents:
diff changeset
  5360
        
hgs
parents:
diff changeset
  5361
    TInt retVal = KErrNone;
hgs
parents:
diff changeset
  5362
    switch ( aResourceID )
hgs
parents:
diff changeset
  5363
        {
hgs
parents:
diff changeset
  5364
        case R_UNIEDITOR_ERROR_RMODE_CANNOT_OPEN:
hgs
parents:
diff changeset
  5365
            retVal = ShowConfirmableInfoErrorL( *prompt );
hgs
parents:
diff changeset
  5366
            break;        
hgs
parents:
diff changeset
  5367
        default:
hgs
parents:
diff changeset
  5368
            retVal = ShowConfirmableInfoL( *prompt );
hgs
parents:
diff changeset
  5369
        }
hgs
parents:
diff changeset
  5370
        
hgs
parents:
diff changeset
  5371
    CleanupStack::PopAndDestroy( prompt );
hgs
parents:
diff changeset
  5372
    return retVal;
hgs
parents:
diff changeset
  5373
    }
hgs
parents:
diff changeset
  5374
hgs
parents:
diff changeset
  5375
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5376
// CUniEditorAppUi::ShowConfirmableInfoL
hgs
parents:
diff changeset
  5377
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5378
//
hgs
parents:
diff changeset
  5379
TInt CUniEditorAppUi::ShowConfirmableInfoL( const TDesC& aText ) const
hgs
parents:
diff changeset
  5380
    {
hgs
parents:
diff changeset
  5381
    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  5382
    return dlg->ExecuteLD( R_UNIEDITOR_CONFIRMABLE_INFO, aText );
hgs
parents:
diff changeset
  5383
    }
hgs
parents:
diff changeset
  5384
hgs
parents:
diff changeset
  5385
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5386
// CUniEditorAppUi::ShowConfirmableInfoErrorL
hgs
parents:
diff changeset
  5387
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5388
//
hgs
parents:
diff changeset
  5389
TInt CUniEditorAppUi::ShowConfirmableInfoErrorL( const TDesC& aText ) const
hgs
parents:
diff changeset
  5390
    {
hgs
parents:
diff changeset
  5391
    CAknQueryDialog* dlg = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
  5392
    return dlg->ExecuteLD( R_UNIEDITOR_CONFIRMABLE_INFO_ERROR, aText );
hgs
parents:
diff changeset
  5393
    }
hgs
parents:
diff changeset
  5394
hgs
parents:
diff changeset
  5395
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5396
// CUniEditorAppUi::ShowGuidedModeConfirmationQueryL
hgs
parents:
diff changeset
  5397
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5398
//
hgs
parents:
diff changeset
  5399
TInt CUniEditorAppUi::ShowGuidedModeConfirmationQueryL( TInt aResourceID )
hgs
parents:
diff changeset
  5400
    {
hgs
parents:
diff changeset
  5401
    TInt retVal = EFalse;
hgs
parents:
diff changeset
  5402
    if ( iEditorFlags & EShowGuidedConf )
hgs
parents:
diff changeset
  5403
        {
hgs
parents:
diff changeset
  5404
        TInt waitResId( KErrNotFound );
hgs
parents:
diff changeset
  5405
        if ( iWaitDialog )
hgs
parents:
diff changeset
  5406
            {
hgs
parents:
diff changeset
  5407
            // Remove wait note for the confirmation query duration.
hgs
parents:
diff changeset
  5408
            waitResId = iWaitResId;
hgs
parents:
diff changeset
  5409
            RemoveWaitNote();
hgs
parents:
diff changeset
  5410
            }
hgs
parents:
diff changeset
  5411
            
hgs
parents:
diff changeset
  5412
        retVal = ShowConfirmationQueryL( aResourceID );
hgs
parents:
diff changeset
  5413
        
hgs
parents:
diff changeset
  5414
        if ( retVal )
hgs
parents:
diff changeset
  5415
            {
hgs
parents:
diff changeset
  5416
            iEditorFlags &= ~EShowGuidedConf;
hgs
parents:
diff changeset
  5417
            }
hgs
parents:
diff changeset
  5418
            
hgs
parents:
diff changeset
  5419
        if ( waitResId != KErrNotFound )
hgs
parents:
diff changeset
  5420
            {
hgs
parents:
diff changeset
  5421
            // Set the wait not again visible after confirmation query is shown
hgs
parents:
diff changeset
  5422
            // if it was visible before.
hgs
parents:
diff changeset
  5423
            ShowWaitNoteL( waitResId );
hgs
parents:
diff changeset
  5424
            }
hgs
parents:
diff changeset
  5425
        }
hgs
parents:
diff changeset
  5426
    else
hgs
parents:
diff changeset
  5427
        {
hgs
parents:
diff changeset
  5428
        retVal = ( Document()->CreationMode() != EMmsCreationModeRestricted );
hgs
parents:
diff changeset
  5429
        }
hgs
parents:
diff changeset
  5430
        
hgs
parents:
diff changeset
  5431
    return retVal;
hgs
parents:
diff changeset
  5432
    }
hgs
parents:
diff changeset
  5433
hgs
parents:
diff changeset
  5434
hgs
parents:
diff changeset
  5435
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5436
// CUniEditorAppUi::ShowWaitNoteL
hgs
parents:
diff changeset
  5437
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5438
//
hgs
parents:
diff changeset
  5439
TBool CUniEditorAppUi::ShowWaitNoteL( TInt aResourceId )
hgs
parents:
diff changeset
  5440
    {
hgs
parents:
diff changeset
  5441
    TInt waitNoteResource = R_UNIEDITOR_WAIT_NOTE;
hgs
parents:
diff changeset
  5442
    TBool waitNoteDelayOff = EFalse;
hgs
parents:
diff changeset
  5443
    
hgs
parents:
diff changeset
  5444
    if ( aResourceId == R_QTN_MSG_WAIT_SENDING_MMS )
hgs
parents:
diff changeset
  5445
        {
hgs
parents:
diff changeset
  5446
        waitNoteResource = R_UNIEDITOR_WAIT_NOTE_MMS_ICON;
hgs
parents:
diff changeset
  5447
        }
hgs
parents:
diff changeset
  5448
    else if ( aResourceId == R_QTN_MSG_WAIT_SENDING_SMS )
hgs
parents:
diff changeset
  5449
        {
hgs
parents:
diff changeset
  5450
        waitNoteResource = R_UNIEDITOR_WAIT_NOTE_SMS_ICON;
hgs
parents:
diff changeset
  5451
        }
hgs
parents:
diff changeset
  5452
        
hgs
parents:
diff changeset
  5453
    HBufC* string = NULL;
hgs
parents:
diff changeset
  5454
hgs
parents:
diff changeset
  5455
    switch ( aResourceId )
hgs
parents:
diff changeset
  5456
        {
hgs
parents:
diff changeset
  5457
        case R_QTN_MSG_WAIT_SENDING_MMS:
hgs
parents:
diff changeset
  5458
        case R_QTN_MSG_WAIT_SENDING_SMS:
hgs
parents:
diff changeset
  5459
        case R_QTN_WAIT_MSG_SAVED_OUTBOX:
hgs
parents:
diff changeset
  5460
        case R_QTN_UNI_WAIT_SAVING_MESSAGE_NEW:
hgs
parents:
diff changeset
  5461
            {
hgs
parents:
diff changeset
  5462
            waitNoteDelayOff = ETrue;
hgs
parents:
diff changeset
  5463
            }
hgs
parents:
diff changeset
  5464
        case R_QTN_UNI_WAIT_OPENING_EDITOR:
hgs
parents:
diff changeset
  5465
        case R_QTN_UNI_WAIT_SAVING_MESSAGE:
hgs
parents:
diff changeset
  5466
        case R_QTN_UNI_WAIT_INSERTING:
hgs
parents:
diff changeset
  5467
            {
hgs
parents:
diff changeset
  5468
            string = StringLoader::LoadLC( aResourceId, iCoeEnv );
hgs
parents:
diff changeset
  5469
            break;
hgs
parents:
diff changeset
  5470
            }
hgs
parents:
diff changeset
  5471
        case R_QTN_UNI_WAIT_SLIDE_CHANGE:
hgs
parents:
diff changeset
  5472
            {
hgs
parents:
diff changeset
  5473
            CArrayFixFlat<TInt>* array = new ( ELeave ) CArrayFixFlat<TInt>( 2 );
hgs
parents:
diff changeset
  5474
            CleanupStack::PushL( array );
hgs
parents:
diff changeset
  5475
            
hgs
parents:
diff changeset
  5476
            array->AppendL( iNextSlide + 1 );
hgs
parents:
diff changeset
  5477
            array->AppendL( iSmilModel->SlideCount() );
hgs
parents:
diff changeset
  5478
            
hgs
parents:
diff changeset
  5479
            string = StringLoader::LoadL( R_QTN_UNI_WAIT_SLIDE_CHANGE,
hgs
parents:
diff changeset
  5480
                                          *array,
hgs
parents:
diff changeset
  5481
                                          iCoeEnv );
hgs
parents:
diff changeset
  5482
            
hgs
parents:
diff changeset
  5483
            CleanupStack::PopAndDestroy( array );
hgs
parents:
diff changeset
  5484
            CleanupStack::PushL( string );
hgs
parents:
diff changeset
  5485
            break;
hgs
parents:
diff changeset
  5486
            }
hgs
parents:
diff changeset
  5487
        default:
hgs
parents:
diff changeset
  5488
            {
hgs
parents:
diff changeset
  5489
            break;
hgs
parents:
diff changeset
  5490
            }
hgs
parents:
diff changeset
  5491
        }
hgs
parents:
diff changeset
  5492
hgs
parents:
diff changeset
  5493
    iWaitDialog = new( ELeave ) CAknWaitDialog( reinterpret_cast<CEikDialog**>( &iWaitDialog ),
hgs
parents:
diff changeset
  5494
                                                waitNoteDelayOff );
hgs
parents:
diff changeset
  5495
                                                
hgs
parents:
diff changeset
  5496
    // Coverty Fix, Forward Null, http://ousrv057/cov.cgi?cid=35691                                            
hgs
parents:
diff changeset
  5497
    if(string)
hgs
parents:
diff changeset
  5498
    	{
hgs
parents:
diff changeset
  5499
    	iWaitDialog->SetTextL( *string );
hgs
parents:
diff changeset
  5500
    	CleanupStack::PopAndDestroy( string ); 
hgs
parents:
diff changeset
  5501
    	}
hgs
parents:
diff changeset
  5502
    
hgs
parents:
diff changeset
  5503
    iWaitDialog->SetCallback( this );
hgs
parents:
diff changeset
  5504
    
hgs
parents:
diff changeset
  5505
    iWaitResId = aResourceId;
hgs
parents:
diff changeset
  5506
    
hgs
parents:
diff changeset
  5507
    iWaitDialog->PrepareLC( waitNoteResource );
hgs
parents:
diff changeset
  5508
    return iWaitDialog->RunLD();
hgs
parents:
diff changeset
  5509
    }
hgs
parents:
diff changeset
  5510
hgs
parents:
diff changeset
  5511
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5512
// CUniEditorAppUi::DialogDismissedL
hgs
parents:
diff changeset
  5513
//
hgs
parents:
diff changeset
  5514
// This is a bit tricky. DialogDismissedL is called when wait dialog
hgs
parents:
diff changeset
  5515
// is really dismissed from the screen. Wait dialog is not neccessary
hgs
parents:
diff changeset
  5516
// dismmissed at once the ProcessFinishedL function is called. This 
hgs
parents:
diff changeset
  5517
// is because of some minimum delayes etc. tied to the visibility of
hgs
parents:
diff changeset
  5518
// wait dialog. But this more complex than that as wait dialog can be dismissed
hgs
parents:
diff changeset
  5519
// by end key or escape key from the screen before the operation has really been
hgs
parents:
diff changeset
  5520
// completed or cancelled. This needs to be taken into account here.
hgs
parents:
diff changeset
  5521
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5522
//
hgs
parents:
diff changeset
  5523
void CUniEditorAppUi::DialogDismissedL( TInt dismissed )
hgs
parents:
diff changeset
  5524
    {
hgs
parents:
diff changeset
  5525
    if ( dismissed == EAknSoftkeyDone )
hgs
parents:
diff changeset
  5526
        {
hgs
parents:
diff changeset
  5527
        switch ( iWaitResId )
hgs
parents:
diff changeset
  5528
            {
hgs
parents:
diff changeset
  5529
            case R_QTN_MSG_WAIT_SENDING_MMS:
hgs
parents:
diff changeset
  5530
            case R_QTN_MSG_WAIT_SENDING_SMS:
hgs
parents:
diff changeset
  5531
            case R_QTN_WAIT_MSG_SAVED_OUTBOX:
hgs
parents:
diff changeset
  5532
                {
hgs
parents:
diff changeset
  5533
                DoSendComplete2ndPhase();
hgs
parents:
diff changeset
  5534
                break;
hgs
parents:
diff changeset
  5535
                }
hgs
parents:
diff changeset
  5536
            case R_QTN_UNI_WAIT_SAVING_MESSAGE_NEW:
hgs
parents:
diff changeset
  5537
            case R_QTN_UNI_WAIT_SAVING_MESSAGE:
hgs
parents:
diff changeset
  5538
                {
hgs
parents:
diff changeset
  5539
                DoSavingComplete2ndPhase();
hgs
parents:
diff changeset
  5540
                break;
hgs
parents:
diff changeset
  5541
                }
hgs
parents:
diff changeset
  5542
            case R_QTN_UNI_WAIT_OPENING_EDITOR:
hgs
parents:
diff changeset
  5543
            case R_QTN_UNI_WAIT_INSERTING:
hgs
parents:
diff changeset
  5544
                {
hgs
parents:
diff changeset
  5545
                break;
hgs
parents:
diff changeset
  5546
                }
hgs
parents:
diff changeset
  5547
            case R_QTN_UNI_WAIT_SLIDE_CHANGE:
hgs
parents:
diff changeset
  5548
                {
hgs
parents:
diff changeset
  5549
                break;
hgs
parents:
diff changeset
  5550
                }
hgs
parents:
diff changeset
  5551
            default:
hgs
parents:
diff changeset
  5552
                {
hgs
parents:
diff changeset
  5553
                break;
hgs
parents:
diff changeset
  5554
                }
hgs
parents:
diff changeset
  5555
            }
hgs
parents:
diff changeset
  5556
        }
hgs
parents:
diff changeset
  5557
    else if ( dismissed == EEikBidCancel )
hgs
parents:
diff changeset
  5558
        {
hgs
parents:
diff changeset
  5559
        iWaitDialog = NULL;
hgs
parents:
diff changeset
  5560
        }
hgs
parents:
diff changeset
  5561
    }
hgs
parents:
diff changeset
  5562
hgs
parents:
diff changeset
  5563
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5564
// CUniEditorAppUi::RemoveWaitNote
hgs
parents:
diff changeset
  5565
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5566
//
hgs
parents:
diff changeset
  5567
void CUniEditorAppUi::RemoveWaitNote()
hgs
parents:
diff changeset
  5568
    {
hgs
parents:
diff changeset
  5569
    delete iWaitDialog;
hgs
parents:
diff changeset
  5570
    iWaitDialog = NULL;
hgs
parents:
diff changeset
  5571
    iWaitResId = -1;
hgs
parents:
diff changeset
  5572
    }
hgs
parents:
diff changeset
  5573
hgs
parents:
diff changeset
  5574
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5575
// CUniEditorAppUi::SetAddressSize
hgs
parents:
diff changeset
  5576
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5577
//
hgs
parents:
diff changeset
  5578
void CUniEditorAppUi::SetAddressSize()
hgs
parents:
diff changeset
  5579
    {
hgs
parents:
diff changeset
  5580
    if ( !iView )
hgs
parents:
diff changeset
  5581
        {
hgs
parents:
diff changeset
  5582
        return;
hgs
parents:
diff changeset
  5583
        }
hgs
parents:
diff changeset
  5584
    
hgs
parents:
diff changeset
  5585
    TInt tempBytes( 0 );
hgs
parents:
diff changeset
  5586
    TInt entryCnt( 0 );
hgs
parents:
diff changeset
  5587
    TInt sizeInBytes( 0 );
hgs
parents:
diff changeset
  5588
    for ( TInt i = CUniEditorHeader::EHeaderAddressTo; 
hgs
parents:
diff changeset
  5589
          i <= CUniEditorHeader::EHeaderAddressBcc; 
hgs
parents:
diff changeset
  5590
          i++ )
hgs
parents:
diff changeset
  5591
        {    
hgs
parents:
diff changeset
  5592
        if ( iHeader->AddressControl( static_cast<CUniEditorHeader::THeaderFields> (i) ) )
hgs
parents:
diff changeset
  5593
            {
hgs
parents:
diff changeset
  5594
            iHeader->AddressControl( 
hgs
parents:
diff changeset
  5595
                static_cast<CUniEditorHeader::THeaderFields> (i) )->GetSizeOfAddresses( entryCnt, 
hgs
parents:
diff changeset
  5596
                                                                                        tempBytes );
hgs
parents:
diff changeset
  5597
            sizeInBytes += tempBytes;
hgs
parents:
diff changeset
  5598
            }
hgs
parents:
diff changeset
  5599
        }
hgs
parents:
diff changeset
  5600
        
hgs
parents:
diff changeset
  5601
    Document()->SetAddressSize( sizeInBytes );
hgs
parents:
diff changeset
  5602
    }
hgs
parents:
diff changeset
  5603
hgs
parents:
diff changeset
  5604
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5605
// CUniEditorAppUi::SetSubjectSize
hgs
parents:
diff changeset
  5606
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5607
//
hgs
parents:
diff changeset
  5608
void CUniEditorAppUi::SetSubjectSize()
hgs
parents:
diff changeset
  5609
    {
hgs
parents:
diff changeset
  5610
    if ( !iView )
hgs
parents:
diff changeset
  5611
        {
hgs
parents:
diff changeset
  5612
        return;
hgs
parents:
diff changeset
  5613
        }
hgs
parents:
diff changeset
  5614
        
hgs
parents:
diff changeset
  5615
    CMsgExpandableControl* subj = iHeader->SubjectControl();
hgs
parents:
diff changeset
  5616
    
hgs
parents:
diff changeset
  5617
    if ( subj )
hgs
parents:
diff changeset
  5618
        {
hgs
parents:
diff changeset
  5619
        TPtrC subject = subj->TextContent().Read( 0, subj->TextContent().DocumentLength() );
hgs
parents:
diff changeset
  5620
        Document()->SetSubjectSize( CUniDataUtils::UTF8Size( subject ) );
hgs
parents:
diff changeset
  5621
        } 
hgs
parents:
diff changeset
  5622
        else
hgs
parents:
diff changeset
  5623
        {
hgs
parents:
diff changeset
  5624
        Document()->SetSubjectSize( 0 );
hgs
parents:
diff changeset
  5625
        }
hgs
parents:
diff changeset
  5626
    }
hgs
parents:
diff changeset
  5627
hgs
parents:
diff changeset
  5628
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5629
// CUniEditorAppUi::RemoveObjectL
hgs
parents:
diff changeset
  5630
// 
hgs
parents:
diff changeset
  5631
// Intended to be called from Objectsview. Updates screen
hgs
parents:
diff changeset
  5632
// when object removed in Objectsview. Objectsview has already
hgs
parents:
diff changeset
  5633
// delete atta from msgstore if needed.
hgs
parents:
diff changeset
  5634
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5635
//
hgs
parents:
diff changeset
  5636
void CUniEditorAppUi::RemoveObjectL( TUniRegion aRegion, 
hgs
parents:
diff changeset
  5637
                                     TUniLayout aLayout )
hgs
parents:
diff changeset
  5638
    {
hgs
parents:
diff changeset
  5639
    if ( iOriginalSlide != -1 && 
hgs
parents:
diff changeset
  5640
         Document()->CurrentSlide() != iOriginalSlide )
hgs
parents:
diff changeset
  5641
        {
hgs
parents:
diff changeset
  5642
        //nothing to do if the modified slide is not
hgs
parents:
diff changeset
  5643
        //visible
hgs
parents:
diff changeset
  5644
        return;
hgs
parents:
diff changeset
  5645
        }
hgs
parents:
diff changeset
  5646
hgs
parents:
diff changeset
  5647
    TBool removeCtrlFocused( EFalse ); 
hgs
parents:
diff changeset
  5648
    CMsgBaseControl* ctrl = NULL;
hgs
parents:
diff changeset
  5649
    TInt ctrlType = EMsgComponentIdNull;
hgs
parents:
diff changeset
  5650
    
hgs
parents:
diff changeset
  5651
    switch ( aRegion )
hgs
parents:
diff changeset
  5652
        {
hgs
parents:
diff changeset
  5653
        case EUniRegionImage:
hgs
parents:
diff changeset
  5654
            {
hgs
parents:
diff changeset
  5655
            ctrl = iView->RemoveControlL( EMsgComponentIdImage );
hgs
parents:
diff changeset
  5656
            if( !ctrl )
hgs
parents:
diff changeset
  5657
                { // Also video clip is located in image region so if no image -> check video control
hgs
parents:
diff changeset
  5658
                ctrl = iView->RemoveControlL( EMsgComponentIdVideo );
hgs
parents:
diff changeset
  5659
                }
hgs
parents:
diff changeset
  5660
            if ( !ctrl )
hgs
parents:
diff changeset
  5661
                { // Also SVG presentation is located in image region so if no image -> check SVG control
hgs
parents:
diff changeset
  5662
                ctrl = iView->RemoveControlL( EMsgComponentIdSvg );
hgs
parents:
diff changeset
  5663
                }
hgs
parents:
diff changeset
  5664
            
hgs
parents:
diff changeset
  5665
            if( ctrl )
hgs
parents:
diff changeset
  5666
                {
hgs
parents:
diff changeset
  5667
                removeCtrlFocused = ctrl->IsFocused();
hgs
parents:
diff changeset
  5668
                ctrlType = ctrl->ControlId();
hgs
parents:
diff changeset
  5669
                }
hgs
parents:
diff changeset
  5670
                
hgs
parents:
diff changeset
  5671
            delete ctrl;
hgs
parents:
diff changeset
  5672
            break;
hgs
parents:
diff changeset
  5673
            }
hgs
parents:
diff changeset
  5674
        case EUniRegionAudio:
hgs
parents:
diff changeset
  5675
            {
hgs
parents:
diff changeset
  5676
            ctrl = iView->RemoveControlL( EMsgComponentIdAudio );
hgs
parents:
diff changeset
  5677
            
hgs
parents:
diff changeset
  5678
            if( ctrl )
hgs
parents:
diff changeset
  5679
                {
hgs
parents:
diff changeset
  5680
                removeCtrlFocused = ctrl->IsFocused();
hgs
parents:
diff changeset
  5681
                ctrlType = ctrl->ControlId();
hgs
parents:
diff changeset
  5682
                }
hgs
parents:
diff changeset
  5683
                
hgs
parents:
diff changeset
  5684
            delete ctrl;
hgs
parents:
diff changeset
  5685
            break;
hgs
parents:
diff changeset
  5686
            }
hgs
parents:
diff changeset
  5687
        case EUniRegionText:
hgs
parents:
diff changeset
  5688
            {
hgs
parents:
diff changeset
  5689
            // Clear control content
hgs
parents:
diff changeset
  5690
            ctrl = BodyCtrl();
hgs
parents:
diff changeset
  5691
            
hgs
parents:
diff changeset
  5692
            if ( ctrl )
hgs
parents:
diff changeset
  5693
                {
hgs
parents:
diff changeset
  5694
                ctrl->Reset();
hgs
parents:
diff changeset
  5695
                ctrlType = ctrl->ControlId();
hgs
parents:
diff changeset
  5696
                }
hgs
parents:
diff changeset
  5697
                
hgs
parents:
diff changeset
  5698
            // Move control position if needed. Move focus & cursor position
hgs
parents:
diff changeset
  5699
            CMsgImageControl* imgCtrl = ImageCtrl();
hgs
parents:
diff changeset
  5700
hgs
parents:
diff changeset
  5701
            if ( imgCtrl && ( aLayout == EUniTextFirst ) )
hgs
parents:
diff changeset
  5702
                {
hgs
parents:
diff changeset
  5703
                // Move text control after the image. Cursor loc in text should be ok.
hgs
parents:
diff changeset
  5704
                CMsgBaseControl* bodyCtrl = iView->RemoveControlL( EMsgComponentIdBody );
hgs
parents:
diff changeset
  5705
                iView->AddControlL( bodyCtrl, EMsgComponentIdBody, EMsgAppendControl, EMsgBody );
hgs
parents:
diff changeset
  5706
                }
hgs
parents:
diff changeset
  5707
            break;
hgs
parents:
diff changeset
  5708
            }
hgs
parents:
diff changeset
  5709
        case EUniRegionUnresolved:
hgs
parents:
diff changeset
  5710
        default:
hgs
parents:
diff changeset
  5711
            {
hgs
parents:
diff changeset
  5712
            // Should never be here!
hgs
parents:
diff changeset
  5713
            __ASSERT_DEBUG( EFalse, Panic( EUniIllegalComponentType ) );
hgs
parents:
diff changeset
  5714
            break;
hgs
parents:
diff changeset
  5715
            }
hgs
parents:
diff changeset
  5716
        }   
hgs
parents:
diff changeset
  5717
        
hgs
parents:
diff changeset
  5718
    if ( ( aRegion == EUniRegionImage || 
hgs
parents:
diff changeset
  5719
           aRegion == EUniRegionAudio ) )
hgs
parents:
diff changeset
  5720
        {
hgs
parents:
diff changeset
  5721
        // Change focus to the beginning that scroll bar is updated
hgs
parents:
diff changeset
  5722
        // and text editor area removes extra lines
hgs
parents:
diff changeset
  5723
        if ( ToCtrl() )
hgs
parents:
diff changeset
  5724
            {
hgs
parents:
diff changeset
  5725
            iView->SetFocus( EMsgComponentIdTo );
hgs
parents:
diff changeset
  5726
            }
hgs
parents:
diff changeset
  5727
        else if ( iView->ControlById( EMsgComponentIdAudio ) )
hgs
parents:
diff changeset
  5728
            {
hgs
parents:
diff changeset
  5729
            //Audio is always first
hgs
parents:
diff changeset
  5730
            iView->SetFocus( EMsgComponentIdAudio );
hgs
parents:
diff changeset
  5731
            }
hgs
parents:
diff changeset
  5732
        else if ( iSmilModel->Layout() == EUniImageFirst &&  
hgs
parents:
diff changeset
  5733
                  ImageCtrl() )
hgs
parents:
diff changeset
  5734
            {
hgs
parents:
diff changeset
  5735
            // should not be need to update focus anymore
hgs
parents:
diff changeset
  5736
            iView->SetFocus( EMsgComponentIdImage );
hgs
parents:
diff changeset
  5737
            }    
hgs
parents:
diff changeset
  5738
        else 
hgs
parents:
diff changeset
  5739
            {
hgs
parents:
diff changeset
  5740
            // should not be need to update focus anymore
hgs
parents:
diff changeset
  5741
            iView->SetFocus( EMsgComponentIdBody );
hgs
parents:
diff changeset
  5742
            }
hgs
parents:
diff changeset
  5743
hgs
parents:
diff changeset
  5744
        CMsgBaseControl* focusedControl = iView->FocusedControl();
hgs
parents:
diff changeset
  5745
        if ( focusedControl )
hgs
parents:
diff changeset
  5746
            {
hgs
parents:
diff changeset
  5747
            if ( removeCtrlFocused &&  
hgs
parents:
diff changeset
  5748
                 focusedControl->ControlId() != EMsgComponentIdImage &&  
hgs
parents:
diff changeset
  5749
                 ctrlType == EMsgComponentIdAudio &&  
hgs
parents:
diff changeset
  5750
                 iSmilModel->Layout() == EUniImageFirst &&  
hgs
parents:
diff changeset
  5751
                 ImageCtrl() )
hgs
parents:
diff changeset
  5752
                {
hgs
parents:
diff changeset
  5753
                iView->SetFocus( EMsgComponentIdImage );
hgs
parents:
diff changeset
  5754
                }
hgs
parents:
diff changeset
  5755
            else  if ( focusedControl->ControlId() != EMsgComponentIdBody )
hgs
parents:
diff changeset
  5756
                {
hgs
parents:
diff changeset
  5757
                iView->SetFocus( EMsgComponentIdBody );            
hgs
parents:
diff changeset
  5758
                }
hgs
parents:
diff changeset
  5759
hgs
parents:
diff changeset
  5760
            if ( ctrlType == EMsgComponentIdAudio &&  
hgs
parents:
diff changeset
  5761
                 focusedControl->ControlId() == EMsgComponentIdImage )
hgs
parents:
diff changeset
  5762
                {
hgs
parents:
diff changeset
  5763
                // Set focus here so that imagecontrol will draw navipane if focused.
hgs
parents:
diff changeset
  5764
                iView->FocusedControl()->SetFocus( ETrue, EDrawNow );
hgs
parents:
diff changeset
  5765
                }
hgs
parents:
diff changeset
  5766
            }
hgs
parents:
diff changeset
  5767
        }
hgs
parents:
diff changeset
  5768
    }
hgs
parents:
diff changeset
  5769
hgs
parents:
diff changeset
  5770
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5771
// CUniEditorAppUi::DoUserChangeOrderL
hgs
parents:
diff changeset
  5772
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5773
//
hgs
parents:
diff changeset
  5774
void CUniEditorAppUi::DoUserChangeOrderL( TUniLayout aLayout )
hgs
parents:
diff changeset
  5775
    {
hgs
parents:
diff changeset
  5776
    // Both image and video are located in image region so there's only need to check it
hgs
parents:
diff changeset
  5777
    CUniObject* img = iSmilModel->GetObject( Document()->CurrentSlide(), EUniRegionImage );
hgs
parents:
diff changeset
  5778
hgs
parents:
diff changeset
  5779
    if ( img )
hgs
parents:
diff changeset
  5780
        {
hgs
parents:
diff changeset
  5781
        CAknLocalScreenClearer::NewLC( EFalse );
hgs
parents:
diff changeset
  5782
        
hgs
parents:
diff changeset
  5783
        ChangeOrderL( aLayout );
hgs
parents:
diff changeset
  5784
        
hgs
parents:
diff changeset
  5785
        CleanupStack::PopAndDestroy(); //clearer
hgs
parents:
diff changeset
  5786
        }
hgs
parents:
diff changeset
  5787
hgs
parents:
diff changeset
  5788
    iSmilModel->SetLayoutL( aLayout );
hgs
parents:
diff changeset
  5789
    Document()->SetBodyModified( ETrue );
hgs
parents:
diff changeset
  5790
    if ( !img )
hgs
parents:
diff changeset
  5791
        {
hgs
parents:
diff changeset
  5792
        TInt noteId = ( aLayout == EUniTextFirst ) ? R_UNIEDITOR_CONF_TEXTS_FIRST : 
hgs
parents:
diff changeset
  5793
                                                     R_UNIEDITOR_CONF_TEXTS_SECOND;
hgs
parents:
diff changeset
  5794
        ShowInformationNoteL( noteId, EFalse );
hgs
parents:
diff changeset
  5795
        }
hgs
parents:
diff changeset
  5796
    }
hgs
parents:
diff changeset
  5797
hgs
parents:
diff changeset
  5798
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5799
// CUniEditorAppUi::ChangeOrderL
hgs
parents:
diff changeset
  5800
// 
hgs
parents:
diff changeset
  5801
// Intended to be called from Objectsview. Updates screen
hgs
parents:
diff changeset
  5802
// when object order changed. SmilModel should already 
hgs
parents:
diff changeset
  5803
// contain correct layout. Also called by AppUi
hgs
parents:
diff changeset
  5804
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5805
//
hgs
parents:
diff changeset
  5806
void CUniEditorAppUi::ChangeOrderL( TUniLayout aLayout )
hgs
parents:
diff changeset
  5807
    {
hgs
parents:
diff changeset
  5808
    TInt focusedId = EMsgComponentIdNull;
hgs
parents:
diff changeset
  5809
    if ( iView && iView->FocusedControl() )
hgs
parents:
diff changeset
  5810
        {
hgs
parents:
diff changeset
  5811
        focusedId = iView->FocusedControl()->ControlId();
hgs
parents:
diff changeset
  5812
        }
hgs
parents:
diff changeset
  5813
        
hgs
parents:
diff changeset
  5814
    TInt index = EMsgAppendControl;
hgs
parents:
diff changeset
  5815
    // Coverty fix: Forward NULL, http://ousrv057/cov.cgi?cid=35695
hgs
parents:
diff changeset
  5816
    if(iView)
hgs
parents:
diff changeset
  5817
    	{
hgs
parents:
diff changeset
  5818
    CMsgBaseControl* ctrl = iView->RemoveControlL( EMsgComponentIdBody ); // Does not leave
hgs
parents:
diff changeset
  5819
hgs
parents:
diff changeset
  5820
    if ( ctrl ) 
hgs
parents:
diff changeset
  5821
        {
hgs
parents:
diff changeset
  5822
        switch( aLayout )
hgs
parents:
diff changeset
  5823
            {
hgs
parents:
diff changeset
  5824
            case EUniImageFirst:
hgs
parents:
diff changeset
  5825
                {
hgs
parents:
diff changeset
  5826
                index = EMsgAppendControl;
hgs
parents:
diff changeset
  5827
                break;
hgs
parents:
diff changeset
  5828
                }
hgs
parents:
diff changeset
  5829
            case EUniTextFirst:
hgs
parents:
diff changeset
  5830
                {
hgs
parents:
diff changeset
  5831
                if ( iView->ControlById ( EMsgComponentIdAudio ) )
hgs
parents:
diff changeset
  5832
                    {
hgs
parents:
diff changeset
  5833
                    index = EMsgFirstControl + 1;
hgs
parents:
diff changeset
  5834
                    }
hgs
parents:
diff changeset
  5835
                else
hgs
parents:
diff changeset
  5836
                    {
hgs
parents:
diff changeset
  5837
                    index = EMsgFirstControl;
hgs
parents:
diff changeset
  5838
                    }
hgs
parents:
diff changeset
  5839
                break;
hgs
parents:
diff changeset
  5840
                }
hgs
parents:
diff changeset
  5841
            case EUniUndefinedLayout:
hgs
parents:
diff changeset
  5842
            default:
hgs
parents:
diff changeset
  5843
                {
hgs
parents:
diff changeset
  5844
                __ASSERT_DEBUG( EFalse, Panic( EUniIllegalLayout ) );
hgs
parents:
diff changeset
  5845
                break;
hgs
parents:
diff changeset
  5846
                }
hgs
parents:
diff changeset
  5847
            }
hgs
parents:
diff changeset
  5848
            
hgs
parents:
diff changeset
  5849
        iView->AddControlL( ctrl, EMsgComponentIdBody, index, EMsgBody );
hgs
parents:
diff changeset
  5850
        }
hgs
parents:
diff changeset
  5851
      }
hgs
parents:
diff changeset
  5852
    
hgs
parents:
diff changeset
  5853
    if ( !( iHeader->IsAddressControl( focusedId ) ||  
hgs
parents:
diff changeset
  5854
            focusedId == EMsgComponentIdSubject ||
hgs
parents:
diff changeset
  5855
            focusedId == EMsgComponentIdAttachment ) &&
hgs
parents:
diff changeset
  5856
         iEditorFlags & ELaunchSuccessful )
hgs
parents:
diff changeset
  5857
        {
hgs
parents:
diff changeset
  5858
        SetFocusToBodyBeginningL();
hgs
parents:
diff changeset
  5859
        }
hgs
parents:
diff changeset
  5860
    //else -> keep focus as is
hgs
parents:
diff changeset
  5861
    }
hgs
parents:
diff changeset
  5862
hgs
parents:
diff changeset
  5863
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5864
// CUniEditorAppUi::ReleaseImage
hgs
parents:
diff changeset
  5865
// 
hgs
parents:
diff changeset
  5866
// If there is image control, sets image lock according 
hgs
parents:
diff changeset
  5867
// to parameter. Otherwise does nothing.
hgs
parents:
diff changeset
  5868
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5869
//
hgs
parents:
diff changeset
  5870
void CUniEditorAppUi::ReleaseImage( TBool aRelease )
hgs
parents:
diff changeset
  5871
    {
hgs
parents:
diff changeset
  5872
    CMsgImageControl* ctrl = ImageCtrl();
hgs
parents:
diff changeset
  5873
    
hgs
parents:
diff changeset
  5874
    if ( ctrl && aRelease )
hgs
parents:
diff changeset
  5875
        {
hgs
parents:
diff changeset
  5876
        ctrl->SetImageFileClosed();
hgs
parents:
diff changeset
  5877
        }
hgs
parents:
diff changeset
  5878
    }
hgs
parents:
diff changeset
  5879
hgs
parents:
diff changeset
  5880
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5881
// CUniEditorAppUi::MessageSizeInBytes
hgs
parents:
diff changeset
  5882
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5883
//
hgs
parents:
diff changeset
  5884
TInt CUniEditorAppUi::MessageSizeInBytes()
hgs
parents:
diff changeset
  5885
    {
hgs
parents:
diff changeset
  5886
    TBool useEstimate = EFalse;
hgs
parents:
diff changeset
  5887
    
hgs
parents:
diff changeset
  5888
    if ( Document()->DataModel()->SmilType() == EMmsSmil &&
hgs
parents:
diff changeset
  5889
        ( Document()->BodyModified() || 
hgs
parents:
diff changeset
  5890
          iEditorFlags & EUseEstimatedSmilSize ) )
hgs
parents:
diff changeset
  5891
        {
hgs
parents:
diff changeset
  5892
        useEstimate = ETrue;
hgs
parents:
diff changeset
  5893
        iEditorFlags |= EUseEstimatedSmilSize;
hgs
parents:
diff changeset
  5894
        }
hgs
parents:
diff changeset
  5895
hgs
parents:
diff changeset
  5896
    TInt size = Document()->MessageSize( useEstimate );
hgs
parents:
diff changeset
  5897
    CEikRichTextEditor* bodyEditor = BodyCtrlEditor();
hgs
parents:
diff changeset
  5898
    
hgs
parents:
diff changeset
  5899
    if ( bodyEditor )
hgs
parents:
diff changeset
  5900
        {
hgs
parents:
diff changeset
  5901
        TInt limit = ( TUint( size ) >= Document()->MaxMessageSize() ) ? 
hgs
parents:
diff changeset
  5902
            BodyCtrl()->TextContent().DocumentLength() : 
hgs
parents:
diff changeset
  5903
            KMaxTInt;
hgs
parents:
diff changeset
  5904
        bodyEditor->SetTextLimit( limit );
hgs
parents:
diff changeset
  5905
        }
hgs
parents:
diff changeset
  5906
    return size;
hgs
parents:
diff changeset
  5907
    }
hgs
parents:
diff changeset
  5908
hgs
parents:
diff changeset
  5909
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5910
// CUniEditorAppUi::DoSelectionKeyL
hgs
parents:
diff changeset
  5911
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5912
//
hgs
parents:
diff changeset
  5913
void CUniEditorAppUi::DoSelectionKeyL()
hgs
parents:
diff changeset
  5914
    {
hgs
parents:
diff changeset
  5915
    CMsgBaseControl* ctrl = iView->FocusedControl();
hgs
parents:
diff changeset
  5916
hgs
parents:
diff changeset
  5917
    if ( ctrl )
hgs
parents:
diff changeset
  5918
        {
hgs
parents:
diff changeset
  5919
        switch ( ctrl->ControlId() )
hgs
parents:
diff changeset
  5920
            {
hgs
parents:
diff changeset
  5921
            case EMsgComponentIdTo:
hgs
parents:
diff changeset
  5922
            case EMsgComponentIdCc:
hgs
parents:
diff changeset
  5923
            case EMsgComponentIdBcc:
hgs
parents:
diff changeset
  5924
                {
hgs
parents:
diff changeset
  5925
                if ( TUniMsvEntry::IsMmsUpload( Document()->Entry() ) )
hgs
parents:
diff changeset
  5926
                    {
hgs
parents:
diff changeset
  5927
                    break;
hgs
parents:
diff changeset
  5928
                    }
hgs
parents:
diff changeset
  5929
                    
hgs
parents:
diff changeset
  5930
                // Check is there any recipients in address ctrl
hgs
parents:
diff changeset
  5931
                TBool modified = EFalse;
hgs
parents:
diff changeset
  5932
                if ( iHeader->HasRecipients() )
hgs
parents:
diff changeset
  5933
                    {
hgs
parents:
diff changeset
  5934
                    // Recipients found. Verify addresses.
hgs
parents:
diff changeset
  5935
                    if ( !VerifyAddressesL( modified ) )
hgs
parents:
diff changeset
  5936
                        {
hgs
parents:
diff changeset
  5937
                        // Illegal address found.
hgs
parents:
diff changeset
  5938
                        modified = ETrue;
hgs
parents:
diff changeset
  5939
                        }
hgs
parents:
diff changeset
  5940
                    }
hgs
parents:
diff changeset
  5941
                    
hgs
parents:
diff changeset
  5942
                if ( !modified )//else
hgs
parents:
diff changeset
  5943
                    {
hgs
parents:
diff changeset
  5944
                    // Nothing changed on the UI. Open PhoneBook.
hgs
parents:
diff changeset
  5945
                    DoUserAddRecipientL();
hgs
parents:
diff changeset
  5946
                    }
hgs
parents:
diff changeset
  5947
                    
hgs
parents:
diff changeset
  5948
                break;
hgs
parents:
diff changeset
  5949
                }
hgs
parents:
diff changeset
  5950
            case EMsgComponentIdAttachment:
hgs
parents:
diff changeset
  5951
                {
hgs
parents:
diff changeset
  5952
                DoUserObjectsViewL( ETrue );                
hgs
parents:
diff changeset
  5953
                break;
hgs
parents:
diff changeset
  5954
                }
hgs
parents:
diff changeset
  5955
            case EMsgComponentIdImage:
hgs
parents:
diff changeset
  5956
                {
hgs
parents:
diff changeset
  5957
                if ( Document()->DataModel()->SmilType() == E3GPPSmil )
hgs
parents:
diff changeset
  5958
                    {
hgs
parents:
diff changeset
  5959
                    // focus is on "no-edit" SMIL icon
hgs
parents:
diff changeset
  5960
                    PlayPresentationL();
hgs
parents:
diff changeset
  5961
                    break;
hgs
parents:
diff changeset
  5962
                    } 
hgs
parents:
diff changeset
  5963
                if( Document()->DataModel()->SmilType() == ETemplateSmil )
hgs
parents:
diff changeset
  5964
                    {
hgs
parents:
diff changeset
  5965
                    break;
hgs
parents:
diff changeset
  5966
                    }
hgs
parents:
diff changeset
  5967
                // Otherwise fallthrough
hgs
parents:
diff changeset
  5968
                }
hgs
parents:
diff changeset
  5969
            case EMsgComponentIdVideo:
hgs
parents:
diff changeset
  5970
            case EMsgComponentIdAudio:
hgs
parents:
diff changeset
  5971
            case EMsgComponentIdSvg:
hgs
parents:
diff changeset
  5972
                {
hgs
parents:
diff changeset
  5973
                PlayFocusedItemL();
hgs
parents:
diff changeset
  5974
                break;
hgs
parents:
diff changeset
  5975
                }
hgs
parents:
diff changeset
  5976
            case EMsgComponentIdBody:
hgs
parents:
diff changeset
  5977
                {
hgs
parents:
diff changeset
  5978
                MenuBar()->SetMenuTitleResourceId( R_UNIEDITOR_CONTEXT_MENUBAR );
hgs
parents:
diff changeset
  5979
                MenuBar()->SetMenuType(CEikMenuBar::EMenuContext);
hgs
parents:
diff changeset
  5980
                
hgs
parents:
diff changeset
  5981
                TRAPD( err, MenuBar()->TryDisplayMenuBarL() ); 
hgs
parents:
diff changeset
  5982
                
hgs
parents:
diff changeset
  5983
                MenuBar()->SetMenuTitleResourceId( R_UNIEDITOR_MENUBAR );
hgs
parents:
diff changeset
  5984
                MenuBar()->SetMenuType(CEikMenuBar::EMenuOptions);
hgs
parents:
diff changeset
  5985
                
hgs
parents:
diff changeset
  5986
                User::LeaveIfError( err );                
hgs
parents:
diff changeset
  5987
                break;
hgs
parents:
diff changeset
  5988
                }
hgs
parents:
diff changeset
  5989
            case EMsgComponentIdSubject:
hgs
parents:
diff changeset
  5990
            default:
hgs
parents:
diff changeset
  5991
                {
hgs
parents:
diff changeset
  5992
                break;
hgs
parents:
diff changeset
  5993
                }
hgs
parents:
diff changeset
  5994
            }
hgs
parents:
diff changeset
  5995
        }
hgs
parents:
diff changeset
  5996
    }
hgs
parents:
diff changeset
  5997
hgs
parents:
diff changeset
  5998
// ---------------------------------------------------------
hgs
parents:
diff changeset
  5999
// CUniEditorAppUi::SetErrorResource
hgs
parents:
diff changeset
  6000
//
hgs
parents:
diff changeset
  6001
// This is a function where error id priorities
hgs
parents:
diff changeset
  6002
// can be defined.
hgs
parents:
diff changeset
  6003
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6004
//
hgs
parents:
diff changeset
  6005
void CUniEditorAppUi::SetErrorResource( TInt& aStoreId, TInt aNewId )
hgs
parents:
diff changeset
  6006
    {
hgs
parents:
diff changeset
  6007
    if ( ErrorPriority( aNewId ) >= ErrorPriority( aStoreId ) )
hgs
parents:
diff changeset
  6008
        {
hgs
parents:
diff changeset
  6009
        if ( ( aStoreId == R_UNIEDITOR_INFO_UNSUPPORTED_OBJECT ||  
hgs
parents:
diff changeset
  6010
               aStoreId == R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECT ) &&
hgs
parents:
diff changeset
  6011
             ( aNewId == R_UNIEDITOR_INFO_UNSUPPORTED_OBJECT ||  
hgs
parents:
diff changeset
  6012
               aNewId == R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECT ||  
hgs
parents:
diff changeset
  6013
               aNewId == R_UNIEDITOR_INFO_UNSUPPORTED_OBJECTS ||  
hgs
parents:
diff changeset
  6014
               aNewId == R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECTS ) )
hgs
parents:
diff changeset
  6015
            {
hgs
parents:
diff changeset
  6016
            // Set plural
hgs
parents:
diff changeset
  6017
            aStoreId = R_UNIEDITOR_INFO_UNSUPPORTED_OBJECTS;
hgs
parents:
diff changeset
  6018
            if ( Document()->CreationModeUserChangeable() &&
hgs
parents:
diff changeset
  6019
                 !Document()->CreationMode() )
hgs
parents:
diff changeset
  6020
                {
hgs
parents:
diff changeset
  6021
                aStoreId = R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECTS;
hgs
parents:
diff changeset
  6022
                }
hgs
parents:
diff changeset
  6023
            }
hgs
parents:
diff changeset
  6024
        else if ( aStoreId == R_UNIEDITOR_QUEST_GUIDED_OBJ &&
hgs
parents:
diff changeset
  6025
                  ( aNewId == R_UNIEDITOR_QUEST_GUIDED_OBJ ||
hgs
parents:
diff changeset
  6026
                    aNewId == R_UNIEDITOR_QUEST_GUIDED_OBJS ) )
hgs
parents:
diff changeset
  6027
            {
hgs
parents:
diff changeset
  6028
            // Set plural
hgs
parents:
diff changeset
  6029
            aStoreId = R_UNIEDITOR_QUEST_GUIDED_OBJS;
hgs
parents:
diff changeset
  6030
            }
hgs
parents:
diff changeset
  6031
        else if ( aStoreId == R_UNIEDITOR_QUEST_GUIDED_INC_OBJ &&
hgs
parents:
diff changeset
  6032
                  ( aNewId == R_UNIEDITOR_QUEST_GUIDED_INC_OBJ ||
hgs
parents:
diff changeset
  6033
                    aNewId == R_UNIEDITOR_QUEST_GUIDED_INC_OBJS ) )
hgs
parents:
diff changeset
  6034
            {
hgs
parents:
diff changeset
  6035
            // Set plural
hgs
parents:
diff changeset
  6036
            aStoreId = R_UNIEDITOR_QUEST_GUIDED_INC_OBJS;
hgs
parents:
diff changeset
  6037
            }
hgs
parents:
diff changeset
  6038
        else if ( aStoreId != -1 && 
hgs
parents:
diff changeset
  6039
                  aStoreId != aNewId )
hgs
parents:
diff changeset
  6040
            {
hgs
parents:
diff changeset
  6041
            aStoreId = aNewId;
hgs
parents:
diff changeset
  6042
            }
hgs
parents:
diff changeset
  6043
        else
hgs
parents:
diff changeset
  6044
            {
hgs
parents:
diff changeset
  6045
            aStoreId = aNewId;
hgs
parents:
diff changeset
  6046
            }
hgs
parents:
diff changeset
  6047
        }
hgs
parents:
diff changeset
  6048
    }
hgs
parents:
diff changeset
  6049
    
hgs
parents:
diff changeset
  6050
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6051
// CUniEditorAppUi::ErrorPriority
hgs
parents:
diff changeset
  6052
//
hgs
parents:
diff changeset
  6053
// This is a function where error id priorities
hgs
parents:
diff changeset
  6054
// can be defined.
hgs
parents:
diff changeset
  6055
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6056
//
hgs
parents:
diff changeset
  6057
TInt CUniEditorAppUi::ErrorPriority( TInt aErrorId )
hgs
parents:
diff changeset
  6058
    {
hgs
parents:
diff changeset
  6059
    TInt priority = 0;
hgs
parents:
diff changeset
  6060
    
hgs
parents:
diff changeset
  6061
    switch ( aErrorId )
hgs
parents:
diff changeset
  6062
        {
hgs
parents:
diff changeset
  6063
        case R_UNIEDITOR_INFO_SEND_FORBID_1:
hgs
parents:
diff changeset
  6064
            {
hgs
parents:
diff changeset
  6065
            priority++; // Fallthrough
hgs
parents:
diff changeset
  6066
            }
hgs
parents:
diff changeset
  6067
        case R_UNIEDITOR_INFO_OBJECT_TOO_BIG:
hgs
parents:
diff changeset
  6068
        case R_UNIEDITOR_INFO_OBJECT_SEND_AS_TOO_BIG:
hgs
parents:
diff changeset
  6069
            {
hgs
parents:
diff changeset
  6070
            priority++; // Fallthrough
hgs
parents:
diff changeset
  6071
            }
hgs
parents:
diff changeset
  6072
        case R_UNIEDITOR_INFO_MAX_SLIDES_SOME:
hgs
parents:
diff changeset
  6073
        case R_UNIEDITOR_INFO_MAX_SLIDES_ALL:
hgs
parents:
diff changeset
  6074
            {
hgs
parents:
diff changeset
  6075
            priority++; // Fallthrough
hgs
parents:
diff changeset
  6076
            }
hgs
parents:
diff changeset
  6077
        case R_UNIEDITOR_QUEST_GUIDED_PRESENTATION:
hgs
parents:
diff changeset
  6078
        case R_UNIEDITOR_ERROR_CANNOT_OPEN:
hgs
parents:
diff changeset
  6079
        case R_UNIEDITOR_ERROR_RMODE_CANNOT_OPEN:
hgs
parents:
diff changeset
  6080
            {
hgs
parents:
diff changeset
  6081
            priority++; // Fallthrough
hgs
parents:
diff changeset
  6082
            }
hgs
parents:
diff changeset
  6083
        case R_UNIEDITOR_QUEST_GUIDED_OBJ:
hgs
parents:
diff changeset
  6084
        case R_UNIEDITOR_QUEST_GUIDED_OBJS:
hgs
parents:
diff changeset
  6085
            {
hgs
parents:
diff changeset
  6086
            priority++; // Fallthrough
hgs
parents:
diff changeset
  6087
            }
hgs
parents:
diff changeset
  6088
        case R_UNIEDITOR_QUEST_GUIDED_INC_OBJ:
hgs
parents:
diff changeset
  6089
        case R_UNIEDITOR_QUEST_GUIDED_INC_OBJS:
hgs
parents:
diff changeset
  6090
            {
hgs
parents:
diff changeset
  6091
            priority++; // Fallthrough
hgs
parents:
diff changeset
  6092
            }
hgs
parents:
diff changeset
  6093
        case R_UNIEDITOR_INFO_SCALING_FAILED:
hgs
parents:
diff changeset
  6094
        case R_UNIEDITOR_INFO_RMODE_SCALING_FAILED:
hgs
parents:
diff changeset
  6095
            {
hgs
parents:
diff changeset
  6096
            priority++; // Fallthrough
hgs
parents:
diff changeset
  6097
            }
hgs
parents:
diff changeset
  6098
        case R_UNIEDITOR_INFO_UNSUPPORTED_OBJECT:
hgs
parents:
diff changeset
  6099
        case R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECT:
hgs
parents:
diff changeset
  6100
        case R_UNIEDITOR_INFO_UNSUPPORTED_OBJECTS:
hgs
parents:
diff changeset
  6101
        case R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECTS:
hgs
parents:
diff changeset
  6102
        case R_UNIEDITOR_INFO_SOME_NOT_SUPPORTED:
hgs
parents:
diff changeset
  6103
        case R_UNIEDITOR_INFO_RMODE_SOME_NOT_SUPPORTED:
hgs
parents:
diff changeset
  6104
            {
hgs
parents:
diff changeset
  6105
            priority++;
hgs
parents:
diff changeset
  6106
            break;
hgs
parents:
diff changeset
  6107
            }
hgs
parents:
diff changeset
  6108
        default:
hgs
parents:
diff changeset
  6109
            {
hgs
parents:
diff changeset
  6110
            break;
hgs
parents:
diff changeset
  6111
            }
hgs
parents:
diff changeset
  6112
        }
hgs
parents:
diff changeset
  6113
        
hgs
parents:
diff changeset
  6114
    return priority;
hgs
parents:
diff changeset
  6115
    }
hgs
parents:
diff changeset
  6116
    
hgs
parents:
diff changeset
  6117
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6118
// CUniEditorAppUi::IsPhoneOfflineL
hgs
parents:
diff changeset
  6119
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6120
//
hgs
parents:
diff changeset
  6121
TBool CUniEditorAppUi::IsPhoneOfflineL() const
hgs
parents:
diff changeset
  6122
    {
hgs
parents:
diff changeset
  6123
    if ( iSupportedFeatures & EUniFeatureOffline )
hgs
parents:
diff changeset
  6124
        {    
hgs
parents:
diff changeset
  6125
        return MsvUiServiceUtilitiesInternal::IsPhoneOfflineL();
hgs
parents:
diff changeset
  6126
        }
hgs
parents:
diff changeset
  6127
    else
hgs
parents:
diff changeset
  6128
        {
hgs
parents:
diff changeset
  6129
        return EFalse;
hgs
parents:
diff changeset
  6130
        }       
hgs
parents:
diff changeset
  6131
    }
hgs
parents:
diff changeset
  6132
hgs
parents:
diff changeset
  6133
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6134
// CUniEditorAppUi::LaunchHelpL
hgs
parents:
diff changeset
  6135
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6136
//
hgs
parents:
diff changeset
  6137
void CUniEditorAppUi::LaunchHelpL()
hgs
parents:
diff changeset
  6138
    {
hgs
parents:
diff changeset
  6139
    // activate Help application
hgs
parents:
diff changeset
  6140
    if ( iSupportedFeatures & EUniFeatureHelp )
hgs
parents:
diff changeset
  6141
        {
hgs
parents:
diff changeset
  6142
        CArrayFix<TCoeHelpContext>* helpContext = AppHelpContextL();
hgs
parents:
diff changeset
  6143
        HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), helpContext );
hgs
parents:
diff changeset
  6144
        }
hgs
parents:
diff changeset
  6145
    }
hgs
parents:
diff changeset
  6146
hgs
parents:
diff changeset
  6147
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6148
// CUniEditorAppUi::HelpContextL
hgs
parents:
diff changeset
  6149
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6150
//
hgs
parents:
diff changeset
  6151
CArrayFix<TCoeHelpContext>* CUniEditorAppUi::HelpContextL() const
hgs
parents:
diff changeset
  6152
    {
hgs
parents:
diff changeset
  6153
    CArrayFix<TCoeHelpContext>* array = new( ELeave ) CArrayFixFlat<TCoeHelpContext>( 1 );
hgs
parents:
diff changeset
  6154
    CleanupStack::PushL( array ); 
hgs
parents:
diff changeset
  6155
  
hgs
parents:
diff changeset
  6156
    array->AppendL(TCoeHelpContext(KUniEditorAppId, KUNIFIED_HLP_EDITOR()));
hgs
parents:
diff changeset
  6157
    
hgs
parents:
diff changeset
  6158
    CleanupStack::Pop( array );
hgs
parents:
diff changeset
  6159
    return array;
hgs
parents:
diff changeset
  6160
    }
hgs
parents:
diff changeset
  6161
hgs
parents:
diff changeset
  6162
hgs
parents:
diff changeset
  6163
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6164
// CUniEditorAppUi::PlayPresentationL
hgs
parents:
diff changeset
  6165
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6166
//
hgs
parents:
diff changeset
  6167
void CUniEditorAppUi::PlayPresentationL()
hgs
parents:
diff changeset
  6168
    {
hgs
parents:
diff changeset
  6169
    RFile smilFile = Document()->DataModel()->SmilList().GetSmilFileByIndexL( 0 );
hgs
parents:
diff changeset
  6170
    if ( !iParser )
hgs
parents:
diff changeset
  6171
        {        
hgs
parents:
diff changeset
  6172
        iParser = CMDXMLParser::NewL( this );
hgs
parents:
diff changeset
  6173
        }
hgs
parents:
diff changeset
  6174
    
hgs
parents:
diff changeset
  6175
    iParser->ParseFile( smilFile );
hgs
parents:
diff changeset
  6176
    // Continues in ParseFileCompleteL
hgs
parents:
diff changeset
  6177
    
hgs
parents:
diff changeset
  6178
    ActivateInputBlockerL( iParser );
hgs
parents:
diff changeset
  6179
    }
hgs
parents:
diff changeset
  6180
hgs
parents:
diff changeset
  6181
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6182
// CUniEditorAppUi::ParseFileCompleteL
hgs
parents:
diff changeset
  6183
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6184
//
hgs
parents:
diff changeset
  6185
void CUniEditorAppUi::ParseFileCompleteL()
hgs
parents:
diff changeset
  6186
    {
hgs
parents:
diff changeset
  6187
    // Detach the dom from parser
hgs
parents:
diff changeset
  6188
    if ( iDom )
hgs
parents:
diff changeset
  6189
        {
hgs
parents:
diff changeset
  6190
        delete iDom;
hgs
parents:
diff changeset
  6191
        iDom = NULL;
hgs
parents:
diff changeset
  6192
        }
hgs
parents:
diff changeset
  6193
        
hgs
parents:
diff changeset
  6194
    iDom = iParser->DetachXMLDoc();
hgs
parents:
diff changeset
  6195
hgs
parents:
diff changeset
  6196
    // Delete inputBlocker
hgs
parents:
diff changeset
  6197
    DeactivateInputBlocker();
hgs
parents:
diff changeset
  6198
hgs
parents:
diff changeset
  6199
    // Start playing the presentation    
hgs
parents:
diff changeset
  6200
    DoCompletePlayPresentationL();
hgs
parents:
diff changeset
  6201
    }
hgs
parents:
diff changeset
  6202
hgs
parents:
diff changeset
  6203
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6204
// CUniEditorAppUi::PlayPresentationL
hgs
parents:
diff changeset
  6205
//
hgs
parents:
diff changeset
  6206
// First go through every object in the presentation to find out
hgs
parents:
diff changeset
  6207
// whether audio should be enabled. After this launch SMIL player.
hgs
parents:
diff changeset
  6208
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6209
//
hgs
parents:
diff changeset
  6210
void CUniEditorAppUi::DoCompletePlayPresentationL()
hgs
parents:
diff changeset
  6211
    {
hgs
parents:
diff changeset
  6212
    TBool audio = EFalse;
hgs
parents:
diff changeset
  6213
    CUniObjectList& objects = Document()->DataModel()->ObjectList();
hgs
parents:
diff changeset
  6214
    TInt count = objects.Count();
hgs
parents:
diff changeset
  6215
    while ( count-- )
hgs
parents:
diff changeset
  6216
        {
hgs
parents:
diff changeset
  6217
        CUniObject* object = objects.GetByIndex( count );
hgs
parents:
diff changeset
  6218
        TMsgMediaType media = object->MediaType();
hgs
parents:
diff changeset
  6219
        
hgs
parents:
diff changeset
  6220
        if ( media == EMsgMediaAudio )
hgs
parents:
diff changeset
  6221
            {
hgs
parents:
diff changeset
  6222
            audio = ETrue;
hgs
parents:
diff changeset
  6223
            break;
hgs
parents:
diff changeset
  6224
            }
hgs
parents:
diff changeset
  6225
        else if ( media == EMsgMediaVideo )
hgs
parents:
diff changeset
  6226
            {
hgs
parents:
diff changeset
  6227
            CMsgVideoInfo* info = static_cast<CMsgVideoInfo*>( object->MediaInfo() );
hgs
parents:
diff changeset
  6228
            if ( !info ||
hgs
parents:
diff changeset
  6229
                 info->IsAudio() )
hgs
parents:
diff changeset
  6230
                {
hgs
parents:
diff changeset
  6231
                audio = ETrue;
hgs
parents:
diff changeset
  6232
                break;
hgs
parents:
diff changeset
  6233
                }
hgs
parents:
diff changeset
  6234
            }
hgs
parents:
diff changeset
  6235
        }
hgs
parents:
diff changeset
  6236
        
hgs
parents:
diff changeset
  6237
    CSmilPlayerDialog* smilPlayer = CSmilPlayerDialog::NewL( iDom,
hgs
parents:
diff changeset
  6238
                                                             &objects,
hgs
parents:
diff changeset
  6239
                                                             KNullDesC(),
hgs
parents:
diff changeset
  6240
                                                             ETrue,
hgs
parents:
diff changeset
  6241
                                                             audio );
hgs
parents:
diff changeset
  6242
    
hgs
parents:
diff changeset
  6243
    if ( iFixedToolbar )
hgs
parents:
diff changeset
  6244
        {
hgs
parents:
diff changeset
  6245
        iFixedToolbar->SetToolbarVisibility(EFalse, EFalse);
hgs
parents:
diff changeset
  6246
        }
hgs
parents:
diff changeset
  6247
    
hgs
parents:
diff changeset
  6248
    iEditorFlags |= EToolbarHidden;
hgs
parents:
diff changeset
  6249
    CleanupStack::PushL( TCleanupItem( EnableFixedToolbar, this ) );
hgs
parents:
diff changeset
  6250
    
hgs
parents:
diff changeset
  6251
    SetKeyEventFlags(0);
hgs
parents:
diff changeset
  6252
    
hgs
parents:
diff changeset
  6253
    CleanupStack::PushL( TCleanupItem( DisableSendKey, this ) );
hgs
parents:
diff changeset
  6254
    smilPlayer->ExecuteLD();
hgs
parents:
diff changeset
  6255
    
hgs
parents:
diff changeset
  6256
    CleanupStack::PopAndDestroy(2);// DisableSendKey,EnableFixedToolbar
hgs
parents:
diff changeset
  6257
    
hgs
parents:
diff changeset
  6258
    if ( iFixedToolbar )
hgs
parents:
diff changeset
  6259
        {
hgs
parents:
diff changeset
  6260
        iFixedToolbar->SetToolbarVisibility(ETrue, EFalse);
hgs
parents:
diff changeset
  6261
        }
hgs
parents:
diff changeset
  6262
    // re-calculate all pos and dimensions of layout's widgets, after
hgs
parents:
diff changeset
  6263
    // status pane is set back to usual and fixed-toolbar is made visible.
hgs
parents:
diff changeset
  6264
    HandleResourceChangeL(KEikDynamicLayoutVariantSwitch);
hgs
parents:
diff changeset
  6265
    }
hgs
parents:
diff changeset
  6266
hgs
parents:
diff changeset
  6267
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6268
// CUniEditorAppUi::RemoveTemplateL
hgs
parents:
diff changeset
  6269
// 
hgs
parents:
diff changeset
  6270
// First confirms the operation from user. After user has 
hgs
parents:
diff changeset
  6271
// confirmed the operation remove all the objects and SMILs
hgs
parents:
diff changeset
  6272
// from the message. Enable toolbar and set modified flag on. 
hgs
parents:
diff changeset
  6273
// Then replace the presentation icon with body text control and add
hgs
parents:
diff changeset
  6274
// single slide is no slides exists. Finally check the message type and
hgs
parents:
diff changeset
  6275
// update statuspane according to current message type.
hgs
parents:
diff changeset
  6276
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6277
//
hgs
parents:
diff changeset
  6278
void CUniEditorAppUi::RemoveTemplateL()
hgs
parents:
diff changeset
  6279
    {
hgs
parents:
diff changeset
  6280
    if ( ShowConfirmationQueryL( R_UNIEDITOR_QUEST_REMOVE_TEMPLATE ) )
hgs
parents:
diff changeset
  6281
        {
hgs
parents:
diff changeset
  6282
        CUniObjectList& objectList = Document()->DataModel()->ObjectList();
hgs
parents:
diff changeset
  6283
        objectList.RemoveAllObjectsL();
hgs
parents:
diff changeset
  6284
        
hgs
parents:
diff changeset
  6285
        CMsvStore* editStore = Document()->Mtm().Entry().EditStoreL();
hgs
parents:
diff changeset
  6286
        CleanupStack::PushL( editStore );            
hgs
parents:
diff changeset
  6287
        Document()->DataModel()->SmilList().RemoveSmilL( *editStore );
hgs
parents:
diff changeset
  6288
        editStore->CommitL();
hgs
parents:
diff changeset
  6289
        CleanupStack::PopAndDestroy( editStore );
hgs
parents:
diff changeset
  6290
hgs
parents:
diff changeset
  6291
        Document()->DataModel()->SetSmilType( EMmsSmil );
hgs
parents:
diff changeset
  6292
        
hgs
parents:
diff changeset
  6293
        UpdateToolbarL();
hgs
parents:
diff changeset
  6294
        
hgs
parents:
diff changeset
  6295
        Document()->SetBodyModified( ETrue );
hgs
parents:
diff changeset
  6296
hgs
parents:
diff changeset
  6297
        // Delete icon
hgs
parents:
diff changeset
  6298
        iView->DeleteControlL( EMsgComponentIdImage );  // Does not leave
hgs
parents:
diff changeset
  6299
        
hgs
parents:
diff changeset
  6300
        // Add body
hgs
parents:
diff changeset
  6301
        CMsgBodyControl* bodyC = CMsgBodyControl::NewL(iView);
hgs
parents:
diff changeset
  6302
        CleanupStack::PushL( bodyC );
hgs
parents:
diff changeset
  6303
        
hgs
parents:
diff changeset
  6304
        iView->AddControlL( bodyC, EMsgComponentIdBody, EMsgAppendControl, EMsgBody );
hgs
parents:
diff changeset
  6305
        
hgs
parents:
diff changeset
  6306
        CleanupStack::Pop( bodyC );
hgs
parents:
diff changeset
  6307
        
hgs
parents:
diff changeset
  6308
        iView->SetFocus( EMsgComponentIdBody );
hgs
parents:
diff changeset
  6309
hgs
parents:
diff changeset
  6310
        if ( !iSmilModel->SlideCount() )
hgs
parents:
diff changeset
  6311
            {
hgs
parents:
diff changeset
  6312
            iSmilModel->AddSlideL();
hgs
parents:
diff changeset
  6313
            }
hgs
parents:
diff changeset
  6314
            
hgs
parents:
diff changeset
  6315
        CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
  6316
        InitNaviPaneL();
hgs
parents:
diff changeset
  6317
        SetTitleL();
hgs
parents:
diff changeset
  6318
        }
hgs
parents:
diff changeset
  6319
    }
hgs
parents:
diff changeset
  6320
hgs
parents:
diff changeset
  6321
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6322
// CUniEditorAppUi::SetFocusToBodyBeginningL
hgs
parents:
diff changeset
  6323
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6324
//
hgs
parents:
diff changeset
  6325
void CUniEditorAppUi::SetFocusToBodyBeginningL()
hgs
parents:
diff changeset
  6326
    {
hgs
parents:
diff changeset
  6327
    if ( ToCtrl() )
hgs
parents:
diff changeset
  6328
        {
hgs
parents:
diff changeset
  6329
        // Set focus always first to "To" in order to 
hgs
parents:
diff changeset
  6330
        // make "To" field visible
hgs
parents:
diff changeset
  6331
        iView->SetFocus( EMsgComponentIdTo );
hgs
parents:
diff changeset
  6332
        }
hgs
parents:
diff changeset
  6333
        
hgs
parents:
diff changeset
  6334
    if ( BodyCtrl() )
hgs
parents:
diff changeset
  6335
        {
hgs
parents:
diff changeset
  6336
        BodyCtrl()->SetCursorPosL( 0 );
hgs
parents:
diff changeset
  6337
        }
hgs
parents:
diff changeset
  6338
        
hgs
parents:
diff changeset
  6339
    TBool focusId = EMsgComponentIdBody;
hgs
parents:
diff changeset
  6340
    
hgs
parents:
diff changeset
  6341
    if ( iView->ControlById( EMsgComponentIdAudio ) )
hgs
parents:
diff changeset
  6342
        {
hgs
parents:
diff changeset
  6343
        //Audio is always first
hgs
parents:
diff changeset
  6344
        focusId = EMsgComponentIdAudio;
hgs
parents:
diff changeset
  6345
        } 
hgs
parents:
diff changeset
  6346
    // When this is called from DoUserChangerOrderL the new layout is not
hgs
parents:
diff changeset
  6347
    // yet updated in SmilModel -> that's why the if's below seem to be mixed
hgs
parents:
diff changeset
  6348
    else if ( iSmilModel->Layout() == EUniTextFirst &&
hgs
parents:
diff changeset
  6349
              iView->ControlById( EMsgComponentIdImage ) )
hgs
parents:
diff changeset
  6350
        {
hgs
parents:
diff changeset
  6351
        focusId = EMsgComponentIdImage;
hgs
parents:
diff changeset
  6352
        }
hgs
parents:
diff changeset
  6353
    else if ( iSmilModel->Layout() == EUniTextFirst &&
hgs
parents:
diff changeset
  6354
              iView->ControlById( EMsgComponentIdVideo ) )
hgs
parents:
diff changeset
  6355
        {
hgs
parents:
diff changeset
  6356
        focusId = EMsgComponentIdVideo;
hgs
parents:
diff changeset
  6357
        }
hgs
parents:
diff changeset
  6358
    //else -> EMsgComponentIdBody
hgs
parents:
diff changeset
  6359
hgs
parents:
diff changeset
  6360
    iView->SetFocus( focusId );
hgs
parents:
diff changeset
  6361
    }
hgs
parents:
diff changeset
  6362
hgs
parents:
diff changeset
  6363
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6364
// CUniEditorAppUi::DoInsertCompleteL
hgs
parents:
diff changeset
  6365
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6366
//
hgs
parents:
diff changeset
  6367
void CUniEditorAppUi::DoInsertCompleteL( TUniEditorOperationEvent aEvent )
hgs
parents:
diff changeset
  6368
    {
hgs
parents:
diff changeset
  6369
    // focus and cursor positions handling
hgs
parents:
diff changeset
  6370
    TBool insertedAsAttachment = EFalse;
hgs
parents:
diff changeset
  6371
    
hgs
parents:
diff changeset
  6372
    if ( aEvent == EUniEditorOperationComplete )
hgs
parents:
diff changeset
  6373
        {  
hgs
parents:
diff changeset
  6374
        if ( iInsertOperation->IsAddedAsAttachment() )
hgs
parents:
diff changeset
  6375
            {
hgs
parents:
diff changeset
  6376
            Document()->SetHeaderModified( ETrue );
hgs
parents:
diff changeset
  6377
            insertedAsAttachment = ETrue;
hgs
parents:
diff changeset
  6378
            }
hgs
parents:
diff changeset
  6379
        else
hgs
parents:
diff changeset
  6380
            {
hgs
parents:
diff changeset
  6381
           SetFocusToBodyBeginningL();
hgs
parents:
diff changeset
  6382
            
hgs
parents:
diff changeset
  6383
            switch ( iInsertingType )
hgs
parents:
diff changeset
  6384
                {
hgs
parents:
diff changeset
  6385
                case EMsgMediaImage:
hgs
parents:
diff changeset
  6386
                    {
hgs
parents:
diff changeset
  6387
                    // Set the focus to Text field so that user will be able to
hgs
parents:
diff changeset
  6388
					// Type the text when image height is too big
hgs
parents:
diff changeset
  6389
                    CMsgBodyControl* bodyCtrl = BodyCtrl();
hgs
parents:
diff changeset
  6390
                    if ( bodyCtrl )
hgs
parents:
diff changeset
  6391
                        {
hgs
parents:
diff changeset
  6392
						// Put the cursor at the end of Text.
hgs
parents:
diff changeset
  6393
                        bodyCtrl->SetCursorPosL( bodyCtrl->Editor().TextLength() );
hgs
parents:
diff changeset
  6394
                        iView->SetFocus( EMsgComponentIdBody );                           
hgs
parents:
diff changeset
  6395
                        }
hgs
parents:
diff changeset
  6396
                    break;
hgs
parents:
diff changeset
  6397
                    }
hgs
parents:
diff changeset
  6398
                case EMsgMediaAudio:
hgs
parents:
diff changeset
  6399
                    {
hgs
parents:
diff changeset
  6400
                    // Set focus always first to the audio control
hgs
parents:
diff changeset
  6401
                    iView->SetFocus( EMsgComponentIdAudio );
hgs
parents:
diff changeset
  6402
                    break;
hgs
parents:
diff changeset
  6403
                    }
hgs
parents:
diff changeset
  6404
                case EMsgMediaVideo:
hgs
parents:
diff changeset
  6405
                    {
hgs
parents:
diff changeset
  6406
                    // Set focus always first to the audio control
hgs
parents:
diff changeset
  6407
                    iView->SetFocus( EMsgComponentIdVideo );
hgs
parents:
diff changeset
  6408
                    break;
hgs
parents:
diff changeset
  6409
                    }
hgs
parents:
diff changeset
  6410
                case EMsgMediaSvg:
hgs
parents:
diff changeset
  6411
                    {
hgs
parents:
diff changeset
  6412
                    // Set focus always first to the audio control
hgs
parents:
diff changeset
  6413
                    iView->SetFocus( EMsgComponentIdSvg );
hgs
parents:
diff changeset
  6414
                    break;
hgs
parents:
diff changeset
  6415
                    }
hgs
parents:
diff changeset
  6416
                default:
hgs
parents:
diff changeset
  6417
                    {
hgs
parents:
diff changeset
  6418
                    // nothing to do
hgs
parents:
diff changeset
  6419
                    break;
hgs
parents:
diff changeset
  6420
                    }
hgs
parents:
diff changeset
  6421
                } 
hgs
parents:
diff changeset
  6422
            }
hgs
parents:
diff changeset
  6423
            
hgs
parents:
diff changeset
  6424
        iInsertingType = EMsgMediaUnknown;
hgs
parents:
diff changeset
  6425
        }
hgs
parents:
diff changeset
  6426
        
hgs
parents:
diff changeset
  6427
    TUniState oldState = Document()->UniState();
hgs
parents:
diff changeset
  6428
    DoInsertComplete2ndPhaseL();
hgs
parents:
diff changeset
  6429
    
hgs
parents:
diff changeset
  6430
    // Lit up display backlight in case it has gone off due to a long operation
hgs
parents:
diff changeset
  6431
    User::ResetInactivityTime();
hgs
parents:
diff changeset
  6432
    
hgs
parents:
diff changeset
  6433
    if( insertedAsAttachment && 
hgs
parents:
diff changeset
  6434
        ( oldState == Document()->UniState() ||  
hgs
parents:
diff changeset
  6435
          !iPopupNote ) )
hgs
parents:
diff changeset
  6436
        {   
hgs
parents:
diff changeset
  6437
        // The message type did not change or change popup note is not shown
hgs
parents:
diff changeset
  6438
        // so show the attachment added note
hgs
parents:
diff changeset
  6439
        ShowInformationNoteL( R_UNIEDITOR_QTN_UNIFIED_ATTACHMENT_ADDED, EFalse );
hgs
parents:
diff changeset
  6440
        }
hgs
parents:
diff changeset
  6441
    
hgs
parents:
diff changeset
  6442
    }
hgs
parents:
diff changeset
  6443
hgs
parents:
diff changeset
  6444
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6445
// CUniEditorAppUi::DoInsertComplete2ndPhaseL
hgs
parents:
diff changeset
  6446
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6447
//
hgs
parents:
diff changeset
  6448
void CUniEditorAppUi::DoInsertComplete2ndPhaseL()
hgs
parents:
diff changeset
  6449
    {
hgs
parents:
diff changeset
  6450
    RemoveWaitNote();
hgs
parents:
diff changeset
  6451
    
hgs
parents:
diff changeset
  6452
    delete iScreenClearer;
hgs
parents:
diff changeset
  6453
    iScreenClearer = NULL;
hgs
parents:
diff changeset
  6454
    
hgs
parents:
diff changeset
  6455
    CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
  6456
    SetTitleL();
hgs
parents:
diff changeset
  6457
    InitNaviPaneL();
hgs
parents:
diff changeset
  6458
    ShowInsertErrorsL();
hgs
parents:
diff changeset
  6459
    }
hgs
parents:
diff changeset
  6460
hgs
parents:
diff changeset
  6461
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6462
// CUniEditorAppUi::ShowInsertErrorsL
hgs
parents:
diff changeset
  6463
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6464
//
hgs
parents:
diff changeset
  6465
void CUniEditorAppUi::ShowInsertErrorsL()
hgs
parents:
diff changeset
  6466
    {
hgs
parents:
diff changeset
  6467
    TInt errRes( KErrNotFound );
hgs
parents:
diff changeset
  6468
    
hgs
parents:
diff changeset
  6469
    CArrayFixFlat<TInt>* errors = iInsertOperation->GetErrors();
hgs
parents:
diff changeset
  6470
    
hgs
parents:
diff changeset
  6471
    for ( TInt i = 0; i < errors->Count(); i++ )
hgs
parents:
diff changeset
  6472
        {
hgs
parents:
diff changeset
  6473
        switch ( errors->At( i ) )
hgs
parents:
diff changeset
  6474
            {
hgs
parents:
diff changeset
  6475
            case EUniProcessImgOutOfMemory:
hgs
parents:
diff changeset
  6476
            case EUniProcessImgOutOfDisk:
hgs
parents:
diff changeset
  6477
            case EUniProcessImgNotFound:
hgs
parents:
diff changeset
  6478
            case EUniProcessImgNonConformant:
hgs
parents:
diff changeset
  6479
            case EUniProcessImgScalingFailed:
hgs
parents:
diff changeset
  6480
            case EUniProcessImgCompressFailed:
hgs
parents:
diff changeset
  6481
            case EUniProcessImgCouldNotScale:
hgs
parents:
diff changeset
  6482
                {
hgs
parents:
diff changeset
  6483
                if( Document()->CreationModeUserChangeable() &&
hgs
parents:
diff changeset
  6484
                    Document()->CreationMode() == EMmsCreationModeRestricted )
hgs
parents:
diff changeset
  6485
                    {
hgs
parents:
diff changeset
  6486
                    SetErrorResource( errRes, R_UNIEDITOR_INFO_RMODE_SCALING_FAILED );
hgs
parents:
diff changeset
  6487
                    }
hgs
parents:
diff changeset
  6488
                else
hgs
parents:
diff changeset
  6489
                    {
hgs
parents:
diff changeset
  6490
                    SetErrorResource( errRes, R_UNIEDITOR_INFO_SCALING_FAILED );
hgs
parents:
diff changeset
  6491
                    }
hgs
parents:
diff changeset
  6492
                break;
hgs
parents:
diff changeset
  6493
                }
hgs
parents:
diff changeset
  6494
            case EUniInsertTooBig:
hgs
parents:
diff changeset
  6495
                {
hgs
parents:
diff changeset
  6496
                SetErrorResource( errRes, R_UNIEDITOR_INFO_OBJECT_TOO_BIG );
hgs
parents:
diff changeset
  6497
                break;
hgs
parents:
diff changeset
  6498
                }
hgs
parents:
diff changeset
  6499
            case EUniProcessImgUserAbort:
hgs
parents:
diff changeset
  6500
            case EUniInsertUserGuidedAbort:
hgs
parents:
diff changeset
  6501
                {
hgs
parents:
diff changeset
  6502
                return;
hgs
parents:
diff changeset
  6503
                }
hgs
parents:
diff changeset
  6504
            case EUniInsertNotSupported:
hgs
parents:
diff changeset
  6505
            case EUniInsertSlideChangeFailed:
hgs
parents:
diff changeset
  6506
                {
hgs
parents:
diff changeset
  6507
                if( Document()->CreationModeUserChangeable() &&
hgs
parents:
diff changeset
  6508
                    Document()->CreationMode() == EMmsCreationModeRestricted )
hgs
parents:
diff changeset
  6509
                    {
hgs
parents:
diff changeset
  6510
                    SetErrorResource( errRes, R_UNIEDITOR_INFO_RMODE_UNSUPPORTED_OBJECT );
hgs
parents:
diff changeset
  6511
                    }
hgs
parents:
diff changeset
  6512
                else
hgs
parents:
diff changeset
  6513
                    {
hgs
parents:
diff changeset
  6514
                    SetErrorResource( errRes, R_UNIEDITOR_INFO_UNSUPPORTED_OBJECT );
hgs
parents:
diff changeset
  6515
                    }
hgs
parents:
diff changeset
  6516
                break;
hgs
parents:
diff changeset
  6517
                }
hgs
parents:
diff changeset
  6518
            default:
hgs
parents:
diff changeset
  6519
                {
hgs
parents:
diff changeset
  6520
                break;
hgs
parents:
diff changeset
  6521
                }
hgs
parents:
diff changeset
  6522
            }
hgs
parents:
diff changeset
  6523
        }
hgs
parents:
diff changeset
  6524
        
hgs
parents:
diff changeset
  6525
    if ( errRes != KErrNotFound )
hgs
parents:
diff changeset
  6526
        {
hgs
parents:
diff changeset
  6527
        ShowInformationNoteL( errRes, EFalse );
hgs
parents:
diff changeset
  6528
        }
hgs
parents:
diff changeset
  6529
    }
hgs
parents:
diff changeset
  6530
hgs
parents:
diff changeset
  6531
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6532
// CUniEditorAppUi::EditorOperationEvent
hgs
parents:
diff changeset
  6533
//
hgs
parents:
diff changeset
  6534
// This is marked as non-leaving function since this is leaving with
hgs
parents:
diff changeset
  6535
// KLeaveExit only (also Exit() is not leaving even if it is leaving).
hgs
parents:
diff changeset
  6536
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6537
//
hgs
parents:
diff changeset
  6538
void CUniEditorAppUi::EditorOperationEvent( TUniEditorOperationType aOperation,
hgs
parents:
diff changeset
  6539
                                            TUniEditorOperationEvent aEvent )
hgs
parents:
diff changeset
  6540
    {
hgs
parents:
diff changeset
  6541
    if ( iEditorFlags & EEditorExiting )
hgs
parents:
diff changeset
  6542
        {
hgs
parents:
diff changeset
  6543
        // Do not handle any event if we are exiting from editor.
hgs
parents:
diff changeset
  6544
		// rest values. 
hgs
parents:
diff changeset
  6545
        iOptimizedFlow = EFalse;
hgs
parents:
diff changeset
  6546
        return;
hgs
parents:
diff changeset
  6547
        }
hgs
parents:
diff changeset
  6548
    
hgs
parents:
diff changeset
  6549
    if ( aEvent == EUniEditorOperationComplete ||  
hgs
parents:
diff changeset
  6550
         aEvent == EUniEditorOperationError ||
hgs
parents:
diff changeset
  6551
         aEvent == EUniEditorOperationCancel )
hgs
parents:
diff changeset
  6552
        {
hgs
parents:
diff changeset
  6553
		// set iOptimizedFlow
hgs
parents:
diff changeset
  6554
        if( aOperation == EUniEditorOperationLaunch)
hgs
parents:
diff changeset
  6555
            {
hgs
parents:
diff changeset
  6556
            if(iLaunchOperation)
hgs
parents:
diff changeset
  6557
                {
hgs
parents:
diff changeset
  6558
                iOptimizedFlow = iLaunchOperation->IsOptimizedFlagSet();
hgs
parents:
diff changeset
  6559
                if(iOptimizedFlow )
hgs
parents:
diff changeset
  6560
                    {
hgs
parents:
diff changeset
  6561
                    TRAP_IGNORE(ShowWaitNoteL( R_QTN_UNI_WAIT_INSERTING ));
hgs
parents:
diff changeset
  6562
                    iOptimizedFlow = EFalse;
hgs
parents:
diff changeset
  6563
                    return;
hgs
parents:
diff changeset
  6564
                    }
hgs
parents:
diff changeset
  6565
                }
hgs
parents:
diff changeset
  6566
            }
hgs
parents:
diff changeset
  6567
        
hgs
parents:
diff changeset
  6568
        DeactivateInputBlocker();
hgs
parents:
diff changeset
  6569
        iEditorFlags &= ~EMsgEditInProgress;   
hgs
parents:
diff changeset
  6570
        
hgs
parents:
diff changeset
  6571
        if ( aEvent == EUniEditorOperationCancel &&
hgs
parents:
diff changeset
  6572
             aOperation != EUniEditorOperationSend )
hgs
parents:
diff changeset
  6573
            {
hgs
parents:
diff changeset
  6574
            // Operation by operation should be considered what is proper action 
hgs
parents:
diff changeset
  6575
            // in Cancel situation. Send operation handles the removing of wait note
hgs
parents:
diff changeset
  6576
            // correctly. When this is done with all operations operation checking
hgs
parents:
diff changeset
  6577
            // can be removed.
hgs
parents:
diff changeset
  6578
            EndActiveWait();
hgs
parents:
diff changeset
  6579
            RemoveWaitNote();
hgs
parents:
diff changeset
  6580
        
hgs
parents:
diff changeset
  6581
            delete iScreenClearer;
hgs
parents:
diff changeset
  6582
            iScreenClearer = NULL;
hgs
parents:
diff changeset
  6583
            }    
hgs
parents:
diff changeset
  6584
        }
hgs
parents:
diff changeset
  6585
        
hgs
parents:
diff changeset
  6586
    TRAPD( error, DoEditorOperationEventL( aOperation, aEvent ) );
hgs
parents:
diff changeset
  6587
    if ( error != KErrNone )
hgs
parents:
diff changeset
  6588
        {
hgs
parents:
diff changeset
  6589
        // Handle operation handling error.
hgs
parents:
diff changeset
  6590
        if ( error == KLeaveExit )
hgs
parents:
diff changeset
  6591
            {
hgs
parents:
diff changeset
  6592
            // Leaving with KLeaveExit does not make function leavable. See Exit()
hgs
parents:
diff changeset
  6593
            User::Leave( error );
hgs
parents:
diff changeset
  6594
            }
hgs
parents:
diff changeset
  6595
        else 
hgs
parents:
diff changeset
  6596
            {
hgs
parents:
diff changeset
  6597
            iEikonEnv->HandleError( error );
hgs
parents:
diff changeset
  6598
            
hgs
parents:
diff changeset
  6599
            if ( aOperation == EUniEditorOperationLaunch )
hgs
parents:
diff changeset
  6600
                {
hgs
parents:
diff changeset
  6601
                Exit( EAknSoftkeyClose );
hgs
parents:
diff changeset
  6602
                }
hgs
parents:
diff changeset
  6603
            }
hgs
parents:
diff changeset
  6604
        }
hgs
parents:
diff changeset
  6605
    }
hgs
parents:
diff changeset
  6606
hgs
parents:
diff changeset
  6607
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6608
// CUniEditorAppUi::DoEditorOperationEventL
hgs
parents:
diff changeset
  6609
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6610
//
hgs
parents:
diff changeset
  6611
void CUniEditorAppUi::DoEditorOperationEventL( TUniEditorOperationType aOperation,
hgs
parents:
diff changeset
  6612
                                               TUniEditorOperationEvent aEvent )
hgs
parents:
diff changeset
  6613
    {
hgs
parents:
diff changeset
  6614
    switch ( aOperation )
hgs
parents:
diff changeset
  6615
        {
hgs
parents:
diff changeset
  6616
        case EUniEditorOperationChangeSlide:
hgs
parents:
diff changeset
  6617
            {
hgs
parents:
diff changeset
  6618
            DoChangeSlideCompleteL();
hgs
parents:
diff changeset
  6619
            break;
hgs
parents:
diff changeset
  6620
            }
hgs
parents:
diff changeset
  6621
        case EUniEditorOperationInsert:
hgs
parents:
diff changeset
  6622
            {
hgs
parents:
diff changeset
  6623
            if ( aEvent == EUniEditorOperationProcessing )
hgs
parents:
diff changeset
  6624
                {
hgs
parents:
diff changeset
  6625
                if ( iEditorFlags & EInsertAddsSlide )
hgs
parents:
diff changeset
  6626
                    {
hgs
parents:
diff changeset
  6627
                    iScreenClearer = CAknLocalScreenClearer::NewLC( EFalse );
hgs
parents:
diff changeset
  6628
                    CleanupStack::Pop();
hgs
parents:
diff changeset
  6629
                    }
hgs
parents:
diff changeset
  6630
                }
hgs
parents:
diff changeset
  6631
            else
hgs
parents:
diff changeset
  6632
                {
hgs
parents:
diff changeset
  6633
                DoInsertCompleteL( aEvent );
hgs
parents:
diff changeset
  6634
                }
hgs
parents:
diff changeset
  6635
            break;
hgs
parents:
diff changeset
  6636
            }
hgs
parents:
diff changeset
  6637
        case EUniEditorOperationLaunch:
hgs
parents:
diff changeset
  6638
            {
hgs
parents:
diff changeset
  6639
            if ( aEvent == EUniEditorOperationComplete )
hgs
parents:
diff changeset
  6640
                {
hgs
parents:
diff changeset
  6641
                DoLaunchCompleteL();
hgs
parents:
diff changeset
  6642
                }
hgs
parents:
diff changeset
  6643
            else
hgs
parents:
diff changeset
  6644
                {
hgs
parents:
diff changeset
  6645
                DoDelayedExit( 0 );
hgs
parents:
diff changeset
  6646
                iEditorFlags |= EEditorClosing;
hgs
parents:
diff changeset
  6647
                }
hgs
parents:
diff changeset
  6648
            break;
hgs
parents:
diff changeset
  6649
            }
hgs
parents:
diff changeset
  6650
        case EUniEditorOperationSave:
hgs
parents:
diff changeset
  6651
            {
hgs
parents:
diff changeset
  6652
            DoSaveCompleteL();
hgs
parents:
diff changeset
  6653
            break;
hgs
parents:
diff changeset
  6654
            }
hgs
parents:
diff changeset
  6655
        case EUniEditorOperationSend:
hgs
parents:
diff changeset
  6656
            {
hgs
parents:
diff changeset
  6657
            DoSendCompleteL();
hgs
parents:
diff changeset
  6658
            break;
hgs
parents:
diff changeset
  6659
            }
hgs
parents:
diff changeset
  6660
        case EUniEditorOperationVCard:
hgs
parents:
diff changeset
  6661
            {
hgs
parents:
diff changeset
  6662
            DoVCardCompleteL();
hgs
parents:
diff changeset
  6663
            break;
hgs
parents:
diff changeset
  6664
            }
hgs
parents:
diff changeset
  6665
        case EUniEditorOperationPreview:
hgs
parents:
diff changeset
  6666
            {
hgs
parents:
diff changeset
  6667
            // Expecting 'processing' but in case of error, other states are aacceptable, too.
hgs
parents:
diff changeset
  6668
            RemoveWaitNote();
hgs
parents:
diff changeset
  6669
            break;
hgs
parents:
diff changeset
  6670
            }
hgs
parents:
diff changeset
  6671
        default:
hgs
parents:
diff changeset
  6672
            {
hgs
parents:
diff changeset
  6673
            // nothing to do
hgs
parents:
diff changeset
  6674
            break;
hgs
parents:
diff changeset
  6675
            }
hgs
parents:
diff changeset
  6676
        }
hgs
parents:
diff changeset
  6677
    }
hgs
parents:
diff changeset
  6678
    
hgs
parents:
diff changeset
  6679
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6680
// CUniEditorAppUi::EditorOperationQuery
hgs
parents:
diff changeset
  6681
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6682
//
hgs
parents:
diff changeset
  6683
TBool CUniEditorAppUi::EditorOperationQuery( TUniEditorOperationType aOperation,
hgs
parents:
diff changeset
  6684
                                             TUniEditorOperationQuery aQuery )
hgs
parents:
diff changeset
  6685
    {
hgs
parents:
diff changeset
  6686
    TBool ret( EFalse );
hgs
parents:
diff changeset
  6687
    TRAP_IGNORE( ret = DoEditorOperationQueryL( aOperation, aQuery ) );
hgs
parents:
diff changeset
  6688
    return ret;
hgs
parents:
diff changeset
  6689
    }
hgs
parents:
diff changeset
  6690
hgs
parents:
diff changeset
  6691
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6692
// CUniEditorAppUi::DoEditorOperationQueryL
hgs
parents:
diff changeset
  6693
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6694
//
hgs
parents:
diff changeset
  6695
TBool CUniEditorAppUi::DoEditorOperationQueryL( TUniEditorOperationType /*aOperation*/,
hgs
parents:
diff changeset
  6696
                                                TUniEditorOperationQuery aQuery )
hgs
parents:
diff changeset
  6697
    {
hgs
parents:
diff changeset
  6698
    switch ( aQuery )
hgs
parents:
diff changeset
  6699
        {
hgs
parents:
diff changeset
  6700
        case EMEOQueryGuidedInsertLarge:
hgs
parents:
diff changeset
  6701
            {
hgs
parents:
diff changeset
  6702
            return ShowGuidedModeConfirmationQueryL( R_UNIEDITOR_QUEST_INSERT_LARGE );
hgs
parents:
diff changeset
  6703
            }
hgs
parents:
diff changeset
  6704
        case EMEOQueryGuidedObject:
hgs
parents:
diff changeset
  6705
            {
hgs
parents:
diff changeset
  6706
            return ShowGuidedModeConfirmationQueryL( R_UNIEDITOR_QUEST_GUIDED_OBJ );
hgs
parents:
diff changeset
  6707
            }
hgs
parents:
diff changeset
  6708
        default:
hgs
parents:
diff changeset
  6709
            {
hgs
parents:
diff changeset
  6710
            break;
hgs
parents:
diff changeset
  6711
            }
hgs
parents:
diff changeset
  6712
        }
hgs
parents:
diff changeset
  6713
    return ETrue;
hgs
parents:
diff changeset
  6714
    }
hgs
parents:
diff changeset
  6715
hgs
parents:
diff changeset
  6716
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6717
// CUniEditorAppUi::DoChangeSlideCompleteL
hgs
parents:
diff changeset
  6718
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6719
//
hgs
parents:
diff changeset
  6720
void CUniEditorAppUi::DoChangeSlideCompleteL()
hgs
parents:
diff changeset
  6721
    {
hgs
parents:
diff changeset
  6722
    EndActiveWait();
hgs
parents:
diff changeset
  6723
    RemoveWaitNote();
hgs
parents:
diff changeset
  6724
    
hgs
parents:
diff changeset
  6725
    if ( iChangeSlideOperation->GetErrors()->Count() )
hgs
parents:
diff changeset
  6726
        {
hgs
parents:
diff changeset
  6727
        delete iScreenClearer;
hgs
parents:
diff changeset
  6728
        iScreenClearer = NULL;
hgs
parents:
diff changeset
  6729
        
hgs
parents:
diff changeset
  6730
        ExitAndSaveL();
hgs
parents:
diff changeset
  6731
        }
hgs
parents:
diff changeset
  6732
    else
hgs
parents:
diff changeset
  6733
        {
hgs
parents:
diff changeset
  6734
        DoSetFocusL();
hgs
parents:
diff changeset
  6735
        
hgs
parents:
diff changeset
  6736
        delete iScreenClearer;
hgs
parents:
diff changeset
  6737
        iScreenClearer = NULL;
hgs
parents:
diff changeset
  6738
        
hgs
parents:
diff changeset
  6739
        CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
  6740
        SetTitleL();
hgs
parents:
diff changeset
  6741
        InitNaviPaneL();
hgs
parents:
diff changeset
  6742
        }
hgs
parents:
diff changeset
  6743
    }
hgs
parents:
diff changeset
  6744
hgs
parents:
diff changeset
  6745
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6746
// CUniEditorAppUi::DoLaunchCompleteL
hgs
parents:
diff changeset
  6747
//
hgs
parents:
diff changeset
  6748
// First removes wait note from the screen. After this launch 
hgs
parents:
diff changeset
  6749
// relating note processing is done and if lanch should be aborted
hgs
parents:
diff changeset
  6750
// immediatelly performs delayed exit (i.e. starts idle timer
hgs
parents:
diff changeset
  6751
// to call Exit() function on it's callback). Rest of the launching
hgs
parents:
diff changeset
  6752
// related processing is done at the FinalizeLaunch function.
hgs
parents:
diff changeset
  6753
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6754
//
hgs
parents:
diff changeset
  6755
void CUniEditorAppUi::DoLaunchCompleteL()
hgs
parents:
diff changeset
  6756
    {
hgs
parents:
diff changeset
  6757
    // Does no harm to call this even if no wait note is set.
hgs
parents:
diff changeset
  6758
    RemoveWaitNote();        
hgs
parents:
diff changeset
  6759
hgs
parents:
diff changeset
  6760
    TBool shutDown( EFalse );
hgs
parents:
diff changeset
  6761
    ShowLaunchNotesL( shutDown );
hgs
parents:
diff changeset
  6762
    
hgs
parents:
diff changeset
  6763
    if ( shutDown )
hgs
parents:
diff changeset
  6764
        {
hgs
parents:
diff changeset
  6765
        // Avoid direct Exit(). It causes actually leaving with -1003. 
hgs
parents:
diff changeset
  6766
        // If non-conformant object is sent from sendui and user is not
hgs
parents:
diff changeset
  6767
        // willing to allow free moded Exit() was called previously and
hgs
parents:
diff changeset
  6768
        // caused CMmsEditorLaunchOperation to leave, because this function
hgs
parents:
diff changeset
  6769
        // is called inside RunL()
hgs
parents:
diff changeset
  6770
        // give time to show notes
hgs
parents:
diff changeset
  6771
        DoDelayedExit( KDelayedExitShort );
hgs
parents:
diff changeset
  6772
        iEditorFlags |= EEditorClosing;
hgs
parents:
diff changeset
  6773
        }
hgs
parents:
diff changeset
  6774
    else
hgs
parents:
diff changeset
  6775
        {
hgs
parents:
diff changeset
  6776
        FinalizeLaunchL();
hgs
parents:
diff changeset
  6777
     // check is Unieditor is launched from conversation by Addachemnt option 
hgs
parents:
diff changeset
  6778
        if( Document()->IsLaunchFromCvAttachment())
hgs
parents:
diff changeset
  6779
            {
hgs
parents:
diff changeset
  6780
            iFixedToolbar->ToolbarExtension()->SetShown(ETrue);
hgs
parents:
diff changeset
  6781
            }
hgs
parents:
diff changeset
  6782
        }
hgs
parents:
diff changeset
  6783
    }
hgs
parents:
diff changeset
  6784
hgs
parents:
diff changeset
  6785
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6786
// CUniEditorAppUi::DoDelayedExit
hgs
parents:
diff changeset
  6787
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6788
//
hgs
parents:
diff changeset
  6789
void CUniEditorAppUi::DoDelayedExit( TInt aDelayTime )
hgs
parents:
diff changeset
  6790
    {
hgs
parents:
diff changeset
  6791
    iIdle->Cancel();
hgs
parents:
diff changeset
  6792
    iIdle->Start( aDelayTime,
hgs
parents:
diff changeset
  6793
                  aDelayTime, 
hgs
parents:
diff changeset
  6794
                  TCallBack( DelayedExitL, this ));
hgs
parents:
diff changeset
  6795
    }
hgs
parents:
diff changeset
  6796
hgs
parents:
diff changeset
  6797
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6798
// CUniEditorAppUi::DelayedExit
hgs
parents:
diff changeset
  6799
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6800
//
hgs
parents:
diff changeset
  6801
TInt CUniEditorAppUi::DelayedExitL( TAny* aThis )
hgs
parents:
diff changeset
  6802
    {
hgs
parents:
diff changeset
  6803
    UNILOGGER_WRITE( "-> CUniEditorAppUi::DelayedExitL" );
hgs
parents:
diff changeset
  6804
    
hgs
parents:
diff changeset
  6805
    CUniEditorAppUi* editor = static_cast<CUniEditorAppUi*>( aThis );
hgs
parents:
diff changeset
  6806
    editor->ExitAndSaveL();
hgs
parents:
diff changeset
  6807
    
hgs
parents:
diff changeset
  6808
    UNILOGGER_WRITE( "<- CUniEditorAppUi::DelayedExitL" );
hgs
parents:
diff changeset
  6809
    
hgs
parents:
diff changeset
  6810
    return KErrNone;
hgs
parents:
diff changeset
  6811
    }
hgs
parents:
diff changeset
  6812
hgs
parents:
diff changeset
  6813
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6814
// CUniEditorAppUi::DoSaveCompleteL
hgs
parents:
diff changeset
  6815
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6816
//
hgs
parents:
diff changeset
  6817
void CUniEditorAppUi::DoSaveCompleteL()
hgs
parents:
diff changeset
  6818
    {
hgs
parents:
diff changeset
  6819
    UNILOGGER_WRITE( "-> CUniEditorAppUi::DoSaveCompleteL" );
hgs
parents:
diff changeset
  6820
hgs
parents:
diff changeset
  6821
    if ( iWaitDialog )
hgs
parents:
diff changeset
  6822
        {
hgs
parents:
diff changeset
  6823
        // Processing continued at DialogDismissedL when wait note
hgs
parents:
diff changeset
  6824
        // has dismissed itself.
hgs
parents:
diff changeset
  6825
        iWaitDialog->ProcessFinishedL();
hgs
parents:
diff changeset
  6826
        }    
hgs
parents:
diff changeset
  6827
    else
hgs
parents:
diff changeset
  6828
        {
hgs
parents:
diff changeset
  6829
        DoSavingComplete2ndPhase();
hgs
parents:
diff changeset
  6830
        }
hgs
parents:
diff changeset
  6831
    
hgs
parents:
diff changeset
  6832
    UNILOGGER_WRITE( "<- CUniEditorAppUi::DoSaveCompleteL" );
hgs
parents:
diff changeset
  6833
    }
hgs
parents:
diff changeset
  6834
    
hgs
parents:
diff changeset
  6835
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6836
// CUniEditorAppUi::DoSavingComplete2ndPhase
hgs
parents:
diff changeset
  6837
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6838
//
hgs
parents:
diff changeset
  6839
void CUniEditorAppUi::DoSavingComplete2ndPhase()
hgs
parents:
diff changeset
  6840
    {
hgs
parents:
diff changeset
  6841
    //TODO: Update prev save type!
hgs
parents:
diff changeset
  6842
    CMDXMLDocument* dom = iSaveOperation->DetachDom();
hgs
parents:
diff changeset
  6843
    if ( dom )
hgs
parents:
diff changeset
  6844
        {
hgs
parents:
diff changeset
  6845
        Document()->DataModel()->SetDom( dom );
hgs
parents:
diff changeset
  6846
        }
hgs
parents:
diff changeset
  6847
hgs
parents:
diff changeset
  6848
    EndActiveWait();
hgs
parents:
diff changeset
  6849
    
hgs
parents:
diff changeset
  6850
    if ( iEditorFlags & EEditorClosing )
hgs
parents:
diff changeset
  6851
        {
hgs
parents:
diff changeset
  6852
        if ( Document()->UniState() == EUniMms )
hgs
parents:
diff changeset
  6853
            {              
hgs
parents:
diff changeset
  6854
            CUniEditorPlugin* mmsPlugin = Document()->MmsPlugin();  
hgs
parents:
diff changeset
  6855
            TRAP_IGNORE(mmsPlugin->ConvertToL( Document()->Mtm().Entry().EntryId()));
hgs
parents:
diff changeset
  6856
            }
hgs
parents:
diff changeset
  6857
        else if ( Document()->UniState() == EUniSms )
hgs
parents:
diff changeset
  6858
            {
hgs
parents:
diff changeset
  6859
            CUniEditorPlugin* smsPlugin = Document()->SmsPlugin();  
hgs
parents:
diff changeset
  6860
            TRAP_IGNORE(smsPlugin->ConvertToL( Document()->Mtm().Entry().EntryId()));            
hgs
parents:
diff changeset
  6861
            }
hgs
parents:
diff changeset
  6862
            
hgs
parents:
diff changeset
  6863
        DoDelayedExit( 0 );
hgs
parents:
diff changeset
  6864
        }
hgs
parents:
diff changeset
  6865
    }
hgs
parents:
diff changeset
  6866
hgs
parents:
diff changeset
  6867
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6868
// CUniEditorAppUi::DoSendCompleteL
hgs
parents:
diff changeset
  6869
//
hgs
parents:
diff changeset
  6870
// Sending operation completed. If wait note is still available
hgs
parents:
diff changeset
  6871
// (i.e. it is not cancelled from the screen by some external event)
hgs
parents:
diff changeset
  6872
// we call ProcessFinishedL so that prosessing is finished. Otherwise 
hgs
parents:
diff changeset
  6873
// we have to complete the operation by ourself.
hgs
parents:
diff changeset
  6874
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6875
//
hgs
parents:
diff changeset
  6876
void CUniEditorAppUi::DoSendCompleteL()
hgs
parents:
diff changeset
  6877
    {
hgs
parents:
diff changeset
  6878
    UNILOGGER_WRITE( "-> CUniEditorAppUi::DoSendCompleteL" );
hgs
parents:
diff changeset
  6879
hgs
parents:
diff changeset
  6880
    if ( iWaitDialog )
hgs
parents:
diff changeset
  6881
        {
hgs
parents:
diff changeset
  6882
        // Processing continued at DialogDismissedL when wait note
hgs
parents:
diff changeset
  6883
        // has dismissed itself.
hgs
parents:
diff changeset
  6884
        iWaitDialog->ProcessFinishedL();
hgs
parents:
diff changeset
  6885
        }    
hgs
parents:
diff changeset
  6886
    else
hgs
parents:
diff changeset
  6887
        {
hgs
parents:
diff changeset
  6888
        DoSendComplete2ndPhase();
hgs
parents:
diff changeset
  6889
        }
hgs
parents:
diff changeset
  6890
    
hgs
parents:
diff changeset
  6891
    UNILOGGER_WRITE( "<- CUniEditorAppUi::DoSendCompleteL" );
hgs
parents:
diff changeset
  6892
    }
hgs
parents:
diff changeset
  6893
hgs
parents:
diff changeset
  6894
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6895
// CUniEditorAppUi::DoSendComplete2ndPhase
hgs
parents:
diff changeset
  6896
//
hgs
parents:
diff changeset
  6897
// Performs the real send operation completing code.
hgs
parents:
diff changeset
  6898
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6899
//
hgs
parents:
diff changeset
  6900
void CUniEditorAppUi::DoSendComplete2ndPhase()
hgs
parents:
diff changeset
  6901
    {
hgs
parents:
diff changeset
  6902
    UNILOGGER_WRITE( "-> CUniEditorAppUi::DoSendComplete2ndPhase" );
hgs
parents:
diff changeset
  6903
hgs
parents:
diff changeset
  6904
    // Get errors from send operation
hgs
parents:
diff changeset
  6905
    CArrayFixFlat<TInt>* errors = iSendOperation->GetErrors();
hgs
parents:
diff changeset
  6906
    
hgs
parents:
diff changeset
  6907
    if ( errors->Count() > 0 )
hgs
parents:
diff changeset
  6908
        {
hgs
parents:
diff changeset
  6909
        iEikonEnv->HandleError( errors->At( 0 ) );
hgs
parents:
diff changeset
  6910
        iEditorFlags &= ~EEditorClosing;
hgs
parents:
diff changeset
  6911
        return;
hgs
parents:
diff changeset
  6912
        }
hgs
parents:
diff changeset
  6913
        
hgs
parents:
diff changeset
  6914
    DoDelayedExit( 0 );
hgs
parents:
diff changeset
  6915
    
hgs
parents:
diff changeset
  6916
    UNILOGGER_WRITE( "<- CUniEditorAppUi::DoSendComplete2ndPhase" );
hgs
parents:
diff changeset
  6917
    }
hgs
parents:
diff changeset
  6918
hgs
parents:
diff changeset
  6919
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6920
// CUniEditorAppUi::DoVCardCompleteL
hgs
parents:
diff changeset
  6921
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6922
//
hgs
parents:
diff changeset
  6923
void CUniEditorAppUi::DoVCardCompleteL()
hgs
parents:
diff changeset
  6924
    {
hgs
parents:
diff changeset
  6925
    if ( iFixedToolbar )
hgs
parents:
diff changeset
  6926
        {
hgs
parents:
diff changeset
  6927
          iFixedToolbar->HideItem( EUniCmdFixedToolbarSend, EFalse, ETrue );
hgs
parents:
diff changeset
  6928
          iFixedToolbar->HideItem( EUniCmdFixedToolbarAddRecipient, EFalse, ETrue );        
hgs
parents:
diff changeset
  6929
          iFixedToolbar->HideItem( EUniCmdFixedToolbarInsert, EFalse, ETrue );    
hgs
parents:
diff changeset
  6930
        }
hgs
parents:
diff changeset
  6931
    
hgs
parents:
diff changeset
  6932
    iEditorFlags &= ~EToolbarHidden;
hgs
parents:
diff changeset
  6933
    
hgs
parents:
diff changeset
  6934
    TInt addedVCardCount = iVCardOperation->AddedVCardCount();
hgs
parents:
diff changeset
  6935
    TBool oldState = Document()->UniState();
hgs
parents:
diff changeset
  6936
hgs
parents:
diff changeset
  6937
    // Update navipane and type of message        
hgs
parents:
diff changeset
  6938
    CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
  6939
    MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  6940
    if (AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
  6941
        {
hgs
parents:
diff changeset
  6942
           iPeninputServer.UpdateAppInfo( KNullDesC, EAppIndicatorMsg );    
hgs
parents:
diff changeset
  6943
        }
hgs
parents:
diff changeset
  6944
    
hgs
parents:
diff changeset
  6945
    if ( addedVCardCount > 0 )
hgs
parents:
diff changeset
  6946
        {
hgs
parents:
diff changeset
  6947
        Document()->SetHeaderModified( ETrue );
hgs
parents:
diff changeset
  6948
        }
hgs
parents:
diff changeset
  6949
    
hgs
parents:
diff changeset
  6950
    if ( !( oldState != Document()->UniState() && iPopupNote ) )
hgs
parents:
diff changeset
  6951
        {
hgs
parents:
diff changeset
  6952
        // Popup note is not shown, so we can show error or attachment(s)
hgs
parents:
diff changeset
  6953
        // added note. When popup note is not shown, it doesn't matter
hgs
parents:
diff changeset
  6954
        // whether message type was changed or not.
hgs
parents:
diff changeset
  6955
        CArrayFixFlat<TInt>* errors = iVCardOperation->GetErrors();
hgs
parents:
diff changeset
  6956
        
hgs
parents:
diff changeset
  6957
        if ( errors->Count() )
hgs
parents:
diff changeset
  6958
            {
hgs
parents:
diff changeset
  6959
            for ( TInt i = 0; i < errors->Count(); i++ )
hgs
parents:
diff changeset
  6960
                {
hgs
parents:
diff changeset
  6961
                if ( errors->At( i ) == EUniInsertTooBig )
hgs
parents:
diff changeset
  6962
                    {
hgs
parents:
diff changeset
  6963
                    // Tell user that one or more vCards could not be inserted.
hgs
parents:
diff changeset
  6964
                    addedVCardCount > 0 ?
hgs
parents:
diff changeset
  6965
                        ShowInformationNoteL( R_UNIEDITOR_INFO_OBJECT_SEND_AS_TOO_BIG, EFalse ) :
hgs
parents:
diff changeset
  6966
                        ShowInformationNoteL( R_UNIEDITOR_INFO_OBJECT_TOO_BIG, EFalse );
hgs
parents:
diff changeset
  6967
                    break;
hgs
parents:
diff changeset
  6968
                    }
hgs
parents:
diff changeset
  6969
                }
hgs
parents:
diff changeset
  6970
            }
hgs
parents:
diff changeset
  6971
        else if ( addedVCardCount > 0 )
hgs
parents:
diff changeset
  6972
            {
hgs
parents:
diff changeset
  6973
            // Show attachment(s) added note if no errors.
hgs
parents:
diff changeset
  6974
            addedVCardCount == 1 ? 
hgs
parents:
diff changeset
  6975
                ShowInformationNoteL( R_UNIEDITOR_QTN_UNIFIED_ATTACHMENT_ADDED, EFalse ) :
hgs
parents:
diff changeset
  6976
                ShowInformationNoteL( R_UNIEDITOR_QTN_UNIFIED_ATTACHMENTS_ADDED, EFalse );
hgs
parents:
diff changeset
  6977
            }
hgs
parents:
diff changeset
  6978
        }
hgs
parents:
diff changeset
  6979
    }
hgs
parents:
diff changeset
  6980
hgs
parents:
diff changeset
  6981
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6982
// CUniEditorAppUi::BeginActiveWait
hgs
parents:
diff changeset
  6983
// ---------------------------------------------------------
hgs
parents:
diff changeset
  6984
//
hgs
parents:
diff changeset
  6985
void CUniEditorAppUi::BeginActiveWait( CUniEditorOperation* aOperation )
hgs
parents:
diff changeset
  6986
    {
hgs
parents:
diff changeset
  6987
    if( iWait.IsStarted() )
hgs
parents:
diff changeset
  6988
        {
hgs
parents:
diff changeset
  6989
        // If there is data in recipient and body text fields,
hgs
parents:
diff changeset
  6990
        // presentation is created and read key is pressed in smil editor,
hgs
parents:
diff changeset
  6991
        // smil editor dialog is dismissed and change slide operation starts
hgs
parents:
diff changeset
  6992
        // in NewTemplateL() ( any kind error code is not supplied).
hgs
parents:
diff changeset
  6993
        // After that Exit comes to editor HandleCommandL, which would cause start of
hgs
parents:
diff changeset
  6994
        // save operation. Change slide operation must be terminated first.
hgs
parents:
diff changeset
  6995
        if ( iActiveOperation )
hgs
parents:
diff changeset
  6996
            {
hgs
parents:
diff changeset
  6997
            iActiveOperation->Cancel();
hgs
parents:
diff changeset
  6998
            }
hgs
parents:
diff changeset
  6999
        return;
hgs
parents:
diff changeset
  7000
        }
hgs
parents:
diff changeset
  7001
        
hgs
parents:
diff changeset
  7002
    iActiveOperation = aOperation;
hgs
parents:
diff changeset
  7003
    iWait.Start();
hgs
parents:
diff changeset
  7004
    }
hgs
parents:
diff changeset
  7005
hgs
parents:
diff changeset
  7006
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7007
// CUniEditorAppUi::EndActiveWait
hgs
parents:
diff changeset
  7008
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7009
//
hgs
parents:
diff changeset
  7010
void CUniEditorAppUi::EndActiveWait()
hgs
parents:
diff changeset
  7011
    {
hgs
parents:
diff changeset
  7012
    if( !iWait.IsStarted() )
hgs
parents:
diff changeset
  7013
        {
hgs
parents:
diff changeset
  7014
        return;
hgs
parents:
diff changeset
  7015
        }
hgs
parents:
diff changeset
  7016
        
hgs
parents:
diff changeset
  7017
    iWait.AsyncStop();
hgs
parents:
diff changeset
  7018
    iActiveOperation = NULL;
hgs
parents:
diff changeset
  7019
    }
hgs
parents:
diff changeset
  7020
hgs
parents:
diff changeset
  7021
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7022
// CUniEditorAppUi::ObjectsAvailable
hgs
parents:
diff changeset
  7023
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7024
//
hgs
parents:
diff changeset
  7025
TUint32 CUniEditorAppUi::ObjectsAvailable()
hgs
parents:
diff changeset
  7026
    {
hgs
parents:
diff changeset
  7027
    TUint32 objects = EUniNoneFlag;
hgs
parents:
diff changeset
  7028
    if ( BodyCtrl() && BodyCtrl()->TextContent().DocumentLength() )
hgs
parents:
diff changeset
  7029
        {
hgs
parents:
diff changeset
  7030
        // This flag is not currently used for anything.
hgs
parents:
diff changeset
  7031
        objects |= EUniTextFlag;
hgs
parents:
diff changeset
  7032
        }
hgs
parents:
diff changeset
  7033
    if ( iView->ControlById( EMsgComponentIdAudio ) )
hgs
parents:
diff changeset
  7034
        {
hgs
parents:
diff changeset
  7035
        objects |= EUniAudioFlag;
hgs
parents:
diff changeset
  7036
        }
hgs
parents:
diff changeset
  7037
    if ( iView->ControlById( EMsgComponentIdImage ) )
hgs
parents:
diff changeset
  7038
        {
hgs
parents:
diff changeset
  7039
        objects |= EUniImageFlag;
hgs
parents:
diff changeset
  7040
        }
hgs
parents:
diff changeset
  7041
    if ( iView->ControlById( EMsgComponentIdVideo ) )
hgs
parents:
diff changeset
  7042
        {
hgs
parents:
diff changeset
  7043
        objects |= EUniVideoFlag;
hgs
parents:
diff changeset
  7044
        }
hgs
parents:
diff changeset
  7045
    if ( iView->ControlById( EMsgComponentIdSvg ) )
hgs
parents:
diff changeset
  7046
        {
hgs
parents:
diff changeset
  7047
        objects |= EUniSvgFlag;
hgs
parents:
diff changeset
  7048
        }
hgs
parents:
diff changeset
  7049
    return objects;
hgs
parents:
diff changeset
  7050
    }
hgs
parents:
diff changeset
  7051
hgs
parents:
diff changeset
  7052
hgs
parents:
diff changeset
  7053
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7054
// CUniEditorAppUi::DoUserAddHeadersL
hgs
parents:
diff changeset
  7055
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7056
//
hgs
parents:
diff changeset
  7057
void CUniEditorAppUi::DoUserAddHeadersL()
hgs
parents:
diff changeset
  7058
    {
hgs
parents:
diff changeset
  7059
    if ( !iHeader )
hgs
parents:
diff changeset
  7060
        {
hgs
parents:
diff changeset
  7061
        return;
hgs
parents:
diff changeset
  7062
        }
hgs
parents:
diff changeset
  7063
    
hgs
parents:
diff changeset
  7064
    TInt headersVariation = iHeader->AddHeadersVariation();
hgs
parents:
diff changeset
  7065
    TInt headersConfig = 0;
hgs
parents:
diff changeset
  7066
    
hgs
parents:
diff changeset
  7067
    // Check which fields are visible:
hgs
parents:
diff changeset
  7068
    
hgs
parents:
diff changeset
  7069
    // TInt headersConfig = iHeader->AddHeadersConfigL();
hgs
parents:
diff changeset
  7070
    if ( iHeader->SubjectControl() )
hgs
parents:
diff changeset
  7071
        {
hgs
parents:
diff changeset
  7072
        headersConfig |= EUniFeatureSubject;
hgs
parents:
diff changeset
  7073
        }
hgs
parents:
diff changeset
  7074
    if ( iHeader->AddressControl( CUniBaseHeader::EHeaderAddressCc ) )
hgs
parents:
diff changeset
  7075
        {
hgs
parents:
diff changeset
  7076
        headersConfig |= EUniFeatureCc;
hgs
parents:
diff changeset
  7077
        }
hgs
parents:
diff changeset
  7078
    if ( iHeader->AddressControl( CUniBaseHeader::EHeaderAddressBcc ) )
hgs
parents:
diff changeset
  7079
        {
hgs
parents:
diff changeset
  7080
        headersConfig |= EUniFeatureBcc;
hgs
parents:
diff changeset
  7081
        }
hgs
parents:
diff changeset
  7082
hgs
parents:
diff changeset
  7083
    if ( IsHardcodedSms() && Document()->EmailOverSmsSupported() )
hgs
parents:
diff changeset
  7084
        { 
hgs
parents:
diff changeset
  7085
        // Locked SMS and EmailOverSms -> enable only subject field
hgs
parents:
diff changeset
  7086
        if ( headersVariation & EUniFeatureSubjectConfigurable )
hgs
parents:
diff changeset
  7087
            {
hgs
parents:
diff changeset
  7088
            headersVariation = EUniFeatureSubject;
hgs
parents:
diff changeset
  7089
            headersVariation |= EUniFeatureSubjectConfigurable;
hgs
parents:
diff changeset
  7090
            }
hgs
parents:
diff changeset
  7091
        else
hgs
parents:
diff changeset
  7092
            {
hgs
parents:
diff changeset
  7093
            // Should not happen as add headers command should be invisible at this case.
hgs
parents:
diff changeset
  7094
            headersVariation = EUniFeatureSubject;
hgs
parents:
diff changeset
  7095
            }
hgs
parents:
diff changeset
  7096
        }
hgs
parents:
diff changeset
  7097
hgs
parents:
diff changeset
  7098
    // Contains indexes of additional header flags in
hgs
parents:
diff changeset
  7099
    // headersIn array; KErrNotFound if not visible in the UI
hgs
parents:
diff changeset
  7100
    // index: 0 = CC, 1 = BCC, 3 = subject
hgs
parents:
diff changeset
  7101
    CArrayFixFlat<TInt>* indexes = new( ELeave ) CArrayFixFlat<TInt>( 3 );
hgs
parents:
diff changeset
  7102
    CleanupStack::PushL( indexes );
hgs
parents:
diff changeset
  7103
    
hgs
parents:
diff changeset
  7104
    CListBoxView::CSelectionIndexArray* headersOut = 
hgs
parents:
diff changeset
  7105
                                    new( ELeave ) CArrayFixFlat<TInt>( 3 );
hgs
parents:
diff changeset
  7106
    CleanupStack::PushL( headersOut );
hgs
parents:
diff changeset
  7107
hgs
parents:
diff changeset
  7108
    CListBoxView::CSelectionIndexArray* headersIn = 
hgs
parents:
diff changeset
  7109
                                    new( ELeave ) CArrayFixFlat<TInt>( 3 );
hgs
parents:
diff changeset
  7110
    CleanupStack::PushL( headersIn );
hgs
parents:
diff changeset
  7111
    
hgs
parents:
diff changeset
  7112
    CUniEditorAddHeaderDialog* dlg = new( ELeave ) CUniEditorAddHeaderDialog( headersOut );
hgs
parents:
diff changeset
  7113
    
hgs
parents:
diff changeset
  7114
    // Pushes the dialog into stack
hgs
parents:
diff changeset
  7115
    dlg->PrepareLC( R_UNIEDITOR_ADD_HEADERS_LIST_QUERY );
hgs
parents:
diff changeset
  7116
hgs
parents:
diff changeset
  7117
    // Order matters. See Pop below
hgs
parents:
diff changeset
  7118
    CDesCArrayFlat* headerStringsIn = new( ELeave ) CDesCArrayFlat( 3 );
hgs
parents:
diff changeset
  7119
    CleanupStack::PushL( headerStringsIn );
hgs
parents:
diff changeset
  7120
    
hgs
parents:
diff changeset
  7121
    TInt index( 0 );
hgs
parents:
diff changeset
  7122
    for ( TInt i = 0; i < 3; i++ )
hgs
parents:
diff changeset
  7123
        {
hgs
parents:
diff changeset
  7124
        TInt flag( EUniFeatureCc );
hgs
parents:
diff changeset
  7125
        TInt resource( R_UNIEDITOR_QTN_MSG_HEADERS_CC );
hgs
parents:
diff changeset
  7126
        
hgs
parents:
diff changeset
  7127
        if ( i == 1 )
hgs
parents:
diff changeset
  7128
            {
hgs
parents:
diff changeset
  7129
            flag = EUniFeatureBcc;
hgs
parents:
diff changeset
  7130
            resource = R_UNIEDITOR_QTN_MSG_HEADERS_BCC;
hgs
parents:
diff changeset
  7131
            }
hgs
parents:
diff changeset
  7132
        else if ( i == 2 )
hgs
parents:
diff changeset
  7133
            {
hgs
parents:
diff changeset
  7134
            flag = EUniFeatureSubjectConfigurable;
hgs
parents:
diff changeset
  7135
            resource = R_UNIEDITOR_QTN_MSG_HEADERS_SUBJECT;
hgs
parents:
diff changeset
  7136
            }
hgs
parents:
diff changeset
  7137
        
hgs
parents:
diff changeset
  7138
        if ( headersVariation & flag )
hgs
parents:
diff changeset
  7139
            {
hgs
parents:
diff changeset
  7140
            HBufC* fieldTemp = StringLoader::LoadLC( resource, iCoeEnv );
hgs
parents:
diff changeset
  7141
            
hgs
parents:
diff changeset
  7142
            // We need to add the "1\"
hgs
parents:
diff changeset
  7143
            HBufC* fieldBuf = HBufC::NewMaxLC( fieldTemp->Des().Length() + 2 );
hgs
parents:
diff changeset
  7144
hgs
parents:
diff changeset
  7145
            TPtr field = fieldBuf->Des();
hgs
parents:
diff changeset
  7146
            field.Copy( KItemStart );
hgs
parents:
diff changeset
  7147
            field.Append( fieldTemp->Des() );
hgs
parents:
diff changeset
  7148
            
hgs
parents:
diff changeset
  7149
            // FieldBuf will be owned by headersIn 
hgs
parents:
diff changeset
  7150
            headerStringsIn->AppendL( field );
hgs
parents:
diff changeset
  7151
hgs
parents:
diff changeset
  7152
            CleanupStack::PopAndDestroy( 2, fieldTemp );  //  + fieldBuf  
hgs
parents:
diff changeset
  7153
            
hgs
parents:
diff changeset
  7154
            if ( flag == EUniFeatureSubjectConfigurable )
hgs
parents:
diff changeset
  7155
                {
hgs
parents:
diff changeset
  7156
                flag = EUniFeatureSubject;
hgs
parents:
diff changeset
  7157
                }
hgs
parents:
diff changeset
  7158
            
hgs
parents:
diff changeset
  7159
            if ( headersConfig & flag )
hgs
parents:
diff changeset
  7160
                {   
hgs
parents:
diff changeset
  7161
                // Mark it selected
hgs
parents:
diff changeset
  7162
                dlg->ListBox()->View()->SelectItemL( index );
hgs
parents:
diff changeset
  7163
                headersIn->AppendL( ETrue );
hgs
parents:
diff changeset
  7164
                }
hgs
parents:
diff changeset
  7165
            else
hgs
parents:
diff changeset
  7166
                {
hgs
parents:
diff changeset
  7167
                headersIn->AppendL( EFalse );
hgs
parents:
diff changeset
  7168
                }
hgs
parents:
diff changeset
  7169
                
hgs
parents:
diff changeset
  7170
            indexes->AppendL( index );
hgs
parents:
diff changeset
  7171
            index++;
hgs
parents:
diff changeset
  7172
            }
hgs
parents:
diff changeset
  7173
        else
hgs
parents:
diff changeset
  7174
            {
hgs
parents:
diff changeset
  7175
            indexes->AppendL( KErrNotFound );
hgs
parents:
diff changeset
  7176
            }
hgs
parents:
diff changeset
  7177
        }
hgs
parents:
diff changeset
  7178
        
hgs
parents:
diff changeset
  7179
    dlg->SetItemTextArray( headerStringsIn );
hgs
parents:
diff changeset
  7180
    dlg->SetOwnershipType( ELbmOwnsItemArray );
hgs
parents:
diff changeset
  7181
    CleanupStack::Pop( headerStringsIn );
hgs
parents:
diff changeset
  7182
hgs
parents:
diff changeset
  7183
    if ( dlg->RunLD() )
hgs
parents:
diff changeset
  7184
        {
hgs
parents:
diff changeset
  7185
        TInt newSelectionHeaders( 0 ); 
hgs
parents:
diff changeset
  7186
        TInt removeHeaders( 0 ); 
hgs
parents:
diff changeset
  7187
        TInt removeHeadersWithWarning( 0 ); 
hgs
parents:
diff changeset
  7188
        TInt addHeaders( 0 ); 
hgs
parents:
diff changeset
  7189
hgs
parents:
diff changeset
  7190
        TInt countItems( headersOut->Count() );
hgs
parents:
diff changeset
  7191
hgs
parents:
diff changeset
  7192
        // Check if the out selection is the same as in selection
hgs
parents:
diff changeset
  7193
        TBool theSame = ETrue;
hgs
parents:
diff changeset
  7194
hgs
parents:
diff changeset
  7195
        index = 0;
hgs
parents:
diff changeset
  7196
        for ( TInt i = 0; i < 3; i++ )
hgs
parents:
diff changeset
  7197
            {
hgs
parents:
diff changeset
  7198
            if ( indexes->At( i ) != KErrNotFound )
hgs
parents:
diff changeset
  7199
                { 
hgs
parents:
diff changeset
  7200
                // i was one of the choices available in the dialog
hgs
parents:
diff changeset
  7201
                if ( headersIn->At( index ) )
hgs
parents:
diff changeset
  7202
                    { 
hgs
parents:
diff changeset
  7203
                    // It was originally selected
hgs
parents:
diff changeset
  7204
                    if ( countItems < 1 )
hgs
parents:
diff changeset
  7205
                        {
hgs
parents:
diff changeset
  7206
                        theSame = EFalse;
hgs
parents:
diff changeset
  7207
                        }
hgs
parents:
diff changeset
  7208
                        
hgs
parents:
diff changeset
  7209
                    TBool foundIt = EFalse;
hgs
parents:
diff changeset
  7210
                    for ( TInt j = 0; j < countItems; j++ )
hgs
parents:
diff changeset
  7211
                        { 
hgs
parents:
diff changeset
  7212
                        // Lets see the current selection
hgs
parents:
diff changeset
  7213
                        if ( headersOut->At( j ) == index )
hgs
parents:
diff changeset
  7214
                            { 
hgs
parents:
diff changeset
  7215
                            // It's selected after the dialog
hgs
parents:
diff changeset
  7216
                            foundIt = ETrue;
hgs
parents:
diff changeset
  7217
                            }
hgs
parents:
diff changeset
  7218
                        }
hgs
parents:
diff changeset
  7219
                        
hgs
parents:
diff changeset
  7220
                    if ( !foundIt )
hgs
parents:
diff changeset
  7221
                        { 
hgs
parents:
diff changeset
  7222
                        // Originally it was selected so it's not the same selection anymore
hgs
parents:
diff changeset
  7223
                        theSame = EFalse;
hgs
parents:
diff changeset
  7224
                        }
hgs
parents:
diff changeset
  7225
                    }
hgs
parents:
diff changeset
  7226
                else
hgs
parents:
diff changeset
  7227
                    { 
hgs
parents:
diff changeset
  7228
                    // It was originally not selected
hgs
parents:
diff changeset
  7229
                    TBool foundIt = EFalse;
hgs
parents:
diff changeset
  7230
                    for ( TInt j = 0; j < countItems; j++ )
hgs
parents:
diff changeset
  7231
                        { 
hgs
parents:
diff changeset
  7232
                        // Lets see the current selection
hgs
parents:
diff changeset
  7233
                        if ( headersOut->At( j ) == index )
hgs
parents:
diff changeset
  7234
                            { 
hgs
parents:
diff changeset
  7235
                            // It's selected after the dialog
hgs
parents:
diff changeset
  7236
                            foundIt = ETrue;
hgs
parents:
diff changeset
  7237
                            }
hgs
parents:
diff changeset
  7238
                        }
hgs
parents:
diff changeset
  7239
                        
hgs
parents:
diff changeset
  7240
                    if ( foundIt )
hgs
parents:
diff changeset
  7241
                        { 
hgs
parents:
diff changeset
  7242
                        // Originally it was not selected so it's not the same selection anymore
hgs
parents:
diff changeset
  7243
                        theSame = EFalse;
hgs
parents:
diff changeset
  7244
                        }
hgs
parents:
diff changeset
  7245
                    }
hgs
parents:
diff changeset
  7246
                index++;                
hgs
parents:
diff changeset
  7247
                }
hgs
parents:
diff changeset
  7248
            }
hgs
parents:
diff changeset
  7249
            
hgs
parents:
diff changeset
  7250
        CleanupStack::PopAndDestroy( headersIn );
hgs
parents:
diff changeset
  7251
hgs
parents:
diff changeset
  7252
        if ( theSame )
hgs
parents:
diff changeset
  7253
            { 
hgs
parents:
diff changeset
  7254
            // no changes were done so don't proceed with this..
hgs
parents:
diff changeset
  7255
            // we return here so that we don't save incorrect configuration
hgs
parents:
diff changeset
  7256
            // it might happen for example if we have opened reply to all and there are 
hgs
parents:
diff changeset
  7257
            // unselected fields used in the replied message
hgs
parents:
diff changeset
  7258
            CleanupStack::PopAndDestroy( 2, indexes ); // + headersOut
hgs
parents:
diff changeset
  7259
            return;
hgs
parents:
diff changeset
  7260
            }
hgs
parents:
diff changeset
  7261
        
hgs
parents:
diff changeset
  7262
        // Indicates selected fields
hgs
parents:
diff changeset
  7263
        CArrayFixFlat<TInt>* indexesOut = new( ELeave ) CArrayFixFlat<TInt>( 3 );
hgs
parents:
diff changeset
  7264
        CleanupStack::PushL( indexesOut );
hgs
parents:
diff changeset
  7265
        
hgs
parents:
diff changeset
  7266
        indexesOut->AppendL( EFalse );
hgs
parents:
diff changeset
  7267
        indexesOut->AppendL( EFalse );
hgs
parents:
diff changeset
  7268
        indexesOut->AppendL( EFalse );
hgs
parents:
diff changeset
  7269
        
hgs
parents:
diff changeset
  7270
        for ( TInt i = 0; i < countItems; i++ )
hgs
parents:
diff changeset
  7271
            {
hgs
parents:
diff changeset
  7272
            TInt selected = headersOut->At(i);
hgs
parents:
diff changeset
  7273
            for ( TInt j = 0; j < 3; j++ )
hgs
parents:
diff changeset
  7274
                {
hgs
parents:
diff changeset
  7275
                if ( indexes->At( j ) == selected )
hgs
parents:
diff changeset
  7276
                    {
hgs
parents:
diff changeset
  7277
                    indexesOut->At( j ) = ETrue;
hgs
parents:
diff changeset
  7278
                    break;
hgs
parents:
diff changeset
  7279
                    }
hgs
parents:
diff changeset
  7280
                }
hgs
parents:
diff changeset
  7281
            }
hgs
parents:
diff changeset
  7282
hgs
parents:
diff changeset
  7283
        AddHeadersCollectStatisticsL( *indexesOut,
hgs
parents:
diff changeset
  7284
                                      headersVariation,
hgs
parents:
diff changeset
  7285
                                      newSelectionHeaders,
hgs
parents:
diff changeset
  7286
                                      removeHeaders,
hgs
parents:
diff changeset
  7287
                                      removeHeadersWithWarning,
hgs
parents:
diff changeset
  7288
                                      addHeaders );
hgs
parents:
diff changeset
  7289
                                      
hgs
parents:
diff changeset
  7290
        CleanupStack::PopAndDestroy( indexesOut );
hgs
parents:
diff changeset
  7291
        
hgs
parents:
diff changeset
  7292
        TInt countRemove = AddHeadersCount( removeHeadersWithWarning );
hgs
parents:
diff changeset
  7293
        
hgs
parents:
diff changeset
  7294
        TInt res ( 0 );
hgs
parents:
diff changeset
  7295
        if ( countRemove > 1 )
hgs
parents:
diff changeset
  7296
            {
hgs
parents:
diff changeset
  7297
            res = R_UNIEDITOR_QTN_MSG_QRY_HEADERS_REMOVE;
hgs
parents:
diff changeset
  7298
            }
hgs
parents:
diff changeset
  7299
        else if ( countRemove == 1 )
hgs
parents:
diff changeset
  7300
            {
hgs
parents:
diff changeset
  7301
            res = R_UNIEDITOR_QTN_MSG_QRY_HEADER_REMOVE;
hgs
parents:
diff changeset
  7302
            }
hgs
parents:
diff changeset
  7303
            
hgs
parents:
diff changeset
  7304
        if ( res )
hgs
parents:
diff changeset
  7305
            {
hgs
parents:
diff changeset
  7306
            // Confirmation specified for header removing
hgs
parents:
diff changeset
  7307
            if ( ShowConfirmationQueryL( res ) )
hgs
parents:
diff changeset
  7308
                {
hgs
parents:
diff changeset
  7309
                // Remove all headers 
hgs
parents:
diff changeset
  7310
                iHeader->AddHeadersDeleteL( removeHeaders, ETrue );
hgs
parents:
diff changeset
  7311
                Document()->SetHeaderModified( ETrue );
hgs
parents:
diff changeset
  7312
                SetAddressSize();
hgs
parents:
diff changeset
  7313
                SetSubjectSize();
hgs
parents:
diff changeset
  7314
                }
hgs
parents:
diff changeset
  7315
            else
hgs
parents:
diff changeset
  7316
                {
hgs
parents:
diff changeset
  7317
                // Remove empty headers
hgs
parents:
diff changeset
  7318
                removeHeaders &= ( ~removeHeadersWithWarning );
hgs
parents:
diff changeset
  7319
                
hgs
parents:
diff changeset
  7320
                if ( removeHeaders )
hgs
parents:
diff changeset
  7321
                    { 
hgs
parents:
diff changeset
  7322
                    // Still something left to delete
hgs
parents:
diff changeset
  7323
                    iHeader->AddHeadersDeleteL( removeHeaders, ETrue );
hgs
parents:
diff changeset
  7324
                    }
hgs
parents:
diff changeset
  7325
                    
hgs
parents:
diff changeset
  7326
                // But keep the ones that have some content
hgs
parents:
diff changeset
  7327
                newSelectionHeaders |= removeHeadersWithWarning;
hgs
parents:
diff changeset
  7328
                }
hgs
parents:
diff changeset
  7329
            }
hgs
parents:
diff changeset
  7330
        else if ( removeHeaders )
hgs
parents:
diff changeset
  7331
            {
hgs
parents:
diff changeset
  7332
            // Remove one or more headers but none of the removed do not contain any data
hgs
parents:
diff changeset
  7333
            iHeader->AddHeadersDeleteL( removeHeaders, EFalse );            
hgs
parents:
diff changeset
  7334
            }
hgs
parents:
diff changeset
  7335
hgs
parents:
diff changeset
  7336
        iHeader->SaveAddHeadersConfigL( newSelectionHeaders );
hgs
parents:
diff changeset
  7337
        
hgs
parents:
diff changeset
  7338
        // Add new headers
hgs
parents:
diff changeset
  7339
        if ( addHeaders )
hgs
parents:
diff changeset
  7340
            {
hgs
parents:
diff changeset
  7341
            iHeader->AddHeadersAddL(addHeaders);
hgs
parents:
diff changeset
  7342
            }    
hgs
parents:
diff changeset
  7343
            
hgs
parents:
diff changeset
  7344
         // Change focus
hgs
parents:
diff changeset
  7345
        if ( addHeaders || removeHeaders )
hgs
parents:
diff changeset
  7346
            {
hgs
parents:
diff changeset
  7347
            iNextFocus = EMsgComponentIdNull;
hgs
parents:
diff changeset
  7348
            
hgs
parents:
diff changeset
  7349
            // Add headers override removing
hgs
parents:
diff changeset
  7350
            if ( addHeaders )
hgs
parents:
diff changeset
  7351
                {
hgs
parents:
diff changeset
  7352
                if ( addHeaders & EUniFeatureCc )
hgs
parents:
diff changeset
  7353
                    {
hgs
parents:
diff changeset
  7354
                    iNextFocus = EMsgComponentIdCc;
hgs
parents:
diff changeset
  7355
                    }
hgs
parents:
diff changeset
  7356
                else if ( addHeaders & EUniFeatureBcc )
hgs
parents:
diff changeset
  7357
                    {
hgs
parents:
diff changeset
  7358
                    iNextFocus = EMsgComponentIdBcc;
hgs
parents:
diff changeset
  7359
                    }
hgs
parents:
diff changeset
  7360
                else if ( addHeaders & EUniFeatureSubject )
hgs
parents:
diff changeset
  7361
                    {
hgs
parents:
diff changeset
  7362
                    iNextFocus = EMsgComponentIdSubject;
hgs
parents:
diff changeset
  7363
                    }
hgs
parents:
diff changeset
  7364
                }
hgs
parents:
diff changeset
  7365
            else
hgs
parents:
diff changeset
  7366
                {
hgs
parents:
diff changeset
  7367
                CUniEditorHeader::THeaderFields start( CUniEditorHeader::EHeaderAddressBcc );
hgs
parents:
diff changeset
  7368
                
hgs
parents:
diff changeset
  7369
                if ( removeHeaders & EUniFeatureSubject )
hgs
parents:
diff changeset
  7370
                    {
hgs
parents:
diff changeset
  7371
                    start = CUniEditorHeader::EHeaderAddressBcc;
hgs
parents:
diff changeset
  7372
                    }                
hgs
parents:
diff changeset
  7373
                else if ( removeHeaders & EUniFeatureBcc )
hgs
parents:
diff changeset
  7374
                    {
hgs
parents:
diff changeset
  7375
                    start = CUniEditorHeader::EHeaderAddressCc;
hgs
parents:
diff changeset
  7376
                    }
hgs
parents:
diff changeset
  7377
                else if ( removeHeaders & EUniFeatureCc )
hgs
parents:
diff changeset
  7378
                    {
hgs
parents:
diff changeset
  7379
                    start = CUniEditorHeader::EHeaderAddressTo;
hgs
parents:
diff changeset
  7380
                    }
hgs
parents:
diff changeset
  7381
                    
hgs
parents:
diff changeset
  7382
                // Search for the first existing header
hgs
parents:
diff changeset
  7383
                for ( TInt i = start; i >= CUniEditorHeader::EHeaderAddressTo; i-- )
hgs
parents:
diff changeset
  7384
                    {
hgs
parents:
diff changeset
  7385
                    if ( iHeader->AddressControl( static_cast<CUniBaseHeader::THeaderFields> ( i ) ) )
hgs
parents:
diff changeset
  7386
                        {
hgs
parents:
diff changeset
  7387
                        iNextFocus = iHeader->AddressControlId( 
hgs
parents:
diff changeset
  7388
                                                    static_cast<CUniBaseHeader::THeaderFields> ( i ) );
hgs
parents:
diff changeset
  7389
                        break;
hgs
parents:
diff changeset
  7390
                        }
hgs
parents:
diff changeset
  7391
                    }
hgs
parents:
diff changeset
  7392
                }
hgs
parents:
diff changeset
  7393
                
hgs
parents:
diff changeset
  7394
            if ( ToCtrl() )
hgs
parents:
diff changeset
  7395
                {
hgs
parents:
diff changeset
  7396
                DoSetFocusL();
hgs
parents:
diff changeset
  7397
                }
hgs
parents:
diff changeset
  7398
            else
hgs
parents:
diff changeset
  7399
                { 
hgs
parents:
diff changeset
  7400
                DoUserChangeSlideL( 0 );
hgs
parents:
diff changeset
  7401
                }
hgs
parents:
diff changeset
  7402
                
hgs
parents:
diff changeset
  7403
            CheckHeaderForMessageTypeL();
hgs
parents:
diff changeset
  7404
            
hgs
parents:
diff changeset
  7405
            // Also iSmsSubjectLength needs updating..
hgs
parents:
diff changeset
  7406
            CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
  7407
            MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  7408
            }
hgs
parents:
diff changeset
  7409
        }
hgs
parents:
diff changeset
  7410
    else
hgs
parents:
diff changeset
  7411
        {
hgs
parents:
diff changeset
  7412
        CleanupStack::PopAndDestroy( headersIn );
hgs
parents:
diff changeset
  7413
        }
hgs
parents:
diff changeset
  7414
        
hgs
parents:
diff changeset
  7415
    CleanupStack::PopAndDestroy( 2, indexes ); // + headersOut
hgs
parents:
diff changeset
  7416
    }
hgs
parents:
diff changeset
  7417
                                            
hgs
parents:
diff changeset
  7418
hgs
parents:
diff changeset
  7419
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7420
// CUniEditorAppUi::AddHeadersRemovedWithDataFlags
hgs
parents:
diff changeset
  7421
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7422
//
hgs
parents:
diff changeset
  7423
void CUniEditorAppUi::AddHeadersCollectStatisticsL( CArrayFix<TInt>& aIndexesOut, 
hgs
parents:
diff changeset
  7424
                                                    TInt aVariation,
hgs
parents:
diff changeset
  7425
                                                    TInt& aNewSelectionFlags,
hgs
parents:
diff changeset
  7426
                                                    TInt& aRemoveFlags,
hgs
parents:
diff changeset
  7427
                                                    TInt& aRemoveWarningFlags,
hgs
parents:
diff changeset
  7428
                                                    TInt& aAddFlags ) const
hgs
parents:
diff changeset
  7429
    {        
hgs
parents:
diff changeset
  7430
    // now we know selected ones 
hgs
parents:
diff changeset
  7431
    for ( TInt i = 0; i < 3; i++ )  // maximum three three
hgs
parents:
diff changeset
  7432
        {
hgs
parents:
diff changeset
  7433
        if (i == 0 || i == 1 )
hgs
parents:
diff changeset
  7434
            {
hgs
parents:
diff changeset
  7435
            CMsgAddressControl* control = NULL;                
hgs
parents:
diff changeset
  7436
            TInt flag = EUniFeatureCc;
hgs
parents:
diff changeset
  7437
            if ( i == 0 )
hgs
parents:
diff changeset
  7438
                {
hgs
parents:
diff changeset
  7439
                control = iHeader->AddressControl( 
hgs
parents:
diff changeset
  7440
                    static_cast<CUniBaseHeader::THeaderFields> 
hgs
parents:
diff changeset
  7441
                        (CUniBaseHeader::EHeaderAddressCc) );
hgs
parents:
diff changeset
  7442
                }
hgs
parents:
diff changeset
  7443
            else if ( i == 1 )
hgs
parents:
diff changeset
  7444
                {
hgs
parents:
diff changeset
  7445
                flag = EUniFeatureBcc;
hgs
parents:
diff changeset
  7446
                control = iHeader->AddressControl( 
hgs
parents:
diff changeset
  7447
                    static_cast<CUniBaseHeader::THeaderFields> 
hgs
parents:
diff changeset
  7448
                        (CUniBaseHeader::EHeaderAddressBcc) );
hgs
parents:
diff changeset
  7449
                }
hgs
parents:
diff changeset
  7450
            
hgs
parents:
diff changeset
  7451
            if ( !aIndexesOut[i] )
hgs
parents:
diff changeset
  7452
                {
hgs
parents:
diff changeset
  7453
                if ( control )
hgs
parents:
diff changeset
  7454
                    {
hgs
parents:
diff changeset
  7455
                    aRemoveFlags |= flag;
hgs
parents:
diff changeset
  7456
                    CMsgRecipientArray* recipients = control->GetRecipientsL();
hgs
parents:
diff changeset
  7457
                    if (    recipients 
hgs
parents:
diff changeset
  7458
                       &&   recipients->Count() )
hgs
parents:
diff changeset
  7459
                        {
hgs
parents:
diff changeset
  7460
                        aRemoveWarningFlags |= flag;
hgs
parents:
diff changeset
  7461
                        }
hgs
parents:
diff changeset
  7462
                    // else - control, no recipients, no selection => remove
hgs
parents:
diff changeset
  7463
                    }
hgs
parents:
diff changeset
  7464
                // else - no control, no selection => status quo
hgs
parents:
diff changeset
  7465
                }
hgs
parents:
diff changeset
  7466
            else
hgs
parents:
diff changeset
  7467
                {
hgs
parents:
diff changeset
  7468
                aNewSelectionFlags |= flag;
hgs
parents:
diff changeset
  7469
                if ( !control )
hgs
parents:
diff changeset
  7470
                    {
hgs
parents:
diff changeset
  7471
                    // no control, selection
hgs
parents:
diff changeset
  7472
                    aAddFlags |= flag;
hgs
parents:
diff changeset
  7473
                    }
hgs
parents:
diff changeset
  7474
                // else - control and selection => status quo
hgs
parents:
diff changeset
  7475
                }
hgs
parents:
diff changeset
  7476
            }
hgs
parents:
diff changeset
  7477
        else if ( i== 2 )
hgs
parents:
diff changeset
  7478
            {
hgs
parents:
diff changeset
  7479
            if( aVariation & EUniFeatureSubject && aVariation & EUniFeatureSubjectConfigurable )
hgs
parents:
diff changeset
  7480
                { // OK, subject field supported and configured
hgs
parents:
diff changeset
  7481
                CMsgExpandableControl* subject = iHeader->SubjectControl();
hgs
parents:
diff changeset
  7482
                if ( !aIndexesOut[i] )
hgs
parents:
diff changeset
  7483
                    {
hgs
parents:
diff changeset
  7484
                    if ( subject )
hgs
parents:
diff changeset
  7485
                        {
hgs
parents:
diff changeset
  7486
                        aRemoveFlags |= EUniFeatureSubject;
hgs
parents:
diff changeset
  7487
                        if ( subject->TextContent().DocumentLength() )
hgs
parents:
diff changeset
  7488
                            {
hgs
parents:
diff changeset
  7489
                            aRemoveWarningFlags |= EUniFeatureSubject;
hgs
parents:
diff changeset
  7490
                            }
hgs
parents:
diff changeset
  7491
                        // else - control, no subject text, no selection => remove
hgs
parents:
diff changeset
  7492
                        }
hgs
parents:
diff changeset
  7493
                    // else - no control, no selection => status quo
hgs
parents:
diff changeset
  7494
                    }
hgs
parents:
diff changeset
  7495
                else
hgs
parents:
diff changeset
  7496
                    {
hgs
parents:
diff changeset
  7497
                    aNewSelectionFlags |= EUniFeatureSubject;
hgs
parents:
diff changeset
  7498
                    if ( !subject )
hgs
parents:
diff changeset
  7499
                        {
hgs
parents:
diff changeset
  7500
                        // no control, selection
hgs
parents:
diff changeset
  7501
                        aAddFlags |= EUniFeatureSubject;
hgs
parents:
diff changeset
  7502
                        }
hgs
parents:
diff changeset
  7503
                    // else - control and selection => status quo
hgs
parents:
diff changeset
  7504
                    }
hgs
parents:
diff changeset
  7505
                }
hgs
parents:
diff changeset
  7506
            }
hgs
parents:
diff changeset
  7507
        }
hgs
parents:
diff changeset
  7508
    }
hgs
parents:
diff changeset
  7509
hgs
parents:
diff changeset
  7510
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7511
// CUniEditorAppUi::AddHeadersCount
hgs
parents:
diff changeset
  7512
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7513
//
hgs
parents:
diff changeset
  7514
TInt CUniEditorAppUi::AddHeadersCount( TInt aFlag ) const
hgs
parents:
diff changeset
  7515
    {
hgs
parents:
diff changeset
  7516
    TInt count( 0 );
hgs
parents:
diff changeset
  7517
    if ( aFlag & EUniFeatureCc )
hgs
parents:
diff changeset
  7518
        {
hgs
parents:
diff changeset
  7519
        count++;
hgs
parents:
diff changeset
  7520
        }
hgs
parents:
diff changeset
  7521
    if ( aFlag & EUniFeatureBcc )
hgs
parents:
diff changeset
  7522
        {
hgs
parents:
diff changeset
  7523
        count++;
hgs
parents:
diff changeset
  7524
        }
hgs
parents:
diff changeset
  7525
    if ( aFlag & EUniFeatureSubject )
hgs
parents:
diff changeset
  7526
        {
hgs
parents:
diff changeset
  7527
        count++;
hgs
parents:
diff changeset
  7528
        }
hgs
parents:
diff changeset
  7529
    return count;
hgs
parents:
diff changeset
  7530
    }
hgs
parents:
diff changeset
  7531
hgs
parents:
diff changeset
  7532
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7533
// CUniEditorAppUi::SetCursorPositionsForInsertL
hgs
parents:
diff changeset
  7534
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7535
//
hgs
parents:
diff changeset
  7536
void CUniEditorAppUi::SetCursorPositionsForInsertL()
hgs
parents:
diff changeset
  7537
    {
hgs
parents:
diff changeset
  7538
    // Set body control cursor position, so that scrolling after
hgs
parents:
diff changeset
  7539
    // insert goes ok.
hgs
parents:
diff changeset
  7540
    if ( BodyCtrl() )
hgs
parents:
diff changeset
  7541
        {
hgs
parents:
diff changeset
  7542
        TInt cursorPos = iSmilModel->Layout() == EUniImageFirst ? 0 : 
hgs
parents:
diff changeset
  7543
                                                                  BodyCtrlEditor()->TextLength(); 
hgs
parents:
diff changeset
  7544
        BodyCtrl()->SetCursorPosL( cursorPos );
hgs
parents:
diff changeset
  7545
        }
hgs
parents:
diff changeset
  7546
    }
hgs
parents:
diff changeset
  7547
hgs
parents:
diff changeset
  7548
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7549
// CUniEditorAppUi::DoUserRemoveMediaL
hgs
parents:
diff changeset
  7550
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7551
//
hgs
parents:
diff changeset
  7552
void CUniEditorAppUi::DoUserRemoveMediaL( TMsgControlId aMediaControlId,
hgs
parents:
diff changeset
  7553
                                          TUniRegion aRegion )
hgs
parents:
diff changeset
  7554
    {
hgs
parents:
diff changeset
  7555
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  7556
hgs
parents:
diff changeset
  7557
    CMsgBaseControl* ctrl = iView->ControlById( aMediaControlId );
hgs
parents:
diff changeset
  7558
    CUniObject* obj = iSmilModel->GetObject( Document()->CurrentSlide(), aRegion );
hgs
parents:
diff changeset
  7559
hgs
parents:
diff changeset
  7560
    __ASSERT_DEBUG( ( ctrl && obj ), Panic( EUniNullPointer ) );
hgs
parents:
diff changeset
  7561
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  7562
hgs
parents:
diff changeset
  7563
    TUint32 objects = ObjectsAvailable(); 
hgs
parents:
diff changeset
  7564
hgs
parents:
diff changeset
  7565
    TParsePtrC fileN( obj->MediaInfo()->FullFilePath() );
hgs
parents:
diff changeset
  7566
hgs
parents:
diff changeset
  7567
    HBufC* queryText = StringLoader::LoadLC( R_UNIEDITOR_QUEST_REMOVE_COMMON, fileN.NameAndExt() );
hgs
parents:
diff changeset
  7568
hgs
parents:
diff changeset
  7569
    if ( ShowConfirmationQueryL( *queryText ) ) 
hgs
parents:
diff changeset
  7570
        {  
hgs
parents:
diff changeset
  7571
        iSmilModel->RemoveObjectL( Document()->CurrentSlide(), obj );
hgs
parents:
diff changeset
  7572
        Document()->SetBodyModified( ETrue );
hgs
parents:
diff changeset
  7573
hgs
parents:
diff changeset
  7574
        TBool removeCtrlFocused = ctrl->IsFocused();
hgs
parents:
diff changeset
  7575
hgs
parents:
diff changeset
  7576
        // Delete icon
hgs
parents:
diff changeset
  7577
        iView->DeleteControlL( ctrl->ControlId() );
hgs
parents:
diff changeset
  7578
        
hgs
parents:
diff changeset
  7579
        MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  7580
hgs
parents:
diff changeset
  7581
        // Change focus to the beginning that scroll bar is updated
hgs
parents:
diff changeset
  7582
        // and text editor area removes extra lines
hgs
parents:
diff changeset
  7583
        if ( ToCtrl() )
hgs
parents:
diff changeset
  7584
            {
hgs
parents:
diff changeset
  7585
            iView->SetFocus( EMsgComponentIdTo );
hgs
parents:
diff changeset
  7586
            }
hgs
parents:
diff changeset
  7587
        else if ( iView->ControlById( EMsgComponentIdAudio ) )
hgs
parents:
diff changeset
  7588
            {
hgs
parents:
diff changeset
  7589
            //Audio is always first
hgs
parents:
diff changeset
  7590
            iView->SetFocus( EMsgComponentIdAudio );
hgs
parents:
diff changeset
  7591
            }
hgs
parents:
diff changeset
  7592
        else if ( iSmilModel->Layout() == EUniImageFirst &&  
hgs
parents:
diff changeset
  7593
                  ImageCtrl() )
hgs
parents:
diff changeset
  7594
            {
hgs
parents:
diff changeset
  7595
            // should not be need to update focus anymore
hgs
parents:
diff changeset
  7596
            iView->SetFocus( EMsgComponentIdImage );
hgs
parents:
diff changeset
  7597
            }    
hgs
parents:
diff changeset
  7598
        else 
hgs
parents:
diff changeset
  7599
            {
hgs
parents:
diff changeset
  7600
            // should not be need to update focus anymore
hgs
parents:
diff changeset
  7601
            iView->SetFocus( EMsgComponentIdBody );
hgs
parents:
diff changeset
  7602
            }
hgs
parents:
diff changeset
  7603
 
hgs
parents:
diff changeset
  7604
        // Put focus back to right place
hgs
parents:
diff changeset
  7605
        CMsgBaseControl* focusedControl = iView->FocusedControl();
hgs
parents:
diff changeset
  7606
        if ( focusedControl )
hgs
parents:
diff changeset
  7607
            {
hgs
parents:
diff changeset
  7608
            if ( removeCtrlFocused &&  
hgs
parents:
diff changeset
  7609
                 focusedControl->ControlId() != EMsgComponentIdImage &&  
hgs
parents:
diff changeset
  7610
                 iSmilModel->Layout() == EUniImageFirst &&  
hgs
parents:
diff changeset
  7611
                 ImageCtrl() )
hgs
parents:
diff changeset
  7612
                {
hgs
parents:
diff changeset
  7613
                iView->SetFocus( EMsgComponentIdImage );
hgs
parents:
diff changeset
  7614
                }
hgs
parents:
diff changeset
  7615
            else if ( removeCtrlFocused &&        
hgs
parents:
diff changeset
  7616
                      aMediaControlId == EMsgComponentIdAudio && 
hgs
parents:
diff changeset
  7617
                      iSmilModel->Layout() == EUniImageFirst && 
hgs
parents:
diff changeset
  7618
                      ImageCtrl() )
hgs
parents:
diff changeset
  7619
                {
hgs
parents:
diff changeset
  7620
                iView->SetFocus( EMsgComponentIdImage );
hgs
parents:
diff changeset
  7621
                }
hgs
parents:
diff changeset
  7622
            else if ( focusedControl->ControlId() != EMsgComponentIdBody )
hgs
parents:
diff changeset
  7623
                {
hgs
parents:
diff changeset
  7624
                CMsgBodyControl* bodyCtrl = BodyCtrl();
hgs
parents:
diff changeset
  7625
                if ( bodyCtrl && 
hgs
parents:
diff changeset
  7626
                     aRegion == EUniRegionImage && 
hgs
parents:
diff changeset
  7627
                     ( objects & EUniVideoFlag | removeCtrlFocused ) )
hgs
parents:
diff changeset
  7628
                    { 
hgs
parents:
diff changeset
  7629
                    if ( iSmilModel->Layout() == EUniImageFirst )
hgs
parents:
diff changeset
  7630
                        {
hgs
parents:
diff changeset
  7631
                        // If video was removed, always place the cursor in the end
hgs
parents:
diff changeset
  7632
                        bodyCtrl->SetCursorPosL( 0 );
hgs
parents:
diff changeset
  7633
                        }
hgs
parents:
diff changeset
  7634
                    else
hgs
parents:
diff changeset
  7635
                        {
hgs
parents:
diff changeset
  7636
                        // If video was removed, always place the cursor in the end
hgs
parents:
diff changeset
  7637
                        bodyCtrl->SetCursorPosL( bodyCtrl->Editor().TextLength() );
hgs
parents:
diff changeset
  7638
                        }
hgs
parents:
diff changeset
  7639
                    }
hgs
parents:
diff changeset
  7640
                
hgs
parents:
diff changeset
  7641
                // Needs to be done after cursor setting to ensure that view is 
hgs
parents:
diff changeset
  7642
                // showing the correct position.
hgs
parents:
diff changeset
  7643
                iView->SetFocus( EMsgComponentIdBody );
hgs
parents:
diff changeset
  7644
                }
hgs
parents:
diff changeset
  7645
hgs
parents:
diff changeset
  7646
            if ( focusedControl->ControlId() == EMsgComponentIdImage )
hgs
parents:
diff changeset
  7647
                {
hgs
parents:
diff changeset
  7648
                // Set focus here so that imagecontrol will draw navipane if focused.
hgs
parents:
diff changeset
  7649
                iView->FocusedControl()->SetFocus( ETrue, EDrawNow );
hgs
parents:
diff changeset
  7650
                }
hgs
parents:
diff changeset
  7651
            }
hgs
parents:
diff changeset
  7652
        }
hgs
parents:
diff changeset
  7653
        
hgs
parents:
diff changeset
  7654
    CleanupStack::PopAndDestroy( queryText );
hgs
parents:
diff changeset
  7655
    if(!ObjectsAvailable() && Document()->CurrentSlide())
hgs
parents:
diff changeset
  7656
        {
hgs
parents:
diff changeset
  7657
        DoRemoveSlideL();
hgs
parents:
diff changeset
  7658
        Document()->SetBodyModified( ETrue ); 
hgs
parents:
diff changeset
  7659
        }   
hgs
parents:
diff changeset
  7660
    CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
  7661
    MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  7662
    }
hgs
parents:
diff changeset
  7663
hgs
parents:
diff changeset
  7664
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7665
// CUniEditorAppUi::RemoveCurrentTextObjectL
hgs
parents:
diff changeset
  7666
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7667
//
hgs
parents:
diff changeset
  7668
void CUniEditorAppUi::RemoveCurrentTextObjectL()
hgs
parents:
diff changeset
  7669
    {
hgs
parents:
diff changeset
  7670
    __ASSERT_DEBUG( Document()->DataModel()->SmilType() == EMmsSmil, Panic( EUniIllegalSmilType ) );
hgs
parents:
diff changeset
  7671
    
hgs
parents:
diff changeset
  7672
    if ( ShowConfirmationQueryL( R_UNIEDITOR_QUEST_REMOVE_TEXT ) ) 
hgs
parents:
diff changeset
  7673
        {
hgs
parents:
diff changeset
  7674
        if ( BodyCtrl() || 
hgs
parents:
diff changeset
  7675
             BodyCtrl()->TextContent().DocumentLength() )
hgs
parents:
diff changeset
  7676
            {
hgs
parents:
diff changeset
  7677
            BodyCtrl()->Reset();
hgs
parents:
diff changeset
  7678
            
hgs
parents:
diff changeset
  7679
            Document()->SetBodyModified( ETrue );
hgs
parents:
diff changeset
  7680
            
hgs
parents:
diff changeset
  7681
            UpdateSmilTextAttaL();
hgs
parents:
diff changeset
  7682
            }        
hgs
parents:
diff changeset
  7683
        if((Document()->UniState() == EUniMms) &&(!ObjectsAvailable() && Document()->CurrentSlide()))
hgs
parents:
diff changeset
  7684
            {
hgs
parents:
diff changeset
  7685
            DoRemoveSlideL();
hgs
parents:
diff changeset
  7686
            Document()->SetBodyModified( ETrue ); 
hgs
parents:
diff changeset
  7687
            }        
hgs
parents:
diff changeset
  7688
        CheckBodyForMessageTypeL();
hgs
parents:
diff changeset
  7689
        MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  7690
        SetOrRemoveMaxSizeInEdwin();
hgs
parents:
diff changeset
  7691
        }
hgs
parents:
diff changeset
  7692
    }
hgs
parents:
diff changeset
  7693
hgs
parents:
diff changeset
  7694
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7695
// CUniEditorAppUi::MsgAsyncControlStateChanged
hgs
parents:
diff changeset
  7696
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7697
//
hgs
parents:
diff changeset
  7698
void CUniEditorAppUi::MsgAsyncControlStateChanged( CMsgBaseControl& /*aControl*/,
hgs
parents:
diff changeset
  7699
                                                   TMsgAsyncControlState /*aNewState*/,
hgs
parents:
diff changeset
  7700
                                                   TMsgAsyncControlState /*aOldState*/ )
hgs
parents:
diff changeset
  7701
    {
hgs
parents:
diff changeset
  7702
    // OK to leave this empty, needed only in Viewer side
hgs
parents:
diff changeset
  7703
    }
hgs
parents:
diff changeset
  7704
hgs
parents:
diff changeset
  7705
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7706
// CUniEditorAppUi::MsgAsyncControlResourceChanged
hgs
parents:
diff changeset
  7707
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7708
//
hgs
parents:
diff changeset
  7709
void CUniEditorAppUi::MsgAsyncControlResourceChanged( CMsgBaseControl& aControl, TInt aType )
hgs
parents:
diff changeset
  7710
    {
hgs
parents:
diff changeset
  7711
    if ( aType == KEikDynamicLayoutVariantSwitch )
hgs
parents:
diff changeset
  7712
        {
hgs
parents:
diff changeset
  7713
        if ( aControl.ControlType() == EMsgImageControl )
hgs
parents:
diff changeset
  7714
            {
hgs
parents:
diff changeset
  7715
            CMsgImageControl& imageControl = static_cast<CMsgImageControl&>( aControl );
hgs
parents:
diff changeset
  7716
            
hgs
parents:
diff changeset
  7717
            if ( imageControl.IconBitmapId() == EMbmUniutilsQgn_graf_mms_unedit ||
hgs
parents:
diff changeset
  7718
                 imageControl.IconBitmapId() == EMbmUniutilsQgn_graf_mms_edit )
hgs
parents:
diff changeset
  7719
                {
hgs
parents:
diff changeset
  7720
                // 3GPP icons layout setting needs to be handled by ourself
hgs
parents:
diff changeset
  7721
                TAknLayoutRect iconLayout;
hgs
parents:
diff changeset
  7722
                iconLayout.LayoutRect( MsgEditorCommons::MsgDataPane(),
hgs
parents:
diff changeset
  7723
                                       AknLayoutScalable_Apps::msg_data_pane_g4().LayoutLine() );
hgs
parents:
diff changeset
  7724
                
hgs
parents:
diff changeset
  7725
                TRAP_IGNORE( imageControl.SetIconSizeL( iconLayout.Rect().Size() ) );
hgs
parents:
diff changeset
  7726
                }
hgs
parents:
diff changeset
  7727
            }
hgs
parents:
diff changeset
  7728
        }
hgs
parents:
diff changeset
  7729
    }
hgs
parents:
diff changeset
  7730
hgs
parents:
diff changeset
  7731
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7732
// CUniEditorAppUi::HandleResourceChangeL
hgs
parents:
diff changeset
  7733
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7734
//
hgs
parents:
diff changeset
  7735
void CUniEditorAppUi::HandleResourceChangeL( TInt aType )
hgs
parents:
diff changeset
  7736
    {
hgs
parents:
diff changeset
  7737
    // Base class call must be first
hgs
parents:
diff changeset
  7738
    CMsgEditorAppUi::HandleResourceChangeL(aType);
hgs
parents:
diff changeset
  7739
    
hgs
parents:
diff changeset
  7740
    if ( iHeader )
hgs
parents:
diff changeset
  7741
        {
hgs
parents:
diff changeset
  7742
        iHeader->HandleResourceChange( aType );
hgs
parents:
diff changeset
  7743
        }
hgs
parents:
diff changeset
  7744
    
hgs
parents:
diff changeset
  7745
    if ( aType == KEikDynamicLayoutVariantSwitch && IsLaunched() )
hgs
parents:
diff changeset
  7746
        { 
hgs
parents:
diff changeset
  7747
        // Resize the title icon
hgs
parents:
diff changeset
  7748
        CreateFixedToolbarL( EFalse );
hgs
parents:
diff changeset
  7749
        
hgs
parents:
diff changeset
  7750
        if( !( iEditorFlags & EDoNotUpdateTitlePane ) )
hgs
parents:
diff changeset
  7751
            {
hgs
parents:
diff changeset
  7752
            UpdateToolbarL();
hgs
parents:
diff changeset
  7753
hgs
parents:
diff changeset
  7754
            SetTitleIconsSizeL();
hgs
parents:
diff changeset
  7755
            
hgs
parents:
diff changeset
  7756
            // Redraw it again
hgs
parents:
diff changeset
  7757
            SetTitleL();
hgs
parents:
diff changeset
  7758
            }        
hgs
parents:
diff changeset
  7759
        }
hgs
parents:
diff changeset
  7760
    else if ( aType == KAknsMessageSkinChange )
hgs
parents:
diff changeset
  7761
        {
hgs
parents:
diff changeset
  7762
        TParse fileParse;
hgs
parents:
diff changeset
  7763
        fileParse.Set( KUniUtilsMBMFileName, &KDC_APP_BITMAP_DIR, NULL );
hgs
parents:
diff changeset
  7764
        
hgs
parents:
diff changeset
  7765
        delete iIconSms;
hgs
parents:
diff changeset
  7766
        iIconSms = NULL;
hgs
parents:
diff changeset
  7767
        iIconSms = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
  7768
                KAknsIIDQgnPropMceSmsTitle,
hgs
parents:
diff changeset
  7769
                fileParse.FullName(),
hgs
parents:
diff changeset
  7770
                EMbmUniutilsQgn_prop_mce_sms_title,
hgs
parents:
diff changeset
  7771
                EMbmUniutilsQgn_prop_mce_sms_title_mask );
hgs
parents:
diff changeset
  7772
hgs
parents:
diff changeset
  7773
        delete iIconMms;
hgs
parents:
diff changeset
  7774
        iIconMms = NULL;
hgs
parents:
diff changeset
  7775
        iIconMms = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
  7776
                        KAknsIIDQgnPropMceMmsTitle,
hgs
parents:
diff changeset
  7777
                        fileParse.FullName(),
hgs
parents:
diff changeset
  7778
                        EMbmUniutilsQgn_prop_mce_mms_title,
hgs
parents:
diff changeset
  7779
                        EMbmUniutilsQgn_prop_mce_mms_title_mask );
hgs
parents:
diff changeset
  7780
        
hgs
parents:
diff changeset
  7781
        SetTitleIconsSizeL();
hgs
parents:
diff changeset
  7782
        
hgs
parents:
diff changeset
  7783
        if ( IsLaunched() && !( iEditorFlags & EDoNotUpdateTitlePane ) )
hgs
parents:
diff changeset
  7784
            {
hgs
parents:
diff changeset
  7785
            SetTitleL();
hgs
parents:
diff changeset
  7786
            }
hgs
parents:
diff changeset
  7787
        }
hgs
parents:
diff changeset
  7788
    }
hgs
parents:
diff changeset
  7789
hgs
parents:
diff changeset
  7790
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7791
// CUniEditorAppUi::IsBodySmsCompatibleL
hgs
parents:
diff changeset
  7792
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7793
//
hgs
parents:
diff changeset
  7794
TBool CUniEditorAppUi::IsBodySmsCompatibleL( TBool aInAutoMode /*= ETrue*/ )
hgs
parents:
diff changeset
  7795
    {
hgs
parents:
diff changeset
  7796
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  7797
hgs
parents:
diff changeset
  7798
    CUniDataModel* model = doc->DataModel();
hgs
parents:
diff changeset
  7799
hgs
parents:
diff changeset
  7800
    if ( Document()->DataModel()->SmilType() != EMmsSmil )
hgs
parents:
diff changeset
  7801
        { // There's 3GPP presentation or something else..
hgs
parents:
diff changeset
  7802
        return EFalse;
hgs
parents:
diff changeset
  7803
        }
hgs
parents:
diff changeset
  7804
hgs
parents:
diff changeset
  7805
    // This sets iSmsLength and possible unicode character mode
hgs
parents:
diff changeset
  7806
    CheckSmsSizeAndUnicodeL();
hgs
parents:
diff changeset
  7807
hgs
parents:
diff changeset
  7808
    if( model->ObjectList().Count() == 0 &&
hgs
parents:
diff changeset
  7809
        model->AttachmentList().Count() == 1 &&
hgs
parents:
diff changeset
  7810
        iSmilModel->SlideCount() == 1 &&
hgs
parents:
diff changeset
  7811
        iSmsSubjectLength == 0)
hgs
parents:
diff changeset
  7812
        {
hgs
parents:
diff changeset
  7813
        CUniObject* obj = model->AttachmentList().GetByIndex( 0 );
hgs
parents:
diff changeset
  7814
        if ( obj &&  
hgs
parents:
diff changeset
  7815
             obj->MimeType().Length() > 0 &&   
hgs
parents:
diff changeset
  7816
             ( obj->MimeType().CompareF( KMsgMimeVCard ) == 0 ||  
hgs
parents:
diff changeset
  7817
#if defined (__I_CAL_SUPPORT) && defined (RD_MESSAGING_ICAL_IMPORT)
hgs
parents:
diff changeset
  7818
               obj->MimeType().CompareF( KMsgMimeICal ) == 0 ||
hgs
parents:
diff changeset
  7819
#endif
hgs
parents:
diff changeset
  7820
               obj->MimeType().CompareF( KMsgMimeVCal ) == 0 ) )
hgs
parents:
diff changeset
  7821
            { 
hgs
parents:
diff changeset
  7822
            // There's only either VCard, VCal or ICal if it is supported.
hgs
parents:
diff changeset
  7823
            iSmsBodyLength = obj->Size();
hgs
parents:
diff changeset
  7824
            
hgs
parents:
diff changeset
  7825
            TInt maxParts = doc->MaxSmsParts();
hgs
parents:
diff changeset
  7826
             if( !aInAutoMode )
hgs
parents:
diff changeset
  7827
                { // Checking if the message fits in "absolute maximum"
hgs
parents:
diff changeset
  7828
                maxParts = doc->AbsoluteMaxSmsParts();
hgs
parents:
diff changeset
  7829
                }
hgs
parents:
diff changeset
  7830
            TInt lengthOne( 0 );
hgs
parents:
diff changeset
  7831
            TInt lengthMany( 0 );    
hgs
parents:
diff changeset
  7832
            doc->SmsCharacterLimits( lengthOne, lengthMany );
hgs
parents:
diff changeset
  7833
            return (iSmsBodyLength > lengthMany * maxParts )?  EFalse :  ETrue;
hgs
parents:
diff changeset
  7834
            }
hgs
parents:
diff changeset
  7835
        }
hgs
parents:
diff changeset
  7836
    
hgs
parents:
diff changeset
  7837
    if( model->ObjectList().Count() > 1 ||
hgs
parents:
diff changeset
  7838
        model->AttachmentList().Count() > 0 ||
hgs
parents:
diff changeset
  7839
        iSmilModel->SlideCount() > 1 )
hgs
parents:
diff changeset
  7840
        { // If more than 1 object or an attachment or a slide -> MMS
hgs
parents:
diff changeset
  7841
        return EFalse;
hgs
parents:
diff changeset
  7842
        }
hgs
parents:
diff changeset
  7843
    // OK, there's just one object
hgs
parents:
diff changeset
  7844
    
hgs
parents:
diff changeset
  7845
    if( model->ObjectList().Count() == 1 &&
hgs
parents:
diff changeset
  7846
        model->ObjectList().GetByIndex(0)->MediaType() != EMsgMediaText )
hgs
parents:
diff changeset
  7847
        { // Just one object and it's not text -> MMS
hgs
parents:
diff changeset
  7848
        return EFalse;
hgs
parents:
diff changeset
  7849
        }
hgs
parents:
diff changeset
  7850
        
hgs
parents:
diff changeset
  7851
    // Lets check the length of the body
hgs
parents:
diff changeset
  7852
    if( !(iEditorFlags & ESubjectOkInSms ) && iSmsSubjectLength > 0 )
hgs
parents:
diff changeset
  7853
        {
hgs
parents:
diff changeset
  7854
        return EFalse;
hgs
parents:
diff changeset
  7855
        }
hgs
parents:
diff changeset
  7856
    
hgs
parents:
diff changeset
  7857
    TInt lengthOne( 0 );
hgs
parents:
diff changeset
  7858
    TInt lengthMany( 0 );
hgs
parents:
diff changeset
  7859
    
hgs
parents:
diff changeset
  7860
    doc->SmsCharacterLimits( lengthOne, lengthMany );
hgs
parents:
diff changeset
  7861
hgs
parents:
diff changeset
  7862
    TInt maxLen = lengthOne;
hgs
parents:
diff changeset
  7863
hgs
parents:
diff changeset
  7864
    TInt maxParts = doc->MaxSmsParts();
hgs
parents:
diff changeset
  7865
    
hgs
parents:
diff changeset
  7866
    if( !aInAutoMode )
hgs
parents:
diff changeset
  7867
        { // Checking if the message fits in "absolute maximum"
hgs
parents:
diff changeset
  7868
        maxParts = doc->AbsoluteMaxSmsParts();
hgs
parents:
diff changeset
  7869
        }
hgs
parents:
diff changeset
  7870
  
hgs
parents:
diff changeset
  7871
    if( maxParts > 1 )
hgs
parents:
diff changeset
  7872
        {
hgs
parents:
diff changeset
  7873
        maxLen = maxParts*lengthMany;
hgs
parents:
diff changeset
  7874
        }
hgs
parents:
diff changeset
  7875
    
hgs
parents:
diff changeset
  7876
    if ( doc->AbsoluteMaxSmsCharacters() > 0 )
hgs
parents:
diff changeset
  7877
        {
hgs
parents:
diff changeset
  7878
        maxLen = doc->AbsoluteMaxSmsCharacters();
hgs
parents:
diff changeset
  7879
        }
hgs
parents:
diff changeset
  7880
    
hgs
parents:
diff changeset
  7881
    TInt emailAddrLen = iHeader->LongestEmailAddress();
hgs
parents:
diff changeset
  7882
    
hgs
parents:
diff changeset
  7883
    if( emailAddrLen )
hgs
parents:
diff changeset
  7884
        {
hgs
parents:
diff changeset
  7885
        emailAddrLen++; // one extra char needed by separator char
hgs
parents:
diff changeset
  7886
        }
hgs
parents:
diff changeset
  7887
hgs
parents:
diff changeset
  7888
    if( iSmsBodyLength + iSmsSubjectLength + emailAddrLen <= maxLen )
hgs
parents:
diff changeset
  7889
        {
hgs
parents:
diff changeset
  7890
        //Korean Req: 415-5434
hgs
parents:
diff changeset
  7891
        //get the size limit in bytes
hgs
parents:
diff changeset
  7892
        TInt warnCharLength = doc->SmsSizeWarningBytes();
hgs
parents:
diff changeset
  7893
hgs
parents:
diff changeset
  7894
        if( warnCharLength > 0 )
hgs
parents:
diff changeset
  7895
            {
hgs
parents:
diff changeset
  7896
            //convert the size limit w.r.t characters based on encoding type
hgs
parents:
diff changeset
  7897
            if ( doc->UnicodeCharacterMode() )
hgs
parents:
diff changeset
  7898
                {
hgs
parents:
diff changeset
  7899
                warnCharLength =  warnCharLength / 2 ;
hgs
parents:
diff changeset
  7900
                }
hgs
parents:
diff changeset
  7901
            else
hgs
parents:
diff changeset
  7902
                {
hgs
parents:
diff changeset
  7903
                warnCharLength = (warnCharLength * 8) / 7;
hgs
parents:
diff changeset
  7904
                }
hgs
parents:
diff changeset
  7905
            
hgs
parents:
diff changeset
  7906
            if( iSmsBodyLength + iSmsSubjectLength + emailAddrLen > warnCharLength )
hgs
parents:
diff changeset
  7907
                {
hgs
parents:
diff changeset
  7908
                //show "limit exceed" note if not shown already
hgs
parents:
diff changeset
  7909
                if( !( iEditorFlags & ESmsSizeWarningNoteShown ) )
hgs
parents:
diff changeset
  7910
                    {
hgs
parents:
diff changeset
  7911
                    //set the bit to indicate limit exceeded and note shown
hgs
parents:
diff changeset
  7912
                    iEditorFlags |= ESmsSizeWarningNoteShown;
hgs
parents:
diff changeset
  7913
                    if( iPopupNote )
hgs
parents:
diff changeset
  7914
                        {
hgs
parents:
diff changeset
  7915
						ShowDiscreetPopUpL(iPopupSmsSizeAboveLimitBuffer->Des());
hgs
parents:
diff changeset
  7916
                        }
hgs
parents:
diff changeset
  7917
                    }
hgs
parents:
diff changeset
  7918
                }
hgs
parents:
diff changeset
  7919
            else
hgs
parents:
diff changeset
  7920
                {
hgs
parents:
diff changeset
  7921
                //show "back to below limit" note if not shown already(only in case of size transiton from above limit to below limit)
hgs
parents:
diff changeset
  7922
                if( iEditorFlags & ESmsSizeWarningNoteShown )
hgs
parents:
diff changeset
  7923
                    {
hgs
parents:
diff changeset
  7924
                    //reset the bit to indicate size is below limit and note for transition is showed
hgs
parents:
diff changeset
  7925
                    iEditorFlags &= ~ESmsSizeWarningNoteShown;
hgs
parents:
diff changeset
  7926
                    if( iPopupNote )
hgs
parents:
diff changeset
  7927
                        {
hgs
parents:
diff changeset
  7928
                        ShowDiscreetPopUpL(iPopupSmsSizeBelowLimitBuffer->Des());
hgs
parents:
diff changeset
  7929
                        }                
hgs
parents:
diff changeset
  7930
                    }
hgs
parents:
diff changeset
  7931
                }          
hgs
parents:
diff changeset
  7932
            }
hgs
parents:
diff changeset
  7933
        
hgs
parents:
diff changeset
  7934
        return ETrue;
hgs
parents:
diff changeset
  7935
        }
hgs
parents:
diff changeset
  7936
  
hgs
parents:
diff changeset
  7937
    // text (body + possible subject) is too long -> body is not sms compatible
hgs
parents:
diff changeset
  7938
    return EFalse;  
hgs
parents:
diff changeset
  7939
    }
hgs
parents:
diff changeset
  7940
hgs
parents:
diff changeset
  7941
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7942
// CUniEditorAppUi::CheckSmsSizeAndUnicodeL
hgs
parents:
diff changeset
  7943
// ---------------------------------------------------------
hgs
parents:
diff changeset
  7944
//
hgs
parents:
diff changeset
  7945
void CUniEditorAppUi::CheckSmsSizeAndUnicodeL()
hgs
parents:
diff changeset
  7946
    {
hgs
parents:
diff changeset
  7947
    UNILOGGER_WRITE_TIMESTAMP("CUniEditorAppUi::CheckSmsSizeAndUnicodeL Start <<<---- ");
hgs
parents:
diff changeset
  7948
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  7949
hgs
parents:
diff changeset
  7950
    if( iNLTFeatureSupport )
hgs
parents:
diff changeset
  7951
        {
hgs
parents:
diff changeset
  7952
        //Turkish SMS-PREQ2265 specific
hgs
parents:
diff changeset
  7953
        TInt numOfPDUs = 0, numOfRemainingChars = 0, subjectLength = 0;
hgs
parents:
diff changeset
  7954
        TBool unicodeMode = EFalse;
hgs
parents:
diff changeset
  7955
        TSmsEncoding alternativeEncodingType;
hgs
parents:
diff changeset
  7956
        CUniEditorPlugin* plugin = NULL;
hgs
parents:
diff changeset
  7957
       
hgs
parents:
diff changeset
  7958
        plugin = SmsPlugin();
hgs
parents:
diff changeset
  7959
        if ( plugin )
hgs
parents:
diff changeset
  7960
            { 
hgs
parents:
diff changeset
  7961
            HBufC* editorTxt = NULL;
hgs
parents:
diff changeset
  7962
            
hgs
parents:
diff changeset
  7963
            if ( BodyCtrlEditor() )
hgs
parents:
diff changeset
  7964
                {
hgs
parents:
diff changeset
  7965
                editorTxt = BodyCtrlEditor()->GetTextInHBufL();
hgs
parents:
diff changeset
  7966
                }
hgs
parents:
diff changeset
  7967
hgs
parents:
diff changeset
  7968
            //Concatenate subject buffer and body buffer before calculating PDU info.
hgs
parents:
diff changeset
  7969
            if ( SubjectCtrlEditor() )
hgs
parents:
diff changeset
  7970
                {
hgs
parents:
diff changeset
  7971
                HBufC* subjectTxt = SubjectCtrlEditor()->GetTextInHBufL();
hgs
parents:
diff changeset
  7972
                if( subjectTxt )
hgs
parents:
diff changeset
  7973
                    {
hgs
parents:
diff changeset
  7974
                    if( editorTxt )
hgs
parents:
diff changeset
  7975
                        {
hgs
parents:
diff changeset
  7976
                        CleanupStack::PushL( subjectTxt );
hgs
parents:
diff changeset
  7977
                        //If both, body text and suject text is present
hgs
parents:
diff changeset
  7978
                        //Reallocate editor text to include subject buffer and additional chars for subject 
hgs
parents:
diff changeset
  7979
                        TInt reallocLength;
hgs
parents:
diff changeset
  7980
                        reallocLength = editorTxt->Length() + subjectTxt->Length() + KUniEdExtraLenCausedBySubject;
hgs
parents:
diff changeset
  7981
                        editorTxt = editorTxt->ReAllocL(reallocLength);
hgs
parents:
diff changeset
  7982
                        
hgs
parents:
diff changeset
  7983
                        //Modify the editor text to insert subject buffer and additional chars at the begining
hgs
parents:
diff changeset
  7984
                        //Buffer Format is:: "(subject...)body..."
hgs
parents:
diff changeset
  7985
                        TPtr editorBuffPtr = editorTxt->Des();
hgs
parents:
diff changeset
  7986
                        subjectLength = 0;
hgs
parents:
diff changeset
  7987
                        editorBuffPtr.Insert(subjectLength, _L("("));
hgs
parents:
diff changeset
  7988
                        subjectLength += 1;
hgs
parents:
diff changeset
  7989
                        editorBuffPtr.Insert(subjectLength, *subjectTxt);
hgs
parents:
diff changeset
  7990
                        subjectLength += subjectTxt->Length();
hgs
parents:
diff changeset
  7991
                        editorBuffPtr.Insert(subjectLength, _L(")"));
hgs
parents:
diff changeset
  7992
                        subjectLength += 1;
hgs
parents:
diff changeset
  7993
                        //total subject length is actual subject + extra chars '(' and ')'
hgs
parents:
diff changeset
  7994
                        CleanupStack::PopAndDestroy( subjectTxt );                    
hgs
parents:
diff changeset
  7995
                        }
hgs
parents:
diff changeset
  7996
                    else
hgs
parents:
diff changeset
  7997
                        {
hgs
parents:
diff changeset
  7998
                        //if only subject text is present                   
hgs
parents:
diff changeset
  7999
                        //Modify subject buffer directly                    
hgs
parents:
diff changeset
  8000
                        //Reallocate subject text to include subject buffer and additional chars for subject 
hgs
parents:
diff changeset
  8001
                        subjectLength = subjectTxt->Length() + KUniEdExtraLenCausedBySubject;
hgs
parents:
diff changeset
  8002
                        subjectTxt = subjectTxt->ReAllocL(subjectLength);
hgs
parents:
diff changeset
  8003
hgs
parents:
diff changeset
  8004
                        //Modify the editor text to insert additional chars at the begining and end 
hgs
parents:
diff changeset
  8005
                        //Buffer Format is:: "(subject...)"
hgs
parents:
diff changeset
  8006
                        TPtr subjectBuffPtr = subjectTxt->Des();
hgs
parents:
diff changeset
  8007
                        subjectBuffPtr.Insert(0, _L("("));
hgs
parents:
diff changeset
  8008
                        //total subject length is actual subject + extra chars '(' and ')'
hgs
parents:
diff changeset
  8009
                        subjectBuffPtr.Insert(subjectLength - 1, _L(")"));
hgs
parents:
diff changeset
  8010
                        //Use subject buffer as editor buffer
hgs
parents:
diff changeset
  8011
                        editorTxt = subjectTxt;
hgs
parents:
diff changeset
  8012
                        }
hgs
parents:
diff changeset
  8013
                    }
hgs
parents:
diff changeset
  8014
                }
hgs
parents:
diff changeset
  8015
            
hgs
parents:
diff changeset
  8016
            if ( editorTxt )
hgs
parents:
diff changeset
  8017
                {
hgs
parents:
diff changeset
  8018
                TPtr inputBuff = editorTxt->Des();
hgs
parents:
diff changeset
  8019
                TInt buffLength = editorTxt->Length();
hgs
parents:
diff changeset
  8020
                TInt prevBuffLength = 0;
hgs
parents:
diff changeset
  8021
                //replace enter char(enter will be downgraded anyways) with space, before calculating PDU info.
hgs
parents:
diff changeset
  8022
                //This char will be later replaced with line feed or paragraph separator
hgs
parents:
diff changeset
  8023
                TBuf<KSmsEdPDUInfoCalcReplaceCharacterCount> replaceChars;
hgs
parents:
diff changeset
  8024
                replaceChars.Zero();
hgs
parents:
diff changeset
  8025
                replaceChars.Append( KSmsEnterCharacter );
hgs
parents:
diff changeset
  8026
                replaceChars.Append( KSmsDownwardsArrowLeft );
hgs
parents:
diff changeset
  8027
                AknTextUtils::ReplaceCharacters(
hgs
parents:
diff changeset
  8028
                    inputBuff, 
hgs
parents:
diff changeset
  8029
                    replaceChars, 
hgs
parents:
diff changeset
  8030
                    KSmsEdUnicodeLFSupportedByBasicPhones );
hgs
parents:
diff changeset
  8031
                if( iPrevBuffer )
hgs
parents:
diff changeset
  8032
                    {
hgs
parents:
diff changeset
  8033
                    prevBuffLength = iPrevBuffer->Length();
hgs
parents:
diff changeset
  8034
                    if(( prevBuffLength == buffLength )&&(!iSettingsChanged) )
hgs
parents:
diff changeset
  8035
                    {
hgs
parents:
diff changeset
  8036
                        UNILOGGER_WRITE_TIMESTAMP("CUniEditorAppUi::CheckSmsSizeAndUnicodeL Compare Start <<<---- ");                        
hgs
parents:
diff changeset
  8037
                        if( iPrevBuffer->Compare(*editorTxt) == 0 )
hgs
parents:
diff changeset
  8038
                            {
hgs
parents:
diff changeset
  8039
                            UNILOGGER_WRITE_TIMESTAMP("CUniEditorAppUi::CheckSmsSizeAndUnicodeL Compare TRUE End ---->>> ");                        
hgs
parents:
diff changeset
  8040
                            /* Identical buffer, previously calculated values are good enough
hgs
parents:
diff changeset
  8041
                             * Hence do nothing. 
hgs
parents:
diff changeset
  8042
                             */
hgs
parents:
diff changeset
  8043
                            delete iPrevBuffer;
hgs
parents:
diff changeset
  8044
                            iPrevBuffer = editorTxt;
hgs
parents:
diff changeset
  8045
                            return;
hgs
parents:
diff changeset
  8046
                    }
hgs
parents:
diff changeset
  8047
                        UNILOGGER_WRITE_TIMESTAMP("CUniEditorAppUi::CheckSmsSizeAndUnicodeL Compare FALSE End ---->>> ");                        
hgs
parents:
diff changeset
  8048
                        }
hgs
parents:
diff changeset
  8049
                    }
hgs
parents:
diff changeset
  8050
                //This char will be later replaced with line feed or paragraph separator
hgs
parents:
diff changeset
  8051
	          if( buffLength <= prevBuffLength )
hgs
parents:
diff changeset
  8052
                    {
hgs
parents:
diff changeset
  8053
        	  	//Reset the settings back, in case if any unicode/turkish chars were entered and erased 
hgs
parents:
diff changeset
  8054
            	       	//or if entry type is T9 method(multiple key presses to get different chars)
hgs
parents:
diff changeset
  8055
    	               	plugin->SetEncodingSettings(EFalse, doc->AlternativeEncodingType(), doc->CharSetSupport());
hgs
parents:
diff changeset
  8056
                    }                
hgs
parents:
diff changeset
  8057
                //Call the plugin SMS adaptation API to get PDU Info
hgs
parents:
diff changeset
  8058
               TRAPD( err, plugin->GetNumPDUsL( inputBuff, numOfRemainingChars, numOfPDUs, unicodeMode, alternativeEncodingType) );
hgs
parents:
diff changeset
  8059
               if ( err == KErrOverflow )
hgs
parents:
diff changeset
  8060
                    {
hgs
parents:
diff changeset
  8061
                            iSmsBodyLength = buffLength;
hgs
parents:
diff changeset
  8062
                            delete iPrevBuffer;
hgs
parents:
diff changeset
  8063
                            iPrevBuffer = editorTxt;
hgs
parents:
diff changeset
  8064
                            return;                          
hgs
parents:
diff changeset
  8065
                    }
hgs
parents:
diff changeset
  8066
                else if ( err != KErrNone )
hgs
parents:
diff changeset
  8067
                    {
hgs
parents:
diff changeset
  8068
                	        User::Leave(err);
hgs
parents:
diff changeset
  8069
                	}
hgs
parents:
diff changeset
  8070
                	  				     
hgs
parents:
diff changeset
  8071
                //save current buffer 
hgs
parents:
diff changeset
  8072
                delete iPrevBuffer;
hgs
parents:
diff changeset
  8073
                iPrevBuffer = editorTxt;
hgs
parents:
diff changeset
  8074
                iSettingsChanged = EFalse;
hgs
parents:
diff changeset
  8075
                }
hgs
parents:
diff changeset
  8076
            else
hgs
parents:
diff changeset
  8077
                {
hgs
parents:
diff changeset
  8078
                //Reset the settings back, in case if any unicode chars were entered and erased
hgs
parents:
diff changeset
  8079
                plugin->SetEncodingSettings(EFalse, doc->AlternativeEncodingType(), doc->CharSetSupport());
hgs
parents:
diff changeset
  8080
                // Bodytext is zero -> check input language
hgs
parents:
diff changeset
  8081
                delete iPrevBuffer;
hgs
parents:
diff changeset
  8082
                iPrevBuffer = NULL;
hgs
parents:
diff changeset
  8083
                TInt inputLang = iAvkonEnv->SettingCache().InputLanguage();
hgs
parents:
diff changeset
  8084
                switch ( inputLang )
hgs
parents:
diff changeset
  8085
                    {
hgs
parents:
diff changeset
  8086
                    case ELangArabic:
hgs
parents:
diff changeset
  8087
                    case ELangHebrew:
hgs
parents:
diff changeset
  8088
                    case ELangThai:
hgs
parents:
diff changeset
  8089
                    case ELangVietnamese:
hgs
parents:
diff changeset
  8090
                    case ELangFarsi:
hgs
parents:
diff changeset
  8091
                    case ELangHindi:
hgs
parents:
diff changeset
  8092
                    case ELangUrdu:
hgs
parents:
diff changeset
  8093
                    case ELangRussian:
hgs
parents:
diff changeset
  8094
                    case ELangBulgarian:
hgs
parents:
diff changeset
  8095
                    case ELangUkrainian:
hgs
parents:
diff changeset
  8096
                    case ELangTaiwanChinese:
hgs
parents:
diff changeset
  8097
                    case ELangHongKongChinese:
hgs
parents:
diff changeset
  8098
                    case ELangPrcChinese:
hgs
parents:
diff changeset
  8099
                    case ELangJapanese:
hgs
parents:
diff changeset
  8100
                        {
hgs
parents:
diff changeset
  8101
                        // If the InputLanguage is one of above,
hgs
parents:
diff changeset
  8102
                        // we must check the current input mode too 
hgs
parents:
diff changeset
  8103
                        if ( BodyCtrlEditor() )
hgs
parents:
diff changeset
  8104
                            {
hgs
parents:
diff changeset
  8105
                            if ( BodyCtrlEditor()->AknEditorCurrentInputMode() == 
hgs
parents:
diff changeset
  8106
                                                                EAknEditorHalfWidthTextInputMode )
hgs
parents:
diff changeset
  8107
                                {
hgs
parents:
diff changeset
  8108
                                //Unicode Not required. Characters are within western text set.
hgs
parents:
diff changeset
  8109
                                unicodeMode = EFalse;
hgs
parents:
diff changeset
  8110
                                }
hgs
parents:
diff changeset
  8111
                            else
hgs
parents:
diff changeset
  8112
                                {
hgs
parents:
diff changeset
  8113
                                //Unicode Mode
hgs
parents:
diff changeset
  8114
                                unicodeMode = ETrue;
hgs
parents:
diff changeset
  8115
                                }       
hgs
parents:
diff changeset
  8116
                            }                        
hgs
parents:
diff changeset
  8117
                        break;
hgs
parents:
diff changeset
  8118
                        }
hgs
parents:
diff changeset
  8119
                    default:
hgs
parents:
diff changeset
  8120
                        {
hgs
parents:
diff changeset
  8121
                        break; 
hgs
parents:
diff changeset
  8122
                        }
hgs
parents:
diff changeset
  8123
                    }
hgs
parents:
diff changeset
  8124
                }
hgs
parents:
diff changeset
  8125
            }        
hgs
parents:
diff changeset
  8126
        TInt lengthOne = 0;
hgs
parents:
diff changeset
  8127
        TInt lengthMany = 0;
hgs
parents:
diff changeset
  8128
hgs
parents:
diff changeset
  8129
        doc->SetUnicodeCharacterMode( unicodeMode );    
hgs
parents:
diff changeset
  8130
        doc->SmsCharacterLimits( lengthOne, lengthMany );
hgs
parents:
diff changeset
  8131
hgs
parents:
diff changeset
  8132
        if(numOfPDUs == 0)
hgs
parents:
diff changeset
  8133
            {
hgs
parents:
diff changeset
  8134
            //Empty buffer, need to calculate correct values of "num of PDUs" and "remaining characters" on our own.
hgs
parents:
diff changeset
  8135
            numOfPDUs = 1;
hgs
parents:
diff changeset
  8136
            numOfRemainingChars = lengthOne;
hgs
parents:
diff changeset
  8137
            }
hgs
parents:
diff changeset
  8138
        iNumOfPDUs = numOfPDUs;
hgs
parents:
diff changeset
  8139
        iCharsLeft = numOfRemainingChars;
hgs
parents:
diff changeset
  8140
hgs
parents:
diff changeset
  8141
        if(iNumOfPDUs == 1)
hgs
parents:
diff changeset
  8142
            {
hgs
parents:
diff changeset
  8143
            iSmsBodyLength = lengthOne - iCharsLeft - subjectLength;
hgs
parents:
diff changeset
  8144
            }
hgs
parents:
diff changeset
  8145
        else
hgs
parents:
diff changeset
  8146
            {
hgs
parents:
diff changeset
  8147
            iSmsBodyLength = lengthMany*iNumOfPDUs - iCharsLeft - subjectLength;
hgs
parents:
diff changeset
  8148
            }
hgs
parents:
diff changeset
  8149
        
hgs
parents:
diff changeset
  8150
        iSmsSubjectLength = subjectLength;
hgs
parents:
diff changeset
  8151
        
hgs
parents:
diff changeset
  8152
        }
hgs
parents:
diff changeset
  8153
    else
hgs
parents:
diff changeset
  8154
        {
hgs
parents:
diff changeset
  8155
        TInt extendedChars = 0;
hgs
parents:
diff changeset
  8156
        TInt extendedBodyChars = 0;
hgs
parents:
diff changeset
  8157
        TInt extendedSubjectChars = 0;
hgs
parents:
diff changeset
  8158
        TBool westernText = ETrue;
hgs
parents:
diff changeset
  8159
hgs
parents:
diff changeset
  8160
        CCnvCharacterSetConverter* conv = doc->CharConverter();    
hgs
parents:
diff changeset
  8161
        CCnvCharacterSetConverter::TAvailability  availability;
hgs
parents:
diff changeset
  8162
        availability = conv->PrepareToConvertToOrFromL(KCharacterSetIdentifierExtendedSms7Bit, FsSession());
hgs
parents:
diff changeset
  8163
        if (availability == CCnvCharacterSetConverter::ENotAvailable)
hgs
parents:
diff changeset
  8164
            {
hgs
parents:
diff changeset
  8165
                availability = conv->PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit, FsSession());
hgs
parents:
diff changeset
  8166
                if (availability == CCnvCharacterSetConverter::ENotAvailable)
hgs
parents:
diff changeset
  8167
                    {
hgs
parents:
diff changeset
  8168
                    UNILOGGER_WRITE( "CCnvCharacterSetConverter -> KCharacterSetIdentifierSms7Bit is not available" );
hgs
parents:
diff changeset
  8169
                    }
hgs
parents:
diff changeset
  8170
            }
hgs
parents:
diff changeset
  8171
        if ( conv )
hgs
parents:
diff changeset
  8172
            { 
hgs
parents:
diff changeset
  8173
            for( TInt index = 0; index < KUniEdNumberOfEditors; index++ )
hgs
parents:
diff changeset
  8174
                {
hgs
parents:
diff changeset
  8175
                HBufC* editorTxt = NULL;
hgs
parents:
diff changeset
  8176
                extendedChars = 0;
hgs
parents:
diff changeset
  8177
                
hgs
parents:
diff changeset
  8178
                if ( index == 0 )
hgs
parents:
diff changeset
  8179
                    {
hgs
parents:
diff changeset
  8180
                    if ( BodyCtrlEditor() )
hgs
parents:
diff changeset
  8181
                        {
hgs
parents:
diff changeset
  8182
                        editorTxt = BodyCtrlEditor()->GetTextInHBufL();
hgs
parents:
diff changeset
  8183
                        }
hgs
parents:
diff changeset
  8184
                    }
hgs
parents:
diff changeset
  8185
                else
hgs
parents:
diff changeset
  8186
                    {
hgs
parents:
diff changeset
  8187
                    if ( SubjectCtrlEditor() )
hgs
parents:
diff changeset
  8188
                        {
hgs
parents:
diff changeset
  8189
                        editorTxt = SubjectCtrlEditor()->GetTextInHBufL();
hgs
parents:
diff changeset
  8190
                        }
hgs
parents:
diff changeset
  8191
                    }
hgs
parents:
diff changeset
  8192
hgs
parents:
diff changeset
  8193
                if ( editorTxt )
hgs
parents:
diff changeset
  8194
                    {
hgs
parents:
diff changeset
  8195
                    CleanupStack::PushL( editorTxt );
hgs
parents:
diff changeset
  8196
                    
hgs
parents:
diff changeset
  8197
                    TPtr string = editorTxt->Des();
hgs
parents:
diff changeset
  8198
                    TUint uChar;
hgs
parents:
diff changeset
  8199
                    TBuf8<KUnicodeCheckChars> notUsed;
hgs
parents:
diff changeset
  8200
hgs
parents:
diff changeset
  8201
                    TPtrC remainderOfInputString( string );
hgs
parents:
diff changeset
  8202
                    
hgs
parents:
diff changeset
  8203
                    for ( TInt i = 0; i < remainderOfInputString.Length(); i++ )
hgs
parents:
diff changeset
  8204
                        {
hgs
parents:
diff changeset
  8205
                        uChar = TUint( remainderOfInputString[i] );
hgs
parents:
diff changeset
  8206
                        switch ( uChar )
hgs
parents:
diff changeset
  8207
                            {
hgs
parents:
diff changeset
  8208
                            case KUniEdLeftSquareBracket:
hgs
parents:
diff changeset
  8209
                            case KUniEdReverseSolidus:
hgs
parents:
diff changeset
  8210
                            case KUniEdRightSquareBracket:
hgs
parents:
diff changeset
  8211
                            case KUniEdCircumflexAccent:
hgs
parents:
diff changeset
  8212
                            case KUniEdLeftCurlyBracket:
hgs
parents:
diff changeset
  8213
                            case KUniEdVerticalLine:
hgs
parents:
diff changeset
  8214
                            case KUniEdRightCurlyBracket:
hgs
parents:
diff changeset
  8215
                            case KUniEdTilde:
hgs
parents:
diff changeset
  8216
                            case KUniEdEuroSymbol:
hgs
parents:
diff changeset
  8217
                                {
hgs
parents:
diff changeset
  8218
                                extendedChars++;
hgs
parents:
diff changeset
  8219
                                break;
hgs
parents:
diff changeset
  8220
                                }
hgs
parents:
diff changeset
  8221
                            default:
hgs
parents:
diff changeset
  8222
                                {
hgs
parents:
diff changeset
  8223
                                break;
hgs
parents:
diff changeset
  8224
                                }
hgs
parents:
diff changeset
  8225
                            }
hgs
parents:
diff changeset
  8226
                        }
hgs
parents:
diff changeset
  8227
                    
hgs
parents:
diff changeset
  8228
                    // This is needed in case there's KSmsDownwardsArrowLeft in the end and no other unicode chars
hgs
parents:
diff changeset
  8229
                    TBool unicodeWasInUse = EFalse;
hgs
parents:
diff changeset
  8230
                    
hgs
parents:
diff changeset
  8231
                    while ( remainderOfInputString.Length() )
hgs
parents:
diff changeset
  8232
                        {
hgs
parents:
diff changeset
  8233
                        TInt numberOfUnconvertibleCharacters = 0;
hgs
parents:
diff changeset
  8234
                        const TInt returnValue = conv->ConvertFromUnicode( notUsed,
hgs
parents:
diff changeset
  8235
                                                                           remainderOfInputString, 
hgs
parents:
diff changeset
  8236
                                                                           numberOfUnconvertibleCharacters );
hgs
parents:
diff changeset
  8237
hgs
parents:
diff changeset
  8238
                        if ( numberOfUnconvertibleCharacters > 0 )
hgs
parents:
diff changeset
  8239
                                {
hgs
parents:
diff changeset
  8240
                                for ( TInt i = 0; 
hgs
parents:
diff changeset
  8241
                                      i < remainderOfInputString.Length() && numberOfUnconvertibleCharacters > 0;
hgs
parents:
diff changeset
  8242
                                      i++ )
hgs
parents:
diff changeset
  8243
                                    {
hgs
parents:
diff changeset
  8244
                                    uChar = TUint(remainderOfInputString[i]);
hgs
parents:
diff changeset
  8245
                                    if ( uChar == KSmsDownwardsArrowLeft )
hgs
parents:
diff changeset
  8246
                                        {
hgs
parents:
diff changeset
  8247
                                        // these will be converted to paragraph separators later
hgs
parents:
diff changeset
  8248
                                        numberOfUnconvertibleCharacters--; 
hgs
parents:
diff changeset
  8249
                                        if ( doc->UnicodeCharacterMode() )
hgs
parents:
diff changeset
  8250
                                            {
hgs
parents:
diff changeset
  8251
                                            unicodeWasInUse = ETrue;
hgs
parents:
diff changeset
  8252
                                            }
hgs
parents:
diff changeset
  8253
                                        }
hgs
parents:
diff changeset
  8254
                                    }
hgs
parents:
diff changeset
  8255
                                }
hgs
parents:
diff changeset
  8256
                                
hgs
parents:
diff changeset
  8257
                        if ( returnValue < 0 || 
hgs
parents:
diff changeset
  8258
                             numberOfUnconvertibleCharacters > 0 || 
hgs
parents:
diff changeset
  8259
                             ( unicodeWasInUse && 
hgs
parents:
diff changeset
  8260
                               numberOfUnconvertibleCharacters == 0 ) ) 
hgs
parents:
diff changeset
  8261
                            {
hgs
parents:
diff changeset
  8262
                            // if there was an error in trying to do the conversion, or if there was an
hgs
parents:
diff changeset
  8263
                            // unconvertible character (e.g. a Chinese character)
hgs
parents:
diff changeset
  8264
                            westernText = EFalse;
hgs
parents:
diff changeset
  8265
                            break;
hgs
parents:
diff changeset
  8266
                            }
hgs
parents:
diff changeset
  8267
                            
hgs
parents:
diff changeset
  8268
                        remainderOfInputString.Set( remainderOfInputString.Right( returnValue ) );
hgs
parents:
diff changeset
  8269
                        }
hgs
parents:
diff changeset
  8270
hgs
parents:
diff changeset
  8271
                    if ( index == 0 )
hgs
parents:
diff changeset
  8272
                        {
hgs
parents:
diff changeset
  8273
                        extendedBodyChars = extendedChars;
hgs
parents:
diff changeset
  8274
                        }
hgs
parents:
diff changeset
  8275
                    else
hgs
parents:
diff changeset
  8276
                        {
hgs
parents:
diff changeset
  8277
                        extendedSubjectChars = extendedChars;
hgs
parents:
diff changeset
  8278
                        }
hgs
parents:
diff changeset
  8279
                        
hgs
parents:
diff changeset
  8280
                    CleanupStack::PopAndDestroy( editorTxt );
hgs
parents:
diff changeset
  8281
                    }
hgs
parents:
diff changeset
  8282
                else if ( index == 0 )
hgs
parents:
diff changeset
  8283
                    { 
hgs
parents:
diff changeset
  8284
                    // Bodytext is zero -> check input language
hgs
parents:
diff changeset
  8285
                    TInt inputLang = iAvkonEnv->SettingCache().InputLanguage();
hgs
parents:
diff changeset
  8286
                    switch ( inputLang )
hgs
parents:
diff changeset
  8287
                        {
hgs
parents:
diff changeset
  8288
                        case ELangArabic:
hgs
parents:
diff changeset
  8289
                        case ELangHebrew:
hgs
parents:
diff changeset
  8290
                        case ELangThai:
hgs
parents:
diff changeset
  8291
                        case ELangVietnamese:
hgs
parents:
diff changeset
  8292
                        case ELangFarsi:
hgs
parents:
diff changeset
  8293
                        case ELangHindi:
hgs
parents:
diff changeset
  8294
                        case ELangUrdu:
hgs
parents:
diff changeset
  8295
                        case ELangRussian:
hgs
parents:
diff changeset
  8296
                        case ELangBulgarian:
hgs
parents:
diff changeset
  8297
                        case ELangUkrainian:
hgs
parents:
diff changeset
  8298
                        case ELangTaiwanChinese:
hgs
parents:
diff changeset
  8299
                        case ELangHongKongChinese:
hgs
parents:
diff changeset
  8300
                        case ELangPrcChinese:
hgs
parents:
diff changeset
  8301
                        case ELangJapanese:
hgs
parents:
diff changeset
  8302
                            {
hgs
parents:
diff changeset
  8303
                            // If the InputLanguage is one of above,
hgs
parents:
diff changeset
  8304
                            // we must check the current input mode too 
hgs
parents:
diff changeset
  8305
                            if ( BodyCtrlEditor() )
hgs
parents:
diff changeset
  8306
                                {
hgs
parents:
diff changeset
  8307
                                if ( BodyCtrlEditor()->AknEditorCurrentInputMode() == 
hgs
parents:
diff changeset
  8308
                                                                    EAknEditorHalfWidthTextInputMode )
hgs
parents:
diff changeset
  8309
                                    {
hgs
parents:
diff changeset
  8310
                                    westernText = ETrue;
hgs
parents:
diff changeset
  8311
                                    }
hgs
parents:
diff changeset
  8312
                                else
hgs
parents:
diff changeset
  8313
                                    {
hgs
parents:
diff changeset
  8314
                                    westernText = EFalse;
hgs
parents:
diff changeset
  8315
                                    }       
hgs
parents:
diff changeset
  8316
                                }                        
hgs
parents:
diff changeset
  8317
                            break;
hgs
parents:
diff changeset
  8318
                            }
hgs
parents:
diff changeset
  8319
                        default:
hgs
parents:
diff changeset
  8320
                            {
hgs
parents:
diff changeset
  8321
                            break; 
hgs
parents:
diff changeset
  8322
                            }
hgs
parents:
diff changeset
  8323
                        }
hgs
parents:
diff changeset
  8324
                    }            
hgs
parents:
diff changeset
  8325
                }
hgs
parents:
diff changeset
  8326
                // Now we have westernText and extendedChars set
hgs
parents:
diff changeset
  8327
            }
hgs
parents:
diff changeset
  8328
            
hgs
parents:
diff changeset
  8329
        if ( westernText )
hgs
parents:
diff changeset
  8330
            {
hgs
parents:
diff changeset
  8331
            // Might not infact change the unicode character mode
hgs
parents:
diff changeset
  8332
            // if maximum SMS character limit is set that forces
hgs
parents:
diff changeset
  8333
            // the mode to be always unicode.
hgs
parents:
diff changeset
  8334
            doc->SetUnicodeCharacterMode( EFalse );
hgs
parents:
diff changeset
  8335
            }
hgs
parents:
diff changeset
  8336
        else
hgs
parents:
diff changeset
  8337
            {
hgs
parents:
diff changeset
  8338
            // Unicode mode
hgs
parents:
diff changeset
  8339
            doc->SetUnicodeCharacterMode( ETrue );
hgs
parents:
diff changeset
  8340
            
hgs
parents:
diff changeset
  8341
            // We need unicode so discard extended chars
hgs
parents:
diff changeset
  8342
            extendedBodyChars = 0; 
hgs
parents:
diff changeset
  8343
            extendedSubjectChars = 0;
hgs
parents:
diff changeset
  8344
            }
hgs
parents:
diff changeset
  8345
hgs
parents:
diff changeset
  8346
        static_cast<CUniSmsPlugin*>( SmsPlugin() )->SetUnicodeMode( doc->UnicodeCharacterMode() );
hgs
parents:
diff changeset
  8347
        
hgs
parents:
diff changeset
  8348
        if ( BodyCtrlEditor() )
hgs
parents:
diff changeset
  8349
            {
hgs
parents:
diff changeset
  8350
            iSmsBodyLength = BodyCtrlEditor()->TextLength() + extendedBodyChars;
hgs
parents:
diff changeset
  8351
            }
hgs
parents:
diff changeset
  8352
        else
hgs
parents:
diff changeset
  8353
            {
hgs
parents:
diff changeset
  8354
            iSmsBodyLength = 0;
hgs
parents:
diff changeset
  8355
            }
hgs
parents:
diff changeset
  8356
            
hgs
parents:
diff changeset
  8357
        iSmsSubjectLength = 0;
hgs
parents:
diff changeset
  8358
        
hgs
parents:
diff changeset
  8359
        if( SubjectCtrlEditor() && 
hgs
parents:
diff changeset
  8360
            SubjectCtrlEditor()->TextLength() )
hgs
parents:
diff changeset
  8361
            { 
hgs
parents:
diff changeset
  8362
            // EmailOverSms is supported if when end up here
hgs
parents:
diff changeset
  8363
            iSmsSubjectLength = SubjectCtrlEditor()->TextLength() 
hgs
parents:
diff changeset
  8364
                                + extendedSubjectChars
hgs
parents:
diff changeset
  8365
                                + KUniEdExtraLenCausedBySubject; // the extra because of '(' and ')'
hgs
parents:
diff changeset
  8366
            }        
hgs
parents:
diff changeset
  8367
        }
hgs
parents:
diff changeset
  8368
    UNILOGGER_WRITE_TIMESTAMP("CUniEditorAppUi::CheckSmsSizeAndUnicodeL End ---->>> ");
hgs
parents:
diff changeset
  8369
    }
hgs
parents:
diff changeset
  8370
hgs
parents:
diff changeset
  8371
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8372
// CUniEditorAppUi::CheckHeaderForMessageTypeL
hgs
parents:
diff changeset
  8373
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8374
//
hgs
parents:
diff changeset
  8375
void CUniEditorAppUi::CheckHeaderForMessageTypeL()
hgs
parents:
diff changeset
  8376
    {
hgs
parents:
diff changeset
  8377
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  8378
    
hgs
parents:
diff changeset
  8379
    if( iMtm->MessageTypeSetting() != EUniMessageTypeSettingAutomatic )
hgs
parents:
diff changeset
  8380
        { // We are in locked mode so refresh email addr length and return
hgs
parents:
diff changeset
  8381
        iHeader->RefreshLongestEmailAddressL();
hgs
parents:
diff changeset
  8382
        return;
hgs
parents:
diff changeset
  8383
        }
hgs
parents:
diff changeset
  8384
hgs
parents:
diff changeset
  8385
    // We are in automatic mode so lets check everything
hgs
parents:
diff changeset
  8386
    TUniState oldState = doc->UniState();
hgs
parents:
diff changeset
  8387
hgs
parents:
diff changeset
  8388
    if( iHeader->IsHeaderSmsL() )
hgs
parents:
diff changeset
  8389
        {   // Set current header state as sms
hgs
parents:
diff changeset
  8390
        doc->SetHeaderUniState( EUniSms );
hgs
parents:
diff changeset
  8391
        }
hgs
parents:
diff changeset
  8392
    else
hgs
parents:
diff changeset
  8393
        {   // Set current header state as mms
hgs
parents:
diff changeset
  8394
        doc->SetHeaderUniState( EUniMms );
hgs
parents:
diff changeset
  8395
        }
hgs
parents:
diff changeset
  8396
hgs
parents:
diff changeset
  8397
    if( oldState != doc->UniState() )
hgs
parents:
diff changeset
  8398
        {   // If the state is not the same anymore, update title and show popup
hgs
parents:
diff changeset
  8399
        SetTitleL();
hgs
parents:
diff changeset
  8400
        UpdateIndicatorIconsL();
hgs
parents:
diff changeset
  8401
        ShowPopupNoteL( doc->UniState()==EUniMms?ETrue:EFalse );
hgs
parents:
diff changeset
  8402
        UpdateToolbarL();
hgs
parents:
diff changeset
  8403
        }
hgs
parents:
diff changeset
  8404
    }
hgs
parents:
diff changeset
  8405
hgs
parents:
diff changeset
  8406
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8407
// CUniEditorAppUi::CheckBodyForMessageTypeL
hgs
parents:
diff changeset
  8408
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8409
//
hgs
parents:
diff changeset
  8410
void CUniEditorAppUi::CheckBodyForMessageTypeL()
hgs
parents:
diff changeset
  8411
    {
hgs
parents:
diff changeset
  8412
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  8413
    
hgs
parents:
diff changeset
  8414
    TUniMessageTypeSetting setting = iMtm->MessageTypeSetting();
hgs
parents:
diff changeset
  8415
hgs
parents:
diff changeset
  8416
    if( IsHardcodedSms() )
hgs
parents:
diff changeset
  8417
        { // Just update iSmsLength and possible unicode mode
hgs
parents:
diff changeset
  8418
        CheckSmsSizeAndUnicodeL();
hgs
parents:
diff changeset
  8419
        return;
hgs
parents:
diff changeset
  8420
        }
hgs
parents:
diff changeset
  8421
    
hgs
parents:
diff changeset
  8422
    if( setting == EUniMessageTypeSettingMms )
hgs
parents:
diff changeset
  8423
        { // We are in locked mode so just leave
hgs
parents:
diff changeset
  8424
        UpdateToolbarL();
hgs
parents:
diff changeset
  8425
        return;
hgs
parents:
diff changeset
  8426
        }
hgs
parents:
diff changeset
  8427
hgs
parents:
diff changeset
  8428
    TUniState oldState = doc->UniState();
hgs
parents:
diff changeset
  8429
hgs
parents:
diff changeset
  8430
    if( IsBodySmsCompatibleL() )
hgs
parents:
diff changeset
  8431
        {   // Set current body state as sms
hgs
parents:
diff changeset
  8432
        doc->SetBodyUniState( EUniSms );
hgs
parents:
diff changeset
  8433
        }
hgs
parents:
diff changeset
  8434
    else
hgs
parents:
diff changeset
  8435
        {   // Set current body state as mms
hgs
parents:
diff changeset
  8436
        doc->SetBodyUniState( EUniMms );
hgs
parents:
diff changeset
  8437
        }
hgs
parents:
diff changeset
  8438
hgs
parents:
diff changeset
  8439
    if( oldState != doc->UniState() )
hgs
parents:
diff changeset
  8440
        {   // If the state is not the same anymore, update title and show popup
hgs
parents:
diff changeset
  8441
        SetTitleL();
hgs
parents:
diff changeset
  8442
        UpdateIndicatorIconsL();
hgs
parents:
diff changeset
  8443
        ShowPopupNoteL( doc->UniState()==EUniMms?ETrue:EFalse );
hgs
parents:
diff changeset
  8444
        UpdateToolbarL();
hgs
parents:
diff changeset
  8445
        
hgs
parents:
diff changeset
  8446
        if( iNLTFeatureSupport )
hgs
parents:
diff changeset
  8447
            {
hgs
parents:
diff changeset
  8448
            //Turkish SMS-PREQ2265 specific
hgs
parents:
diff changeset
  8449
            if(doc->UniState() == EUniSms)
hgs
parents:
diff changeset
  8450
                {
hgs
parents:
diff changeset
  8451
                //If the new state is SMS, Reset the SMS Settings and update the message length info 
hgs
parents:
diff changeset
  8452
                if(doc->SmsPlugin())
hgs
parents:
diff changeset
  8453
                    {
hgs
parents:
diff changeset
  8454
                    doc->SmsPlugin()->SetEncodingSettings(EFalse, doc->AlternativeEncodingType(), doc->CharSetSupport());
hgs
parents:
diff changeset
  8455
                    }
hgs
parents:
diff changeset
  8456
                //Force to recalculate the SMS PDU info
hgs
parents:
diff changeset
  8457
                CheckSmsSizeAndUnicodeL();
hgs
parents:
diff changeset
  8458
                MsgLengthToNavipaneL( );
hgs
parents:
diff changeset
  8459
                }
hgs
parents:
diff changeset
  8460
            }
hgs
parents:
diff changeset
  8461
        }
hgs
parents:
diff changeset
  8462
    }
hgs
parents:
diff changeset
  8463
hgs
parents:
diff changeset
  8464
// ----------------------------------------------------
hgs
parents:
diff changeset
  8465
// CUniEditorAppUi::CreateMmsNaviSizeStringL
hgs
parents:
diff changeset
  8466
// 
hgs
parents:
diff changeset
  8467
// Rounds always up
hgs
parents:
diff changeset
  8468
// 0.00000 -> 0
hgs
parents:
diff changeset
  8469
// 0.00001 -> 0.1
hgs
parents:
diff changeset
  8470
// ..
hgs
parents:
diff changeset
  8471
// 0.10000 -> 0.1
hgs
parents:
diff changeset
  8472
// 0.10001 -> 0.2
hgs
parents:
diff changeset
  8473
// ..
hgs
parents:
diff changeset
  8474
// 9.89999 -> 9.9
hgs
parents:
diff changeset
  8475
// 9.90000 -> 9.9
hgs
parents:
diff changeset
  8476
// 9.90001 -> 10
hgs
parents:
diff changeset
  8477
//
hgs
parents:
diff changeset
  8478
// ----------------------------------------------------
hgs
parents:
diff changeset
  8479
//
hgs
parents:
diff changeset
  8480
void CUniEditorAppUi::CreateMmsNaviSizeStringL( const TInt aSizeInBytes,
hgs
parents:
diff changeset
  8481
                                                TDes& aSize,
hgs
parents:
diff changeset
  8482
                                                TInt& aInteger,
hgs
parents:
diff changeset
  8483
                                                TInt& aFragment )
hgs
parents:
diff changeset
  8484
    {
hgs
parents:
diff changeset
  8485
    aSize.Zero();
hgs
parents:
diff changeset
  8486
hgs
parents:
diff changeset
  8487
    // Integer part
hgs
parents:
diff changeset
  8488
    aInteger = aSizeInBytes / KBytesInKilo;
hgs
parents:
diff changeset
  8489
    // Up rounded fragment part -> can be 10:
hgs
parents:
diff changeset
  8490
    aFragment = ( ( aSizeInBytes % KBytesInKilo ) * 10 + KBytesInKilo - 1) / KBytesInKilo;
hgs
parents:
diff changeset
  8491
hgs
parents:
diff changeset
  8492
    if ( aFragment >= 10 )
hgs
parents:
diff changeset
  8493
        {
hgs
parents:
diff changeset
  8494
        aInteger++;
hgs
parents:
diff changeset
  8495
        aFragment = 0;
hgs
parents:
diff changeset
  8496
        }
hgs
parents:
diff changeset
  8497
hgs
parents:
diff changeset
  8498
    if ( aInteger >= KOneDigitLimit )
hgs
parents:
diff changeset
  8499
        {
hgs
parents:
diff changeset
  8500
        // Show msg size without one digit accuracy
hgs
parents:
diff changeset
  8501
        if ( aFragment )
hgs
parents:
diff changeset
  8502
            {
hgs
parents:
diff changeset
  8503
            aInteger++;
hgs
parents:
diff changeset
  8504
            aFragment = 0;
hgs
parents:
diff changeset
  8505
            }
hgs
parents:
diff changeset
  8506
        MsgAttachmentUtils::FileSizeToStringL( aSize, aInteger * KBytesInKilo, ETrue );
hgs
parents:
diff changeset
  8507
        }
hgs
parents:
diff changeset
  8508
    else if ( aInteger != 0 || aFragment != 0 )
hgs
parents:
diff changeset
  8509
        {
hgs
parents:
diff changeset
  8510
        // There is some content and size is between 0 - 10 kB
hgs
parents:
diff changeset
  8511
        TLocale loc;
hgs
parents:
diff changeset
  8512
        TBuf<1> sep;
hgs
parents:
diff changeset
  8513
        sep.Append( loc.DecimalSeparator() );
hgs
parents:
diff changeset
  8514
hgs
parents:
diff changeset
  8515
        StringLoader::Format( aSize, *iMmsLengthFormatBuffer, 0, aInteger );
hgs
parents:
diff changeset
  8516
        HBufC* temp = aSize.AllocLC();
hgs
parents:
diff changeset
  8517
        StringLoader::Format( aSize, *temp, 2, aFragment );
hgs
parents:
diff changeset
  8518
        CleanupStack::PopAndDestroy();
hgs
parents:
diff changeset
  8519
        temp = aSize.AllocLC();
hgs
parents:
diff changeset
  8520
        StringLoader::Format( aSize, *temp, 1, sep );
hgs
parents:
diff changeset
  8521
        CleanupStack::PopAndDestroy();
hgs
parents:
diff changeset
  8522
        temp = NULL;
hgs
parents:
diff changeset
  8523
        }
hgs
parents:
diff changeset
  8524
    else
hgs
parents:
diff changeset
  8525
        {
hgs
parents:
diff changeset
  8526
        // Empty msg
hgs
parents:
diff changeset
  8527
        MsgAttachmentUtils::FileSizeToStringL( aSize, 0, ETrue );
hgs
parents:
diff changeset
  8528
        }
hgs
parents:
diff changeset
  8529
    }
hgs
parents:
diff changeset
  8530
                                        
hgs
parents:
diff changeset
  8531
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8532
// CUniEditorAppUi::DoToolbarInsertOtherL
hgs
parents:
diff changeset
  8533
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8534
//
hgs
parents:
diff changeset
  8535
void CUniEditorAppUi::DoToolbarInsertOtherL()
hgs
parents:
diff changeset
  8536
    {
hgs
parents:
diff changeset
  8537
    RArray<TInt> disabledItems;
hgs
parents:
diff changeset
  8538
    CleanupClosePushL( disabledItems );
hgs
parents:
diff changeset
  8539
    
hgs
parents:
diff changeset
  8540
    TInt toolbarResourceId( KErrNotFound );
hgs
parents:
diff changeset
  8541
    
hgs
parents:
diff changeset
  8542
    if ( AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
  8543
        {
hgs
parents:
diff changeset
  8544
        toolbarResourceId = R_UNIEDITOR_INSERT_OTHER_QUERY;
hgs
parents:
diff changeset
  8545
hgs
parents:
diff changeset
  8546
//        if ( Document()->CreationMode() == EMmsCreationModeRestricted )
hgs
parents:
diff changeset
  8547
//            {
hgs
parents:
diff changeset
  8548
//            disabledItems.Append( EUniCmdToolbarOtherFetchSVG );
hgs
parents:
diff changeset
  8549
//            }        
hgs
parents:
diff changeset
  8550
        }    
hgs
parents:
diff changeset
  8551
    
hgs
parents:
diff changeset
  8552
    TInt selectedIndex( 0 );
hgs
parents:
diff changeset
  8553
    CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog( &selectedIndex );
hgs
parents:
diff changeset
  8554
    dlg->PrepareLC( toolbarResourceId );
hgs
parents:
diff changeset
  8555
    
hgs
parents:
diff changeset
  8556
    CEikFormattedCellListBox* listbox = dlg->ListControl()->Listbox();
hgs
parents:
diff changeset
  8557
    CDesCArray* itemArray = static_cast<CDesCArray*>( listbox->Model()->ItemTextArray() );
hgs
parents:
diff changeset
  8558
    
hgs
parents:
diff changeset
  8559
    if ( disabledItems.Count() > 0 )
hgs
parents:
diff changeset
  8560
        {
hgs
parents:
diff changeset
  8561
        for ( TInt currentItem = 0; currentItem < disabledItems.Count(); currentItem++ )
hgs
parents:
diff changeset
  8562
            {
hgs
parents:
diff changeset
  8563
            itemArray->Delete( disabledItems[ currentItem ] );
hgs
parents:
diff changeset
  8564
            listbox->HandleItemRemovalL();
hgs
parents:
diff changeset
  8565
            }
hgs
parents:
diff changeset
  8566
        }
hgs
parents:
diff changeset
  8567
        
hgs
parents:
diff changeset
  8568
    if ( dlg->RunLD() )
hgs
parents:
diff changeset
  8569
        {
hgs
parents:
diff changeset
  8570
        for ( TInt currentItem = disabledItems.Count() - 1; currentItem >= 0 ; currentItem-- )
hgs
parents:
diff changeset
  8571
            {
hgs
parents:
diff changeset
  8572
            if ( selectedIndex >= disabledItems[ currentItem ] )
hgs
parents:
diff changeset
  8573
                {
hgs
parents:
diff changeset
  8574
                selectedIndex++;
hgs
parents:
diff changeset
  8575
                }
hgs
parents:
diff changeset
  8576
            }
hgs
parents:
diff changeset
  8577
        
hgs
parents:
diff changeset
  8578
        switch ( selectedIndex )    
hgs
parents:
diff changeset
  8579
            {
hgs
parents:
diff changeset
  8580
//            case EUniCmdToolbarOtherFetchSVG:
hgs
parents:
diff changeset
  8581
//                {
hgs
parents:
diff changeset
  8582
//                DoUserInsertSvgL();
hgs
parents:
diff changeset
  8583
//                break;
hgs
parents:
diff changeset
  8584
//                }
hgs
parents:
diff changeset
  8585
            case EUniCmdToolbarOtherFetchTextAtta:
hgs
parents:
diff changeset
  8586
                {
hgs
parents:
diff changeset
  8587
                DoUserInsertOtherFileL( ETextFile );
hgs
parents:
diff changeset
  8588
                break;
hgs
parents:
diff changeset
  8589
                }
hgs
parents:
diff changeset
  8590
            case EUniCmdToolbarOtherFetchOtherFiles:
hgs
parents:
diff changeset
  8591
                {
hgs
parents:
diff changeset
  8592
                DoUserInsertOtherFileL( EOtherFile );
hgs
parents:
diff changeset
  8593
                break;
hgs
parents:
diff changeset
  8594
                }
hgs
parents:
diff changeset
  8595
            default:
hgs
parents:
diff changeset
  8596
                {
hgs
parents:
diff changeset
  8597
                __ASSERT_DEBUG( EFalse, Panic( EUniUnsupportedCommand ) );
hgs
parents:
diff changeset
  8598
                break;
hgs
parents:
diff changeset
  8599
                }
hgs
parents:
diff changeset
  8600
            }
hgs
parents:
diff changeset
  8601
        }
hgs
parents:
diff changeset
  8602
        
hgs
parents:
diff changeset
  8603
    CleanupStack::PopAndDestroy( &disabledItems );
hgs
parents:
diff changeset
  8604
    }
hgs
parents:
diff changeset
  8605
hgs
parents:
diff changeset
  8606
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8607
// CUniEditorAppUi::ShowListQueryL
hgs
parents:
diff changeset
  8608
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8609
//
hgs
parents:
diff changeset
  8610
TBool CUniEditorAppUi::ShowListQueryL( TInt aResourceID, TInt& aSelectedIndex ) const
hgs
parents:
diff changeset
  8611
    {
hgs
parents:
diff changeset
  8612
    CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog( &aSelectedIndex );
hgs
parents:
diff changeset
  8613
    dlg->PrepareLC( aResourceID );
hgs
parents:
diff changeset
  8614
    return dlg->RunLD();
hgs
parents:
diff changeset
  8615
    }
hgs
parents:
diff changeset
  8616
hgs
parents:
diff changeset
  8617
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8618
// CUniEditorAppUi::HidePopupNote
hgs
parents:
diff changeset
  8619
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8620
//
hgs
parents:
diff changeset
  8621
void CUniEditorAppUi::HidePopupNote()
hgs
parents:
diff changeset
  8622
    {
hgs
parents:
diff changeset
  8623
    if( iPopupNote )
hgs
parents:
diff changeset
  8624
        {
hgs
parents:
diff changeset
  8625
        iPopupNote->HideInfoPopupNote();    
hgs
parents:
diff changeset
  8626
        }
hgs
parents:
diff changeset
  8627
    }
hgs
parents:
diff changeset
  8628
    
hgs
parents:
diff changeset
  8629
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8630
// CUniEditorAppUi::ShowPopupNoteL
hgs
parents:
diff changeset
  8631
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8632
//
hgs
parents:
diff changeset
  8633
void CUniEditorAppUi::ShowPopupNoteL( TBool aMms )
hgs
parents:
diff changeset
  8634
    {
hgs
parents:
diff changeset
  8635
    if( iPopupNote && iPopupChangedMmsBuffer )
hgs
parents:
diff changeset
  8636
        {
hgs
parents:
diff changeset
  8637
        // additional check  iPopupChangedMmsBuffer is required as iPopupNote
hgs
parents:
diff changeset
  8638
        // will be intialized in ConstructL but not iPopupChangedMmsBuffer.
hgs
parents:
diff changeset
  8639
        // This change is done as part of Korean req.
hgs
parents:
diff changeset
  8640
            ShowDiscreetPopUpL(aMms? iPopupChangedMmsBuffer->Des(): iPopupChangedSmsBuffer->Des());
hgs
parents:
diff changeset
  8641
        }
hgs
parents:
diff changeset
  8642
    }
hgs
parents:
diff changeset
  8643
 
hgs
parents:
diff changeset
  8644
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8645
// CUniEditorAppUi::PlayFocusedItemL
hgs
parents:
diff changeset
  8646
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8647
//
hgs
parents:
diff changeset
  8648
void CUniEditorAppUi::PlayFocusedItemL()
hgs
parents:
diff changeset
  8649
    {
hgs
parents:
diff changeset
  8650
    if ( Document()->DataModel()->SmilType() == E3GPPSmil ||
hgs
parents:
diff changeset
  8651
         Document()->DataModel()->SmilType() == ETemplateSmil )
hgs
parents:
diff changeset
  8652
        { 
hgs
parents:
diff changeset
  8653
        // There's presentation focused -> play it        
hgs
parents:
diff changeset
  8654
        PlayPresentationL();
hgs
parents:
diff changeset
  8655
        return;
hgs
parents:
diff changeset
  8656
        }
hgs
parents:
diff changeset
  8657
hgs
parents:
diff changeset
  8658
    CMsgBaseControl* ctrl = iView->FocusedControl();
hgs
parents:
diff changeset
  8659
hgs
parents:
diff changeset
  8660
    TUniRegion region = EUniRegionImage;
hgs
parents:
diff changeset
  8661
hgs
parents:
diff changeset
  8662
    if ( ctrl )
hgs
parents:
diff changeset
  8663
        {
hgs
parents:
diff changeset
  8664
        switch ( ctrl->ControlId() )
hgs
parents:
diff changeset
  8665
            {
hgs
parents:
diff changeset
  8666
            case EMsgComponentIdAudio:
hgs
parents:
diff changeset
  8667
                {
hgs
parents:
diff changeset
  8668
                region = EUniRegionAudio;
hgs
parents:
diff changeset
  8669
                }
hgs
parents:
diff changeset
  8670
            case EMsgComponentIdImage:
hgs
parents:
diff changeset
  8671
            case EMsgComponentIdVideo:
hgs
parents:
diff changeset
  8672
            case EMsgComponentIdSvg:
hgs
parents:
diff changeset
  8673
                {
hgs
parents:
diff changeset
  8674
                CUniObject* obj = iSmilModel->GetObject( Document()->CurrentSlide(), region );
hgs
parents:
diff changeset
  8675
                // Coverty fix, Null pointer return , http://ousrv057/cov.cgi?cid=37100
hgs
parents:
diff changeset
  8676
                if(obj)
hgs
parents:
diff changeset
  8677
                {
hgs
parents:
diff changeset
  8678
                  if( obj->Corrupted() )
hgs
parents:
diff changeset
  8679
                    { // Object is corrupt -> just show note
hgs
parents:
diff changeset
  8680
                    ShowInformationNoteL( R_UNIEDITOR_CANNOT_OPEN_CORRUPT, EFalse );
hgs
parents:
diff changeset
  8681
                    }
hgs
parents:
diff changeset
  8682
                  else
hgs
parents:
diff changeset
  8683
                    {
hgs
parents:
diff changeset
  8684
                    RFile file = CUniDataUtils::GetAttachmentFileL( Document()->DataModel()->Mtm(), obj->AttachmentId() );
hgs
parents:
diff changeset
  8685
                    CleanupClosePushL( file );
hgs
parents:
diff changeset
  8686
                    TDataType dataType( obj->MimeType() );
hgs
parents:
diff changeset
  8687
                    
hgs
parents:
diff changeset
  8688
                    if ( !iDocHandler )
hgs
parents:
diff changeset
  8689
                        {
hgs
parents:
diff changeset
  8690
                        iDocHandler = CDocumentHandler::NewL( iEikonEnv->Process() );
hgs
parents:
diff changeset
  8691
                        iDocHandler->SetExitObserver( this );
hgs
parents:
diff changeset
  8692
                        }
hgs
parents:
diff changeset
  8693
                    
hgs
parents:
diff changeset
  8694
                    if ( obj->DrmInfo() )
hgs
parents:
diff changeset
  8695
                        {
hgs
parents:
diff changeset
  8696
                        obj->DrmInfo()->ReleaseRights();
hgs
parents:
diff changeset
  8697
                        }
hgs
parents:
diff changeset
  8698
                    
hgs
parents:
diff changeset
  8699
                   // Since Activating input blockers will block the command CEIkCmdEXit. So used the flag 
hgs
parents:
diff changeset
  8700
                   //ActivateInputBlockerL( NULL );
hgs
parents:
diff changeset
  8701
                    iEditorFlags |= EMsgEditInProgress;
hgs
parents:
diff changeset
  8702
                    TRAPD(ret,iDocHandler->OpenFileEmbeddedL( file, dataType ));
hgs
parents:
diff changeset
  8703
                    
hgs
parents:
diff changeset
  8704
                    CleanupStack::PopAndDestroy( &file );
hgs
parents:
diff changeset
  8705
                    
hgs
parents:
diff changeset
  8706
                    if(ret != KErrNone)
hgs
parents:
diff changeset
  8707
                        {
hgs
parents:
diff changeset
  8708
                         iEditorFlags &= ~EMsgEditInProgress;   
hgs
parents:
diff changeset
  8709
                         //  DeactivateInputBlocker();
hgs
parents:
diff changeset
  8710
                        }
hgs
parents:
diff changeset
  8711
                    }
hgs
parents:
diff changeset
  8712
                  }
hgs
parents:
diff changeset
  8713
                break;
hgs
parents:
diff changeset
  8714
                }
hgs
parents:
diff changeset
  8715
            default:
hgs
parents:
diff changeset
  8716
                {
hgs
parents:
diff changeset
  8717
                break;
hgs
parents:
diff changeset
  8718
                }
hgs
parents:
diff changeset
  8719
            }
hgs
parents:
diff changeset
  8720
        }
hgs
parents:
diff changeset
  8721
    }
hgs
parents:
diff changeset
  8722
hgs
parents:
diff changeset
  8723
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8724
// CUniEditorAppUi::CheckMaxSmsSizeAndShowNoteL
hgs
parents:
diff changeset
  8725
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8726
//
hgs
parents:
diff changeset
  8727
void CUniEditorAppUi::CheckMaxSmsSizeAndShowNoteL( TBool aSendCheck /*= EFalse*/ )
hgs
parents:
diff changeset
  8728
    {
hgs
parents:
diff changeset
  8729
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  8730
hgs
parents:
diff changeset
  8731
    if( !aSendCheck )
hgs
parents:
diff changeset
  8732
        {
hgs
parents:
diff changeset
  8733
        if( !IsHardcodedSms() )
hgs
parents:
diff changeset
  8734
            { // Just return
hgs
parents:
diff changeset
  8735
            iEditorFlags &= ~EMaxSmsSizeNoteShown;
hgs
parents:
diff changeset
  8736
            return;
hgs
parents:
diff changeset
  8737
            }
hgs
parents:
diff changeset
  8738
        }
hgs
parents:
diff changeset
  8739
    else
hgs
parents:
diff changeset
  8740
        {
hgs
parents:
diff changeset
  8741
        if( Document()->UniState() != EUniSms )
hgs
parents:
diff changeset
  8742
            { // UniState is MMS -> just return
hgs
parents:
diff changeset
  8743
            iEditorFlags &= ~EMaxSmsSizeNoteShown;
hgs
parents:
diff changeset
  8744
            return;
hgs
parents:
diff changeset
  8745
            }
hgs
parents:
diff changeset
  8746
        }
hgs
parents:
diff changeset
  8747
    
hgs
parents:
diff changeset
  8748
    TInt lengthOne( 0 );
hgs
parents:
diff changeset
  8749
    TInt lengthMany( 0 );
hgs
parents:
diff changeset
  8750
    
hgs
parents:
diff changeset
  8751
    doc->SmsCharacterLimits( lengthOne, lengthMany );
hgs
parents:
diff changeset
  8752
hgs
parents:
diff changeset
  8753
    TInt maxLen = lengthOne;
hgs
parents:
diff changeset
  8754
  
hgs
parents:
diff changeset
  8755
    if( doc->AbsoluteMaxSmsParts() > 1 )
hgs
parents:
diff changeset
  8756
        {
hgs
parents:
diff changeset
  8757
        maxLen = doc->AbsoluteMaxSmsParts()*lengthMany;
hgs
parents:
diff changeset
  8758
        }
hgs
parents:
diff changeset
  8759
    
hgs
parents:
diff changeset
  8760
    if ( doc->AbsoluteMaxSmsCharacters() > 0 )
hgs
parents:
diff changeset
  8761
        {
hgs
parents:
diff changeset
  8762
        maxLen = doc->AbsoluteMaxSmsCharacters();
hgs
parents:
diff changeset
  8763
        }
hgs
parents:
diff changeset
  8764
    
hgs
parents:
diff changeset
  8765
    TInt totalLen = iSmsBodyLength + iSmsSubjectLength;
hgs
parents:
diff changeset
  8766
hgs
parents:
diff changeset
  8767
    if( doc->EmailOverSmsSupported() )
hgs
parents:
diff changeset
  8768
        {
hgs
parents:
diff changeset
  8769
        // This length is needed by recipient and subject separator chars
hgs
parents:
diff changeset
  8770
        TInt separatorLen = 0;
hgs
parents:
diff changeset
  8771
hgs
parents:
diff changeset
  8772
        TInt emailAddrLen = iHeader->LongestEmailAddress();
hgs
parents:
diff changeset
  8773
        
hgs
parents:
diff changeset
  8774
        if( emailAddrLen )
hgs
parents:
diff changeset
  8775
            {
hgs
parents:
diff changeset
  8776
            separatorLen++; // one extra char needed by separator char
hgs
parents:
diff changeset
  8777
            }
hgs
parents:
diff changeset
  8778
hgs
parents:
diff changeset
  8779
        totalLen += emailAddrLen + separatorLen;
hgs
parents:
diff changeset
  8780
        }
hgs
parents:
diff changeset
  8781
hgs
parents:
diff changeset
  8782
    if( totalLen <= maxLen-1 )
hgs
parents:
diff changeset
  8783
        { // Length is under the max size -> just return
hgs
parents:
diff changeset
  8784
        iEditorFlags &= ~EMaxSmsSizeNoteShown;
hgs
parents:
diff changeset
  8785
        return;
hgs
parents:
diff changeset
  8786
        }
hgs
parents:
diff changeset
  8787
hgs
parents:
diff changeset
  8788
    if( !aSendCheck && iEditorFlags & EMaxSmsSizeNoteShown )
hgs
parents:
diff changeset
  8789
        { // The note has been shown -> just return
hgs
parents:
diff changeset
  8790
        return;                
hgs
parents:
diff changeset
  8791
        }
hgs
parents:
diff changeset
  8792
hgs
parents:
diff changeset
  8793
    iEditorFlags |= EMaxSmsSizeNoteShown;
hgs
parents:
diff changeset
  8794
    
hgs
parents:
diff changeset
  8795
    if( totalLen == maxLen )
hgs
parents:
diff changeset
  8796
        { 
hgs
parents:
diff changeset
  8797
        if( aSendCheck )
hgs
parents:
diff changeset
  8798
            { // SMS is max length so it can still be sent
hgs
parents:
diff changeset
  8799
            iEditorFlags &= ~EMaxSmsSizeNoteShown;
hgs
parents:
diff changeset
  8800
            return;
hgs
parents:
diff changeset
  8801
            }
hgs
parents:
diff changeset
  8802
        else
hgs
parents:
diff changeset
  8803
            { 
hgs
parents:
diff changeset
  8804
            if( iEditorFlags & EShowSmsSizeNoteNextTime )
hgs
parents:
diff changeset
  8805
                {
hgs
parents:
diff changeset
  8806
                // Show "Cannot add text"
hgs
parents:
diff changeset
  8807
                ShowConfirmableInfoL( R_UNIEDITOR_SMS_LENGTH_EXCEEDED );
hgs
parents:
diff changeset
  8808
                // We remove this flag already now
hgs
parents:
diff changeset
  8809
                iEditorFlags &= ~EShowSmsSizeNoteNextTime;
hgs
parents:
diff changeset
  8810
                }
hgs
parents:
diff changeset
  8811
            else
hgs
parents:
diff changeset
  8812
                {
hgs
parents:
diff changeset
  8813
                // Show the note next time
hgs
parents:
diff changeset
  8814
                iEditorFlags |= EShowSmsSizeNoteNextTime;
hgs
parents:
diff changeset
  8815
                // Remove this as it's not shown already
hgs
parents:
diff changeset
  8816
                iEditorFlags &= ~EMaxSmsSizeNoteShown;                
hgs
parents:
diff changeset
  8817
                }
hgs
parents:
diff changeset
  8818
            }
hgs
parents:
diff changeset
  8819
        }
hgs
parents:
diff changeset
  8820
    else if( totalLen == maxLen+1 )
hgs
parents:
diff changeset
  8821
        { // Show "Cannot send. Remove 1"
hgs
parents:
diff changeset
  8822
        ShowConfirmableInfoL( R_UNIEDITOR_SMS_LENGTH_EXCEEDED_1 );
hgs
parents:
diff changeset
  8823
        }
hgs
parents:
diff changeset
  8824
    else
hgs
parents:
diff changeset
  8825
        { // Show "Cannot send. Remove N"
hgs
parents:
diff changeset
  8826
        if( doc->UnicodeCharacterMode() )
hgs
parents:
diff changeset
  8827
            {
hgs
parents:
diff changeset
  8828
            ShowConfirmableInfoL( R_UNIEDITOR_SMS_LENGTH_EXCEEDED_MANY_UNICODE );
hgs
parents:
diff changeset
  8829
            }
hgs
parents:
diff changeset
  8830
        else
hgs
parents:
diff changeset
  8831
            {
hgs
parents:
diff changeset
  8832
            TInt howMany = totalLen - maxLen;
hgs
parents:
diff changeset
  8833
            HBufC* warningString = 
hgs
parents:
diff changeset
  8834
                StringLoader::LoadLC( R_UNIEDITOR_SMS_LENGTH_EXCEEDED_MANY, howMany, iCoeEnv );
hgs
parents:
diff changeset
  8835
            ShowConfirmableInfoL( *warningString );
hgs
parents:
diff changeset
  8836
            CleanupStack::PopAndDestroy( warningString );
hgs
parents:
diff changeset
  8837
            }
hgs
parents:
diff changeset
  8838
hgs
parents:
diff changeset
  8839
        }
hgs
parents:
diff changeset
  8840
    }
hgs
parents:
diff changeset
  8841
 
hgs
parents:
diff changeset
  8842
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8843
// CUniEditorAppUi::SetOrRemoveMaxSizeInEdwin
hgs
parents:
diff changeset
  8844
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8845
//
hgs
parents:
diff changeset
  8846
void CUniEditorAppUi::SetOrRemoveMaxSizeInEdwin()
hgs
parents:
diff changeset
  8847
    {
hgs
parents:
diff changeset
  8848
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  8849
    
hgs
parents:
diff changeset
  8850
    if( !IsHardcodedSms() )
hgs
parents:
diff changeset
  8851
        { 
hgs
parents:
diff changeset
  8852
        // No max limit so set the max TInt
hgs
parents:
diff changeset
  8853
        if( BodyCtrlEditor() )
hgs
parents:
diff changeset
  8854
            {
hgs
parents:
diff changeset
  8855
            BodyCtrlEditor()->SetTextLimit( KMaxTInt );
hgs
parents:
diff changeset
  8856
            }
hgs
parents:
diff changeset
  8857
        return;
hgs
parents:
diff changeset
  8858
        }
hgs
parents:
diff changeset
  8859
        
hgs
parents:
diff changeset
  8860
    // OK, message type is SMS
hgs
parents:
diff changeset
  8861
    
hgs
parents:
diff changeset
  8862
    TInt lengthOne( 0 );
hgs
parents:
diff changeset
  8863
    TInt lengthMany( 0 );
hgs
parents:
diff changeset
  8864
    
hgs
parents:
diff changeset
  8865
    doc->SmsCharacterLimits( lengthOne, lengthMany );
hgs
parents:
diff changeset
  8866
hgs
parents:
diff changeset
  8867
    TInt maxLen = lengthOne;
hgs
parents:
diff changeset
  8868
  
hgs
parents:
diff changeset
  8869
    if( doc->AbsoluteMaxSmsParts() > 1 )
hgs
parents:
diff changeset
  8870
        {
hgs
parents:
diff changeset
  8871
        maxLen = doc->AbsoluteMaxSmsParts()*lengthMany;
hgs
parents:
diff changeset
  8872
        }
hgs
parents:
diff changeset
  8873
    
hgs
parents:
diff changeset
  8874
    if ( doc->AbsoluteMaxSmsCharacters() > 0 )
hgs
parents:
diff changeset
  8875
        {
hgs
parents:
diff changeset
  8876
        maxLen = doc->AbsoluteMaxSmsCharacters();
hgs
parents:
diff changeset
  8877
        }
hgs
parents:
diff changeset
  8878
    
hgs
parents:
diff changeset
  8879
    CEikEdwin* bodyEd = BodyCtrlEditor();
hgs
parents:
diff changeset
  8880
    CEikEdwin* subjEd = SubjectCtrlEditor();
hgs
parents:
diff changeset
  8881
    
hgs
parents:
diff changeset
  8882
    if( !bodyEd )
hgs
parents:
diff changeset
  8883
        { 
hgs
parents:
diff changeset
  8884
        // There's no body editor available -> just return
hgs
parents:
diff changeset
  8885
        return;
hgs
parents:
diff changeset
  8886
        }
hgs
parents:
diff changeset
  8887
hgs
parents:
diff changeset
  8888
    // This length is needed by recipient and subject separator chars
hgs
parents:
diff changeset
  8889
    TInt separatorLen = 0;
hgs
parents:
diff changeset
  8890
hgs
parents:
diff changeset
  8891
    TInt emailAddrLen = iHeader->LongestEmailAddress();
hgs
parents:
diff changeset
  8892
    
hgs
parents:
diff changeset
  8893
    if( emailAddrLen )
hgs
parents:
diff changeset
  8894
        {
hgs
parents:
diff changeset
  8895
        separatorLen++; // one extra char needed by separator char
hgs
parents:
diff changeset
  8896
        }
hgs
parents:
diff changeset
  8897
hgs
parents:
diff changeset
  8898
    // Max subject length is maxLen decreased by longest email address and body length
hgs
parents:
diff changeset
  8899
    TInt maxSubjectLen = maxLen - emailAddrLen - iSmsBodyLength - separatorLen;
hgs
parents:
diff changeset
  8900
    
hgs
parents:
diff changeset
  8901
    if( maxSubjectLen > KUniEdMaxSubjectLen )
hgs
parents:
diff changeset
  8902
        {
hgs
parents:
diff changeset
  8903
        maxSubjectLen = KUniEdMaxSubjectLen;
hgs
parents:
diff changeset
  8904
        }
hgs
parents:
diff changeset
  8905
hgs
parents:
diff changeset
  8906
    // Max body length is maxLen decreased by longest email address and subject length
hgs
parents:
diff changeset
  8907
    TInt maxBodyLen = maxLen - emailAddrLen - iSmsSubjectLength - separatorLen;
hgs
parents:
diff changeset
  8908
    
hgs
parents:
diff changeset
  8909
    if( bodyEd->TextLength() > maxBodyLen )
hgs
parents:
diff changeset
  8910
        { 
hgs
parents:
diff changeset
  8911
        // If there's already too long body field -> increase the limit to avoid panic in edwin
hgs
parents:
diff changeset
  8912
        maxBodyLen = bodyEd->TextLength();
hgs
parents:
diff changeset
  8913
        }
hgs
parents:
diff changeset
  8914
    
hgs
parents:
diff changeset
  8915
    bodyEd->SetTextLimit( maxBodyLen );
hgs
parents:
diff changeset
  8916
    
hgs
parents:
diff changeset
  8917
    if( subjEd )
hgs
parents:
diff changeset
  8918
        {
hgs
parents:
diff changeset
  8919
        if( subjEd->TextLength() > maxSubjectLen )
hgs
parents:
diff changeset
  8920
            { 
hgs
parents:
diff changeset
  8921
            // If there's already too long subject field -> increase the limit to avoid panic in edwin
hgs
parents:
diff changeset
  8922
            maxSubjectLen = subjEd->TextLength();
hgs
parents:
diff changeset
  8923
            }
hgs
parents:
diff changeset
  8924
        subjEd->SetTextLimit( maxSubjectLen );
hgs
parents:
diff changeset
  8925
        }
hgs
parents:
diff changeset
  8926
    }
hgs
parents:
diff changeset
  8927
hgs
parents:
diff changeset
  8928
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8929
// CUniEditorAppUi::CheckMaxRecipientsAndShowNoteL
hgs
parents:
diff changeset
  8930
// ---------------------------------------------------------
hgs
parents:
diff changeset
  8931
//
hgs
parents:
diff changeset
  8932
TBool CUniEditorAppUi::CheckMaxRecipientsAndShowNoteL( TBool aSendCheck /*= EFalse*/ )
hgs
parents:
diff changeset
  8933
    {
hgs
parents:
diff changeset
  8934
    
hgs
parents:
diff changeset
  8935
    TInt maxRecipients = 0;
hgs
parents:
diff changeset
  8936
    
hgs
parents:
diff changeset
  8937
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  8938
    
hgs
parents:
diff changeset
  8939
    TUniState state = doc->UniState();
hgs
parents:
diff changeset
  8940
    
hgs
parents:
diff changeset
  8941
    if( IsHardcodedSms() )
hgs
parents:
diff changeset
  8942
        {
hgs
parents:
diff changeset
  8943
        maxRecipients = doc->MaxSmsRecipients();
hgs
parents:
diff changeset
  8944
        }
hgs
parents:
diff changeset
  8945
    else
hgs
parents:
diff changeset
  8946
        {
hgs
parents:
diff changeset
  8947
        maxRecipients = doc->MaxMmsRecipients();
hgs
parents:
diff changeset
  8948
        }
hgs
parents:
diff changeset
  8949
    
hgs
parents:
diff changeset
  8950
    TInt recipientCount = 0;
hgs
parents:
diff changeset
  8951
    
hgs
parents:
diff changeset
  8952
    CMsgAddressControl* addrCntrl = ToCtrl();
hgs
parents:
diff changeset
  8953
    
hgs
parents:
diff changeset
  8954
    if( addrCntrl )
hgs
parents:
diff changeset
  8955
        {
hgs
parents:
diff changeset
  8956
        recipientCount = addrCntrl->GetRecipientsL()->Count();
hgs
parents:
diff changeset
  8957
        }
hgs
parents:
diff changeset
  8958
    
hgs
parents:
diff changeset
  8959
    if( state == EUniMms ) // If the current state is mms,
hgs
parents:
diff changeset
  8960
        { // add also possible CC and BCC recipients
hgs
parents:
diff changeset
  8961
        addrCntrl = iView->ControlById( EMsgComponentIdCc )?
hgs
parents:
diff changeset
  8962
            static_cast<CMsgAddressControl*>(iView->ControlById( EMsgComponentIdCc ) ):NULL;
hgs
parents:
diff changeset
  8963
        if( addrCntrl )
hgs
parents:
diff changeset
  8964
            {
hgs
parents:
diff changeset
  8965
            recipientCount += addrCntrl->GetRecipientsL()->Count();
hgs
parents:
diff changeset
  8966
            }
hgs
parents:
diff changeset
  8967
        addrCntrl = iView->ControlById( EMsgComponentIdBcc )?
hgs
parents:
diff changeset
  8968
            static_cast<CMsgAddressControl*>(iView->ControlById( EMsgComponentIdBcc ) ):NULL;
hgs
parents:
diff changeset
  8969
        if( addrCntrl )
hgs
parents:
diff changeset
  8970
            {
hgs
parents:
diff changeset
  8971
            recipientCount += addrCntrl->GetRecipientsL()->Count();
hgs
parents:
diff changeset
  8972
            }
hgs
parents:
diff changeset
  8973
        }
hgs
parents:
diff changeset
  8974
hgs
parents:
diff changeset
  8975
    if( recipientCount <= maxRecipients )
hgs
parents:
diff changeset
  8976
        { // ok number of recipients
hgs
parents:
diff changeset
  8977
        iEditorFlags &= ~EMaxRecipientShown;
hgs
parents:
diff changeset
  8978
        return ETrue;
hgs
parents:
diff changeset
  8979
        }
hgs
parents:
diff changeset
  8980
        
hgs
parents:
diff changeset
  8981
/* This is to be removed from UI spec (max recipients reached
hgs
parents:
diff changeset
  8982
    if( !aSendCheck )
hgs
parents:
diff changeset
  8983
        {
hgs
parents:
diff changeset
  8984
        if( iEditorFlags & EMaxRecipientShown )
hgs
parents:
diff changeset
  8985
            { // Note is already shown
hgs
parents:
diff changeset
  8986
            return EFalse;
hgs
parents:
diff changeset
  8987
            }
hgs
parents:
diff changeset
  8988
        if( recipientCount == maxRecipients )
hgs
parents:
diff changeset
  8989
            {
hgs
parents:
diff changeset
  8990
            ShowConfirmableInfoL( R_UNIEDITOR_MAX_RECIPIENTS_REACHED );
hgs
parents:
diff changeset
  8991
            iEditorFlags |= EMaxRecipientShown;
hgs
parents:
diff changeset
  8992
            return EFalse;
hgs
parents:
diff changeset
  8993
            }
hgs
parents:
diff changeset
  8994
        }
hgs
parents:
diff changeset
  8995
  
hgs
parents:
diff changeset
  8996
        
hgs
parents:
diff changeset
  8997
    if( recipientCount == maxRecipients )
hgs
parents:
diff changeset
  8998
        { // This time aSendCheck is certainly ETrue so no note is needed
hgs
parents:
diff changeset
  8999
        return ETrue;
hgs
parents:
diff changeset
  9000
        }*/
hgs
parents:
diff changeset
  9001
  
hgs
parents:
diff changeset
  9002
    if( iEditorFlags & EMaxRecipientShown && !aSendCheck )
hgs
parents:
diff changeset
  9003
        { // Note is already shown and this is not send check
hgs
parents:
diff changeset
  9004
        return EFalse;
hgs
parents:
diff changeset
  9005
        }
hgs
parents:
diff changeset
  9006
    
hgs
parents:
diff changeset
  9007
    iEditorFlags |= EMaxRecipientShown;
hgs
parents:
diff changeset
  9008
    
hgs
parents:
diff changeset
  9009
    TInt waitRes( KErrNotFound );
hgs
parents:
diff changeset
  9010
    
hgs
parents:
diff changeset
  9011
    if ( iWaitDialog )
hgs
parents:
diff changeset
  9012
        {
hgs
parents:
diff changeset
  9013
        waitRes = iWaitResId;
hgs
parents:
diff changeset
  9014
        RemoveWaitNote();
hgs
parents:
diff changeset
  9015
        }   
hgs
parents:
diff changeset
  9016
    
hgs
parents:
diff changeset
  9017
    if( recipientCount == maxRecipients + 1 )
hgs
parents:
diff changeset
  9018
        {
hgs
parents:
diff changeset
  9019
        ShowConfirmableInfoL( R_UNIEDITOR_MAX_RECIPIENTS_EXCEEDED_1 );
hgs
parents:
diff changeset
  9020
        }
hgs
parents:
diff changeset
  9021
    else
hgs
parents:
diff changeset
  9022
        {
hgs
parents:
diff changeset
  9023
        HBufC* warningString = 
hgs
parents:
diff changeset
  9024
            StringLoader::LoadLC( R_UNIEDITOR_MAX_RECIPIENTS_EXCEEDED_MANY, 
hgs
parents:
diff changeset
  9025
                                  recipientCount - maxRecipients, 
hgs
parents:
diff changeset
  9026
                                  iCoeEnv );
hgs
parents:
diff changeset
  9027
            
hgs
parents:
diff changeset
  9028
        ShowConfirmableInfoL( *warningString );
hgs
parents:
diff changeset
  9029
        
hgs
parents:
diff changeset
  9030
        CleanupStack::PopAndDestroy( warningString );
hgs
parents:
diff changeset
  9031
        }
hgs
parents:
diff changeset
  9032
    
hgs
parents:
diff changeset
  9033
    if ( waitRes != KErrNotFound )
hgs
parents:
diff changeset
  9034
        {
hgs
parents:
diff changeset
  9035
        ShowWaitNoteL( waitRes );
hgs
parents:
diff changeset
  9036
        }
hgs
parents:
diff changeset
  9037
    
hgs
parents:
diff changeset
  9038
    return EFalse;
hgs
parents:
diff changeset
  9039
    }
hgs
parents:
diff changeset
  9040
hgs
parents:
diff changeset
  9041
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9042
// CUniEditorAppUi::UpdateMiddleSoftkeyL
hgs
parents:
diff changeset
  9043
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9044
//
hgs
parents:
diff changeset
  9045
void CUniEditorAppUi::UpdateMiddleSoftkeyL()
hgs
parents:
diff changeset
  9046
    {
hgs
parents:
diff changeset
  9047
    /* This is just a placeholder so far */
hgs
parents:
diff changeset
  9048
    TInt resId = 0;
hgs
parents:
diff changeset
  9049
hgs
parents:
diff changeset
  9050
    CMsgBaseControl* ctrl = iView->FocusedControl();
hgs
parents:
diff changeset
  9051
hgs
parents:
diff changeset
  9052
    if ( ctrl )
hgs
parents:
diff changeset
  9053
        {
hgs
parents:
diff changeset
  9054
        switch ( ctrl->ControlId() )
hgs
parents:
diff changeset
  9055
            {
hgs
parents:
diff changeset
  9056
            case EMsgComponentIdTo:
hgs
parents:
diff changeset
  9057
            case EMsgComponentIdCc:
hgs
parents:
diff changeset
  9058
            case EMsgComponentIdBcc:
hgs
parents:
diff changeset
  9059
                {
hgs
parents:
diff changeset
  9060
                   if ( TUniMsvEntry::IsMmsUpload( Document()->Entry() ) )
hgs
parents:
diff changeset
  9061
                    {
hgs
parents:
diff changeset
  9062
                    break;
hgs
parents:
diff changeset
  9063
                    }
hgs
parents:
diff changeset
  9064
                
hgs
parents:
diff changeset
  9065
                resId = R_UNI_MSK_BUTTON_ADD;
hgs
parents:
diff changeset
  9066
                }
hgs
parents:
diff changeset
  9067
                break;
hgs
parents:
diff changeset
  9068
            case EMsgComponentIdAttachment:
hgs
parents:
diff changeset
  9069
                {
hgs
parents:
diff changeset
  9070
                resId = R_UNI_MSK_BUTTON_OBJECTS;
hgs
parents:
diff changeset
  9071
                break;
hgs
parents:
diff changeset
  9072
                }
hgs
parents:
diff changeset
  9073
            case EMsgComponentIdImage:
hgs
parents:
diff changeset
  9074
                if ( Document()->DataModel()->SmilType() == E3GPPSmil )
hgs
parents:
diff changeset
  9075
                    { // focus is on "no-edit" SMIL icon
hgs
parents:
diff changeset
  9076
                    resId = R_UNI_MSK_BUTTON_PLAY_PRES;
hgs
parents:
diff changeset
  9077
                    } 
hgs
parents:
diff changeset
  9078
                else
hgs
parents:
diff changeset
  9079
                    { // ordinary image
hgs
parents:
diff changeset
  9080
                    resId = R_UNI_MSK_BUTTON_VIEW_IMAGE;
hgs
parents:
diff changeset
  9081
                    }
hgs
parents:
diff changeset
  9082
                break;
hgs
parents:
diff changeset
  9083
            case EMsgComponentIdVideo:
hgs
parents:
diff changeset
  9084
                {
hgs
parents:
diff changeset
  9085
                resId = R_UNI_MSK_BUTTON_PLAY_VIDEO;
hgs
parents:
diff changeset
  9086
                break;
hgs
parents:
diff changeset
  9087
                }
hgs
parents:
diff changeset
  9088
            case EMsgComponentIdAudio:
hgs
parents:
diff changeset
  9089
                {
hgs
parents:
diff changeset
  9090
                resId = R_UNI_MSK_BUTTON_PLAY_AUDIO;
hgs
parents:
diff changeset
  9091
                break;
hgs
parents:
diff changeset
  9092
                }
hgs
parents:
diff changeset
  9093
            case EMsgComponentIdSvg:
hgs
parents:
diff changeset
  9094
                {
hgs
parents:
diff changeset
  9095
                resId = R_UNI_MSK_BUTTON_PLAY_SVG;
hgs
parents:
diff changeset
  9096
                break;
hgs
parents:
diff changeset
  9097
                }
hgs
parents:
diff changeset
  9098
            case EMsgComponentIdBody:
hgs
parents:
diff changeset
  9099
                {
hgs
parents:
diff changeset
  9100
                resId = R_UNI_MSK_BUTTON_CONTEXT_MENU;
hgs
parents:
diff changeset
  9101
                MenuBar()->SetContextMenuTitleResourceId( R_UNIEDITOR_CONTEXT_MENUBAR );
hgs
parents:
diff changeset
  9102
                break;
hgs
parents:
diff changeset
  9103
                }
hgs
parents:
diff changeset
  9104
hgs
parents:
diff changeset
  9105
            case EMsgComponentIdSubject:
hgs
parents:
diff changeset
  9106
            default:
hgs
parents:
diff changeset
  9107
                break;
hgs
parents:
diff changeset
  9108
            }
hgs
parents:
diff changeset
  9109
        }
hgs
parents:
diff changeset
  9110
hgs
parents:
diff changeset
  9111
    if ( resId != iMskResId )
hgs
parents:
diff changeset
  9112
        {
hgs
parents:
diff changeset
  9113
        const TInt KMskPosition = 3;
hgs
parents:
diff changeset
  9114
        CEikButtonGroupContainer* cba = Cba();
hgs
parents:
diff changeset
  9115
        if( resId != 0 )
hgs
parents:
diff changeset
  9116
            {
hgs
parents:
diff changeset
  9117
            cba->SetCommandL( KMskPosition, resId );
hgs
parents:
diff changeset
  9118
            }
hgs
parents:
diff changeset
  9119
        else
hgs
parents:
diff changeset
  9120
            { // nullify the command
hgs
parents:
diff changeset
  9121
            cba->SetCommandL( KMskPosition, 0, KNullDesC() );
hgs
parents:
diff changeset
  9122
            }
hgs
parents:
diff changeset
  9123
        cba->DrawNow();
hgs
parents:
diff changeset
  9124
        iMskResId = resId;
hgs
parents:
diff changeset
  9125
        }
hgs
parents:
diff changeset
  9126
    return;
hgs
parents:
diff changeset
  9127
    }
hgs
parents:
diff changeset
  9128
hgs
parents:
diff changeset
  9129
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9130
// CUniEditorAppUi::SetInputModeToAddressFields
hgs
parents:
diff changeset
  9131
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9132
//
hgs
parents:
diff changeset
  9133
void CUniEditorAppUi::SetInputModeToAddressFields( TInt aInputMode )
hgs
parents:
diff changeset
  9134
    {
hgs
parents:
diff changeset
  9135
    for (TInt i = CUniEditorHeader::EHeaderAddressTo; 
hgs
parents:
diff changeset
  9136
        i <= CUniEditorHeader::EHeaderAddressBcc; i++ )
hgs
parents:
diff changeset
  9137
        {    
hgs
parents:
diff changeset
  9138
        if ( iHeader &&  
hgs
parents:
diff changeset
  9139
             iHeader->AddressControl( static_cast<CUniEditorHeader::THeaderFields> (i) ) )
hgs
parents:
diff changeset
  9140
            {
hgs
parents:
diff changeset
  9141
            iHeader->AddressControl( 
hgs
parents:
diff changeset
  9142
                static_cast<CUniEditorHeader::THeaderFields> (i) )
hgs
parents:
diff changeset
  9143
                    ->Editor().SetAknEditorCurrentInputMode( aInputMode );
hgs
parents:
diff changeset
  9144
            }
hgs
parents:
diff changeset
  9145
        }
hgs
parents:
diff changeset
  9146
    
hgs
parents:
diff changeset
  9147
    }
hgs
parents:
diff changeset
  9148
hgs
parents:
diff changeset
  9149
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9150
// CUniEditorAppUi::DoEditMmsPriorityL
hgs
parents:
diff changeset
  9151
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9152
//
hgs
parents:
diff changeset
  9153
void CUniEditorAppUi::DoEditMmsPriorityL()
hgs
parents:
diff changeset
  9154
    {
hgs
parents:
diff changeset
  9155
hgs
parents:
diff changeset
  9156
    TUniSendingSettings settings;
hgs
parents:
diff changeset
  9157
    CUniEditorPlugin* plugin = MmsPlugin();
hgs
parents:
diff changeset
  9158
hgs
parents:
diff changeset
  9159
    if( plugin )
hgs
parents:
diff changeset
  9160
        {
hgs
parents:
diff changeset
  9161
        plugin->GetSendingSettingsL( settings );
hgs
parents:
diff changeset
  9162
        }
hgs
parents:
diff changeset
  9163
hgs
parents:
diff changeset
  9164
    TInt currentlySelected = 0;
hgs
parents:
diff changeset
  9165
    switch( settings.iPriority )
hgs
parents:
diff changeset
  9166
        {
hgs
parents:
diff changeset
  9167
        case TUniSendingSettings::EUniPriorityNormal:
hgs
parents:
diff changeset
  9168
            currentlySelected = 1;
hgs
parents:
diff changeset
  9169
            break;
hgs
parents:
diff changeset
  9170
        case TUniSendingSettings::EUniPriorityLow:
hgs
parents:
diff changeset
  9171
            currentlySelected = 2;
hgs
parents:
diff changeset
  9172
            break;
hgs
parents:
diff changeset
  9173
        default:
hgs
parents:
diff changeset
  9174
            break;
hgs
parents:
diff changeset
  9175
        }
hgs
parents:
diff changeset
  9176
    
hgs
parents:
diff changeset
  9177
    // Create listbox    
hgs
parents:
diff changeset
  9178
    CAknSingleGraphicPopupMenuStyleListBox* listBox = new (ELeave) CAknSingleGraphicPopupMenuStyleListBox;
hgs
parents:
diff changeset
  9179
    CleanupStack::PushL( listBox );
hgs
parents:
diff changeset
  9180
    
hgs
parents:
diff changeset
  9181
    // Create popup
hgs
parents:
diff changeset
  9182
    CAknPopupList* popup = CAknPopupList::NewL( 
hgs
parents:
diff changeset
  9183
                listBox, 
hgs
parents:
diff changeset
  9184
                R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT, 
hgs
parents:
diff changeset
  9185
                AknPopupLayouts::EMenuGraphicWindow );
hgs
parents:
diff changeset
  9186
    CleanupStack::PushL( popup );
hgs
parents:
diff changeset
  9187
hgs
parents:
diff changeset
  9188
    // Construct listbox
hgs
parents:
diff changeset
  9189
    listBox->ConstructL( popup, CEikListBox::ELeftDownInViewRect );
hgs
parents:
diff changeset
  9190
    listBox->CreateScrollBarFrameL( ETrue );
hgs
parents:
diff changeset
  9191
    listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
hgs
parents:
diff changeset
  9192
                                                      CEikScrollBarFrame::EAuto );
hgs
parents:
diff changeset
  9193
  
hgs
parents:
diff changeset
  9194
    // Set title    
hgs
parents:
diff changeset
  9195
    HBufC* title = StringLoader::LoadLC( R_UNIEDITOR_PRIORITY_TITLE, iCoeEnv );
hgs
parents:
diff changeset
  9196
    popup->SetTitleL( title->Des() );
hgs
parents:
diff changeset
  9197
    CleanupStack::PopAndDestroy( title );
hgs
parents:
diff changeset
  9198
hgs
parents:
diff changeset
  9199
    CAknIconArray* iconArray = RadioButtonArrayL();
hgs
parents:
diff changeset
  9200
    listBox->ItemDrawer()->FormattedCellData()->SetIconArray( iconArray ); // FormattedCellData owns
hgs
parents:
diff changeset
  9201
hgs
parents:
diff changeset
  9202
    listBox->HandleItemAdditionL();
hgs
parents:
diff changeset
  9203
hgs
parents:
diff changeset
  9204
    TResourceReader reader;
hgs
parents:
diff changeset
  9205
    iEikonEnv->CreateResourceReaderLC( reader, R_UNI_PRIORITY_LIST );
hgs
parents:
diff changeset
  9206
    
hgs
parents:
diff changeset
  9207
    CDesCArrayFlat* items = new ( ELeave ) CDesCArrayFlat( KSettingsGranularity );
hgs
parents:
diff changeset
  9208
    CleanupStack::PushL( items );
hgs
parents:
diff changeset
  9209
hgs
parents:
diff changeset
  9210
    // Get the labels from resources
hgs
parents:
diff changeset
  9211
    const TInt count = reader.ReadInt16();
hgs
parents:
diff changeset
  9212
hgs
parents:
diff changeset
  9213
    for ( TInt loop = 0; loop < count; loop++ )
hgs
parents:
diff changeset
  9214
        {
hgs
parents:
diff changeset
  9215
        HBufC* label = reader.ReadHBufCL();        
hgs
parents:
diff changeset
  9216
        CleanupStack::PushL( label );
hgs
parents:
diff changeset
  9217
        TPtr pLabel = label->Des();
hgs
parents:
diff changeset
  9218
        AknTextUtils::DisplayTextLanguageSpecificNumberConversion( pLabel );
hgs
parents:
diff changeset
  9219
        
hgs
parents:
diff changeset
  9220
        TBuf<20> itemString;
hgs
parents:
diff changeset
  9221
        if( currentlySelected == loop )
hgs
parents:
diff changeset
  9222
            { // This one is selected
hgs
parents:
diff changeset
  9223
            itemString.AppendNum( 1 );
hgs
parents:
diff changeset
  9224
            }
hgs
parents:
diff changeset
  9225
        else
hgs
parents:
diff changeset
  9226
            {
hgs
parents:
diff changeset
  9227
            itemString.AppendNum( 0 );
hgs
parents:
diff changeset
  9228
            }
hgs
parents:
diff changeset
  9229
hgs
parents:
diff changeset
  9230
        itemString.Append( _L("\t") );
hgs
parents:
diff changeset
  9231
        itemString.Append( pLabel );
hgs
parents:
diff changeset
  9232
        items->AppendL( itemString );
hgs
parents:
diff changeset
  9233
        
hgs
parents:
diff changeset
  9234
        CleanupStack::PopAndDestroy( label );
hgs
parents:
diff changeset
  9235
        label = NULL;
hgs
parents:
diff changeset
  9236
        }
hgs
parents:
diff changeset
  9237
hgs
parents:
diff changeset
  9238
    CTextListBoxModel* model = listBox->Model();
hgs
parents:
diff changeset
  9239
    model->SetItemTextArray( items );
hgs
parents:
diff changeset
  9240
    model->SetOwnershipType( ELbmOwnsItemArray );
hgs
parents:
diff changeset
  9241
    CleanupStack::Pop( items ); // model owns it now
hgs
parents:
diff changeset
  9242
    CleanupStack::PopAndDestroy(); // reader 
hgs
parents:
diff changeset
  9243
hgs
parents:
diff changeset
  9244
    listBox->SetCurrentItemIndexAndDraw( currentlySelected );
hgs
parents:
diff changeset
  9245
hgs
parents:
diff changeset
  9246
    TInt result = popup->ExecuteLD();
hgs
parents:
diff changeset
  9247
hgs
parents:
diff changeset
  9248
    if( result )
hgs
parents:
diff changeset
  9249
        {
hgs
parents:
diff changeset
  9250
        // OK, user chose the priority bit
hgs
parents:
diff changeset
  9251
        switch( listBox->CurrentItemIndex() )
hgs
parents:
diff changeset
  9252
            {
hgs
parents:
diff changeset
  9253
            case 0:
hgs
parents:
diff changeset
  9254
                {
hgs
parents:
diff changeset
  9255
                settings.iPriority = TUniSendingSettings::EUniPriorityHigh;
hgs
parents:
diff changeset
  9256
                break;
hgs
parents:
diff changeset
  9257
                }
hgs
parents:
diff changeset
  9258
            case 1:
hgs
parents:
diff changeset
  9259
                {
hgs
parents:
diff changeset
  9260
                settings.iPriority = TUniSendingSettings::EUniPriorityNormal;
hgs
parents:
diff changeset
  9261
                break;
hgs
parents:
diff changeset
  9262
                }
hgs
parents:
diff changeset
  9263
            default:
hgs
parents:
diff changeset
  9264
                {
hgs
parents:
diff changeset
  9265
                settings.iPriority = TUniSendingSettings::EUniPriorityLow;
hgs
parents:
diff changeset
  9266
                break;
hgs
parents:
diff changeset
  9267
                }
hgs
parents:
diff changeset
  9268
            }
hgs
parents:
diff changeset
  9269
            
hgs
parents:
diff changeset
  9270
        if( plugin )
hgs
parents:
diff changeset
  9271
            {
hgs
parents:
diff changeset
  9272
            plugin->SetSendingSettingsL( settings );
hgs
parents:
diff changeset
  9273
            }
hgs
parents:
diff changeset
  9274
            
hgs
parents:
diff changeset
  9275
        UpdateIndicatorIconsL();
hgs
parents:
diff changeset
  9276
        }
hgs
parents:
diff changeset
  9277
    CleanupStack::Pop(); // for popup
hgs
parents:
diff changeset
  9278
    CleanupStack::PopAndDestroy( listBox ); 
hgs
parents:
diff changeset
  9279
    }
hgs
parents:
diff changeset
  9280
hgs
parents:
diff changeset
  9281
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9282
// CUniEditorAppUi::RadioButtonArrayL
hgs
parents:
diff changeset
  9283
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9284
//
hgs
parents:
diff changeset
  9285
CAknIconArray* CUniEditorAppUi::RadioButtonArrayL()
hgs
parents:
diff changeset
  9286
    {
hgs
parents:
diff changeset
  9287
    TFileName* fileName = new( ELeave ) TFileName;
hgs
parents:
diff changeset
  9288
    CleanupStack::PushL( fileName );
hgs
parents:
diff changeset
  9289
    
hgs
parents:
diff changeset
  9290
    fileName->Copy( KAvkonBitmapFile );
hgs
parents:
diff changeset
  9291
hgs
parents:
diff changeset
  9292
    CAknIconArray* iconArray = new (ELeave) CAknIconArray( 2 );
hgs
parents:
diff changeset
  9293
    CleanupStack::PushL( iconArray ); 
hgs
parents:
diff changeset
  9294
hgs
parents:
diff changeset
  9295
    CFbsBitmap* bitmap = NULL;
hgs
parents:
diff changeset
  9296
    CFbsBitmap* mask = NULL;
hgs
parents:
diff changeset
  9297
    CGulIcon* icon = NULL;
hgs
parents:
diff changeset
  9298
hgs
parents:
diff changeset
  9299
    TAknsItemID skinId = KAknsIIDQgnPropRadiobuttOff;
hgs
parents:
diff changeset
  9300
    TInt bitmapId = EMbmAvkonQgn_prop_radiobutt_off;
hgs
parents:
diff changeset
  9301
hgs
parents:
diff changeset
  9302
    AknsUtils::CreateIconL( AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
  9303
                            skinId,
hgs
parents:
diff changeset
  9304
                            bitmap,
hgs
parents:
diff changeset
  9305
                            mask,
hgs
parents:
diff changeset
  9306
                            *fileName,
hgs
parents:
diff changeset
  9307
                            bitmapId,
hgs
parents:
diff changeset
  9308
                            bitmapId+1 );
hgs
parents:
diff changeset
  9309
        
hgs
parents:
diff changeset
  9310
    CleanupStack::PushL( bitmap );
hgs
parents:
diff changeset
  9311
    CleanupStack::PushL( mask );
hgs
parents:
diff changeset
  9312
    icon = CGulIcon::NewL( bitmap, mask );
hgs
parents:
diff changeset
  9313
    CleanupStack::Pop( 2, bitmap );
hgs
parents:
diff changeset
  9314
    CleanupStack::PushL( icon ); 
hgs
parents:
diff changeset
  9315
    iconArray->AppendL( icon );
hgs
parents:
diff changeset
  9316
    CleanupStack::Pop();   // icon
hgs
parents:
diff changeset
  9317
hgs
parents:
diff changeset
  9318
    skinId = KAknsIIDQgnPropRadiobuttOn;
hgs
parents:
diff changeset
  9319
    bitmapId = EMbmAvkonQgn_prop_radiobutt_on;
hgs
parents:
diff changeset
  9320
hgs
parents:
diff changeset
  9321
    AknsUtils::CreateIconL( AknsUtils::SkinInstance(),
hgs
parents:
diff changeset
  9322
                            skinId,
hgs
parents:
diff changeset
  9323
                            bitmap,
hgs
parents:
diff changeset
  9324
                            mask,
hgs
parents:
diff changeset
  9325
                            *fileName,
hgs
parents:
diff changeset
  9326
                            bitmapId,
hgs
parents:
diff changeset
  9327
                            bitmapId+1 );
hgs
parents:
diff changeset
  9328
        
hgs
parents:
diff changeset
  9329
    CleanupStack::PushL( bitmap );
hgs
parents:
diff changeset
  9330
    CleanupStack::PushL( mask );
hgs
parents:
diff changeset
  9331
    
hgs
parents:
diff changeset
  9332
    icon = CGulIcon::NewL( bitmap, mask );
hgs
parents:
diff changeset
  9333
    CleanupStack::Pop( 2 );
hgs
parents:
diff changeset
  9334
    CleanupStack::PushL( icon ); 
hgs
parents:
diff changeset
  9335
    
hgs
parents:
diff changeset
  9336
    iconArray->AppendL( icon );
hgs
parents:
diff changeset
  9337
    CleanupStack::Pop();   // icon
hgs
parents:
diff changeset
  9338
hgs
parents:
diff changeset
  9339
    CleanupStack::Pop( iconArray );
hgs
parents:
diff changeset
  9340
    CleanupStack::PopAndDestroy( fileName );
hgs
parents:
diff changeset
  9341
    return iconArray;
hgs
parents:
diff changeset
  9342
    }
hgs
parents:
diff changeset
  9343
hgs
parents:
diff changeset
  9344
hgs
parents:
diff changeset
  9345
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9346
// CUniEditorAppUi::ConfirmSmsSendInMultiplePartsL
hgs
parents:
diff changeset
  9347
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9348
//
hgs
parents:
diff changeset
  9349
TBool CUniEditorAppUi::ConfirmSmsSendInMultiplePartsL()
hgs
parents:
diff changeset
  9350
    {
hgs
parents:
diff changeset
  9351
    // If it's variated off -> return ETrue
hgs
parents:
diff changeset
  9352
    if( !( iEditorFlags & EShowSmsSentInManyParts ) )
hgs
parents:
diff changeset
  9353
        {
hgs
parents:
diff changeset
  9354
        return ETrue;
hgs
parents:
diff changeset
  9355
        }
hgs
parents:
diff changeset
  9356
    
hgs
parents:
diff changeset
  9357
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  9358
    
hgs
parents:
diff changeset
  9359
    TInt lengthOne( 0 );
hgs
parents:
diff changeset
  9360
    TInt lengthMany( 0 );
hgs
parents:
diff changeset
  9361
    
hgs
parents:
diff changeset
  9362
    doc->SmsCharacterLimits( lengthOne, lengthMany );
hgs
parents:
diff changeset
  9363
hgs
parents:
diff changeset
  9364
    TInt totalLen = iSmsBodyLength + iSmsSubjectLength;
hgs
parents:
diff changeset
  9365
hgs
parents:
diff changeset
  9366
    if ( doc->EmailOverSmsSupported() )
hgs
parents:
diff changeset
  9367
        {
hgs
parents:
diff changeset
  9368
        // This length is needed by recipient and subject separator chars
hgs
parents:
diff changeset
  9369
        TInt separatorLen = 0;
hgs
parents:
diff changeset
  9370
hgs
parents:
diff changeset
  9371
        TInt emailAddrLen = iHeader->LongestEmailAddress();
hgs
parents:
diff changeset
  9372
        
hgs
parents:
diff changeset
  9373
        if( emailAddrLen )
hgs
parents:
diff changeset
  9374
            {
hgs
parents:
diff changeset
  9375
            separatorLen++; // one extra char needed by separator char
hgs
parents:
diff changeset
  9376
            }
hgs
parents:
diff changeset
  9377
hgs
parents:
diff changeset
  9378
        totalLen += emailAddrLen + separatorLen;
hgs
parents:
diff changeset
  9379
        }
hgs
parents:
diff changeset
  9380
hgs
parents:
diff changeset
  9381
    if( totalLen <= lengthOne )
hgs
parents:
diff changeset
  9382
        { // All fits in one message -> return ETrue
hgs
parents:
diff changeset
  9383
        return ETrue;
hgs
parents:
diff changeset
  9384
        }
hgs
parents:
diff changeset
  9385
hgs
parents:
diff changeset
  9386
    TInt messages = totalLen/lengthMany;
hgs
parents:
diff changeset
  9387
    
hgs
parents:
diff changeset
  9388
    if( totalLen%lengthMany )
hgs
parents:
diff changeset
  9389
        { // If remainder is not zero -> add one
hgs
parents:
diff changeset
  9390
        messages++;
hgs
parents:
diff changeset
  9391
        }
hgs
parents:
diff changeset
  9392
hgs
parents:
diff changeset
  9393
    HBufC* qry = StringLoader::LoadLC( R_UNIEDITOR_SMS_SEND_MULTIPLE_PARTS, messages );
hgs
parents:
diff changeset
  9394
    
hgs
parents:
diff changeset
  9395
    if( ShowConfirmationNoQuestionQueryL( *qry ) )
hgs
parents:
diff changeset
  9396
        {
hgs
parents:
diff changeset
  9397
        CleanupStack::PopAndDestroy( qry );
hgs
parents:
diff changeset
  9398
        return ETrue;
hgs
parents:
diff changeset
  9399
        }
hgs
parents:
diff changeset
  9400
        
hgs
parents:
diff changeset
  9401
    CleanupStack::PopAndDestroy( qry );
hgs
parents:
diff changeset
  9402
    return EFalse;
hgs
parents:
diff changeset
  9403
    }
hgs
parents:
diff changeset
  9404
hgs
parents:
diff changeset
  9405
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9406
// CUniEditorAppUi::SetTitleIconsSizeL
hgs
parents:
diff changeset
  9407
//
hgs
parents:
diff changeset
  9408
// Sets the correct size from LAF for title MMS & SMS title icons
hgs
parents:
diff changeset
  9409
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9410
//
hgs
parents:
diff changeset
  9411
void CUniEditorAppUi::SetTitleIconsSizeL()
hgs
parents:
diff changeset
  9412
    {
hgs
parents:
diff changeset
  9413
    SetTitleIconSizeL( iIconSms->Bitmap() );
hgs
parents:
diff changeset
  9414
    SetTitleIconSizeL( iIconMms->Bitmap() );    
hgs
parents:
diff changeset
  9415
    }
hgs
parents:
diff changeset
  9416
 
hgs
parents:
diff changeset
  9417
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9418
// CUniEditorAppUi::AcceptEmailAddresses
hgs
parents:
diff changeset
  9419
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9420
//
hgs
parents:
diff changeset
  9421
TBool CUniEditorAppUi::AcceptEmailAddresses()
hgs
parents:
diff changeset
  9422
    {
hgs
parents:
diff changeset
  9423
    TBool retVal = ETrue;
hgs
parents:
diff changeset
  9424
hgs
parents:
diff changeset
  9425
    if( IsHardcodedSms() && !Document()->EmailOverSmsSupported() )
hgs
parents:
diff changeset
  9426
        { // We are in locked SMS mode and no email over sms -> accept only numbers
hgs
parents:
diff changeset
  9427
          retVal = EFalse;
hgs
parents:
diff changeset
  9428
        }
hgs
parents:
diff changeset
  9429
hgs
parents:
diff changeset
  9430
    return retVal;
hgs
parents:
diff changeset
  9431
    }
hgs
parents:
diff changeset
  9432
hgs
parents:
diff changeset
  9433
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9434
// CUniEditorAppUi::IsHardcodedSms
hgs
parents:
diff changeset
  9435
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9436
//
hgs
parents:
diff changeset
  9437
TBool CUniEditorAppUi::IsHardcodedSms()
hgs
parents:
diff changeset
  9438
    {
hgs
parents:
diff changeset
  9439
    TBool hardSms = EFalse;
hgs
parents:
diff changeset
  9440
hgs
parents:
diff changeset
  9441
    if( iMtm->MessageTypeLocking() == EUniMessageTypeLocked )
hgs
parents:
diff changeset
  9442
        { // the message type is pre-locked
hgs
parents:
diff changeset
  9443
        if( iMtm->MessageTypeSetting() == EUniMessageTypeSettingSms )
hgs
parents:
diff changeset
  9444
            { // to sms
hgs
parents:
diff changeset
  9445
            hardSms = ETrue;
hgs
parents:
diff changeset
  9446
            }
hgs
parents:
diff changeset
  9447
        }
hgs
parents:
diff changeset
  9448
    else if( iMtm->MessageTypeSetting() == EUniMessageTypeSettingSms )
hgs
parents:
diff changeset
  9449
           { // message is not pre-locked, but manually locked to sms
hgs
parents:
diff changeset
  9450
           hardSms = ETrue;
hgs
parents:
diff changeset
  9451
           }
hgs
parents:
diff changeset
  9452
hgs
parents:
diff changeset
  9453
    return hardSms;    
hgs
parents:
diff changeset
  9454
    }
hgs
parents:
diff changeset
  9455
hgs
parents:
diff changeset
  9456
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9457
// CUniEditorAppUi::ResolveLaunchFocusedControlL
hgs
parents:
diff changeset
  9458
// 
hgs
parents:
diff changeset
  9459
// Resolves the control id of control that should be focused after
hgs
parents:
diff changeset
  9460
// launch. Normal case is that first existing and empty control from To, Subject,
hgs
parents:
diff changeset
  9461
// body text control and image control is focused in this order.
hgs
parents:
diff changeset
  9462
//
hgs
parents:
diff changeset
  9463
// Exeptions to this is:
hgs
parents:
diff changeset
  9464
//
hgs
parents:
diff changeset
  9465
// Reply -> Body text field always focused.
hgs
parents:
diff changeset
  9466
// Locked SMS with vCard/vCal -> To address field always focused.
hgs
parents:
diff changeset
  9467
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9468
//
hgs
parents:
diff changeset
  9469
TMsgControlId CUniEditorAppUi::ResolveLaunchFocusedControlL()
hgs
parents:
diff changeset
  9470
    {
hgs
parents:
diff changeset
  9471
    TMsgControlId result = EMsgComponentIdNull;
hgs
parents:
diff changeset
  9472
    
hgs
parents:
diff changeset
  9473
    if ( Document()->MessageType() == EUniReply )
hgs
parents:
diff changeset
  9474
        {
hgs
parents:
diff changeset
  9475
        result = EMsgComponentIdBody;
hgs
parents:
diff changeset
  9476
        }
hgs
parents:
diff changeset
  9477
    else if ( iEditorFlags & ELockedSmsWithAtta )
hgs
parents:
diff changeset
  9478
        {
hgs
parents:
diff changeset
  9479
        result = EMsgComponentIdTo;
hgs
parents:
diff changeset
  9480
        }
hgs
parents:
diff changeset
  9481
    else
hgs
parents:
diff changeset
  9482
        {
hgs
parents:
diff changeset
  9483
        CMsgAddressControl* toControl = ToCtrl();
hgs
parents:
diff changeset
  9484
    
hgs
parents:
diff changeset
  9485
        if ( toControl &&
hgs
parents:
diff changeset
  9486
             toControl->GetRecipientsL()->Count() == 0 )
hgs
parents:
diff changeset
  9487
            {
hgs
parents:
diff changeset
  9488
            result = EMsgComponentIdTo;
hgs
parents:
diff changeset
  9489
            }
hgs
parents:
diff changeset
  9490
        else
hgs
parents:
diff changeset
  9491
            {
hgs
parents:
diff changeset
  9492
            if ( iSupportedFeatures & EUniFeatureSubject )
hgs
parents:
diff changeset
  9493
                {
hgs
parents:
diff changeset
  9494
                CMsgExpandableControl* subj = SubjectCtrl();
hgs
parents:
diff changeset
  9495
                if ( subj && 
hgs
parents:
diff changeset
  9496
                     subj->TextContent().DocumentLength() == 0 )
hgs
parents:
diff changeset
  9497
                    {
hgs
parents:
diff changeset
  9498
                    result = EMsgComponentIdSubject;
hgs
parents:
diff changeset
  9499
                    }
hgs
parents:
diff changeset
  9500
                }
hgs
parents:
diff changeset
  9501
            
hgs
parents:
diff changeset
  9502
            if ( result == EMsgComponentIdNull )
hgs
parents:
diff changeset
  9503
                {
hgs
parents:
diff changeset
  9504
                if ( BodyCtrl() )
hgs
parents:
diff changeset
  9505
                    {
hgs
parents:
diff changeset
  9506
                    result = EMsgComponentIdBody;
hgs
parents:
diff changeset
  9507
                    }
hgs
parents:
diff changeset
  9508
                else if ( ImageCtrl() )
hgs
parents:
diff changeset
  9509
                    {
hgs
parents:
diff changeset
  9510
                    result = EMsgComponentIdImage;
hgs
parents:
diff changeset
  9511
                    }
hgs
parents:
diff changeset
  9512
                
hgs
parents:
diff changeset
  9513
                }
hgs
parents:
diff changeset
  9514
            }
hgs
parents:
diff changeset
  9515
        }
hgs
parents:
diff changeset
  9516
        
hgs
parents:
diff changeset
  9517
    return result;
hgs
parents:
diff changeset
  9518
    }
hgs
parents:
diff changeset
  9519
 
hgs
parents:
diff changeset
  9520
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9521
// CUniEditorAppUi::SetMessageTypeLockingL
hgs
parents:
diff changeset
  9522
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9523
//
hgs
parents:
diff changeset
  9524
void CUniEditorAppUi::SetMessageTypeLockingL()
hgs
parents:
diff changeset
  9525
    {
hgs
parents:
diff changeset
  9526
    if ( SmsPlugin() && !MmsPlugin() )
hgs
parents:
diff changeset
  9527
        { 
hgs
parents:
diff changeset
  9528
        // Sms found, no mms
hgs
parents:
diff changeset
  9529
        iMtm->SetMessageTypeSetting( EUniMessageTypeSettingSms );
hgs
parents:
diff changeset
  9530
        iMtm->SetMessageTypeLocking( EUniMessageTypeLocked );
hgs
parents:
diff changeset
  9531
        }
hgs
parents:
diff changeset
  9532
    else if ( !SmsPlugin() && MmsPlugin() )
hgs
parents:
diff changeset
  9533
        { 
hgs
parents:
diff changeset
  9534
        // Mms found, no sms
hgs
parents:
diff changeset
  9535
        iMtm->SetMessageTypeSetting( EUniMessageTypeSettingMms );
hgs
parents:
diff changeset
  9536
        iMtm->SetMessageTypeLocking( EUniMessageTypeLocked );
hgs
parents:
diff changeset
  9537
        }
hgs
parents:
diff changeset
  9538
    else
hgs
parents:
diff changeset
  9539
        { 
hgs
parents:
diff changeset
  9540
        // If we are here, both sms and mms exist
hgs
parents:
diff changeset
  9541
        if ( TUniMsvEntry::IsMmsUpload( Document()->Entry() ) )
hgs
parents:
diff changeset
  9542
            { 
hgs
parents:
diff changeset
  9543
            // If opening upload message -> lock is as mms
hgs
parents:
diff changeset
  9544
            iMtm->SetMessageTypeSetting( EUniMessageTypeSettingMms );
hgs
parents:
diff changeset
  9545
            iMtm->SetMessageTypeLocking( EUniMessageTypeLocked );
hgs
parents:
diff changeset
  9546
            }
hgs
parents:
diff changeset
  9547
        else
hgs
parents:
diff changeset
  9548
            {
hgs
parents:
diff changeset
  9549
            if ( iMtm->MessageTypeLocking() == EUniMessageTypeLockingNotSet )
hgs
parents:
diff changeset
  9550
                { 
hgs
parents:
diff changeset
  9551
                // It's not yet set -> check the settings of SMS conversion
hgs
parents:
diff changeset
  9552
                iMtm->SetMessageTypeLocking( EUniMessageTypeNotLocked );
hgs
parents:
diff changeset
  9553
                
hgs
parents:
diff changeset
  9554
                TUniSendingSettings settings;
hgs
parents:
diff changeset
  9555
                SmsPlugin()->GetSendingSettingsL( settings );
hgs
parents:
diff changeset
  9556
hgs
parents:
diff changeset
  9557
                if ( settings.iMessageType == TUniSendingSettings::EUniMessageTypeFax  ||
hgs
parents:
diff changeset
  9558
                     settings.iMessageType == TUniSendingSettings::EUniMessageTypePaging )
hgs
parents:
diff changeset
  9559
                    { 
hgs
parents:
diff changeset
  9560
                    // It's temporary locked to sms sub type (fax or pager)
hgs
parents:
diff changeset
  9561
                    iMtm->SetMessageTypeSetting( EUniMessageTypeSettingSms );
hgs
parents:
diff changeset
  9562
                    }
hgs
parents:
diff changeset
  9563
                else
hgs
parents:
diff changeset
  9564
                    { 
hgs
parents:
diff changeset
  9565
                    // Otherwise set it to automatic
hgs
parents:
diff changeset
  9566
                    iMtm->SetMessageTypeSetting( EUniMessageTypeSettingAutomatic );
hgs
parents:
diff changeset
  9567
                    }
hgs
parents:
diff changeset
  9568
                }
hgs
parents:
diff changeset
  9569
            }
hgs
parents:
diff changeset
  9570
        }
hgs
parents:
diff changeset
  9571
    }
hgs
parents:
diff changeset
  9572
 
hgs
parents:
diff changeset
  9573
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9574
// CUniEditorAppUi::ActivateInputBlockerL
hgs
parents:
diff changeset
  9575
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9576
//
hgs
parents:
diff changeset
  9577
void CUniEditorAppUi::ActivateInputBlockerL( CActive* aActiveObjectToCancel )
hgs
parents:
diff changeset
  9578
    {
hgs
parents:
diff changeset
  9579
    delete iInputBlocker;
hgs
parents:
diff changeset
  9580
    iInputBlocker = NULL;
hgs
parents:
diff changeset
  9581
    
hgs
parents:
diff changeset
  9582
    iInputBlocker = CAknInputBlock::NewLC();    
hgs
parents:
diff changeset
  9583
    CleanupStack::Pop( iInputBlocker );
hgs
parents:
diff changeset
  9584
    
hgs
parents:
diff changeset
  9585
    if ( aActiveObjectToCancel )
hgs
parents:
diff changeset
  9586
        {
hgs
parents:
diff changeset
  9587
        iInputBlocker->SetCancelActive( aActiveObjectToCancel );
hgs
parents:
diff changeset
  9588
        }
hgs
parents:
diff changeset
  9589
    }
hgs
parents:
diff changeset
  9590
 
hgs
parents:
diff changeset
  9591
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9592
// CUniEditorAppUi::DeactivateInputBlocker
hgs
parents:
diff changeset
  9593
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9594
//
hgs
parents:
diff changeset
  9595
void CUniEditorAppUi::DeactivateInputBlocker()
hgs
parents:
diff changeset
  9596
    {
hgs
parents:
diff changeset
  9597
    if ( iInputBlocker )
hgs
parents:
diff changeset
  9598
        {
hgs
parents:
diff changeset
  9599
        iInputBlocker->SetCancelActive( NULL );    
hgs
parents:
diff changeset
  9600
        delete iInputBlocker;
hgs
parents:
diff changeset
  9601
        iInputBlocker = NULL;
hgs
parents:
diff changeset
  9602
        }
hgs
parents:
diff changeset
  9603
    }
hgs
parents:
diff changeset
  9604
hgs
parents:
diff changeset
  9605
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9606
// CUniEditorAppUi::UpdateToolbarL
hgs
parents:
diff changeset
  9607
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9608
//
hgs
parents:
diff changeset
  9609
void CUniEditorAppUi::UpdateToolbarL()
hgs
parents:
diff changeset
  9610
    {
hgs
parents:
diff changeset
  9611
    if ( iFixedToolbar && !iFixedToolbar->IsDimmed()  )
hgs
parents:
diff changeset
  9612
        {
hgs
parents:
diff changeset
  9613
        iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarSend, EFalse, EFalse );
hgs
parents:
diff changeset
  9614
        
hgs
parents:
diff changeset
  9615
        if ( TUniMsvEntry::IsMmsUpload( Document()->Entry() ) )
hgs
parents:
diff changeset
  9616
            {
hgs
parents:
diff changeset
  9617
            iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarAddRecipient, ETrue, EFalse );
hgs
parents:
diff changeset
  9618
            }
hgs
parents:
diff changeset
  9619
        else
hgs
parents:
diff changeset
  9620
            {
hgs
parents:
diff changeset
  9621
            iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarAddRecipient, EFalse, EFalse );
hgs
parents:
diff changeset
  9622
            }
hgs
parents:
diff changeset
  9623
        
hgs
parents:
diff changeset
  9624
        if ( IsHardcodedSms() ||
hgs
parents:
diff changeset
  9625
             ( Document()->UniState() == EUniMms &&
hgs
parents:
diff changeset
  9626
               Document()->DataModel()->SmilType() != EMmsSmil ) )
hgs
parents:
diff changeset
  9627
hgs
parents:
diff changeset
  9628
            {
hgs
parents:
diff changeset
  9629
            iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, ETrue, EFalse );
hgs
parents:
diff changeset
  9630
            }
hgs
parents:
diff changeset
  9631
        else
hgs
parents:
diff changeset
  9632
            {
hgs
parents:
diff changeset
  9633
            iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, EFalse, EFalse );
hgs
parents:
diff changeset
  9634
            }
hgs
parents:
diff changeset
  9635
        
hgs
parents:
diff changeset
  9636
        iFixedToolbar->DrawNow();
hgs
parents:
diff changeset
  9637
        }
hgs
parents:
diff changeset
  9638
    }
hgs
parents:
diff changeset
  9639
hgs
parents:
diff changeset
  9640
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9641
// CUniEditorAppUi::CheckLockedSmsWithAttaL
hgs
parents:
diff changeset
  9642
// 
hgs
parents:
diff changeset
  9643
// Checks whether message is on locked SMS state with single
hgs
parents:
diff changeset
  9644
// vCard or vCal attachment. In this state text is not allowed
hgs
parents:
diff changeset
  9645
// to be entered into message. First performs state detection.
hgs
parents:
diff changeset
  9646
// If we are on locked SMS with attachment state focus is 
hgs
parents:
diff changeset
  9647
// moved away from subject or body control. Then both subject and
hgs
parents:
diff changeset
  9648
// body text controls are removed. If we are not in locked SMS
hgs
parents:
diff changeset
  9649
// with attachment state subject and body text ccontrol are added
hgs
parents:
diff changeset
  9650
// if appropriate (i.e. they have been removed due to locked SMS
hgs
parents:
diff changeset
  9651
// with attachment state and has not yet been added).
hgs
parents:
diff changeset
  9652
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9653
//
hgs
parents:
diff changeset
  9654
void CUniEditorAppUi::CheckLockedSmsWithAttaL()
hgs
parents:
diff changeset
  9655
    {
hgs
parents:
diff changeset
  9656
    CUniDataModel* model = Document()->DataModel();
hgs
parents:
diff changeset
  9657
    
hgs
parents:
diff changeset
  9658
    TBool lockedSmsWithAtta( EFalse );
hgs
parents:
diff changeset
  9659
    
hgs
parents:
diff changeset
  9660
    if ( IsHardcodedSms() &&
hgs
parents:
diff changeset
  9661
         model->AttachmentList().Count() == 1 )
hgs
parents:
diff changeset
  9662
        {
hgs
parents:
diff changeset
  9663
        CUniObject* obj = model->AttachmentList().GetByIndex( 0 );
hgs
parents:
diff changeset
  9664
        if ( obj &&  
hgs
parents:
diff changeset
  9665
             obj->MimeType().Length() > 0 &&   
hgs
parents:
diff changeset
  9666
             ( obj->MimeType().CompareF( KMsgMimeVCard  ) == 0 || 
hgs
parents:
diff changeset
  9667
#if defined (__I_CAL_SUPPORT) && defined (RD_MESSAGING_ICAL_IMPORT)
hgs
parents:
diff changeset
  9668
               obj->MimeType().CompareF( KMsgMimeICal  ) == 0 ||
hgs
parents:
diff changeset
  9669
#endif
hgs
parents:
diff changeset
  9670
               obj->MimeType().CompareF( KMsgMimeVCal  ) == 0 ) )
hgs
parents:
diff changeset
  9671
            {
hgs
parents:
diff changeset
  9672
            lockedSmsWithAtta = ETrue;
hgs
parents:
diff changeset
  9673
            }
hgs
parents:
diff changeset
  9674
        } 
hgs
parents:
diff changeset
  9675
    
hgs
parents:
diff changeset
  9676
    if ( lockedSmsWithAtta )
hgs
parents:
diff changeset
  9677
        {
hgs
parents:
diff changeset
  9678
        iEditorFlags |= ELockedSmsWithAtta;
hgs
parents:
diff changeset
  9679
        
hgs
parents:
diff changeset
  9680
        CMsgBaseControl* focusedCtrl = iView->FocusedControl();
hgs
parents:
diff changeset
  9681
        if ( focusedCtrl && 
hgs
parents:
diff changeset
  9682
             ( focusedCtrl->ControlId() == EMsgComponentIdSubject ||
hgs
parents:
diff changeset
  9683
               focusedCtrl->ControlId() == EMsgComponentIdBody ) )
hgs
parents:
diff changeset
  9684
            {
hgs
parents:
diff changeset
  9685
            iView->SetFocus( EMsgComponentIdTo );
hgs
parents:
diff changeset
  9686
            }
hgs
parents:
diff changeset
  9687
        
hgs
parents:
diff changeset
  9688
        if ( iEditorFlags & ESubjectOkInSms &&
hgs
parents:
diff changeset
  9689
             SubjectCtrl() )
hgs
parents:
diff changeset
  9690
            {
hgs
parents:
diff changeset
  9691
            iHeader->AddHeadersDeleteL( EUniFeatureSubject, EFalse );
hgs
parents:
diff changeset
  9692
            }
hgs
parents:
diff changeset
  9693
    
hgs
parents:
diff changeset
  9694
        if ( !iStoredBodyControl )
hgs
parents:
diff changeset
  9695
            {   
hgs
parents:
diff changeset
  9696
            iStoredBodyControl = iView->RemoveControlL( EMsgComponentIdBody );
hgs
parents:
diff changeset
  9697
            }
hgs
parents:
diff changeset
  9698
        }
hgs
parents:
diff changeset
  9699
    else
hgs
parents:
diff changeset
  9700
        {  
hgs
parents:
diff changeset
  9701
        if ( iEditorFlags & ELockedSmsWithAtta )
hgs
parents:
diff changeset
  9702
            {
hgs
parents:
diff changeset
  9703
            if ( iEditorFlags & ESubjectOkInSms &&
hgs
parents:
diff changeset
  9704
                 !SubjectCtrl() )
hgs
parents:
diff changeset
  9705
                {
hgs
parents:
diff changeset
  9706
                // Determine if subject field is needed if subject is ok in SMS 
hgs
parents:
diff changeset
  9707
                // and there is no subject field.
hgs
parents:
diff changeset
  9708
                TInt headersVariation = iHeader->AddHeadersVariation();
hgs
parents:
diff changeset
  9709
                TInt headerConfig = iHeader->AddHeadersConfigL();
hgs
parents:
diff changeset
  9710
                
hgs
parents:
diff changeset
  9711
                if ( !( headersVariation & EUniFeatureSubjectConfigurable ) ||
hgs
parents:
diff changeset
  9712
                      ( headersVariation & EUniFeatureSubject &&
hgs
parents:
diff changeset
  9713
                        headerConfig & EUniFeatureSubject ) )
hgs
parents:
diff changeset
  9714
                    {
hgs
parents:
diff changeset
  9715
                    // Insert subject to SMS if it is always visible or selected
hgs
parents:
diff changeset
  9716
                    // and configured on.
hgs
parents:
diff changeset
  9717
                    iHeader->AddHeadersAddL( EUniFeatureSubject );
hgs
parents:
diff changeset
  9718
                    }
hgs
parents:
diff changeset
  9719
                }
hgs
parents:
diff changeset
  9720
            
hgs
parents:
diff changeset
  9721
            if ( iStoredBodyControl )
hgs
parents:
diff changeset
  9722
                {   
hgs
parents:
diff changeset
  9723
                iView->AddControlL( iStoredBodyControl, EMsgComponentIdBody, EMsgFirstControl, EMsgBody );
hgs
parents:
diff changeset
  9724
                iStoredBodyControl = NULL;
hgs
parents:
diff changeset
  9725
                }
hgs
parents:
diff changeset
  9726
            }
hgs
parents:
diff changeset
  9727
        
hgs
parents:
diff changeset
  9728
        iEditorFlags &= ~ELockedSmsWithAtta;
hgs
parents:
diff changeset
  9729
        }
hgs
parents:
diff changeset
  9730
    }
hgs
parents:
diff changeset
  9731
     
hgs
parents:
diff changeset
  9732
hgs
parents:
diff changeset
  9733
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9734
// CUniEditorAppUi::SetFixedToolbarDimmed
hgs
parents:
diff changeset
  9735
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9736
// 
hgs
parents:
diff changeset
  9737
void CUniEditorAppUi::SetFixedToolbarDimmed()
hgs
parents:
diff changeset
  9738
    {
hgs
parents:
diff changeset
  9739
    iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarSend, ETrue, ETrue );
hgs
parents:
diff changeset
  9740
    iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarAddRecipient, ETrue, ETrue );        
hgs
parents:
diff changeset
  9741
    iFixedToolbar->SetItemDimmed( EUniCmdFixedToolbarInsert, ETrue, ETrue );
hgs
parents:
diff changeset
  9742
    }
hgs
parents:
diff changeset
  9743
hgs
parents:
diff changeset
  9744
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9745
// CUniEditorAppUi::EnableFixedToolbar
hgs
parents:
diff changeset
  9746
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9747
// 
hgs
parents:
diff changeset
  9748
void CUniEditorAppUi::EnableFixedToolbar( TAny* aAny )
hgs
parents:
diff changeset
  9749
    {
hgs
parents:
diff changeset
  9750
    static_cast<CUniEditorAppUi*>( aAny )->DoEnableFixedToolbar();
hgs
parents:
diff changeset
  9751
    }
hgs
parents:
diff changeset
  9752
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9753
// CUniEditorAppUi::UpdateFixedToolbar
hgs
parents:
diff changeset
  9754
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9755
// 
hgs
parents:
diff changeset
  9756
void CUniEditorAppUi::UpdateFixedToolbar( TAny* aAny )
hgs
parents:
diff changeset
  9757
    {
hgs
parents:
diff changeset
  9758
    static_cast<CUniEditorAppUi*>( aAny )->DoUpdateFixedToolbar();      
hgs
parents:
diff changeset
  9759
    }
hgs
parents:
diff changeset
  9760
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9761
// CUniEditorAppUi::DisableSendKey
hgs
parents:
diff changeset
  9762
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9763
// 
hgs
parents:
diff changeset
  9764
void CUniEditorAppUi::DisableSendKey(TAny* aAny)
hgs
parents:
diff changeset
  9765
{
hgs
parents:
diff changeset
  9766
	static_cast<CUniEditorAppUi*>( aAny )->SetKeyEventFlags( EDisableSendKeyShort | EDisableSendKeyLong );
hgs
parents:
diff changeset
  9767
}
hgs
parents:
diff changeset
  9768
hgs
parents:
diff changeset
  9769
// CUniEditorAppUi::CreateFixedToolbarL
hgs
parents:
diff changeset
  9770
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9771
// 
hgs
parents:
diff changeset
  9772
void CUniEditorAppUi::CreateFixedToolbarL( TBool aSetDimmed )
hgs
parents:
diff changeset
  9773
    {
hgs
parents:
diff changeset
  9774
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  9775
    if ( AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
  9776
        {        
hgs
parents:
diff changeset
  9777
        if ( !iFixedToolbar )
hgs
parents:
diff changeset
  9778
            {
hgs
parents:
diff changeset
  9779
            iFixedToolbar = CAknToolbar::NewL( R_UNIEDITOR_TOOLBAR );
hgs
parents:
diff changeset
  9780
            iFixedToolbar->SetToolbarObserver( this );            
hgs
parents:
diff changeset
  9781
            
hgs
parents:
diff changeset
  9782
             if ( aSetDimmed )
hgs
parents:
diff changeset
  9783
                {
hgs
parents:
diff changeset
  9784
                SetFixedToolbarDimmed();
hgs
parents:
diff changeset
  9785
                }
hgs
parents:
diff changeset
  9786
            if ( !( iEditorFlags & EToolbarHidden ) )
hgs
parents:
diff changeset
  9787
                {
hgs
parents:
diff changeset
  9788
                iFixedToolbar->SetToolbarVisibility( ETrue, EFalse );
hgs
parents:
diff changeset
  9789
                }
hgs
parents:
diff changeset
  9790
            }
hgs
parents:
diff changeset
  9791
        
hgs
parents:
diff changeset
  9792
        CEikAppUiFactory* appUiFactory = static_cast<CEikAppUiFactory*>( iEikonEnv->AppUiFactory() );
hgs
parents:
diff changeset
  9793
        
hgs
parents:
diff changeset
  9794
        CAknToolbar* oldFixedToolbar = appUiFactory->CurrentFixedToolbar();
hgs
parents:
diff changeset
  9795
        if ( oldFixedToolbar != iFixedToolbar )
hgs
parents:
diff changeset
  9796
            {
hgs
parents:
diff changeset
  9797
            oldFixedToolbar->HideItemsAndDrawOnlyBackground( ETrue );
hgs
parents:
diff changeset
  9798
            appUiFactory->SetViewFixedToolbar( iFixedToolbar );     
hgs
parents:
diff changeset
  9799
            }
hgs
parents:
diff changeset
  9800
        
hgs
parents:
diff changeset
  9801
       
hgs
parents:
diff changeset
  9802
        }
hgs
parents:
diff changeset
  9803
    else
hgs
parents:
diff changeset
  9804
        {
hgs
parents:
diff changeset
  9805
        static_cast<CEikAppUiFactory*>( iEikonEnv->AppUiFactory() )->SetViewFixedToolbar( NULL );
hgs
parents:
diff changeset
  9806
        
hgs
parents:
diff changeset
  9807
        delete iFixedToolbar;
hgs
parents:
diff changeset
  9808
        iFixedToolbar = NULL;
hgs
parents:
diff changeset
  9809
        }
hgs
parents:
diff changeset
  9810
#endif // RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  9811
    }
hgs
parents:
diff changeset
  9812
hgs
parents:
diff changeset
  9813
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9814
// CUniEditorAppUi::SetExtensionButtonDimmed
hgs
parents:
diff changeset
  9815
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9816
// 
hgs
parents:
diff changeset
  9817
void CUniEditorAppUi::SetExtensionButtonDimmed( CAknToolbarExtension* aExtension, 
hgs
parents:
diff changeset
  9818
                                                TInt aButtonId, 
hgs
parents:
diff changeset
  9819
                                                TBool aDimmed )
hgs
parents:
diff changeset
  9820
    { 
hgs
parents:
diff changeset
  9821
    CAknButton* buttonControl = static_cast<CAknButton*>( aExtension->ControlOrNull( aButtonId ) );
hgs
parents:
diff changeset
  9822
    if ( buttonControl &&
hgs
parents:
diff changeset
  9823
         buttonControl->IsDimmed() != aDimmed )
hgs
parents:
diff changeset
  9824
        {
hgs
parents:
diff changeset
  9825
        buttonControl->SetDimmed( aDimmed );             
hgs
parents:
diff changeset
  9826
        }
hgs
parents:
diff changeset
  9827
    }
hgs
parents:
diff changeset
  9828
hgs
parents:
diff changeset
  9829
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9830
// CUniEditorAppUi::DoEnableFixedToolbar
hgs
parents:
diff changeset
  9831
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9832
//
hgs
parents:
diff changeset
  9833
void CUniEditorAppUi::DoEnableFixedToolbar()
hgs
parents:
diff changeset
  9834
    {
hgs
parents:
diff changeset
  9835
    if ( iFixedToolbar )
hgs
parents:
diff changeset
  9836
        {
hgs
parents:
diff changeset
  9837
        iFixedToolbar->HideItemsAndDrawOnlyBackground( EFalse );
hgs
parents:
diff changeset
  9838
        }
hgs
parents:
diff changeset
  9839
    
hgs
parents:
diff changeset
  9840
    iEditorFlags &= ~EToolbarHidden;
hgs
parents:
diff changeset
  9841
    }
hgs
parents:
diff changeset
  9842
hgs
parents:
diff changeset
  9843
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9844
// CUniEditorAppUi::DoUpdateFixedToolbar
hgs
parents:
diff changeset
  9845
// Update the Toolbar which was dimmed while launching
hgs
parents:
diff changeset
  9846
// the Dialog 
hgs
parents:
diff changeset
  9847
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9848
//
hgs
parents:
diff changeset
  9849
void CUniEditorAppUi::DoUpdateFixedToolbar()
hgs
parents:
diff changeset
  9850
    {
hgs
parents:
diff changeset
  9851
     TRAP_IGNORE(UpdateToolbarL());    
hgs
parents:
diff changeset
  9852
    }
hgs
parents:
diff changeset
  9853
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9854
// CUniEditorAppUi::DoEnterKeyL
hgs
parents:
diff changeset
  9855
//
hgs
parents:
diff changeset
  9856
// Performs a special handling for enter key when certain control is
hgs
parents:
diff changeset
  9857
// focused. Enter key presses are mapped to selection key presses in
hgs
parents:
diff changeset
  9858
// thse controls.
hgs
parents:
diff changeset
  9859
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9860
// 
hgs
parents:
diff changeset
  9861
TBool CUniEditorAppUi::DoEnterKeyL()
hgs
parents:
diff changeset
  9862
    {
hgs
parents:
diff changeset
  9863
    TBool result( EFalse );
hgs
parents:
diff changeset
  9864
    CMsgBaseControl* ctrl = iView->FocusedControl();
hgs
parents:
diff changeset
  9865
hgs
parents:
diff changeset
  9866
    if ( ctrl )
hgs
parents:
diff changeset
  9867
        {
hgs
parents:
diff changeset
  9868
        switch ( ctrl->ControlId() )
hgs
parents:
diff changeset
  9869
            {
hgs
parents:
diff changeset
  9870
            case EMsgComponentIdAttachment:
hgs
parents:
diff changeset
  9871
            case EMsgComponentIdImage:
hgs
parents:
diff changeset
  9872
            case EMsgComponentIdVideo:
hgs
parents:
diff changeset
  9873
            case EMsgComponentIdAudio:
hgs
parents:
diff changeset
  9874
            case EMsgComponentIdSvg:
hgs
parents:
diff changeset
  9875
                {
hgs
parents:
diff changeset
  9876
                DoSelectionKeyL();
hgs
parents:
diff changeset
  9877
                result = ETrue;
hgs
parents:
diff changeset
  9878
                break;
hgs
parents:
diff changeset
  9879
                }
hgs
parents:
diff changeset
  9880
            default:
hgs
parents:
diff changeset
  9881
                {
hgs
parents:
diff changeset
  9882
                break;
hgs
parents:
diff changeset
  9883
                }
hgs
parents:
diff changeset
  9884
            }
hgs
parents:
diff changeset
  9885
        }
hgs
parents:
diff changeset
  9886
    
hgs
parents:
diff changeset
  9887
    return result;
hgs
parents:
diff changeset
  9888
    }
hgs
parents:
diff changeset
  9889
hgs
parents:
diff changeset
  9890
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9891
// CUniEditorAppUi::HandleNotifyInt
hgs
parents:
diff changeset
  9892
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9893
//
hgs
parents:
diff changeset
  9894
void CUniEditorAppUi::HandleNotifyInt( TUint32 /*aId*/, TInt /*aNewValue*/ )
hgs
parents:
diff changeset
  9895
    {
hgs
parents:
diff changeset
  9896
    if( iNLTFeatureSupport )
hgs
parents:
diff changeset
  9897
        {
hgs
parents:
diff changeset
  9898
        //Turkish SMS-PREQ2265 specific
hgs
parents:
diff changeset
  9899
        //Get the new lang id and corresponding alternative encoding if any
hgs
parents:
diff changeset
  9900
        CUniEditorDocument *doc = Document();
hgs
parents:
diff changeset
  9901
        TInt inputLang;
hgs
parents:
diff changeset
  9902
              
hgs
parents:
diff changeset
  9903
        //Update the setting cache, so that new language id is returned correctly
hgs
parents:
diff changeset
  9904
        iAvkonEnv->SettingCache().Update(KEikInputLanguageChange);
hgs
parents:
diff changeset
  9905
        inputLang = iAvkonEnv->SettingCache().InputLanguage();
hgs
parents:
diff changeset
  9906
        iSettingsChanged = ETrue;
hgs
parents:
diff changeset
  9907
        
hgs
parents:
diff changeset
  9908
        TSmsEncoding alternateEncoding = doc->GetLanguageSpecificAltEncodingType(inputLang);
hgs
parents:
diff changeset
  9909
        
hgs
parents:
diff changeset
  9910
        doc->SetAlternativeEncodingType(alternateEncoding);
hgs
parents:
diff changeset
  9911
        //Reset unicode mode to False and set the corresponding language alternative encoding type accordingly
hgs
parents:
diff changeset
  9912
        if(doc->SmsPlugin())
hgs
parents:
diff changeset
  9913
            {
hgs
parents:
diff changeset
  9914
            doc->SmsPlugin()->SetEncodingSettings(EFalse, alternateEncoding, doc->CharSetSupport());
hgs
parents:
diff changeset
  9915
            }        
hgs
parents:
diff changeset
  9916
        }
hgs
parents:
diff changeset
  9917
	//TODO :: Should add check size and show note???
hgs
parents:
diff changeset
  9918
    TRAP_IGNORE(
hgs
parents:
diff changeset
  9919
        {
hgs
parents:
diff changeset
  9920
        CheckSmsSizeAndUnicodeL();
hgs
parents:
diff changeset
  9921
        MsgLengthToNavipaneL();
hgs
parents:
diff changeset
  9922
        } );
hgs
parents:
diff changeset
  9923
    }
hgs
parents:
diff changeset
  9924
hgs
parents:
diff changeset
  9925
#ifdef RD_SCALABLE_UI_V2
hgs
parents:
diff changeset
  9926
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9927
// CUniEditorAppUi::OnPeninputUiActivated
hgs
parents:
diff changeset
  9928
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9929
// 
hgs
parents:
diff changeset
  9930
void CUniEditorAppUi::OnPeninputUiActivated()
hgs
parents:
diff changeset
  9931
    {
hgs
parents:
diff changeset
  9932
    TRAP_IGNORE( SmsMsgLenToPenInputL() );
hgs
parents:
diff changeset
  9933
    }
hgs
parents:
diff changeset
  9934
hgs
parents:
diff changeset
  9935
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9936
// CUniEditorAppUi::OnPeninputUiDeactivated
hgs
parents:
diff changeset
  9937
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9938
//
hgs
parents:
diff changeset
  9939
void CUniEditorAppUi::OnPeninputUiDeactivated()
hgs
parents:
diff changeset
  9940
    {
hgs
parents:
diff changeset
  9941
     if (AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
  9942
        {
hgs
parents:
diff changeset
  9943
           iPeninputServer.UpdateAppInfo( KNullDesC, EAppIndicatorMsg );    
hgs
parents:
diff changeset
  9944
        }
hgs
parents:
diff changeset
  9945
    }
hgs
parents:
diff changeset
  9946
#else
hgs
parents:
diff changeset
  9947
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9948
// CUniEditorAppUi::OnPeninputUiActivated
hgs
parents:
diff changeset
  9949
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9950
//
hgs
parents:
diff changeset
  9951
void CUniEditorAppUi::OnPeninputUiActivated()
hgs
parents:
diff changeset
  9952
    {
hgs
parents:
diff changeset
  9953
    }
hgs
parents:
diff changeset
  9954
hgs
parents:
diff changeset
  9955
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9956
// CUniEditorAppUi::OnPeninputUiDeactivated
hgs
parents:
diff changeset
  9957
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9958
//
hgs
parents:
diff changeset
  9959
void CUniEditorAppUi::OnPeninputUiDeactivated()
hgs
parents:
diff changeset
  9960
    {
hgs
parents:
diff changeset
  9961
    }
hgs
parents:
diff changeset
  9962
#endif    
hgs
parents:
diff changeset
  9963
hgs
parents:
diff changeset
  9964
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9965
// CUniEditorAppUi::SmsMsgLenToPenInputL
hgs
parents:
diff changeset
  9966
// ---------------------------------------------------------
hgs
parents:
diff changeset
  9967
//
hgs
parents:
diff changeset
  9968
void CUniEditorAppUi::SmsMsgLenToPenInputL()
hgs
parents:
diff changeset
  9969
    {
hgs
parents:
diff changeset
  9970
    CMsgBaseControl* ctrl = iView->FocusedControl();
hgs
parents:
diff changeset
  9971
    CUniEditorDocument* doc = Document();
hgs
parents:
diff changeset
  9972
           
hgs
parents:
diff changeset
  9973
    if ( doc->UniState() == EUniSms && ctrl && iMsgLenToVKB && UpdateMsgLenToPenInput())
hgs
parents:
diff changeset
  9974
        {
hgs
parents:
diff changeset
  9975
        MsgLengthToNavipaneL( ETrue );
hgs
parents:
diff changeset
  9976
        }
hgs
parents:
diff changeset
  9977
    else
hgs
parents:
diff changeset
  9978
        { 
hgs
parents:
diff changeset
  9979
        if (AknLayoutUtils::PenEnabled() )
hgs
parents:
diff changeset
  9980
            {
hgs
parents:
diff changeset
  9981
            iPeninputServer.UpdateAppInfo( KNullDesC, EAppIndicatorMsg );    
hgs
parents:
diff changeset
  9982
            }     
hgs
parents:
diff changeset
  9983
        }        
hgs
parents:
diff changeset
  9984
    }
hgs
parents:
diff changeset
  9985
TBool CUniEditorAppUi::UpdateMsgLenToPenInput()
hgs
parents:
diff changeset
  9986
    {
hgs
parents:
diff changeset
  9987
    CMsgBaseControl* ctrl = iView->FocusedControl();
hgs
parents:
diff changeset
  9988
    if ( ctrl->ControlId() == EMsgComponentIdBody || 
hgs
parents:
diff changeset
  9989
       ( ctrl->ControlId() == EMsgComponentIdSubject && iEditorFlags & ESubjectOkInSms ) )                      
hgs
parents:
diff changeset
  9990
       {
hgs
parents:
diff changeset
  9991
       return ETrue;
hgs
parents:
diff changeset
  9992
       }
hgs
parents:
diff changeset
  9993
    else
hgs
parents:
diff changeset
  9994
       {
hgs
parents:
diff changeset
  9995
       return EFalse;           
hgs
parents:
diff changeset
  9996
       }
hgs
parents:
diff changeset
  9997
        
hgs
parents:
diff changeset
  9998
    }
hgs
parents:
diff changeset
  9999
hgs
parents:
diff changeset
 10000
// ---------------------------------------------------------
hgs
parents:
diff changeset
 10001
// CUniEditorAppUi::ExitWithoutSave
hgs
parents:
diff changeset
 10002
//	Exits from the Unified Editor whne there is not sufficient memory to continue
hgs
parents:
diff changeset
 10003
// ---------------------------------------------------------
hgs
parents:
diff changeset
 10004
//
hgs
parents:
diff changeset
 10005
void CUniEditorAppUi::ExitWithoutSave()
hgs
parents:
diff changeset
 10006
    {
hgs
parents:
diff changeset
 10007
     DeactivateInputBlocker();
hgs
parents:
diff changeset
 10008
     EndActiveWait();
hgs
parents:
diff changeset
 10009
     RemoveWaitNote();
hgs
parents:
diff changeset
 10010
     TRAP_IGNORE(ShowConfirmableInfoL( R_UNIEDITOR_NOT_ENOUGH_MEMORY));     
hgs
parents:
diff changeset
 10011
     Exit( EAknSoftkeyClose );
hgs
parents:
diff changeset
 10012
    }
hgs
parents:
diff changeset
 10013
// ---------------------------------------------------------
hgs
parents:
diff changeset
 10014
// CUniEditorAppUi::HandleLongTapEventL
hgs
parents:
diff changeset
 10015
//  Function for handling the long tap events
hgs
parents:
diff changeset
 10016
// ---------------------------------------------------------
hgs
parents:
diff changeset
 10017
//
hgs
parents:
diff changeset
 10018
void CUniEditorAppUi::HandleLongTapEventL(const TPoint& aPenEventLocation, 
hgs
parents:
diff changeset
 10019
										  const TPoint& aPenEventScreenLocation )
hgs
parents:
diff changeset
 10020
    {
hgs
parents:
diff changeset
 10021
    CMsgBaseControl* ctrl = iView->FocusedControl(); // ctrl can be NULL.
hgs
parents:
diff changeset
 10022
    if ( ctrl && 
hgs
parents:
diff changeset
 10023
         ( ctrl->ControlId() == EMsgComponentIdAudio ||
hgs
parents:
diff changeset
 10024
                 ctrl->ControlId() == EMsgComponentIdImage ||
hgs
parents:
diff changeset
 10025
                 ctrl->ControlId() == EMsgComponentIdVideo ||
hgs
parents:
diff changeset
 10026
                 ctrl->ControlId() == EMsgComponentIdSvg ) )
hgs
parents:
diff changeset
 10027
        {
hgs
parents:
diff changeset
 10028
        TRect rect = ctrl->Rect();
hgs
parents:
diff changeset
 10029
hgs
parents:
diff changeset
 10030
        if ((!iTapConsumed)&&rect.Contains(aPenEventLocation))
hgs
parents:
diff changeset
 10031
            {
hgs
parents:
diff changeset
 10032
            if (iEmbeddedObjectStylusPopup)
hgs
parents:
diff changeset
 10033
                {
hgs
parents:
diff changeset
 10034
                delete iEmbeddedObjectStylusPopup;
hgs
parents:
diff changeset
 10035
                iEmbeddedObjectStylusPopup = NULL;
hgs
parents:
diff changeset
 10036
                }
hgs
parents:
diff changeset
 10037
            iEmbeddedObjectStylusPopup = CAknStylusPopUpMenu::NewL(this,aPenEventLocation);
hgs
parents:
diff changeset
 10038
            TResourceReader reader;
hgs
parents:
diff changeset
 10039
            iCoeEnv->CreateResourceReaderLC(reader,R_UNIEDITOR_EMBEDDED_OBJECT_STYLUS_MENU );
hgs
parents:
diff changeset
 10040
            iEmbeddedObjectStylusPopup->ConstructFromResourceL(reader);
hgs
parents:
diff changeset
 10041
            CleanupStack::PopAndDestroy();
hgs
parents:
diff changeset
 10042
            iEmbeddedObjectStylusPopup->SetPosition(aPenEventLocation);
hgs
parents:
diff changeset
 10043
            iEmbeddedObjectStylusPopup->ShowMenu();
hgs
parents:
diff changeset
 10044
            iTapConsumed = ETrue;
hgs
parents:
diff changeset
 10045
            }
hgs
parents:
diff changeset
 10046
        }   
hgs
parents:
diff changeset
 10047
    }
hgs
parents:
diff changeset
 10048
hgs
parents:
diff changeset
 10049
// ---------------------------------------------------------
hgs
parents:
diff changeset
 10050
// CUniEditorAppUi::IsObjectPathValidL
hgs
parents:
diff changeset
 10051
// Checks whether all inserted object's path are valid
hgs
parents:
diff changeset
 10052
// message.
hgs
parents:
diff changeset
 10053
// ---------------------------------------------------------
hgs
parents:
diff changeset
 10054
//
hgs
parents:
diff changeset
 10055
TBool CUniEditorAppUi::IsObjectsPathValidL() const
hgs
parents:
diff changeset
 10056
    {
hgs
parents:
diff changeset
 10057
    TBool bCanSave = ETrue;  
hgs
parents:
diff changeset
 10058
    if ( Document()->DataModel()->SmilType() == EMmsSmil )
hgs
parents:
diff changeset
 10059
        {
hgs
parents:
diff changeset
 10060
        bCanSave = Document()->DataModel()->ObjectList().IsListValid();
hgs
parents:
diff changeset
 10061
        
hgs
parents:
diff changeset
 10062
        if(bCanSave)
hgs
parents:
diff changeset
 10063
            {
hgs
parents:
diff changeset
 10064
            bCanSave = Document()->DataModel()->AttachmentList().IsListValid();
hgs
parents:
diff changeset
 10065
            }
hgs
parents:
diff changeset
 10066
        }      
hgs
parents:
diff changeset
 10067
    return bCanSave;
hgs
parents:
diff changeset
 10068
    }
hgs
parents:
diff changeset
 10069
hgs
parents:
diff changeset
 10070
// ---------------------------------------------------------
hgs
parents:
diff changeset
 10071
// CUniEditorAppUi::ShowDiscreetPopUpL
hgs
parents:
diff changeset
 10072
// Shows the Popup note in ITUT, when message size exceeds or deceeds 
hgs
parents:
diff changeset
 10073
// a certain limit or it changes from sms to mms and vice versa
hgs
parents:
diff changeset
 10074
// ---------------------------------------------------------
hgs
parents:
diff changeset
 10075
//
hgs
parents:
diff changeset
 10076
void CUniEditorAppUi::ShowDiscreetPopUpL(const TDesC& aMessage)
hgs
parents:
diff changeset
 10077
	{
hgs
parents:
diff changeset
 10078
	TInt  bitmapId = KErrNotFound;
hgs
parents:
diff changeset
 10079
	TInt  maskId = KErrNotFound;
hgs
parents:
diff changeset
 10080
   
hgs
parents:
diff changeset
 10081
   // No discreet popup => Uid 0
hgs
parents:
diff changeset
 10082
   const TUid KDiscreetPopupUidNone =
hgs
parents:
diff changeset
 10083
	   {
hgs
parents:
diff changeset
 10084
	   0x0
hgs
parents:
diff changeset
 10085
	   };
hgs
parents:
diff changeset
 10086
	
hgs
parents:
diff changeset
 10087
	CAknDiscreetPopup::ShowGlobalPopupL(aMessage, // 1st text row
hgs
parents:
diff changeset
 10088
			KNullDesC, // second text row
hgs
parents:
diff changeset
 10089
			KAknsIIDDefault, // icon skin id
hgs
parents:
diff changeset
 10090
			KNullDesC, // bitmap file path
hgs
parents:
diff changeset
 10091
			bitmapId, // bitmap id
hgs
parents:
diff changeset
 10092
			maskId, // mask id
hgs
parents:
diff changeset
 10093
			KAknDiscreetPopupDurationLong, // flags
hgs
parents:
diff changeset
 10094
			0, // command id
hgs
parents:
diff changeset
 10095
			NULL, // command observer
hgs
parents:
diff changeset
 10096
			KDiscreetPopupUidNone, // application to be launched
hgs
parents:
diff changeset
 10097
			KDiscreetPopupUidNone); // view to be activated
hgs
parents:
diff changeset
 10098
	}
hgs
parents:
diff changeset
 10099
hgs
parents:
diff changeset
 10100
// End of file
hgs
parents:
diff changeset
 10101