--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videditor/ManualVideoEditor/src/VeiCutAudioView.cpp Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,989 @@
+/*
+* 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 <VedAudioClipInfo.h>
+
+#include <akntitle.h>
+#include <barsread.h>
+#include <stringloader.h>
+#include <aknnotewrappers.h>
+#include <aknquerydialog.h>
+#include <aknnavide.h>
+#include <eikbtgpc.h>
+#include <eikmenub.h>
+#include <eikmenup.h>
+#include <eikprogi.h>
+#include <apparc.h>
+#include <aknselectionlist.h>
+
+//User includes
+#include "VeiAppUi.h"
+#include "VeiCutAudioView.h"
+#include "VeiCutAudioContainer.h"
+#include "ManualVideoEditor.hrh"
+#include "VeiTimeLabelNavi.h"
+#include "VideoEditorCommon.h"
+#include "VeiVideoEditorSettings.h"
+#include "VeiErrorUi.h"
+
+CVeiCutAudioView* CVeiCutAudioView::NewL()
+ {
+ CVeiCutAudioView* self = CVeiCutAudioView::NewLC();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+
+CVeiCutAudioView* CVeiCutAudioView::NewLC()
+ {
+ CVeiCutAudioView* self = new (ELeave) CVeiCutAudioView();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+CVeiCutAudioView::CVeiCutAudioView()
+ {
+ }
+
+void CVeiCutAudioView::ConstructL()
+ {
+ BaseConstructL( R_VEI_CUT_AUDIO_VIEW );
+
+ CEikStatusPane* sp = StatusPane();
+
+ iNaviPane = (CAknNavigationControlContainer*) sp->ControlL(
+ TUid::Uid(EEikStatusPaneUidNavi));
+
+ iTimeNavi = CreateTimeLabelNaviL();
+ iTimeNavi->SetMopParent( this );
+
+ iVolumeNavi = iNaviPane->CreateVolumeIndicatorL(
+ R_AVKON_NAVI_PANE_VOLUME_INDICATOR );
+
+ iErrorUI = CVeiErrorUI::NewL( *iCoeEnv );
+
+ iTimeUpdater = CPeriodic::NewL( CActive::EPriorityLow );
+ iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow );
+ }
+
+// ---------------------------------------------------------
+// CVeiCutAudioView::~CVeiCutAudioView()
+// ?implementation_description
+// ---------------------------------------------------------
+//
+CVeiCutAudioView::~CVeiCutAudioView()
+ {
+ if ( iContainer )
+ {
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+ delete iContainer;
+ iContainer = 0;
+ }
+ if ( iTimeUpdater )
+ {
+ iTimeUpdater->Cancel();
+ delete iTimeUpdater;
+ }
+ if ( iVolumeHider )
+ {
+ iVolumeHider->Cancel();
+ delete iVolumeHider;
+ }
+
+ if ( iErrorUI )
+ {
+ delete iErrorUI;
+ }
+
+ delete iVolumeNavi;
+
+ delete iTimeNavi;
+
+ delete iCallBack;
+ }
+
+
+void CVeiCutAudioView::DynInitMenuPaneL( TInt aResourceId,CEikMenuPane* aMenuPane )
+ {
+ TInt state = iContainer->State();
+
+ if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU_CLEAR_MARKS)
+ {
+ // delet in, out, in & out as necessary.
+
+ if (iMovie->AudioClipCutInTime(iIndex) <= TTimeIntervalMicroSeconds(0))
+ {
+ aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksIn, ETrue);
+ }
+ if (iMovie->AudioClipCutOutTime(iIndex) >= iMovie->AudioClipInfo(iIndex)->Duration() )
+ {
+ aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksOut, ETrue);
+ }
+ if (!((iMovie->AudioClipCutOutTime(iIndex) < iMovie->AudioClipInfo(iIndex)->Duration())
+ && (iMovie->AudioClipCutInTime(iIndex) > TTimeIntervalMicroSeconds(0))))
+ {
+ aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksInOut, ETrue);
+ }
+ }
+
+ if ( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoTakeSnapshot, ETrue );
+
+ if ( iPopupMenuOpened != EFalse )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewHelp, ETrue );
+ }
+
+ if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) &&
+ iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo( iIndex )->Duration() ) )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewPlayMarked );
+ }
+ if ( state != CVeiCutAudioContainer::EStatePlayingMenuOpen &&
+ state != CVeiCutAudioContainer::EStatePaused )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewContinue );
+ }
+ if ( ( state == CVeiCutAudioContainer::EStateStopped ) ||
+ ( state == CVeiCutAudioContainer::EStateStoppedInitial ) )
+ {
+ aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewStop );
+ }
+
+ if ( ( iMovie->AudioClipCutOutTime( iIndex ) >= iMovie->AudioClipInfo( iIndex )->Duration() ) &&
+ ( iMovie->AudioClipCutInTime( iIndex ) <= TTimeIntervalMicroSeconds( 0 ) ) )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue );
+ }
+ if ( state == CVeiCutAudioContainer::EStatePaused )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue );
+ }
+ if ( state == CVeiCutAudioContainer::EStateStoppedInitial )
+ {
+ //aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue );
+ //aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue );
+ }
+ }
+
+ if ( aResourceId != R_VEI_CUT_VIDEO_VIEW_MENU )
+ return;
+
+
+ if ( ( state != CVeiCutAudioContainer::EStateStopped ) &&
+ ( state != CVeiCutAudioContainer::EStateStoppedInitial ) &&
+ ( state != CVeiCutAudioContainer::EStatePaused ) )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue );
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue );
+ }
+ else
+ {
+ if ( iContainer->PlaybackPositionL() <= iMovie->AudioClipCutInTime( iIndex ) )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue );
+ }
+ else
+ {
+ if ( iContainer->PlaybackPositionL() >= iMovie->AudioClipCutOutTime( iIndex ) )
+ {
+ aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue );
+ }
+ }
+ }
+
+ }
+
+TUid CVeiCutAudioView::Id() const
+ {
+ return TUid::Uid( EVeiCutAudioView );
+ }
+
+void CVeiCutAudioView::HandleCommandL(TInt aCommand)
+ {
+ switch ( aCommand )
+ {
+ case EAknSoftkeyOk:
+ {
+ iPopupMenuOpened = ETrue;
+ if (iContainer->State() == CVeiCutAudioContainer::EStatePlaying)
+ {
+ PausePreviewL();
+ iContainer->SetStateL(CVeiCutAudioContainer::EStatePlayingMenuOpen);
+ }
+
+ MenuBar()->TryDisplayMenuBarL();
+ if (iContainer->State() == CVeiCutAudioContainer::EStatePlayingMenuOpen)
+ {
+ iContainer->SetStateL(CVeiCutAudioContainer::EStatePaused);
+ }
+ iPopupMenuOpened = EFalse;
+ break;
+ }
+ case EVeiCmdCutVideoViewDone:
+ case EVeiCmdCutVideoViewBack:
+ case EAknSoftkeyBack:
+ {
+ iContainer->CloseStreamL();
+
+ StopNaviPaneUpdateL();
+
+ // Activate Edit Video view
+ AppUi()->ActivateLocalViewL( TUid::Uid(EVeiEditVideoView) );
+ break;
+ }
+
+ case EVeiCmdCutVideoViewMarkIn:
+ {
+ MarkInL();
+ break;
+ }
+ case EVeiCmdCutVideoViewMarkOut:
+ {
+ MarkOutL();
+ break;
+ }
+ case EVeiCmdCutVideoViewClearMarksInOut:
+ {
+ ClearInOutL( ETrue, ETrue );
+ break;
+ }
+ case EVeiCmdCutVideoViewClearMarksIn:
+ {
+ ClearInOutL( ETrue, EFalse );
+ break;
+ }
+ case EVeiCmdCutVideoViewClearMarksOut:
+ {
+ ClearInOutL( EFalse, ETrue );
+ break;
+ }
+ case EVeiCmdCutVideoViewPlayMarked:
+ {
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
+ SetPauseIconVisibilityL( EFalse );
+ PlayMarkedL();
+ break;
+ }
+ case EVeiCmdCutVideoViewPlay:
+ {
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
+ SetPauseIconVisibilityL( EFalse );
+ iNaviPane->PushL( *iTimeNavi );
+
+ PlayPreviewL();
+ break;
+ }
+ case EVeiCmdCutVideoViewStop:
+ {
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
+ SetPauseIconVisibilityL( EFalse );
+ iNaviPane->PushL( *iTimeNavi );
+ iContainer->StopL();
+ StopNaviPaneUpdateL();
+ break;
+ }
+ case EVeiCmdCutVideoViewContinue:
+ {
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
+ SetPauseIconVisibilityL( EFalse );
+ iNaviPane->PushL( *iTimeNavi );
+ PlayPreviewL();
+ break;
+ }
+ case EVeiCmdCutVideoVolumeDown:
+ {
+ if ( !iAudioMuted )
+ {
+ VolumeDownL();
+ }
+ break;
+ }
+ case EVeiCmdCutVideoVolumeUp:
+ {
+ if ( !iAudioMuted )
+ {
+ VolumeUpL();
+ }
+ break;
+ }
+ //
+ // Options->Help
+ //
+ case EVeiCmdCutVideoViewHelp:
+ {
+ // CS Help launching is handled in Video Editor's AppUi.
+ AppUi()->HandleCommandL( EVeiCmdCutVideoViewHelp );
+ break;
+ }
+ default:
+ {
+ AppUi()->HandleCommandL( aCommand );
+ break;
+ }
+ }
+ }
+
+
+void CVeiCutAudioView::DoActivateL(
+ const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
+ const TDesC8& /*aCustomMessage*/)
+ {
+
+ if (!iContainer)
+ {
+ iContainer = CVeiCutAudioContainer::NewL( AppUi()->ClientRect(), *this, *iErrorUI );
+ iContainer->SetMopParent( this );
+ AppUi()->AddToStackL( *this, iContainer );
+ }
+
+ CEikStatusPane *statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane();
+
+ CAknTitlePane* titlePane = (CAknTitlePane*) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) );
+ TResourceReader reader1;
+ iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_CUTAUDIO_VIEW_TITLE_NAME );
+ titlePane->SetFromResourceL( reader1 );
+ CleanupStack::PopAndDestroy(); //reader1
+
+ iNaviPane->PushL( *iTimeNavi );
+
+ iAudioMuted = EFalse;
+
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->
+ SetVolumeIconVisibilityL( ETrue );
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
+ SetPauseIconVisibilityL( EFalse );
+
+ iContainer->SetInTimeL( iMovie->AudioClipCutInTime( iIndex ) );
+ iContainer->SetOutTimeL( iMovie->AudioClipCutOutTime( iIndex ) );
+ iContainer->SetDuration( iMovie->AudioClipInfo( iIndex )->Duration() );
+
+ // <testing>
+/* TTimeIntervalMicroSeconds time1 = iMovie->AudioClipInfo( iIndex )->Duration();
+ TTimeIntervalMicroSeconds time2 = iMovie->AudioClipCutInTime( iIndex );
+ TTimeIntervalMicroSeconds time3 = iMovie->AudioClipCutOutTime( iIndex );
+ TTimeIntervalMicroSeconds time4 = iMovie->AudioClipStartTime( iIndex );
+ TTimeIntervalMicroSeconds time5 = iMovie->AudioClipEndTime( iIndex );
+ TTimeIntervalMicroSeconds time6 = iMovie->AudioClipEditedDuration( iIndex );
+ TTimeIntervalMicroSeconds time7(time3.Int64() - time2.Int64());
+ TTimeIntervalMicroSeconds time8(time5.Int64() - time4.Int64());
+*/ // </testing>
+
+ // Start processing the file asynchronously. This is needed because
+ // CVeiCutAudioContainer::OpenAudioFileL launches a progress dialog.
+ // If it is called syncronously the previous view deactivation has
+ // not completed, and view shutter dismisses the progress dialog...
+ if (! iCallBack)
+ {
+ TCallBack cb (CVeiCutAudioView::AsyncOpenAudioFile, this);
+ iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard);
+ }
+ iCallBack->CallBack();
+
+ iOriginalCutInTime = iMovie->AudioClipCutInTime( iIndex );
+
+ DrawTimeNaviL();
+
+ iErrorNmb = 0;
+ }
+
+// ---------------------------------------------------------
+// CVeiCutAudioView::AsyncOpenAudioFile
+// ?implementation_description
+// ---------------------------------------------------------
+//
+TInt CVeiCutAudioView::AsyncOpenAudioFile(TAny* aThis)
+ {
+ LOG( KVideoEditorLogFile, "CVeiCutAudioView::AsyncOpenAudioFile");
+
+ // 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.
+ CVeiCutAudioView* view = static_cast<CVeiCutAudioView*>(aThis);
+ TRAPD(err, view->OpenAudioFileL() );
+
+ if (err)
+ {
+ // Display error message here, otherwise it would be quietly ignored.
+ TBuf<256> unused;
+ view->AppUi()->HandleError(err, SExtendedError(), unused, unused);
+ }
+
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CVeiCutAudioView::OpenAudioFileL()
+// ?implementation_description
+// ---------------------------------------------------------
+//
+void CVeiCutAudioView::OpenAudioFileL()
+ {
+ TFileName audioClipFileName = iMovie->AudioClipInfo( iIndex )->FileName();
+ iContainer->OpenAudioFileL( audioClipFileName );
+ }
+
+// ---------------------------------------------------------
+// CVeiCutAudioView::DoDeactivate()
+// ?implementation_description
+// ---------------------------------------------------------
+//
+void CVeiCutAudioView::DoDeactivate()
+ {
+ iNaviPane->Pop( iVolumeNavi );
+
+ if ( iTimeUpdater )
+ {
+ iTimeUpdater->Cancel();
+ }
+ if ( iVolumeHider )
+ {
+ iVolumeHider->Cancel();
+ }
+ if ( iContainer )
+ {
+ iNaviPane->Pop( iTimeNavi );
+ AppUi()->RemoveFromViewStack( *this, iContainer );
+
+ delete iContainer;
+ iContainer = NULL;
+ }
+
+ }
+
+void CVeiCutAudioView::SetVideoClipAndIndex( CVedMovie& aVideoClip, TInt aIndex )
+ {
+ iMovie = &aVideoClip;
+
+ iIndex = aIndex;
+ }
+
+void CVeiCutAudioView::PlayPreviewL()
+ {
+ iPlayMarked = EFalse;
+ StartNaviPaneUpdateL();
+ iContainer->PlayL();
+ }
+
+void CVeiCutAudioView::PausePreviewL()
+ {
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
+ SetPauseIconVisibilityL( ETrue );
+ StopNaviPaneUpdateL();
+ iContainer->PauseL();
+ }
+
+void CVeiCutAudioView::UpdateCBAL(TInt aState)
+ {
+ switch (aState)
+ {
+ case CVeiCutAudioContainer::EStateInitializing:
+ case CVeiCutAudioContainer::EStateOpening:
+ {
+ Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY);
+ break;
+ }
+ case CVeiCutAudioContainer::EStateStoppedInitial:
+ {
+ if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) ) &&
+ ( iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo(iIndex)->Duration() ) )
+ {
+ Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK);
+ }
+ else
+ {
+ Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_DONE);
+ }
+ break;
+ }
+ case CVeiCutAudioContainer::EStatePaused:
+ case CVeiCutAudioContainer::EStateStopped:
+ {
+ if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) ) &&
+ ( iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo(iIndex)->Duration() ) )
+ {
+ Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK);
+ }
+ else
+ {
+ Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_DONE);
+ }
+ break;
+ }
+ case CVeiCutAudioContainer::EStatePlaying:
+ {
+
+ if ( iContainer->PlaybackPositionL() < iMovie->AudioClipCutInTime( iIndex ) )
+ {
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_EMPTY );
+ iMarkState = EMarkStateIn;
+ }
+ else if ( iContainer->PlaybackPositionL() < iMovie->AudioClipCutOutTime( iIndex ) )
+ {
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_OUT );
+ iMarkState = EMarkStateInOut;
+ }
+ else if ( ( iContainer->PlaybackPositionL() > iMovie->AudioClipCutOutTime( iIndex ) ) && iPlayMarked )
+ {
+ iContainer->StopL();
+ iPlayMarked = EFalse;
+ }
+ else
+ {
+ Cba()->SetCommandSetL( R_VEI_SOFTKEYS_EMPTY_OUT );
+ iMarkState = EMarkStateOut;
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ Cba()->DrawDeferred();
+ }
+
+void CVeiCutAudioView::PlayMarkedL()
+ {
+ TTimeIntervalMicroSeconds audioPlayStartTime;
+ audioPlayStartTime = iMovie->AudioClipCutInTime( iIndex );
+
+ TTimeIntervalMicroSeconds audioPlayCutOutTime;
+ audioPlayCutOutTime = iMovie->AudioClipCutOutTime( iIndex );
+
+ if ( !(( audioPlayStartTime.Int64() + 50000 ) > audioPlayCutOutTime.Int64() ) )
+ {
+ iPlayMarked = ETrue;
+ StartNaviPaneUpdateL();
+
+ iContainer->PlayL( audioPlayStartTime.Int64() + 1000 );
+ }
+ else
+ {
+ iContainer->StopL();
+ }
+ }
+
+void CVeiCutAudioView::ClearInOutL( TBool aClearIn, TBool aClearOut )
+ {
+ if ( aClearIn )
+ {
+ iMovie->AudioClipSetCutInTime( iIndex, TTimeIntervalMicroSeconds( 0 ) );
+ iContainer->SetInTimeL( iMovie->AudioClipCutInTime( iIndex ) );
+ }
+ if ( aClearOut )
+ {
+ TTimeIntervalMicroSeconds audioClipOriginalDuration;
+ audioClipOriginalDuration = iMovie->AudioClipInfo( iIndex )->Duration();
+ iMovie->AudioClipSetCutOutTime( iIndex, audioClipOriginalDuration );
+ iContainer->SetOutTimeL( audioClipOriginalDuration );
+ }
+
+ TTimeIntervalMicroSeconds cutin = iMovie->AudioClipCutInTime( iIndex );
+ TTimeIntervalMicroSeconds cutout = iMovie->AudioClipCutOutTime( iIndex );
+
+ if ( ( cutin == TTimeIntervalMicroSeconds( 0 ) ) &&
+ ( cutout == iMovie->AudioClipInfo(iIndex)->Duration() ) )
+ {
+ Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK);
+ Cba()->DrawDeferred();
+ }
+ }
+
+void CVeiCutAudioView::MarkInL()
+ {
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
+ SetPauseIconVisibilityL( ETrue );
+ StopNaviPaneUpdateL();
+/* Check that cut in time is before cut out time */
+ TTimeIntervalMicroSeconds cutOutTime = iMovie->AudioClipCutOutTime( iIndex );
+ TTimeIntervalMicroSeconds cutInTime = iContainer->PlaybackPositionL();
+ if ( cutInTime >= cutOutTime )
+ {
+ cutInTime = cutOutTime.Int64() - 100000;
+ }
+
+ iMovie->AudioClipSetCutInTime( iIndex, cutInTime );
+ iContainer->MarkedInL();
+ }
+
+void CVeiCutAudioView::MarkOutL()
+ {
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
+ SetPauseIconVisibilityL( ETrue );
+ StopNaviPaneUpdateL();
+
+ TTimeIntervalMicroSeconds cutOutTime = iContainer->PlaybackPositionL();
+ TTimeIntervalMicroSeconds cutInTime = iMovie->AudioClipCutInTime( iIndex );
+ if ( cutOutTime <= cutInTime )
+ {
+ cutOutTime = cutInTime.Int64() + 100000;
+ }
+
+ //iMovie->AudioClipSetCutOutTime( iIndex, iContainer->PlaybackPositionL() );
+ iMovie->AudioClipSetCutOutTime( iIndex, cutOutTime );
+ iContainer->MarkedOutL();
+ }
+
+void CVeiCutAudioView::MoveStartOrEndMarkL( TTimeIntervalMicroSeconds aPosition, CVeiCutAudioContainer::TCutMark aMarkType )
+ {
+ LOG(KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, In");
+
+ StopNaviPaneUpdateL();
+
+ LOG(KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, 2");
+
+ if ( aMarkType == CVeiCutAudioContainer::EStartMark )
+ {
+ iMovie->VideoClipSetCutInTime( iIndex, aPosition );
+ }
+ else if ( aMarkType == CVeiCutAudioContainer::EEndMark )
+ {
+ iMovie->VideoClipSetCutOutTime( iIndex, aPosition );
+ }
+ LOG( KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, Out" );
+ }
+
+
+TUint CVeiCutAudioView::InPointTime()
+ {
+ if ( !iMovie )
+ {
+ return 0;
+ }
+ else
+ {
+ return (static_cast<TInt32>(iMovie->AudioClipCutInTime(iIndex).Int64() / 1000));
+ }
+ }
+
+TUint CVeiCutAudioView::OutPointTime()
+ {
+ if ( !iMovie )
+ {
+ return 0;
+ }
+ else
+ {
+ return (static_cast<TInt32>(iMovie->AudioClipCutOutTime(iIndex).Int64() / 1000));
+ }
+ }
+
+CAknNavigationDecorator* CVeiCutAudioView::CreateTimeLabelNaviL()
+ {
+ 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;
+ }
+
+TInt CVeiCutAudioView::UpdateTimeCallbackL(TAny* aPtr)
+ {
+ CVeiCutAudioView* view = (CVeiCutAudioView*)aPtr;
+
+ view->UpdateTimeL();
+
+ return 1;
+ }
+
+
+void CVeiCutAudioView::UpdateTimeL()
+ {
+ DrawTimeNaviL();
+
+ TTimeIntervalMicroSeconds playbackPos = iContainer->PlaybackPositionL();
+
+ if (iMarkState == EMarkStateIn)
+ {
+ if (playbackPos > iMovie->AudioClipCutInTime( iIndex ))
+ {
+ UpdateCBAL(iContainer->State());
+ }
+ }
+ else if (iMarkState == EMarkStateOut)
+ {
+ if (playbackPos < iMovie->AudioClipCutOutTime( iIndex ))
+ {
+ UpdateCBAL(iContainer->State());
+ }
+ }
+ else
+ {
+ if ((playbackPos < iMovie->AudioClipCutInTime( iIndex )) ||
+ (playbackPos > iMovie->AudioClipCutOutTime( iIndex )))
+ {
+ UpdateCBAL(iContainer->State());
+ }
+ }
+ }
+
+void CVeiCutAudioView::DrawTimeNaviL()
+ {
+ TTime elapsed( iContainer->PlaybackPositionL().Int64() );
+ TTime total( iContainer->TotalLength().Int64() );
+
+ TBuf<16> elapsedBuf;
+ TBuf<16> totalBuf;
+
+ HBufC* dateFormatString;
+
+ if ( ( total.Int64() / 1000 ) < 3600000 ) // check if time is over 99:59
+ {
+ 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 (ELeave) 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*, iTimeNavi->DecoratedControl())->SetLabelL(stringholder->Des());
+
+ CleanupStack::PopAndDestroy(stringholder);
+
+
+ /* Prevent the screen light dimming. */
+ if (elapsed.DateTime().Second() == 0 || elapsed.DateTime().Second() == 15 || elapsed.DateTime().Second() == 30 || elapsed.DateTime().Second() == 45)
+ {
+ User::ResetInactivityTime();
+ }
+ }
+
+
+void CVeiCutAudioView::StartNaviPaneUpdateL()
+ {
+ DrawTimeNaviL();
+ if (iTimeUpdater && !iTimeUpdater->IsActive())
+ {
+ iTimeUpdater->Start(500000, 500000, TCallBack(CVeiCutAudioView::UpdateTimeCallbackL, this));
+ }
+ }
+
+void CVeiCutAudioView::StopNaviPaneUpdateL()
+ {
+ if (iContainer)
+ {
+ DrawTimeNaviL();
+ }
+ if (iTimeUpdater && iTimeUpdater->IsActive())
+ {
+ iTimeUpdater->Cancel();
+ }
+ }
+
+TInt CVeiCutAudioView::HideVolumeCallbackL(TAny* aPtr)
+ {
+ CVeiCutAudioView* view = (CVeiCutAudioView*)aPtr;
+ view->HideVolume();
+ return 0;
+ }
+
+void CVeiCutAudioView::HideVolume()
+ {
+ iNaviPane->Pop(iVolumeNavi);
+ }
+
+void CVeiCutAudioView::VolumeMuteL()
+ {
+ iContainer->SetVolumeL(-1000);
+ }
+
+void CVeiCutAudioView::VolumeDownL()
+ {
+ iContainer->SetVolumeL(-1);
+ TInt volume = iContainer->Volume();
+ if (iVolumeHider->IsActive())
+ {
+ iVolumeHider->Cancel();
+ }
+ if (volume == 0)
+ {
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->
+ SetVolumeIconVisibilityL( EFalse );
+ HideVolume();
+ volume = 1;
+ return;
+ }
+
+ iNaviPane->PushL(*iVolumeNavi);
+ iVolumeHider->Start(1000000, 100000, TCallBack(CVeiCutAudioView::HideVolumeCallbackL, this));
+
+ STATIC_CAST(CAknVolumeControl*, iVolumeNavi->DecoratedControl())->SetValue(volume);
+
+ STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(ETrue);
+
+ if (volume < iContainer->MaxVolume())
+ {
+ STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(ETrue);
+ }
+ else
+ {
+ STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(EFalse);
+ }
+ }
+
+void CVeiCutAudioView::VolumeUpL()
+ {
+ iContainer->SetVolumeL(1);
+ STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->
+ SetVolumeIconVisibilityL( ETrue );
+
+ TInt volume = iContainer->Volume();
+ if (iVolumeHider->IsActive())
+ {
+ iVolumeHider->Cancel();
+ }
+ iNaviPane->PushL(*iVolumeNavi);
+ iVolumeHider->Start(1000000, 1000000, TCallBack(CVeiCutAudioView::HideVolumeCallbackL, this));
+
+ STATIC_CAST(CAknVolumeControl*, iVolumeNavi->DecoratedControl())->SetValue(volume);
+
+ if (volume > iContainer->MinVolume() + 1)
+ {
+ STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(ETrue);
+ }
+ else
+ {
+ STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(EFalse);
+ }
+
+ if (volume < iContainer->MaxVolume())
+ {
+ STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(ETrue);
+ }
+ else
+ {
+ STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(EFalse);
+ }
+
+ }
+
+void CVeiCutAudioView::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 ( static_cast<CVeiAppUi*>( AppUi() )->AppIsOnTheWayToDestruction() )
+ {
+ iContainer->PrepareForTerminationL();
+ }
+ else
+ {
+ iContainer->PauseL();
+ }
+ iNaviPane->Pop( iTimeNavi );
+ }
+ else
+ {
+ iNaviPane->PushL( *iTimeNavi );
+ }
+ }
+
+// ---------------------------------------------------------
+// CVeiCutAudioView::HandleStatusPaneSizeChange()
+// ---------------------------------------------------------
+//
+void CVeiCutAudioView::HandleStatusPaneSizeChange()
+ {
+ if ( iContainer )
+ {
+ iContainer->SetRect( AppUi()->ClientRect() );
+ }
+ }
+
+void CVeiCutAudioView::GetAudioVisualizationL()
+ {
+ LOG(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization(), In");
+ CVedAudioClipInfo* audioInfo = NULL;
+ if (iMovie)
+ {
+ audioInfo = iMovie->AudioClipInfo( iIndex );
+ if (audioInfo && iContainer)
+ {
+ TInt64 duration = audioInfo->Duration().Int64();
+ TInt resolution = (duration/1000)/KAudioSampleInterval;
+
+ LOGFMT(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization() 2, calling audioInfo->GetVisualizationL(*iContainer, resolution, 1), where resolution is:%Ld", resolution);
+ audioInfo->GetVisualizationL(*iContainer, resolution, 1);
+ }
+ }
+
+ LOG(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization(), Out");
+ }
+
+void CVeiCutAudioView::CancelVisualizationL()
+ {
+ CVedAudioClipInfo* audioInfo = NULL;
+ if (iMovie)
+ {
+ audioInfo = iMovie->AudioClipInfo( iIndex );
+ }
+ if (audioInfo && iContainer)
+ {
+ TInt resolution = (audioInfo->Duration().Int64()/1000)/KAudioSampleInterval;
+ audioInfo->CancelVisualizationL();
+ }
+ }
+
+void CVeiCutAudioView::HandleResourceChange(TInt aType)
+ {
+ LOGFMT(KVideoEditorLogFile, "CVeiCutAudioView::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
+ iTimeNavi->DecoratedControl()->HandleResourceChange( aType );
+ iVolumeNavi->DecoratedControl()->HandleResourceChange( aType );
+ }
+
+ LOG(KVideoEditorLogFile, "CVeiCutAudioView::HandleResourceChange() Out");
+ }
+
+// End of File