videditor/ManualVideoEditor/src/VeiCutAudioView.cpp
changeset 0 951a5db380a0
--- /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