--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videditor/SimpleCutVideo/src/VeiSimpleCutVideoView.cpp Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,1869 @@
+/*
+* 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 <vedsimplecutvideo.rsg>
+
+#include <akntitle.h>
+#include <stringloader.h>
+#include <aknnotewrappers.h>
+#include <aknquerydialog.h>
+#include <aknlists.h>
+#include <aknPopup.h>
+#include <AknProgressDialog.h>
+#include <eikprogi.h>
+#include <CAknMemorySelectionDialog.h>
+#include <CAknFileNamePromptDialog.h>
+#include <apparc.h>
+#include <aknselectionlist.h>
+#include <sysutil.h>
+#include <aknwaitdialog.h>
+#include <e32property.h>
+#include <PathInfo.h>
+#include <AknCommonDialogsDynMem.h>
+#include <CAknMemorySelectionDialogMultiDrive.h>
+
+// User includes
+#include "VeiSimpleCutVideoAppUi.h"
+#include "VeiSimpleCutVideoView.h"
+#include "VeiSimpleCutVideoContainer.h"
+#include "VedSimpleCutVideo.hrh"
+#include "veitempmaker.h"
+#include "VeiTimeLabelNavi.h"
+#include "videoeditorcommon.h"
+#include "VideoeditorUtils.h"
+#include "VeiErrorUi.h"
+#include "veinavipanecontrol.h"
+
+void CVeiSimpleCutVideoView::ConstructL()
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::ConstructL: in");
+
+ BaseConstructL( R_VEI_CUT_VIDEO_VIEW );
+
+ iCVeiNaviPaneControl = CVeiNaviPaneControl::NewL( StatusPane() );
+
+ iErrorUI = CVeiErrorUI::NewL( *iCoeEnv );
+
+ iTimeUpdater = CPeriodic::NewL( CActive::EPriorityLow );
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::ConstructL: creating iMovie");
+ iMovie = CVedMovie::NewL( NULL );
+ iMovie->RegisterMovieObserverL( this );
+
+ iTempMaker = CVeiTempMaker::NewL();
+
+ iOverWriteFile = EFalse;
+ iPaused = EFalse;
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::ConstructL: out");
+ }
+
+// ---------------------------------------------------------
+TInt CVeiSimpleCutVideoView::AddClipL( const TDesC& aFilename, TBool /*aStartNow*/ )
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::AddClipL: In: %S", &aFilename);
+
+ iMovie->InsertVideoClipL( aFilename, 0 );
+
+ iWaitDialog = new ( ELeave ) CAknWaitDialog(
+ REINTERPRET_CAST( CEikDialog**, &iWaitDialog ), ETrue);
+ iWaitDialog->PrepareLC(R_VEI_WAIT_NOTE_WITH_CANCEL);
+ iWaitDialog->SetCallback(this);
+
+ HBufC* stringholder = StringLoader::LoadLC( R_VEI_OPENING, iEikonEnv );
+ iWaitDialog->SetTextL( *stringholder );
+ CleanupStack::PopAndDestroy(stringholder);
+
+ iWaitDialog->RunLD();
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::AddClipL: Out");
+ return KErrNone;
+ }
+
+
+// ---------------------------------------------------------
+// CVeiSimpleCutVideoView::~CVeiSimpleCutVideoView()
+// ?implementation_description
+// ---------------------------------------------------------
+//
+CVeiSimpleCutVideoView::~CVeiSimpleCutVideoView()
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::~CVeiSimpleCutVideoView(): In");
+
+ if ( iProgressNote )
+ {
+ delete iProgressNote;
+ iProgressNote = NULL;
+ }
+ if ( iAnimatedProgressDialog )
+ {
+ delete iAnimatedProgressDialog;
+ iAnimatedProgressDialog = NULL;
+ }
+
+ if (iWaitDialog)
+ {
+ CloseWaitDialog();
+ iWaitDialog->MakeVisible( EFalse );
+ delete iWaitDialog;
+ iWaitDialog = NULL;
+ }
+
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ delete iContainer;
+ iContainer = 0;
+ }
+
+ if ( iTimeUpdater )
+ {
+ iTimeUpdater->Cancel();
+ delete iTimeUpdater;
+ }
+
+ if ( iErrorUI )
+ {
+ delete iErrorUI;
+ }
+
+ if ( iMovie )
+ {
+ iMovie->Reset();
+ iMovie->UnregisterMovieObserver( this );
+ delete iMovie;
+ iMovie = NULL;
+ }
+
+ if ( iTempMaker )
+ {
+ delete iTempMaker;
+ iTempMaker = NULL;
+ }
+
+ if ( iSaveToFileName )
+ {
+ delete iSaveToFileName;
+ iSaveToFileName = NULL;
+ }
+
+ if ( iTempFile )
+ {
+ TInt err = iEikonEnv->FsSession().Delete( *iTempFile );
+ if ( err )
+ {
+ // what to do when error occurs in destructor???
+ }
+ delete iTempFile;
+ iTempFile = NULL;
+ }
+
+ delete iCallBack;
+ delete iCVeiNaviPaneControl;
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::~CVeiSimpleCutVideoView(): Out");
+ }
+
+TUid CVeiSimpleCutVideoView::Id() const
+ {
+ return TUid::Uid( EVeiSimpleCutVideoView );
+ }
+
+void CVeiSimpleCutVideoView::DialogDismissedL( TInt aButtonId )
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: In, abuttonId:%d", aButtonId);
+ if (iSaving)
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 2");
+ iSaving = EFalse;
+ if ( aButtonId != EAknSoftkeyDone )
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 3");
+ iMovie->CancelProcessing();
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 4");
+ }
+ else if (KErrNone == iErrorNmb)
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 5");
+ iErrorNmb = 0;
+ RFs& fs = iEikonEnv->FsSession();
+ CFileMan* fileman = CFileMan::NewL( fs );
+ CleanupStack::PushL( fileman );
+
+ TInt moveErr( KErrNone );
+
+ // the user selects to overwrite the existing file
+ if (iOverWriteFile)
+ {
+ // temp file located in the same drive as the target file
+ if ( iTempFile->Left(1) == iMovie->VideoClipInfo( iIndex )->FileName().Left(1) )
+ {
+ moveErr = fileman->Rename( *iTempFile, iMovie->VideoClipInfo( iIndex )->FileName(), CFileMan::EOverWrite );
+ }
+ else
+ {
+ moveErr = fileman->Move( *iTempFile, iMovie->VideoClipInfo( iIndex )->FileName(), CFileMan::EOverWrite );
+ }
+ if (!moveErr)
+ {
+ //AddClipL( iMovie->VideoClipInfo( iIndex )->FileName(), NULL );
+ ClearInOutL(ETrue, ETrue);
+ iContainer->StopL();
+ TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL();
+ iContainer->GetThumbL( iMovie->VideoClipInfo( iIndex )->FileName() );
+ }
+ }
+ // the user selects to save with a new file name
+ else
+ {
+ // both files located in the same drive
+ if ( iTempFile->Left(1) == iSaveToFileName->Left(1) )
+ {
+ moveErr = fileman->Rename( *iTempFile, *iSaveToFileName );
+ }
+ else
+ {
+ moveErr = fileman->Move( *iTempFile, *iSaveToFileName );
+ }
+ if (!moveErr)
+ {
+ ClearInOutL(ETrue, ETrue);
+ iContainer->StopL();
+ iMovie->RemoveVideoClip(0);
+ AddClipL( *iSaveToFileName, NULL );
+ }
+ }
+ CleanupStack::PopAndDestroy( fileman );
+
+ delete iTempFile;
+ iTempFile = NULL;
+
+ if ( moveErr )
+ {
+ iErrorUI->ShowGlobalErrorNote( moveErr );
+ }
+
+ //if ( BaflUtils::FileExists(fs, *iSaveToFileName) )
+ // Checking for iSaveToFileName doesn't work when overwriting so moveErr has to be used.
+ else
+ {
+ // Video saved successfully!
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 6");
+
+ // The marks can be removed now that the video is saved
+ // ClearInOutL(ETrue, ETrue);
+ // iContainer->StopL();
+ //TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL();
+
+ // Publish & Subscribe API used to make the saved file name available to AIW provider
+ 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()));
+
+
+ // the user has selected "Cut" or "Exit"
+ if (!iSaveOnly)
+ {
+ //AppUi()->Exit();
+ if (! iCallBack)
+ {
+ TCallBack cb (CVeiSimpleCutVideoView::AsyncExit, this);
+ iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard);
+ }
+ iCallBack->CallBack();
+ }
+
+ }
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 7");
+ }
+ else
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 8");
+ iErrorUI->ShowGlobalErrorNote( iErrorNmb );
+ iErrorNmb = 0;
+ }
+ }
+ else if (KErrCancel != aButtonId && iErrorNmb)
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 9");
+ if (KErrCorrupt == iErrorNmb || KErrTooShortVideoForCut == iErrorNmb)
+ {
+ HBufC* stringholder = StringLoader::LoadLC( R_VEI_VIDEO_FAILED, iEikonEnv );
+ CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue );
+ dlg->ExecuteLD( *stringholder );
+ CleanupStack::PopAndDestroy( stringholder );
+ }
+ else
+ {
+ iErrorUI->ShowGlobalErrorNote( iErrorNmb );
+ }
+
+ if (! iCallBack)
+ {
+ TCallBack cb (CVeiSimpleCutVideoView::AsyncExit, this);
+ iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard);
+ }
+ iCallBack->CallBack();
+ iErrorNmb = 0;
+ }
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: Out");
+ }
+
+TInt CVeiSimpleCutVideoView::AsyncExit(TAny* aThis)
+ {
+ LOG( KVideoEditorLogFile, "CVeiSimpleCutVideoView::AsyncExit");
+
+ // 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.
+ CVeiSimpleCutVideoView* view = static_cast<CVeiSimpleCutVideoView*>(aThis);
+ view->PrepareForTermination();
+ view->AppUi()->Exit();
+ return KErrNone;
+ }
+
+void CVeiSimpleCutVideoView::DynInitMenuPaneL( TInt aResourceId,CEikMenuPane* aMenuPane )
+ {
+ TInt state = iContainer->State();
+
+ if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU_CLEAR_MARKS)
+ {
+ // delete in, out, in & out as necessary.
+
+ if (iMovie->VideoClipCutInTime(iIndex) <= TTimeIntervalMicroSeconds(0))
+ {
+ aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksIn, ETrue);
+ }
+ if (iMovie->VideoClipCutOutTime(iIndex) >= iMovie->VideoClipInfo(iIndex)->Duration())
+ {
+ aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksOut, ETrue);
+ }
+
+ if (!((iMovie->VideoClipCutOutTime(iIndex) < iMovie->VideoClipInfo(iIndex)->Duration())
+ && (iMovie->VideoClipCutInTime(iIndex) > TTimeIntervalMicroSeconds(0))))
+ {
+ aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksInOut, ETrue);
+ }
+ }
+
+ if ( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU )
+ {
+ if ( iPopupMenuOpened != EFalse )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoTakeSnapshot, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewHelp, ETrue );
+ }
+ if ( !IsCutMarkSet() )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewSave, ETrue );
+ }
+ }
+ if ( !(( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU ) ||
+ ( aResourceId == R_VEI_CUT_VIDEO_VIEW_CONTEXT_MENU ) ) )
+ return;
+
+ if ( iContainer->PlaybackPositionL() >= iContainer->TotalLength() )
+ {
+ if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU)
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue );
+ }
+
+ }
+ if ( ( state == CVeiSimpleCutVideoContainer::EStatePaused ) ||
+ ( state == CVeiSimpleCutVideoContainer::EStateInitializing ) )
+ {
+ if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU)
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue );
+ }
+ }
+
+ if ( ( state != CVeiSimpleCutVideoContainer::EStateStopped ) &&
+ ( state != CVeiSimpleCutVideoContainer::EStateStoppedInitial ) &&
+ ( state != CVeiSimpleCutVideoContainer::EStatePaused ) )
+ {
+ if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU)
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue );
+ }
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue );
+ }
+ else
+ {
+ TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL();
+ CVedVideoClipInfo* info = iMovie->VideoClipInfo( iIndex );
+
+ TInt cutInFrameIndex = info->GetVideoFrameIndexL( iMovie->VideoClipCutInTime( iIndex ));
+ TInt cutOutFrameIndex = info->GetVideoFrameIndexL( iMovie->VideoClipCutOutTime( iIndex ));
+ TInt videoFrameCount = info->VideoFrameCount();
+
+ // if we are in the existing start/end mark position the start/end mark is removed from the menu
+ if (info->GetVideoFrameIndexL(pos) == cutInFrameIndex)
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkIn );
+ }
+ else if (info->GetVideoFrameIndexL(pos) == cutOutFrameIndex)
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkOut );
+ }
+
+ if( cutInFrameIndex < (videoFrameCount-1 ) )
+ {
+ cutInFrameIndex++;
+ }
+
+ if( cutOutFrameIndex > 0 )
+ {
+ cutOutFrameIndex--;
+ }
+
+ TTimeIntervalMicroSeconds nextFramePosCutIn = info->VideoFrameStartTimeL( cutInFrameIndex );
+ TTimeIntervalMicroSeconds previousFramePosCutOut = info->VideoFrameStartTimeL( cutOutFrameIndex );
+
+ if ( pos < nextFramePosCutIn )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkOut );
+ }
+ else
+ {
+ if ( pos > previousFramePosCutOut )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkIn );
+ }
+ }
+ // something crashes somewhere outside VED UI if end mark is put to near to begin
+ TInt ind = -1;
+ if (aMenuPane->MenuItemExists(EVeiCmdCutVideoViewMarkOut, ind) && pos.Int64() < KMinCutVideoLength)
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkOut );
+ }
+ }
+ if ( ( iMovie->VideoClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) &&
+ iMovie->VideoClipCutOutTime( iIndex ) == iMovie->VideoClipInfo( iIndex )->Duration() ) )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewPlayMarked );
+ }
+ if ( state != CVeiSimpleCutVideoContainer::EStatePlayingMenuOpen &&
+ state != CVeiSimpleCutVideoContainer::EStatePaused )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewContinue );
+ }
+ if ( ( state == CVeiSimpleCutVideoContainer::EStateStopped ) ||
+ ( state == CVeiSimpleCutVideoContainer::EStateStoppedInitial ) ||
+ ( state == CVeiSimpleCutVideoContainer::EStateOpening ) ||
+ ( state == CVeiSimpleCutVideoContainer::EStateBuffering ) )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewStop );
+ }
+
+ if ( ( iMovie->VideoClipCutOutTime( iIndex ) >= iMovie->VideoClipInfo( iIndex )->Duration() ) &&
+ ( iMovie->VideoClipCutInTime( iIndex ) <= TTimeIntervalMicroSeconds( 0 ) ) )
+ {
+ if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU)
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue );
+ }
+ }
+ }
+
+void CVeiSimpleCutVideoView::HandleCommandL(TInt aCommand)
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::HandleCommandL( %d ): In", aCommand);
+
+ switch ( aCommand )
+ {
+ case EAknSoftkeyOk:
+ {
+ iPopupMenuOpened = ETrue;
+ if (iContainer->State() == CVeiSimpleCutVideoContainer::EStatePlaying)
+ {
+ PausePreviewL();
+ iContainer->SetStateL(CVeiSimpleCutVideoContainer::EStatePlayingMenuOpen);
+ }
+
+ MenuBar()->TryDisplayMenuBarL();
+ if (iContainer->State() == CVeiSimpleCutVideoContainer::EStatePlayingMenuOpen)
+ {
+ iContainer->SetStateL(CVeiSimpleCutVideoContainer::EStatePaused);
+ }
+ iPopupMenuOpened = EFalse;
+ break;
+ }
+ case EVeiCmdCutVideoViewBack:
+ case EAknSoftkeyBack:
+ {
+ PrepareForTermination();
+ AppUi()->Exit();
+ break;
+ }
+ case EVeiCmdCutVideoViewExit:
+ {
+ iSaveOnly = EFalse;
+ StopNaviPaneUpdateL();
+
+ iContainer->StopL();
+ iContainer->CloseStreamL();
+
+ if ( ( iMovie->VideoClipCutInTime( 0 ) > TTimeIntervalMicroSeconds( 0 ) ) ||
+ ( iMovie->VideoClipCutOutTime( 0 ) < iMovie->VideoClipInfo(0)->Duration() ) )
+ {
+ if (VideoEditorUtils::LaunchSaveChangesQueryL())
+ {
+ QueryAndSaveL();
+ }
+ else
+ {
+ PrepareForTermination();
+ AppUi()->Exit();
+ }
+ }
+ else
+ {
+ PrepareForTermination();
+ AppUi()->Exit();
+ }
+ }
+ break;
+ case EVeiCmdCutVideoViewCut:
+ {
+ iSaveOnly = EFalse;
+ StopNaviPaneUpdateL();
+
+ iContainer->StopL();
+ iContainer->CloseStreamL();
+
+ if ( ( iMovie->VideoClipCutInTime( 0 ) > TTimeIntervalMicroSeconds( 0 ) ) ||
+ ( iMovie->VideoClipCutOutTime( 0 ) < iMovie->VideoClipInfo(0)->Duration() ) )
+ {
+ QueryAndSaveL();
+ }
+ break;
+ }
+ case EVeiCmdCutVideoViewSave:
+ {
+ iSaveOnly = ETrue;
+
+ StopNaviPaneUpdateL();
+ iContainer->StopL();
+ iContainer->CloseStreamL();
+
+ QueryAndSaveL();
+ break;
+ }
+ case EVeiCmdCutVideoViewMarkIn:
+ {
+ iCVeiNaviPaneControl->SetPauseIconVisibilityL( ETrue );
+ MarkInL();
+ break;
+ }
+ case EVeiCmdCutVideoViewMarkOut:
+ {
+ iCVeiNaviPaneControl->SetPauseIconVisibilityL( ETrue );
+ MarkOutL();
+ break;
+ }
+ case EVeiCmdCutVideoViewClearMarksInOut:
+ {
+ ClearInOutL( ETrue, ETrue );
+ break;
+ }
+ case EVeiCmdCutVideoViewClearMarksIn:
+ {
+ ClearInOutL( ETrue, EFalse );
+ break;
+ }
+ case EVeiCmdCutVideoViewClearMarksOut:
+ {
+ ClearInOutL( EFalse, ETrue );
+ break;
+ }
+ case EVeiCmdCutVideoViewPlayMarked:
+ {
+ iCVeiNaviPaneControl->SetPauseIconVisibilityL( EFalse );
+ PlayMarkedL();
+ break;
+ }
+ case EVeiCmdCutVideoViewPlay:
+ {
+ iCVeiNaviPaneControl->SetPauseIconVisibilityL( EFalse );
+ PlayPreviewL();
+ break;
+ }
+ case EVeiCmdCutVideoViewStop:
+ {
+ iCVeiNaviPaneControl->SetPauseIconVisibilityL( EFalse );
+ StopNaviPaneUpdateL();
+ iContainer->StopL();
+ break;
+ }
+ case EVeiCmdCutVideoViewContinue:
+ {
+ iCVeiNaviPaneControl->SetPauseIconVisibilityL( EFalse );
+ PlayPreviewL();
+ break;
+ }
+ case EVeiCmdCutVideoTakeSnapshot:
+ {
+ if( IsEnoughFreeSpaceToSaveL() )
+ {
+ iContainer->TakeSnapshotL();
+ }
+ break;
+ }
+
+ //
+ // Options->Help
+ //
+ case EVeiCmdCutVideoViewHelp:
+ {
+ // CS Help launching is handled in Video Editor's AppUi.
+ AppUi()->HandleCommandL( EVeiCmdCutVideoViewHelp );
+ break;
+ }
+ default:
+ {
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ }
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::HandleCommandL: out");
+ }
+
+void CVeiSimpleCutVideoView::NotifyMovieProcessingStartedL( CVedMovie& /*aMovie*/ )
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyMovieProcessingStartedL: In");
+ iProcessed = 0;
+ // @ : r_ved_cutting_note_animation
+ //StartAnimatedProgressNote();
+ StartProgressNoteL();
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyMovieProcessingStartedL: Out");
+ }
+
+void CVeiSimpleCutVideoView::NotifyMovieProcessingProgressed( CVedMovie& /*aMovie*/, TInt aPercentage )
+ {
+ //Not allow screensaver, when processing image.
+ User::ResetInactivityTime();
+
+ iProcessed = aPercentage;
+ if (iAnimatedProgressDialog)
+ {
+ iAnimatedProgressDialog->GetProgressInfoL()->SetAndDraw( aPercentage );
+ }
+ else if (iProgressNote)
+ {
+ iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage );
+ }
+ }
+
+void CVeiSimpleCutVideoView::NotifyMovieProcessingCompleted( CVedMovie& /*aMovie*/, TInt aError )
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyMovieProcessingCompleted: In, aError:%d", aError);
+ iErrorNmb = aError;
+ if (iAnimatedProgressDialog)
+ {
+ iAnimatedProgressDialog->GetProgressInfoL()->SetAndDraw( 100 );
+ delete iAnimatedProgressDialog;
+ iAnimatedProgressDialog = NULL;
+ DialogDismissedL(EAknSoftkeyDone);
+ //TRAP_IGNORE( iAnimatedProgressDialog->ProcessFinishedL() );
+ }
+ else if (iProgressNote)
+ {
+ iProgressNote->GetProgressInfoL()->SetAndDraw(100);
+ iProgressNote->ProcessFinishedL();
+ }
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyMovieProcessingCompleted: Out");
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipAdded( CVedMovie& /*aMovie*/, TInt aIndex)
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyVideoClipAdded: In");
+
+ iErrorNmb = 0;
+
+ TTimeIntervalMicroSeconds duration = iMovie->Duration();
+ LOGFMT(KVideoEditorLogFile, "CVeiCutVideCVeiSimpleCutVideoView::NotifyVideoClipAdded, 2, duration:%Ld", duration.Int64());
+// if (duration.Int64() < KMinCutVideoLength)
+// {
+// LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyVideoClipAdded: 3");
+// iErrorNmb = KErrTooShortVideoForCut;
+// iClosing = ETrue;
+// }
+// else
+ {
+ iAudioMuted = !( iMovie->VideoClipEditedHasAudio( aIndex ) );
+
+ iCVeiNaviPaneControl->SetPauseIconVisibilityL( EFalse );
+
+ if ( iAudioMuted )
+ {
+ iCVeiNaviPaneControl->SetVolumeIconVisibilityL( EFalse );
+ VolumeMuteL();
+ }
+ else
+ {
+ iCVeiNaviPaneControl->SetVolumeIconVisibilityL( ETrue );
+ }
+
+// iContainer->SetInTime( iMovie->VideoClipCutInTime( aIndex ) );
+// iContainer->SetOutTime( iMovie->VideoClipCutOutTime( aIndex ) );
+ iContainer->GetThumbL( iMovie->VideoClipInfo( iIndex )->FileName() );
+ }
+
+ if (iWaitDialog)
+ {
+ delete iWaitDialog;
+ iWaitDialog = NULL;
+ }
+// CloseWaitDialog();
+ iContainer->DrawDeferred();
+
+ // video clip has to be added before setting the title pane text
+ // : handle leave
+ SetTitlePaneTextL();
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyVideoClipAdded: Out");
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, TInt aError )
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyVideoClipAddingFailed: In, aError:%d", aError);
+ iErrorNmb = aError;
+ iClosing = ETrue;
+
+ CloseWaitDialog();
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyVideoClipAddingFailed: Out");
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/,
+ TInt /*aNewIndex*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipColorEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipAudioSettingsChanged( CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyStartTransitionEffectChanged( CVedMovie& /*aMovie*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyMiddleTransitionEffectChanged( CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyEndTransitionEffectChanged( CVedMovie& /*aMovie*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyAudioClipAdded( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyAudioClipAddingFailed( CVedMovie& /*aMovie*/, TInt /*aError*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyAudioClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/,
+ TInt /*aNewIndex*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyAudioClipTimingsChanged( CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyMovieReseted( CVedMovie& /*aMovie*/ )
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/,
+ TInt /*aIndex*/)
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipDescriptiveNameChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/)
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyMovieQualityChanged(CVedMovie& /*aMovie*/)
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/)
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/)
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/)
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/)
+ {
+ }
+
+void CVeiSimpleCutVideoView::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/,
+ TInt /*aClipIndex*/,
+ TInt /*aMarkIndex*/)
+ {
+ }
+
+void CVeiSimpleCutVideoView::CloseWaitDialog()
+ {
+ if ( iWaitDialog )
+ {
+ TRAP_IGNORE( iWaitDialog->ProcessFinishedL() );
+ }
+ }
+
+
+void CVeiSimpleCutVideoView::DoActivateL(
+ const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/)
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DoActivateL, In");
+ iPaused = EFalse;
+ if (!iContainer)
+ {
+ iContainer = CVeiSimpleCutVideoContainer::NewL( AppUi()->ClientRect(), *this, *iErrorUI );
+ iContainer->SetMopParent( this );
+ AppUi()->AddToStackL( *this, iContainer );
+ iCVeiNaviPaneControl->SetObserver( iContainer );
+ }
+
+ UpdateCBAL( CVeiSimpleCutVideoContainer::EStateInitializing );
+
+ CheckMemoryCardAvailabilityL();
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DoActivateL, out");
+ }
+
+// ---------------------------------------------------------
+// CVeiSimpleCutVideoView::HandleCommandL(TInt aCommand)
+// ?implementation_description
+// ---------------------------------------------------------
+//
+void CVeiSimpleCutVideoView::DoDeactivate()
+ {
+ if ( iTimeUpdater )
+ {
+ iTimeUpdater->Cancel();
+ }
+
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+
+ delete iContainer;
+ iContainer = NULL;
+ }
+ }
+
+void CVeiSimpleCutVideoView::PlayPreviewL()
+ {
+ iPaused = EFalse;
+ StartNaviPaneUpdateL();
+ iContainer->PlayL( iMovie->VideoClipInfo( iIndex )->FileName() );
+ }
+
+void CVeiSimpleCutVideoView::PausePreviewL()
+ {
+ iCVeiNaviPaneControl->SetPauseIconVisibilityL( ETrue );
+ StopNaviPaneUpdateL();
+
+ iContainer->PauseL();
+ }
+
+void CVeiSimpleCutVideoView::UpdateCBAL(TInt aState)
+ {
+ MenuBar()->SetContextMenuTitleResourceId( R_VEI_MENUBAR_CUT_VIDEO_VIEW_CONTEXT );
+ switch (aState)
+ {
+ case CVeiSimpleCutVideoContainer::EStateInitializing:
+ case CVeiSimpleCutVideoContainer::EStateOpening:
+ case CVeiSimpleCutVideoContainer::EStateBuffering:
+ {
+ if (! iClosing)
+ {
+ Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY);
+ }
+ break;
+ }
+ case CVeiSimpleCutVideoContainer::EStateStoppedInitial:
+ {
+ if (! iClosing)
+ {
+ // no marks set
+ if ( ( iMovie->VideoClipCutInTime( 0 ) == TTimeIntervalMicroSeconds( 0 ) ) &&
+ ( iMovie->VideoClipCutOutTime( 0 ) == iMovie->VideoClipInfo(0)->Duration() ) )
+ {
+ // playhead in the beginning
+ if ( iContainer->PlaybackPositionL() == 0 || AknLayoutUtils::PenEnabled() )
+ {
+ Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_BACK__PLAY);
+ }
+ // playhead not in the beginning
+ else
+ {
+ Cba()->SetCommandSetL(R_VEI_SOFTKEYS_IN_OUT__MENU);
+ }
+ }
+ //start or end mark has been set
+ else
+ {
+ // start mark has been set, end mark has not been set
+ // and the the playhead is on the right hand side of the start mark
+ if (( iMovie->VideoClipCutInTime( 0 ) != TTimeIntervalMicroSeconds( 0 ) ) &&
+ ( iMovie->VideoClipCutOutTime( 0 ) == iMovie->VideoClipInfo(0)->Duration() ) &&
+ ( iContainer->PlaybackPositionL() > iMovie->VideoClipCutInTime( 0 ))
+ && !AknLayoutUtils::PenEnabled() )
+ {
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_OPTIONS_OUT__MENU );
+ }
+ else
+ {
+ Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_CUT__MENU);
+ }
+ }
+ }
+ break;
+ }
+ case CVeiSimpleCutVideoContainer::EStatePaused:
+ case CVeiSimpleCutVideoContainer::EStateStopped:
+ {
+
+ // no marks set
+ if ( ( iMovie->VideoClipCutInTime( 0 ) == TTimeIntervalMicroSeconds( 0 ) ) &&
+ ( iMovie->VideoClipCutOutTime( 0 ) == iMovie->VideoClipInfo(0)->Duration() ) )
+ {
+ // playhead in the beginning
+ if (iContainer->PlaybackPositionL() == 0 || AknLayoutUtils::PenEnabled() )
+ {
+ Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_BACK__PLAY);
+ }
+ else
+ {
+ Cba()->SetCommandSetL(R_VEI_SOFTKEYS_IN_OUT__MENU);
+ }
+ }
+ // start or end mark has been set
+ else
+ {
+ // start mark has been set, end mark has not been set
+ // and the the playhead is on the right hand side of the start mark
+ if (( iMovie->VideoClipCutInTime( 0 ) != TTimeIntervalMicroSeconds( 0 ) ) &&
+ ( iMovie->VideoClipCutOutTime( 0 ) == iMovie->VideoClipInfo(0)->Duration() ) &&
+ ( iContainer->PlaybackPositionL() > iMovie->VideoClipCutInTime( 0 ))
+ && !AknLayoutUtils::PenEnabled() )
+ {
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_OPTIONS_OUT__MENU );
+ }
+ else
+ {
+ Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_CUT__MENU);
+ }
+ }
+ break;
+ }
+ case CVeiSimpleCutVideoContainer::EStatePlaying:
+ {
+ // playhead outside cut area
+ if ( iContainer->PlaybackPositionL() < iMovie->VideoClipCutInTime( iIndex ) )
+ {
+ if ( AknLayoutUtils::PenEnabled() )
+ {
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_NONE__MENU );
+ }
+ else
+ {
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_STOP__MENU );
+ }
+ iMarkState = EMarkStateIn;
+ }
+ // playdhead inside cut area
+ else if ( iContainer->PlaybackPositionL() < iMovie->VideoClipCutOutTime( iIndex ) )
+ {
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_OUT__MENU );
+ iMarkState = EMarkStateInOut;
+ }
+ // playhead outside cut area
+ else
+ {
+ if ( AknLayoutUtils::PenEnabled() )
+ {
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_NONE_OUT__MENU );
+ }
+ else
+ {
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_STOP_OUT__MENU );
+ }
+ iMarkState = EMarkStateOut;
+ }
+
+ break;
+ }
+ case CVeiSimpleCutVideoContainer::EStateTerminating:
+ {
+ return;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ Cba()->DrawDeferred();
+ }
+
+void CVeiSimpleCutVideoView::PlayMarkedL()
+ {
+ LOGFMT3(KVideoEditorLogFile, "CVeiSimpleCutVideoView::PlayMarkedL: In: iIndex:%d, iMovie->VideoClipCutInTime():%Ld, iMovie->VideoClipCutOutTime():%Ld", iIndex, iMovie->VideoClipCutInTime( iIndex ).Int64(), iMovie->VideoClipCutOutTime( iIndex ).Int64());
+ iPaused = EFalse;
+ StartNaviPaneUpdateL();
+ iContainer->PlayMarkedL( iMovie->VideoClipInfo( iIndex )->FileName(),
+ iMovie->VideoClipCutInTime( iIndex ), iMovie->VideoClipCutOutTime( iIndex ) );
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::PlayMarkedL: Out");
+ }
+
+void CVeiSimpleCutVideoView::ClearInOutL( TBool aClearIn, TBool aClearOut )
+ {
+ if ( aClearIn )
+ {
+ iMovie->VideoClipSetCutInTime( iIndex, TTimeIntervalMicroSeconds( 0 ) );
+ iContainer->SetInTime( iMovie->VideoClipCutInTime( iIndex ) );
+ }
+ if ( aClearOut )
+ {
+ iMovie->VideoClipSetCutOutTime( iIndex, iMovie->VideoClipInfo( iIndex )->Duration() );
+ iContainer->SetOutTime( iMovie->VideoClipInfo( iIndex )->Duration() );
+ }
+ TTimeIntervalMicroSeconds cutin = iMovie->VideoClipCutInTime( 0 );
+ TTimeIntervalMicroSeconds cutout = iMovie->VideoClipCutOutTime( 0 );
+
+ if ( ( cutin == TTimeIntervalMicroSeconds( 0 ) ) &&
+ ( cutout == iMovie->VideoClipInfo(0)->Duration() ) )
+ {
+ Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_BACK__MENU);
+ Cba()->DrawDeferred();
+ }
+ }
+
+void CVeiSimpleCutVideoView::MarkInL()
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkInL, In");
+ TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL();
+
+ // the start mark can't be put right to the beginning
+ // because start mark is at position 0 when it is not set
+ if (pos == 0)
+ {
+ pos = 1;
+ }
+
+// TTimeIntervalMicroSeconds clipDuration = iMovie->VideoClipInfo( iIndex )->Duration();
+// CVedVideoClipInfo* info = iMovie->VideoClipInfo( iIndex );
+// TTimeIntervalMicroSeconds intraPos = info->VideoFrameStartTimeL(
+// info->GetVideoFrameIndexL( pos ) );
+ if (iMovie->VideoClipCutOutTime(iIndex) > pos)
+ {
+ StopNaviPaneUpdateL();
+ LOGFMT2(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkInL, 2, iIndex:%d, pos:%Ld", iIndex, pos.Int64());
+ iMovie->VideoClipSetCutInTime( iIndex, pos );
+ iContainer->MarkedInL();
+ }
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkInL, Out");
+ }
+
+void CVeiSimpleCutVideoView::MarkOutL()
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkOutL, In");
+ TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL();
+// CVedVideoClipInfo* info = iMovie->VideoClipInfo( iIndex );
+// TTimeIntervalMicroSeconds intraPos = info->VideoFrameStartTimeL(
+// info->GetVideoFrameIndexL( pos ) );
+
+ if (iMovie->VideoClipCutInTime(iIndex) < pos)
+ {
+ StopNaviPaneUpdateL();
+ iMovie->VideoClipSetCutOutTime( iIndex, pos );
+ LOGFMT2(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkOutL, 2, iIndex:%d, pos:%Ld", iIndex, pos.Int64() );
+ iContainer->MarkedOutL();
+ }
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkOutL, Out");
+ }
+
+
+void CVeiSimpleCutVideoView::MoveStartOrEndMarkL(TTimeIntervalMicroSeconds aPosition, CVeiSimpleCutVideoContainer::TCutMark aMarkType)
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MoveStartOrEndMarkL, In");
+
+ StopNaviPaneUpdateL();
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MoveStartOrEndMarkL, 2");
+
+ if (aMarkType == CVeiSimpleCutVideoContainer::EStartMark)
+ {
+ iMovie->VideoClipSetCutInTime( iIndex, aPosition);
+ }
+ else if (aMarkType == CVeiSimpleCutVideoContainer::EEndMark)
+ {
+ iMovie->VideoClipSetCutOutTime( iIndex, aPosition);
+ }
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MoveStartOrEndMarkL, Out");
+ }
+
+TUint CVeiSimpleCutVideoView::InPointTime()
+ {
+ if ( !iMovie )
+ {
+ return 0;
+ }
+ else
+ {
+ return static_cast<TInt32>((iMovie->VideoClipCutInTime(iIndex).Int64() / 1000));
+ }
+ }
+
+TUint CVeiSimpleCutVideoView::OutPointTime()
+ {
+ if ( !iMovie )
+ {
+ return 0;
+ }
+ else
+ {
+ return static_cast<TInt32>(iMovie->VideoClipCutOutTime(iIndex).Int64() / 1000);
+ }
+ }
+
+TInt CVeiSimpleCutVideoView::UpdateTimeCallbackL(TAny* aPtr)
+ {
+ CVeiSimpleCutVideoView* view = (CVeiSimpleCutVideoView*)aPtr;
+
+ view->UpdateTimeL();
+
+ return 1;
+ }
+
+
+void CVeiSimpleCutVideoView::UpdateTimeL()
+ {
+ DrawTimeNaviL();
+
+ if (iMarkState == EMarkStateIn)
+ {
+ if (iContainer->PlaybackPositionL() > iMovie->VideoClipCutInTime( iIndex ))
+ {
+ UpdateCBAL(iContainer->State());
+ }
+ }
+ else if (iMarkState == EMarkStateOut)
+ {
+ if (iContainer->PlaybackPositionL() < iMovie->VideoClipCutOutTime( iIndex ))
+ {
+ UpdateCBAL(iContainer->State());
+ }
+ }
+ else
+ {
+ if ((iContainer->PlaybackPositionL() < iMovie->VideoClipCutInTime( iIndex )) ||
+ (iContainer->PlaybackPositionL() > iMovie->VideoClipCutOutTime( iIndex )))
+ {
+ UpdateCBAL(iContainer->State());
+ }
+ }
+ }
+
+void CVeiSimpleCutVideoView::DrawTimeNaviL()
+ {
+ TTime elapsed( iContainer->PlaybackPositionL().Int64() );
+ TTime total( iContainer->TotalLength().Int64() );
+ iCVeiNaviPaneControl->DrawTimeNaviL( elapsed, total );
+ }
+
+
+void CVeiSimpleCutVideoView::StartNaviPaneUpdateL()
+ {
+ DrawTimeNaviL();
+ if (iTimeUpdater && !iTimeUpdater->IsActive())
+ {
+ iTimeUpdater->Start(200000, 1000000/10, TCallBack(CVeiSimpleCutVideoView::UpdateTimeCallbackL, this));
+ }
+ }
+
+void CVeiSimpleCutVideoView::StopNaviPaneUpdateL()
+ {
+ if (iContainer)
+ {
+ DrawTimeNaviL();
+ }
+ if (iTimeUpdater)
+ {
+ iTimeUpdater->Cancel();
+ }
+ }
+
+
+void CVeiSimpleCutVideoView::VolumeMuteL()
+ {
+ iContainer->MuteL();
+ }
+
+
+
+void CVeiSimpleCutVideoView::ShowVolumeLabelL( TInt aVolume )
+ {
+ iCVeiNaviPaneControl->ShowVolumeLabelL( aVolume );
+ }
+
+void CVeiSimpleCutVideoView::HandleForegroundEventL ( TBool aForeground )
+ {
+ if ( !aForeground )
+ {
+ // If the application is closing down, calling PauseL could result in
+ // a callback from the MMF player after the container is already deleted,
+ // causing KERN-EXEC 3
+ if ( iOnTheWayToDestruction ||
+ static_cast<CVeiSimpleCutVideoAppUi*>( AppUi() )->AppIsOnTheWayToDestruction() )
+ {
+ iContainer->PrepareForTerminationL();
+ return;
+ }
+ else
+ {
+ if( iContainer->State() == CVeiSimpleCutVideoContainer::EStatePlaying ||
+ iContainer->State() == CVeiSimpleCutVideoContainer::EStatePlayingMenuOpen )
+ {
+ iPaused = ETrue;
+ iContainer->PauseL( EFalse );
+ }
+ }
+ }
+ else
+ {
+ UpdateCBAL( iContainer->State() );
+ if( 0 )
+// if( iPaused )
+ {
+ iPaused = EFalse;
+ PlayPreviewL();
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CVeiSimpleCutVideoView::HandleStatusPaneSizeChange()
+// ---------------------------------------------------------
+//
+void CVeiSimpleCutVideoView::HandleStatusPaneSizeChange()
+ {
+ if ( iContainer )
+ {
+ iContainer->SetRect( AppUi()->ClientRect() );
+ }
+ }
+
+TBool CVeiSimpleCutVideoView::IsEnoughFreeSpaceToSaveL()// const
+ {
+ RFs& fs = iEikonEnv->FsSession();
+ TBool spaceBelowCriticalLevel( EFalse );
+
+ /* seek position of clip */
+ TTimeIntervalMicroSeconds frame;
+ frame = iContainer->PlaybackPositionL();
+
+ /* frame index of position */
+ TInt frameIndex;
+ frameIndex = iMovie->VideoClipInfo( iIndex )->GetVideoFrameIndexL( frame );
+
+ /* frame size */
+ TInt sizeEstimate;
+ sizeEstimate = iMovie->VideoClipInfo( iIndex )->VideoFrameSizeL( frameIndex );
+
+ // In this case, we decide the target drive automatically when starting
+ // to save the video. Thus it is enough to know that there is free space
+ // on either drive at this stage.
+ spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( &fs, sizeEstimate, EDriveC );
+ if( spaceBelowCriticalLevel )
+ {
+ spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( &fs, sizeEstimate );
+ }
+
+
+ if ( !spaceBelowCriticalLevel )
+ {
+ return ETrue;
+ }
+ else
+ {
+ HBufC* stringholder;
+ stringholder = StringLoader::LoadLC( R_VEI_MEMORY_RUNNING_OUT, iEikonEnv );
+ CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue );
+ dlg->ExecuteLD( *stringholder );
+ CleanupStack::PopAndDestroy( stringholder );
+
+ return EFalse;
+ }
+ }
+
+TTimeIntervalMicroSeconds CVeiSimpleCutVideoView::GetVideoClipCutInTime()
+ {
+ TTimeIntervalMicroSeconds cutInTime(0);
+ if ( iMovie )
+ {
+ cutInTime = iMovie->VideoClipCutInTime( iIndex );
+ }
+ return cutInTime;
+ }
+
+TTimeIntervalMicroSeconds CVeiSimpleCutVideoView::GetVideoClipCutOutTime()
+ {
+ TTimeIntervalMicroSeconds cutOutTime(0);
+ if ( iMovie )
+ {
+ cutOutTime = iMovie->VideoClipCutOutTime( iIndex );
+ }
+ return cutOutTime;
+ }
+
+void CVeiSimpleCutVideoView::HandleResourceChange(TInt aType)
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::HandleResourceChange() In, aType:%d", aType);
+
+ if ( iContainer )
+ {
+ if ( aType == KEikMessageFadeAllWindows && (iContainer->State() == CVeiSimpleCutVideoContainer::EStatePlaying) )
+ {
+ this->PausePreviewL();
+ iSelectionKeyPopup = ETrue;
+ }
+ else if ( iSelectionKeyPopup && aType == KEikMessageUnfadeWindows && (iContainer->State() == CVeiSimpleCutVideoContainer::EStatePaused) )
+ {
+ this->PlayPreviewL();
+ iSelectionKeyPopup = EFalse;
+ }
+ }
+
+ 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
+ iCVeiNaviPaneControl->HandleResourceChange( aType );
+ }
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::HandleResourceChange() Out");
+ }
+
+//=======================================================================================================
+const CVedMovie* CVeiSimpleCutVideoView::Movie() const
+ {
+ return iMovie;
+ }
+
+//=======================================================================================================
+TBool CVeiSimpleCutVideoView::SaveL()
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::SaveL: in");
+
+ TFileName outputFile;
+ TBool ret = EFalse;
+
+ TTimeIntervalMicroSeconds cutin;
+ TTimeIntervalMicroSeconds cutout;
+ cutin = iMovie->VideoClipCutInTime( 0 );
+ cutout = iMovie->VideoClipCutOutTime( 0 );
+
+ if ( ( cutin != TTimeIntervalMicroSeconds( 0 ) ) ||
+ ( cutout!= iMovie->VideoClipInfo(0)->Duration() ) )
+ {
+ RFs& fs = iEikonEnv->FsSession();
+
+ // GenerateNewDocumentNameL also checks disk space
+ TInt err(KErrNone);
+ if(!iOverWriteFile)
+ {
+ err = VideoEditorUtils::GenerateNewDocumentNameL (
+ fs,
+ iMovie->VideoClipInfo( iIndex )->FileName(),
+ outputFile,
+ iMovie->Format(),
+ iMovie->GetSizeEstimateL() );
+ }
+ else
+ {
+ outputFile.Zero();
+ outputFile.Copy(iMovie->VideoClipInfo( iIndex )->FileName());
+ }
+
+ LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::SaveL: 1, err:%d", err);
+
+ if ( KErrNone == err )
+ {
+ if (iSaveToFileName)
+ {
+ delete iSaveToFileName;
+ iSaveToFileName = NULL;
+ }
+ iSaveToFileName = HBufC::NewL( outputFile.Length() );
+ *iSaveToFileName = outputFile;
+
+ // Start saviong the video.
+ // To be finished in DialogDismissedL...
+ iSaving = ETrue;
+ StartTempFileProcessingL();
+
+ ret = ETrue;
+ }
+ else
+ {
+ iErrorUI->ShowGlobalErrorNote( err );
+ ret = EFalse;
+ }
+ }
+ else
+ {
+ ret = EFalse;
+ }
+
+ LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::SaveL: out: %d", ret);
+
+ return ret;
+ }
+
+
+//=============================================================================
+TInt CVeiSimpleCutVideoView::QueryAndSaveL()
+{
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::QueryAndSaveL: in");
+
+ TFileName outputFile;
+ TBool ret = EFalse;
+
+ TTimeIntervalMicroSeconds cutin;
+ TTimeIntervalMicroSeconds cutout;
+ cutin = iMovie->VideoClipCutInTime( 0 );
+ cutout = iMovie->VideoClipCutOutTime( 0 );
+
+ if ( ( cutin != TTimeIntervalMicroSeconds( 0 ) ) ||
+ ( cutout!= iMovie->VideoClipInfo(0)->Duration() ) )
+ {
+ RFs fs = CCoeEnv::Static()->FsSession();
+
+
+ // launch query with choices "Replace original" and "Save with a new file name"
+ TInt userSelection = VideoEditorUtils::LaunchSaveVideoQueryL();
+
+ if(userSelection == 0)
+ // the user selects to save with a new file name
+ {
+ iOverWriteFile = EFalse;
+
+ // Multiple drive support enabled
+#ifdef RD_MULTIPLE_DRIVE
+ TDriveNumber driveNumber;
+ TFileName driveAndPath;
+ CAknMemorySelectionDialogMultiDrive* multiDriveDlg = CAknMemorySelectionDialogMultiDrive::NewL(ECFDDialogTypeSave, EFalse );
+ CleanupStack::PushL( multiDriveDlg );
+
+ // launch "Select memory" query
+ if (multiDriveDlg->ExecuteL( driveNumber, &driveAndPath, NULL ))
+ {
+ outputFile.Zero();
+
+ // Generate a default name for the new file
+ TInt err = VideoEditorUtils::GenerateFileNameL (
+ fs,
+ iMovie->VideoClipInfo( iIndex )->FileName(),
+ outputFile,
+ iMovie->Format(),
+ iMovie->GetSizeEstimateL(),
+ driveAndPath);
+
+ driveAndPath.Append( PathInfo::VideosPath() );
+
+ if ( KErrNone == err )
+ {
+ if (iSaveToFileName)
+ {
+ delete iSaveToFileName;
+ iSaveToFileName = NULL;
+ }
+
+ // launch file name prompt dialog
+ if (CAknFileNamePromptDialog::RunDlgLD(outputFile, driveAndPath, KNullDesC))
+ {
+ driveAndPath.Append(outputFile);
+ outputFile.Copy(driveAndPath);
+ iSaveToFileName = HBufC::NewL( outputFile.Length() );
+ *iSaveToFileName = outputFile;
+
+ // Start saving the video.
+ // To be finished in DialogDismissedL...
+ iSaving = ETrue;
+ StartTempFileProcessingL();
+
+ ret = ETrue;
+ }
+ }
+ else // err != KErrNone
+ {
+ ret = EFalse;
+ }
+ }
+ CleanupStack::PopAndDestroy( multiDriveDlg );
+#else // no multiple drive support
+ // launch "Select memory" query
+ CAknMemorySelectionDialog::TMemory selectedMemory(CAknMemorySelectionDialog::EPhoneMemory);
+ if (CAknMemorySelectionDialog::RunDlgLD(selectedMemory))
+ {
+ // create path for the image
+ TFileName driveAndPath;
+ VideoEditor::TMemory memorySelection = VideoEditor::EMemPhoneMemory;
+ if (selectedMemory == CAknMemorySelectionDialog::EPhoneMemory)
+ {
+ memorySelection = VideoEditor::EMemPhoneMemory;
+ driveAndPath.Copy( PathInfo::PhoneMemoryRootPath() );
+ driveAndPath.Append( PathInfo::VideosPath() );
+ }
+ else if (selectedMemory == CAknMemorySelectionDialog::EMemoryCard)
+ {
+ memorySelection = VideoEditor::EMemMemoryCard;
+ driveAndPath.Copy( PathInfo::MemoryCardRootPath() );
+ driveAndPath.Append( PathInfo::VideosPath() );
+ }
+
+ // GenerateNewDocumentNameL also checks disk space
+ TInt err = VideoEditorUtils::GenerateNewDocumentNameL (
+ fs,
+ iMovie->VideoClipInfo( iIndex )->FileName(),
+ outputFile,
+ iMovie->Format(),
+ iMovie->GetSizeEstimateL(),
+ memorySelection );
+
+ if ( KErrNone == err )
+ {
+ if (iSaveToFileName)
+ {
+ delete iSaveToFileName;
+ iSaveToFileName = NULL;
+ }
+
+ // launch file name prompt dialog
+ if (CAknFileNamePromptDialog::RunDlgLD(outputFile, driveAndPath, KNullDesC))
+ {
+ driveAndPath.Append(outputFile);
+ outputFile.Copy(driveAndPath);
+ iSaveToFileName = HBufC::NewL( outputFile.Length() );
+ *iSaveToFileName = outputFile;
+
+ // Start saving the video.
+ // To be finished in DialogDismissedL...
+ iSaving = ETrue;
+ StartTempFileProcessingL();
+
+ ret = ETrue;
+ }
+ }
+ else // err != KErrNone
+ {
+ ret = EFalse;
+ }
+ }
+#endif
+ }
+ // user selects to overwrite
+ else if (userSelection == 1)
+
+ {
+ iOverWriteFile = ETrue;
+ ret = SaveL();
+ return ret;
+ }
+ else // user cancelled
+ {
+ ret = EFalse;
+ }
+ }
+ else
+ {
+ ret = EFalse;
+ }
+
+ LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::QueryAndSaveL: out: %d", ret);
+
+ return ret;
+}
+
+
+
+//=======================================================================================================
+TBool CVeiSimpleCutVideoView::IsCutMarkSet()
+ {
+ ASSERT( iMovie ); // We always have iMovie
+ TTimeIntervalMicroSeconds cutIn( iMovie->VideoClipCutInTime( iIndex ) );
+ TTimeIntervalMicroSeconds cutOut( iMovie->VideoClipCutOutTime( iIndex ) );
+ TTimeIntervalMicroSeconds duration( iMovie->VideoClipInfo(iIndex)->Duration() );
+ // cutIn or cutOut mark is set
+ return (cutIn != TTimeIntervalMicroSeconds( 0 ) || cutOut != duration);
+ }
+
+//=======================================================================================================
+void CVeiSimpleCutVideoView::StartTempFileProcessingL()
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::StartTempFileProcessingL: in");
+
+ RFs& fs = iEikonEnv->FsSession();
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::StartTempFileProcessingL() -- NEW TEMP");
+
+ if (iTempFile)
+ {
+ delete iTempFile;
+ iTempFile = NULL;
+ }
+ iTempFile = HBufC::NewL(KMaxFileName);
+ iTempMaker->GenerateTempFileName( *iTempFile, iMovieSaveSettings.MemoryInUse(), iMovie->Format() );
+ LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::StartTempFileProcessingL: 1, iTempFile:%S", iTempFile);
+
+ if ( !IsEnoughFreeSpaceToSaveL() )
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::StartTempFileProcessingL: 2");
+ return;
+ }
+
+ iMovie->ProcessL( *iTempFile, *this );
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::StartTempFileProcessingL: out");
+ }
+
+//=======================================================================================================
+void CVeiSimpleCutVideoView::ShowErrorNoteL( const TInt aResourceId, TInt aError ) const
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::ShowErrorNoteL: in");
+
+ HBufC* stringholder;
+ if ( aError == 0 )
+ {
+ stringholder = StringLoader::LoadLC( aResourceId, iEikonEnv );
+ }
+ else
+ {
+ stringholder = StringLoader::LoadLC( aResourceId, aError, iEikonEnv );
+ }
+
+ CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue );
+ dlg->ExecuteLD( *stringholder );
+
+ CleanupStack::PopAndDestroy( stringholder );
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::ShowErrorNoteL: out");
+ }
+
+//=======================================================================================================
+
+void CVeiSimpleCutVideoView::StartProgressNoteL()
+{
+ iProgressNote =
+ new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**,
+ &iProgressNote), ETrue);
+ iProgressNote->SetCallback(this);
+ iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL );
+
+ HBufC* stringholder;
+ TApaAppCaption caption;
+ TRAPD( err, iContainer->ResolveCaptionNameL( caption ) );
+
+ // If something goes wrong, show basic "Saving" note
+ if ( err )
+ {
+ stringholder = iEikonEnv->AllocReadResourceLC( R_VEI_PROGRESS_NOTE_SAVING );
+ }
+ else
+ {
+ stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_CUTTING_VIDEO, caption, iEikonEnv );
+ }
+
+ iProgressNote->SetTextL( *stringholder );
+ CleanupStack::PopAndDestroy( stringholder );
+
+ iProgressNote->GetProgressInfoL()->SetFinalValue(100);
+}
+
+//=======================================================================================================
+void CVeiSimpleCutVideoView::StartAnimatedProgressNoteL()
+{
+ if (iAnimatedProgressDialog)
+ {
+ delete iAnimatedProgressDialog;
+ iAnimatedProgressDialog = NULL;
+ }
+
+
+ iAnimatedProgressDialog = new (ELeave) CExtProgressDialog( &iAnimatedProgressDialog);
+ iAnimatedProgressDialog->PrepareLC(R_WAIT_DIALOG);
+ iAnimatedProgressDialog->SetCallback( this );
+
+ HBufC* stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_CUTTING_VIDEO, iEikonEnv );
+ iAnimatedProgressDialog->SetTextL( *stringholder );
+ CleanupStack::PopAndDestroy(stringholder);
+
+ iAnimatedProgressDialog->SetAnimationResourceIdL( VideoEditor::EAnimationCut );
+ iAnimatedProgressDialog->GetProgressInfoL()->SetFinalValue( 100 );
+ iAnimatedProgressDialog->StartAnimationL();
+ iAnimatedProgressDialog->RunLD();
+}
+
+// ----------------------------------------------------------------------------
+// CVeiSimpleCutVideoView::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 CVeiSimpleCutVideoView::CheckMemoryCardAvailabilityL()
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::CheckMemoryCardAvailability(): in");
+
+ // Read the video editor settings from ini file.
+
+ STATIC_CAST(CVeiSimpleCutVideoAppUi*,AppUi())->ReadSettingsL( iMovieSaveSettings );
+
+ CAknMemorySelectionDialog::TMemory memoryInUse( iMovieSaveSettings.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( EMediaNotPresent == driveInfo.iType )
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::CheckMemoryCardAvailability(): no media");
+
+ iMovieSaveSettings.MemoryInUse() = CAknMemorySelectionDialog::EPhoneMemory;
+ // do not overwrite because doing so permanently sets memory to phone memory
+ //STATIC_CAST( CVeiSimpleCutVideoAppUi*, AppUi() )->WriteSettingsL( settings );
+ }
+ // Media is present
+ else
+ {
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::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( KErrCorrupt == volumeErr )
+ {
+ HBufC* noteText = StringLoader::LoadLC( R_VED_MMC_NOT_INSERTED,
+ iEikonEnv );
+ CAknInformationNote* informationNote =
+ new(ELeave)CAknInformationNote( ETrue );
+ informationNote->ExecuteLD( *noteText );
+
+ CleanupStack::PopAndDestroy( noteText );
+
+ iMovieSaveSettings.MemoryInUse() = CAknMemorySelectionDialog::EPhoneMemory;
+ // do not overwrite because doing so permanently sets memory to phone memory
+ //STATIC_CAST( CVeiSimpleCutVideoAppUi*, AppUi() )->WriteSettingsL( settings );
+ }
+ }
+ }
+
+ LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::CheckMemoryCardAvailability(): out");
+ }
+
+void CVeiSimpleCutVideoView::PrepareForTermination()
+ {
+ iOnTheWayToDestruction = ETrue;
+ }
+
+void CVeiSimpleCutVideoView::SetTitlePaneTextL ()
+{
+
+ TPtrC fileName = iMovie->VideoClipInfo( iIndex )->FileName();
+ HBufC * title_text = HBufC::NewLC( fileName.Length() );
+ TPtr title_text_ptr = title_text->Des();
+
+ title_text_ptr.Copy (fileName);
+ TParsePtr parser (title_text_ptr);
+ title_text_ptr = parser.Name();
+
+ // Set title pane text
+ CEikStatusPane *statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane();
+ CAknTitlePane* titlePane = ( CAknTitlePane* ) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) );
+ titlePane->SetTextL(title_text_ptr);
+
+ CleanupStack::PopAndDestroy( title_text );
+}
+
+// End of File
+