mobilemessaging/unieditor/application/src/UniEditorInsertOperation.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,2007 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:   CUniEditorInsertOperation.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// ========== INCLUDE FILES ================================
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <apmstd.h>
hgs
parents:
diff changeset
    23
#include <mmsconst.h>
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include <MmsConformance.h>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include <MsgMediaInfo.h>
hgs
parents:
diff changeset
    28
#include <MsgImageInfo.h>
hgs
parents:
diff changeset
    29
#include <MsgVideoInfo.h>
hgs
parents:
diff changeset
    30
#include <MsgMimeTypes.h>
hgs
parents:
diff changeset
    31
#include <msgimagecontrol.h>
hgs
parents:
diff changeset
    32
#include <msgvideocontrol.h>
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
// DRM
hgs
parents:
diff changeset
    35
#include <fileprotectionresolver.h>
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
#include "unislideloader.h"
hgs
parents:
diff changeset
    38
#include "UniClientMtm.h"
hgs
parents:
diff changeset
    39
#include "UniEditorEnum.h"
hgs
parents:
diff changeset
    40
#include "UniEditorDocument.h"
hgs
parents:
diff changeset
    41
#include "UniEditorProcessImageOperation.h"
hgs
parents:
diff changeset
    42
#include "UniEditorChangeSlideOperation.h"
hgs
parents:
diff changeset
    43
#include "UniEditorConvertVideoOperation.h"
hgs
parents:
diff changeset
    44
#include "UniEditorInsertOperation.h"
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
// ========== CONSTANTS ====================================
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
// ========== MEMBER FUNCTIONS =============================
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// ---------------------------------------------------------
hgs
parents:
diff changeset
    51
// CUniEditorInsertOperation::NewL
hgs
parents:
diff changeset
    52
//
hgs
parents:
diff changeset
    53
// Two-phased constructor.
hgs
parents:
diff changeset
    54
// ---------------------------------------------------------
hgs
parents:
diff changeset
    55
//
hgs
parents:
diff changeset
    56
CUniEditorInsertOperation* CUniEditorInsertOperation::NewL( 
hgs
parents:
diff changeset
    57
        MUniEditorOperationObserver& aOperationObserver,
hgs
parents:
diff changeset
    58
        CUniEditorDocument& aDocument,
hgs
parents:
diff changeset
    59
        CUniEditorHeader& aHeader,
hgs
parents:
diff changeset
    60
        CUniSlideLoader& aSlideLoader,
hgs
parents:
diff changeset
    61
        CMsgEditorView& aView,
hgs
parents:
diff changeset
    62
        RFs& aFs )
hgs
parents:
diff changeset
    63
    {
hgs
parents:
diff changeset
    64
    CUniEditorInsertOperation* self = new ( ELeave ) CUniEditorInsertOperation(
hgs
parents:
diff changeset
    65
            aOperationObserver,
hgs
parents:
diff changeset
    66
            aDocument,
hgs
parents:
diff changeset
    67
            aHeader,
hgs
parents:
diff changeset
    68
            aSlideLoader,
hgs
parents:
diff changeset
    69
            aView,
hgs
parents:
diff changeset
    70
            aFs );
hgs
parents:
diff changeset
    71
            
hgs
parents:
diff changeset
    72
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    73
    self->ConstructL();
hgs
parents:
diff changeset
    74
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    75
    
hgs
parents:
diff changeset
    76
    return self;
hgs
parents:
diff changeset
    77
    }
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
// ---------------------------------------------------------
hgs
parents:
diff changeset
    80
// CUniEditorInsertOperation::CUniEditorInsertOperation
hgs
parents:
diff changeset
    81
// ---------------------------------------------------------
hgs
parents:
diff changeset
    82
//
hgs
parents:
diff changeset
    83
CUniEditorInsertOperation::CUniEditorInsertOperation(
hgs
parents:
diff changeset
    84
        MUniEditorOperationObserver& aOperationObserver,
hgs
parents:
diff changeset
    85
        CUniEditorDocument& aDocument,
hgs
parents:
diff changeset
    86
        CUniEditorHeader& aHeader,
hgs
parents:
diff changeset
    87
        CUniSlideLoader& aSlideLoader,
hgs
parents:
diff changeset
    88
        CMsgEditorView& aView,
hgs
parents:
diff changeset
    89
        RFs& aFs ) :
hgs
parents:
diff changeset
    90
    CUniEditorOperation( aOperationObserver, aDocument, aFs, EUniEditorOperationInsert ),
hgs
parents:
diff changeset
    91
    iHeader( aHeader ),
hgs
parents:
diff changeset
    92
    iSlideLoader( aSlideLoader ),
hgs
parents:
diff changeset
    93
    iView( aView ),
hgs
parents:
diff changeset
    94
    iInsertedSlide( -1 ),
hgs
parents:
diff changeset
    95
    iPreviousSlide( -1 )
hgs
parents:
diff changeset
    96
    {
hgs
parents:
diff changeset
    97
    }
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
// ---------------------------------------------------------
hgs
parents:
diff changeset
   100
// CUniEditorInsertOperation::ConstructL
hgs
parents:
diff changeset
   101
// 2nd phase constructor
hgs
parents:
diff changeset
   102
// ---------------------------------------------------------
hgs
parents:
diff changeset
   103
//
hgs
parents:
diff changeset
   104
void CUniEditorInsertOperation::ConstructL()
hgs
parents:
diff changeset
   105
    {
hgs
parents:
diff changeset
   106
    BaseConstructL();
hgs
parents:
diff changeset
   107
    }
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
// ---------------------------------------------------------
hgs
parents:
diff changeset
   110
// CUniEditorInsertOperation::~CUniEditorInsertOperation
hgs
parents:
diff changeset
   111
// ---------------------------------------------------------
hgs
parents:
diff changeset
   112
//
hgs
parents:
diff changeset
   113
CUniEditorInsertOperation::~CUniEditorInsertOperation()
hgs
parents:
diff changeset
   114
    {
hgs
parents:
diff changeset
   115
    Cancel();
hgs
parents:
diff changeset
   116
    delete iOldInfo;
hgs
parents:
diff changeset
   117
    delete iNewInfo;
hgs
parents:
diff changeset
   118
    
hgs
parents:
diff changeset
   119
    delete iImageOperation;
hgs
parents:
diff changeset
   120
    delete iVideoOperation;
hgs
parents:
diff changeset
   121
    delete iChangeSlideOperation;
hgs
parents:
diff changeset
   122
    }
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
// ---------------------------------------------------------
hgs
parents:
diff changeset
   125
// CUniEditorInsertOperation::Insert
hgs
parents:
diff changeset
   126
// ---------------------------------------------------------
hgs
parents:
diff changeset
   127
//
hgs
parents:
diff changeset
   128
void CUniEditorInsertOperation::Insert( CMsgMediaInfo* aInfo, 
hgs
parents:
diff changeset
   129
                                        TBool aAddSlide, 
hgs
parents:
diff changeset
   130
                                        TBool aAddAsAttachment )
hgs
parents:
diff changeset
   131
    {
hgs
parents:
diff changeset
   132
    ResetErrors();
hgs
parents:
diff changeset
   133
    
hgs
parents:
diff changeset
   134
    iInsertedSlide = -1;
hgs
parents:
diff changeset
   135
    iInsertedObject = NULL;
hgs
parents:
diff changeset
   136
    iOldInfo = aInfo;
hgs
parents:
diff changeset
   137
    iAddSlide = aAddSlide;
hgs
parents:
diff changeset
   138
    
hgs
parents:
diff changeset
   139
    if ( aInfo &&
hgs
parents:
diff changeset
   140
         aInfo->Protection() & EFileProtDrm2 )
hgs
parents:
diff changeset
   141
        {
hgs
parents:
diff changeset
   142
        // DRM 2 content is always added as an attachment.
hgs
parents:
diff changeset
   143
        iAddAsAttachment = ETrue;
hgs
parents:
diff changeset
   144
        }
hgs
parents:
diff changeset
   145
    else
hgs
parents:
diff changeset
   146
        {
hgs
parents:
diff changeset
   147
        iAddAsAttachment = aAddAsAttachment;
hgs
parents:
diff changeset
   148
        }   
hgs
parents:
diff changeset
   149
      
hgs
parents:
diff changeset
   150
    //Coverty fix : Forward Null http://ousrv057/cov.cgi?cid=35696
hgs
parents:
diff changeset
   151
    if ( aInfo && aInfo->MediaType() == EMsgMediaImage )
hgs
parents:
diff changeset
   152
        {
hgs
parents:
diff changeset
   153
        iOperationState = EUniInsertCheckMode;
hgs
parents:
diff changeset
   154
        }
hgs
parents:
diff changeset
   155
    else if ( aInfo && aInfo->MimeType() == KMsgMimeVideoMp4 )
hgs
parents:
diff changeset
   156
        {
hgs
parents:
diff changeset
   157
        iOperationState = EUniInsertConvertVideo;
hgs
parents:
diff changeset
   158
        }
hgs
parents:
diff changeset
   159
    else    
hgs
parents:
diff changeset
   160
        {
hgs
parents:
diff changeset
   161
        iOperationState = EUniInsertCopyAttachment;
hgs
parents:
diff changeset
   162
        }
hgs
parents:
diff changeset
   163
        
hgs
parents:
diff changeset
   164
    CompleteSelf( KErrNone );
hgs
parents:
diff changeset
   165
    }
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
// ---------------------------------------------------------
hgs
parents:
diff changeset
   168
// CUniEditorInsertOperation::RunL
hgs
parents:
diff changeset
   169
// ---------------------------------------------------------
hgs
parents:
diff changeset
   170
//
hgs
parents:
diff changeset
   171
void CUniEditorInsertOperation::RunL()
hgs
parents:
diff changeset
   172
    {
hgs
parents:
diff changeset
   173
    PrintOperationAndState();
hgs
parents:
diff changeset
   174
    
hgs
parents:
diff changeset
   175
    if ( iStatus.Int() != KErrNone )
hgs
parents:
diff changeset
   176
        {
hgs
parents:
diff changeset
   177
        SetError( iStatus.Int() );
hgs
parents:
diff changeset
   178
        iOperationState = EUniInsertError;
hgs
parents:
diff changeset
   179
        }
hgs
parents:
diff changeset
   180
        
hgs
parents:
diff changeset
   181
    switch ( iOperationState )
hgs
parents:
diff changeset
   182
        {
hgs
parents:
diff changeset
   183
        case EUniInsertCheckMode:
hgs
parents:
diff changeset
   184
            {
hgs
parents:
diff changeset
   185
            DoCheckModeL();
hgs
parents:
diff changeset
   186
            break;
hgs
parents:
diff changeset
   187
            }
hgs
parents:
diff changeset
   188
        case EUniInsertProcessImage:
hgs
parents:
diff changeset
   189
            {
hgs
parents:
diff changeset
   190
            DoStartProcessImageL();
hgs
parents:
diff changeset
   191
            break;
hgs
parents:
diff changeset
   192
            }
hgs
parents:
diff changeset
   193
       case EUniInsertConvertVideo:
hgs
parents:
diff changeset
   194
            {
hgs
parents:
diff changeset
   195
            DoStartConvertVideoL();
hgs
parents:
diff changeset
   196
            break;    
hgs
parents:
diff changeset
   197
            }
hgs
parents:
diff changeset
   198
        case EUniInsertCheckSize:
hgs
parents:
diff changeset
   199
            {
hgs
parents:
diff changeset
   200
            DoCheckSizeL();
hgs
parents:
diff changeset
   201
            break;
hgs
parents:
diff changeset
   202
            }
hgs
parents:
diff changeset
   203
        case EUniInsertCopyAttachment:
hgs
parents:
diff changeset
   204
            {
hgs
parents:
diff changeset
   205
            iObserver.EditorOperationEvent( EUniEditorOperationInsert,
hgs
parents:
diff changeset
   206
                                            EUniEditorOperationProcessing );
hgs
parents:
diff changeset
   207
            DoStartCopyAttachmentL();
hgs
parents:
diff changeset
   208
            break;
hgs
parents:
diff changeset
   209
            }
hgs
parents:
diff changeset
   210
        case EUniInsertLoad:
hgs
parents:
diff changeset
   211
            {
hgs
parents:
diff changeset
   212
            DoStartLoadL();
hgs
parents:
diff changeset
   213
            break;
hgs
parents:
diff changeset
   214
            }
hgs
parents:
diff changeset
   215
        case EUniInsertReady:
hgs
parents:
diff changeset
   216
            {
hgs
parents:
diff changeset
   217
            iObserver.EditorOperationEvent( EUniEditorOperationInsert,
hgs
parents:
diff changeset
   218
                                            EUniEditorOperationComplete );
hgs
parents:
diff changeset
   219
            break;
hgs
parents:
diff changeset
   220
            }
hgs
parents:
diff changeset
   221
        case EUniInsertError:
hgs
parents:
diff changeset
   222
            {
hgs
parents:
diff changeset
   223
            DoErrorWithoutStateChangeL();
hgs
parents:
diff changeset
   224
            break;
hgs
parents:
diff changeset
   225
            }
hgs
parents:
diff changeset
   226
        case EUniInsertErrorReload:
hgs
parents:
diff changeset
   227
            {
hgs
parents:
diff changeset
   228
            DoStartReloadL();
hgs
parents:
diff changeset
   229
            break;
hgs
parents:
diff changeset
   230
            }
hgs
parents:
diff changeset
   231
        case EUniInsertErrorReport:
hgs
parents:
diff changeset
   232
            {
hgs
parents:
diff changeset
   233
            iObserver.EditorOperationEvent( EUniEditorOperationInsert,
hgs
parents:
diff changeset
   234
                                            EUniEditorOperationError );
hgs
parents:
diff changeset
   235
            break;
hgs
parents:
diff changeset
   236
            }
hgs
parents:
diff changeset
   237
        default:
hgs
parents:
diff changeset
   238
            {
hgs
parents:
diff changeset
   239
            SetError( KErrUnknown );
hgs
parents:
diff changeset
   240
            iObserver.EditorOperationEvent( EUniEditorOperationInsert,
hgs
parents:
diff changeset
   241
                                            EUniEditorOperationError );
hgs
parents:
diff changeset
   242
            break;
hgs
parents:
diff changeset
   243
            }
hgs
parents:
diff changeset
   244
        }
hgs
parents:
diff changeset
   245
    }
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
// ---------------------------------------------------------
hgs
parents:
diff changeset
   248
// CUniEditorInsertOperation::DoCancelCleanup
hgs
parents:
diff changeset
   249
// ---------------------------------------------------------
hgs
parents:
diff changeset
   250
//
hgs
parents:
diff changeset
   251
void CUniEditorInsertOperation::DoCancelCleanup()
hgs
parents:
diff changeset
   252
    {
hgs
parents:
diff changeset
   253
    if ( iImageOperation )
hgs
parents:
diff changeset
   254
        {
hgs
parents:
diff changeset
   255
        iImageOperation->Cancel();
hgs
parents:
diff changeset
   256
        }
hgs
parents:
diff changeset
   257
        
hgs
parents:
diff changeset
   258
    if ( iVideoOperation )
hgs
parents:
diff changeset
   259
        {
hgs
parents:
diff changeset
   260
        iVideoOperation->Cancel();
hgs
parents:
diff changeset
   261
        }    
hgs
parents:
diff changeset
   262
    
hgs
parents:
diff changeset
   263
    if ( iInsertedObject )
hgs
parents:
diff changeset
   264
        {
hgs
parents:
diff changeset
   265
        iInsertedObject->Cancel();
hgs
parents:
diff changeset
   266
        }
hgs
parents:
diff changeset
   267
    
hgs
parents:
diff changeset
   268
    if ( iChangeSlideOperation )
hgs
parents:
diff changeset
   269
        {
hgs
parents:
diff changeset
   270
        iChangeSlideOperation->Cancel();
hgs
parents:
diff changeset
   271
        }
hgs
parents:
diff changeset
   272
    
hgs
parents:
diff changeset
   273
    iSlideLoader.Cancel();
hgs
parents:
diff changeset
   274
    }
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
// ---------------------------------------------------------
hgs
parents:
diff changeset
   277
// CUniEditorInsertOperation::DoStartProcessImageL
hgs
parents:
diff changeset
   278
// ---------------------------------------------------------
hgs
parents:
diff changeset
   279
//
hgs
parents:
diff changeset
   280
void CUniEditorInsertOperation::DoStartProcessImageL()
hgs
parents:
diff changeset
   281
    {
hgs
parents:
diff changeset
   282
    if ( iAddSlide )
hgs
parents:
diff changeset
   283
        {
hgs
parents:
diff changeset
   284
        // If there is an image with same name added on the current slide, it must be closed that
hgs
parents:
diff changeset
   285
        // inserting would succeed. Insert attachment fails in Symbian messaging otherwise.
hgs
parents:
diff changeset
   286
        // If error occurs after this, current slide must be realoded again
hgs
parents:
diff changeset
   287
        CMsgImageControl* imageControl= static_cast<CMsgImageControl*> ( iView.ControlById( EMsgComponentIdImage ) );
hgs
parents:
diff changeset
   288
        if ( imageControl )
hgs
parents:
diff changeset
   289
            {
hgs
parents:
diff changeset
   290
            imageControl->SetImageFileClosed();
hgs
parents:
diff changeset
   291
            }
hgs
parents:
diff changeset
   292
        }
hgs
parents:
diff changeset
   293
hgs
parents:
diff changeset
   294
    if ( !iImageOperation )
hgs
parents:
diff changeset
   295
        {
hgs
parents:
diff changeset
   296
        iImageOperation = CUniEditorProcessImageOperation::NewL( *this, iDocument, iFs );
hgs
parents:
diff changeset
   297
        }
hgs
parents:
diff changeset
   298
        
hgs
parents:
diff changeset
   299
    iImageOperation->Process( static_cast<CMsgImageInfo*>( iOldInfo ), KMsvNullIndexEntryId, iDocument.MessageSize( ETrue ) );
hgs
parents:
diff changeset
   300
    SetPending();
hgs
parents:
diff changeset
   301
    }
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
hgs
parents:
diff changeset
   304
// ---------------------------------------------------------
hgs
parents:
diff changeset
   305
// CUniEditorInsertOperation::DoStartConvertVideoL
hgs
parents:
diff changeset
   306
// ---------------------------------------------------------
hgs
parents:
diff changeset
   307
//
hgs
parents:
diff changeset
   308
void CUniEditorInsertOperation::DoStartConvertVideoL()
hgs
parents:
diff changeset
   309
    {
hgs
parents:
diff changeset
   310
    if ( CUniEditorConvertVideoOperation::IsImplementedL() )
hgs
parents:
diff changeset
   311
        {
hgs
parents:
diff changeset
   312
        if ( !iVideoOperation )
hgs
parents:
diff changeset
   313
            {
hgs
parents:
diff changeset
   314
            iVideoOperation = CUniEditorConvertVideoOperation::NewL( *this, iDocument, iFs );
hgs
parents:
diff changeset
   315
            }
hgs
parents:
diff changeset
   316
                        
hgs
parents:
diff changeset
   317
        iVideoOperation->Process( static_cast<CMsgVideoInfo*>( iOldInfo ), KMsvNullIndexEntryId, iDocument.MaxMessageSize() );   
hgs
parents:
diff changeset
   318
        SetPending();
hgs
parents:
diff changeset
   319
        }
hgs
parents:
diff changeset
   320
    else
hgs
parents:
diff changeset
   321
        {
hgs
parents:
diff changeset
   322
        iOperationState = EUniInsertCopyAttachment;
hgs
parents:
diff changeset
   323
        CompleteSelf( KErrNone );
hgs
parents:
diff changeset
   324
        }
hgs
parents:
diff changeset
   325
    }
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
// ---------------------------------------------------------
hgs
parents:
diff changeset
   328
// CUniEditorInsertOperation::DoStartCopyAttachmentL
hgs
parents:
diff changeset
   329
// ---------------------------------------------------------
hgs
parents:
diff changeset
   330
//
hgs
parents:
diff changeset
   331
void CUniEditorInsertOperation::DoStartCopyAttachmentL()
hgs
parents:
diff changeset
   332
    {
hgs
parents:
diff changeset
   333
    TInt slide = iDocument.CurrentSlide();
hgs
parents:
diff changeset
   334
    
hgs
parents:
diff changeset
   335
    if ( iAddSlide )
hgs
parents:
diff changeset
   336
        {
hgs
parents:
diff changeset
   337
        iPreviousSlide = slide;
hgs
parents:
diff changeset
   338
        
hgs
parents:
diff changeset
   339
        slide++;
hgs
parents:
diff changeset
   340
        iDocument.DataModel()->SmilModel().AddSlideL( slide );
hgs
parents:
diff changeset
   341
        
hgs
parents:
diff changeset
   342
        iInsertedSlide = slide;
hgs
parents:
diff changeset
   343
        }   
hgs
parents:
diff changeset
   344
        
hgs
parents:
diff changeset
   345
    if ( iNewInfo )
hgs
parents:
diff changeset
   346
        {
hgs
parents:
diff changeset
   347
        TMsvAttachmentId attaId;
hgs
parents:
diff changeset
   348
        
hgs
parents:
diff changeset
   349
        if ( iImageOperation )
hgs
parents:
diff changeset
   350
            {
hgs
parents:
diff changeset
   351
            iImageOperation->DetachAttachmentId( attaId );
hgs
parents:
diff changeset
   352
            }
hgs
parents:
diff changeset
   353
        else
hgs
parents:
diff changeset
   354
            {
hgs
parents:
diff changeset
   355
            iVideoOperation->DetachAttachmentId( attaId );
hgs
parents:
diff changeset
   356
            }
hgs
parents:
diff changeset
   357
            
hgs
parents:
diff changeset
   358
        if ( iAddAsAttachment )
hgs
parents:
diff changeset
   359
            {
hgs
parents:
diff changeset
   360
            iInsertedObject = iDocument.DataModel()->AddStoredAttachmentL( attaId, iNewInfo );
hgs
parents:
diff changeset
   361
            }
hgs
parents:
diff changeset
   362
        else
hgs
parents:
diff changeset
   363
            {
hgs
parents:
diff changeset
   364
            iInsertedObject = iDocument.DataModel()->SmilModel().AddStoredObjectL( slide, attaId, iNewInfo );
hgs
parents:
diff changeset
   365
            }
hgs
parents:
diff changeset
   366
            
hgs
parents:
diff changeset
   367
        iNewInfo = NULL;
hgs
parents:
diff changeset
   368
        CompleteSelf( KErrNone );        
hgs
parents:
diff changeset
   369
        }
hgs
parents:
diff changeset
   370
    else
hgs
parents:
diff changeset
   371
        {
hgs
parents:
diff changeset
   372
        if ( iAddAsAttachment )
hgs
parents:
diff changeset
   373
            {
hgs
parents:
diff changeset
   374
            iInsertedObject = iDocument.DataModel()->AddAttachmentL( *this, iOldInfo );            
hgs
parents:
diff changeset
   375
            }
hgs
parents:
diff changeset
   376
        else
hgs
parents:
diff changeset
   377
            {
hgs
parents:
diff changeset
   378
            iInsertedObject = iDocument.DataModel()->SmilModel().AddObjectL( *this, slide, iOldInfo );
hgs
parents:
diff changeset
   379
            }
hgs
parents:
diff changeset
   380
        
hgs
parents:
diff changeset
   381
        iOldInfo = NULL; // Ownership transferred
hgs
parents:
diff changeset
   382
        SetPending();
hgs
parents:
diff changeset
   383
        }
hgs
parents:
diff changeset
   384
    
hgs
parents:
diff changeset
   385
    if ( iAddAsAttachment )
hgs
parents:
diff changeset
   386
        {
hgs
parents:
diff changeset
   387
        iOperationState = EUniInsertReady;
hgs
parents:
diff changeset
   388
        }
hgs
parents:
diff changeset
   389
    else
hgs
parents:
diff changeset
   390
        {
hgs
parents:
diff changeset
   391
        iDocument.SetBodyModified( ETrue );
hgs
parents:
diff changeset
   392
        iOperationState = EUniInsertLoad;
hgs
parents:
diff changeset
   393
        }
hgs
parents:
diff changeset
   394
    }
hgs
parents:
diff changeset
   395
    
hgs
parents:
diff changeset
   396
// ---------------------------------------------------------
hgs
parents:
diff changeset
   397
// CUniEditorInsertOperation::DoStartLoadL
hgs
parents:
diff changeset
   398
// ---------------------------------------------------------
hgs
parents:
diff changeset
   399
//
hgs
parents:
diff changeset
   400
void CUniEditorInsertOperation::DoStartLoadL()
hgs
parents:
diff changeset
   401
    {
hgs
parents:
diff changeset
   402
    if ( iAddSlide )
hgs
parents:
diff changeset
   403
        {
hgs
parents:
diff changeset
   404
        if ( !iChangeSlideOperation )
hgs
parents:
diff changeset
   405
            {
hgs
parents:
diff changeset
   406
            iChangeSlideOperation = CUniEditorChangeSlideOperation::NewL( *this,
hgs
parents:
diff changeset
   407
                                                                          iDocument,
hgs
parents:
diff changeset
   408
                                                                          iHeader,
hgs
parents:
diff changeset
   409
                                                                          iSlideLoader,
hgs
parents:
diff changeset
   410
                                                                          iView,
hgs
parents:
diff changeset
   411
                                                                          iFs );            
hgs
parents:
diff changeset
   412
            }
hgs
parents:
diff changeset
   413
            
hgs
parents:
diff changeset
   414
        iChangeSlideOperation->ChangeSlide( iInsertedSlide );
hgs
parents:
diff changeset
   415
        }
hgs
parents:
diff changeset
   416
    else
hgs
parents:
diff changeset
   417
        {        
hgs
parents:
diff changeset
   418
        iSlideLoader.LoadObject( *this, iInsertedObject );
hgs
parents:
diff changeset
   419
        }
hgs
parents:
diff changeset
   420
    
hgs
parents:
diff changeset
   421
    SetPending();
hgs
parents:
diff changeset
   422
    iOperationState = EUniInsertReady;
hgs
parents:
diff changeset
   423
    }
hgs
parents:
diff changeset
   424
hgs
parents:
diff changeset
   425
// ---------------------------------------------------------
hgs
parents:
diff changeset
   426
// CUniEditorInsertOperation::DoStartReloadL
hgs
parents:
diff changeset
   427
// ---------------------------------------------------------
hgs
parents:
diff changeset
   428
//
hgs
parents:
diff changeset
   429
void CUniEditorInsertOperation::DoStartReloadL()
hgs
parents:
diff changeset
   430
    {
hgs
parents:
diff changeset
   431
    TInt CurrSlide = iDocument.CurrentSlide();
hgs
parents:
diff changeset
   432
    TInt slide = (iPreviousSlide!= -1)?iPreviousSlide:CurrSlide;
hgs
parents:
diff changeset
   433
    if ( iPreviousSlide != ( -1 ) || CurrSlide == 0 )
hgs
parents:
diff changeset
   434
        {
hgs
parents:
diff changeset
   435
        if ( !iChangeSlideOperation )
hgs
parents:
diff changeset
   436
            {
hgs
parents:
diff changeset
   437
            iChangeSlideOperation = CUniEditorChangeSlideOperation::NewL( *this,
hgs
parents:
diff changeset
   438
                                                                          iDocument,
hgs
parents:
diff changeset
   439
                                                                          iHeader,
hgs
parents:
diff changeset
   440
                                                                          iSlideLoader,
hgs
parents:
diff changeset
   441
                                                                          iView,
hgs
parents:
diff changeset
   442
                                                                          iFs );            
hgs
parents:
diff changeset
   443
            }
hgs
parents:
diff changeset
   444
            
hgs
parents:
diff changeset
   445
        iChangeSlideOperation->ChangeSlide( slide );
hgs
parents:
diff changeset
   446
        SetPending();
hgs
parents:
diff changeset
   447
        }
hgs
parents:
diff changeset
   448
        
hgs
parents:
diff changeset
   449
    iOperationState = EUniInsertErrorReport;
hgs
parents:
diff changeset
   450
    }
hgs
parents:
diff changeset
   451
hgs
parents:
diff changeset
   452
// ---------------------------------------------------------
hgs
parents:
diff changeset
   453
// CUniEditorInsertOperation::DoCheckSizeL
hgs
parents:
diff changeset
   454
// ---------------------------------------------------------
hgs
parents:
diff changeset
   455
//
hgs
parents:
diff changeset
   456
void CUniEditorInsertOperation::DoCheckSizeL()
hgs
parents:
diff changeset
   457
    {
hgs
parents:
diff changeset
   458
    if ( CheckSizeForInsertL() )
hgs
parents:
diff changeset
   459
        {
hgs
parents:
diff changeset
   460
        iOperationState = EUniInsertCopyAttachment;
hgs
parents:
diff changeset
   461
        }
hgs
parents:
diff changeset
   462
    else
hgs
parents:
diff changeset
   463
        {
hgs
parents:
diff changeset
   464
        iOperationState = EUniInsertError;
hgs
parents:
diff changeset
   465
        }
hgs
parents:
diff changeset
   466
        
hgs
parents:
diff changeset
   467
    CompleteSelf( KErrNone );
hgs
parents:
diff changeset
   468
    }
hgs
parents:
diff changeset
   469
hgs
parents:
diff changeset
   470
// ---------------------------------------------------------
hgs
parents:
diff changeset
   471
// CUniEditorInsertOperation::DoCheckModeL
hgs
parents:
diff changeset
   472
// ---------------------------------------------------------
hgs
parents:
diff changeset
   473
//
hgs
parents:
diff changeset
   474
void CUniEditorInsertOperation::DoCheckModeL()
hgs
parents:
diff changeset
   475
    {
hgs
parents:
diff changeset
   476
    if ( CheckModeForInsert( ETrue ) )
hgs
parents:
diff changeset
   477
        {
hgs
parents:
diff changeset
   478
        iOperationState = EUniInsertProcessImage;
hgs
parents:
diff changeset
   479
        }
hgs
parents:
diff changeset
   480
    else
hgs
parents:
diff changeset
   481
        {
hgs
parents:
diff changeset
   482
        iOperationState = EUniInsertError;
hgs
parents:
diff changeset
   483
        }
hgs
parents:
diff changeset
   484
        
hgs
parents:
diff changeset
   485
    CompleteSelf( KErrNone );
hgs
parents:
diff changeset
   486
    }
hgs
parents:
diff changeset
   487
hgs
parents:
diff changeset
   488
// ---------------------------------------------------------
hgs
parents:
diff changeset
   489
// CUniEditorInsertOperation::CheckModeForInsertL
hgs
parents:
diff changeset
   490
// ---------------------------------------------------------
hgs
parents:
diff changeset
   491
//
hgs
parents:
diff changeset
   492
TBool CUniEditorInsertOperation::CheckModeForInsert( TBool aBeforeProcessing )
hgs
parents:
diff changeset
   493
    {
hgs
parents:
diff changeset
   494
    CMsgMediaInfo* info;
hgs
parents:
diff changeset
   495
    if ( iNewInfo )
hgs
parents:
diff changeset
   496
        {
hgs
parents:
diff changeset
   497
        info = iNewInfo;
hgs
parents:
diff changeset
   498
        }
hgs
parents:
diff changeset
   499
    else
hgs
parents:
diff changeset
   500
        {
hgs
parents:
diff changeset
   501
        info = iOldInfo;
hgs
parents:
diff changeset
   502
        }    
hgs
parents:
diff changeset
   503
        
hgs
parents:
diff changeset
   504
    TMmsConformance conformance = 
hgs
parents:
diff changeset
   505
        iDocument.DataModel()->MmsConformance().MediaConformance( *info );
hgs
parents:
diff changeset
   506
        
hgs
parents:
diff changeset
   507
    TUint32 confStatus = conformance.iConfStatus;
hgs
parents:
diff changeset
   508
    
hgs
parents:
diff changeset
   509
    if ( aBeforeProcessing &&  
hgs
parents:
diff changeset
   510
         iDocument.CreationMode() != EMmsCreationModeRestricted )
hgs
parents:
diff changeset
   511
        {
hgs
parents:
diff changeset
   512
        return ETrue;
hgs
parents:
diff changeset
   513
        }
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
    // In "free" mode user can insert images that are larger by dimensions than allowed by conformance
hgs
parents:
diff changeset
   516
    if ( iDocument.CreationMode() != EMmsCreationModeRestricted )
hgs
parents:
diff changeset
   517
        {
hgs
parents:
diff changeset
   518
        TInt i = EMmsConfNokFreeModeOnly | EMmsConfNokScalingNeeded | EMmsConfNokTooBig;
hgs
parents:
diff changeset
   519
        TInt j = ~( EMmsConfNokFreeModeOnly | EMmsConfNokScalingNeeded | EMmsConfNokTooBig );
hgs
parents:
diff changeset
   520
        
hgs
parents:
diff changeset
   521
        // If user answers yes to Guided mode confirmation query he/she moves to free mode
hgs
parents:
diff changeset
   522
        if ( ( confStatus & i ) &&
hgs
parents:
diff changeset
   523
             !( confStatus & j ) )
hgs
parents:
diff changeset
   524
            {
hgs
parents:
diff changeset
   525
            if ( info->Protection() & EFileProtSuperDistributable )
hgs
parents:
diff changeset
   526
                {
hgs
parents:
diff changeset
   527
                // SuperDistribution not checked here
hgs
parents:
diff changeset
   528
                // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
hgs
parents:
diff changeset
   529
                confStatus &= ~EMmsConfNokFreeModeOnly;
hgs
parents:
diff changeset
   530
                confStatus &= ~EMmsConfNokScalingNeeded;
hgs
parents:
diff changeset
   531
                }
hgs
parents:
diff changeset
   532
            else if ( iObserver.EditorOperationQuery( EUniEditorOperationInsert, EMEOQueryGuidedObject ) )
hgs
parents:
diff changeset
   533
                {
hgs
parents:
diff changeset
   534
                // Guided query accepted.
hgs
parents:
diff changeset
   535
                // Mask "FreeModeOnly" and "ScalingNeeded" away in free mode
hgs
parents:
diff changeset
   536
                confStatus &= ~EMmsConfNokFreeModeOnly;
hgs
parents:
diff changeset
   537
                confStatus &= ~EMmsConfNokScalingNeeded;
hgs
parents:
diff changeset
   538
                }
hgs
parents:
diff changeset
   539
            else
hgs
parents:
diff changeset
   540
                {
hgs
parents:
diff changeset
   541
                // Guided query not accepted. Stop insertion.
hgs
parents:
diff changeset
   542
                SetError( EUniInsertUserGuidedAbort );
hgs
parents:
diff changeset
   543
                return EFalse;
hgs
parents:
diff changeset
   544
                }
hgs
parents:
diff changeset
   545
            }
hgs
parents:
diff changeset
   546
        }
hgs
parents:
diff changeset
   547
    else if ( confStatus & EMmsConfNokDRM ||
hgs
parents:
diff changeset
   548
              confStatus & EMmsConfNokNotEnoughInfo ||
hgs
parents:
diff changeset
   549
              confStatus & EMmsConfNokNotSupported ||
hgs
parents:
diff changeset
   550
              confStatus & EMmsConfNokFreeModeOnly ||
hgs
parents:
diff changeset
   551
              confStatus & EMmsConfNokCorrupt )
hgs
parents:
diff changeset
   552
        {
hgs
parents:
diff changeset
   553
        // Sanity check
hgs
parents:
diff changeset
   554
        // "Not conformant" assumed if check fails.
hgs
parents:
diff changeset
   555
        SetError( EUniInsertNotSupported );
hgs
parents:
diff changeset
   556
        return EFalse;
hgs
parents:
diff changeset
   557
        }
hgs
parents:
diff changeset
   558
    
hgs
parents:
diff changeset
   559
    return ETrue;
hgs
parents:
diff changeset
   560
    }
hgs
parents:
diff changeset
   561
hgs
parents:
diff changeset
   562
// ---------------------------------------------------------
hgs
parents:
diff changeset
   563
// CUniEditorInsertOperation::CheckSizeForInsertL
hgs
parents:
diff changeset
   564
// ---------------------------------------------------------
hgs
parents:
diff changeset
   565
//
hgs
parents:
diff changeset
   566
TBool CUniEditorInsertOperation::CheckSizeForInsertL()
hgs
parents:
diff changeset
   567
    {
hgs
parents:
diff changeset
   568
    CMsgMediaInfo* info;
hgs
parents:
diff changeset
   569
    if ( iNewInfo )
hgs
parents:
diff changeset
   570
        {
hgs
parents:
diff changeset
   571
        info = iNewInfo;
hgs
parents:
diff changeset
   572
        }
hgs
parents:
diff changeset
   573
    else
hgs
parents:
diff changeset
   574
        {
hgs
parents:
diff changeset
   575
        info = iOldInfo;
hgs
parents:
diff changeset
   576
        } 
hgs
parents:
diff changeset
   577
        
hgs
parents:
diff changeset
   578
    TMmsConformance conformance = 
hgs
parents:
diff changeset
   579
        iDocument.DataModel()->MmsConformance().MediaConformance( *info );
hgs
parents:
diff changeset
   580
        
hgs
parents:
diff changeset
   581
    TUint32 confStatus = conformance.iConfStatus;
hgs
parents:
diff changeset
   582
hgs
parents:
diff changeset
   583
    if ( confStatus & EMmsConfNokTooBig ||
hgs
parents:
diff changeset
   584
         TUint( iDocument.MessageSize( ETrue ) + info->FileSize() ) > iDocument.MaxMessageSize() )
hgs
parents:
diff changeset
   585
        {
hgs
parents:
diff changeset
   586
        SetError( EUniInsertTooBig );
hgs
parents:
diff changeset
   587
        return EFalse;
hgs
parents:
diff changeset
   588
        }
hgs
parents:
diff changeset
   589
hgs
parents:
diff changeset
   590
    return ETrue;
hgs
parents:
diff changeset
   591
    }
hgs
parents:
diff changeset
   592
hgs
parents:
diff changeset
   593
// ---------------------------------------------------------
hgs
parents:
diff changeset
   594
// CUniEditorInsertOperation::DoErrorWithoutStateChange
hgs
parents:
diff changeset
   595
// ---------------------------------------------------------
hgs
parents:
diff changeset
   596
//
hgs
parents:
diff changeset
   597
void CUniEditorInsertOperation::DoErrorWithoutStateChangeL()
hgs
parents:
diff changeset
   598
    {
hgs
parents:
diff changeset
   599
    /*
hgs
parents:
diff changeset
   600
    Object need to be removed before possible new slide.
hgs
parents:
diff changeset
   601
    RemoveObjectL removes also attachment.
hgs
parents:
diff changeset
   602
hgs
parents:
diff changeset
   603
    Only possible reason for leave in RemoveObjectL is failure of attachment deletion.
hgs
parents:
diff changeset
   604
    Object will be left in Objectlist and in SmilModel.
hgs
parents:
diff changeset
   605
    -> Remove only from model
hgs
parents:
diff changeset
   606
    */
hgs
parents:
diff changeset
   607
    if ( iInsertedObject )
hgs
parents:
diff changeset
   608
        {
hgs
parents:
diff changeset
   609
        if ( iInsertedSlide != -1 )
hgs
parents:
diff changeset
   610
            {
hgs
parents:
diff changeset
   611
            iDocument.DataModel()->SmilModel().RemoveObjectL( iInsertedSlide, iInsertedObject, ETrue );
hgs
parents:
diff changeset
   612
            
hgs
parents:
diff changeset
   613
            iDocument.DataModel()->SmilModel().RemoveSlide( iInsertedSlide );
hgs
parents:
diff changeset
   614
            iInsertedSlide = -1;
hgs
parents:
diff changeset
   615
            }
hgs
parents:
diff changeset
   616
        else
hgs
parents:
diff changeset
   617
            {
hgs
parents:
diff changeset
   618
            iDocument.DataModel()->SmilModel().RemoveObjectL( iDocument.CurrentSlide(), iInsertedObject, ETrue );
hgs
parents:
diff changeset
   619
            }
hgs
parents:
diff changeset
   620
        
hgs
parents:
diff changeset
   621
        iInsertedObject = NULL;
hgs
parents:
diff changeset
   622
        }
hgs
parents:
diff changeset
   623
    else
hgs
parents:
diff changeset
   624
        {
hgs
parents:
diff changeset
   625
        // attachment may still be there after compress or scaling operation, if it didn't fit
hgs
parents:
diff changeset
   626
        // into message
hgs
parents:
diff changeset
   627
        TMsvAttachmentId attaId( KMsvNullIndexEntryId );
hgs
parents:
diff changeset
   628
        if ( iNewInfo )
hgs
parents:
diff changeset
   629
            {
hgs
parents:
diff changeset
   630
            if ( iImageOperation )
hgs
parents:
diff changeset
   631
                {
hgs
parents:
diff changeset
   632
                iImageOperation->DetachAttachmentId( attaId );   
hgs
parents:
diff changeset
   633
                }
hgs
parents:
diff changeset
   634
            else
hgs
parents:
diff changeset
   635
                {
hgs
parents:
diff changeset
   636
                iVideoOperation->DetachAttachmentId( attaId );   
hgs
parents:
diff changeset
   637
                }
hgs
parents:
diff changeset
   638
            }
hgs
parents:
diff changeset
   639
            
hgs
parents:
diff changeset
   640
        if ( attaId != KMsvNullIndexEntryId )
hgs
parents:
diff changeset
   641
            {
hgs
parents:
diff changeset
   642
            CMsvStore* store = iDocument.Mtm().Entry().EditStoreL();
hgs
parents:
diff changeset
   643
            CleanupStack::PushL( store );
hgs
parents:
diff changeset
   644
            MMsvAttachmentManager& manager = store->AttachmentManagerL();
hgs
parents:
diff changeset
   645
            MMsvAttachmentManagerSync& managerSync = store->AttachmentManagerExtensionsL();    
hgs
parents:
diff changeset
   646
            managerSync.RemoveAttachmentL( CUniDataUtils::IndexPositionOfAttachmentL( manager, attaId ) );
hgs
parents:
diff changeset
   647
            store->CommitL();
hgs
parents:
diff changeset
   648
            CleanupStack::PopAndDestroy( store );
hgs
parents:
diff changeset
   649
            attaId = KMsvNullIndexEntryId;
hgs
parents:
diff changeset
   650
            }    
hgs
parents:
diff changeset
   651
        }
hgs
parents:
diff changeset
   652
    
hgs
parents:
diff changeset
   653
    delete iNewInfo;
hgs
parents:
diff changeset
   654
    iNewInfo = NULL;
hgs
parents:
diff changeset
   655
    //If previous slide is -1 then reload first slide 
hgs
parents:
diff changeset
   656
    if ( iPreviousSlide != -1 || (iDocument.CurrentSlide()) == 0)
hgs
parents:
diff changeset
   657
        {
hgs
parents:
diff changeset
   658
        iOperationState = EUniInsertErrorReload;
hgs
parents:
diff changeset
   659
        }
hgs
parents:
diff changeset
   660
    else
hgs
parents:
diff changeset
   661
        {
hgs
parents:
diff changeset
   662
        iOperationState = EUniInsertErrorReport;
hgs
parents:
diff changeset
   663
        }
hgs
parents:
diff changeset
   664
        
hgs
parents:
diff changeset
   665
    CompleteSelf( KErrNone );
hgs
parents:
diff changeset
   666
    }
hgs
parents:
diff changeset
   667
hgs
parents:
diff changeset
   668
// ---------------------------------------------------------
hgs
parents:
diff changeset
   669
// CUniEditorInsertOperation::InsertedType
hgs
parents:
diff changeset
   670
// ---------------------------------------------------------
hgs
parents:
diff changeset
   671
//
hgs
parents:
diff changeset
   672
TMsgMediaType CUniEditorInsertOperation::InsertedType()
hgs
parents:
diff changeset
   673
    {
hgs
parents:
diff changeset
   674
    TMsgMediaType type = EMsgMediaUnknown;
hgs
parents:
diff changeset
   675
    if ( iInsertedObject )
hgs
parents:
diff changeset
   676
        {
hgs
parents:
diff changeset
   677
        type = iInsertedObject->MediaType();
hgs
parents:
diff changeset
   678
        }
hgs
parents:
diff changeset
   679
    return type;
hgs
parents:
diff changeset
   680
    }
hgs
parents:
diff changeset
   681
hgs
parents:
diff changeset
   682
// ---------------------------------------------------------
hgs
parents:
diff changeset
   683
// CUniEditorInsertOperation::InsertedObject
hgs
parents:
diff changeset
   684
// ---------------------------------------------------------
hgs
parents:
diff changeset
   685
//
hgs
parents:
diff changeset
   686
CUniObject* CUniEditorInsertOperation::InsertedObject()
hgs
parents:
diff changeset
   687
    {
hgs
parents:
diff changeset
   688
    return iInsertedObject;
hgs
parents:
diff changeset
   689
    }
hgs
parents:
diff changeset
   690
hgs
parents:
diff changeset
   691
// ---------------------------------------------------------
hgs
parents:
diff changeset
   692
// CUniEditorInsertOperation::IsAddedAsAttachment
hgs
parents:
diff changeset
   693
// ---------------------------------------------------------
hgs
parents:
diff changeset
   694
//
hgs
parents:
diff changeset
   695
TBool CUniEditorInsertOperation::IsAddedAsAttachment() const
hgs
parents:
diff changeset
   696
    {
hgs
parents:
diff changeset
   697
    return iAddAsAttachment;
hgs
parents:
diff changeset
   698
    }
hgs
parents:
diff changeset
   699
hgs
parents:
diff changeset
   700
// ---------------------------------------------------------
hgs
parents:
diff changeset
   701
// CUniEditorInsertOperation::ObjectSaveReady
hgs
parents:
diff changeset
   702
// ---------------------------------------------------------
hgs
parents:
diff changeset
   703
//
hgs
parents:
diff changeset
   704
void CUniEditorInsertOperation::ObjectSaveReady( TInt aError )
hgs
parents:
diff changeset
   705
    {
hgs
parents:
diff changeset
   706
    CompleteOperation( aError );
hgs
parents:
diff changeset
   707
    }
hgs
parents:
diff changeset
   708
hgs
parents:
diff changeset
   709
// ---------------------------------------------------------
hgs
parents:
diff changeset
   710
// CUniEditorInsertOperation::SlideLoadReady
hgs
parents:
diff changeset
   711
// ---------------------------------------------------------
hgs
parents:
diff changeset
   712
//
hgs
parents:
diff changeset
   713
void CUniEditorInsertOperation::SlideLoadReady( TInt aError )
hgs
parents:
diff changeset
   714
    {
hgs
parents:
diff changeset
   715
    CompleteOperation( aError );
hgs
parents:
diff changeset
   716
    }
hgs
parents:
diff changeset
   717
hgs
parents:
diff changeset
   718
hgs
parents:
diff changeset
   719
// ---------------------------------------------------------
hgs
parents:
diff changeset
   720
// CUniEditorInsertOperation::HandleOperationEvent
hgs
parents:
diff changeset
   721
// ---------------------------------------------------------
hgs
parents:
diff changeset
   722
//
hgs
parents:
diff changeset
   723
void CUniEditorInsertOperation::HandleOperationEvent( TUniEditorOperationType aOperation,
hgs
parents:
diff changeset
   724
                                                      TUniEditorOperationEvent /*aEvent*/ )
hgs
parents:
diff changeset
   725
    {
hgs
parents:
diff changeset
   726
    if ( aOperation == EUniEditorOperationChangeSlide )
hgs
parents:
diff changeset
   727
        {
hgs
parents:
diff changeset
   728
        if ( iChangeSlideOperation->GetErrors()->Count() )
hgs
parents:
diff changeset
   729
            {
hgs
parents:
diff changeset
   730
            SetError( EUniInsertSlideChangeFailed );
hgs
parents:
diff changeset
   731
            iOperationState = EUniInsertErrorReport;
hgs
parents:
diff changeset
   732
            }
hgs
parents:
diff changeset
   733
        }
hgs
parents:
diff changeset
   734
    else 
hgs
parents:
diff changeset
   735
        {
hgs
parents:
diff changeset
   736
        TBool toErrorState = EFalse;
hgs
parents:
diff changeset
   737
        
hgs
parents:
diff changeset
   738
        if ( aOperation == EUniEditorOperationProcessImage )
hgs
parents:
diff changeset
   739
            {
hgs
parents:
diff changeset
   740
            CArrayFixFlat<TInt>* errors = iImageOperation->GetErrors();
hgs
parents:
diff changeset
   741
            
hgs
parents:
diff changeset
   742
            for ( TInt i = 0; i < errors->Count(); i++ )
hgs
parents:
diff changeset
   743
                {
hgs
parents:
diff changeset
   744
                if ( errors->At( i ) != EUniProcessImgCompressSuccessful &&
hgs
parents:
diff changeset
   745
                     !( errors->At( i ) == EUniProcessImgCouldNotScale &&
hgs
parents:
diff changeset
   746
                        iDocument.CreationMode() != EMmsCreationModeRestricted ) &&
hgs
parents:
diff changeset
   747
                     errors->At( i ) != EUniProcessImgCorrupted )
hgs
parents:
diff changeset
   748
                    {
hgs
parents:
diff changeset
   749
                    toErrorState = ETrue;
hgs
parents:
diff changeset
   750
                    }
hgs
parents:
diff changeset
   751
                SetError( errors->At( i ) );
hgs
parents:
diff changeset
   752
                }
hgs
parents:
diff changeset
   753
            
hgs
parents:
diff changeset
   754
            // Take ownership (even in case of possible errors)
hgs
parents:
diff changeset
   755
            iNewInfo = iImageOperation->DetachImageInfo();
hgs
parents:
diff changeset
   756
            }
hgs
parents:
diff changeset
   757
        else  // EUniEditorOperationConvertVideo
hgs
parents:
diff changeset
   758
            {
hgs
parents:
diff changeset
   759
            CArrayFixFlat<TInt>* errors = iVideoOperation->GetErrors();
hgs
parents:
diff changeset
   760
            
hgs
parents:
diff changeset
   761
            for ( TInt i = 0; i < errors->Count(); i++ )
hgs
parents:
diff changeset
   762
                {
hgs
parents:
diff changeset
   763
                if ( errors->At( i ) != EUniConvertVidSuccessful )
hgs
parents:
diff changeset
   764
                    {
hgs
parents:
diff changeset
   765
                    toErrorState = ETrue;
hgs
parents:
diff changeset
   766
                    }
hgs
parents:
diff changeset
   767
                SetError( errors->At( i ) );
hgs
parents:
diff changeset
   768
                }
hgs
parents:
diff changeset
   769
     
hgs
parents:
diff changeset
   770
            // Take ownership (even in case of possible errors)
hgs
parents:
diff changeset
   771
            iNewInfo = iVideoOperation->DetachVideoInfo();
hgs
parents:
diff changeset
   772
            }   
hgs
parents:
diff changeset
   773
        
hgs
parents:
diff changeset
   774
        if ( iNewInfo )
hgs
parents:
diff changeset
   775
            {
hgs
parents:
diff changeset
   776
            delete iOldInfo;
hgs
parents:
diff changeset
   777
            iOldInfo = NULL;
hgs
parents:
diff changeset
   778
            }
hgs
parents:
diff changeset
   779
        
hgs
parents:
diff changeset
   780
        if ( toErrorState )
hgs
parents:
diff changeset
   781
            {
hgs
parents:
diff changeset
   782
            // Process image / video error
hgs
parents:
diff changeset
   783
            iOperationState = EUniInsertError;
hgs
parents:
diff changeset
   784
            
hgs
parents:
diff changeset
   785
            delete iOldInfo;
hgs
parents:
diff changeset
   786
            iOldInfo = NULL;
hgs
parents:
diff changeset
   787
            }
hgs
parents:
diff changeset
   788
        else
hgs
parents:
diff changeset
   789
            {
hgs
parents:
diff changeset
   790
            if ( !CheckModeForInsert( EFalse ) )
hgs
parents:
diff changeset
   791
                {
hgs
parents:
diff changeset
   792
                iOperationState = EUniInsertError;
hgs
parents:
diff changeset
   793
                
hgs
parents:
diff changeset
   794
                delete iOldInfo;
hgs
parents:
diff changeset
   795
                iOldInfo = NULL;
hgs
parents:
diff changeset
   796
                }
hgs
parents:
diff changeset
   797
            else
hgs
parents:
diff changeset
   798
                {
hgs
parents:
diff changeset
   799
                iOperationState = EUniInsertCheckSize;
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
    CompleteOperation( KErrNone );
hgs
parents:
diff changeset
   805
    }
hgs
parents:
diff changeset
   806
hgs
parents:
diff changeset
   807