videditor/ManualVideoEditor/src/VeiCutAudioContainer.cpp
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videditor/ManualVideoEditor/src/VeiCutAudioContainer.cpp	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,1296 @@
+/*
+* 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 <manualvideoeditor.rsg>
+#include <videoeditoruicomponents.mbg>
+#include <eikbtgpc.h>
+#include <coemain.h>
+#include <eikenv.h>
+#include <aknsbasicbackgroundcontrolcontext.h> 
+#include <aknsdrawutils.h> 
+#include <aknsdatacontext.h> 
+#include <stringloader.h>
+#include <aknnotewrappers.h> 
+#include <MdaAudioSamplePlayer.h>
+#include <eikprogi.h>
+#include <audiopreference.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+// User includes
+#include "manualvideoeditor.hrh"
+#include "VeiAppUi.h"
+#include "VeiCutAudioContainer.h"
+#include "VeiCutAudioView.h"
+#include "VeiCutterBar.h"
+#include "veitextdisplay.h"
+#include "VideoEditorCommon.h"      // Video Editor UID
+#include "VideoEditorHelp.hlp.hrh"  // Topic contexts (literals)
+#include "VeiVideoEditorSettings.h"
+#include "VideoEditorUtils.h"
+#include "SampleArrayHandler.h"
+#include "VeiErrorUi.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+CVeiCutAudioContainer* CVeiCutAudioContainer::NewL( const TRect& aRect, CVeiCutAudioView& aView, CVeiErrorUI& aErrorUI )
+    {
+    CVeiCutAudioContainer* self = CVeiCutAudioContainer::NewLC( aRect, aView, aErrorUI );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CVeiCutAudioContainer* CVeiCutAudioContainer::NewLC( const TRect& aRect, CVeiCutAudioView& aView, CVeiErrorUI& aErrorUI )
+    {
+    CVeiCutAudioContainer* self = new (ELeave) CVeiCutAudioContainer( aRect, aView, aErrorUI );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect, aView, aErrorUI );
+    return self;
+    }
+
+void CVeiCutAudioContainer::ConstructL( const TRect& aRect, CVeiCutAudioView& /*aView*/, CVeiErrorUI& /*aErrorUI*/ )
+    {
+    CreateWindowL();
+
+    iState = EStateInitializing;
+    iFrameReady = EFalse;
+
+    iSeekPos = TTimeIntervalMicroSeconds( 0 );
+    iSeeking = EFalse;
+    iCutAudioBar = CVeiCutterBar::NewL( this );
+    iCutTimeDisplay = CVeiTextDisplay::NewL( iCutTimeDisplayRect, this );
+
+    iPreviousScreenMode = -1;
+    iCurrentScreenMode = -1;
+
+    TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) );
+
+    AknIconUtils::CreateIconL( iPauseBitmap, iPauseBitmapMask,
+        mbmPath, EMbmVideoeditoruicomponentsQgn_prop_ve_pause, 
+        EMbmVideoeditoruicomponentsQgn_prop_ve_pause_mask );
+
+    SetRect( aRect );
+
+    iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse );
+
+    iAudioSamplePlayer = CMdaAudioPlayerUtility::NewL( *this,EMdaPriorityMax, 
+        TMdaPriorityPreference( KAudioPrefVideoRecording ) );
+
+    iVideoBarTimer = CPeriodic::NewL( CActive::EPriorityLow );
+
+    iSampleArrayHandler = CSampleArrayHandler::NewL();
+
+    EnableDragEvents();
+
+    ActivateL();
+    }
+
+CVeiCutAudioContainer::CVeiCutAudioContainer( const TRect& /*aRect*/, CVeiCutAudioView& aView, CVeiErrorUI& aErrorUI ):iView( aView ), iErrorUI( aErrorUI )
+    {
+    }       
+
+void CVeiCutAudioContainer::OpenAudioFileL( const TDesC& aFileName )
+    {
+    if ( iAudioSamplePlayer )
+        {
+        iAudioSamplePlayer->OpenFileL( aFileName );
+        }
+    GetVisualizationL();
+    }
+
+CVeiCutAudioContainer::~CVeiCutAudioContainer()
+    {
+    if ( iProgressNote )
+        {
+        delete iProgressNote;
+        iProgressNote = NULL;
+        }
+    if ( iCutAudioBar )
+        {
+        delete iCutAudioBar;
+        }
+    if ( iCutTimeDisplay )
+        {
+        delete iCutTimeDisplay;
+        }
+    if ( iBgContext )
+        {
+        delete iBgContext;
+        }
+    delete iPauseBitmap;
+    delete iPauseBitmapMask;
+
+    if ( iVideoBarTimer )
+        {
+        iVideoBarTimer->Cancel();
+        delete iVideoBarTimer;
+        }
+    if ( iAudioSamplePlayer )
+        {
+        delete iAudioSamplePlayer;
+        }
+    if (iSampleArrayHandler)
+        {
+        delete iSampleArrayHandler;
+        }
+        
+    delete iCallBack;
+
+    delete iBufBitmap;
+    iBufBitmap = NULL;
+
+    delete iRemConTarget;
+    }
+
+void CVeiCutAudioContainer::SizeChanged()
+    {
+    TSize videoScreenSize;
+    TRect rect( Rect() ); 
+    if ( iBgContext )
+        {
+        iBgContext->SetRect( rect );
+        }
+
+    iPreviousScreenMode = iCurrentScreenMode;
+    iCurrentScreenMode = iEikonEnv->ScreenDevice()->CurrentScreenMode();
+
+
+	// Scissor icon
+	TAknLayoutRect scissorsIconLayout;
+	scissorsIconLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::main_vded_pane_g1());
+	iCutAudioBar->SetComponentRect(CVeiCutterBar::EScissorsIcon, scissorsIconLayout.Rect());
+		
+	// Progress bar
+	TAknLayoutRect progressBarLayout; 
+	progressBarLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_slider_pane());
+	iCutAudioBar->SetComponentRect(CVeiCutterBar::EProgressBar, progressBarLayout.Rect());
+
+	// left end of the slider when that part is unselected
+	TAknLayoutRect sliderLeftEndLayout;
+	sliderLeftEndLayout.LayoutRect( progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3() );
+	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, sliderLeftEndLayout.Rect() );
+		
+	// middle part of the slider when that part is unselected	
+	TAknLayoutRect sliderMiddleLayout;
+	sliderMiddleLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g5());
+	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon, sliderMiddleLayout.Rect() );		
+	
+	// right end of the slider when that part is unselected
+	TAknLayoutRect sliderRightEndLayout;
+	sliderRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4());
+	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon, sliderRightEndLayout.Rect() );	
+		
+	// left end of the cut selection slider 
+	TAknLayoutRect sliderSelectedLeftEndLayout;
+	sliderSelectedLeftEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3());
+	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, sliderSelectedLeftEndLayout.Rect() );
+		
+	// middle part of the cut selection slider 
+	TAknLayoutRect sliderSelectedMiddleLayout;
+	sliderSelectedMiddleLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g5());
+	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon, sliderSelectedMiddleLayout.Rect() );		
+	
+	// right end of the cut selection slider 
+	TAknLayoutRect sliderSelectedRightEndLayout;
+	sliderSelectedRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4());
+	iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon, sliderSelectedRightEndLayout.Rect() ); 
+
+    // playhead
+    TAknLayoutRect playheadLayout;
+	playheadLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g1());
+	iCutAudioBar->SetComponentRect( CVeiCutterBar::EPlayheadIcon, playheadLayout.Rect() ); 
+
+    // left/right border of cut selection slider
+    TAknLayoutRect cutAreaBorderLayout;
+	cutAreaBorderLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g2());
+	iCutAudioBar->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon, cutAreaBorderLayout.Rect() ); 
+		
+		
+	// Start cut time text
+	TAknLayoutText startTimeTextLayout;
+	startTimeTextLayout.LayoutText(rect, AknLayoutScalable_Apps::main_vded_pane_t1() );
+	iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EStartTimeText, startTimeTextLayout.TextRect());
+	
+	// End cut time text
+	TAknLayoutText endTimeTextLayout;
+	endTimeTextLayout.LayoutText(rect, AknLayoutScalable_Apps::main_vded_pane_t2() );
+	iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EEndTimeText, endTimeTextLayout.TextRect());
+	
+	// Start cut time icon
+	TAknLayoutRect startTimeIconLayout;
+	startTimeIconLayout.LayoutRect(rect, AknLayoutScalable_Apps::main_vded_pane_g2() );
+	iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EStartTimeIcon, startTimeIconLayout.Rect());
+	
+	// End cut time icon
+	TAknLayoutRect endTimeIconLayout;
+	endTimeIconLayout.LayoutRect(rect, AknLayoutScalable_Apps::main_vded_pane_g3() );
+	iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EEndTimeIcon, endTimeIconLayout.Rect());
+		
+	// Pause icon
+	
+
+
+	// Video Display	
+	TAknLayoutRect videoDisplayLayout;
+	videoDisplayLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_video_pane());
+
+	iIconDisplayRect = videoDisplayLayout.Rect();
+	LOGFMT2(KVideoEditorLogFile, "CVeiCutAudioContainer::SizeChanged(): iIconDisplayRect: %d,%d", iIconDisplayRect.iBr.iX, iIconDisplayRect.iBr.iY);
+
+	//CVeiCutterBar
+	// : Change this when LAF data is ready
+	TPoint cutBarTl = TPoint(STATIC_CAST( TInt, rect.iBr.iX*0.0114 ),
+		STATIC_CAST( TInt, rect.iBr.iY*0.875 ) );
+	TSize cutBarSize = TSize(STATIC_CAST( TInt, rect.iBr.iX*0.9773 ),
+		STATIC_CAST( TInt, rect.iBr.iY*0.0973 ) );
+
+	TRect cutBarRect( cutBarTl, cutBarSize );
+	iCutAudioBar->SetRect( cutBarRect );
+
+	//CVeiTextDisplay
+	// : Change this when LAF data is ready
+	TPoint cutTimeDisplayTl = TPoint(cutBarTl.iX,
+		STATIC_CAST( TInt, rect.iBr.iY*0.757 ) );
+	TSize cutTimeDisplaySize = TSize(cutBarSize.iWidth,
+		STATIC_CAST( TInt, rect.iBr.iY*0.0903 ) );
+
+	iCutTimeDisplayRect = TRect( cutTimeDisplayTl, cutTimeDisplaySize );
+	iCutTimeDisplay->SetRect( iCutTimeDisplayRect );
+	iCutTimeDisplay->SetLayout( CVeiTextDisplay::ECutInCutOut );
+
+
+
+    TInt iconWidth = STATIC_CAST( TInt, rect.iBr.iX * 0.07954545455 );
+    AknIconUtils::SetSize( iPauseBitmap, TSize(iconWidth,iconWidth), EAspectRatioNotPreserved );
+
+    //  Create buffer bitmap with the correct size
+    if (iBufBitmap)
+        {
+        delete iBufBitmap;
+        iBufBitmap = NULL;
+        }
+    TSize size = Rect().Size();
+    TDisplayMode dmode = EColor64K;
+    // " ... If the instantiation process really needs 
+    // not to leave, use "new CXxx" and check for NULL."
+    iBufBitmap = new CFbsBitmap;
+    TInt err = KErrNone;
+    if (iBufBitmap)
+        {
+        err = iBufBitmap->Create(size, dmode);
+        }
+
+    if (iState != EStateInitializing && !err)
+        {
+        TRAP_IGNORE( DrawToBufBitmapL() );
+        }
+    }
+
+
+TTypeUid::Ptr CVeiCutAudioContainer::MopSupplyObject( TTypeUid aId )
+    {
+    if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext )
+        {
+        return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+        }
+    return CCoeControl::MopSupplyObject( aId );
+    }
+
+TInt CVeiCutAudioContainer::CountComponentControls() const
+    {
+    return 2;
+    }
+
+CCoeControl* CVeiCutAudioContainer::ComponentControl( TInt aIndex ) const
+    {
+    switch ( aIndex )
+        {
+        case 0:
+            return iCutAudioBar;
+        case 1:
+            return iCutTimeDisplay;
+        default:
+            return NULL;
+        }
+    }
+
+void CVeiCutAudioContainer::DrawToBufBitmapL()
+    {
+    //  Create bitmap graphics context
+    CFbsBitmapDevice * bitmapDevice = CFbsBitmapDevice::NewL (iBufBitmap);
+    CleanupStack::PushL (bitmapDevice);
+    CFbsBitGc * bitmapContext = 0;
+    User::LeaveIfError (bitmapDevice->CreateContext (bitmapContext));
+    CleanupStack::PushL (bitmapContext);
+    CGraphicsContext * graphicsContext = 0;
+    User::LeaveIfError (bitmapDevice->CreateContext (graphicsContext));
+    CleanupStack::PushL (graphicsContext);
+
+    // Draw skin background
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );    
+    AknsDrawUtils::DrawBackground( skin, cc, this, *((CBitmapContext*)graphicsContext), TPoint(0,0), Rect(), KAknsDrawParamDefault );
+
+    if ( iState == EStatePaused )
+        {
+        TPoint pauseIconTl = TPoint( iIconDisplayRect.iTl.iX - STATIC_CAST( TInt, Rect().iBr.iX*0.105),
+            iIconDisplayRect.iTl.iY + STATIC_CAST( TInt, Rect().iBr.iY*0.178 ));
+        bitmapContext->BitBltMasked( pauseIconTl, iPauseBitmap, 
+            TRect( TPoint(0,0), iPauseBitmap->SizeInPixels() ), 
+            iPauseBitmapMask, EFalse );
+        }
+
+    if (iSampleArrayHandler)
+        {
+        bitmapContext->SetPenSize( TSize(2,1) );    
+        bitmapContext->SetBrushStyle(CGraphicsContext::ESolidBrush);
+        bitmapContext->SetBrushColor(KRgbWhite);
+        bitmapContext->SetPenColor( KRgbBlack); 
+        bitmapContext->DrawRoundRect( iIconDisplayRect, TSize(4,4));
+
+        iSampleArrayHandler->ScaleAudioVisualization(iIconDisplayRect.Height()/2 - 3); // -2 to eliminate drawing columns to long
+
+        // how many pixels are reserved for each vertical sample line
+        TInt diff = 1;          
+        // how many samples fit in rect
+        TInt samplesInDisplay = iIconDisplayRect.Width()/diff;  
+
+        TBool started = EFalse;
+        TPoint topLeftHighlighted(iIconDisplayRect.iTl.iX, iIconDisplayRect.iTl.iY);    
+        TPoint bottomRightLighted(iIconDisplayRect.iTl.iX, iIconDisplayRect.iBr.iY);
+
+        for (TInt i = 0; (iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2 < iSampleArrayHandler->Size() && 
+            iIconDisplayRect.iTl.iX + i*diff < iIconDisplayRect.iBr.iX;  i++)                               
+            {
+            TInt x = iIconDisplayRect.iTl.iX + i*diff;  
+            TInt y = iIconDisplayRect.iBr.iY - iIconDisplayRect.Height()/2;
+
+            // in the beginning of clip, nothing is drawn on the left side of the rect                      
+            if ((iSampleArrayHandler->CurrentPoint() + i) - samplesInDisplay/2 > 1)
+                {
+                if (iSampleArrayHandler->SampleCutted((iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2))
+                    {
+                    if (!started)
+                        {                       
+                        topLeftHighlighted.iX = x;
+                        started = ETrue;
+                        }
+                    bottomRightLighted.iX = x;
+                    bitmapContext->SetPenColor( KRgbRed );
+                    }
+                else
+                    {
+                    bitmapContext->SetBrushStyle(CGraphicsContext::EDiamondCrossHatchBrush);    
+                    TRect rec(TPoint(1,1), TPoint(2,2));
+                    bitmapContext->DrawRect( rec);
+                    bitmapContext->SetPenColor( KRgbBlack); 
+                    }
+
+                // to eliminate from drawing over surrounding black rect
+                if (x > iIconDisplayRect.iTl.iX + 1)
+                    {                   
+                    bitmapContext->DrawLine(TPoint(x, y),
+                        TPoint(x, (y - 1) - iSampleArrayHandler->Sample((iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2)));
+
+                    bitmapContext->DrawLine(TPoint(x, y),
+                        TPoint(x, (y + 1) + iSampleArrayHandler->Sample((iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2)));
+                    }
+                }
+            }
+
+        // not selected area is "dimmed"
+        bitmapContext->SetPenColor( KRgbBlack); 
+        bitmapContext->SetDrawMode(CGraphicsContext::EDrawModeAND);
+        bitmapContext->SetBrushStyle(CGraphicsContext::EDiamondCrossHatchBrush);
+
+        TPoint brArea1(topLeftHighlighted.iX, iIconDisplayRect.iBr.iY);
+        TRect rect1(iIconDisplayRect.iTl, brArea1);
+        bitmapContext->DrawRoundRect( rect1, TSize(4,4));
+
+        TPoint tlArea2(bottomRightLighted.iX, iIconDisplayRect.iTl.iY);
+        TRect rect2(tlArea2, iIconDisplayRect.iBr);
+        bitmapContext->DrawRoundRect( rect2, TSize(4,4));
+
+        bitmapContext->SetPenColor( KRgbGreen );    
+        bitmapContext->DrawLine(TPoint((iIconDisplayRect.iTl.iX + iIconDisplayRect.iBr.iX)/2, 
+            iIconDisplayRect.iTl.iY + 1),
+            TPoint((iIconDisplayRect.iTl.iX + iIconDisplayRect.iBr.iX)/2, 
+            iIconDisplayRect.iBr.iY - 2));
+        }
+
+    CleanupStack::PopAndDestroy( graphicsContext ); 
+    CleanupStack::PopAndDestroy( bitmapContext );
+    CleanupStack::PopAndDestroy( bitmapDevice );         
+    DrawDeferred();
+    }
+
+void CVeiCutAudioContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+    CWindowGc& gc = SystemGc();
+
+    if ( iBufBitmap && iBufBitmap->Handle() )
+        {
+        gc.BitBlt(TPoint(0,0), iBufBitmap);
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CVeiCutAudioContainer::GetHelpContext(...) const
+//
+// Gets the control's help context. Associates the control with a particular
+// Help file and topic in a context sensitive application.
+// ----------------------------------------------------------------------------
+//
+void CVeiCutAudioContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::GetHelpContext(): In");
+
+    // Set UID of the CS Help file (same as application UID).
+    aContext.iMajor = KUidVideoEditor;
+
+    // Set the context/topic.
+    aContext.iContext = KVED_HLP_CUT_AUDIO_VIEW;
+
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::GetHelpContext(): Out");
+    }
+
+
+void CVeiCutAudioContainer::HandleControlEventL(
+    CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVeiCutAudioContainer::HandlePointerEventL
+// From CCoeControl
+// ----------------------------------------------------------------------------
+//		
+void CVeiCutAudioContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent )
+	{
+	LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandlePointerEventL(): In");
+	if( AknLayoutUtils::PenEnabled() && iCutAudioBar )
+		{
+		CCoeControl::HandlePointerEventL( aPointerEvent );
+		
+		switch( aPointerEvent.iType )
+			{
+			case TPointerEvent::EButton1Down:
+				{
+				iIsMarkDrag = EFalse;
+				iIsMarkTapped = EFalse;
+				TRect startMarkRect = iCutAudioBar->StartMarkRect();
+				TRect endMarkRect = iCutAudioBar->EndMarkRect();				
+				// check if the pen goes down inside the start mark
+				if (startMarkRect.Contains(aPointerEvent.iPosition)) 
+					{
+					iIsMarkTapped = ETrue;
+					iTappedMark = EStartMark;
+					}
+				// check if the pen goes down inside the end mark	
+				else if (endMarkRect.Contains(aPointerEvent.iPosition))
+					{
+					iIsMarkTapped = ETrue;
+					iTappedMark = EEndMark;
+					}					
+				
+				TRect progressBarRect(iCutAudioBar->ProgressBarRect());	
+				// check if the pen goes down inside the progress bar				
+				if( progressBarRect.Contains( aPointerEvent.iPosition ) )
+					{
+					iIsMarkDrag = EFalse;					
+					}
+				break;
+				}
+			case TPointerEvent::EDrag:
+				{
+				
+				TRect progressBarRect(iCutAudioBar->ProgressBarRect());
+				if ( progressBarRect.Contains( aPointerEvent.iPosition ) )
+				{
+					
+					if (iIsMarkTapped)
+						{
+						iIsMarkDrag = ETrue;
+						HandleProgressBarTouchL( progressBarRect, 
+												 aPointerEvent.iPosition.iX,
+												 ETrue,
+												 iTappedMark );
+						}
+					else 
+						{
+						
+						HandleProgressBarTouchL( progressBarRect, 
+												 aPointerEvent.iPosition.iX,
+												 EFalse);
+						}
+				}
+				break;		
+				}
+			case TPointerEvent::EButton1Up:
+				{
+				// pen up event is handled if it wasn't dragged
+				if (!iIsMarkDrag)
+					{
+					TRect progressBarRect(iCutAudioBar->ProgressBarRect());					
+					// Check if pressed position is in progress bar's rect
+					if( progressBarRect.Contains( aPointerEvent.iPosition ) )
+						{
+						HandleProgressBarTouchL( progressBarRect, 
+											 aPointerEvent.iPosition.iX,
+											 EFalse);
+						}
+					}
+				break;
+				}		
+			default:
+				{
+				break;	
+				}	
+			}
+		}	
+	LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandlePointerEventL(): Out");		
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVeiCutAudioContainer::HandleProgressBarTouchL
+// 
+// ----------------------------------------------------------------------------
+//	
+void CVeiCutAudioContainer::HandleProgressBarTouchL( TRect aPBRect, 
+												 TInt aPressedPoint,
+												 TBool aDragMarks,
+												 CVeiCutAudioContainer::TCutMark aCutMark )
+	{
+	if ( (AknLayoutUtils::PenEnabled()) && ( iState!=EStateInitializing ))
+		{	
+		LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleProgressBarTouchL(): In");
+
+		if (iState == EStatePlaying)		
+			{
+			StopL();	
+			}
+		
+		// Progress Bar start and end points, and length
+		TInt pbEndPoint( aPBRect.iBr.iX );
+		TInt pbStartPoint = ( aPBRect.iTl.iX );		
+		TInt totalPBLength( pbEndPoint - pbStartPoint );
+				
+		// calculate the time position from the tapped progress bar coordinates 
+		TTimeIntervalMicroSeconds newPosition( 
+										( ( aPressedPoint - pbStartPoint ) * 
+							  			iAudioSamplePlayer->Duration().Int64() ) / 
+							  			totalPBLength );
+		
+		// move cut marks
+		if (aDragMarks)
+		{
+			// check that the start mark doesn't go past the end mark
+			// and not to the beginning			
+			if ((aCutMark == EStartMark) && 
+			    (newPosition.Int64() > 0) &&
+				(aPressedPoint < iCutAudioBar->EndMarkPoint() - 2*iCutAudioBar->EndMarkRect().Width()))
+				{				
+				iView.MoveStartOrEndMarkL(newPosition, EStartMark);				
+				iCutAudioBar->SetInPoint( newPosition	);
+				iCutTimeDisplay->SetCutIn( newPosition );
+				}
+			// check that the end mark doesn't go before the start mark	
+			// and not too close to the beginning			
+			else if ((aCutMark == EEndMark) && 
+				(newPosition.Int64() >= KMinCutVideoLength) &&			
+				(aPressedPoint > iCutAudioBar->StartMarkPoint() + 2*iCutAudioBar->StartMarkRect().Width()))
+                
+				{				
+				iView.MoveStartOrEndMarkL(newPosition, EEndMark);				
+				iCutAudioBar->SetOutPoint( newPosition	);
+				iCutTimeDisplay->SetCutOut( newPosition );
+				}
+		}
+				
+		// move playhead
+		else if (( newPosition != iLastPosition ) && !aDragMarks)
+			{
+			iLastPosition = newPosition;
+			
+			iSeekPos = TTimeIntervalMicroSeconds( newPosition );
+			
+			iCutAudioBar->SetCurrentPoint( (static_cast<TInt32>(iSeekPos.Int64() / 1000)));
+			iAudioSamplePlayer->SetPosition( iSeekPos );
+			UpdateVisualizationL();
+					
+			iView.UpdateTimeL();
+			}	
+			
+		LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleProgressBarTouchL(): Out");
+			
+		}// PenEnabled
+		
+	}
+
+
+void CVeiCutAudioContainer::PlayL( const TTimeIntervalMicroSeconds& aStartTime )
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL(): In, aStartTime:%Ld", aStartTime.Int64());
+    if ( aStartTime != TTimeIntervalMicroSeconds(0) )
+        {
+        LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 2, setting pos:%Ld", aStartTime.Int64());
+        iAudioSamplePlayer->SetPosition( aStartTime );
+        UpdateVisualizationL();
+        }
+    else
+        {
+        LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 3, setting pos:%Ld", iSeekPos.Int64());     
+        iAudioSamplePlayer->SetPosition( iSeekPos );
+        UpdateVisualizationL();
+        }   
+
+    SetStateL( EStatePlaying );
+
+    iAudioSamplePlayer->Play();
+    const TUint delay = 100000;
+
+    if ( !iVideoBarTimer->IsActive() )
+        {
+        LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 4");
+        iVideoBarTimer->Start( delay, delay, TCallBack( CVeiCutAudioContainer::DoAudioBarUpdate, this ) );
+        LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 5");
+        }
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL(): Out");    
+    }
+
+void CVeiCutAudioContainer::StopL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::StopL(): In");
+    iAudioSamplePlayer->Stop();
+
+    iSeekPos = TTimeIntervalMicroSeconds( 0 );
+    iLastPosition = TTimeIntervalMicroSeconds( 0 );
+    SetStateL( EStateStopped );
+    PlaybackPositionL();
+
+    iVideoBarTimer->Cancel();
+    iCutAudioBar->SetFinishedStatus( ETrue );
+
+    UpdateVisualizationL();
+
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::StopL(): Out");
+    }
+
+void CVeiCutAudioContainer::PauseL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PauseL(): In");
+
+    PlaybackPositionL();
+
+    iVideoBarTimer->Cancel();
+    iAudioSamplePlayer->Pause();
+
+    if (iState != EStateInitializing) 
+        {
+        SetStateL( EStatePaused );
+        }
+    else
+        {
+        SetStateL( EStateStoppedInitial );
+        }
+    iView.UpdateCBAL(iState);
+    // draw new visualization to bitmap
+    DrawToBufBitmapL();
+
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PauseL(): Out");
+    }
+
+void CVeiCutAudioContainer::CloseStreamL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::CloseStreamL(): In");
+
+    PlaybackPositionL();
+    SetStateL( EStateStopped );
+
+    iAudioSamplePlayer->Stop();
+    iAudioSamplePlayer->Close();
+
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::CloseStreamL(): Out");
+    }
+
+void CVeiCutAudioContainer::SetInTimeL( const TTimeIntervalMicroSeconds& aTime )
+    {
+    iMarkedInTime = aTime;
+    if ( iCutTimeDisplay )
+        {       
+        iCutTimeDisplay->SetCutIn( aTime );
+        }
+    if ( iCutAudioBar )
+        {
+        iCutAudioBar->SetInPoint( aTime );
+        }
+    if (iSampleArrayHandler)
+        {
+        iSampleArrayHandler->SetCutInPoint(aTime);          
+        }
+    // draw new visualization to bitmap
+    DrawToBufBitmapL();
+    }
+
+void CVeiCutAudioContainer::SetOutTimeL( const TTimeIntervalMicroSeconds& aTime )
+    {
+    iMarkedOutTime = aTime;
+    if ( iCutTimeDisplay )
+        {
+        iCutTimeDisplay->SetCutOut( aTime );
+        }
+    if ( iCutAudioBar )
+        {
+        iCutAudioBar->SetOutPoint( aTime );
+        }
+    if (iSampleArrayHandler)
+        {
+        iSampleArrayHandler->SetCutOutPoint(aTime);         
+        }
+    // draw new visualization to bitmap
+    DrawToBufBitmapL();
+    }
+
+const TTimeIntervalMicroSeconds& CVeiCutAudioContainer::TotalLength()
+    {
+    return iDuration;
+    }
+
+const TTimeIntervalMicroSeconds& CVeiCutAudioContainer::PlaybackPositionL()
+    {
+    if (iSeeking)
+        {
+        return iSeekPos;
+        }
+    if (iState != EStatePlaying)
+        {
+        return iLastPosition;
+        }
+
+    TInt posError = iAudioSamplePlayer->GetPosition( iLastPosition );
+    //LOGFMT2(KVideoEditorLogFile, "CVeiCutAudioContainer::PlaybackPositionL(): %Ld, error: %d", iLastPosition.Int64(), posError);
+    posError = 0;
+
+    return iLastPosition;
+    }
+
+TKeyResponse CVeiCutAudioContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+    {
+    if ( aType == EEventKeyDown ) 
+        {
+        iKeyRepeatCount = 0;
+
+        iAudioSamplePlayer->GetPosition( iSeekPos );
+
+        LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::OfferKeyEventL(): EEventKeyDown, pos: %Ld", iSeekPos.Int64());
+
+        return EKeyWasConsumed;
+        }
+    else if ( aType == EEventKeyUp ) 
+        {
+
+        if ( iSeeking == EFalse )
+            {
+            LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::OfferKeyEventL(): EEventKeyUp, seeking false");
+            return EKeyWasNotConsumed;
+            }
+
+        iSeeking = EFalse;
+        iLastPosition = iSeekPos;
+        iAudioSamplePlayer->SetPosition( iSeekPos );
+        UpdateVisualizationL();
+        if ( iState == EStatePlaying )
+            {
+            iAudioSamplePlayer->Play();
+            }
+
+        LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::OfferKeyEventL(): EEventKeyUp, seeking true");
+
+        return EKeyWasConsumed;
+        }
+    else if ( aType == EEventKey )
+        {
+        if ( ( aKeyEvent.iRepeats == 0 ) &&
+            ( (aKeyEvent.iCode != EKeyDownArrow ) &&
+            ( aKeyEvent.iCode != EKeyUpArrow ) ) )
+            {
+            iAudioSamplePlayer->Pause();
+            }
+        iLastKeyCode = aKeyEvent.iCode;
+
+        switch (aKeyEvent.iCode)
+            {
+            case EKeyOK:
+                {
+                iView.HandleCommandL( EAknSoftkeyOk );
+                return EKeyWasConsumed;
+                }
+            case EKeyDownArrow:
+                {
+                iView.ProcessCommandL( EVeiCmdCutVideoVolumeDown );
+                return EKeyWasConsumed;
+                }
+            case EKeyUpArrow:
+                {
+                iView.ProcessCommandL( EVeiCmdCutVideoVolumeUp );
+                return EKeyWasConsumed;
+                }
+            case EKeyRightArrow:
+                {
+
+                if ( iSeeking == EFalse )
+                    {
+                    iAudioSamplePlayer->Pause();
+                    }
+
+                iSeeking = ETrue;
+                iKeyRepeatCount++;
+
+                TInt adjustment = TimeIncrement( iKeyRepeatCount );
+
+                TInt64 newPos = iSeekPos.Int64() + adjustment;
+
+                if ( newPos > iAudioSamplePlayer->Duration().Int64() )
+                    {
+                    newPos = iAudioSamplePlayer->Duration().Int64();
+                    }
+                iSeekPos = TTimeIntervalMicroSeconds( newPos );
+                iCutAudioBar->SetCurrentPoint( static_cast<TInt32>((iSeekPos.Int64() / 1000)));
+
+                iView.UpdateTimeL();
+
+                // mieti onko eka rivi tarpeen
+                iAudioSamplePlayer->SetPosition( iSeekPos );
+                UpdateVisualizationL();
+                return EKeyWasConsumed;
+                }
+
+            case EKeyLeftArrow:
+                {
+                if ( iSeeking == EFalse )
+                    {
+                    iAudioSamplePlayer->Pause();
+                    }
+
+                iSeeking = ETrue;
+                iKeyRepeatCount++;
+
+                TInt adjustment = TimeIncrement( iKeyRepeatCount );
+
+                TInt64 newPos = iSeekPos.Int64() - adjustment;
+                if ( newPos < 0 ) 
+                    {
+                    newPos = 0;
+                    }
+                iSeekPos = TTimeIntervalMicroSeconds( newPos ); 
+                iCutAudioBar->SetCurrentPoint(static_cast<TInt32>( (iSeekPos.Int64() / 1000)));
+
+                iView.UpdateTimeL();                
+                iAudioSamplePlayer->SetPosition( iSeekPos );
+                UpdateVisualizationL();
+                return EKeyWasConsumed;
+                }
+            case EKeyBackspace:     //Clear 
+                {
+                iView.ClearInOutL( ETrue, ETrue );
+                UpdateVisualizationL();             
+                return EKeyWasConsumed;
+                }
+            default:
+                {
+                return EKeyWasNotConsumed;
+                }
+            }
+        }
+    else
+        {
+        return EKeyWasNotConsumed;
+        }
+    }
+
+
+
+TInt CVeiCutAudioContainer::TimeIncrement(TInt aKeyCount) const
+    {
+    if ( aKeyCount < 3 )
+        {
+        return 100000;
+        }
+    else if ( aKeyCount < 4 )
+        {
+        return 300000;
+        }
+    else if ( aKeyCount < 5 )
+        {
+        return 500000;
+        }
+    else if ( aKeyCount < 10 )
+        {
+        return 1000000;
+        }
+    else if ( aKeyCount < 13 )
+        {
+        return 2000000;
+        }
+    else if ( aKeyCount < 15 )
+        {
+        return 3000000;
+        }
+    else
+        {
+        return 5000000;
+        }
+    }
+
+void CVeiCutAudioContainer::SetStateL(CVeiCutAudioContainer::TCutAudioState aState)
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::SetStateL(): In: aState:%d", aState);
+
+    iState = aState;
+    iView.UpdateCBAL( aState );
+
+    // If the foreground is lost while an arrow key is down, we do not get
+    // the key up -event, and iSeeking remains true. Reseting it here just in case.
+    iSeeking = EFalse;
+
+    // While playing, grab the volume keys for adjusting playback volume.
+    // In other states let them pass e.g. to the music player.
+    if(EStatePlaying == iState)
+        {
+        if (!iRemConTarget)
+            {
+            iRemConTarget = CVeiRemConTarget::NewL( *this );
+            }
+        }
+    else
+        {
+        delete iRemConTarget;
+        iRemConTarget = NULL;
+        }
+
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::SetStateL(): Out");
+    }
+
+void CVeiCutAudioContainer::MarkedInL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedInL(): In");             
+
+    if (iState == EStateInitializing || iState == EStateOpening)
+        {
+        return;
+        }
+
+    TTimeIntervalMicroSeconds cutIn = PlaybackPositionL();
+    if ( iCutTimeDisplay )
+        {
+        iCutTimeDisplay->SetCutIn( cutIn );
+        }
+    LOGFMT2(KVideoEditorLogFile, "\tIn point: %Ld, state: %d", cutIn.Int64(), iState);
+
+    iCutAudioBar->SetInPoint( cutIn );
+    
+    if (iSampleArrayHandler)
+        {
+        iSampleArrayHandler->SetCutInPoint(cutIn);          
+        }
+        
+    if ( iState == EStatePlaying )
+        {
+        PauseL();
+        }
+    else
+        {
+        iView.UpdateCBAL( iState );
+        }
+    
+    UpdateVisualizationL();     
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedInL(): Out");    
+    }
+
+void CVeiCutAudioContainer::MarkedOutL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedOutL(): In");
+    
+    if (iState == EStateInitializing || iState == EStateOpening)
+        {
+        return;
+        }
+    
+    TTimeIntervalMicroSeconds cutOut = PlaybackPositionL();
+    
+    if ( iCutTimeDisplay )
+        {
+        iCutTimeDisplay->SetCutOut( cutOut );
+        }
+
+    LOGFMT2(KVideoEditorLogFile, "\tOut point: %Ld, state: %d", cutOut.Int64(), iState);
+    iCutAudioBar->SetOutPoint( cutOut );
+    
+    if (iSampleArrayHandler)
+        {
+        iSampleArrayHandler->SetCutOutPoint(cutOut);            
+        }
+    
+    if ( iState == EStatePlaying )
+        {
+        PauseL();
+        }
+    else
+        {
+        iView.UpdateCBAL( iState );
+        }
+        
+    UpdateVisualizationL();                 
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedOutL(): Out");
+    }
+    
+void CVeiCutAudioContainer::SetVolumeL( TInt aVolumeChange )
+    {
+    iInternalVolume += aVolumeChange;
+
+    if ( iInternalVolume < 0 )
+        {
+        iInternalVolume = 0;
+        }
+    if ( iInternalVolume > KMaxCutAudioVolumeLevel )
+        {
+        iInternalVolume = KMaxCutAudioVolumeLevel;
+        }
+    
+    if ( iAudioSamplePlayer )   
+        {
+        TInt vol = STATIC_CAST( TInt, (iInternalVolume*iMaxVolume)/KMaxCutAudioVolumeLevel );
+        iAudioSamplePlayer->SetVolume( vol );
+        }
+    }
+
+TInt CVeiCutAudioContainer::DoAudioBarUpdate( TAny* aThis )
+    {
+    STATIC_CAST( CVeiCutAudioContainer*, aThis )->DoUpdate();
+    return 42;
+    }
+
+void CVeiCutAudioContainer::DoUpdate()
+    {
+    TTimeIntervalMicroSeconds time;
+    iAudioSamplePlayer->GetPosition( time );
+
+    if ( iSeeking )
+        {
+        time = iSeekPos;
+        LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::DoUpdate(): 1, time:%Ld", time.Int64());
+        }
+    else
+        {
+        LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::DoUpdate(): 2, time:%Ld", time.Int64());
+        }
+    
+    iCutAudioBar->SetCurrentPoint(static_cast<TInt32>( (time.Int64() / 1000)));
+    iCutAudioBar->DrawDeferred();
+
+    TRAP_IGNORE( UpdateVisualizationL() );
+    }
+    
+
+void CVeiCutAudioContainer::UpdateVisualizationL()
+    {   
+    TTimeIntervalMicroSeconds time;
+    iAudioSamplePlayer->GetPosition( time );
+    iSampleArrayHandler->SetCurrentPoint(time);
+
+    DrawToBufBitmapL();
+    }
+
+// @: not leave safe!
+void CVeiCutAudioContainer::MapcInitComplete( TInt aError,
+                    const TTimeIntervalMicroSeconds& DEBUGLOG_ARG(aDuration) )
+    {
+    LOGFMT2(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcInitComplete(): In, aError:%d, aDuration:%Ld", aError, aDuration.Int64());
+    if( aError == KErrNone )    // The sample is ready to play.
+        {
+        CVeiVideoEditorSettings::GetMediaPlayerVolumeLevelL( iInternalVolume );
+
+        iMaxVolume = iAudioSamplePlayer->MaxVolume();
+        TInt vol = STATIC_CAST( TInt, (iInternalVolume*iMaxVolume)/KMaxCutAudioVolumeLevel );
+        iAudioSamplePlayer->SetVolume( vol );
+        /* Show mute icon in navipane */
+        if ( vol == 0 )
+            {
+            iView.VolumeDownL();
+            }
+        }
+    iCutAudioBar->SetTotalDuration( iDuration );
+
+    SetStateL( EStateStoppedInitial );
+    iView.UpdateTimeL();
+
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcInitComplete(): Out");
+    }
+    
+void CVeiCutAudioContainer::SetDuration( const TTimeIntervalMicroSeconds& aDuration )
+    {
+    iDuration = aDuration;
+    iCutAudioBar->SetTotalDuration( iDuration );
+    }   
+
+void CVeiCutAudioContainer::LaunchProgressNoteL()
+    {
+    iProgressNote = new ( ELeave ) CAknProgressDialog( REINTERPRET_CAST( CEikDialog**, 
+                    &iProgressNote), ETrue);
+    iProgressNote->SetCallback(this);
+    iProgressNote->PrepareLC( R_VEI_PROGRESS_NOTE_WITH_CANCEL );
+
+    HBufC* stringholder  = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_CUT, iEikonEnv );
+    iProgressNote->SetTextL( *stringholder );
+    CleanupStack::PopAndDestroy(stringholder);
+        
+    iProgressNote->GetProgressInfoL()->SetFinalValue( 100 );
+    iProgressNote->RunLD();
+    }
+
+void CVeiCutAudioContainer::MapcPlayComplete( TInt DEBUGLOG_ARG(aError) )
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcPlayComplete(): In, error:%d", aError);
+
+    if (EStateTerminating == iState)
+        {
+        LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcPlayComplete: app is closing...");
+        return;
+        }
+
+    TRAP_IGNORE( SetStateL( EStateStopped ) );
+    iVideoBarTimer->Cancel();
+
+    iCutAudioBar->SetFinishedStatus( ETrue );
+    iLastPosition = TTimeIntervalMicroSeconds( 0 );
+    iSeekPos = 0;
+    TRAP_IGNORE( iView.StopNaviPaneUpdateL() );
+
+    TRAP_IGNORE( UpdateVisualizationL() );
+
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcPlayComplete(): Out");
+    }
+
+void CVeiCutAudioContainer::NotifyAudioClipVisualizationStarted(const CVedAudioClipInfo& /*aInfo*/)
+    {
+    TRAP_IGNORE( LaunchProgressNoteL() );
+    }
+
+void CVeiCutAudioContainer::NotifyAudioClipVisualizationProgressed(const CVedAudioClipInfo& /*aInfo*/, 
+                                                        TInt aPercentage)
+    {   
+    if ( iProgressNote )
+        {
+        TRAP_IGNORE( iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage ) );
+        }   
+    }
+                                                        
+void CVeiCutAudioContainer::NotifyAudioClipVisualizationCompleted(const CVedAudioClipInfo& /*aInfo*/, 
+                                                       TInt aError, TInt8* aVisualization,
+                                                       TInt aResolution)
+    {       
+    if ( iProgressNote )
+        {
+        TRAP_IGNORE( iProgressNote->GetProgressInfoL()->SetAndDraw(100) );
+        TRAP_IGNORE( iProgressNote->ProcessFinishedL() );
+        }
+    if (KErrNone == aError)
+        {       
+        iSampleArrayHandler->SetVisualizationArray(aVisualization, aResolution);
+        TRAP_IGNORE( DrawToBufBitmapL() );
+        }
+    }
+
+TInt CVeiCutAudioContainer::VisualizationResolution() const
+    {
+    return iIconDisplayRect.Width();    
+    }   
+
+void CVeiCutAudioContainer::DialogDismissedL( TInt aButtonId )
+    {
+    if (aButtonId != EAknSoftkeyDone )
+        {   
+        iView.CancelVisualizationL();
+        if (! iCallBack)
+            {       
+            TCallBack cb (CVeiCutAudioContainer::AsyncBack, this);
+            iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard);
+            }
+        iCallBack->CallBack();
+        }
+    }
+    
+TInt CVeiCutAudioContainer::AsyncBack(TAny* aThis)
+    {
+    LOG( KVideoEditorLogFile, "CVeiCutAudioContainer::AsyncExit");
+
+    CVeiCutAudioContainer* view = static_cast<CVeiCutAudioContainer*>(aThis);
+    TRAPD( err, view->HandleCommandL(EVeiCmdCutVideoViewBack) );
+    
+    return err;
+    }   
+
+
+void CVeiCutAudioContainer::HandleCommandL(TInt aCommand)       
+    {
+    iView.HandleCommandL(aCommand); 
+    }
+
+void CVeiCutAudioContainer::GetVisualizationL()
+    {   
+    iView.GetAudioVisualizationL();
+    }
+
+//=============================================================================
+void CVeiCutAudioContainer::HandleVolumeUpL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeUpL: in");
+
+    iView.VolumeUpL();
+
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeUpL: out");
+    }
+
+//=============================================================================
+void CVeiCutAudioContainer::HandleVolumeDownL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeDownL: in");
+
+    iView.VolumeDownL();
+
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeDownL: out");
+    }
+
+//=============================================================================
+void CVeiCutAudioContainer::PrepareForTerminationL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PrepareForTerminationL: in");
+
+    SetStateL( EStateTerminating );
+
+    iVideoBarTimer->Cancel();
+    iAudioSamplePlayer->Stop();
+    iAudioSamplePlayer->Close();
+
+    LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PrepareForTerminationL: out");
+    }
+
+// End of File