videditor/TrimForMms/src/VeiTrimForMmsView.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:  
*
*/



// INCLUDES
// System includes
#include <aknviewappui.h>
#include <akntitle.h>
#include <aknnavi.h>        // CAknNavigationControlContainer
#include <aknnavide.h>      // CAknNavigationDecorator
#include <AknProgressDialog.h>      // CAknProgressDialog
#include <aknsoundsystem.h>         // CAknKeySoundSystem
#include <bautils.h>        // BaflUtils
#include <barsread.h>
#include <eikprogi.h>       // CEikProgressInfo
#include <trimformms.rsg>
#include <utf.h>        // CnvUtfConverter
#include <sendui.h>     // CSendAppUi
#include <SenduiMtmUids.h>
#include <StringLoader.h>   // StringLoader 
#include <CMessageData.h>
// User includes
#include "TrimForMms.hrh"
#include "TrimForMmsAppUi.h"
#include "VeiSettings.h"
#include "VeiTrimForMmsView.h"
#include "VeiTrimForMmsContainer.h"
#include "VeiEditVideoLabelNavi.h"
#include "VideoEditorCommon.h"
#include "VeiTempMaker.h"
#include "VideoEditorCommon.h"
#include "VideoEditorDebugUtils.h"
#include "VeiErrorUi.h"

// CONSTANTS
const TInt KVedVideoClipIndex(0);
const TInt KProgressNoteMaxValue(100);
const TInt KVedTrimForMmsDefaultCba( R_AVKON_SOFTKEYS_OPTIONS_BACK );


CVeiTrimForMmsView* CVeiTrimForMmsView::NewL( CSendUi& aSendAppUi )
	{
    CVeiTrimForMmsView* self = CVeiTrimForMmsView::NewLC( aSendAppUi );
    CleanupStack::Pop( self );

    return self;
	}


CVeiTrimForMmsView* CVeiTrimForMmsView::NewLC( CSendUi& aSendAppUi )
	{
    CVeiTrimForMmsView* self = new (ELeave) CVeiTrimForMmsView( aSendAppUi );
    CleanupStack::PushL( self );
    self->ConstructL();

    return self;
	}

// -----------------------------------------------------------------------------
// CVeiTrimForMmsView::ConstructL
// Symbian 2nd phase constructor that can leave.
// -----------------------------------------------------------------------------
//
void CVeiTrimForMmsView::ConstructL()
    {
    BaseConstructL( R_VEI_TRIM_FOR_MMS_VIEW );

    iErrorUi = CVeiErrorUI::NewL( *iCoeEnv );

	iTempMaker = CVeiTempMaker::NewL();
    }

// -----------------------------------------------------------------------------
// CVeiTrimForMmsView::CVeiTrimForMmsView( CSendUi& aSendAppUi )
// C++ default constructor.
// -----------------------------------------------------------------------------
//
CVeiTrimForMmsView::CVeiTrimForMmsView( CSendUi& aSendAppUi ):
    iSendAppUi( aSendAppUi )
    {
    }


CVeiTrimForMmsView::~CVeiTrimForMmsView()
    {
    if( iContainer )
        {
        AppUi()->RemoveFromStack( iContainer );
        delete iContainer;
        }
    if( iNaviDecorator )
        {
        delete iNaviDecorator;
        }

    if( iVedMovie )
        {
		iVedMovie->UnregisterMovieObserver( this );
        delete iVedMovie;
        }

	if ( iTempMaker )
		{
		delete iTempMaker;
		iTempMaker = NULL;
		}
	if( iTempFile )
        {
		TInt err = CCoeEnv::Static()->FsSession().Delete( *iTempFile );
		if ( err ) 
			{
			// what to do when error occurs in destructor???
			}

        delete iTempFile;
        }
	
    delete iErrorUi;
    
    iProgressInfo = NULL;
    }


TUid CVeiTrimForMmsView::Id() const
    {
    return TUid::Uid( EVeiTrimForMmsView );
    }


// ----------------------------------------------------------------------------
// CVeiTrimForMmsView::HandleCommandL( TInt aCommand )
//
//  
// ----------------------------------------------------------------------------
//
void CVeiTrimForMmsView::HandleCommandL( TInt aCommand )
    {
    LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::HandleCommandL: In");
	
	TInt state;
	state = iContainer->PreviewState();

    switch ( aCommand )
        {
        /**
         * Options -> Send via multimedia
         */
        case EVeiCmdSendViaMms:
            {
            CmdSendViaMultimediaL();
            break;
            }
        /**
         * Options -> Preview
         */
        case EVeiCmdPreview:
            {		
			if(	state == EIdle || state == EStop ) 
				{
				SetTrimStateL( EFullPreview );
				PlayPreviewL();
				}
            break;
            }
        //
        // Options -> Help
        //
        case EVeiCmdTrimForMmsViewHelp:
            {
            AppUi()->HandleCommandL( aCommand );
            break;
            }
        /**
         * Options -> Back
         */
        case EAknSoftkeyBack:
            {
			if( state != EFullPreview )
				{
				CmdSoftkeyBackL();
				}
			else
				{
				SetTrimStateL( ESeek );
				}
            break;
            }
        /**
         * Adjust video length -> Ok
         */
        case EAknSoftkeyOk:
            {
			if( state == EPause )
				{
				SetTrimStateL( ESeek );
				iContainer->Stop( ETrue );
				}
			else
				{	
				CmdSoftkeyOkL();  
				}
            break;
            }
        /**
         * Adjust video length -> Cancel
         */
        case EAknSoftkeyCancel:
            {
			if( state == EPause )
				{
				SetTrimStateL( ESeek );
				iContainer->Stop( ETrue );
				}
			else
				{	
				CmdSoftkeyCancelL();
				}
            break;
            }
        default:
            {
            AppUi()->HandleCommandL( aCommand );
            break;
            }
        }

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


// ----------------------------------------------------------------------------
// CVeiTrimForMmsView::CmdSendViaMultimediaL()
//  Function for handling the Send Via Multimedia command.
//  
// ----------------------------------------------------------------------------
//
void CVeiTrimForMmsView::CmdSendViaMultimediaL()
    {
    LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: In");

        // Start processing the trimmed video
	    // Possible leave codes:
	    //	- KErrNoMemory if memory allocation fails
	    //	- KErrAccessDenied if the file access is denied
	    //	- KErrDiskFull if the disk is full
	    //	- KErrWrite if not all data could be written
	    //	- KErrBadName if the filename is bad
	    //  - KErrDirFull if the directory is full
        // : If video clip is already processed and frame is in same position
        //       do not reprocess the movie.


	UpdateNaviPaneSize();

	TBool fileExists( ETrue );
	RFs	fs = CCoeEnv::Static()->FsSession();

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

	if ( !fileExists || ( !iTempFile  ) || iProcessNeeded )
		{

		if ( iTempFile && fileExists )
			{
			User::LeaveIfError( fs.Delete( *iTempFile ) );
			delete iTempFile;
			iTempFile = NULL;
			}

		iTempFile = HBufC::NewL(KMaxFileName);

// @: check the quality setting. should we set it here to MMS compatible?

		// Quality is taken from settings and set to engine.
		ReadSettingsL( iMovieSaveSettings );

		iTempMaker->GenerateTempFileName( *iTempFile, iMovieSaveSettings.MemoryInUse(), iVedMovie->Format() );

		TEntry fileinfo;
		// 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 = iVedMovie->Format();
		
		orgPathAndName.Replace( orgPathAndName.Length()-4, 4, KExt3gp );

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

				
		iVedMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
		LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: 1, iTempFile:%S", iTempFile);
        TRAPD( processError, iVedMovie->ProcessL( *iTempFile, *this ) );
		LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: 2");
        if( processError == KErrNone )
            {
            // Text for the progress note is loaded from TBUF resource
            HBufC* noteText;
            noteText = StringLoader::LoadLC( R_VED_PROCESSING_FOR_MMS, iEikonEnv );

            // Construct and execute progress note.
            iProgressNote = new(ELeave) CAknProgressDialog( REINTERPRET_CAST(CEikDialog**, 
                                                             &iProgressNote), ETrue);
			iProgressNote->PrepareLC( R_VEI_PROGRESS_NOTE );
            iProgressNote->SetTextL( *noteText );
            
            iProgressInfo = iProgressNote->GetProgressInfoL();
			iProgressInfo->SetFinalValue( KProgressNoteMaxValue );
            
            iProgressNote->RunLD(); 

            CleanupStack::PopAndDestroy( noteText );    // Pop and destroy the text
            }
            else 
            {
            // : add error handling here
            }

        }
    else
        {
        
		RFs shareFServer;
	   	LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: shareFServer connect.");

	 	User::LeaveIfError(shareFServer.Connect());
	    shareFServer.ShareProtected();
		
		RFile openFileHandle;
    	
		TInt err = openFileHandle.Open(shareFServer,*iTempFile,EFileRead|EFileShareReadersOnly);
		if (KErrNone != err)
			{
			LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: 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 );

		iSendAppUi.CreateAndSendMessageL( KSenduiMtmMmsUid, messageData, KNullUid, EFalse );	
		
		CleanupStack::PopAndDestroy( messageData );
		 
        shareFServer.Close();
	   	LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: shareFServer closed.");
        }

    LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: Out");
    }

void CVeiTrimForMmsView::CmdSoftkeyBackL()
    {
    // Compare previous view's application uid to video editor uid.
    if( iPreviousViewId.iAppUid == KUidVideoEditor )
        {
	    CEikStatusPane* statusPane = AppUi()->StatusPane();
	    TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi );  // Navi pane UID

        CAknNavigationControlContainer *naviContainer = (CAknNavigationControlContainer*)statusPane->ControlL( naviPaneUid );
        naviContainer->Pop( iNaviDecorator );
        
        // Activate previous local view.
        AppUi()->ActivateLocalViewL( iPreviousViewId.iViewUid );
        }
    else
        {
        // Exit video editor
        AppUi()->HandleCommandL( EEikCmdExit);
        }
    }


void CVeiTrimForMmsView::CmdSoftkeyOkL()
    {
    // Set CBA labels back to view default
    Cba()->SetCommandSetL( KVedTrimForMmsDefaultCba );
    Cba()->DrawDeferred();

    PushKeySoundL( R_VED_LEFT_RIGHT_SILENT_SKEY_LIST );
    }


void CVeiTrimForMmsView::CmdSoftkeyCancelL()
    {
    // Set CBA labels back to view default
    Cba()->SetCommandSetL( KVedTrimForMmsDefaultCba );
    Cba()->DrawDeferred();

    PushKeySoundL( R_VED_LEFT_RIGHT_SILENT_SKEY_LIST );
    }


void CVeiTrimForMmsView::DoActivateL( const TVwsViewId& aPrevViewId,
                                        TUid /*aCustomMessageId*/,
                                        const TDesC8& aCustomMessage )
    {
    if( !iContainer ) 
        {
        iPreviousViewId = aPrevViewId;  // Save the previous view id

        // Disable left and right navi-key sounds
        PushKeySoundL( R_VED_LEFT_RIGHT_SILENT_SKEY_LIST );

        SetTitlePaneTextL();
        CreateNaviPaneL();
		
        STATIC_CAST( CVeiEditVideoLabelNavi*, iNaviDecorator->DecoratedControl() )->SetState( CVeiEditVideoLabelNavi::EStateTrimForMmsView );
        
        TFileName inputFileName;
       	CnvUtfConverter::ConvertToUnicodeFromUtf8( inputFileName, aCustomMessage );


		// TEST
		if (inputFileName.Length() == 0)
			{
			inputFileName.Copy( _L("c:\\Data\\Videos\\test.mp4") );
			}
		// END TEST

    
        if( !iVedMovie )
            {
            iVedMovie = CVedMovie::NewL( NULL );
            iVedMovie->RegisterMovieObserverL( this );
            iVedMovie->InsertVideoClipL( inputFileName, KVedVideoClipIndex );
			iVedMovie->SetQuality( CVedMovie::EQualityMMSInteroperability );
            }

        iContainer = CVeiTrimForMmsContainer::NewL( AppUi()->ClientRect(),
                                                    *iVedMovie, *this );
        iContainer->SetMopParent( this );
        
        AppUi()->AddToStackL( *this, iContainer );
        }

    }


void CVeiTrimForMmsView::DoDeactivate()
    {
    if( iContainer )
        {
        AppUi()->RemoveFromStack( iContainer );
        delete iContainer;
        iContainer = NULL;

        if( iVedMovie )
            {
            iVedMovie->Reset();
            iVedMovie->UnregisterMovieObserver( this );
             delete iVedMovie;
            iVedMovie = NULL;
            }
        }
    }


void CVeiTrimForMmsView::PushKeySoundL( const TInt aResourceId ) const
    {
    CAknKeySoundSystem* aknKeySoundSystem = AppUi()->KeySounds();
    aknKeySoundSystem->PushContextL( aResourceId );
    }


void CVeiTrimForMmsView::PopKeySound() const
    {
    AppUi()->KeySounds()->PopContext();
    }


void CVeiTrimForMmsView::SetTitlePaneTextL() const
    {
    TUid titleUid;
    titleUid.iUid = EEikStatusPaneUidTitle;

    CEikStatusPane* statusPane = AppUi()->StatusPane();

    CEikStatusPaneBase::TPaneCapabilities titlePaneCap = 
        statusPane->PaneCapabilities( titleUid );

    if( titlePaneCap.IsPresent() && titlePaneCap.IsAppOwned() )
        {
        CAknTitlePane* titlePane = 
            (CAknTitlePane*)statusPane->ControlL( titleUid );

		TResourceReader reader;
		iCoeEnv->CreateResourceReaderLC( reader,
            R_VEI_TRIM_FOR_MMS_VIEW_TITLE_NAME );
		titlePane->SetFromResourceL( reader );

        CleanupStack::PopAndDestroy(); //reader
        }

    }


void CVeiTrimForMmsView::CreateNaviPaneL()
    {
    TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi );  // Navi pane UID

    CEikStatusPane* statusPane = AppUi()->StatusPane();     // Get status pane

    CEikStatusPaneBase::TPaneCapabilities naviPaneCap =
        statusPane->PaneCapabilities( naviPaneUid );

    if( naviPaneCap.IsPresent() && naviPaneCap.IsAppOwned() )
        {
        CAknNavigationControlContainer *naviContainer = (CAknNavigationControlContainer*)statusPane->ControlL( naviPaneUid );
        
        CVeiEditVideoLabelNavi* editvideolabelnavi = CVeiEditVideoLabelNavi::NewLC();
        editvideolabelnavi->SetState( CVeiEditVideoLabelNavi::EStateInitializing );

        iNaviDecorator = 
            CAknNavigationDecorator::NewL( naviContainer, editvideolabelnavi,
                                       CAknNavigationDecorator::ENotSpecified );
        CleanupStack::Pop( editvideolabelnavi );

        iNaviDecorator->SetContainerWindowL( *naviContainer );		
	    iNaviDecorator->MakeScrollButtonVisible( EFalse );

        naviContainer->PushL( *iNaviDecorator );
 
        }
    }

void CVeiTrimForMmsView::UpdateNaviPaneSize()
    {
    if( iContainer )
        {
        iVedMovie->VideoClipSetCutInTime( KVedVideoClipIndex, iContainer->CutInTime() );
        iVedMovie->VideoClipSetCutOutTime( KVedVideoClipIndex, iContainer->CutOutTime() );
        }
    }
void CVeiTrimForMmsView::SetNaviPaneSizeLabelL( const TInt& aSizeInBytes )
    {
    STATIC_CAST(CVeiEditVideoLabelNavi*,
        iNaviDecorator->DecoratedControl())->SetSizeLabelL( aSizeInBytes );
    }


void CVeiTrimForMmsView::SetNaviPaneDurationLabelL(
                                    const TTimeIntervalMicroSeconds& aTime )
    {
    STATIC_CAST(CVeiEditVideoLabelNavi*, 
       iNaviDecorator->DecoratedControl())->SetDurationLabelL( aTime.Int64() );
    }

void CVeiTrimForMmsView::UpdateNaviPaneL( const TInt& aSizeInBytes, 
								const TTimeIntervalMicroSeconds& aTime )
	{ 
	TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi*, iNaviDecorator->DecoratedControl() )->GetMaxMmsSize();

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

    STATIC_CAST(CVeiEditVideoLabelNavi*,
        iNaviDecorator->DecoratedControl())->SetSizeLabelL( aSizeInBytes );
	
    STATIC_CAST(CVeiEditVideoLabelNavi*, 
       iNaviDecorator->DecoratedControl())->SetDurationLabelL( aTime.Int64() );
 	}

void CVeiTrimForMmsView::HandleResourceChange(TInt aType)
    {
    LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsView::HandleResourceChange() In, aType:%d", aType);
    
    if (KAknsMessageSkinChange == aType && iNaviDecorator)
        {
        // Handle skin change in the navi label controls - they do not receive 
        // it automatically since they are not in the control stack
        CCoeControl* navi = iNaviDecorator->DecoratedControl();
        if (navi)
        	{
        	navi->HandleResourceChange( aType );
        	}
        }
    
    LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::HandleResourceChange() Out");
    }

// ============= MVedMovieProcessingObserver FUNCTIONS START ==================

// ----------------------------------------------------------------------------
// CVeiTrimForMmsView::NotifyMovieProcessingStartedL( CVedMovie& aMovie )
//
// Called to notify that a new movie processing operation has been started.
// ----------------------------------------------------------------------------
//
void CVeiTrimForMmsView::NotifyMovieProcessingStartedL( CVedMovie& /*aMovie*/ )
    {
    }


// ----------------------------------------------------------------------------
// CVeiTrimForMmsView::NotifyMovieProcessingProgressed( CVedMovie& aMovie,
//                                                      TInt aPercentage )
//
// Called to inform about the current progress of the movie processing
// operation.
// ----------------------------------------------------------------------------
//
void CVeiTrimForMmsView::NotifyMovieProcessingProgressed( CVedMovie&/*aMovie*/,
                                                         TInt aPercentage )
    {
    LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingProgressed(): In");

    // Increment the progress bar.
    iProgressInfo->SetAndDraw( aPercentage );
    }


// ----------------------------------------------------------------------------
// CVeiTrimForMmsView::NotifyMovieProcessingCompleted( CVedMovie& aMovie,
//                                                     TInt aError )
//
// Called to notify that the movie processing operation has been completed.
// ----------------------------------------------------------------------------
//
void CVeiTrimForMmsView::NotifyMovieProcessingCompleted( CVedMovie& /*aMovie*/,
                                                        TInt aError )
    {
    LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted(): In, aError:%d", aError);

	if( !aError )
		{
		ProcessNeeded( EFalse );
		}

    __ASSERT_ALWAYS( iProgressNote, User::Panic(_L("CVeiTrimForMmsView"),1) );

	// Draw the progress bar to 100%.
    iProgressInfo->SetAndDraw( 100 );

    // Delete the note.
    TRAP_IGNORE( iProgressNote->ProcessFinishedL() );

	RFs shareFServer;
	LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted: shareFServer connect.");

	User::LeaveIfError(shareFServer.Connect());
	shareFServer.ShareProtected();
		
	RFile openFileHandle;

	TInt err = openFileHandle.Open(shareFServer,*iTempFile,EFileRead|EFileShareReadersOnly);
	if (KErrNone != err)
		{
		LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted: 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 );

	iSendAppUi.CreateAndSendMessageL( KSenduiMtmMmsUid, messageData, KNullUid, EFalse );	
		
	CleanupStack::PopAndDestroy( messageData );
		 
    shareFServer.Close();

    LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted: shareFServer closed.");
	LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted(): Out");
    }

// ============== MVedMovieProcessingObserver FUNCTIONS END ===================


/**
 * Called to notify that a new video clip has been successfully
 * added to the movie. Note that the indices and the start and end times
 * of the video clips after the new clip have also changed as a result.
 * Note that the transitions may also have changed. 
 *
 * @param aMovie  movie
 * @param aIndex  index of video clip in movie
 */
void CVeiTrimForMmsView::NotifyVideoClipAdded( CVedMovie& /*aMovie*/,
                                               TInt /*aIndex*/ )
    {
		ProcessNeeded( ETrue );
    }


/**
 * Called to notify that adding a new video clip to the movie has failed.
 *
 * Possible error codes:
 *	- <code>KErrNotFound</code> if there is no file with the specified name
 *    in the specified directory (but the directory exists)
 *	- <code>KErrPathNotFound</code> if the specified directory
 *    does not exist
 *	- <code>KErrUnknown</code> if the specified file is of unknown format
 *	- <code>KErrNotSupported</code> if the format of the file is recognized but
 *    adding it to the movie is not supported (e.g., it is of different resolution
 *    or format than the other clips)
 *
 * @param aMovie  movie
 * @param aError  one of the system wide error codes
 */
void CVeiTrimForMmsView::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, 
                                                      TInt /*aError*/ )
    {
    User::Panic( _L("MmsView"), 20 );
    }


void CVeiTrimForMmsView::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, 
                                                 TInt /*aIndex*/ )
    {
    }
	

void CVeiTrimForMmsView::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/,
                                                        TInt /*aOldIndex*/, 
									                    TInt /*aNewIndex*/ )
    {
    }


// ----------------------------------------------------------------------------
// CVeiTrimForMmsView::NotifyVideoClipTimingsChanged( CVedMovie& aMovie, 
//                                                    TInt aIndex )
//
// Called to notify that the timings (that is, the cut in or cut out time or
// the speed and consequently the end time, edited duration, and possibly audio
// settings) of a video clip have changed (but the index of the clip has 
// not changed). Note that the start and end times of the video clips 
// after the changed clip have also changed.
// ----------------------------------------------------------------------------
//
void CVeiTrimForMmsView::NotifyVideoClipTimingsChanged( CVedMovie& /*aMovie*/,
            										    TInt /*aIndex*/ )
    {
    LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyVideoClipTimingsChanged()");
    }


void CVeiTrimForMmsView::NotifyVideoClipColorEffectChanged( CVedMovie& /*aMovie*/,
												   TInt /*aIndex*/ )
    {
    }

	
void CVeiTrimForMmsView::NotifyVideoClipAudioSettingsChanged( CVedMovie& /*aMovie*/,
											         TInt /*aIndex*/ )
    {
    }


void CVeiTrimForMmsView::NotifyVideoClipGeneratorSettingsChanged( CVedMovie& /*aMovie*/,
											             TInt /*aIndex*/ )
    {
    }


void CVeiTrimForMmsView::NotifyVideoClipDescriptiveNameChanged( CVedMovie& /*aMovie*/,
																TInt /*aIndex*/ )
    {
    }


void CVeiTrimForMmsView::NotifyStartTransitionEffectChanged( CVedMovie& /*aMovie*/ )
    {
    }


void CVeiTrimForMmsView::NotifyMiddleTransitionEffectChanged( CVedMovie& /*aMovie*/, 
													 TInt /*aIndex*/ )
    {
    }


void CVeiTrimForMmsView::NotifyEndTransitionEffectChanged( CVedMovie& /*aMovie*/ )
    {
    }


void CVeiTrimForMmsView::NotifyAudioClipAdded( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
    {
    }


void CVeiTrimForMmsView::NotifyAudioClipAddingFailed( CVedMovie& /*aMovie*/, TInt /*aError*/ )
    {
    }


void CVeiTrimForMmsView::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
    {
    }


void CVeiTrimForMmsView::NotifyAudioClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, 
									           TInt /*aNewIndex*/ )
    {
    }


void CVeiTrimForMmsView::NotifyAudioClipTimingsChanged( CVedMovie& /*aMovie*/,
											   TInt /*aIndex*/ )
    {
    }


void CVeiTrimForMmsView::NotifyMovieQualityChanged( CVedMovie& /*aMovie*/ )
    {
    }

void CVeiTrimForMmsView::NotifyMovieReseted(CVedMovie& /*aMovie*/ )
    {
    }

void CVeiTrimForMmsView::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/)
	{
	}

void CVeiTrimForMmsView::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, 
                                                         TInt /*aClipIndex*/, 
                                                         TInt /*aMarkIndex*/)
	{
	}

void CVeiTrimForMmsView::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, 
                                                        TInt /*aClipIndex*/, 
                                                        TInt /*aMarkIndex*/)
	{
	}

void CVeiTrimForMmsView::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/,
                                                         TInt /*aClipIndex*/, 
                                                         TInt /*aMarkIndex*/)
	{
	}

void CVeiTrimForMmsView::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, 
                                                        TInt /*aClipIndex*/, 
                                                        TInt /*aMarkIndex*/)
	{
	}

void CVeiTrimForMmsView::PlayPreviewL()
	{
	TRect rect( AppUi()->ApplicationRect() );
	iContainer->SetRect( rect );
	
	iContainer->PlayL( iVedMovie->VideoClipInfo( 0 )->FileName(), rect  );
	}

void CVeiTrimForMmsView::HandleStatusPaneSizeChange()
	{
	if ( iContainer )
		{
		iContainer->SetRect( AppUi()->ClientRect() );
		}

	}
void CVeiTrimForMmsView::SetTrimStateL( TTrimState aState )
	{
	iTrimState = aState;
	CEikStatusPane *statusPane;
	CAknTitlePane* titlePane;

	TResourceReader reader1;

	switch ( iTrimState )
        {
	case EFullPreview:		               

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

		case ESeek:
			iContainer->SetRect( AppUi()->ClientRect() );
			statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); 
	
			titlePane = (CAknTitlePane*) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) );
   			iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_TRIM_FOR_MMS_VIEW_TITLE_NAME );
			titlePane->SetFromResourceL( reader1 );
			CleanupStack::PopAndDestroy(); //reader1
			
			Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
 			Cba()->DrawDeferred();
			
			break;
			
		default:
			{
			break;
			}

		}
	}

void CVeiTrimForMmsView::DialogDismissedL( TInt aButtonId )
	{
	if ( aButtonId != EAknSoftkeyDone )
		{	
		iVedMovie->CancelProcessing();        
        }
    iProgressInfo = NULL;
	}

void CVeiTrimForMmsView::ProcessNeeded( TBool aProcessNeed )
	{
	iProcessNeeded = aProcessNeed;
	}

void CVeiTrimForMmsView::ShowGlobalErrorNoteL( const TInt aError ) const
	{	
	iErrorUi->ShowGlobalErrorNote( aError );
	}	

//=============================================================================
void CVeiTrimForMmsView::ReadSettingsL( TVeiSettings& aSettings ) const
	{
	LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::ReadSettingsL: in");

	STATIC_CAST( CTrimForMmsAppUi*, AppUi() )->ReadSettingsL( aSettings );

	LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::ReadSettingsL: out");
	}


// End of File