videditor/ManualVideoEditor/src/VeiEditVideoView.cpp
author Mikael Laine <mikael.laine@ixonos.com>
Fri, 29 Jan 2010 14:08:33 +0200
changeset 0 951a5db380a0
permissions -rw-r--r--
Committing the Video Editor package under the Eclipse Public License

/*
* Copyright (c) 2010 Ixonos Plc.
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - Initial contribution
*
* Contributors:
* Ixonos Plc
*
* Description: 
*
*/


// INCLUDE FILES

// System includes
#include <aknviewappui.h>
#include <avkon.hrh>
#include <manualvideoeditor.rsg>
#include <aknappui.h>
#include <akntitle.h> 
#include <caknfilenamepromptdialog.h> 
#include <aknnotewrappers.h> 
#include <aknlists.h> 
#include <aknquerydialog.h> 
#include <pathinfo.h> 
#include <eikmenub.h> 

#include <sendui.h> 
#include <caknfileselectiondialog.h>
#include <stringloader.h> 
#include <eikprogi.h>
#include <mgfetch.h> 
#include <aknnavilabel.h> 
#include <aknnavide.h> 
#include <aknselectionlist.h> 
#include <MdaAudioSampleEditor.h> 
#include <bautils.h>
#include <sysutil.h>
#include <aknwaitdialog.h>
#include <utf.h>
#include <akncolourselectiongrid.h>
//#include <akncontext.h>
#include <MGXFileManagerFactory.h>
#include <CMGXFileManager.h>
#include <audiopreference.h>
#include <senduiconsts.h>
#include <mmsconst.h>
#include <CMessagedata.h>
#include <e32property.h>
#include <e32math.h> 

#include <VedVideoClipInfo.h>

// User includes 
#include "veiapp.h"
#include "veicutaudioview.h"
#include "VeiEditVideoView.h"
#include "VeiEditVideoContainer.h" 
#include "manualvideoeditor.hrh"
#include "veieditvideolabelnavi.h"
#include "veicutvideoview.h"
#include "veiappui.h"
#include "VideoEditorCommon.h"
#include "VideoEditorUtils.h"
#include "VeiTimeLabelNavi.h"
#include "veiaddqueue.h"
#include "veitempmaker.h"
#include "videoeditorcommon.h"
#include "VeiImageClipGenerator.h"
#include "VeiTitleClipGenerator.h"
#include "VeiTextDisplay.h"
#include "VeiPopup.h"
#include "VeiVideoEditorSettings.h"
#include "VeiMGFetchVerifier.h"
#include "VeiErrorUi.h"


const TInt KTitleScreenMaxTextLength = 100; //2048;


void CleanupRestoreOrientation( TAny* object )
    {
    LOG( KVideoEditorLogFile, "CleanupRestoreOrientation: in" );

    CVeiEditVideoView* me = static_cast < CVeiEditVideoView*  > ( object );
    me->RestoreOrientation();

    LOG( KVideoEditorLogFile, "CleanupRestoreOrientation: Out" );
    }

CVeiEditVideoView* CVeiEditVideoView::NewL( CVeiCutVideoView& aCutView,
                                            CVeiCutAudioView& aCutAudioView, 
                                            CSendUi& aSendAppUi )
    {
    CVeiEditVideoView* self = CVeiEditVideoView::NewLC( aCutView, aCutAudioView, aSendAppUi );
    CleanupStack::Pop( self );
    return self;
    }

CVeiEditVideoView* CVeiEditVideoView::NewLC( CVeiCutVideoView& aCutView,
                                             CVeiCutAudioView& aCutAudioView, 
                                             CSendUi& aSendAppUi )
    {
    CVeiEditVideoView* self = new ( ELeave ) CVeiEditVideoView( aCutView, aCutAudioView, aSendAppUi );
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }

CVeiEditVideoView::CVeiEditVideoView( CVeiCutVideoView& aCutView, 
                                      CVeiCutAudioView& aCutAudioView, 
                                      CSendUi& aSendAppUi )
    : iCutView( aCutView ), 
      iCutAudioView( aCutAudioView ), 
      iSendAppUi( aSendAppUi ), 
      iOriginalAudioStartPoint( -1 ), 
      iOriginalAudioDuration( -1 ), 
      iMemoryCardChecked(EFalse),
      iOriginalOrientation( CAknAppUiBase::EAppUiOrientationAutomatic )
    {
    iOriginalVideoClipIndex =  - 1;
    iMovieSavedFlag = ETrue;
    SetNewTempFileNeeded( EFalse );
    iMovieFirstAddFlag = ETrue;
    iWaitMode = ENotWaiting;
    }

void CVeiEditVideoView::ConstructL()
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::ConstructL: in" );

    BaseConstructL( R_VEI_EDIT_VIDEO_VIEW );

    CEikStatusPane* sp = StatusPane();
    iNaviPane = ( CAknNavigationControlContainer* ) sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) );

    /** General navilabel(mms state, movie size, movie time). 
    Is visible always except when in moving state */
    iEditLabel = CreateEditNaviLabelL();


    /** Navilabel when previewing video in small preview */
    iPreviewLabel = CreatePreviewNaviLabelL();

    /** Navipane updating timer when editor is on small preview - mode */
    iPreviewUpdatePeriodic = CPeriodic::NewL( CActive::EPriorityLow );

    /* volume bars are showed when volume is changed in small preview */
    //	iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow );

    iVolumeNavi = iNaviPane->CreateVolumeIndicatorL(
        R_AVKON_NAVI_PANE_VOLUME_INDICATOR );

    /** Navilabel when audio or video clip is in moving state */
    iMoveLabel = CreateMoveNaviLabelL();

    iTempMaker = CVeiTempMaker::NewL();

    iErrorUI = CVeiErrorUI::NewL( *iCoeEnv );

    iMovie = CVedMovie::NewL( NULL );
    iMovie->RegisterMovieObserverL( this );

    /** All media files are added to video/audio tracks through mediaqueue */
    iMediaQueue = CVeiAddQueue::NewL( *this, * iMovie, * this );

    iOriginalAudioDuration = TTimeIntervalMicroSeconds(  - 1 );
    /* Create recorder with max priority. */
    iRecorder = CMdaAudioRecorderUtility::NewL( *this, NULL, EMdaPriorityMax,
                       TMdaPriorityPreference( KAudioPrefVideoRecording )
                       /*EMdaPriorityPreferenceQuality*/ );
    iAudioRecordPeriodic = CPeriodic::NewL( CActive::EPriorityStandard );

    /** Popup menus for video editor */
    iPopup = CVeiPopup::NewL( *this );

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::ConstructL: out" );
    }

TUid CVeiEditVideoView::Id()const
    {
    return TUid::Uid( EVeiEditVideoView );
    }

CAknNavigationDecorator* CVeiEditVideoView::CreateMoveNaviLabelL()
    {
    CAknNaviLabel* movelabel = new( ELeave )CAknNaviLabel;
    movelabel->SetNaviLabelType( CAknNaviLabel::ENavigationLabel );

    CleanupStack::PushL( movelabel );

    CAknNavigationDecorator* decoratedFolder = CAknNavigationDecorator::NewL(
        iNaviPane, movelabel, CAknNavigationDecorator::ENotSpecified );

    CleanupStack::Pop( movelabel );

    CleanupStack::PushL( decoratedFolder );
    decoratedFolder->SetContainerWindowL( *iNaviPane );
    CleanupStack::Pop( decoratedFolder );
    decoratedFolder->MakeScrollButtonVisible( ETrue );

    return decoratedFolder;
    }

CAknNavigationDecorator* CVeiEditVideoView::CreatePreviewNaviLabelL()
    {
    CVeiTimeLabelNavi* timelabelnavi = CVeiTimeLabelNavi::NewLC();
    CAknNavigationDecorator* decoratedFolder = CAknNavigationDecorator::NewL(
        iNaviPane, timelabelnavi, CAknNavigationDecorator::ENotSpecified );
    CleanupStack::Pop( timelabelnavi );

    CleanupStack::PushL( decoratedFolder );
    decoratedFolder->SetContainerWindowL( *iNaviPane );
    CleanupStack::Pop( decoratedFolder );
    decoratedFolder->MakeScrollButtonVisible( EFalse );

    return decoratedFolder;
    }

/**
 * Default navilabel. Shows MMS,Size and Time information. 
 */
CAknNavigationDecorator* CVeiEditVideoView::CreateEditNaviLabelL()
    {
    CVeiEditVideoLabelNavi* editvideolabelnavi = CVeiEditVideoLabelNavi::NewLC();

    editvideolabelnavi->SetState( CVeiEditVideoLabelNavi::EStateInitializing );

    CAknNavigationDecorator* navidecorator = CAknNavigationDecorator::NewL(
        iNaviPane, editvideolabelnavi, CAknNavigationDecorator::ENotSpecified );

    CleanupStack::Pop( editvideolabelnavi );

    CleanupStack::PushL( navidecorator );
    navidecorator->SetContainerWindowL( *iNaviPane );
    CleanupStack::Pop( navidecorator );
    navidecorator->MakeScrollButtonVisible( EFalse );

    return navidecorator;
    }

CVeiEditVideoView::~CVeiEditVideoView()
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: In" );

    if ( iProgressNote )
        {
        delete iProgressNote;
        iProgressNote = NULL;
        }

    if ( iPopup )
        {
        delete iPopup;
        iPopup = NULL;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iContainer" );
    if ( iContainer )
        {
        AppUi()->RemoveFromStack( iContainer );
        delete iContainer;
        iContainer = NULL;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iMediaQueue" );
    if ( iMediaQueue )
        {
        delete iMediaQueue;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iMovie" );
    if ( iMovie )
        {
        iMovie->Reset();
        //if application is closed from cut video view, observer is not
        //registered.
        if ( ( EProcessingMovieForCutting != iWaitMode ) &&
            ( ECuttingAudio != iWaitMode ) )
            {
            iMovie->UnregisterMovieObserver( this );
            }
        delete iMovie;
        iMovie = NULL;
        }

    if ( iAudioRecordPeriodic )
        {
        iAudioRecordPeriodic->Cancel();
        delete iAudioRecordPeriodic;
        }

    if ( iPreviewUpdatePeriodic )
        {
        iPreviewUpdatePeriodic->Cancel();
        delete iPreviewUpdatePeriodic;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iTempFile" );
    if ( iTempFile )
        {
        TInt err = iEikonEnv->FsSession().Delete( *iTempFile );
        if ( err )
            {
            // what to do when error occurs in destructor???
            }
        delete iTempFile;
        iTempFile = NULL;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iSaveToFileName" );
        
    if ( iSaveToFileName )
        {
        delete iSaveToFileName;
        iSaveToFileName = NULL;
        }

    if ( iTempRecordedAudio )
        {
        TInt err = iEikonEnv->FsSession().Delete( *iTempRecordedAudio );
        if ( err )
            {
            // what to do when error occurs in destructor???
            }
        delete iTempRecordedAudio;
        iTempRecordedAudio = NULL;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iTempMaker" );
        
    if ( iTempMaker )
        {
        delete iTempMaker;
        iTempMaker = NULL;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iErrorUI" );
    if ( iErrorUI )
        {
        delete iErrorUI;
        iErrorUI = NULL;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iAudioClipInfo" );
    delete iAudioClipInfo;

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iEditLabel" );
    delete iEditLabel;

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iMoveLabel" );
    delete iMoveLabel;

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iPreviewLabel" );
    delete iPreviewLabel;

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iRecorder" );
    if ( iRecorder )
        {
        delete iRecorder;
        iRecorder = NULL;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iVolumeHider" );
    if ( iVolumeHider )
        {
        iVolumeHider->Cancel();
        delete iVolumeHider;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iVolumeNavi" );
    delete iVolumeNavi;

    delete iCallBack;

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: Out" );
    }

void CVeiEditVideoView::DialogDismissedL( TInt aButtonId )
    {
    LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: In, aButtonId:%d, iWaitMode:%d", aButtonId, iWaitMode );

    IsEnoughFreeSpaceToSaveL();

    if ( aButtonId != EAknSoftkeyDone )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: In, 2" );
        CMdaAudioRecorderUtility::TState rState;
        rState = CMdaAudioClipUtility::ENotReady;

        if ( iRecorder )
            {
            rState = iRecorder->State();
            }

        if (( EOpeningAudioInfo == iWaitMode ) || ( CMdaAudioClipUtility::EOpen == rState ))
            {
            delete iAudioClipInfo;
            iAudioClipInfo = NULL;
            iWaitMode = EProcessingError;
            iMovie->CancelProcessing();
            }
        else
            {
            iWaitMode = EProcessingError;
            iMovie->CancelProcessing();
            }
        }
    else if ( EProcessingMovieSend == iWaitMode )
        {
        //SendMovieL();
        if ( !iCallBack )
            {
            TCallBack cb( CVeiEditVideoView::AsyncBackSend, this );
            iCallBack = new ( ELeave ) CAsyncCallBack( cb, CActive::EPriorityStandard );
            }
        iCallBack->CallBack();
        }
    else if ( EProcessingMovieTrimMms == iWaitMode )
        {
        SetNewTempFileNeeded( EFalse );

        LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 3, EProcessingMovieTrimMms" );

        RFs& fs = iEikonEnv->FsSession();
        TEntry entry;
        User::LeaveIfError( fs.Entry( *iTempFile, entry ));
        TInt tempFileSize = entry.iSize / 1024;
        TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi*, iEditLabel->DecoratedControl() )->GetMaxMmsSize();

        LOGFMT2( KVideoEditorLogFile, 
                "CVeiEditVideoView::DialogDismissedL: 4, tempFileSize:%d, maxMmsSize:%d", tempFileSize, maxMmsSize );

        if ( iMovie->IsMovieMMSCompatible())
            {
            if ( tempFileSize <= maxMmsSize )
                {
                LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 5, MMS SIZE OK -- SEND" );
                iWaitMode = EProcessingMovieSend;
                iGivenSendCommand = KSenduiMtmMmsUid; // MMS

                //SendMovieL();
                if ( !iCallBack )
                    {
                    TCallBack cb( CVeiEditVideoView::AsyncBackSend, this );
                    iCallBack = new( ELeave )CAsyncCallBack( cb, CActive::EPriorityStandard );
                    }
                iCallBack->CallBack();
                }
            else
                {
                LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 6, MMS SIZE FAILED - to TRIMM" );
                TBuf8 < 255 > conv8Filename;
                CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, *iTempFile );
                iMovie->UnregisterMovieObserver( iContainer );
                iMovie->UnregisterMovieObserver( this );

                AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid(0), conv8Filename );
                }
            }
        else
            {
            // if movie is not mms capable, trimming it does not help, instead its quality should be set
            // trimming is made when other compatibility issues are fullfilled 
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 7, MMS Compatible FAILED - to TRIMM" );
            TBuf8 < KMaxFileName > conv8Filename;
            CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, *iTempFile );
                
            iMovie->UnregisterMovieObserver( iContainer );
            iMovie->UnregisterMovieObserver( this );

            AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid( 0 ), conv8Filename );
            }
        iMovie->SetQuality( iBackupSaveQuality );
        return ;
        }
    else if (( EProcessingMovieSave == iWaitMode ) ||
             ( EProcessingMovieSaveThenQuit == iWaitMode ))
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 8, EProcessingMovieSave|EProcessingMovieSaveThenQuit" );
        RFs& fs = iEikonEnv->FsSession();

        CFileMan* fileman = CFileMan::NewL( fs );
        CleanupStack::PushL( fileman );

        TInt moveErr( KErrNone );

        if ( iTempFile->Left( 1 ) == iSaveToFileName->Left( 1 ))
            {
            moveErr = fileman->Rename( *iTempFile, * iSaveToFileName );
            LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 9, rename %S to %S", iTempFile, iSaveToFileName );
            }
        else
            {
            moveErr = fileman->Move( *iTempFile, * iSaveToFileName );
            LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 10, moved %S to %S", iTempFile, iSaveToFileName );
            }
        CleanupStack::PopAndDestroy( fileman );

        delete iTempFile;
        iTempFile = NULL;

        if ( moveErr )
            {
            ShowGlobalErrorNote( moveErr );
            UpdateEditNaviLabel();
            iWaitMode = ENotWaiting;
            return ;
            }

        iMovieSavedFlag = ETrue;

        if ( EProcessingMovieSaveThenQuit == iWaitMode )
            {
            iMovie->Reset();
            iMovieFirstAddFlag = ETrue; // True for the next edit process.						
            }

        LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 11" );
        UpdateMediaGalleryL();
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 12, media gallery updated" );

        if ( EProcessingMovieSaveThenQuit == iWaitMode )
            {
            if ( !iCallBack )
                {
                TCallBack cb( CVeiEditVideoView::AsyncBackSaveThenExitL, this );
                iCallBack = new( ELeave )CAsyncCallBack( cb, CActive::EPriorityStandard );
                                
                }
            iCallBack->CallBack();
            }

        LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL Out" );
        return ;
        }
    else if ( EProcessingMoviePreview == iWaitMode && ( iTempFile != NULL ))
        {
        iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview );
        iContainer->PlayVideoFileL( *iTempFile, iFullScreenSelected );
        }
    else
        {
        if ( EProcessingError == iWaitMode )
            {
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 13" );
            if ( iTempFile )
                {
                RFs& fs = iEikonEnv->FsSession();

                fs.Delete( *iTempFile );
                delete iTempFile;
                iTempFile = NULL;
                SetNewTempFileNeeded( ETrue );
                }

            iWaitMode = ENotWaiting;
            ShowGlobalErrorNote( iErrorNmb );
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 14" );
            UpdateEditNaviLabel();
            }

        if ( EProcessingAudioError == iWaitMode )
            {
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 15" );
            ShowErrorNote( R_VEI_ERRORNOTE_AUDIO_INSERTING_FAILED );
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 16" );
            UpdateEditNaviLabel();
            iWaitMode = ENotWaiting;
            }

        if ( iChangedFromMMCToPhoneMemory )
            {
            HBufC* noteText = StringLoader::LoadLC( R_VED_MMC_NOT_INSERTED,
                                                        iEikonEnv );
            CAknInformationNote* informationNote = new( ELeave )
                                                    CAknInformationNote( ETrue );
            informationNote->ExecuteLD( *noteText );

            CleanupStack::PopAndDestroy( noteText );
            }
        }
    if ( EProcessingMovieSend != iWaitMode )
        {
        iWaitMode = ENotWaiting;
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: Out" );
    }


TInt CVeiEditVideoView::AsyncBackSend( TAny* aThis )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSend" );

    // In the asynchronous version, trap the rest of the functions 
    // to make sure that the caller's TRequestStatus is always 
    // completed, also in case of failures.
    CVeiEditVideoView* view = static_cast < CVeiEditVideoView*  > ( aThis );
    TInt err = KErrNone;
    TRAP( err, view->SendMovieL());
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSend 1, err:%d", err );
           
    view->iWaitMode = ENotWaiting;
    User::LeaveIfError( err );
    return KErrNone;
    }

TInt CVeiEditVideoView::AsyncBackSaveThenExitL( TAny* aThis )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSaveThenExitL In" );

    // In the asynchronous version, trap the rest of the functions 
    // to make sure that the caller's TRequestStatus is always 
    // completed, also in case of failures.

    CVeiEditVideoView* view = static_cast < CVeiEditVideoView*  > ( aThis );

    view->AppUi()->HandleCommandL( EAknCmdExit );
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSaveThenExitL 1" );
    return KErrNone;
    }

void CVeiEditVideoView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane*
    aMenuPane )
    {
    if ( !iContainer || !iMovie )
        {
        return ;
        }
    if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_MENU && CVeiEditVideoContainer
        ::EModeMixingAudio == iContainer->SelectionMode())
        {
        // Dim all the items and replace the with 
        // R_VEI_EDIT_VIDEO_VIEW_AUDIO_MIXING_MENU
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewInsert, ETrue );
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue );
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue );
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewMovie, ETrue );
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewSettings, ETrue );
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditStartTransition, ETrue );
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditMiddleTransition, ETrue );
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditEndTransition, ETrue );
        aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewHelp, ETrue );
        aMenuPane->SetItemDimmed( EEikCmdExit, ETrue );

        aMenuPane->AddMenuItemsL( R_VEI_EDIT_VIDEO_VIEW_AUDIO_MIXING_MENU );

        return ;
        }

    if (( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_VIDEO_MENU ) || 
        ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_VIDEO_SUBMENU ))
        {
        // @ : if muted, remove AdjustVolume, if video has no audio, remove AdjustVolume
        //if (!iMovie->VideoClipEditedHasAudio(iContainer->CurrentIndex()))				
        if ( !( iMovie->VideoClipInfo( iContainer->CurrentIndex()))->HasAudio())
            {
            aMenuPane->DeleteMenuItem( EVeiCmdEditVideoAdjustVolume );
            }

        if ( iMovie->VideoClipCount() < 2 )
            {
            aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoMove );
            }

        if ( iMovie->VideoClipIsMuteable( iContainer->CurrentIndex()) == EFalse
            )
            {
            aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoMute );
            aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoUnmute );
            }
        else if ( iMovie->VideoClipIsMuted( iContainer->CurrentIndex()))
            {
            aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoMute );
            }
        else
            {
            aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoUnmute );
            }
        // remove "cut" if video duration < 1 sec. because engine/codec(s) do not handle them wholly at the moment
        TTimeIntervalMicroSeconds duration = iMovie->VideoClipInfo( 
                                        iContainer->CurrentIndex())->Duration();
        if ( duration.Int64() < KMinCutVideoLength )
            {
            aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoCutting );
            }
        }

    if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_MOVIE_SUBMENU )
        {
        if ( STATIC_CAST( CVeiEditVideoLabelNavi* , 
                          iEditLabel->DecoratedControl())->IsMMSAvailable())
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewTrimForMms, ETrue );
            }

        /*TInt tempint;
        if (aMenuPane->MenuItemExists(EVeiCmdEditVideoMixAudio, tempint))
        {
        if ((iMovie->VideoClipCount() > 0 && 
        (iMovie->VideoClipEditedHasAudio(0) && 
        iMovie->VideoClipEditedHasAudio(iMovie->VideoClipCount() - 1)))
        && iMovie->AudioClipCount() > 0)*/
        if ( MixingConditionsOk())
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoMixAudio, EFalse );
            }
        else
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoMixAudio, ETrue );
            }
        //}	
        }

    if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_MENU )
        {
        if ( iSendKey )
        //Display send menu. 
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewInsert, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewMovie, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewSettings, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditStartTransition, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditMiddleTransition, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditEndTransition, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewHelp, ETrue );
            aMenuPane->SetItemDimmed( EEikCmdExit, ETrue );

            ShowAndHandleSendMenuCommandsL();

            iSendKey = EFalse;
            return ;
            }

        if ( iMovie->VideoClipCount() == 0 )
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue );
            }


        if ( iMovie->VideoClipCount() == 0 && iMovie->AudioClipCount() == 0 )
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditStartTransition, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditMiddleTransition, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditEndTransition, ETrue );

            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewMovie, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue );
            return ;
            }
        else
            {
            TInt index = 0;

            aMenuPane->ItemAndPos( EVeiCmdEditVideoViewHelp, index );
            iSendAppUi.AddSendMenuItemL( *aMenuPane, index, EVeiCmdEditVideoViewSend );
            }
        /* Remove irrelevant "edit" menus. */

        if ( iContainer->CursorLocation() != VideoEditor::ECursorOnClip )
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
            }
        /* Checks if title or image */
        if (( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) && 
            ( iMovie->VideoClipCount() > 0 ) && 
            ( iMovie->VideoClipInfo( iContainer->CurrentIndex())->Class() 
                                                == EVedVideoClipClassGenerated
            ))
            {
            /* Now refine the menu dimming to specific generators. */
            TUid generatorUid = iMovie->VideoClipInfo( 
                                iContainer->CurrentIndex())->Generator()->Uid();

            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
            if ( generatorUid == KUidImageClipGenerator )
                {
                aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
                }
            else
                {
                aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue )
                    ;
                }
            }
        else
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue );
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
            }


        if ( iContainer->CurrentClipIsFile())
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
            }
        else
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue );
            }

        if ( iContainer->CursorLocation() != VideoEditor::ECursorOnTransition )
            {
            aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditStartTransition )
                                      ;
            aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditEndTransition );
            aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditMiddleTransition
                                      );
            }
        if (( iContainer->CursorLocation() != VideoEditor::ECursorOnAudio ) || 
            ( iMovie->AudioClipCount() == 0 ))
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue );
            }

        /* Remove irrelevant transition effect menus. */
        if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
            {
            aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue );
            }

        if ( iContainer->CursorLocation() == VideoEditor::ECursorOnTransition )
            {
            if ( iContainer->CurrentIndex() == 0 )
                {
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewEditEndTransition );
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewEditMiddleTransition );
                }
            else if ( iContainer->CurrentIndex() < iMovie->VideoClipCount())
                {
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewEditStartTransition );
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewEditEndTransition );
                }
            else
                {
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewEditStartTransition );
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewEditMiddleTransition );
                }
            }
        }

    if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_START_TRANSITION_SUBMENU )
        {
        switch ( iMovie->StartTransitionEffect())
            {
            case EVedStartTransitionEffectNone:
                aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewTransitionNone );
                break;
            case EVedStartTransitionEffectFadeFromBlack:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionFadeFromBlack );
                break;
            case EVedStartTransitionEffectFadeFromWhite:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionFadeFromWhite );
                break;
            default:
                break;
            }
        }

    if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_END_TRANSITION_SUBMENU )
        {
        switch ( iMovie->EndTransitionEffect())
            {
            case EVedEndTransitionEffectNone:
                aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewTransitionNone );
                break;
            case EVedEndTransitionEffectFadeToBlack:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionFadeToBlack );
                break;
            case EVedEndTransitionEffectFadeToWhite:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionFadeToWhite );
                break;
            default:
                break;
            }
        }

    if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_MIDDLE_TRANSITION_SUBMENU )
        {
        TInt currentindex = iContainer->CurrentIndex() - 1;
        switch ( iMovie->MiddleTransitionEffect( currentindex ))
            {
            case EVedMiddleTransitionEffectNone:
                aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewTransitionNone );
                break;
            case EVedMiddleTransitionEffectDipToBlack:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionDipToBlack );
                break;
            case EVedMiddleTransitionEffectDipToWhite:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionDipToWhite );
                break;
            case EVedMiddleTransitionEffectCrossfade:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionCrossfade );
                break;
            case EVedMiddleTransitionEffectWipeLeftToRight:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionWipeFromLeft );
                break;
            case EVedMiddleTransitionEffectWipeRightToLeft:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionWipeFromRight );
                break;
            case EVedMiddleTransitionEffectWipeTopToBottom:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionWipeFromTop );
                break;
            case EVedMiddleTransitionEffectWipeBottomToTop:
                aMenuPane->DeleteMenuItem(
                    EVeiCmdEditVideoViewTransitionWipeFromBottom );
                break;
            default:
                break;
            }
        }
    }

void CVeiEditVideoView::HandleCommandL( TInt aCommand )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::HandleCommandL( %d ): In", aCommand );

    // At the startup HandleCommandL may get called before iContainer
    // has been constructed.
    if ( !iContainer )
        {
        LOG( KVideoEditorLogFile, "\tiContainer == NULL" );
        AppUi()->HandleCommandL( aCommand );
        return ;
        }

    TInt index;
    switch ( aCommand )
        {
        /* Cursor is on transition and up/key key is pressed*/
        case EVeiCmdEditVideoViewTransitionKeyUp:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionKeyUp" );
                BrowseStartTransition( ETrue );
                break;
                }
        case EVeiCmdEditVideoViewTransitionKeyDown:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionKeyDown" );
                BrowseStartTransition( EFalse );
                break;
                }
        case EVeiCmdSendMovie:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdSendMovie" );
                if (( iMovie->VideoClipCount() == 0 ) && 
                    ( iMovie->AudioClipCount() == 0 ))
                    {
                    iSendKey = EFalse;
                    }
                else
                    {
                    MenuBar()->TryDisplayMenuBarL();
                    }
                break;
                }
        case EAknSoftkeyDone:
                {
                LOG( KVideoEditorLogFile, "\tEAknSoftkeyDone" );

                /*if (CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode())
                {
                Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
                Cba()->DrawDeferred();
                iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                //iContainer->ArrowsControl();
                break;	
                }	
                 */

                if ( CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode())
                    
                    {

                    MixAudio();

                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
                    Cba()->DrawDeferred();

                    VideoEditor::TCursorLocation cursorLocation = iContainer->CursorLocation();
                    if (( cursorLocation == VideoEditor::ECursorOnClip ) && 
                        ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeSlowMotion ))
                        
                        {
                        iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                        iContainer->ArrowsControl();
                        }
                    else
                        {
                        iOriginalAudioClipIndex =  - 1;
                        iOriginalVideoClipIndex =  - 1;
                        iOriginalAudioStartPoint = TTimeIntervalMicroSeconds( -1 );
                        iOriginalAudioDuration = TTimeIntervalMicroSeconds(  -1 );
                            

                        iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                        }
                    SetEditorState( EEdit );
                    UpdateEditNaviLabel();

                    // Setting the cursor location resets the image in the video display box
                    iContainer->SetCursorLocation( cursorLocation );
                    }
                break;
                }

        case EAknSoftkeyOk:
                {
                LOG( KVideoEditorLogFile, "\tEAknSoftkeyOk" );

                if ( CVeiEditVideoContainer::EModeAdjustVolume == iContainer->SelectionMode())
                    
                    {
                    AdjustVolumeL();
                    SetEditorState( EEdit );
                    }

                Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
                Cba()->DrawDeferred();

                if (( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) &&
                    ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeSlowMotion ))
                    
                    {
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                    iContainer->ArrowsControl();
                    }
                else
                    {
                    iOriginalAudioClipIndex =  - 1;
                    iOriginalVideoClipIndex =  - 1;
                    iOriginalAudioStartPoint = TTimeIntervalMicroSeconds(  -1 );
                    iOriginalAudioDuration = TTimeIntervalMicroSeconds(  -1 );

                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                    }
                UpdateEditNaviLabel();
                break;
                }
        case EAknSoftkeyCancel:
        case EVeiCmdEditVideoMixAudioCancel:
                {
                LOG( KVideoEditorLogFile, "\tEAknSoftkeyCancel||EVeiCmdEditVideoMixAudioCancel" );

                Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
                Cba()->DrawDeferred();

                SetEditorState( EEdit );

                if ( CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode() ||
                     CVeiEditVideoContainer::EModeAdjustVolume == iContainer->SelectionMode())
                    {
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                    // Setting the cursor location resets the image in the video display box
                    iContainer->SetCursorLocation( iContainer->CursorLocation());
                    break;
                    }

                if (( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) &&
                     ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeSlowMotion ))
                    {
                    iMovie->VideoClipSetSpeed( iContainer->CurrentIndex(), iOriginalVideoSpeed );
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                        
                    iContainer->ArrowsControl();
                    }
                else
                    {
                    if ( iContainer->CursorLocation() == VideoEditor
                        ::ECursorOnAudio )
                        {
                        if ( iOriginalAudioStartPoint >= TTimeIntervalMicroSeconds( 0 ))
                            {
                            iMovie->AudioClipSetStartTime( iContainer->CurrentIndex(), iOriginalAudioStartPoint );
                            iOriginalAudioStartPoint = TTimeIntervalMicroSeconds(  -1 );
                            iMovie->AudioClipSetCutOutTime( iContainer->CurrentIndex(), iOriginalAudioDuration );
                            iOriginalAudioDuration = TTimeIntervalMicroSeconds( -1 );
                            }
                        else
                            {
                            index = iContainer->CurrentIndex();

                            iContainer->SetCurrentIndex( iOriginalAudioClipIndex );
                            iOriginalAudioClipIndex =  - 1;
                            iOriginalAudioDuration = TTimeIntervalMicroSeconds( -1 );

                            iMovie->RemoveAudioClip( index );
                            }
                        }
                    else
                        {
                        if ( iContainer->SelectionMode() != CVeiEditVideoContainer::EModeDuration )
                            {
                            iMovie->VideoClipSetIndex( iContainer->CurrentIndex(), iOriginalVideoClipIndex );
                            iContainer->SetVideoCursorPosition( iOriginalVideoClipIndex );
                            iOriginalVideoClipIndex =  - 1;
                            }
                        else
                            {
                            CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
                            if ( info->Class() == EVedVideoClipClassGenerated )
                                {
                                if ( info->Generator()->Uid() == KUidTitleClipGenerator )
                                    {
                                    CVeiTitleClipGenerator* generator =
                                                    STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
                                    generator->SetDuration( TTimeIntervalMicroSeconds(
                                                                iOriginalVideoCutOutTime.Int64() -
                                                                iOriginalVideoCutInTime.Int64()));
                                    }
                                else if ( info->Generator()->Uid() == KUidImageClipGenerator )
                                    {
                                    CVeiImageClipGenerator* generator =
                                            STATIC_CAST( CVeiImageClipGenerator* , info->Generator());
                                    generator->SetDuration( TTimeIntervalMicroSeconds(
                                                                iOriginalVideoCutOutTime.Int64() -
                                                                iOriginalVideoCutInTime.Int64()));
                                    }
                                }
                            }
                        }
                    }

                if ( iContainer->SelectionMode() == CVeiEditVideoContainer
                    ::EModePreview )
                    {
                    iContainer->SetBlackScreen( EFalse );
                    iContainer->SetRect( AppUi()->ClientRect());
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                    iContainer->ArrowsControl();
                    }
                else
                    {
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                    UpdateEditNaviLabel();
                    }
                break;
                }
        case EVeiCmdEditVideoViewSend:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewSend" );
                ShowAndHandleSendMenuCommandsL();
                break;
                }

        case EVeiCmdEditVideoViewPreviewLarge:
        case EVeiCmdEditVideoViewPreviewSmall:
                {
                LOG( KVideoEditorLogFile, 
                    "\tEVeiCmdEditVideoViewPreviewLarge||EVeiCmdEditVideoViewPreviewSmall" );

                if ( CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode())
                    {
                    MixAudio();
                    }

                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    if ( aCommand == EVeiCmdEditVideoViewPreviewLarge )
                        {
                        iFullScreenSelected = ETrue;
                        }
                    else
                        {
                        iFullScreenSelected = EFalse;
                        }
                    iWaitMode = EProcessingMoviePreview;
                    StartTempFileProcessingL();
                    }
                break;
                }

            /**
             * Trim for MMS
             */
        case EVeiCmdEditVideoViewTrimForMms:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTrimForMms" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    iWaitMode = EProcessingMovieTrimMms;
                    StartTempFileProcessingL();
                    }
                break;
                }
            /**
             * Cut (Audio and Video)
             */
        case EVeiCmdEditVideoViewEditVideoCutting:
                {
                LOG( KVideoEditorLogFile, 
                    "\tEVeiCmdEditVideoViewEditVideoCutting" );

                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    // Cut video
                    if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
                        {
                        __ASSERT_ALWAYS( iMovie->VideoClipCount() > 0, 
                                         User::Panic( _L( "VideoEditor" ), 34 ));

                        iCutVideoIndex = iContainer->CurrentIndex();
                        iWaitMode = EProcessingMovieForCutting;
                        iOriginalCutInTime = iMovie->VideoClipCutInTime( iCutVideoIndex );
                        iOriginalCutOutTime = iMovie->VideoClipCutOutTime( iCutVideoIndex );

                        iMovie->UnregisterMovieObserver( iContainer );
                        iMovie->UnregisterMovieObserver( this );

                        AppUi()->DeactivateActiveViewL();

                        // set file name & clip
                        iCutView.SetVideoClipAndIndex( *iMovie, iCutVideoIndex )
                            ;

                        // activate cut  view
                        AppUi()->ActivateLocalViewL( iCutView.Id());
                        }
                    else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
                    // Cut audio
                        {
                        __ASSERT_ALWAYS( iMovie->AudioClipCount() > 0, 
                                         User::Panic( _L( "VideoEditor" ), 34 ));

                        iCutAudioIndex = iContainer->CurrentIndex();
                        iWaitMode = ECuttingAudio;
                        iOriginalAudioCutInTime = iMovie->AudioClipCutInTime( iCutAudioIndex );
                        iOriginalAudioCutOutTime = iMovie->AudioClipCutOutTime( iCutAudioIndex );

                        iMovie->UnregisterMovieObserver( iContainer );
                        iMovie->UnregisterMovieObserver( this );

                        AppUi()->DeactivateActiveViewL();

                        // set file name & clip
                        iCutAudioView.SetVideoClipAndIndex( *iMovie, iCutAudioIndex );
                        // activate cut  view
                        AppUi()->ActivateLocalViewL( TUid::Uid( EVeiCutAudioView ));
                        }
                    }
                break;
                }
            /**
             * Selection (joystick).
             */
        case EVeiCmdEditVideoViewContainerShowMenu:
                {
                LOG( KVideoEditorLogFile, 
                    "\tEVeiCmdEditVideoViewContainerShowMenu" );

                //preview popup
                if ( iEditorState != EEdit )
                    {
                    if ( iEditorState == CVeiEditVideoView::EQuickPreview )
                        {
                        StopNaviPaneUpdateL();
                        iContainer->PauseVideoL();
                        LOG( KVideoEditorLogFile, 
                            "\tEVeiCmdEditVideoViewContainerShowMenu, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" );
                        Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK
                            );
                        Cba()->DrawDeferred();
                        }
                    MenuBar()->SetMenuTitleResourceId( R_VEI_PREVIEW_BAR );
                    MenuBar()->TryDisplayMenuBarL();
                    MenuBar()->SetMenuTitleResourceId(
                            R_VEI_MENUBAR_EDIT_VIDEO_VIEW );
                    break;
                    }
                switch ( iContainer->CursorLocation())
                    {
                    case VideoEditor::ECursorOnAudio: 
                        {
                        iPopup->ShowEditAudioPopupList();
                        break;
                        }
                    case VideoEditor::ECursorOnClip: 
                        {
                        if ( iMovie->VideoClipInfo( iContainer->CurrentIndex())->Class() == EVedVideoClipClassFile )
                            {
                            iPopup->ShowEditVideoPopupList();
                            }
                        else
                            {

                            TUid generatorUid = iMovie->VideoClipInfo(
                                                    iContainer->CurrentIndex())->Generator()->Uid();
                            if ( generatorUid == KUidImageClipGenerator )
                            // Image 
                                {
                                iPopup->ShowEditImagePopupList();
                                }
                            else
                            // Text
                                {
                                iPopup->ShowEditTextPopupList();
                                }
                            }
                        break;
                        }
                    /**
                     * Cursor on video transition.
                     */
                    case VideoEditor::ECursorOnTransition: 
                        {
                        if ( iContainer->CurrentIndex() == 0 )
                            {
                            iPopup->ShowStartTransitionPopupListL();
                            }
                        else if ( iContainer->CurrentIndex() < iMovie->VideoClipCount())
                            {
                            iPopup->ShowMiddleTransitionPopupListL();
                            }
                        else
                            {
                            iPopup->ShowEndTransitionPopupListL();
                            }
                        break;
                        }
                default:
                    break;
                    }
                break;
                }
        case EVeiCmdEditVideoViewInsert:
        case EVeiCmdEditVideoViewEditVideo:
        case EVeiCmdEditVideoViewEditAudio:
            LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsert||EVeiCmdEditVideoViewEditVideo||EVeiCmdEditVideoViewEditAudio" );
            break;
        case EVeiCmdEditVideoViewTransitionNone:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionNone" );

                if ( iContainer->CurrentIndex() == 0 )
                    {
                    iMovie->SetStartTransitionEffect( EVedStartTransitionEffectNone );
                    }
                else if ( iContainer->CurrentIndex() < iMovie->VideoClipCount())
                    {
                    index = iContainer->CurrentIndex() - 1;
                    iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectNone, index );
                    }
                else
                    {
                    iMovie->SetEndTransitionEffect( EVedEndTransitionEffectNone );
                    }
                break;
                }
        case EVeiCmdEditVideoViewTransitionFadeFromBlack:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeFromBlack" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() == 0, User::Panic( _L( "VideoEditor" ), 34 ));
                iMovie->SetStartTransitionEffect( EVedStartTransitionEffectFadeFromBlack );
                break;
                }
        case EVeiCmdEditVideoViewTransitionFadeFromWhite:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeFromWhite" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() == 0, User::Panic( _L( "VideoEditor" ), 34 ));
                iMovie->SetStartTransitionEffect( EVedStartTransitionEffectFadeFromWhite );
                break;
                }
        case EVeiCmdEditVideoViewTransitionDipToBlack:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionDipToBlack" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
                __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
                index = iContainer->CurrentIndex() - 1;
                iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectDipToBlack, index );
                break;
                }
        case EVeiCmdEditVideoViewTransitionDipToWhite:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionDipToWhite" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
                __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
                index = iContainer->CurrentIndex() - 1;
                iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectDipToWhite, index );
                break;
                }
        case EVeiCmdEditVideoViewTransitionCrossfade:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionCrossfade" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
                __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
                index = iContainer->CurrentIndex() - 1;
                iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectCrossfade, index );
                break;
                }
        case EVeiCmdEditVideoViewTransitionWipeFromLeft:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromLeft" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
                __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
                index = iContainer->CurrentIndex() - 1;
                iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeLeftToRight, index );
                break;
                }
        case EVeiCmdEditVideoViewTransitionWipeFromRight:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromRight" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
                __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
                index = iContainer->CurrentIndex() - 1;
                iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeRightToLeft, index );
                break;
                }
        case EVeiCmdEditVideoViewTransitionWipeFromTop:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromTop" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
                __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
                index = iContainer->CurrentIndex() - 1;
                iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeTopToBottom, index );
                break;
                }
        case EVeiCmdEditVideoViewTransitionWipeFromBottom:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromBottom" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
                __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 ));
                index = iContainer->CurrentIndex() - 1;
                iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeBottomToTop, index );
                break;
                }
        case EVeiCmdEditVideoViewTransitionFadeToBlack:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeToBlack" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() == iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
                iMovie->SetEndTransitionEffect( EVedEndTransitionEffectFadeToBlack );
                break;
                }
        case EVeiCmdEditVideoViewTransitionFadeToWhite:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeToWhite" );
                __ASSERT_ALWAYS( iContainer->CurrentIndex() == iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 ));
                iMovie->SetEndTransitionEffect( EVedEndTransitionEffectFadeToWhite );
                break;
                }
        case EVeiCmdEditVideoViewEditStartTransition:
        case EVeiCmdEditVideoViewEditMiddleTransition:
        case EVeiCmdEditVideoViewEditEndTransition:
            LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditStartTransition||EVeiCmdEditVideoViewEditMiddleTransition||EVeiCmdEditVideoViewEditEndTransition" );
            break;
        case EVeiCmdEditVideoViewSaveTo:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewSaveTo" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    TInt err;
                    TRAP( err, SaveL( EProcessingMovieSave ));
                    if ( err != KErrNone )
                        {
                        ShowErrorNote( R_VEI_ERROR_NOTE );
                        }
                    }
                break;
                }
        case EVeiCmdEditVideoMixAudio:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoMixAudio" );
                SetEditorState( EMixAudio );
                break;
                }

        case EVeiCmdEditVideoAdjustVolume:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoAdjustVolume" );
                SetEditorState( EAdjustVolume );
                break;
                }

        case EVeiCmdEditVideoViewInsertVideo:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertVideo" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    __ASSERT_ALWAYS( iMediaQueue, User::Panic( _L( "CVeiEditVideoView" ), 1 ));

                    if ( !iMediaQueue->ShowVideoClipDialogL( iContainer->CursorLocation(), iContainer->CurrentIndex()))
                        {
                        return ;
                        }
                    }
                HandleScreenDeviceChangedL();
                break;
                }
        case EVeiCmdEditVideoDuplicate:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoDuplicate" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    TEntry fileinfo;

                    SetNewTempFileNeeded( ETrue );
                    iMovieSavedFlag = EFalse;

                    iWaitMode = EDuplicating;

                    if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
                        {
                        CVedVideoClipInfo* previousInfo = iMovie->VideoClipInfo( iContainer->CurrentIndex());

                        RFs& fs = iEikonEnv->FsSession();
                        fs.Entry( previousInfo->FileName(), fileinfo );

                        if ( IsEnoughFreeSpaceToSaveL( fileinfo.iSize ))
                            {
                            iMovie->InsertVideoClipL( previousInfo->FileName(), iContainer->CurrentIndex() + 1 );
                            }
                        }
                    else
                        {
                        if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
                            {
                            CVedAudioClipInfo* currentInfo = iMovie->AudioClipInfo( iContainer->CurrentIndex());
                            TTimeIntervalMicroSeconds currentDuration = iMovie->AudioClipEditedDuration( iContainer->CurrentIndex());

                            TInt currentIndex = iContainer->CurrentIndex();

                            for ( TInt i = iMovie->AudioClipCount() - 1; i > currentIndex; i-- )
                                {
                                TTimeIntervalMicroSeconds oldStartTime = iMovie->AudioClipStartTime( i );
                                iMovie->AudioClipSetStartTime( i, TTimeIntervalMicroSeconds( oldStartTime.Int64() + currentDuration.Int64()));
                                }

                            TTimeIntervalMicroSeconds currentAudioClipEndTime = iMovie->AudioClipEndTime( currentIndex );
                            TTimeIntervalMicroSeconds currentCutInTime = iMovie->AudioClipCutInTime( currentIndex );
                            TTimeIntervalMicroSeconds currentCutOutTime = iMovie->AudioClipCutOutTime( currentIndex );
                            iMovie->AddAudioClipL( currentInfo->FileName(), currentAudioClipEndTime, currentCutInTime, currentCutOutTime );
                            }
                        }
                    }
                break;
                }

            /*
             * Insert TITLE text *	
             */
        case EVeiCmdEditVideoViewInsertText:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertText" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    iPopup->ShowInsertTextPopupList();
                    }
                break;
                }

        case EVeiCmdEditVideoViewInsertTextTitle:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextTitle" );

                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    StoreOrientation();
                    CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
                    AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );

                    TSize res = TSize( iMovie->Resolution());

                    CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res, 
                                                                                       EVeiTitleClipTransitionNone, 
                                                                                       EVeiTitleClipHorizontalAlignmentCenter, 
                                                                                       EVeiTitleClipVerticalAlignmentCenter );

                    HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_NAME, iEikonEnv );
                    generator->SetDescriptiveNameL( *descriptiveName );
                    CleanupStack::PopAndDestroy( descriptiveName );

                    generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone, 
                                                            EVeiTitleClipHorizontalAlignmentCenter, 
                                                            EVeiTitleClipVerticalAlignmentCenter );

                    /* Ask for text. */
                    HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
                    TPtr txtptr( text->Des());
                    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
                    CleanupStack::PushL( textQuery );

                    textQuery->SetMaxLength( KTitleScreenMaxTextLength );
                    //textQuery->SetPredictiveTextInputPermitted(ETrue);
                    CleanupStack::Pop( textQuery );

                    if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
                        {
                        CleanupStack::PopAndDestroy( text );
                        CleanupStack::PopAndDestroy( generator );
                        CleanupStack::PopAndDestroy( this ); // restore appui orientation
                        break;
                        }

                    generator->SetTextL( *text );
                    CleanupStack::PopAndDestroy( text );

                    /* Insert generator into the movie. */
                    TInt err = 0;
                    index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
                    TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index ));

                    CleanupStack::Pop( generator );
                    User::LeaveIfError( err );

                    CleanupStack::PopAndDestroy( this ); // restore appui orientation
                    }
                break;
                }
            /*
             * Insert TITLE (fading) text *	
             */
        case EVeiCmdEditVideoViewInsertTextTitleFading:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextTitleFading" );

                if ( IsEnoughFreeSpaceToSaveL())
                    {

                    StoreOrientation();
                    CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
                    AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );

                    TSize res = TSize( iMovie->Resolution());
                    CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res, 
                                                                                       EVeiTitleClipTransitionNone, 
                                                                                       EVeiTitleClipHorizontalAlignmentCenter, 
                                                                                       EVeiTitleClipVerticalAlignmentCenter );

                    HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_FADING_NAME, iEikonEnv );
                    generator->SetDescriptiveNameL( *descriptiveName );
                    CleanupStack::PopAndDestroy( descriptiveName );

                    generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade, 
                                                            EVeiTitleClipHorizontalAlignmentCenter, 
                                                            EVeiTitleClipVerticalAlignmentCenter );
                    /* Ask for text. */
                    HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
                    TPtr txtptr( text->Des());

                    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
                    CleanupStack::PushL( textQuery );

                    textQuery->SetMaxLength( KTitleScreenMaxTextLength );
                    //textQuery->SetPredictiveTextInputPermitted(ETrue);
                    CleanupStack::Pop( textQuery );

                    if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
                        {
                        CleanupStack::PopAndDestroy( text );
                        CleanupStack::PopAndDestroy( generator );
                        CleanupStack::PopAndDestroy( this ); // restore appui orientation
                        break;
                        }

                    generator->SetTextL( *text );
                    CleanupStack::PopAndDestroy( text );

                    /* Insert generator into the movie. */
                    TInt err = 0;
                    index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
                    TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index ));
                    CleanupStack::Pop( generator );
                    User::LeaveIfError( err );

                    CleanupStack::PopAndDestroy( this ); // restore appui orientation
                    }
                break;
                }
            /*
             * Insert SUBTITLE text *	
             */
        case EVeiCmdEditVideoViewInsertTextSubTitle:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextSubTitle" );

                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    StoreOrientation();
                    CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
                    AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );

                    TSize res = TSize( iMovie->Resolution());
                    CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res, 
                                                                                       EVeiTitleClipTransitionNone, 
                                                                                       EVeiTitleClipHorizontalAlignmentCenter, 
                                                                                       EVeiTitleClipVerticalAlignmentCenter );

                    HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_NAME, iEikonEnv );
                    generator->SetDescriptiveNameL( *descriptiveName );
                    CleanupStack::PopAndDestroy( descriptiveName );

                    generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone, 
                                                            EVeiTitleClipHorizontalAlignmentLeft, 
                                                            EVeiTitleClipVerticalAlignmentBottom );

                    /* Ask for text. */
                    HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
                    TPtr txtptr( text->Des());
                    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
                    CleanupStack::PushL( textQuery );

                    textQuery->SetMaxLength( KTitleScreenMaxTextLength );
                    //textQuery->SetPredictiveTextInputPermitted(ETrue);
                    CleanupStack::Pop( textQuery );

                    if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
                        {
                        CleanupStack::PopAndDestroy( text );
                        CleanupStack::PopAndDestroy( generator );
                        CleanupStack::PopAndDestroy( this ); // restore appui orientation
                        break;
                        }

                    generator->SetTextL( *text );
                    CleanupStack::PopAndDestroy( text );

                    /* Insert generator into the movie. */
                    TInt err = 0;
                    index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
                    TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index ));
                    CleanupStack::Pop( generator );
                    User::LeaveIfError( err );

                    CleanupStack::PopAndDestroy( this ); // restore appui orientation
                    }
                break;
                }
            /*
             * Insert SUBTITLE (fading) text *	
             */
        case EVeiCmdEditVideoViewInsertTextSubTitleFading:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextSubTitleFading" );

                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    StoreOrientation();
                    CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
                    AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );

                    TSize res = TSize( iMovie->Resolution());
                    CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res, 
                                                                                       EVeiTitleClipTransitionNone, 
                                                                                       EVeiTitleClipHorizontalAlignmentCenter, 
                                                                                       EVeiTitleClipVerticalAlignmentCenter );

                    HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_FADING_NAME, iEikonEnv );
                    generator->SetDescriptiveNameL( *descriptiveName );
                    CleanupStack::PopAndDestroy( descriptiveName );

                    generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade, 
                                                            EVeiTitleClipHorizontalAlignmentLeft, 
                                                            EVeiTitleClipVerticalAlignmentBottom );

                    /* Ask for text. */
                    HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
                    TPtr txtptr( text->Des());
                    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
                    CleanupStack::PushL( textQuery );

                    textQuery->SetMaxLength( KTitleScreenMaxTextLength );
                    //textQuery->SetPredictiveTextInputPermitted(ETrue);
                    CleanupStack::Pop( textQuery );

                    if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
                        {
                        CleanupStack::PopAndDestroy( text );
                        CleanupStack::PopAndDestroy( generator );
                        CleanupStack::PopAndDestroy( this ); // restore appui orientation
                        break;
                        }

                    generator->SetTextL( *text );
                    CleanupStack::PopAndDestroy( text );

                    /* Insert generator into the movie. */
                    TInt err = 0;
                    index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
                    TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index ));
                    CleanupStack::Pop( generator );
                    User::LeaveIfError( err );

                    CleanupStack::PopAndDestroy( this ); // restore appui orientation
                    }
                break;
                }
            /*
             * Insert CREDIT text *	
             */
        case EVeiCmdEditVideoViewInsertTextCredits:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextCredits" );

                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    StoreOrientation();
                    CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
                    AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );

                    TSize res = TSize( iMovie->Resolution());
                    CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res, 
                                                                                       EVeiTitleClipTransitionNone, 
                                                                                       EVeiTitleClipHorizontalAlignmentCenter, 
                                                                                       EVeiTitleClipVerticalAlignmentCenter );

                    HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_CREDITS_NAME, iEikonEnv );
                    generator->SetDescriptiveNameL( *descriptiveName );
                    CleanupStack::PopAndDestroy( descriptiveName );

                    generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionScrollBottomToTop, 
                                                            EVeiTitleClipHorizontalAlignmentCenter, 
                                                            EVeiTitleClipVerticalAlignmentCenter );

                    /* Ask for text. */
                    HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
                    TPtr txtptr( text->Des());
                    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
                    CleanupStack::PushL( textQuery );

                    textQuery->SetMaxLength( KTitleScreenMaxTextLength );
                    //textQuery->SetPredictiveTextInputPermitted(ETrue);
                    CleanupStack::Pop( textQuery );

                    if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
                        {
                        CleanupStack::PopAndDestroy( text );
                        CleanupStack::PopAndDestroy( generator );
                        CleanupStack::PopAndDestroy( this );
                        break;
                        }
                    generator->SetTextL( *text );
                    CleanupStack::PopAndDestroy( text );

                    /* Insert generator into the movie. */
                    TInt err = 0;
                    index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
                    TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index ));
                    CleanupStack::Pop( generator );
                    User::LeaveIfError( err );

                    CleanupStack::PopAndDestroy( this ); // restore appui orientation
                    }
                break;
                }

            /*
             * Edit Text *
             */
        case EVeiCmdEditVideoViewEditTextMove:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextMove" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
                    Cba()->DrawDeferred();

                    index = iContainer->CurrentIndex();

                    if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
                        {
                        iOriginalVideoClipIndex = index;
                        }
                    else
                        {
                        User::Panic( _L( "VideoEditor" ), 34 );
                        }
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMove );
                    UpdateEditNaviLabel();
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditTextChangeDuration:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextChangeDuration" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
                    Cba()->DrawDeferred();
                    index = iContainer->CurrentIndex();

                    iOriginalVideoStartPoint = iMovie->VideoClipStartTime( index );
                    iOriginalVideoCutInTime = iMovie->VideoClipCutInTime( index );
                    iOriginalVideoCutOutTime = iMovie->VideoClipCutOutTime( index );

                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeDuration );
                    UpdateEditNaviLabel();
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditTextChangeText:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextChangeText" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    StoreOrientation();
                    CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this ));
                    AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );

                    Cba()->DrawDeferred();
                    CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());

                    CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());
                    HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength );
                    *text = (( CVeiTitleClipGenerator* )info->Generator())->Text();

                    TPtr txtptr( text->Des());
                    CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr );
                    CleanupStack::PushL( textQuery );

                    textQuery->SetMaxLength( KTitleScreenMaxTextLength );
                    //textQuery->SetPredictiveTextInputPermitted(ETrue);
                    CleanupStack::Pop( textQuery );

                    if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY ))
                        {
                        CleanupStack::PopAndDestroy( text );
                        CleanupStack::PopAndDestroy( this ); // restore appui orientation
                        break;
                        }
                    generator->SetTextL( *text );
                    CleanupStack::PopAndDestroy( text );
                    UpdateEditNaviLabel();

                    CleanupStack::PopAndDestroy( this ); // restore appui orientation
                    }
                break;
                }

        case EVeiCmdEditVideoViewEditTextSetTextColor:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextSetTextColor" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
                    CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());

                    TRgb color = generator->TextColor();
                    if ( !iPopup->ShowColorSelectorL( color ))
                        {
                        break;
                        }
                    generator->SetTextColorL( color );
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditTextSetBackGround:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextSetBackGround" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
                    CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());

                    // ask for color or image
                    TBool imageSelected;
                    TInt err = iPopup->ShowTitleScreenBackgroundSelectionPopupL( imageSelected );
                    if ( err != KErrNone )
                        {
                        break;
                        }

                    if ( imageSelected )
                        {
                        CDesCArrayFlat* selectedFiles = new( ELeave )CDesCArrayFlat( 1 );
                        CleanupStack::PushL( selectedFiles );

                        CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC();

                        if ( MGFetch::RunL( *selectedFiles, EImageFile, EFalse, mgFetchVerifier ) == EFalse )
                            {
                            /* User cancelled the dialog. */
                            CleanupStack::PopAndDestroy( mgFetchVerifier );
                            CleanupStack::PopAndDestroy( selectedFiles );
                            break;
                            }

                        CleanupStack::PopAndDestroy( mgFetchVerifier );

                        if ( !iWaitDialog )
                            {
                            iWaitDialog = new( ELeave )CAknWaitDialog( REINTERPRET_CAST( CEikDialog** , &iWaitDialog ), ETrue );
                            iWaitDialog->ExecuteLD( R_VEI_WAIT_DIALOG_INSERTING_IMAGE );
                            }


                        TRAP( err, generator->SetBackgroundImageL(( *selectedFiles )[0], * this ));

                        if ( err )
                            {
                            if ( iWaitDialog )
                                {
                                CancelWaitDialog();
                                }
                            ShowErrorNote( R_VEI_ERRORNOTE_IMAGE_INSERTING_FAILED );
                            }

                        CleanupStack::PopAndDestroy( selectedFiles );
                        }
                    else
                        {
                        TRgb color = generator->BackgroundColor();
                        if ( !iPopup->ShowColorSelectorL( color ))
                            {
                            break;
                            }
                        generator->SetBackgroundColorL( color );
                        }
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditTextStyle:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyle" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    /* Ask for style. */
                    iPopup->ShowTitleScreenStyleSelectionPopupL();
                    }
                break;
                }
            /*
             * Edit text, AddColorEffect *	
             */
        case EVeiCmdEditVideoViewEditTextAddColorEffect:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextAddColorEffect" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    iPopup->ShowEffectSelectionPopupListL();
                    }
                break;
                }
            /*
             * Edit text style *	
             */
        case EVeiCmdEditVideoViewEditTextStyleTitle:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleTitle" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());

                    CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());

                    HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_NAME, iEikonEnv );
                    generator->SetDescriptiveNameL( *descriptiveName );
                    CleanupStack::PopAndDestroy( descriptiveName );

                    generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone, 
                                                            EVeiTitleClipHorizontalAlignmentCenter, 
                                                            EVeiTitleClipVerticalAlignmentCenter );
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditTextStyleTitleFading:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleTitleFading" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());

                    CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());

                    HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_FADING_NAME, iEikonEnv );
                    generator->SetDescriptiveNameL( *descriptiveName );
                    CleanupStack::PopAndDestroy( descriptiveName );
                    generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade, 
                                                            EVeiTitleClipHorizontalAlignmentCenter, 
                                                            EVeiTitleClipVerticalAlignmentCenter );
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditTextStyleSubTitle:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleSubTitle" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());

                    CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());

                    HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_NAME, iEikonEnv );
                    generator->SetDescriptiveNameL( *descriptiveName );
                    CleanupStack::PopAndDestroy( descriptiveName );
                    generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone, 
                                                            EVeiTitleClipHorizontalAlignmentLeft, 
                                                            EVeiTitleClipVerticalAlignmentBottom );

                    }
                break;
                }
        case EVeiCmdEditVideoViewEditTextStyleSubTitleFading:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleSubTitleFading" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());

                    CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());

                    HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_FADING_NAME, iEikonEnv );
                    generator->SetDescriptiveNameL( *descriptiveName );
                    CleanupStack::PopAndDestroy( descriptiveName );
                    generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade, 
                                                            EVeiTitleClipHorizontalAlignmentLeft, 
                                                            EVeiTitleClipVerticalAlignmentBottom );
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditTextStyleCredit:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleCredit" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());

                    CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator());

                    HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_CREDITS_NAME, iEikonEnv );
                    generator->SetDescriptiveNameL( *descriptiveName );
                    CleanupStack::PopAndDestroy( descriptiveName );
                    generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionScrollBottomToTop, 
                                                            EVeiTitleClipHorizontalAlignmentCenter, 
                                                            EVeiTitleClipVerticalAlignmentCenter );
                    }
                break;
                }
            /*
             * Edit text, Duplicate *	
             */
        case EVeiCmdEditVideoViewEditTextDuplicate:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextDuplicate" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    CVedVideoClipInfo* previousInfo = iMovie->VideoClipInfo( iContainer->CurrentIndex());
                    CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , previousInfo->Generator());

                    iWaitMode = EDuplicating;

                    CVeiTitleClipGenerator* generator2 = CVeiTitleClipGenerator::NewLC( iMovie->Resolution(), 
                                                                                        generator->Transition(), 
                                                                                        generator->HorizontalAlignment(), 
                                                                                        generator->VerticalAlignment());

                    generator2->SetDescriptiveNameL( generator->DescriptiveName());
                    generator2->SetTransitionAndAlignmentsL( generator->Transition(), 
                                                             generator->HorizontalAlignment(), 
                                                             generator->VerticalAlignment() );
                    generator2->SetTextL( generator->Text());
                    generator2->SetTextColorL( generator->TextColor());

                    generator2->SetBackgroundColorL( generator->BackgroundColor());
                    if ( generator->BackgroundImage())
                        {
                        generator2->SetBackgroundImageL( generator->BackgroundImage());
                        }

                    generator2->SetDuration( generator->Duration());

                    TInt err = 0;
                    index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
                    TRAP( err, iMovie->InsertVideoClipL( *generator2, ETrue, index ));

                    CleanupStack::Pop( generator2 );
                    User::LeaveIfError( err );
                    }
                break;
                }
            /**
             * Insert Image
             */
        case EVeiCmdEditVideoViewInsertImage:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertImage" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    TTimeIntervalMicroSeconds duration( 5000000 );

                    CDesCArrayFlat* selectedFiles = new( ELeave )CDesCArrayFlat( 1 );
                    CleanupStack::PushL( selectedFiles );

                    CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC();

                    if ( MGFetch::RunL( *selectedFiles, EImageFile, EFalse, mgFetchVerifier ) == EFalse )
                        {
                        /* User cancelled the dialog. */
                        CleanupStack::PopAndDestroy( mgFetchVerifier );
                        CleanupStack::PopAndDestroy( selectedFiles );
                        break;
                        }

                    CleanupStack::PopAndDestroy( mgFetchVerifier );

                    if ( !iWaitDialog )
                        {
                        iWaitDialog = new( ELeave )CAknWaitDialog( REINTERPRET_CAST( CEikDialog** , &iWaitDialog ), ETrue );
                        iWaitDialog->ExecuteLD( R_VEI_WAIT_DIALOG_INSERTING_IMAGE );
                        }

                    RFs& fs = iEikonEnv->FsSession();

                    TRAPD( err, iGenerator = CVeiImageClipGenerator::NewL(( *selectedFiles )[0], 
                                                                            TSize( KMaxVideoFrameResolutionX, KMaxVideoFrameResolutionY ), 
                                                                            duration, 
                                                                            KRgbBlack, 
                                                                            KVideoClipGenetatorDisplayMode, 
                                                                            fs, 
                                                                            *this ));
                    if ( err )
                        {
                        if ( iWaitDialog )
                            {
                            CancelWaitDialog();
                            }
                        ShowErrorNote( R_VEI_ERRORNOTE_IMAGE_INSERTING_FAILED );
                        }

                    CleanupStack::PopAndDestroy( selectedFiles );
                    }
                break;
                }

            /**
             * Edit Image * 
             */
        case EVeiCmdEditVideoViewEditImageMove:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageMove" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
                    Cba()->DrawDeferred();

                    index = iContainer->CurrentIndex();

                    if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
                        {
                        iOriginalVideoClipIndex = index;
                        }
                    else
                        {
                        User::Panic( _L( "VideoEditor" ), 34 );
                        }
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMove );
                    UpdateEditNaviLabel();
                    }
                break;
                }

        case EVeiCmdEditVideoViewEditImageChangeDuration:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageChangeDuration" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
                    Cba()->DrawDeferred();
                    index = iContainer->CurrentIndex();

                    iOriginalVideoStartPoint = iMovie->VideoClipStartTime( index );
                    iOriginalVideoCutInTime = iMovie->VideoClipCutInTime( index );
                    iOriginalVideoCutOutTime = iMovie->VideoClipCutOutTime( index );

                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeDuration );
                    UpdateEditNaviLabel();
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditImageBackGround:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageBackGround" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex());
                    CVeiImageClipGenerator* generator = STATIC_CAST( CVeiImageClipGenerator* , info->Generator());

                    // ask for color			
                    TRgb color = generator->BackgroundColor();
                    if ( !iPopup->ShowColorSelectorL( color ))
                        {
                        break;
                        }

                    generator->SetBackgroundColor( color );
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditImageAddColorEffect:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageAddColorEffect" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    iPopup->ShowEffectSelectionPopupListL();
                    }
                break;
                }
            // * DUPLICATE Image *
        case EVeiCmdEditVideoViewEditImageDuplicate:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageDuplicate" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    CVedVideoClipInfo* previousInfo = iMovie->VideoClipInfo( iContainer->CurrentIndex());
                    CVeiImageClipGenerator* generator = STATIC_CAST( CVeiImageClipGenerator* , previousInfo->Generator());

                    RFs& fs = iEikonEnv->FsSession();

                    iWaitMode = EDuplicating;

                    iGenerator = CVeiImageClipGenerator::NewL( generator->ImageFilename(), 
                                                               TSize( KMaxVideoFrameResolutionX, KMaxVideoFrameResolutionY ), 
                                                               previousInfo->Duration(), 
                                                               generator->BackgroundColor(), 
                                                               KVideoClipGenetatorDisplayMode, 
                                                               fs, 
                                                               *this );
                    }
                break;
                }

            /**
             * Insert -> Sound clip
             */
        case EVeiCmdEditVideoViewInsertAudio:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertAudio" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    if ( !iMediaQueue->ShowAudioClipDialogL())
                        {
                        break;
                        }
                    }
                HandleScreenDeviceChangedL();
                break;
                }
            /**
             * Insert -> New sound clip
             */
        case EVeiCmdEditVideoViewInsertNewAudio:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertNewAudio" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    InsertNewAudio();
                    }
                break;
                }

        case EVeiCmdEditVideoViewEditAudioSetDuration:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditAudioSetDuration" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
                    Cba()->DrawDeferred();
                    index = iContainer->CurrentIndex();

                    iOriginalAudioStartPoint = iMovie->AudioClipStartTime( index );
                    iOriginalAudioDuration = iMovie->AudioClipEditedDuration( index );
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeDuration );
                    UpdateEditNaviLabel();
                    }
                break;
                }
        case EVeiCmdEditVideoViewSettings:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewSettings" );
                AppUi()->ActivateLocalViewL( TUid::Uid( EVeiSettingsView ));
                break;
                }
        case EVeiCmdEditVideoViewRecord:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewRecord" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    /* Set the mode, CBAs and Navi label. */
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecording );

                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
                    Cba()->DrawDeferred();
                    UpdateEditNaviLabel();

                    iRecordedAudioMaxDuration = TTimeIntervalMicroSeconds(  - 1 );
                    for ( TInt i = 0; i < iMovie->AudioClipCount(); i++ )
                        {

                        if ( iMovie->AudioClipStartTime( i ) > iContainer->RecordedAudioStartTime())
                            {
                            TInt64 startTimeInt = iContainer->RecordedAudioStartTime().Int64();
                            TInt64 nextStartTimeInt = iMovie->AudioClipStartTime( i ).Int64();
                            iRecordedAudioMaxDuration = TTimeIntervalMicroSeconds( nextStartTimeInt - startTimeInt );
                            break;
                            }
                        }

                    iRecorder->RecordL();
                    const TUint delay = 1000 * 1000 / 10;

                    iAudioRecordPeriodic->Start( delay, delay, TCallBack( CVeiEditVideoView::UpdateAudioRecording, this ));

                    iContainer->SetRecordedAudioDuration( TTimeIntervalMicroSeconds( 0 ));
                    }
                break;
                }
        case EVeiCmdEditVideoViewRecordCancel:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewRecordCancel" );
                // cancel recording
                iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
                iContainer->SetRecordedAudioStartTime( TTimeIntervalMicroSeconds( 0 ));
                iContainer->SetCursorLocation( VideoEditor::ECursorOnAudio );
                Cba()->DrawDeferred();

                UpdateEditNaviLabel();
                break;
                }
            /*
             *   Stop previewing
             */
        case EVeiCmdPlayViewStop:
        case EVeiCmdCutVideoViewStop:
        case EVeiCmdEditVideoViewRecordStop:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewStop||EVeiCmdCutVideoViewStop||EVeiCmdEditVideoViewRecordStop" );
                if ( EditorState() == EQuickPreview )
                    {
                    iContainer->StopVideo( EFalse );
                    iContainer->SetFinishedStatus( ETrue );
                    StopNaviPaneUpdateL();
                    LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewStop||EVeiCmdCutVideoViewStop||EVeiCmdEditVideoViewRecordStop, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" );
                    Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK );
                    Cba()->DrawDeferred();
                    break;
                    }

                // stop recording
                iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
                Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
                Cba()->DrawDeferred();
                UpdateEditNaviLabel();

                iRecorder->Stop();
                iAudioRecordPeriodic->Cancel();

                if ( iAudioClipInfo )
                    {
                    delete iAudioClipInfo;
                    iAudioClipInfo = NULL;
                    }

                iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue );

                iProgressNote->SetCallback( this );
                iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE );
                HBufC* stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_INSERTING_AUDIO, iEikonEnv );
                CleanupStack::PushL( stringholder );

                iProgressNote->SetTextL( *stringholder );
                CleanupStack::PopAndDestroy( this ); // stringholder

                iProgressNote->GetProgressInfoL()->SetFinalValue( 100 );
                iWaitMode = EOpeningAudioInfo;

                iAudioClipInfo = CVedAudioClipInfo::NewL( *iTempRecordedAudio, *this );
                break;
                }
        case EVeiCmdPlayViewPause:
        case EVeiCmdEditVideoViewRecordPause:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewPause||EVeiCmdEditVideoViewRecordPause" );
                if ( EditorState() == EQuickPreview )
                    {
                    iContainer->PauseVideoL();
                    StopNaviPaneUpdateL();

                    LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewPause||EVeiCmdEditVideoViewRecordPause, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" );
                    Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK );
                    Cba()->DrawDeferred();
                    }
                else
                    {
                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
                    Cba()->DrawDeferred();

                    // Pause recording
                    // Cba is set to CONTINUE_STOP in DoUpdateAudioRecording()
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecordingPaused );
                    iRecorder->Stop();
                    UpdateEditNaviLabel();
                    }
                break;
                }
            /*
             *	Preview continue:
             */
        case EVeiCmdCutVideoViewPlay:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdCutVideoViewPlay" );

                if ( !iUpdateTemp && !iTempFile && 1 == iMovie->VideoClipCount() )
                    {
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview );
                    iContainer->PlayVideo( iMovie->VideoClipInfo( 0 )->DescriptiveName(), iFullScreenSelected );
                    }
                else
                    {
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview );
                    iContainer->PlayVideo( *iTempFile, iFullScreenSelected );
                    }

                // @: think should this be put under condition play was started
                // (actually play starts when "loadingComplete" event comes to NotifyVideoDisplayEvent
                //StartNaviPaneUpdateL();            
                break;
                }

        case EVeiCmdCutVideoTakeSnapshot:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdCutVideoTakeSnapshot" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    iContainer->TakeSnapshotL();
                    }
                break;
                }

        case EVeiCmdCutVideoViewContinue:
        case EVeiCmdEditVideoViewContinue:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdCutVideoViewContinue||EVeiCmdEditVideoViewContinue" );
                if (( iRecorder->State() != CMdaAudioClipUtility::ERecording ) && 
                    ( iRecorder->State() != CMdaAudioClipUtility::ENotReady ) )
                    {
                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
                    Cba()->DrawDeferred();

                    // Continue recording
                    iRecorder->RecordL();
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecording );

                    UpdateEditNaviLabel();
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditAudioMove:
        case EVeiCmdEditVideoViewEditVideoMove:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditAudioMove||EVeiCmdEditVideoViewEditVideoMove" );
                Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
                Cba()->DrawDeferred();

                index = iContainer->CurrentIndex();

                if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
                    {
                    iOriginalAudioStartPoint = iMovie->AudioClipStartTime( index );
                    iOriginalAudioDuration = iMovie->AudioClipEditedDuration( index );
                    }
                else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
                    {
                    iOriginalVideoClipIndex = index;
                    }
                else
                    {
                    User::Panic( _L( "VideoEditor" ), 34 );
                    }
                iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMove );
                UpdateEditNaviLabel();
                break;
                }
            /**
             * Edit video clip -> Add colour effect
             */
        case EVeiCmdEditVideoViewEditVideoColorEffect:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoColorEffect" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    iPopup->ShowEffectSelectionPopupListL();
                    }
                break;
                }
            /**
             * Use slow motion
             */
        case EVeiCmdEditVideoViewEditVideoSlowMotion:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoSlowMotion" );
                if ( IsEnoughFreeSpaceToSaveL())
                    {
                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
                    Cba()->DrawDeferred();
                    iOriginalVideoSpeed = iMovie->VideoClipSpeed( iContainer->CurrentIndex());
                    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeSlowMotion );
                    iContainer->SetSlowMotionStartValueL( iOriginalVideoSpeed );
                    iContainer->ArrowsControl();
                    }
                break;
                }
        case EVeiCmdEditVideoViewEditVideoMute:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoMute" );
                SetNewTempFileNeeded( ETrue );
                iMovie->VideoClipSetMuted( iContainer->CurrentIndex(), ETrue );
                break;
                }
        case EVeiCmdEditVideoViewEditVideoUnmute:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoUnmute" );
                SetNewTempFileNeeded( ETrue );
                iMovie->VideoClipSetMuted( iContainer->CurrentIndex(), EFalse );
                break;
                }
        case EVeiCmdEditVideoViewEditAudioRemove:
        case EVeiCmdEditVideoViewEditVideoRemove:
        case EVeiCmdEditVideoViewEditTextRemove:
        case EVeiCmdEditVideoViewEditImageRemove:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditAudioRemove||EVeiCmdEditVideoViewEditVideoRemove||EVeiCmdEditVideoViewEditTextRemove||EVeiCmdEditVideoViewEditImageRemove" );
                RemoveCurrentClipL();
                break;
                }
            /**
             * Back
             */
        case EAknSoftkeyBack:
                {
                LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleCommandL: EAknSoftkeyBack" );
                LOGFMT( KVideoEditorLogFile, "\tiFullScreenSelected: %d", iFullScreenSelected );

                if ( EditorState() != EEdit || iFullScreenSelected )
                    {
                    iFullScreenSelected = EFalse;
                    iContainer->StopVideo( ETrue );
                    StopNaviPaneUpdateL();
                    UpdateEditNaviLabel();
                    break;
                    }
                else if ( !iMovieSavedFlag && ( iMovie->VideoClipCount() > 0 || iMovie->AudioClipCount() > 0 ))
                    {
                    HBufC* saveConfirmationString; // String holding the text shown in dialog.
                    CAknQueryDialog* dlg; // Save confirmation dialog.
                    TInt saveEditedVideo; // Query result.

                    saveConfirmationString = StringLoader::LoadLC( R_VEI_CONFIRM_EXIT_SAVE, iEikonEnv );
                    dlg = new( ELeave )CAknQueryDialog( *saveConfirmationString, CAknQueryDialog::ENoTone );
                    saveEditedVideo = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY );

                    if ( !saveEditedVideo )
                    // Do not save.
                        {
                        // Activate videos view.                    
                        AppUi()->HandleCommandL( EAknCmdExit );

                        iMovie->Reset();

                        iMovieSavedFlag = ETrue; // Movie is saved.
                        iMovieFirstAddFlag = ETrue; // True for the next edit process.

                        AppUi()->HandleCommandL( aCommand );
                        }
                    else
                        {
                        if ( SaveL( EProcessingMovieSaveThenQuit ))
                        // Quit after saving?
                            {
                            //iMovieSavedFlag = ETrue;		// Movie is saved.
                            iMovieFirstAddFlag = ETrue; // True for the next edit process.
                            iWaitMode = EProcessingMovieSaveThenQuit;
                            }
                        }

                    CleanupStack::PopAndDestroy( saveConfirmationString ); 
                    }
                // No changes to clip(s) or no clip(s) in time line.
                else
                    {
                    // Remove all clips from edit view (for future use).
                    iMovie->Reset();

                    iMovieSavedFlag = ETrue; // Movie is saved.
                    iMovieFirstAddFlag = ETrue; // True for the next edit process.
                    AppUi()->HandleCommandL( aCommand );
                    }

                break;
                }
            //
            // Options->Help
            //
        case EVeiCmdEditVideoViewHelp:
                {
                LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewHelp" );
                // CS Help launching is handled in Video Editor's AppUi.
                AppUi()->HandleCommandL( EVeiCmdEditVideoViewHelp );
                break;
                }
            /**
             * Exit
             */
        case EEikCmdExit:
                {
                LOG( KVideoEditorLogFile, "\tEEikCmdExit" );
                // Edited movie is not saved yet and there are video or audio clip(s) at the time line.
                if ( !iMovieSavedFlag && ( iMovie->VideoClipCount() > 0 || iMovie->AudioClipCount() > 0 ))
                    {
                    HBufC* stringholder; // String holding the text shown in dialog.
                    
                    CAknQueryDialog* dlg; // Save confirmation dialog.
                    TInt queryok; // Query result.

                    stringholder = StringLoader::LoadLC( R_VEI_CONFIRM_EXIT_SAVE, iEikonEnv );

                    dlg = new( ELeave )CAknQueryDialog( *stringholder, CAknQueryDialog::ENoTone );
                    queryok = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY );

                    if ( !queryok )
                        {
                        iMovie->Reset();
                        AppUi()->HandleCommandL( aCommand );
                        }
                    else
                        {
                        SaveL( EProcessingMovieSaveThenQuit );
                        iWaitMode = EProcessingMovieSaveThenQuit;
                        }

                    CleanupStack::PopAndDestroy( stringholder );
                    }
                else
                // No changes to clip(s) or no clip(s) in time line.
                    {
                    iMovie->Reset(); // Remove all clips from edit view.
                    AppUi()->HandleCommandL( aCommand ); // Let appUi handle the exit.
                    }
                break;
                }
        default:
                {
                LOG( KVideoEditorLogFile, "\tdefault" );
                AppUi()->HandleCommandL( aCommand );
                break;
                }
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleCommandL: Out" );
    }

void CVeiEditVideoView::HandleResourceChange( TInt aType )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::HandleResourceChange() In, aType:%d", aType );

    if ( KAknsMessageSkinChange == aType )
        {
        // Handle skin change in the navi label controls - they do not receive 
        // it automatically since they are not in the control stack
        iPreviewLabel->DecoratedControl()->HandleResourceChange( aType );
        iEditLabel->DecoratedControl()->HandleResourceChange( aType );
        iVolumeNavi->DecoratedControl()->HandleResourceChange( aType );
        iMoveLabel->DecoratedControl()->HandleResourceChange( aType );
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleResourceChange() Out" );
    }

void CVeiEditVideoView::SetEditorState( TEditorState aState )
    {
    LOGFMT3( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState: in, aState:%d, iEditorState:%d, iFullScreenSelected:%d", aState, iEditorState, iFullScreenSelected );

    CAknTitlePane* titlePane;
    CEikStatusPane* statusPane;
    TResourceReader reader1;

    iEditorState = aState;

    switch ( aState )
        {
        case EPreview:
            /*
            if ( iFullScreenSelected )
            {
            // @: this need more elaborating
            // problem is: after large preview signal and battery pane are black in some phone models
            //statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); 
            //statusPane ->MakeVisible( EFalse );
            Cba()->MakeVisible( EFalse );
            Cba()->DrawDeferred();
            }
            else
            {
            iEditorState = EQuickPreview;
            statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); 

            titlePane = (CAknTitlePane*) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) );
            iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_PREVIEW_VIEW_TITLE_NAME );
            titlePane->SetFromResourceL( reader1 );
            CleanupStack::PopAndDestroy(); //reader1

            LOG(KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 1, setting R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK");
            Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK );
            Cba()->DrawDeferred();
            }
             */
            Cba()->MakeVisible( EFalse );
            Cba()->DrawDeferred();
            break;
        case EQuickPreview:
                {
                LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState: 2, iContainer->PreviewState():%d", iContainer->PreviewState());
                statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane();

                titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ));
                iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_PREVIEW_VIEW_TITLE_NAME );
                titlePane->SetFromResourceL( reader1 );
                CleanupStack::PopAndDestroy(); //reader1

                if (( iContainer->PreviewState() == CVeiEditVideoContainer::EStatePaused ) || 
                    ( iContainer->PreviewState() == CVeiEditVideoContainer::EStateStopped ))
                    {
                    LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 3, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" );
                    Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK );
                    }
                else if (( iContainer->PreviewState() == CVeiEditVideoContainer::EStateOpening ) || 
                         ( iContainer->PreviewState() == CVeiEditVideoContainer::EStateGettingFrame ) || 
                         ( iContainer->PreviewState() == CVeiEditVideoContainer::EStateBuffering ))
                    {
                    LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 4, setting R_AVKON_SOFTKEYS_EMPTY" );
                    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
                    }
                else
                    {
                    LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 5, setting R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK" );
                    Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK );
                    }
                Cba()->DrawDeferred();
                break;
                }
        case EEdit:
            iContainer->SetRect( AppUi()->ClientRect());
            statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane();
            // @: this needs more elaborating
            //statusPane ->MakeVisible( ETrue );

            titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ));
            iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_EDIT_VIDEO_VIEW_TITLE_NAME );
            titlePane->SetFromResourceL( reader1 );
            CleanupStack::PopAndDestroy(); //reader1

            Cba()->MakeVisible( ETrue );
            Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
            Cba()->DrawDeferred();
            break;

        case EMixAudio:
            iContainer->SetRect( AppUi()->ClientRect());
            statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane();

            titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ));
            iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_AUDIO_MIX_VIEW_TITLE_NAME );
            titlePane->SetFromResourceL( reader1 );
            CleanupStack::PopAndDestroy(); //reader1

            Cba()->MakeVisible( ETrue );
            Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_DONE );
            Cba()->DrawDeferred();
            iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMixingAudio );

            break;

        case EAdjustVolume:
            iContainer->SetRect( AppUi()->ClientRect());
            statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane();

            titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ));
            iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_ADJUST_VOLUME_VIEW_TITLE_NAME );
            titlePane->SetFromResourceL( reader1 );
            CleanupStack::PopAndDestroy(); //reader1

            Cba()->MakeVisible( ETrue );
            //Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_DONE);			
            Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL );
            Cba()->DrawDeferred();
            iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeAdjustVolume );

            break;


        default:
                {
                break;
                }
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState: Out" );
    }


void CVeiEditVideoView::SendMovieL()
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() -- SENDING" );

    TEntry fileinfo;

    RFs& fs = iEikonEnv->FsSession();
    // Rename movie from xxxx.$$$ to defaultfilename from settingsview.
    // looks better in attachment list..

    // Get default movie name from settings view

    TPtr temppeet = iTempFile->Des();

    TParse parse;
    parse.Set( iMovieSaveSettings.DefaultVideoName(), &temppeet, NULL );

    TFileName orgPathAndName = parse.FullName();

    TVedVideoFormat movieQuality = iMovie->Format();
    if ( movieQuality == EVedVideoFormatMP4 )
        {
        orgPathAndName.Replace( orgPathAndName.Length() - 4, 4, KExtMp4 );
        }
    else
        {
        orgPathAndName.Replace( orgPathAndName.Length() - 4, 4, KExt3gp );
        }

    fs.Replace( *iTempFile, orgPathAndName );
    iTempFile->Des() = orgPathAndName;

    fs.Entry( *iTempFile, fileinfo );

    DEBUGLOG_ARG( TInt tempFileSize = fileinfo.iSize / 1024 );
    LOGFMT3( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() 1, iWaitMode:%d, tempFileSize:%d, ValidateServiceL:%d", iWaitMode, tempFileSize, iSendAppUi.ValidateServiceL( iGivenSendCommand, TSendingCapabilities( 0, tempFileSize, TSendingCapabilities::ESupportsAttachments )));

    if ( EProcessingMovieSend == iWaitMode 
                /*&& (iSendAppUi.ValidateServiceL(
                                iGivenSendCommand, 
                                TSendingCapabilities( 0, 
                                                      tempFileSize, 
                                                      TSendingCapabilities::ESupportsAttachments ) ) ) */ )
        {
        RFs shareFServer;
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL: shareFServer connect." );

        User::LeaveIfError( shareFServer.Connect());
        shareFServer.ShareProtected();
        CleanupClosePushL < RFs > ( shareFServer );

        RFile openFileHandle;

        TInt err = openFileHandle.Open( shareFServer, * iTempFile, EFileRead | EFileShareReadersOnly );
        if ( KErrNone != err )
            {
            LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL 2: Could not open file %S with EFileShareReadersOnly. Trying EFileShareAny", iTempFile );
            User::LeaveIfError( openFileHandle.Open( shareFServer, * iTempFile, EFileRead | EFileShareAny ));
            }

        CMessageData* messageData = CMessageData::NewLC();
        messageData->AppendAttachmentHandleL( openFileHandle );

        LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() 3" );

        iSendAppUi.CreateAndSendMessageL( iGivenSendCommand, messageData, KNullUid, EFalse );
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() 4" );
        CleanupStack::PopAndDestroy( messageData );

        CleanupStack::PopAndDestroy( &shareFServer ); // shareFServer.Close();
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL 5: shareFServer closed." );
        }

    DoUpdateEditNaviLabelL();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() Out" );
    }


void CVeiEditVideoView::StartTempFileProcessingL()
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL: In" );

    RFs& fs = iEikonEnv->FsSession();

    TBool fileExists( ETrue );
    if ( iTempFile )
        {
        fileExists = BaflUtils::FileExists( fs, * iTempFile );
        }

    /* to save from unnecessary processing before preview
    prerequisites:
    -user selected preview
    -no movie modifying actions taken by user before preview (iUpdateTemp is EFalse)	 
     */
    if ( EProcessingMoviePreview == iWaitMode && !iUpdateTemp && !iTempFile && 1 == iMovie->VideoClipCount())
        {
        if ( iFullScreenSelected )
            {
            iContainer->SetBlackScreen( ETrue );
            iContainer->SetRect( AppUi()->ApplicationRect());
            }

        iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview );
        iContainer->PlayVideoFileL( iMovie->VideoClipInfo( 0 )->DescriptiveName(), iFullScreenSelected );
        }
    else if ( EProcessingMovieTrimMms == iWaitMode && !iUpdateTemp && !iTempFile && 1 == iMovie->VideoClipCount() && !FitsToMmsL())
        {
        /*
        Read documentation of FitsToMmsL() in the header file
         */
        TBuf8 < KMaxFileName > conv8Filename;
        CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, iMovie->VideoClipInfo( 0 )->DescriptiveName());
        iMovie->UnregisterMovieObserver( iContainer );
        iMovie->UnregisterMovieObserver( this );
        AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid( 0 ), conv8Filename );
        }
    else if ( iUpdateTemp || !fileExists || ( !iTempFile ))
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 1, -- NEW TEMP" );

        Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
        Cba()->DrawDeferred();
        if ( iTempFile && fileExists )
            {
            User::LeaveIfError( fs.Delete( *iTempFile ));
            delete iTempFile;
            iTempFile = NULL;
            }

        if ( !IsEnoughFreeSpaceToSaveL()) // modifies iMemoryInUse
            {
            return ;
            }

        iTempFile = HBufC::NewL( KMaxFileName );
        iTempMaker->GenerateTempFileName( *iTempFile, iMemoryInUse, iMovie->Format());
        LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 2, iTempFile:%S", iTempFile );

        TVeiSettings movieSaveSettings;

        STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( movieSaveSettings );

        TInt settingsSaveQuality = movieSaveSettings.SaveQuality();
        CVedMovie::TVedMovieQuality saveQuality;

        switch ( settingsSaveQuality )
            {
            case TVeiSettings::EMmsCompatible: 
                {
                saveQuality = CVedMovie::EQualityMMSInteroperability;
                break;                    
                }
            case TVeiSettings::EMedium: 
                {
                saveQuality = CVedMovie::EQualityResolutionMedium;
                break;                    
                }
            case TVeiSettings::EBest: 
                {
                saveQuality = CVedMovie::EQualityResolutionHigh;
                break;                    
                }
            case TVeiSettings::EAuto: default:
                {
                saveQuality = CVedMovie::EQualityAutomatic;
                break;                    
                }
            }

        iMovie->SetQuality( saveQuality );
        iBackupSaveQuality = saveQuality;

        if ( EProcessingMovieTrimMms == iWaitMode )
            {
            if ( saveQuality != CVedMovie::EQualityMMSInteroperability )
                {
                iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
                SetNewTempFileNeeded( ETrue );
                }
            else
                {
                SetNewTempFileNeeded( EFalse );
                }
            }

        TInt err;
        LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 3, calling iMovie->Process(%S)", iTempFile );
        TRAP( err, iMovie->ProcessL( *iTempFile, * this ));
        LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 4, err:%d", err );
        if ( err )
            {
            Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
            Cba()->DrawDeferred();
            ShowGlobalErrorNote( err );
            }
        }
    else
    /* use old temp file*/
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 5, -- OLD TEMP" );
        if ( EProcessingMovieSend == iWaitMode )
            {
            SendMovieL();
            }
        else if ( EProcessingMovieTrimMms == iWaitMode )
            {
            if ( iMovie->IsMovieMMSCompatible())
                {
                LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 6, MMS COMPATIBLE" );

                TEntry entry;
                User::LeaveIfError( fs.Entry( *iTempFile, entry ));
                TInt tempFileSize = entry.iSize / 1024;
                TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize();

                if ( tempFileSize < maxMmsSize )
                    {
                    LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 7, -- MMS SIZE OK" );
                    iWaitMode = EProcessingMovieSend;
                    SendMovieL();
                    }
                else
                    {
                    SetNewTempFileNeeded( EFalse );

                    LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 8, -- TRIM MMS" );

                    TBuf8 < KMaxFileName > conv8Filename;
                    CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, * iTempFile );
                    iMovie->UnregisterMovieObserver( iContainer );
                    iMovie->UnregisterMovieObserver( this );
                    AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid( 0 ), conv8Filename );
                    }
                }
            else
                {
                LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 9, -- NO MMS COMPATIBLE" );

                TInt err;
                if ( EProcessingMovieTrimMms == iWaitMode )
                    {
                    iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
                    }

                TRAP( err, iMovie->ProcessL( *iTempFile, * this ));

                if ( err )
                    {
                    ShowGlobalErrorNote( err );
                    }
                }
            }
        else if ( EProcessingMoviePreview == iWaitMode )
            {
            if ( iFullScreenSelected )
                {
                iContainer->SetBlackScreen( ETrue );
                iContainer->SetRect( AppUi()->ApplicationRect());
                }
            iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview );
            iContainer->PlayVideoFileL( *iTempFile, iFullScreenSelected );
            }
        else if (( EProcessingMovieSave == iWaitMode ) || ( EProcessingMovieSaveThenQuit == iWaitMode ))
            {
            CFileMan* fileman = CFileMan::NewL( fs );
            CleanupStack::PushL( fileman );

            if ( iTempFile->Left( 1 ) == iSaveToFileName->Left( 1 ))
                {
                fileman->Rename( *iTempFile, * iSaveToFileName );
                }
            else
                {
                fileman->Move( *iTempFile, * iSaveToFileName );
                }

            CleanupStack::PopAndDestroy( fileman );

            HBufC* stringholder = StringLoader::LoadL( R_VEI_NOTE_VIDEO_SAVED, iEikonEnv );
            CleanupStack::PushL( stringholder );
            iWaitMode = ENotWaiting;
            ShowInformationNoteL( *stringholder );
            iMovieSavedFlag = ETrue;
            CleanupStack::PopAndDestroy( stringholder);

            UpdateMediaGalleryL();
            }
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL: Out" );
    }

void CVeiEditVideoView::InsertNewAudio()
    {
    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
    Cba()->DrawDeferred();

    iContainer->SetRecordedAudio( ETrue );

    TInt64 startTimeInt = 0;
    TInt64 durationInt = 1000000;
    TInt currIndex( 0 );

    if ((( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) || 
         ( iContainer->CursorLocation() == VideoEditor::ECursorOnEmptyAudioTrack )) && 
         ( iMovie->AudioClipCount() > 0 ))
        {
        currIndex = iContainer->CurrentIndex() + 1;
        startTimeInt = iMovie->AudioClipEndTime( iContainer->CurrentIndex()).Int64();
        }
    else
        {
        currIndex = iMovie->AudioClipCount() - 1;
        if ( currIndex >= 0 )
            {
            startTimeInt = iMovie->AudioClipEndTime( currIndex ).Int64();
            }
        else
            {
            currIndex = 0;
            }
        }

    while ( currIndex < iMovie->AudioClipCount())
        {
        // safety margin: it is not possible to insert new audio if there is less than 1s between clips
        TInt64 adjustedClipStartTimeInt = iMovie->AudioClipStartTime( currIndex ).Int64() - 1000000;

        if ( startTimeInt > adjustedClipStartTimeInt )
            {
            startTimeInt = iMovie->AudioClipEndTime( currIndex ).Int64();
            currIndex++;
            }
        else
            {
            break;
            }
        }

    if ( currIndex < iMovie->AudioClipCount())
        {
        TInt64 endTimeInt = startTimeInt + durationInt;
        TInt64 nextStartTimeInt = iMovie->AudioClipStartTime( currIndex ).Int64();

        if ( endTimeInt > nextStartTimeInt )
            {
            durationInt = nextStartTimeInt - startTimeInt;
            }
        }

    iContainer->SetRecordedAudioStartTime( TTimeIntervalMicroSeconds( startTimeInt ));
    iContainer->SetRecordedAudioDuration( TTimeIntervalMicroSeconds( durationInt ));
    iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecordingSetStart );
    iContainer->SetCursorLocation( VideoEditor::ECursorOnAudio );

    UpdateEditNaviLabel();

    /* Create temp file. */
    if ( iTempRecordedAudio )
        {
        delete iTempRecordedAudio;
        iTempRecordedAudio = NULL;
        }

    iTempRecordedAudio = HBufC::NewL( KMaxFileName );
    iTempMaker->GenerateTempFileName( *iTempRecordedAudio, iMemoryInUse, iMovie->Format(), ETrue );

    /* Open the file, this is asynchronous so we'll come to our callback. */
    iRecorder->OpenFileL( *iTempRecordedAudio );
    }

TBool CVeiEditVideoView::IsEnoughFreeSpaceToSaveL( TInt aBytesToAdd )const
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: in" );
    RFs& fs = iEikonEnv->FsSession();

    TBool spaceBelowCriticalLevel( EFalse );

    TInt sizeEstimate = iMovie->GetSizeEstimateL();
    sizeEstimate += aBytesToAdd;

    if ( iEditorState == EQuickPreview )
        {
        TInt snapShotSize = iContainer->SnapshotSize();
        if ( snapShotSize != 0 )
            {
            sizeEstimate = snapShotSize;
            }
        }

    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: 2, needed space: %d", sizeEstimate );

    if ( iMemoryInUse == CAknMemorySelectionDialog::EPhoneMemory )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: " );
        spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( &fs, sizeEstimate, EDriveC );
        }
    else
        {
        LOG( KVideoEditorLogFile, "\tMmc selected" );

        spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( &fs, sizeEstimate );
        }

    if ( spaceBelowCriticalLevel )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: 3, space is below critical level" );
        ShowErrorNote( R_VEI_MEMORY_RUNNING_OUT );
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL out" );

    return !spaceBelowCriticalLevel;
    }


TBool CVeiEditVideoView::IsEnoughFreeSpaceToSave2L( TInt aBytesToAdd )const
    {
    RFs& fs = iEikonEnv->FsSession();
    TBool spaceBelowCriticalLevel( EFalse );
    TInt sizeEstimate = iMovie->GetSizeEstimateL();
    sizeEstimate += aBytesToAdd;

    if ( iMemoryInUse == CAknMemorySelectionDialog::EPhoneMemory )
        {
        spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( &fs, sizeEstimate, EDriveC );
        }
    else
        {
        spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( &fs, sizeEstimate );
        }

    if ( !spaceBelowCriticalLevel )
        {
        return ETrue;
        }
    else
        {
        return EFalse;
        }
    }

TBool CVeiEditVideoView::FitsToMmsL()
    {
    /*
    Read documentation of FitsToMmsL() in the header file
     */
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::FitsToMmsL() in" );
    TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize();

    CVedMovie::TVedMovieQuality origQuality = iMovie->Quality();
    iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
    TInt videoTimeLineSize = iMovie->GetSizeEstimateL() / 1024;
    iMovie->SetQuality( origQuality );
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::FitsToMmsL() out" );
    videoTimeLineSize = videoTimeLineSize * 1.1;
    return videoTimeLineSize < maxMmsSize;
    }

void CVeiEditVideoView::BrowseStartTransition( TBool aUpOrDown )
    {
    TInt currentEffect;
    TInt currentIndex = iContainer->CurrentIndex();

    if ( currentIndex == 0 )
        {
        currentEffect = iMovie->StartTransitionEffect();
        if ( aUpOrDown )
            {
            if ( !( TVedStartTransitionEffect( currentEffect - 1 ) < EVedStartTransitionEffectNone ))
                {
                iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( currentEffect - 1 ));
                }
            else
                {
                iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( EVedStartTransitionEffectLast - 1 ));
                }
            }
        else
            {
            if ( !( TVedStartTransitionEffect( currentEffect + 1 ) >= EVedStartTransitionEffectLast ))
                {
                iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( currentEffect + 1 ));
                }
            else
                {
                iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( EVedStartTransitionEffectNone ));
                }
            }
        }
    else if ( currentIndex < iMovie->VideoClipCount())
        {
        currentEffect = iMovie->MiddleTransitionEffect( currentIndex - 1 );

        if ( aUpOrDown )
            {
            if ( !( TVedMiddleTransitionEffect( currentEffect - 1 ) < EVedMiddleTransitionEffectNone ))
                {
                iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( currentEffect - 1 ), currentIndex - 1 );
                }
            else
                {
                iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( EVedMiddleTransitionEffectLast - 1 ), currentIndex - 1 );
                }
            }
        else
            {
            if ( !( TVedMiddleTransitionEffect( currentEffect + 1 ) >= EVedMiddleTransitionEffectLast ))
                {
                iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( currentEffect + 1 ), currentIndex - 1 );
                }
            else
                {
                iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( EVedMiddleTransitionEffectNone ), currentIndex - 1 );
                }
            }
        }
    else
        {
        currentEffect = iMovie->EndTransitionEffect();

        if ( aUpOrDown )
            {
            if ( !( TVedEndTransitionEffect( currentEffect - 1 ) < EVedEndTransitionEffectNone ))
                {
                iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( currentEffect - 1 ));
                }
            else
                {
                iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( EVedEndTransitionEffectLast - 1 ));
                }
            }
        else
            {
            if ( !( TVedEndTransitionEffect( currentEffect + 1 ) >= EVedEndTransitionEffectLast ))
                {
                iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( currentEffect + 1 ));
                }
            else
                {
                iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( EVedEndTransitionEffectNone ));
                }
            }
        }

    }

void CVeiEditVideoView::ShowErrorNote( const TInt aResourceId, TInt /*aError*/ )const
    {
    CVeiErrorUI::ShowErrorNote( *iEikonEnv, aResourceId );
    }

void CVeiEditVideoView::ShowGlobalErrorNote( const TInt aError )const
    {
    iErrorUI->ShowGlobalErrorNote( aError );
    }

void CVeiEditVideoView::ShowInformationNoteL( const TDesC& aMessage )const
    {
    CAknInformationNote* note = new( ELeave )CAknInformationNote( ETrue );
    note->ExecuteLD( aMessage );
    }

void CVeiEditVideoView::ShowVolumeLabelL( TInt aVolume )
    {
    STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetVolumeIconVisibilityL( ETrue );

    if ( iVolumeHider && iVolumeHider->IsActive())
        {
        iVolumeHider->Cancel();
        }
    if ( aVolume == 0 )
        {
        STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetVolumeIconVisibilityL( EFalse );
        HideVolume();
        return ;
        }

    iNaviPane->PushL( *iVolumeNavi );
    if ( !iVolumeHider )
        {
        iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow );
        }
    iVolumeHider->Start( 1000000, 1000000, TCallBack( CVeiEditVideoView::HideVolumeCallbackL, this ));

    STATIC_CAST( CAknVolumeControl* , iVolumeNavi->DecoratedControl())->SetValue( aVolume );

    if ( aVolume > KMinVolume + 1 )
        {
        STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetLeftArrowVisibilityL( ETrue );
        }
    else
        {
        STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetLeftArrowVisibilityL( EFalse );
        }

    if ( aVolume < KMaxVolume )
        {
        STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetRightArrowVisibilityL( ETrue );
        }
    else
        {
        STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetRightArrowVisibilityL( EFalse );
        }

    }

void CVeiEditVideoView::RemoveCurrentClipL()
    {
    if ( !iContainer )
        {
        return ;
        }
    TParse fp;

    if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
        {
        if ( iMovie->AudioClipCount() == 0 )
            {
            return ;
            }
        CVedAudioClipInfo* audioclipinfo = iMovie->AudioClipInfo( iContainer->CurrentIndex());
        fp.Set( audioclipinfo->FileName(), NULL, NULL );
        }
    else
        {
        if ( iMovie->VideoClipCount() == 0 )
            {
            return ;
            }

        /* Get filename to remove query. */
        TBool isFile( iMovie->VideoClipInfo( iContainer->CurrentIndex())->Class() == EVedVideoClipClassFile );
        CVedVideoClipInfo* videoclipinfo = iMovie->VideoClipInfo( iContainer->CurrentIndex());

        if ( isFile )
            {
            fp.Set( videoclipinfo->FileName(), NULL, NULL );
            }
        else
            {
            fp.Set( videoclipinfo->DescriptiveName(), NULL, NULL );
            }
        }

    HBufC* stringholder = StringLoader::LoadL( R_VEI_REMOVE_CLIP_QUERY, fp.Name(), iEikonEnv );
    CleanupStack::PushL( stringholder );
    CAknQueryDialog* dlg = new( ELeave )CAknQueryDialog( *stringholder, CAknQueryDialog::ENoTone );
    TInt queryok = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY );
    CleanupStack::PopAndDestroy( stringholder );

    if ( queryok )
        {
        TUint currentIndex = iContainer->GetAndDecrementCurrentIndex();

        if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
            {
            iMovie->RemoveAudioClip( currentIndex );
            }
        else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
            {
            iMovie->RemoveVideoClip( currentIndex );
            }
        else
            {
            ShowErrorNote( R_VEI_ERROR_NOTE );
            }
        }
    }


TInt CVeiEditVideoView::AddClipL( const TDesC& aFilename, TBool aStartNow )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::AddClipL: In" );

    if ( !iContainer )
        {
        iContainer = new( ELeave )CVeiEditVideoContainer( *iMovie, * this );
        iContainer->SetMopParent( this );
        iContainer->ConstructL( AppUi()->ClientRect());
        AppUi()->AddToStackL( *this, iContainer );
        }

    iMediaQueue->InsertMediaL( aFilename );

    if ( aStartNow )
        {
        iMediaQueue->StartProcessingL();
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::AddClipL: Out" );
    return KErrNone;
    }


void CVeiEditVideoView::AddNext()
    {
    iMediaQueue->GetNext();
    }

TBool CVeiEditVideoView::SaveL( TWaitMode aQuitAfterSaving )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: In" );
    RFs& fs = iEikonEnv->FsSession();

    TParse file;
    TFileName newname;

    // Get default movie name from settings view	
    CAknMemorySelectionDialog::TMemory memory( iMovieSaveSettings.MemoryInUse());

    if ( memory == CAknMemorySelectionDialog::EPhoneMemory )
        {
        newname = PathInfo::PhoneMemoryRootPath();
        }
    else
        {
        newname = PathInfo::MemoryCardRootPath();
        }

    newname.Append( PathInfo::VideosPath());

    TVedVideoFormat movieQuality = iMovie->Format();
    if ( movieQuality == EVedVideoFormatMP4 )
        {
        newname.Append( KExtMp4 );
        }
    else
        {
        newname.Append( KExt3gp );
        }

    file.Set( iMovieSaveSettings.DefaultVideoName(), &newname, NULL );

    TInt error( KErrNone );
    error = fs.MkDirAll( file.DriveAndPath());

    if (( error != KErrAlreadyExists ) && ( error != KErrNone ))
        {
        return EFalse;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: 2" );
    if ( IsEnoughFreeSpaceToSaveL())
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: 3" );
        //FileNameQuery
        newname.Zero();
        newname.Append( file.FullName());

        CApaApplication::GenerateFileName( fs, newname );
        CAknFileNamePromptDialog* dlg = CAknFileNamePromptDialog::NewL();
        CleanupStack::PushL( dlg );

        HBufC* filenametitle = StringLoader::LoadLC( R_VEI_QUERY_FILE_NAME, iEikonEnv );

        dlg->SetTitleL( *filenametitle );
        CleanupStack::PopAndDestroy( filenametitle );

        TBool namegiven = dlg->ExecuteL( newname );
        CleanupStack::PopAndDestroy( dlg );

        if ( namegiven )
            {
            newname.Insert( 0, file.DriveAndPath());

            file.Set( newname, NULL, NULL );

            if ( BaflUtils::FileExists( fs, newname ))
                {
                TBool overWrite;
                CAknQueryDialog* queryDlg;

                HBufC* overWriteConfirmationString;
                overWriteConfirmationString = StringLoader::LoadLC( R_VEI_CONFIRM_OVERWRITE, file.Name(), iEikonEnv );
                queryDlg = new( ELeave )CAknQueryDialog( *overWriteConfirmationString, CAknQueryDialog::ENoTone );
                overWrite = queryDlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY );

                CleanupStack::PopAndDestroy( overWriteConfirmationString );
                if ( !overWrite )
                    {
                    return EFalse;
                    }
                }

            iWaitMode = aQuitAfterSaving;

            if ( iSaveToFileName )
                {
                delete iSaveToFileName;
                iSaveToFileName = NULL;
                }

            iSaveToFileName = HBufC::NewL( newname.Length());
            *iSaveToFileName = newname;
            LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: 4, iSaveToFileName:%S", iSaveToFileName );
            StartTempFileProcessingL();

            return ETrue;
            }
        else
            {
            return EFalse;
            }
        }

    else
        {
        return EFalse;
        }
    }


// ----------------------------------------------------------------------------
// CVeiEditVideoView::CheckMemoryCardAvailability()
//
//  Checks the memory card availability if MMC is selected as save store in
//  application settings. An information note is shown in following
//  situations:
//  - MMC not inserted
//  - MMC corrupted (unformatted)
//  [- MMC is read-only (not implemented)]
//  
//  If note is popped up, this function waits until it's dismissed.
// ----------------------------------------------------------------------------
//
void CVeiEditVideoView::CheckMemoryCardAvailabilityL()
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): in" );

    // Read the video editor settings from ini file.

    iChangedFromMMCToPhoneMemory = EFalse;

    TVeiSettings settings;
    STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( settings );

    CAknMemorySelectionDialog::TMemory memoryInUse( settings.MemoryInUse());

    // Check the MMC accessibility only if MMC is used as saving store.
    if ( memoryInUse == CAknMemorySelectionDialog::EMemoryCard )
        {
        RFs& fs = iEikonEnv->FsSession();
        TDriveInfo driveInfo;

        User::LeaveIfError( fs.Drive( driveInfo, KMmcDrive ));

        // Media is not present (MMC card not inserted).
        if ( driveInfo.iType == EMediaNotPresent )
            {
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): no media" );
            iChangedFromMMCToPhoneMemory = ETrue;

            settings.MemoryInUse() = CAknMemorySelectionDialog::EPhoneMemory;
            STATIC_CAST( CVeiAppUi* , AppUi())->WriteSettingsL( settings );
            }
        // Media is present
        else
            {
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): media present" );

            TVolumeInfo volumeInfo;
            TInt volumeErr = fs.Volume( volumeInfo, KMmcDrive );
            LOGFMT( KVideoEditorLogFile, "CEditVideoView::CheckMemoryCardAvailability() Volume(): %d", volumeErr );

            // Show note if media is corrupted/unformatted.
            if ( volumeErr == KErrCorrupt )
                {
                HBufC* noteText = StringLoader::LoadLC( R_VED_MMC_NOT_INSERTED, iEikonEnv );
                CAknInformationNote* informationNote = new( ELeave )CAknInformationNote( ETrue );
                informationNote->ExecuteLD( *noteText );

                CleanupStack::PopAndDestroy( noteText );

                settings.MemoryInUse() = CAknMemorySelectionDialog::EPhoneMemory;
                STATIC_CAST( CVeiAppUi* , AppUi())->WriteSettingsL( settings );
                }
            }
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): out" );
    }

void CVeiEditVideoView::UpdateEditNaviLabel()const
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateEditNaviLabel(): In" );
    if ( !iContainer )
        {
        return ;
        }

    TRAPD( err, DoUpdateEditNaviLabelL());

    if ( err != KErrNone )
        {
        ShowGlobalErrorNote( err );
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateEditNaviLabel(): In" );
    }

void CVeiEditVideoView::DoUpdateEditNaviLabelL()const
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): In" );

    HBufC* buf;

    CAknNavigationDecorator* currentDecorator = iNaviPane->Top();

    iNaviPane->Pop( iMoveLabel );
    iNaviPane->Pop( iPreviewLabel );
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): navi labels popped" );

    TBool leftArrowVisible = EFalse;
    TBool rightArrowVisible = EFalse;

    TInt currentIndex = iContainer->CurrentIndex();

    TInt test = iContainer->SelectionMode();

    // Draw the time indicators to the navi pane in Small preview state.
    // However, if the volume indicator is being show, do not draw the time label
    if ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModePreview && !iFullScreenSelected && !iVolumeHider )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): iContainer->SelectionMode() == CVeiEditVideoContainer::EModePreview && !iFullScreenSelected && !iVolumeHider" );

        TTime elapsed( iContainer->PlaybackPositionL().Int64());
        TTime total( iContainer->TotalLength().Int64());

        TBuf < 16 > elapsedBuf;
        TBuf < 16 > totalBuf;

        HBufC* dateFormatString;

        // check if time is over 99:59
        if (( total.Int64() / 1000 ) < 3600000 ) 
            {
            dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_MIN_SEC );
            }
        else
            {
            dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_LONG );
            }

        elapsed.FormatL( elapsedBuf, * dateFormatString );
        total.FormatL( totalBuf, * dateFormatString );
        CleanupStack::PopAndDestroy( dateFormatString );

        CDesCArrayFlat* strings = new CDesCArrayFlat( 2 );
        CleanupStack::PushL( strings );
        strings->AppendL( elapsedBuf );
        strings->AppendL( totalBuf );
        HBufC* stringholder = StringLoader::LoadL( R_VEI_NAVI_TIME, * strings, iEikonEnv );
        CleanupStack::PopAndDestroy( strings );
        CleanupStack::PushL( stringholder );

        STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetLabelL( stringholder->Des());

        CleanupStack::PopAndDestroy( stringholder );

        iNaviPane->PushL( *iPreviewLabel );
        }


    else if ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeMove )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): iContainer->SelectionMode() == CVeiEditVideoContainer::EModeMove" );

        if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
            {
            buf = StringLoader::LoadLC( R_VEI_MOVE_AUDIO_NAVILABEL, iEikonEnv );

            TTimeIntervalMicroSeconds startTime = iMovie->AudioClipStartTime( currentIndex );

            if (( currentIndex == 0 ) && ( startTime > TTimeIntervalMicroSeconds( 0 )))
                {
                leftArrowVisible = ETrue;
                }
            else
                {
                if ( currentIndex >= 1 )
                    {
                    TTimeIntervalMicroSeconds prevEndTime = iMovie->AudioClipEndTime( currentIndex - 1 );
                    TTimeIntervalMicroSeconds modifiedStartTime = TTimeIntervalMicroSeconds( startTime.Int64() - 100000 );

                    if ( modifiedStartTime > prevEndTime )
                        {
                        leftArrowVisible = ETrue;
                        }
                    }
                }

            if ( currentIndex < ( iMovie->AudioClipCount() - 1 ))
                {
                TTimeIntervalMicroSeconds modifiedEndTime = TTimeIntervalMicroSeconds( iMovie->AudioClipEndTime( currentIndex ).Int64() + 100000 );
                TTimeIntervalMicroSeconds nextStartTime = iMovie->AudioClipStartTime( currentIndex + 1 );
                if ( modifiedEndTime < nextStartTime )
                    {
                    rightArrowVisible = ETrue;
                    }
                }

            if ( currentIndex == iMovie->AudioClipCount() - 1 )
                {
                rightArrowVisible = ETrue;
                }
            }
        else
            {
            buf = StringLoader::LoadLC( R_VEI_MOVE_VIDEO_NAVILABEL, iEikonEnv );

            if ( currentIndex > 0 )
                {
                leftArrowVisible = ETrue;
                }
            if ( currentIndex < iMovie->VideoClipCount() - 1 )
                {
                rightArrowVisible = ETrue;
                }
            }

        STATIC_CAST( CAknNaviLabel* , iMoveLabel->DecoratedControl())->SetTextL( *buf );

        CleanupStack::PopAndDestroy( buf );

        iMoveLabel->DrawNow();

        iMoveLabel->MakeScrollButtonVisible( ETrue );
        iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, !leftArrowVisible );
        iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, !rightArrowVisible );

        iNaviPane->PushL( *iMoveLabel );
        }
    else if ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeDuration )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): iContainer->SelectionMode() == CVeiEditVideoContainer::EModeDuration" );

        buf = StringLoader::LoadLC( R_VEI_NAVI_PANE_DURATION, iEikonEnv );

        STATIC_CAST( CAknNaviLabel* , iMoveLabel->DecoratedControl())->SetTextL( *buf );

        CleanupStack::PopAndDestroy( buf );

        iMoveLabel->DrawNow();

        if ( currentDecorator )
            {
            iMoveLabel->MakeScrollButtonVisible( ETrue );

            if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
                {
                TTimeIntervalMicroSeconds editedDuration = iMovie->AudioClipEditedDuration( currentIndex );
                TTimeIntervalMicroSeconds duration = iMovie->AudioClipInfo( currentIndex )->Duration();

                if ( editedDuration > TTimeIntervalMicroSeconds( 100000 ))
                    {
                    leftArrowVisible = ETrue;
                    }

                if ( editedDuration < duration )
                    {
                    rightArrowVisible = ETrue;
                    }
                }
            else
            // Cursor on generated video clip
                {
                TTimeIntervalMicroSeconds duration = iMovie->VideoClipInfo( currentIndex )->Duration();
                if ( duration > TTimeIntervalMicroSeconds( 100000 ))
                    {
                    leftArrowVisible = ETrue;
                    }
                rightArrowVisible = ETrue;
                }

            iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, !leftArrowVisible );
            iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, !rightArrowVisible );
            iNaviPane->PushL( *iMoveLabel );
            }
        }
    else
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): else-branch" );

        TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize();

        CVedMovie::TVedMovieQuality origQuality = iMovie->Quality();
        iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );

        TInt videoTimeLineSize = iMovie->GetSizeEstimateL() / 1024;

        iMovie->SetQuality( origQuality );

        // Navipanes MMS icon control. 
        if ( videoTimeLineSize < maxMmsSize )
            {
            STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMmsAvailableL( ETrue );
            }
        else
            {
            STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMmsAvailableL( EFalse );
            }

        TInt size = iMovie->GetSizeEstimateL() / 1024;
        /* If in recording state, show last audio clip end time+ recorded audio clip duration in navipane*/
        LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL: iMovie->GetSizeEstimateL() OK : %d", size );
        TTimeIntervalMicroSeconds audioEndTime( 0 );
        if ((( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecording ) || 
             ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecordingPaused )))
            {
            TInt audioCount = iMovie->AudioClipCount();
            /* check that cursor is on last audio clip */
            if (( audioCount > 0 ) && ( iContainer->CurrentIndex() == audioCount - 1 ))
                {
                audioEndTime = iMovie->AudioClipEndTime( audioCount - 1 );
                }
            audioEndTime = audioEndTime.Int64() + iContainer->RecordedAudioDuration().Int64();
            /*
             * Get recorded audio clip size and add it to engine size estimate
             * The size won't match with size estimate that engine gives when recorded audio clip is added,
             * 
             */
            RFs& fs = iEikonEnv->FsSession();
            TEntry entry;

            User::LeaveIfError( fs.Entry( *iTempRecordedAudio, entry ));
            TInt recordedClipSize = entry.iSize / 1024;
            size += recordedClipSize;
            }

        if ( audioEndTime > iMovie->Duration())
            {
            STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetDurationLabelL( audioEndTime.Int64());
            }
        else
            {
            STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetDurationLabelL( iMovie->Duration().Int64());
            LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL: iMovie->Duration() OK : %Ld", iMovie->Duration().Int64());
            }

        // Video line size to navipane.
        STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetSizeLabelL( size );

        LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL: SetSizeLabelL(%d) OK", size );

        // Get default memory from settings view

        if ( iMemoryInUse == CAknMemorySelectionDialog::EPhoneMemory )
            {
            STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryInUseL( ETrue );
            }
        else
            {
            STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryInUseL( EFalse );
            }

        if ( IsEnoughFreeSpaceToSave2L())
            {
            STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryAvailableL( ETrue );
            }
        else
            {
            STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryAvailableL( EFalse );
            }
        if ( !currentDecorator )
            {
            iNaviPane->PushL( *iEditLabel );
            }
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): Out" );
    }

void CVeiEditVideoView::NotifyQueueProcessingStarted( MVeiQueueObserver::TProcessing aMode )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingStarted: in" );

    if ( iProgressNote )
        {
        delete iProgressNote;
        iProgressNote = NULL;
        }

    if ( iWaitDialog )
        {
        CancelWaitDialog();
        }

    HBufC* stringholder;

    switch ( aMode )
        {
        case MVeiQueueObserver::EProcessingAudio: 

        iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue );

        iProgressNote->SetCallback( this );

        iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL );


        stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_INSERTING_AUDIO, iEikonEnv );
        iProgressNote->SetTextL( *stringholder );
        CleanupStack::PopAndDestroy( stringholder );

        iWaitMode = EOpeningAudioInfo;
        iProgressNote->GetProgressInfoL()->SetFinalValue( 100 );
        break;
        case MVeiQueueObserver::EProcessingVideo: 

        iWaitDialog = new( ELeave )CAknWaitDialog( REINTERPRET_CAST( CEikDialog** , &iWaitDialog ), ETrue );
        iWaitDialog->ExecuteLD( R_VEI_WAIT_DIALOG_INSERTING_VIDEO );
        break;
        default:
            iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue );

            iProgressNote->SetCallback( this );

            iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE );
            UpdateInsertingProgressNoteL( 1 );
            iProgressNote->GetProgressInfoL()->SetFinalValue( 100 );
            break;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingStarted: out" );
    }

void CVeiEditVideoView::NotifyQueueProcessingProgressed( TInt aProcessedCount, TInt aPercentage )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingProgressed: in" );
    if ( iProgressNote )
        {
        UpdateInsertingProgressNoteL( aProcessedCount );
        iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage );
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingProgressed: out" );
    }

TBool CVeiEditVideoView::NotifyQueueClipFailed( const TDesC& aFilename, TInt aError )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueClipFailed: in, aError:%d", aError );

    TBool result;
    if ( aError == CVeiAddQueue::EInsertingSingleClip )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueClipFailed: 1" );
        ShowErrorNote( R_VEI_VIDEO_FAILED );
        result = ETrue;
        }
    else
        {
        TBool continueProcessing;
        CAknQueryDialog* dlg;
        HBufC* failedContinueString;

        failedContinueString = StringLoader::LoadLC( R_VEI_WARNING_NOTE_INSERTING_FAILED, aFilename, iEikonEnv );
        dlg = new( ELeave )CAknQueryDialog( *failedContinueString, CAknQueryDialog::ENoTone );
        continueProcessing = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY );

        CleanupStack::PopAndDestroy( failedContinueString );

        result = continueProcessing;
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueClipFailed: out" );

    return result;
    }

void CVeiEditVideoView::NotifyQueueEmpty( TInt /*aInserted*/, TInt DEBUGLOG_ARG( aFailed ))
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueEmpty: in, aFailed:%d", aFailed );
    if ( iProgressNote )
        {
        iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
        TRAP_IGNORE( iProgressNote->ProcessFinishedL());
        }
    if ( iWaitDialog )
        {
        CancelWaitDialog();
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueEmpty: out" );
    }


void CVeiEditVideoView::NotifyMovieProcessingStartedL( CVedMovie&  /*aMovie*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingStartedL: in" );

    iPercentProcessed = 0;

    iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue );
    iProgressNote->SetCallback( this );
    iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL );

    HBufC* stringholder;

    if (( EProcessingMovieSend == iWaitMode ) && ( KSenduiMtmBtUid == iGivenSendCommand ))
        {
        stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv );
        }
    else if ( EProcessingMovieSend == iWaitMode )
        {
        stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_SEND, iEikonEnv );
        }
    else if ( EProcessingMoviePreview == iWaitMode )
        {
        stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv );
        }
    else if ( EProcessingMovieTrimMms == iWaitMode )
        {
        stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv );
        }
    else
        {
        stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_SAVING, iEikonEnv );
        }

    CleanupStack::PushL( stringholder );

    iProgressNote->SetTextL( *stringholder );
    CleanupStack::PopAndDestroy( stringholder );

    iProgressNote->GetProgressInfoL()->SetFinalValue( 100 );

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingStartedL: out" );
    }

void CVeiEditVideoView::NotifyMovieProcessingProgressed( CVedMovie&  /*aMovie*/, TInt aPercentage )
    {
    iPercentProcessed = aPercentage;
    User::ResetInactivityTime();
    iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage );
    }

void CVeiEditVideoView::NotifyMovieProcessingCompleted( CVedMovie& aMovie, TInt aError )
    {
    LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: in, aError:%d, iPercentProcessed:%d", aError, iPercentProcessed );

    aMovie.SetMovieSizeLimit( 0 ); // Movie size limit not in use

    if ( aError == KErrNone )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 2" );
        Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
        Cba()->DrawDeferred();
        SetNewTempFileNeeded( EFalse );
        iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
        TRAP_IGNORE( iProgressNote->ProcessFinishedL());
        }
    else
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 3" );
        if ( iProgressNote )
            {
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 4" );
            iWaitMode = EProcessingError;
            TRAP_IGNORE( iProgressNote->GetProgressInfoL()->SetAndDraw( 100 ));
            iErrorNmb = aError;
            TRAP_IGNORE( iProgressNote->ProcessFinishedL());
            }
        else
            {
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 5" );
            if ( iTempFile )
                {
                LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 6" );
                RFs& fs = iEikonEnv->FsSession();

                fs.Delete( *iTempFile );
                delete iTempFile;
                iTempFile = NULL;
                SetNewTempFileNeeded( ETrue );
                }
            }

        // SetEditorState() must be called because of its side effects eventhough state has not changed,
        // it sets CBAs. CBAs are set to empty before calling ProcessL()	
        if ( EMixAudio != iEditorState )
            {
            SetEditorState( EEdit );
            }
        else
            {
            SetEditorState( EMixAudio );
            }

        iContainer->SetBlackScreen( EFalse );
        iContainer->SetRect( AppUi()->ClientRect());
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: out" );
    }

void CVeiEditVideoView::NotifyVideoClipAdded( CVedMovie&  /*aMovie*/, TInt aIndex )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAdded: in" );
    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;

    if ( iMovieFirstAddFlag )
        {
        CVedVideoClipInfo* info = iMovie->VideoClipInfo( aIndex );

        if ( EVedVideoClipClassGenerated != info->Class())
            {
            SetNewTempFileNeeded( EFalse );
            iMovieSavedFlag = ETrue;
            }
        iMovieFirstAddFlag = EFalse;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAdded: Completed" );

    STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetState( CVeiEditVideoLabelNavi::EStateEditView );
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAdded: out" );
    }

void CVeiEditVideoView::NotifyVideoClipAddingFailed( CVedMovie&  /*aMovie*/, TInt DEBUGLOG_ARG( aError ))
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAddingFailed: in, aError:%d", aError );
    if ( iProgressNote )
        {
        iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
        TRAP_IGNORE( iProgressNote->ProcessFinishedL());
        }

    if ( iWaitDialog )
        {
        CancelWaitDialog();
        }
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAddingFailed: out" );
    }

void CVeiEditVideoView::NotifyVideoClipRemoved( CVedMovie&  /*aMovie*/, TInt  /*aIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipRemoved: in" );
    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipRemoved: out" );
    }

void CVeiEditVideoView::NotifyVideoClipIndicesChanged( CVedMovie&  /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipIndicesChanged: in" );
    iMovieSavedFlag = EFalse;
    SetNewTempFileNeeded( ETrue );
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipIndicesChanged: out" );
    }

void CVeiEditVideoView::NotifyVideoClipTimingsChanged( CVedMovie&  /*aMovie*/, TInt /*aIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipTimingsChanged: in" );
    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipTimingsChanged: out" );
    }

void CVeiEditVideoView::NotifyVideoClipColorEffectChanged( CVedMovie&  /*aMovie*/, TInt /*aIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipColorEffectChanged: in" );
    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipColorEffectChanged: out" );
    }

void CVeiEditVideoView::NotifyVideoClipAudioSettingsChanged( CVedMovie&  /*aMovie*/, TInt /*aIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAudioSettingsChanged: in" );
    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAudioSettingsChanged: out" );
    }

void CVeiEditVideoView::NotifyStartTransitionEffectChanged( CVedMovie&  /*aMovie*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyStartTransitionEffectChanged: in" );
    iMovieSavedFlag = EFalse;
    SetNewTempFileNeeded( ETrue );
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyStartTransitionEffectChanged: out" );
    }

void CVeiEditVideoView::NotifyMiddleTransitionEffectChanged( CVedMovie&  /*aMovie*/, TInt /*aIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMiddleTransitionEffectChanged: in" );
    iMovieSavedFlag = EFalse;
    SetNewTempFileNeeded( ETrue );
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMiddleTransitionEffectChanged: out" );
    }

void CVeiEditVideoView::NotifyEndTransitionEffectChanged( CVedMovie&  /*aMovie*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyEndTransitionEffectChanged: in" );
    iMovieSavedFlag = EFalse;
    SetNewTempFileNeeded( ETrue );
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyEndTransitionEffectChanged: out" );
    }

void CVeiEditVideoView::NotifyAudioClipAdded( CVedMovie& aMovie, TInt aIndex )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAdded: in" );
    iMovieSavedFlag = EFalse;
    SetNewTempFileNeeded( ETrue );

    if ( iProgressNote )
        {
        iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
        TRAP_IGNORE( iProgressNote->ProcessFinishedL());
        }

    iOriginalAudioClipIndex = iContainer->CurrentIndex();

    if ( iOriginalAudioClipIndex > aIndex )
        {
        iOriginalAudioClipIndex--;
        }
    iContainer->SetCurrentIndex( aIndex );

    iOriginalAudioStartPoint = TTimeIntervalMicroSeconds(  - 1 );
    CVedAudioClipInfo* audioclipinfo = aMovie.AudioClipInfo( aIndex );
    iOriginalAudioDuration = audioclipinfo->Duration();

    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAdded: out" );
    }

void CVeiEditVideoView::NotifyAudioClipAddingFailed( CVedMovie&  /*aMovie*/, TInt DEBUGLOG_ARG( aError ))
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAddingFailed: in, aError:%d", aError );
    if ( iProgressNote )
        {
        iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
        TRAP_IGNORE( iProgressNote->ProcessFinishedL());
        }

    if ( iWaitDialog )
        {
        CancelWaitDialog();
        }
    ShowErrorNote( R_VEI_ERRORNOTE_AUDIO_INSERTING_FAILED );

    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAddingFailed: out" );
    }

void CVeiEditVideoView::NotifyAudioClipRemoved( CVedMovie&  /*aMovie*/, TInt  /*aIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipRemoved: in" );
    if ( iTempRecordedAudio )
        {
        delete iTempRecordedAudio;
        iTempRecordedAudio = NULL;
        }
    iMovieSavedFlag = EFalse;
    SetNewTempFileNeeded( ETrue );
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipRemoved: out" );
    }

void CVeiEditVideoView::NotifyAudioClipIndicesChanged( CVedMovie&  /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipIndicesChanged: in" );
    iMovieSavedFlag = EFalse;
    SetNewTempFileNeeded( ETrue );
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipIndicesChanged: out" );
    }

void CVeiEditVideoView::NotifyAudioClipTimingsChanged( CVedMovie&  /*aMovie*/, TInt /*aIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipTimingsChanged: in" );
    iMovieSavedFlag = EFalse;
    SetNewTempFileNeeded( ETrue );
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipTimingsChanged: out" );
    }

void CVeiEditVideoView::NotifyMovieReseted( CVedMovie&  /*aMovie*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieReseted: in" );
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieReseted: out" );
    }

void CVeiEditVideoView::NotifyAudioClipInfoReady( CVedAudioClipInfo& aInfo, TInt aError )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: in, aError:%d", aError );
    TInt err( KErrNone );

    if ( aError == KErrNone )
        {
        if ( aInfo.Type() == EVedAudioTypeUnrecognized )
            {
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 2: EVedAudioTypeUnrecognized" );

            aError = KErrNotSupported;

            /*TPtrC filename = aInfo.FileName();

            iTempRecordedAudio = HBufC::NewL(KMaxFileName);
            iTempMaker->GenerateTempFileName( *iTempRecordedAudio, iMovie );

            TRAP_IGNORE( iConverter->StartConversionL( filename, *iTempRecordedAudio) );	

            delete iTempRecordedAudio;
            iTempRecordedAudio = NULL;
             */
            }
        else if (( aInfo.Type() == EVedAudioTypeAMR ) || 
                 ( aInfo.Type() == EVedAudioTypeAMRWB ) || 
                 ( aInfo.Type() == EVedAudioTypeMP3 ) || 
                 ( aInfo.Type() == EVedAudioTypeAAC_LC ) || 
                 ( aInfo.Type() == EVedAudioTypeAAC_LTP ) || 
                 ( aInfo.Type() == EVedAudioTypeWAV ))
            {

            LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 3" );
            TInt index = 0;
            TInt64 startTimeInt = 0;
            TInt64 durationInt = aInfo.Duration().Int64();

            if ((( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) || 
                 ( iContainer->CursorLocation() == VideoEditor::ECursorOnEmptyAudioTrack )) && 
                 ( iMovie->AudioClipCount() > 0 ))
                {
                index = iContainer->CurrentIndex() + 1;
                startTimeInt = iMovie->AudioClipEndTime( iContainer->CurrentIndex()).Int64();
                }

            while ( index < iMovie->AudioClipCount())
                {
                if ( TTimeIntervalMicroSeconds( startTimeInt ) == iMovie->AudioClipStartTime( index ))
                    {
                    startTimeInt = iMovie->AudioClipEndTime( index ).Int64();
                    index++;
                    }
                else
                    {
                    break;
                    }
                }

            if ( index < iMovie->AudioClipCount())
                {
                TInt64 endTimeInt = startTimeInt + durationInt;
                TInt64 nextStartTimeInt = iMovie->AudioClipStartTime( index ).Int64();
                if ( endTimeInt > nextStartTimeInt )
                    {
                    durationInt = nextStartTimeInt - startTimeInt;
                    }
                }
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 4" );
            TRAP( err, iMovie->AddAudioClipL( aInfo.FileName(), 
                                              TTimeIntervalMicroSeconds( startTimeInt ), 
                                              TTimeIntervalMicroSeconds( 0 ), 
                                              TTimeIntervalMicroSeconds( durationInt )));
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 5" );
            }
        }
    if (( aError != KErrNone ) || ( err != KErrNone ))
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 6" );
        if ( aError != KErrCancel )
            {
            if ( aError )
                {
                iErrorNmb = aError;
                }
            else
                {
                iErrorNmb = err;
                }
            }
        iWaitMode = EProcessingAudioError;

        iProgressNote->GetProgressInfoL()->SetAndDraw( 100 );
        TRAP_IGNORE( iProgressNote->ProcessFinishedL());
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: out" );
    }



void CVeiEditVideoView::NotifyVideoClipGeneratorSettingsChanged( CVedMovie&  /*aMovie*/, TInt /*aIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipGeneratorSettingsChanged: in" );
    if ( iWaitDialog )
        {
        iWaitDialog->ProcessFinishedL();
        }

    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;
    UpdateEditNaviLabel();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipGeneratorSettingsChanged: out" );
    }

void CVeiEditVideoView::NotifyVideoClipDescriptiveNameChanged( CVedMovie&  /*aMovie*/, TInt /*aIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipDescriptiveNameChanged: in and out" );
    }

void CVeiEditVideoView::NotifyMovieQualityChanged( CVedMovie&  /*aMovie*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieQualityChanged: in" );

    // If there are text generator inserted into the movie, they need
    // to be notified that the movie resolution has changed so that
    // they can re-calculate the the wrapping etc. parameters.
    /*	TInt clipCount = iMovie->VideoClipCount();
    for (TInt i = 0; i < clipCount; i++)
    {
    CVedVideoClipInfo* clipInfo = iMovie->VideoClipInfo(i);
    if (clipInfo->Class() == EVedVideoClipClassGenerated)
    {
    TUid generatorUid = clipInfo->Generator()->Uid();
    if (generatorUid == KUidTitleClipGenerator)
    {
    CVeiTitleClipGenerator* generator = static_cast<CVeiTitleClipGenerator*>(clipInfo->Generator());
    generator->RefreshTextFrameParametersL();
    }
    }
    }*/

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieQualityChanged: out" );
    }

void CVeiEditVideoView::NotifyMovieOutputParametersChanged( CVedMovie& /*aMovie*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieOutputParametersChanged: in and out" );
    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;
    }

void CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& /*aMovie*/, 
                                                                 TInt /*aClipIndex*/, 
                                                                 TInt /*aMarkIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkInserted: in and out" );
    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;
    }

void CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& /*aMovie*/, 
                                                                TInt /*aClipIndex*/, 
                                                                TInt /*aMarkIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkRemoved: in and out" );
    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;
    }

void CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& /*aMovie*/, 
                                                                 TInt /*aClipIndex*/, 
                                                                 TInt /*aMarkIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkInserted: in and out" );
    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;
    }

void CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& /*aMovie*/, 
                                                                TInt /*aClipIndex*/, 
                                                                TInt /*aMarkIndex*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkRemoved: in and out" );
    SetNewTempFileNeeded( ETrue );
    iMovieSavedFlag = EFalse;
    }

void CVeiEditVideoView::MoscoStateChangeEvent( CBase* aObject, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode )
    {
    LOGFMT3( KVideoEditorLogFile, "CVeiEditVideoView::MoscoStateChangeEvent: In: aPreviousState:%d, aCurrentState:%d, aErrorCode:%d", aPreviousState, aCurrentState, aErrorCode );

    if ( aObject == iRecorder )
        {
        if ( aErrorCode != KErrNone )
            {
            ShowErrorNote( R_VEI_RECORDING_FAILED );

            if ( iTempRecordedAudio )
                {
                TInt err = iEikonEnv->FsSession().Delete( *iTempRecordedAudio );
                if ( err ){

                }
                delete iTempRecordedAudio;
                iTempRecordedAudio = NULL;
                }

            iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation );
            TRAP_IGNORE( Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ));
            Cba()->DrawDeferred();
            UpdateEditNaviLabel();

            iRecorder->Close();
            }
        else if ( aCurrentState == CMdaAudioClipUtility::ERecording )
            {
            const TUint delay = 1000 * 1000 / 10;

            if ( !iAudioRecordPeriodic->IsActive())
                {
                iAudioRecordPeriodic->Start( delay, delay, TCallBack( CVeiEditVideoView::UpdateAudioRecording, this ));
                }

            Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PAUSE_STOP );
            Cba()->DrawDeferred();
            }
        else if ( aPreviousState == CMdaAudioClipUtility::ENotReady )
            {
            TRAP_IGNORE( Cba()->SetCommandSetL( R_VEI_SOFTKEYS_RECORD_CANCEL ));
            Cba()->DrawDeferred();
            }
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::MoscoStateChangeEvent: Out" );
    }


void CVeiEditVideoView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, 
                                     TUid /*aCustomMessageId*/, 
                                     const TDesC8& /*aCustomMessage*/ )
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoActivateL: In" );
    if ( !iMemoryCardChecked )
        {
        CheckMemoryCardAvailabilityL();
        iMemoryCardChecked = ETrue;
        }

    if ( !iContainer )
        {
        iContainer = new( ELeave )CVeiEditVideoContainer( *iMovie, * this );
        iContainer->SetMopParent( this );
        iContainer->ConstructL( AppUi()->ClientRect());
        AppUi()->AddToStackL( *this, iContainer );
        }

    SetEditorState( EEdit );

    // Add Context Pane icon

    /*	TUid contextPaneUid;
    contextPaneUid.iUid = EEikStatusPaneUidContext;

    CEikStatusPane* sp = StatusPane();
    CEikStatusPaneBase::TPaneCapabilities subPane = sp->PaneCapabilities( contextPaneUid );

    if ( subPane.IsPresent() && subPane.IsAppOwned() )
    {	
    CAknContextPane* contextPane = (CAknContextPane*)sp->ControlL( contextPaneUid);

    TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KManualVideoEditorIconFileId) );
    }*/

    // Quality is taken from settings and set to engine.
    STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( iMovieSaveSettings );

    TInt settingsSaveQuality = iMovieSaveSettings.SaveQuality();
    CVedMovie::TVedMovieQuality saveQuality;

    switch ( settingsSaveQuality )
        {
        case TVeiSettings::EMmsCompatible: saveQuality = CVedMovie::EQualityMMSInteroperability;
        break;
        case TVeiSettings::EMedium: saveQuality = CVedMovie::EQualityResolutionMedium;
        break;
        case TVeiSettings::EBest: saveQuality = CVedMovie::EQualityResolutionHigh;
        break;
        case TVeiSettings::EAuto: default:
            saveQuality = CVedMovie::EQualityAutomatic;
            break;
        }

    iMovie->SetQuality( saveQuality );
    iMemoryInUse = iMovieSaveSettings.MemoryInUse();

    if (( EProcessingMovieForCutting == iWaitMode ) || 
        ( EProcessingMovieTrimMms == iWaitMode ) || 
        ( ECuttingAudio == iWaitMode ))
        {
        iMovie->RegisterMovieObserverL( this );
        iMovie->RegisterMovieObserverL( iContainer );
        }

    if ( EProcessingMovieForCutting == iWaitMode )
        {
        // miksi laitetaan jos ollaan oltu rimmaamassa?
        //SetNewTempFileNeeded(ETrue);

        TTimeIntervalMicroSeconds cutin;
        TTimeIntervalMicroSeconds cutout;
        cutin = iMovie->VideoClipCutInTime( iCutVideoIndex );
        cutout = iMovie->VideoClipCutOutTime( iCutVideoIndex );

        if (( cutin != TTimeIntervalMicroSeconds( 0 )) || 
            ( cutout != iMovie->VideoClipInfo( iCutVideoIndex )->Duration()))
            {
            iMovieSavedFlag = EFalse;
            }

        if (( cutin != iOriginalCutInTime ) || ( cutout != iOriginalCutOutTime ) )
            {
            SetNewTempFileNeeded( ETrue );
            iContainer->DrawNow();
            Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY );
            iContainer->UpdateThumbnailL( iCutVideoIndex );
            }
        iContainer->SetCursorLocation( VideoEditor::ECursorOnClip );
        }
    else if ( ECuttingAudio == iWaitMode )
        {

        //SetNewTempFileNeeded(ETrue);

        TTimeIntervalMicroSeconds cutin;
        TTimeIntervalMicroSeconds cutout;
        cutin = iMovie->AudioClipCutInTime( iCutAudioIndex );
        cutout = iMovie->AudioClipCutOutTime( iCutAudioIndex );

        if (( cutin != TTimeIntervalMicroSeconds( 0 )) || 
            ( cutout != iMovie->AudioClipInfo( iCutAudioIndex )->Duration()))
            {
            iMovieSavedFlag = EFalse;
            }

        TTimeIntervalMicroSeconds currentEndTime;
        TTimeIntervalMicroSeconds nextStartTime;

        for ( TInt i = iContainer->CurrentIndex(); i < ( iMovie->AudioClipCount() - 1 ); i++ )
            {
            currentEndTime = iMovie->AudioClipEndTime( i );
            nextStartTime = iMovie->AudioClipStartTime( i + 1 );

            if ( nextStartTime < currentEndTime )
            // what is the reason behind?
            // is this a typo, should it be like this?:
            //if ( nextStartTime != currentEndTime )
                {
                nextStartTime = currentEndTime;
                iMovie->AudioClipSetStartTime( i + 1, nextStartTime );
                }
            }
        if (( cutin != iOriginalAudioCutInTime ) || ( cutout != iOriginalAudioCutOutTime ))
            {
            SetNewTempFileNeeded( ETrue );
            iContainer->DrawNow();
            }

        iContainer->SetCursorLocation( VideoEditor::ECursorOnAudio );
        }

    iNaviPane->PushL( *iEditLabel );

    iSendKey = EFalse;
    iWaitMode = ENotWaiting;

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoActivateL: out" );
    }

void CVeiEditVideoView::HandleForegroundEventL( TBool aForeground )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL: in: %d", aForeground );

    if ( !aForeground )
        {
        // If the application is closing down, calling PauseVideoL could result in 
        // a callback from the MMF player after the container is already deleted,
        // causing KERN-EXEC 3
        if ( static_cast < CVeiAppUi*  > ( AppUi())->AppIsOnTheWayToDestruction())
            {
            iContainer->PrepareForTerminationL();
            return ;
            }

        LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL 1" );
        //if ( (EditorState() != EEdit ) && iContainer)
        if ( EPreview == EditorState() || EQuickPreview == EditorState())
            {
            iContainer->PauseVideoL();
            }
        // In phones with clamshell (läppäpuhelin) background can be activated with closing the shell
        // iContainer's OfferKeyEvent do not get this kind of shell events
        if ( EPreview == EditorState())
        // large preview
            {
            LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL 2" );
            SetEditorState( CVeiEditVideoView::EEdit );
            iContainer->SetBlackScreen( EFalse );
            SetFullScreenSelected( EFalse );
            iContainer->StopVideo( ETrue );
            }

        if (( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecordingPaused ) || ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecording ))
            {
            HandleCommandL( EVeiCmdEditVideoViewRecordStop );
            }
        DoDeactivate();
        }
    else
        {
        if ( EditorState() != EEdit )
            {
            if ( EMixAudio != EditorState() && EAdjustVolume != EditorState())
                {
                LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL: 3, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" );
                Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK );
                }
            Cba()->DrawDeferred();
            }

        /* When view is activated some clips can be deleted or
        names can be changed.. So check that all video and audio clips are still available.*/
        if ( iMovie )
            {
            TInt i;
            TFileName clipName;
            RFs& fs = iEikonEnv->FsSession();

            for ( i = 0; i < iMovie->VideoClipCount(); i++ )
                {
                if ( iMovie->VideoClipInfo( i )->Class() == EVedVideoClipClassFile )
                    {
                    clipName = iMovie->VideoClipInfo( i )->FileName();

                    if ( !BaflUtils::FileExists( fs, clipName ))
                        {
                        iContainer->GetAndDecrementCurrentIndex();

                        iMovie->RemoveVideoClip( i );
                        i--;
                        UpdateMediaGalleryL();
                        }
                    clipName.Zero();
                    }
                }

            for ( i = 0; i < iMovie->AudioClipCount(); i++ )
                {
                clipName = iMovie->AudioClipInfo( i )->FileName();

                if ( !BaflUtils::FileExists( fs, clipName ))
                    {
                    iContainer->GetAndDecrementCurrentIndex();

                    iMovie->RemoveAudioClip( i );
                    i--;
                    UpdateMediaGalleryL();
                    }
                clipName.Zero();
                }

            }

        UpdateEditNaviLabel();
        HandleScreenDeviceChangedL();
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL: out" );
    }

void CVeiEditVideoView::DoDeactivate()
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView:DoDeactivate: In" );

    iNaviPane->Pop( iEditLabel );

    if ( iVolumeHider )
        {
        iVolumeHider->Cancel();
        delete iVolumeHider;
        iVolumeHider = NULL;
        }

    LOG( KVideoEditorLogFile, "CVeiEditVideoView:DoDeactivate: Out" );
    }


TTimeIntervalMicroSeconds CVeiEditVideoView::OriginalAudioDuration()const
    {
    return iOriginalAudioDuration;
    }

TInt CVeiEditVideoView::UpdateNaviPreviewing( TAny* aThis )
    {
    STATIC_CAST( CVeiEditVideoView* , aThis )->DoUpdateEditNaviLabelL();
    return 1;
    }


TInt CVeiEditVideoView::UpdateAudioRecording( TAny* aThis )
    {
    STATIC_CAST( CVeiEditVideoView* , aThis )->DoUpdateAudioRecording();
    return 1;
    }

void CVeiEditVideoView::DoUpdateAudioRecording()
    {
    if ( iRecorder->State() != CMdaAudioClipUtility::ERecording )
        {
        iAudioRecordPeriodic->Cancel();
        Cba()->SetCommandSetL( R_VEI_SOFTKEYS_CONTINUE_STOP );
        Cba()->DrawDeferred();
        }
    else
        {
        TTimeIntervalMicroSeconds duration = iRecorder->Duration();

        iContainer->SetRecordedAudioDuration( duration );
        iContainer->DrawTrackBoxes();

        UpdateEditNaviLabel();

        // !!!*** Safety margin of 0.5s because cropping does not work, remove when cropping fixed. ***!!!
        duration = TTimeIntervalMicroSeconds( duration.Int64());

        if (( iRecordedAudioMaxDuration >= TTimeIntervalMicroSeconds( 0 )) && ( duration > iRecordedAudioMaxDuration ))
            {
            TRAP_IGNORE( HandleCommandL( EVeiCmdEditVideoViewRecordStop ));
            }
        }
    }

void CVeiEditVideoView::CancelWaitDialog( TInt aError )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: In, aError:%d", aError );
    if ( iWaitDialog )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 2" );
        iWaitDialog->ProcessFinishedL();
        }

    if ( aError )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 3" );
        ShowGlobalErrorNote( aError );
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 4" );
        }
    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 5" );
    Cba()->DrawDeferred();
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: Out" );
    }

void CVeiEditVideoView::NotifyImageClipGeneratorInitializationComplete( CVeiImageClipGenerator&  /*aGenerator*/, TInt aError )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyImageClipGeneratorInitializationComplete: in, aError:%d", aError );
    if ( aError != KErrNone )
        {
        ShowGlobalErrorNote( aError );
        delete iGenerator;
        iGenerator = 0;
        return ;
        }

    // insert the generator into movie
    TInt index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1;
    iMovie->InsertVideoClipL( *iGenerator, ETrue, index );

    // Generator is no longer our concern
    iGenerator = 0;
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyImageClipGeneratorInitializationComplete: out" );
    }


void CVeiEditVideoView::NotifyTitleClipBackgroundImageLoadComplete( CVeiTitleClipGenerator&  /*aGenerator*/, TInt aError )
    {
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyTitleClipBackgroundImageLoadComplete: in, aError:%d", aError );
    if ( aError != KErrNone )
        {
        ShowGlobalErrorNote( aError );
        delete iGenerator;
        iGenerator = 0;
        return ;
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyTitleClipBackgroundImageLoadComplete: out" );
    }

void CVeiEditVideoView::UpdateInsertingProgressNoteL( TInt aProcessed )
    {
    TInt queueCount = iMediaQueue->Count();

    CArrayFix < TInt > * numbers = new CArrayFixFlat < TInt > ( 2 );
    CleanupStack::PushL( numbers );
    numbers->AppendL( aProcessed );
    numbers->AppendL( queueCount );

    HBufC* stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_INSERTING_MEDIA, * numbers, iEikonEnv );

    CleanupStack::PushL( stringholder );

    iProgressNote->SetTextL( *stringholder );
    iProgressNote->DrawNow(); // otherwise text is not drawn at all 
    CleanupStack::PopAndDestroy( stringholder );
    CleanupStack::PopAndDestroy( numbers );
    }

void CVeiEditVideoView::MmsSendCompatibleCheck()
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): in" );

    TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize()* 1024;

    CVedMovie::TVedMovieQuality origQuality = iMovie->Quality();
    iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
    TInt sizeEstimate = 0;
    TRAP_IGNORE( sizeEstimate = iMovie->GetSizeEstimateL());
    iMovie->SetQuality( origQuality );

    LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): maxMmsSize: %d, sizeEstimate: %d", maxMmsSize, sizeEstimate );

    TInt movieSizeLimit = ( TInt )( maxMmsSize* 0.9 );
    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): testing, test:%d", movieSizeLimit );

    if ( sizeEstimate < ( TInt )( maxMmsSize* 1.1 ))
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): SetMovieSizeLimit..ok" );
        iMovie->SetMovieSizeLimit( movieSizeLimit );
        }

    TVeiSettings movieSaveSettings;

    if ( iMovie->IsMovieMMSCompatible())
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck: MMSCompatible YES" );
        iWaitMode = EProcessingMovieTrimMms;
        StartTempFileProcessingL();
        }
    else
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck: MMSCompatible NO" );
        iWaitMode = EProcessingMovieTrimMms;
        movieSaveSettings.SaveQuality() = TVeiSettings::EMmsCompatible;
        StartTempFileProcessingL();
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): out" );
    }

// Screen twisting 
/*
/* experimental code trying to fix this:
EECO-6W39YS 
Manual Video Editor: Wrong layout displays if switching phone mode during large preview playing

void CVeiEditVideoView::HandleScreenDeviceChangedL()
{	
LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() in");
if ( iContainer )
{
// Orientation changed. Resize container rect and update component
//positions.


//	iContainer->SetRect( ClientOrApplicationRect( iFullScreenSelected ) );
//	
//	iContainer->SetRect( AppUi()->ClientRect() );
//	

if(CVeiEditVideoContainer::EModePreview == iContainer->SelectionMode() && iFullScreenSelected &&
CVeiEditVideoContainer::EStatePlaying == iContainer->PreviewState())
{
LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() 1");
iContainer->SetBlackScreen( ETrue );
iContainer->SetRect( ClientOrApplicationRect( iFullScreenSelected ) );
return;	
}		
LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() 2");				
iContainer->SetCursorLocation( iContainer->CursorLocation() );
iContainer->ArrowsControl();

iContainer->DrawDeferred();
}		
LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() out");	
}
 */
/* Screen twisting */
void CVeiEditVideoView::HandleScreenDeviceChangedL()
    {
    if ( iContainer )
        {
        // Orientation changed. Resize container rect and update component
        //positions.
        iContainer->SetRect( AppUi()->ClientRect());

        iContainer->SetCursorLocation( iContainer->CursorLocation());
        iContainer->ArrowsControl();

        iContainer->DrawDeferred();
        }
    }

void CVeiEditVideoView::HideVolume()
    {
    iNaviPane->Pop( iVolumeNavi );

    delete iVolumeHider;
    iVolumeHider = NULL;
    }

TInt CVeiEditVideoView::HideVolumeCallbackL( TAny* aPtr )
    {
    CVeiEditVideoView* view = ( CVeiEditVideoView* )aPtr;
    view->HideVolume();
    return 0;
    }

void CVeiEditVideoView::UpdateMediaGalleryL()
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateMediaGalleryL(): In" );

  
    // Publish & Subscribe API used to make the saved file name available to AIW provider
    if ( iSaveToFileName )
        {
        LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateMediaGalleryL(): Calling RProperty::Define(KUidVideoEditorProperties, VideoEditor::EPropertyFilename, RProperty::EText); " );
        TInt err = RProperty::Define( KUidVideoEditorProperties, VideoEditor::EPropertyFilename, RProperty::EText );
        if ( err != KErrAlreadyExists )
            {
            User::LeaveIfError( err );
            }
        User::LeaveIfError( RProperty::Set( KUidVideoEditorProperties, VideoEditor::EPropertyFilename, iSaveToFileName->Des()));
        }
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateMediaGalleryL(): Out" );
    }

void CVeiEditVideoView::SetFullScreenSelected( TBool aFullScreenSelected )
    {
    iFullScreenSelected = aFullScreenSelected;
    }

void CVeiEditVideoView::StartNaviPaneUpdateL()
    {
    if ( iPreviewUpdatePeriodic )
        {
        if ( iPreviewUpdatePeriodic->IsActive())
            {
            iPreviewUpdatePeriodic->Cancel();
            }

        iPreviewUpdatePeriodic->Start( 100000, 100000, TCallBack( CVeiEditVideoView::UpdateNaviPreviewing, this ));
        }
    }

void CVeiEditVideoView::ShowAndHandleSendMenuCommandsL()
    {
    /* Show send menu, postcard dimmed */
    CArrayFix < TUid > * mtmToDim = new( ELeave )CArrayFixFlat < TUid > ( 3 );
    TUid userSelection;
    CleanupStack::PushL( mtmToDim );
    /*
    this uid is empirically got with one device 19.10.2006
    there is currently (19.10.2006) no constans found in headers for Web Upload
     */

    const TInt KSenduiMtmOwnWebUploadIntValue = 536873429;
    const TUid KSenduiMtmOwnWebUpload = 
        {
        KSenduiMtmOwnWebUploadIntValue
    };

    mtmToDim->AppendL( KSenduiMtmPostcardUid );
    mtmToDim->AppendL( KSenduiMtmAudioMessageUid );
    mtmToDim->AppendL( KSenduiMtmOwnWebUpload );


    userSelection = iSendAppUi.ShowSendQueryL( NULL, TSendingCapabilities( 0, 0, TSendingCapabilities::ESupportsAttachments ), mtmToDim );
    CleanupStack::PopAndDestroy( mtmToDim );

    iGivenSendCommand = userSelection;

    if ( IsEnoughFreeSpaceToSaveL())
        {
        switch ( userSelection.iUid )
            {
            case KSenduiMtmSmtpUidValue:
            case KSenduiMtmImap4UidValue:
            case KSenduiMtmPop3UidValue:
                    {
                    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: %d", userSelection.iUid );
                    iWaitMode = EProcessingMovieSend;
                    StartTempFileProcessingL();
                    break;
                    }
            case KSenduiMtmIrUidValue:
                    {
                    LOG( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: KSenduiMtmIrUidValue" );
                    iWaitMode = EProcessingMovieSend;
                    StartTempFileProcessingL();
                    break;
                    }
            case KSenduiMtmMmsUidValue:
                    {
                    LOG( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: KSenduiMtmMmsUidValue" );
                    iWaitMode = EProcessingMovieTrimMms;
                    MmsSendCompatibleCheck();
                    break;
                    }
            case KSenduiMtmBtUidValue:
                    {
                    LOG( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: KSenduiMtmBtUidValue" );
                    iWaitMode = EProcessingMovieSend;
                    StartTempFileProcessingL();
                    break;
                    }
                /*case KSenduiMtmOwnWebUploadIntValue:			// 0x200009D5
                {
                LOG(KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL 6: MTM UID: 536873429");
                iWaitMode = EProcessingMovieSend;
                StartTempFileProcessingL();
                break;            	
                }	
                 */
            default:
                break;

            }
        }
    }

void CVeiEditVideoView::StopNaviPaneUpdateL()
    {
    DoUpdateEditNaviLabelL();

    if ( iPreviewUpdatePeriodic && iPreviewUpdatePeriodic->IsActive())
        {
        iPreviewUpdatePeriodic->Cancel();
        }
    }

TRect CVeiEditVideoView::ClientOrApplicationRect( TBool aFullScreenSelected )const
    {
    if ( aFullScreenSelected )
        {
        return AppUi()->ApplicationRect();
        }
    else
        {
        return AppUi()->ClientRect();
        }

    }

TBool CVeiEditVideoView::MixingConditionsOk()const
    {
    // prerequisites for sound mixing: at least one video with audio and one imported audio exist
    if ( iMovie->VideoClipCount() > 0 && iMovie->AudioClipCount() > 0 )
        {
        for ( TInt i = 0; i < iMovie->VideoClipCount(); i++ )
            {
            //if (iMovie->VideoClipEditedHasAudio(i))
            if ( iMovie->VideoClipInfo( i )->HasAudio())
                {
                return ETrue;
                }
            }
        }
    return EFalse;
    }

/*void CVeiEditVideoView::MixAudio()
{		

//TReal gainVideoNew(0);
//TReal gainAudioNew(0);

TInt gainVideoNew(0);
TInt gainAudioNew(0);

TInt gainVideoCurrent = iMovie->GetVideoClipVolumeGainL(KVedClipIndexAll);
TInt gainAudioCurrent = iMovie->GetAudioClipVolumeGainL(KVedClipIndexAll);

// video clips are faded      
if (iContainer->AudioMixingRatio() > 0)    
{
//@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int
//Math::Round(fadevideo, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2);

gainVideoNew = iContainer->AudioMixingRatio()*(KVolumeMaxGain/10);    	
gainVideoNew += 0.5; // for making real to int rounding work in constructor of TVedDynamicLevelMark
gainVideoNew = 0 - gainVideoNew;    	
}
// audio clips are faded
else if (iContainer->AudioMixingRatio() < 0)    
{
//@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int
//Math::Round(fadeaudio, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2);    	
gainAudioNew = iContainer->AudioMixingRatio()*(KVolumeMaxGain/10);     	    	    	    	
gainAudioNew -= 0.5;    // for making real to int rounding	work in constructor of TVedDynamicLevelMark    	
}        			    

if (gainVideoNew != gainVideoCurrent)
{
iMovie->SetVideoClipVolumeGainL(KVedClipIndexAll, gainVideoNew);
}
if (gainAudioNew != gainAudioCurrent)
{
iMovie->SetAudioClipVolumeGainL(KVedClipIndexAll, gainAudioNew);	
}    	    	    	
}
 */

void CVeiEditVideoView::MixAudio()
    {
    TReal fadevideo( 0 );
    TReal fadeaudio( 0 );

    // video clips are faded        
    if ( iContainer->AudioMixingRatio() > 0 )
        {
        //@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int
        //Math::Round(fadevideo, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2);

        fadevideo = iContainer->AudioMixingRatio()*( KVolumeMaxGain / 10 );
        fadevideo += 0.5; // for making real to int rounding work in constructor of TVedDynamicLevelMark
        fadevideo = 0-fadevideo;
        fadeaudio = 0;
        }
    // audio clips are faded
    else if ( iContainer->AudioMixingRatio() < 0 )
        {
        //@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int
        //Math::Round(fadeaudio, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2);

        fadeaudio = iContainer->AudioMixingRatio()*( KVolumeMaxGain / 10 );
        fadeaudio -= 0.5; // for making real to int rounding	work in constructor of TVedDynamicLevelMark
        fadevideo = 0;
        }

    // video clips are faded        
    if ( iContainer->AudioMixingRatio() > 0 && iMovie->VideoClipCount() > 0 )
        {
        TInt gain = iMovie->GetVideoClipVolumeGainL( KVedClipIndexAll ); ///(KVolumeMaxGain/10);
        TInt gainNew = ( TInt )fadevideo;
        if ( gainNew != gain )
            {
            iMovie->SetAudioClipVolumeGainL( KVedClipIndexAll, 0 );
            iMovie->SetVideoClipVolumeGainL( KVedClipIndexAll, gainNew );
            }
        }
    // audio clips are faded
    else if ( iContainer->AudioMixingRatio() < 0 && iMovie->AudioClipCount() > 0 )
        {
        TInt gain = iMovie->GetAudioClipVolumeGainL( KVedClipIndexAll ); ///(KVolumeMaxGain/10);
        TInt gainNew = ( TInt )fadeaudio;
        if ( gainNew != gain )
            {
            iMovie->SetVideoClipVolumeGainL( KVedClipIndexAll, 0 );
            iMovie->SetAudioClipVolumeGainL( KVedClipIndexAll, gainNew );
            }
        }
    else
    //if marks set back to position '0'
        {
        if ( 0 != iMovie->GetVideoClipVolumeGainL( KVedClipIndexAll ))
            {
            iMovie->SetVideoClipVolumeGainL( KVedClipIndexAll, 0 );
            }
        if ( 0 != iMovie->GetAudioClipVolumeGainL( KVedClipIndexAll ))
            {
            iMovie->SetAudioClipVolumeGainL( KVedClipIndexAll, 0 );
            }
        }
    }

void CVeiEditVideoView::AdjustVolumeL()
    {
    TReal adjustVolume = iContainer->Volume()*( KVolumeMaxGain / 10 );
    // to make rounding to int work correctly in constructor of TVedDynamicLevelMark
    // @ : if adjustvolume is x.0, rounding does not work, think how to fix problem
    if ( 0 < adjustVolume )
        {
        adjustVolume += 0.5;
        }
    else
        {
        adjustVolume -= 0.5;
        }

    if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip )
        {
        TReal currentVolume = iMovie->GetVideoClipVolumeGainL( iContainer->CurrentIndex()); ///(KVolumeMaxGain/10);						
        if ( 0 == iContainer->Volume())
            {
            if ( 0 != ( TInt )currentVolume )
                {
                iMovie->SetVideoClipVolumeGainL( iContainer->CurrentIndex(), 0 );
                }
            }
        else if (( TInt )currentVolume != ( TInt )adjustVolume )
            {
            iMovie->SetVideoClipVolumeGainL( iContainer->CurrentIndex(), ( TInt )adjustVolume );
            }
        }
    else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio )
        {
        TReal currentVolume = iMovie->GetAudioClipVolumeGainL( iContainer->CurrentIndex()); ///(KVolumeMaxGain/10);		
        if ( 0 == iContainer->Volume())
            {
            if ( 0 != ( TInt )currentVolume )
                {
                iMovie->SetAudioClipVolumeGainL( iContainer->CurrentIndex(), 0 );
                }
            }
        else if (( TInt )currentVolume != ( TInt )adjustVolume )
            {
            iMovie->SetAudioClipVolumeGainL( iContainer->CurrentIndex(), ( TInt )adjustVolume );
            }
        }
    }

void CVeiEditVideoView::StoreOrientation()
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::StoreOrientation: in" );

    iOriginalOrientation = AppUi()->Orientation();

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::StoreOrientation: out" );
    }

void CVeiEditVideoView::RestoreOrientation()
    {
    LOG( KVideoEditorLogFile, "CVeiEditVideoView::RestoreOrientation: in" );

    TRAP_IGNORE( AppUi()->SetOrientationL( iOriginalOrientation ));

    LOG( KVideoEditorLogFile, "CVeiEditVideoView::RestoreOrientation: out" );
    }

void CVeiEditVideoView::SetNewTempFileNeeded( const TBool aUpdateNeeded )
    {
    iUpdateTemp = aUpdateNeeded;
    }

// End of File