videditor/ManualVideoEditor/src/VeiEditVideoContainer.cpp
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videditor/ManualVideoEditor/src/VeiEditVideoContainer.cpp	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,5936 @@
+/*
+* 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 <manualvideoeditor.mbg>
+#include <videoeditoruicomponents.rsg>
+#include <videoeditoruicomponents.mbg>
+#include <videoeditorbitmaps.mbg>
+#include <gulicon.h>
+#include <stringloader.h>
+#include <aknsdrawutils.h> 
+#include <aknsdatacontext.h> 
+#include <aknsbasicbackgroundcontrolcontext.h> 
+#include <aknquerydialog.h> 
+#include <eikprogi.h> 
+#include <aknnotewrappers.h> 
+#include <errorui.h>
+#include <aknbiditextutils.h>
+#include <gulfont.h>
+#include <akniconutils.h>
+#include <pathinfo.h>
+#include <f32file.h>
+#include <CMGAlbumManager.h>
+#include <vedcommon.h>
+#include <mmf/common/mmferrors.h>
+
+// User includes
+#include "VeiEditVideoContainer.h"
+#include "VeiVideoDisplay.h"
+#include "VeiTextDisplay.h"
+#include "VeiCutterBar.h"
+#include "veiappui.h"
+#include "veiframetaker.h"
+#include "VeiIconBox.h"
+#include "VideoEditorCommon.h"
+#include "VideoEditorUtils.h"
+#include "VideoEditorHelp.hlp.hrh"  // Topic contexts (literals)
+#include "VeiEditVideoView.h"
+#include "ManualVideoEditor.hrh"
+#include "VeiSlider.h"
+#include "StoryboardItems.h"
+#include "TransitionInfo.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+void CleanupRArray( TAny* object )
+    {
+    (( RImageTypeDescriptionArray*)object)->ResetAndDestroy();
+    }
+
+CVeiEditVideoContainer* CVeiEditVideoContainer::NewL( const TRect& aRect, 
+                                CVedMovie& aMovie, CVeiEditVideoView& aView )
+    {
+    CVeiEditVideoContainer* self = CVeiEditVideoContainer::NewLC( aRect, 
+                                                            aMovie, aView );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CVeiEditVideoContainer* CVeiEditVideoContainer::NewLC( const TRect& aRect,
+                                CVedMovie& aMovie, CVeiEditVideoView& aView )
+    {
+    CVeiEditVideoContainer* self = new (ELeave) CVeiEditVideoContainer( aMovie, aView );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CVeiEditVideoContainer::ConstructL(const TRect& aRect)
+// EPOC two phased constructor
+// ---------------------------------------------------------
+//
+void CVeiEditVideoContainer::ConstructL( const TRect& aRect )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConstructL in");
+
+    CreateWindowL();
+
+    iMovie.RegisterMovieObserverL( this );
+
+    iConverter = CVeiImageConverter::NewL( this );
+
+    TFileName mbmPath(  VideoEditorUtils::IconFileNameAndPath(KManualVideoEditorIconFileId) );
+    TFileName mbmPath2( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) );
+    TFileName mbmPath3( VideoEditorUtils::IconFileNameAndPath(KVeiNonScalableIconFileId) );
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConstructL  Loading bitmaps..");
+
+    // No thumbnail icon (shown when video thumb nail cannot be generated)
+    AknIconUtils::CreateIconL( iNoThumbnailIcon, iNoThumbnailIconMask,
+            mbmPath2, EMbmVideoeditoruicomponentsQgn_graf_ve_novideo, 
+            EMbmVideoeditoruicomponentsQgn_graf_ve_novideo_mask );
+
+    iAudioIcon = AknIconUtils::CreateIconL( mbmPath, 
+                    EMbmManualvideoeditorQgn_graf_ve_symbol_audio );
+
+    // Video timeline icon
+
+    AknIconUtils::CreateIconL( iVideoTrackIcon, iVideoTrackIconMask,
+            mbmPath, EMbmManualvideoeditorQgn_prop_ve_file_video, 
+            EMbmManualvideoeditorQgn_prop_ve_file_video_mask );
+
+    // Audio timeline icon
+
+    AknIconUtils::CreateIconL( iAudioTrackIcon, iAudioTrackIconMask,
+            mbmPath, EMbmManualvideoeditorQgn_prop_ve_file_audio, 
+            EMbmManualvideoeditorQgn_prop_ve_file_audio_mask );    
+
+    // Audio mixing icon
+    iAudioMixingIcon = AknIconUtils::CreateIconL( mbmPath3, 
+            EMbmVideoeditorbitmapsMix_audio_background );
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConstructL  Bitmaps OK!");
+
+    iTransitionInfo = CTransitionInfo::NewL();
+
+    iZoomTimer = CPeriodic::NewL( CActive::EPriorityLow );
+
+    iVideoDisplayBox = TRect(0,0,100,100);
+
+    iVideoDisplay = CVeiVideoDisplay::NewL( iVideoDisplayBox, this, *this );
+
+/* Video Display components for transitioin state*/
+    iTransitionDisplayRight = CVeiVideoDisplay::NewL( iVideoDisplayBox, this, *this );
+    iTransitionDisplayLeft = CVeiVideoDisplay::NewL( iVideoDisplayBox, this, *this );
+
+    iDummyCutBar = CVeiCutterBar::NewL( this, ETrue );
+    iDummyCutBarLeft = CVeiCutterBar::NewL( this, ETrue );
+
+/* IconBox */
+    iEffectSymbolBox = TRect(0,0,10,10);
+    iEffectSymbols = CVeiIconBox::NewL( iEffectSymbolBox, this );
+
+    iInfoDisplay = CVeiTextDisplay::NewL( iVideoDisplayBox, this );
+    iInfoDisplay->SetMopParent( this );
+    iArrowsDisplay = CVeiTextDisplay::NewL( iVideoDisplayBox, this );
+
+    SetRect( aRect );
+    iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse );
+
+    iFrameTaker = CVeiFrameTaker::NewL( *this );
+
+    iGradientBitmap = new(ELeave)CFbsBitmap;
+    TRgb startColor = TRgb( 0x7a, 0xbe, 0xe7);
+    TRgb endColor = TRgb( 0x00, 0x3e, 0x80 );
+    TInt breadth = 30;
+    ColorUtils::TBitmapOrientation bitmapOrientation = ColorUtils::EBitmapOrientationHorizontal;
+    ColorUtils::CreateGradientBitmapL( *iGradientBitmap, iEikonEnv->WsSession(), breadth,
+        bitmapOrientation, startColor, endColor );
+    LOG(KVideoEditorLogFile, "Gradient bitmap created..");
+    SetCursorLocation( ECursorOnEmptyVideoTrack );
+
+/* Timer to keep back light on when user is not giving key events */
+    iScreenLight = CVeiDisplayLighter::NewL();
+
+    iCurrentPoint = 0;
+/* Timer. Draws playhead */
+    iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard );
+    iSeekPos = TTimeIntervalMicroSeconds( 0 );
+    SetPreviewState(EStateInitializing);    
+
+    iBlackScreen = EFalse;  
+
+    CreateScrollBarL(aRect);                
+                
+    AknIconUtils::CreateIconL( iPauseBitmap, iPauseBitmapMask,
+            mbmPath2, EMbmVideoeditoruicomponentsQgn_prop_ve_pause, 
+            EMbmVideoeditoruicomponentsQgn_prop_ve_pause_mask );
+            
+    EnableDragEvents();            
+    
+    ActivateL();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConstructL: out");
+    }
+    
+//===========================================================================    
+void CVeiEditVideoContainer::CreateScrollBarL(const TRect& aRect)
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::CreateScrollBarL: in");
+    // create vertical slider control in the middle of the
+    // screen in vertical direction and 10 pixels from the
+    // right side of the screen
+
+    iVerticalSlider = CVeiVerticalSlider::NewL(aRect, *this);
+    iVerticalSlider->SetMinimum( KVolumeSliderMin );
+    iVerticalSlider->SetMaximum( KVolumeSliderMax );
+    iVerticalSlider->SetStep( KVolumeSliderStep );
+
+    iVerticalSlider->SetPosition(0);
+
+    iHorizontalSlider = CVeiHorizontalSlider::NewL(aRect, *this);
+    iHorizontalSlider->SetMinimum(-10);
+    iHorizontalSlider->SetMaximum(10);
+    iHorizontalSlider->SetStep(1);
+
+    iHorizontalSlider->SetPosition(0);
+
+    iVerticalSlider->MakeVisible(EFalse);
+    iHorizontalSlider->MakeVisible(EFalse); 
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::CreateScrollBarL: out");
+    }
+
+//===========================================================================    
+CVeiEditVideoContainer::CVeiEditVideoContainer( CVedMovie& aMovie, CVeiEditVideoView& aView )
+    :iView( aView ), iMovie( aMovie )
+    {
+    iCurrentlyProcessedIndex = -1;
+    iSelectionMode = EModeNavigation;
+    iVideoCursorPos = 0;
+    iAudioCursorPos = 0;
+
+    iCursorLocation = ECursorOnEmptyVideoTrack;
+    iPrevCursorLocation = ECursorOnClip;
+    iTakeSnapshot = EFalse;
+    iSeeking = EFalse;
+    iCloseStream = EFalse;
+    iBackKeyPressed = EFalse;
+    /* Flag to make sure that engine has finished frame before trying to get next one. */
+    iFrameReady = ETrue;
+    }
+
+
+CVeiEditVideoContainer::~CVeiEditVideoContainer()
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::~CVeiEditVideoContainer(): In");
+    if ( iMovie.MovieObserverIsRegistered( this ) )
+        {
+        iMovie.UnregisterMovieObserver( this );
+        }
+
+    if ( iTempVideoInfo )
+        {       
+        iTempVideoInfo->CancelFrame();
+        delete iTempVideoInfo;
+        iTempVideoInfo = NULL;      
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::~CVeiEditVideoContainer(): iTempVideoInfo delete OK..");
+        }
+
+    if ( iConverter )
+        {
+        iConverter->CancelEncoding();
+        delete iConverter;
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::~CVeiEditVideoContainer(): iConverter delete OK..");
+        }
+
+    delete iTransitionInfo;
+    delete iScreenLight;
+    delete iVideoTrackIcon;
+    delete iVideoTrackIconMask;
+    delete iAudioTrackIcon;
+    delete iAudioTrackIconMask;
+    delete iAudioIcon;
+    delete iAudioMixingIcon;
+    delete iNoThumbnailIcon;
+    delete iNoThumbnailIconMask;
+    delete iGradientBitmap;
+    delete iBgContext;
+    delete iVideoDisplay;
+    delete iTransitionDisplayRight;
+    delete iTransitionDisplayLeft;
+    delete iDummyCutBar;
+    delete iDummyCutBarLeft;
+    delete iEffectSymbols;
+    delete iInfoDisplay;
+    delete iArrowsDisplay;
+    delete iFrameTaker;
+    delete iRemConTarget;
+
+    if ( iZoomTimer )
+        {
+        iZoomTimer->Cancel();
+        delete iZoomTimer;
+        }
+    iVideoItemArray.ResetAndDestroy();
+    iAudioItemArray.ResetAndDestroy();
+    iVideoItemRectArray.Close();
+    
+    if ( iPeriodic ) 
+        {
+        iPeriodic->Cancel();
+        delete iPeriodic;
+        }
+            
+    if ( iTempFileName )
+        {
+        delete iTempFileName;
+        iTempFileName = NULL;
+        }
+    if ( iSaveToFileName )
+        {
+        delete iSaveToFileName;
+        iSaveToFileName = NULL;
+        }
+        
+    delete iHorizontalSlider;    
+    delete iVerticalSlider;        
+
+    delete iPauseBitmap;
+    delete iPauseBitmapMask;
+
+    delete iCallBack;           
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::~CVeiEditVideoContainer(): Out");
+    }
+
+// ---------------------------------------------------------
+// CVeiEditVideoContainer::SizeChanged()
+// Called by framework when the view size is changed
+// ---------------------------------------------------------
+//
+void CVeiEditVideoContainer::SizeChanged()
+    {
+    LOGFMT2(KVideoEditorLogFile, "CVeiEditVideoContainer SizeChanged: In: (%d,%d)", Size().iWidth, Size().iHeight);
+
+    TRect rect = Rect();
+
+    if ( iBgContext )
+        iBgContext->SetRect( rect );
+
+    TInt audioTrackBoxTlX = -1;
+    TInt audioTrackBoxSizeWidth = -1;
+    TInt videoScreenSizeWidth = -1;
+    TInt videoScreenSizeHeight = -1;
+    TInt effectSymbolBoxTlXPortrait = -1; 
+    TInt videoScreenXPortrait = -1;
+    TInt videoScreenYPortrait = -1;
+    TInt infoDisplayBoxSizeHeight = -1;
+    TInt thumbnailStartPaneBoxTlY = -1;
+    TInt thumbnailStartPaneBoxSizeWidth = -1;
+    TInt thumbnailStartPaneBoxSizeHeight = -1;
+    TInt thumbnailEndPaneBoxTlY = -1;
+    TInt sliderThickness = -1;
+
+    switch( rect.iBr.iX )
+        {
+            case 240:
+            case 320:
+                audioTrackBoxTlX = 25;              
+                audioTrackBoxSizeWidth = 204;
+                videoScreenSizeWidth = 156;
+                videoScreenSizeHeight = 128;
+                effectSymbolBoxTlXPortrait = 23;
+                videoScreenXPortrait = 47;
+                videoScreenYPortrait = 2;
+                infoDisplayBoxSizeHeight = 24;
+                thumbnailStartPaneBoxTlY = 12;
+                thumbnailStartPaneBoxSizeWidth = 78;
+                thumbnailStartPaneBoxSizeHeight = 64;
+                thumbnailEndPaneBoxTlY = 12;
+                sliderThickness = 12;
+                break;
+            case 176:
+            case 208:
+                audioTrackBoxTlX = 19;              
+                audioTrackBoxSizeWidth = rect.iBr.iX-25;//153;
+                videoScreenSizeWidth = 96;
+                videoScreenSizeHeight = 78;
+                effectSymbolBoxTlXPortrait = 25;
+                videoScreenXPortrait = 40;
+                videoScreenYPortrait = 2;
+                infoDisplayBoxSizeHeight = 15;
+                thumbnailStartPaneBoxTlY = 8;
+                thumbnailStartPaneBoxSizeWidth = 56;
+                thumbnailStartPaneBoxSizeHeight = 46;
+                thumbnailEndPaneBoxTlY = 8;
+                sliderThickness = 8;
+                break;
+            case 352:
+            case 416:
+                audioTrackBoxTlX = 38;
+                audioTrackBoxSizeWidth = 306;
+                videoScreenSizeWidth = 193;
+                videoScreenSizeHeight = 158;
+                effectSymbolBoxTlXPortrait = 43;
+                videoScreenXPortrait = 80;
+                videoScreenYPortrait = 4;
+                infoDisplayBoxSizeHeight = 31;
+                thumbnailStartPaneBoxTlY = 16;
+                thumbnailStartPaneBoxSizeWidth = 112;
+                thumbnailStartPaneBoxSizeHeight = 93;
+                thumbnailEndPaneBoxTlY = 16;
+                sliderThickness = 12;
+                break;
+            default:
+                audioTrackBoxTlX = 38;
+                audioTrackBoxSizeWidth = 306;
+                videoScreenSizeWidth = 193;
+                videoScreenSizeHeight = 158;
+                effectSymbolBoxTlXPortrait = 43;
+                videoScreenXPortrait = 80;
+                videoScreenYPortrait = 4;
+                infoDisplayBoxSizeHeight = 31;
+                thumbnailStartPaneBoxTlY = 16;
+                thumbnailStartPaneBoxSizeWidth = 112;
+                thumbnailStartPaneBoxSizeHeight = 93;
+                thumbnailEndPaneBoxTlY = 16;
+                sliderThickness = 12;
+                break;          
+        };
+
+    iTransitionMarkerSize.iWidth = 7;
+    iTransitionMarkerSize.iHeight = 9;
+
+    iAudioBarBox.iTl.iX = (rect.iTl.iX + 1) + iTransitionMarkerSize.iWidth / 2 + 20;
+    iAudioBarBox.iTl.iY = rect.iBr.iY - 16;
+    iAudioBarBox.iBr.iX = (rect.iBr.iX - 1) - iTransitionMarkerSize.iWidth / 2;
+    iAudioBarBox.iBr.iY = rect.iBr.iY - 1;
+
+    TPoint audioTrackBoxTl = TPoint(audioTrackBoxTlX, 
+        STATIC_CAST(TInt, rect.iBr.iY*0.8994 ));
+
+    TSize audioTrackBoxSize = TSize(audioTrackBoxSizeWidth, 
+        STATIC_CAST(TInt, rect.iBr.iY*0.0764 )); 
+    iAudioTrackBox = TRect( audioTrackBoxTl, audioTrackBoxSize );
+
+    iAudioBarIconPos.iX = STATIC_CAST(TInt,0.01137*rect.iBr.iX);//rect.iTl.iX;
+    iAudioBarIconPos.iY = iAudioTrackBox.iTl.iY;
+
+    AknIconUtils::SetSize( iVideoTrackIcon, TSize( iAudioTrackBox.Height(), iAudioTrackBox.Height() ) );
+    AknIconUtils::SetSize( iAudioTrackIcon, TSize( iAudioTrackBox.Height(), iAudioTrackBox.Height() ) );
+
+    iAudioBarBox = iAudioTrackBox;
+
+    iVideoBarBox.iTl.iX = iAudioBarBox.iTl.iX;
+    iVideoBarBox.iTl.iY = iAudioBarBox.iTl.iY - iTransitionMarkerSize.iHeight - 16;
+    iVideoBarBox.iBr.iX = iAudioBarBox.iBr.iX;
+    iVideoBarBox.iBr.iY = iAudioBarBox.iTl.iY - 10;
+
+    TPoint videoTrackBoxTl = TPoint(audioTrackBoxTl.iX,
+    STATIC_CAST(TInt,rect.iBr.iY*0.7882 ));
+
+    TSize videoTrackBoxSize = TSize(audioTrackBoxSize.iWidth, 
+        STATIC_CAST(TInt, rect.iBr.iY*0.0764 )); 
+
+    iVideoTrackBox = TRect( videoTrackBoxTl, videoTrackBoxSize );
+
+    iVideoBarIconPos.iX = iAudioBarIconPos.iX;
+    iVideoBarIconPos.iY = iVideoTrackBox.iTl.iY;
+
+    iVideoBarBox = iVideoTrackBox;
+
+    iBarArea.iTl.iX = rect.iTl.iX;
+    iBarArea.iTl.iY = iVideoBarBox.iTl.iY;
+    iBarArea.iBr.iX = rect.iBr.iX;
+    iBarArea.iBr.iY = iAudioBarBox.iBr.iY;
+
+    TBool landscape = VideoEditorUtils::IsLandscapeScreenOrientation();
+
+    if ( landscape ) //Landscape
+        {
+        // clip thumbnail pane
+        TInt videoScreenX = STATIC_CAST( TInt, rect.iBr.iX*0.0097 );
+        TInt videoScreenY = STATIC_CAST( TInt, rect.iBr.iY*0.0139 );
+
+        TSize videoScreenSize( videoScreenSizeWidth, videoScreenSizeHeight );
+
+        iVideoDisplayBox = TRect( TPoint( videoScreenX, videoScreenY ), videoScreenSize );
+        iVideoDisplay->SetRect( iVideoDisplayBox );
+
+        //clip cut timeline pane
+        TSize cutBarBoxSize = TSize(videoScreenSize.iWidth, 
+            STATIC_CAST(TInt,rect.iBr.iY*0.09375 ));
+        iDummyCutBarBox = TRect( TPoint(iVideoDisplayBox.iTl.iX, iVideoDisplayBox.iBr.iY), cutBarBoxSize );
+        iDummyCutBar->SetRect( iDummyCutBarBox );
+
+        //clip info pane
+        TSize infoDisplayBoxSize = TSize( STATIC_CAST(TInt,rect.iBr.iX*0.4159),STATIC_CAST(TInt,rect.iBr.iY*0.56) );
+        iInfoDisplayBox = TRect( TPoint(iVideoDisplayBox.iBr.iX+videoScreenX, iVideoDisplayBox.iTl.iY), 
+            infoDisplayBoxSize );
+
+        //clip indicator pane 
+        TInt iconHeight = STATIC_CAST( TInt, rect.iBr.iY * 0.0972222222 ); 
+
+        TPoint effectSymbolBoxTl = TPoint( iInfoDisplayBox.iTl.iX, iInfoDisplayBox.iBr.iY/*+videoScreenY*/);
+        TSize effectSymbolBoxSize = TSize( STATIC_CAST(TInt,rect.iBr.iX*0.22115385), iconHeight );
+
+        iEffectSymbolBox = TRect( effectSymbolBoxTl, effectSymbolBoxSize);
+        iEffectSymbols->SetLandscapeScreenOrientation( landscape );
+
+        //pause indicator box (for preview state)
+        iPauseIconBox = TRect( effectSymbolBoxTl, TSize(iconHeight, iconHeight) );
+
+        //slider controls
+        if (iVerticalSlider)
+            {
+            iVerticalSliderSize = TSize(sliderThickness, iVideoDisplayBox.Height() + iDummyCutBarBox.Height());
+            iVerticalSliderPoint = TPoint( rect.Width() - sliderThickness * 2, videoScreenY );
+            iVerticalSlider->SetExtent( iVerticalSliderPoint, iVerticalSliderSize );
+            }
+        if (iHorizontalSlider)
+            {
+            iHorizontalSliderSize = TSize(videoScreenSize.iWidth, sliderThickness);
+            iHorizontalSliderPoint = TPoint( videoScreenX, videoScreenY + videoScreenSize.iHeight + sliderThickness);
+            iHorizontalSlider->SetExtent( iHorizontalSliderPoint, iHorizontalSliderSize );
+            }
+
+        //transition
+
+        //ved_clip_thumbnail_start_pane
+        TPoint thumbnailEndPaneBoxTl = TPoint(videoScreenX,videoScreenY);
+
+        TSize thumbnailEndPaneBoxSize = TSize(STATIC_CAST(TInt, 0.3198*rect.iBr.iX),
+            STATIC_CAST(TInt,rect.iBr.iY*0.3785));
+
+        iTransitionDisplayLeftBox = TRect( thumbnailEndPaneBoxTl, thumbnailEndPaneBoxSize );
+        iTransitionDisplayLeft->SetRect( iTransitionDisplayLeftBox );
+
+
+        //ved_clip_thumbnail_end_pane
+        TPoint thumbnailStartPaneBoxTl = TPoint(STATIC_CAST(TInt, 0.6707*rect.iBr.iX),videoScreenY);
+
+        TSize thumbnailStartPaneBoxSize = thumbnailEndPaneBoxSize; 
+        
+        iTransitionDisplayRightBox = TRect( thumbnailStartPaneBoxTl, thumbnailStartPaneBoxSize );
+        iTransitionDisplayRight->SetRect( iTransitionDisplayRightBox );
+
+        //ved_transition_info_pane
+        TPoint transitionArrowsBoxTl = TPoint(STATIC_CAST(TInt, 0.0866*rect.iBr.iX),
+            STATIC_CAST(TInt,0.4896*rect.iBr.iY ) );
+
+        TSize transitionArrowsBoxSize = TSize(STATIC_CAST(TInt, 0.827*rect.iBr.iX),
+            STATIC_CAST(TInt,0.2848*rect.iBr.iY ) );
+
+        iTransitionArrowsBox = TRect( transitionArrowsBoxTl, transitionArrowsBoxSize );
+
+        TInt SlowMotionBoxTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.1346 );
+        TInt SlowMotionBoxTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.6806 );  
+        TInt SlowMotionBoxBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.4423077 );
+        TInt SlowMotionBoxBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.7639 );
+            
+        iSlowMotionBox = TRect(SlowMotionBoxTlX, SlowMotionBoxTlY, SlowMotionBoxBrX, 
+            SlowMotionBoxBrY);
+
+        TInt widthAndheight = STATIC_CAST( TInt, rect.iBr.iX * 0.057692 );
+
+        iArrowsDisplay->SetArrowSize(TSize( widthAndheight, widthAndheight ));
+
+        // video display when cursor is on transition. 
+        iVideoDisplayBoxOnTransition = TRect(TPoint((rect.iBr.iX/2) - 
+                STATIC_CAST( TInt, 1.19*iTransitionDisplayRightBox.Size().iHeight)/2,
+                iTransitionDisplayLeftBox.iTl.iY), 
+                TSize(STATIC_CAST( TInt, 1.19*iTransitionDisplayRightBox.Size().iHeight), 
+                iTransitionDisplayRightBox.Size().iHeight)); // w:108, h:91             
+                
+        iDummyCutBarBoxOnTransition = TRect( TPoint(iTransitionDisplayRightBox.iTl.iX,
+            iTransitionDisplayRightBox.iBr.iY), TSize( iTransitionDisplayRightBox.Width(), 
+            iDummyCutBarBox.Height() ));
+        }
+        else    //Portrait
+        {
+        // clip thumbnail pane
+        TInt videoScreenX = videoScreenXPortrait;
+        TInt videoScreenY = videoScreenYPortrait;
+
+        TSize videoScreenSize( videoScreenSizeWidth, videoScreenSizeHeight );
+
+        iVideoDisplayBox = TRect( TPoint( videoScreenX, videoScreenY ), videoScreenSize );
+        iVideoDisplay->SetRect( iVideoDisplayBox );
+
+        //clip cut timeline pane
+        TSize cutBarBoxSize = TSize(videoScreenSize.iWidth, STATIC_CAST(TInt,rect.iBr.iY*0.0938 ));
+        iDummyCutBarBox = TRect( TPoint(iVideoDisplayBox.iTl.iX, 
+                        iVideoDisplayBox.iBr.iY - iVideoDisplay->GetBorderWidth()), cutBarBoxSize );
+        iDummyCutBar->SetRect( iDummyCutBarBox );
+        iDummyCutBarLeft->MakeVisible( EFalse );
+
+        //clip info pane
+        TPoint infoDisplayBoxTl = TPoint(STATIC_CAST(TInt, rect.iBr.iX*0.074), 
+            STATIC_CAST(TInt, rect.iBr.iY*0.6598 ));
+        TSize infoDisplayBoxSize = TSize(STATIC_CAST(TInt, rect.iBr.iX*0.855),
+            infoDisplayBoxSizeHeight );
+        iInfoDisplayBox = TRect( infoDisplayBoxTl, infoDisplayBoxSize );
+
+        //clip indicator pane
+        TInt iconWidth = STATIC_CAST( TInt, rect.iBr.iX * 0.07954545455 );
+
+        TInt effectSymbolBoxTlX = effectSymbolBoxTlXPortrait;
+        TInt effectSymbolBoxTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.131944444 );
+        TSize effectSymbolBoxSize = TSize(iconWidth, STATIC_CAST(TInt,rect.iBr.iY * 0.3194444444 ));
+
+        iEffectSymbolBox = TRect( TPoint(effectSymbolBoxTlX, effectSymbolBoxTlY), effectSymbolBoxSize);
+        iEffectSymbols->SetLandscapeScreenOrientation( landscape );
+
+        //pause indicator box (for preview state)
+        iPauseIconBox = TRect( iEffectSymbolBox.iTl, TSize(iconWidth, iconWidth) );
+
+        //slider controls
+        if (iVerticalSlider)
+            {
+            iVerticalSliderSize = TSize(sliderThickness, iVideoDisplayBox.Height() + iDummyCutBarBox.Height());
+            iVerticalSliderPoint = TPoint( rect.Width() - sliderThickness * 2, videoScreenY );
+            iVerticalSlider->SetExtent( iVerticalSliderPoint, iVerticalSliderSize );
+            }
+        if (iHorizontalSlider)
+            {
+            iHorizontalSliderSize = TSize(videoScreenSize.iWidth, sliderThickness);
+            iHorizontalSliderPoint = TPoint( videoScreenX, videoScreenY + videoScreenSize.iHeight + sliderThickness);
+            iHorizontalSlider->SetExtent( iHorizontalSliderPoint, iHorizontalSliderSize );
+            }
+
+        //transition
+
+        //ved_clip_thumbnail_start_pane
+        TPoint thumbnailStartPaneBoxTl = TPoint(STATIC_CAST(TInt, 0.6705*rect.iBr.iX),
+            thumbnailStartPaneBoxTlY);
+
+        TSize thumbnailStartPaneBoxSize = TSize(thumbnailStartPaneBoxSizeWidth,
+            thumbnailStartPaneBoxSizeHeight);
+
+        iTransitionDisplayRightBox = TRect( thumbnailStartPaneBoxTl, thumbnailStartPaneBoxSize );
+        iTransitionDisplayRight->SetRect( iTransitionDisplayRightBox );
+
+        //ved_clip_thumbnail_end_pane
+        TPoint thumbnailEndPaneBoxTl = TPoint(STATIC_CAST(TInt, 0.0116*rect.iBr.iX),
+            thumbnailEndPaneBoxTlY );
+
+        TSize thumbnailEndPaneBoxSize = thumbnailStartPaneBoxSize;
+
+        iTransitionDisplayLeftBox = TRect( thumbnailEndPaneBoxTl, thumbnailEndPaneBoxSize );
+        iTransitionDisplayLeft->SetRect( iTransitionDisplayLeftBox );
+
+        TInt SlowMotionBoxTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.3 );
+        TInt SlowMotionBoxTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.65 );    
+        TInt SlowMotionBoxBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.7 );
+        TInt SlowMotionBoxBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.76 );
+
+        iSlowMotionBox = TRect(SlowMotionBoxTlX, SlowMotionBoxTlY, SlowMotionBoxBrX, 
+            SlowMotionBoxBrY);
+
+        //ved_transition_info_pane
+        TPoint transitionArrowsBoxTl = TPoint(STATIC_CAST(TInt, 0.0116*rect.iBr.iX),
+            STATIC_CAST(TInt,0.4792*rect.iBr.iY ) );
+
+        TSize transitionArrowsBoxSize = TSize(STATIC_CAST(TInt, 0.9773*rect.iBr.iX),
+            STATIC_CAST(TInt,0.2848*rect.iBr.iY ) );
+
+        iTransitionArrowsBox = TRect( transitionArrowsBoxTl, transitionArrowsBoxSize );
+
+
+        TInt widthAndheight = STATIC_CAST( TInt, rect.iBr.iX * 0.068182 );
+
+        iInfoDisplay->SetArrowSize(TSize( widthAndheight, widthAndheight ));
+        iArrowsDisplay->SetArrowSize(TSize( widthAndheight, widthAndheight ));
+
+        // video display when cursor is on transition. 
+        iVideoDisplayBoxOnTransition = TRect( TPoint(STATIC_CAST( TInt, 0.341*rect.iBr.iX),
+                iTransitionDisplayLeftBox.iTl.iY), iTransitionDisplayRightBox.Size() );
+
+        iDummyCutBarBoxOnTransition = TRect( TPoint(iTransitionDisplayRightBox.iTl.iX,
+            iTransitionDisplayRightBox.iBr.iY - iVideoDisplay->GetBorderWidth()), 
+            TSize( iTransitionDisplayRightBox.Width(), iDummyCutBarBox.Height() ));
+        }
+
+    iInfoDisplay->SetRect( iInfoDisplayBox );
+    iInfoDisplay->SetLandscapeScreenOrientation( landscape );
+    iArrowsDisplay->SetRect(iSlowMotionBox);
+
+    AknIconUtils::SetSize( iNoThumbnailIcon, TSize( iVideoDisplayBox.Size() ) );
+    AknIconUtils::SetSize( iAudioIcon, TSize( iVideoDisplayBox.Size() ) );
+    AknIconUtils::SetSize( iPauseBitmap, TSize( iPauseIconBox.Size() ), EAspectRatioNotPreserved );     
+
+    // Update iconbox after screen rotation
+    iEffectSymbols->SetRect( iEffectSymbolBox );
+    if ( CursorLocation() == ECursorOnTransition && 
+            iView.EditorState() != CVeiEditVideoView::EPreview )
+        {
+        SetCursorLocation( CursorLocation() );
+        }
+
+    iArrowsDisplay->DrawDeferred();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer SizeChanged: Out");
+    }
+
+TInt CVeiEditVideoContainer::CurrentIndex() const
+    {
+    if ((iCursorLocation == ECursorOnAudio) ||
+        (iCursorLocation == ECursorOnEmptyAudioTrack))
+        {
+        return iAudioCursorPos;
+        }
+    else
+        {
+        if ( iCursorLocation == ECursorOnEmptyVideoTrack )
+            {
+            return iMovie.VideoClipCount() - 1;
+            }
+
+        return iVideoCursorPos;
+        }
+    }
+
+TUint CVeiEditVideoContainer::GetAndDecrementCurrentIndex()
+    {
+    TUint ret = 0;
+
+    if ( iCursorLocation == ECursorOnClip )
+        {
+        ret = iVideoCursorPos;
+        if ( iVideoCursorPos > 0 )
+            {
+            iVideoCursorPos--;
+            }
+        }
+    else if ( iCursorLocation == ECursorOnAudio ) 
+        {
+        ret = iAudioCursorPos;
+        if ( iAudioCursorPos > 0 )
+            {
+            iAudioCursorPos--;
+            }
+        }
+    else
+        {
+        User::Panic( _L("VideoEditor"), 0 );
+        }
+    return ret;
+    }
+    
+void CVeiEditVideoContainer::GetThumbAtL( const TTimeIntervalMicroSeconds& aTime )
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::GetThumbAtL: In, iFrameReady:%d", iFrameReady);
+    if( !iTempVideoInfo || !iFrameReady )
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetThumbAtL: 1");
+        return;
+        }
+
+    TSize resolution( iTempVideoInfo->Resolution() );
+    TInt frameIndex = iTempVideoInfo->GetVideoFrameIndexL( aTime );
+
+    TInt totalFrameCount = iTempVideoInfo->VideoFrameCount();
+    iFrameReady = EFalse;
+    if ( frameIndex > totalFrameCount )
+        {
+        frameIndex = totalFrameCount;
+        }    
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetThumbAtL: 2");        
+    /* :
+     check out on every phone before releasing whether videodisplay should be stopped before starting
+     asynchronous GetFrameL()
+     see how EStateGettingFrame is handled in SetPreviewState 
+     Stopping frees memory and it is needed in memory sensible devices 
+    */
+    iTempVideoInfo->GetFrameL( *this, frameIndex, &resolution ); 
+    SetPreviewState(EStateGettingFrame);                
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetThumbAtL: Out");
+    }
+
+void CVeiEditVideoContainer::StartZooming()
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartZooming: In");
+
+    const TUint delay = 90000;
+
+    if (iView.EditorState() != CVeiEditVideoView::EQuickPreview )
+        {
+        iZoomFactorX = 0;
+        iZoomFactorY = 0;
+        }
+    else
+        {
+        iZoomFactorX = KMaxZoomFactorX;
+        iZoomFactorY = KMaxZoomFactorY;
+        }
+
+    if ( iZoomTimer->IsActive() )
+        {
+        iZoomTimer->Cancel();
+        }
+    iZoomTimer->Start( delay, delay, TCallBack( CVeiEditVideoContainer::Update, this ) );
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartZooming: Out");
+    }                       
+
+TKeyResponse CVeiEditVideoContainer::HandleScrollBarL (
+    const TKeyEvent &   aKeyEvent,
+    TEventCode          aType
+    )
+    {
+    TKeyResponse ret = EKeyWasNotConsumed;
+
+    if (EEventKey == aType)
+    {
+        switch (aKeyEvent.iCode)
+        {
+
+            case EKeyDownArrow:
+            {
+                iVerticalSlider->Increment();                   
+                iVerticalSlider->DrawDeferred();
+                ret = EKeyWasConsumed;
+                break;
+            }
+            case EKeyUpArrow:
+            {
+                iVerticalSlider->Decrement();
+                iVerticalSlider->DrawDeferred();
+                ret = EKeyWasConsumed;
+                break;
+            }
+
+            case EKeyLeftArrow:
+            {
+                iHorizontalSlider->Decrement();
+                iHorizontalSlider->DrawDeferred();
+                ret = EKeyWasConsumed;
+                break;
+            }
+            case EKeyRightArrow:
+            {
+                iHorizontalSlider->Increment();
+                iHorizontalSlider->DrawDeferred();
+                ret = EKeyWasConsumed;
+                break;
+            }
+
+            case EKeyOK:
+            {
+                ret = EKeyWasConsumed;
+                break;
+            }
+
+            /*case EKeyLeftArrow:
+            case EKeyRightArrow:
+            {
+                ret = EKeyWasConsumed;
+                break;
+            }*/
+
+            default:
+            {
+                break;
+            }
+        }
+    }
+
+    return ret;
+    }
+
+
+TKeyResponse CVeiEditVideoContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+    {
+    if (EModeMixingAudio == iSelectionMode || EModeAdjustVolume == iSelectionMode)
+        {       
+        CVeiEditVideoView::TEditorState editorState = iView.EditorState();
+        if (CVeiEditVideoView::EMixAudio == editorState ||
+            CVeiEditVideoView::EAdjustVolume == editorState)
+            {           
+            TKeyResponse ret = HandleScrollBarL(aKeyEvent, aType);
+            DrawDeferred();
+            return ret;
+            }
+        }
+
+    if ( iSeeking )
+        {       
+        DoUpdatePosition();
+        }
+
+    if ( aType == EEventKeyDown ) 
+        {
+
+        if ( iView.EditorState() == CVeiEditVideoView::EPreview )//large preview
+            {
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::OfferKeyEventL preview back");
+            iVideoDisplay->Stop( ETrue );
+            iBackKeyPressed = ETrue;
+            SetBlackScreen( EFalse );
+            }
+
+        iKeyRepeatCount = 0;
+
+        // Shift key check. move clip - state
+        TBool shiftKeyPressed = (aKeyEvent.iModifiers & EModifierShift );
+        if( shiftKeyPressed )
+            {
+            if ( (iView.EditorState() == CVeiEditVideoView::EPreview ) &&
+                (iPreviewState == EStatePlaying ))//large preview
+                {
+                iVideoDisplay->Stop( ETrue );
+
+                iView.SetFullScreenSelected( EFalse );
+                SetBlackScreen( EFalse );
+                return EKeyWasConsumed;
+                }           
+            else if  (((((iCursorLocation == ECursorOnClip) && (iMovie.VideoClipCount()>1) ) && (iView.EditorState() != CVeiEditVideoView::EQuickPreview))  ||
+                 ( (iCursorLocation == ECursorOnAudio) && (iMovie.AudioClipCount()>0) ) ) &&
+                 iSelectionMode == EModeNavigation )
+                {
+                iView.ProcessCommandL( EVeiCmdEditVideoViewEditVideoMove );
+                return EKeyWasConsumed;
+                }
+            else if (iView.EditorState() == CVeiEditVideoView::EQuickPreview)
+                {
+                if( iView.IsEnoughFreeSpaceToSaveL() && !iTakeSnapshot )
+                    {
+                    /*if (EStatePlaying == iPreviewState)   
+                        {
+                        PauseVideoL();                      
+                        }                   
+                        */
+                    TakeSnapshotL();
+                    return EKeyWasConsumed;
+                    }
+                }
+            return EKeyWasNotConsumed;
+            }
+        //Check that it's a seeking key and we're in a suitable state. 
+        if ( iPreviewState != EStatePlaying ) 
+            {
+            return EKeyWasNotConsumed;
+            }
+
+        iSeekPos = iVideoDisplay->PositionL();
+
+        return EKeyWasConsumed;
+        }  
+    else if ( aType == EEventKeyUp ) 
+        {
+        iBackKeyPressed = EFalse;
+
+        if ( (iView.EditorState() == CVeiEditVideoView::EPreview ) &&
+            (iPreviewState == EStatePaused ))//large preview
+            {
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::OfferKeyEventL preview back"); 
+            iVideoDisplay->Stop( ETrue );
+            iBackKeyPressed = ETrue;
+            SetBlackScreen( EFalse );
+            }
+
+             
+        if ( iSeeking == EFalse )
+            {
+            return EKeyWasNotConsumed;
+            }
+        iLastPosition = iSeekPos;
+
+        iSeeking = EFalse;
+
+        if ( (iPreviewState == EStatePaused || iPreviewState == EStateStopped) && 
+             (iLastKeyCode == EKeyLeftArrow || iLastKeyCode == EKeyRightArrow) )
+            {
+            GetThumbAtL( iSeekPos );            
+            return EKeyWasConsumed;
+            }
+        else if ( iPreviewState == EStatePlaying )
+            {
+            if ( iTempVideoInfo && (iSeekPos >= iTempVideoInfo->Duration().Int64()) )
+                {
+                iVideoDisplay->Stop( EFalse );
+                }
+            else
+                {
+                iVideoDisplay->SetPositionL( iSeekPos );
+                iVideoDisplay->ShowBlackScreen();
+                DrawDeferred();
+                if ( iTempVideoInfo && !iFrameReady)
+                    {                               
+                    iTempVideoInfo->CancelFrame();
+                    }                                                                       
+                iVideoDisplay->Play();              
+                }
+            return EKeyWasConsumed;
+            }
+        else
+            {
+            return EKeyWasConsumed;
+            }
+        }    
+    else if ( aType == EEventKey )
+        {
+        iLastKeyCode = aKeyEvent.iCode;
+        iKeyRepeatCount++;  
+
+        if( iBackKeyPressed )
+            {
+            iView.SetFullScreenSelected( EFalse );
+            }
+
+        if ( iView.EditorState() == CVeiEditVideoView::EPreview )//large preview
+            {
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::OfferKeyEventL preview back");
+            iVideoDisplay->Stop( ETrue );
+            iBackKeyPressed = ETrue;
+            SetBlackScreen( EFalse );   
+            }
+       
+        switch ( aKeyEvent.iCode )
+            {               
+            case EKeyOK:
+                {
+                if ( iBackKeyPressed  )
+                    {
+                    return EKeyWasNotConsumed;
+                    }
+                 if ( iView.EditorState() == CVeiEditVideoView::EPreview )
+                     {
+                     iView.HandleCommandL( EAknSoftkeyBack );
+                     return EKeyWasConsumed;
+                     }
+
+                if ( ( iCursorLocation == ECursorOnClip && iMovie.VideoClipCount() == 0 ) ||
+                        ( iCursorLocation == ECursorOnEmptyVideoTrack ) ) 
+                    {
+                    iView.Popup()->ShowInsertStuffPopupList();
+                    }
+                else if ( ( iSelectionMode == EModeRecordingSetStart ) ||
+                          ( iSelectionMode == EModeRecording ) ||
+                          ( iSelectionMode == EModeRecordingPaused ) )
+                    {
+                    return EKeyWasConsumed;
+                    }
+                else if ( ( iCursorLocation == ECursorOnAudio && iMovie.AudioClipCount() == 0 ) ||
+                        ( iCursorLocation == ECursorOnEmptyAudioTrack  ) ) 
+                    {
+                    iView.Popup()->ShowInsertAudioPopupList();
+                    }
+                else if ( ( iCursorLocation == ECursorOnClip || iCursorLocation == ECursorOnAudio )
+                    && ( iSelectionMode == EModeMove ) )
+                    {
+                    iView.HandleCommandL( EAknSoftkeyOk );
+                    }
+
+                else if (iCursorLocation == ECursorOnClip && iSelectionMode == EModeDuration)
+                    {
+                    iView.HandleCommandL( EAknSoftkeyOk );  
+                    }
+                else if( iSelectionMode == EModeSlowMotion && iCursorLocation == ECursorOnClip )
+                    {
+                    SetSelectionMode( CVeiEditVideoContainer::EModeSlowMotion ); 
+                    iView.HandleCommandL( EAknSoftkeyOk );
+                    iInfoDisplay->SetSlowMotionOn( EFalse );
+                    iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration );
+
+                    ArrowsControl();
+                    }
+                else if ( iSelectionMode == EModeDuration && iCursorLocation == ECursorOnAudio )
+                    {
+                    iView.HandleCommandL( EAknSoftkeyOk );
+                    }
+
+                else
+                    {
+                    if (EStateGettingFrame != iPreviewState && EStateBuffering != iPreviewState &&
+                        EStateTerminating != iPreviewState && EStateOpening != iPreviewState)
+                        {
+                        iView.ProcessCommandL( EVeiCmdEditVideoViewContainerShowMenu );     
+                        }               
+                    }
+                    
+                return EKeyWasConsumed;
+                }// case EKeyOk
+            
+            case EKeyRightArrow:
+                {
+                if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview )
+                    {
+                    if ( (iKeyRepeatCount > 2)  && (iSeeking == EFalse) )
+                        {
+                        if ( iPreviewState == EStatePlaying )
+                            {
+                            iLastPosition = iVideoDisplay->PositionL();
+                            iSeekPos = iVideoDisplay->PositionL();
+                            }
+
+                        iVideoDisplay->PauseL();
+                        if (iPeriodic)
+                            {                           
+                            iPeriodic->Cancel();                                
+                            }
+                        iSeeking = ETrue;
+                        iKeyRepeatCount = 0;                
+                        }
+
+                    if ( iSeeking &&( iPreviewState == EStateStopped ) ||
+                                    ( iPreviewState == EStatePlaying ) || 
+                                    ( iPreviewState == EStatePaused ) )
+                        {
+                        TInt adjustment = TimeIncrement( iKeyRepeatCount );
+
+                        TInt64 newPos = iSeekPos.Int64() + adjustment;
+
+                        if ( iTempVideoInfo && (newPos > iTempVideoInfo->Duration().Int64()) )
+                            {
+                            newPos = iTempVideoInfo->Duration().Int64();
+                            }
+
+                        iSeekPos = TTimeIntervalMicroSeconds( newPos );
+
+                        iView.DoUpdateEditNaviLabelL();
+                        return EKeyWasConsumed;
+                        }
+                    }
+
+                if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed )
+                    {
+                    return EKeyWasNotConsumed;
+                    }
+                if ( iCursorLocation == ECursorOnClip )
+                    {
+                    //SM - RIGHT = MORE
+                    if((iSelectionMode == EModeSlowMotion) && (iCursorLocation == ECursorOnClip))
+                        {
+                        if( iSlowMotionValue < 1000)
+                            {
+                            iVideoDisplay->SetFrameIntervalL( -25 );
+                            iSlowMotionValue = iSlowMotionValue + 50;
+                            iMovie.VideoClipSetSpeed( CurrentIndex(), iSlowMotionValue );
+                            iArrowsDisplay->SetSlowMotionPreset( iSlowMotionValue / 10);
+                            ArrowsControl();            
+                            }
+                        return EKeyWasConsumed;
+                        }
+
+                    if ( iSelectionMode == EModeNavigation )
+                        {
+                        if ( iMovie.VideoClipCount() > 0 ) 
+                            {
+                            ++iVideoCursorPos;
+                            SetCursorLocation( ECursorOnTransition );
+                            }
+                        }
+                    else
+                        {
+                        if ( ( iSelectionMode == EModeMove ) && ( iVideoCursorPos  < iMovie.VideoClipCount() - 1 ) ) 
+                            {
+                            TInt oldplace = iVideoCursorPos;
+                            ++iVideoCursorPos;
+                            iMovie.VideoClipSetIndex( oldplace, iVideoCursorPos );
+                            }
+                        }
+
+                    if (iSelectionMode == EModeDuration) 
+                        {
+                        CVedVideoClipInfo* info = iMovie.VideoClipInfo( iVideoCursorPos );
+
+                        TInt64 newDurationInt = iMovie.VideoClipEditedDuration( iVideoCursorPos ).Int64() + TimeIncrement(iKeyRepeatCount);
+
+                        if (info->Class() == EVedVideoClipClassGenerated) 
+                            {
+                            if (info->Generator()->Uid() == KUidTitleClipGenerator) 
+                                {
+                                CVeiTitleClipGenerator* generator = STATIC_CAST(CVeiTitleClipGenerator*, info->Generator());
+                                generator->SetDuration(TTimeIntervalMicroSeconds(newDurationInt));
+                                }
+                            else if (info->Generator()->Uid() == KUidImageClipGenerator) 
+                                {
+                                CVeiImageClipGenerator* generator = STATIC_CAST(CVeiImageClipGenerator*, info->Generator());
+                                generator->SetDuration(TTimeIntervalMicroSeconds(newDurationInt));
+                                }
+                            }
+                        }
+
+                    } // if ( iCursorLocation == ECursorOnClip )
+                    
+                else if ( iCursorLocation == ECursorOnTransition )
+                    {
+                    if ( iVideoCursorPos < iMovie.VideoClipCount() )
+                        {   
+                        SetCursorLocation( ECursorOnClip );
+                        }
+                    else
+                        {
+                        SetCursorLocation( ECursorOnEmptyVideoTrack );  
+                        }
+                    }
+                else if ( iCursorLocation == ECursorOnAudio )
+                    {
+                    if ( iSelectionMode == EModeNavigation )
+                        {
+                        if ( iAudioCursorPos < iMovie.AudioClipCount() - 1 ) 
+                            {
+                            ++iAudioCursorPos;
+                            SetCursorLocation( ECursorOnAudio );
+                            }
+                        else
+                            {
+                            SetCursorLocation( ECursorOnEmptyAudioTrack );  
+                            }
+                        }
+                    else if ( iSelectionMode == EModeMove ) 
+                        {
+                        return MoveAudioRight();
+                        }
+                    else if (iSelectionMode == EModeDuration) 
+                        {
+
+                        TTimeIntervalMicroSeconds clipCutOutTime = iMovie.AudioClipCutOutTime( iAudioCursorPos );   
+
+                        TInt64 newEndTimeInt = clipCutOutTime.Int64() + TimeIncrement(iKeyRepeatCount);
+
+                        if (iAudioCursorPos < (iMovie.AudioClipCount() - 1))
+                            {
+                            TInt64 nextStartTimeInt = iMovie.AudioClipStartTime( iAudioCursorPos + 1 ).Int64();
+                            TInt64 currentEndTimeInt = iMovie.AudioClipEndTime( iAudioCursorPos ).Int64() + TimeIncrement(iKeyRepeatCount);
+
+                            if ( currentEndTimeInt > nextStartTimeInt)
+                                {
+                                newEndTimeInt = nextStartTimeInt - iMovie.AudioClipStartTime( iAudioCursorPos ).Int64();
+                                }
+                            }
+                        CVedAudioClipInfo* audioclipinfo = iMovie.AudioClipInfo( iAudioCursorPos );
+                        if (newEndTimeInt > audioclipinfo->Duration().Int64() )                 
+                            {
+                            newEndTimeInt = audioclipinfo->Duration().Int64();
+                            }
+                        iMovie.AudioClipSetCutOutTime( iAudioCursorPos, TTimeIntervalMicroSeconds( newEndTimeInt ) );                                           
+                        }
+                    } // else if ( iCursorLocation == ECursorOnAudio )
+                    DrawDeferred();
+
+                    return EKeyWasConsumed;
+                } // case EKeyRightArrow
+            case EKeyLeftArrow:
+                {
+                if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview )
+                    {
+                    iKeyRepeatCount++;
+
+                    if ( (iKeyRepeatCount > 2)  && (iSeeking == EFalse) )
+                        {
+                    
+                        if ( iPreviewState == EStatePlaying )
+                            {
+                            iLastPosition = iVideoDisplay->PositionL();
+                            iSeekPos = iVideoDisplay->PositionL();
+                            }                                                   
+                        
+                        iVideoDisplay->PauseL();
+                        if (iPeriodic)
+                            {                           
+                            iPeriodic->Cancel();                            
+                            }
+                        iSeeking = ETrue;
+                                                
+                        iKeyRepeatCount = 0;                
+                        }
+
+                    if ( iSeeking&&( iPreviewState == EStateStopped ) ||
+                        ( iPreviewState == EStatePlaying ) || 
+                        ( iPreviewState == EStatePaused ) )
+                        {
+                        TInt adjustment = TimeIncrement( iKeyRepeatCount );
+
+                        TInt64 newPos = iSeekPos.Int64() - adjustment;
+                        if ( newPos < 0 ) 
+                            {
+                            newPos = 0;
+                            }
+                        iSeekPos = TTimeIntervalMicroSeconds( newPos ); 
+                        
+                        iView.DoUpdateEditNaviLabelL();
+                        return EKeyWasConsumed;
+                        }
+                    }
+                 
+                if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed  )
+                    {
+                    return EKeyWasNotConsumed;
+                    }               
+                if ( iCursorLocation == ECursorOnClip )
+                    {
+                    // SM - LEFT = LESS
+                    if(( iSelectionMode == EModeSlowMotion) && (iCursorLocation == ECursorOnClip))
+                        {   
+                        
+                        if( iSlowMotionValue > 250)
+                            {
+                            iVideoDisplay->SetFrameIntervalL( 25 );
+                            iSlowMotionValue = iSlowMotionValue - 50; 
+                            iMovie.VideoClipSetSpeed( CurrentIndex(), iSlowMotionValue );
+                            iArrowsDisplay->SetSlowMotionPreset( iSlowMotionValue / 10);
+                            ArrowsControl();
+                            }
+                        return EKeyWasConsumed;
+                        }
+                    
+
+                    if ( iSelectionMode == EModeNavigation )
+                        {
+                        if ( iMovie.VideoClipCount() > 0 ) 
+                            {
+                            SetCursorLocation( ECursorOnTransition );
+                            }
+                        }
+                    else
+                        {
+                        if ( ( iSelectionMode == EModeMove ) && ( iVideoCursorPos > 0 ) ) 
+                            {
+                            TInt oldplace = iVideoCursorPos;
+                            iVideoCursorPos--;
+                            iMovie.VideoClipSetIndex( oldplace, iVideoCursorPos );
+                            }
+                        }
+
+                    if (iSelectionMode == EModeDuration) 
+                        {
+                        TInt64 newDurationInt = iMovie.VideoClipEditedDuration(iVideoCursorPos).Int64() - TimeIncrement(iKeyRepeatCount);
+
+                        if (newDurationInt < 1000000)
+                            {
+                            newDurationInt = 1000000;
+                            }
+
+                        CVedVideoClipInfo* info = iMovie.VideoClipInfo(iVideoCursorPos);
+                        if (info->Class() == EVedVideoClipClassGenerated) 
+                            {
+                            if (info->Generator()->Uid() == KUidTitleClipGenerator) 
+                                {
+                                CVeiTitleClipGenerator* generator = STATIC_CAST(CVeiTitleClipGenerator*, info->Generator());
+                                generator->SetDuration(TTimeIntervalMicroSeconds(newDurationInt));
+                                }
+                            else if (info->Generator()->Uid() == KUidImageClipGenerator) 
+                                {
+                                CVeiImageClipGenerator* generator = STATIC_CAST(CVeiImageClipGenerator*, info->Generator());
+                                generator->SetDuration(TTimeIntervalMicroSeconds(newDurationInt));
+                                }
+                            }
+                        }
+
+                    }
+                else if ( iCursorLocation == ECursorOnTransition )
+                    {
+                    if ( iVideoCursorPos > 0 )
+                        {   
+                        --iVideoCursorPos;
+                        SetCursorLocation( ECursorOnClip );
+                        }
+                    }
+                else if ( iCursorLocation == ECursorOnAudio )
+                    {
+                    if ( iSelectionMode == EModeNavigation )
+                        {
+                        if ( iAudioCursorPos > 0 ) 
+                            {
+                            iAudioCursorPos--;
+                            SetCursorLocation( ECursorOnAudio );
+                            }
+                        }
+                    else if (iSelectionMode == EModeMove) 
+                        {
+                        return MoveAudioLeft();
+                        }
+                    else if (iSelectionMode == EModeDuration) 
+                        {
+
+                        TInt64 newDurationInt = iMovie.AudioClipCutOutTime( iAudioCursorPos ).Int64() - TimeIncrement(iKeyRepeatCount);                     
+                        if (newDurationInt < 1000000)
+                            {
+                            newDurationInt = 1000000;
+                            }
+                        TInt64 newEndTimeInt = iMovie.AudioClipStartTime( iAudioCursorPos ).Int64() + newDurationInt;
+                        for (TInt i = iMovie.VideoClipCount() - 1; i >= 0; i--)
+                            {
+                            if ( ( iMovie.AudioClipEndTime( iAudioCursorPos ) > iMovie.VideoClipEndTime( i ) ) &&
+                                TTimeIntervalMicroSeconds(newEndTimeInt) < iMovie.VideoClipEndTime( i ) )
+                                {
+                                newDurationInt = iMovie.VideoClipEndTime( i ).Int64() - iMovie.AudioClipStartTime( iAudioCursorPos ).Int64();
+                                break;
+                                }
+                            }
+                        if ( newDurationInt < ( iMovie.AudioClipCutInTime( iAudioCursorPos ).Int64() ) )
+                            {
+                            newDurationInt = iMovie.AudioClipCutInTime( iAudioCursorPos ).Int64();
+                            }
+                        iMovie.AudioClipSetCutOutTime( iAudioCursorPos, TTimeIntervalMicroSeconds( newDurationInt ) );              
+                        }
+                    }
+
+                else if ( iCursorLocation == ECursorOnEmptyVideoTrack )
+                    {
+                    if ( iMovie.VideoClipCount() > 0 )
+                        {
+                        SetCursorLocation( ECursorOnTransition );
+                        }
+                    }
+                else if ( iCursorLocation == ECursorOnEmptyAudioTrack )
+                    {
+                    if ( iMovie.AudioClipCount() > 0 )
+                        {
+                        SetCursorLocation( ECursorOnAudio );
+                        }
+                    }
+
+                DrawDeferred();
+                return EKeyWasConsumed;
+                } // EKeyLeftArrow
+            
+            case EKeyUpArrow:
+            case EStdKeyIncVolume:
+                {           
+                if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed )
+                    {
+                    if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview )
+                        {
+                        iVideoDisplay->OfferKeyEventL( aKeyEvent, aType );
+                        return EKeyWasConsumed;
+                        }
+                    return EKeyWasNotConsumed;
+                    }
+                if ( ((iCursorLocation==ECursorOnAudio) || (iCursorLocation==ECursorOnEmptyAudioTrack) )
+                        && (iSelectionMode == EModeNavigation ) ) 
+                    {
+                    SetCursorLocation( iPrevCursorLocation );
+                    DrawDeferred();
+                    return EKeyWasConsumed;
+                    }
+                else if ( iCursorLocation == ECursorOnTransition ) 
+                    {
+                    iView.HandleCommandL( EVeiCmdEditVideoViewTransitionKeyUp );
+                    return EKeyWasConsumed;
+                    }
+                else
+                    {
+                    return EKeyWasNotConsumed;
+                    }
+                }
+            case EKeyDownArrow:
+            case EStdKeyDecVolume:
+                {
+                if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed )
+                    {
+                    if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview )
+                        {
+                        iVideoDisplay->OfferKeyEventL( aKeyEvent, aType );
+                        return EKeyWasConsumed;
+                        }
+                    return EKeyWasNotConsumed;
+                    }
+                if ( iCursorLocation == ECursorOnTransition ) 
+                    {
+                    iView.HandleCommandL( EVeiCmdEditVideoViewTransitionKeyDown );
+                    return EKeyWasConsumed;
+                    }
+                else if ( (iCursorLocation != ECursorOnAudio )&& (iSelectionMode == EModeNavigation) &&
+                        (iCursorLocation != ECursorOnEmptyAudioTrack ) ) 
+                    {
+                    iPrevCursorLocation = iCursorLocation;
+                    SetCursorLocation( ECursorOnAudio );
+                    DrawDeferred();
+                    return EKeyWasConsumed;
+                    }
+                else
+                    {
+                    return EKeyWasNotConsumed;
+                    }
+                }
+            case EKeyBackspace:     //Clear 0x08
+                {
+                if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed )
+                    {
+                    return EKeyWasNotConsumed;
+                    }
+                if ( ( ( iCursorLocation == ECursorOnClip ) || ( iCursorLocation == ECursorOnAudio ) )
+                    && ( ( iMovie.VideoClipCount() > 0 ) || ( iMovie.AudioClipCount() > 0 ) ) && ( iSelectionMode == EModeNavigation ) )
+                    {
+                    iView.ProcessCommandL( EVeiCmdEditVideoViewEditVideoRemove );
+                    return EKeyWasConsumed;
+                    }
+                else if ((iCursorLocation == ECursorOnTransition) && (iSelectionMode == EModeNavigation))
+                    {
+                    iView.ProcessCommandL( EVeiCmdEditVideoViewTransitionNone );
+                    }
+                else if ( ( iSelectionMode == EModeSlowMotion ))
+                    {
+                    return EKeyWasNotConsumed;
+                    }
+                return EKeyWasNotConsumed;
+                }
+            case EKeyYes:       //Send 63586
+                {
+                if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed  )
+                    {
+                    return EKeyWasNotConsumed;
+                    }
+                if ( iSelectionMode == EModeNavigation )
+                    {
+                    iView.SetSendKey( ETrue );
+                    iView.ProcessCommandL( EVeiCmdSendMovie );  
+                    return EKeyWasConsumed;
+                    }
+                break;
+                }
+            default:
+                {
+                return EKeyWasNotConsumed;
+                }
+            }
+        }
+    return EKeyWasNotConsumed;
+    }
+
+
+TKeyResponse CVeiEditVideoContainer::MoveAudioLeft()
+    {
+    TInt i;
+
+    TInt index = iAudioCursorPos;
+
+    if ( iAudioCursorPos > 0 )
+        {
+        TTimeIntervalMicroSeconds startTime = iMovie.AudioClipStartTime( iAudioCursorPos ); //second
+        TTimeIntervalMicroSeconds prevEndTime = iMovie.AudioClipEndTime( iAudioCursorPos-1 ); //first
+                    
+        if ( startTime == prevEndTime )
+            {
+            TInt newIndex = iAudioCursorPos - 1;
+            while ( newIndex > 0 )
+                {
+                TTimeIntervalMicroSeconds newNextStartTime = iMovie.AudioClipStartTime( newIndex ); //first
+                TTimeIntervalMicroSeconds newPrevEndTime = iMovie.AudioClipEndTime( newIndex - 1);
+
+                if ( newPrevEndTime == newNextStartTime )
+                    {
+                    newIndex--;
+                    }
+                else
+                    {
+                    break;
+                    }
+                }
+            if ( ( newIndex == 0 ) && ( iMovie.AudioClipStartTime( 0 ) == TTimeIntervalMicroSeconds(0) ) )
+                {
+                return EKeyWasConsumed;
+                }
+
+            TInt64 newEndTimeInt = iMovie.AudioClipStartTime( newIndex ).Int64();   //first
+
+            TInt64 newStartTimeInt = newEndTimeInt - iView.OriginalAudioDuration().Int64();
+
+            TInt64 newCutOutTimeInt = (newEndTimeInt - newStartTimeInt) + iMovie.AudioClipCutInTime( index ).Int64();
+
+            if (newStartTimeInt < 0)
+                {
+                newStartTimeInt = 0;
+                }
+
+            if ( newIndex > 0 )
+                {
+                TInt64 newPrevEndTimeInt = iMovie.AudioClipEndTime( newIndex - 1 ).Int64();
+                if ( newStartTimeInt < newPrevEndTimeInt )
+                    {
+                    newStartTimeInt = newPrevEndTimeInt;
+                    }
+                }
+
+            if ( (newCutOutTimeInt+newStartTimeInt) > iMovie.AudioClipStartTime( index - 1 ).Int64() )
+                {
+                TInt64 audioStartTime = iMovie.AudioClipStartTime( index - 1 ).Int64();
+                newCutOutTimeInt = (audioStartTime - newStartTimeInt) + iMovie.AudioClipCutInTime( index ).Int64();
+                }
+
+            iMovie.AudioClipSetStartTime( index,TTimeIntervalMicroSeconds( newStartTimeInt ) );
+            iMovie.AudioClipSetCutOutTime( newIndex, TTimeIntervalMicroSeconds( newCutOutTimeInt ) );
+
+            iAudioCursorPos = newIndex;
+
+            DrawDeferred();
+
+            return EKeyWasConsumed;
+            }
+        }
+
+    TTimeIntervalMicroSeconds audioclipstart =  iMovie.AudioClipStartTime( index );
+    TTimeIntervalMicroSeconds audioclipend =    iMovie.AudioClipEndTime( index );
+    TInt64 audioclipeditedduration =            iMovie.AudioClipEditedDuration( index ).Int64();
+
+    TInt64 newStartTimeInt = audioclipstart.Int64() - TimeIncrement( iKeyRepeatCount );
+
+    if ( newStartTimeInt < 0 )
+        {
+        newStartTimeInt = 0;
+        }
+
+    for ( i = iMovie.VideoClipCount() - 1; i >= 0; i-- )
+        {
+        TTimeIntervalMicroSeconds endtime = iMovie.VideoClipEndTime( i );
+
+        if ( ( audioclipstart > endtime ) && TTimeIntervalMicroSeconds(newStartTimeInt) < endtime )
+            {
+            newStartTimeInt = endtime.Int64();
+            break;
+            }
+        }
+
+    TInt64 newEndTimeInt = newStartTimeInt + audioclipeditedduration;
+
+    for (i = iMovie.VideoClipCount() - 1; i >= 0; i-- )
+        {
+        if ((audioclipend > iMovie.VideoClipEndTime(i)) && TTimeIntervalMicroSeconds(newEndTimeInt) < iMovie.VideoClipEndTime(i))
+            {
+            newStartTimeInt = iMovie.VideoClipEndTime(i).Int64() - audioclipeditedduration;
+            break;
+            }
+        }
+
+    if (iAudioCursorPos > 0)
+        {
+        TInt64 prevEndTimeInt = iMovie.AudioClipEndTime( iAudioCursorPos - 1 ).Int64();
+                        
+        if (newStartTimeInt < prevEndTimeInt)
+            {
+            newStartTimeInt = prevEndTimeInt;
+            }
+        }
+    iMovie.AudioClipSetStartTime( index, TTimeIntervalMicroSeconds(newStartTimeInt) );
+    iAudioCursorPos = index;
+    return EKeyWasConsumed;
+    }
+
+
+TKeyResponse CVeiEditVideoContainer::MoveAudioRight()
+    {
+    TInt i;
+    TInt index = iAudioCursorPos;
+
+    if ( iAudioCursorPos < ( iMovie.AudioClipCount() - 1 ) )
+        {
+        TTimeIntervalMicroSeconds endTime = iMovie.AudioClipEndTime( iAudioCursorPos );
+        TTimeIntervalMicroSeconds nextStartTime = iMovie.AudioClipStartTime( iAudioCursorPos+1 );
+
+        if (endTime == nextStartTime)
+            {
+            TInt newIndex = iAudioCursorPos + 1;
+            while ( newIndex < ( iMovie.AudioClipCount() - 1 ) )
+                {
+                TTimeIntervalMicroSeconds newPrevEndTime = iMovie.AudioClipEndTime( newIndex );
+                TTimeIntervalMicroSeconds newNextStartTime = iMovie.AudioClipStartTime( newIndex+1 );
+
+                if (newPrevEndTime == newNextStartTime)
+                    {
+                    newIndex++;
+                    }
+                else
+                    {
+                    break;
+                    }
+                }
+
+            TInt64 newStartTimeInt = iMovie.AudioClipEndTime( newIndex ).Int64();
+            TInt64 newEndTimeInt = newStartTimeInt + iView.OriginalAudioDuration().Int64();
+
+            TInt64 newCutOutTimeInt = (newEndTimeInt - newStartTimeInt) + iMovie.AudioClipCutInTime( index ).Int64();
+
+            if ( newIndex < ( iMovie.AudioClipCount()-1 ) )
+                {
+                TInt64 newNextStartTimeInt = iMovie.AudioClipStartTime(newIndex + 1).Int64();
+                if ( newEndTimeInt > newNextStartTimeInt )
+                    {
+                    newEndTimeInt = newNextStartTimeInt;
+                    }
+
+                if ( (newCutOutTimeInt+newStartTimeInt) > iMovie.AudioClipStartTime( newIndex + 1 ).Int64() )
+                    {
+                    TInt64 audioStartTime = iMovie.AudioClipStartTime( newIndex + 1 ).Int64();
+                    newCutOutTimeInt = audioStartTime - newStartTimeInt;
+                    }
+                }
+
+            iMovie.AudioClipSetStartTime( index,TTimeIntervalMicroSeconds( newStartTimeInt ) );
+            iMovie.AudioClipSetCutOutTime( newIndex, TTimeIntervalMicroSeconds( newCutOutTimeInt ) );
+
+            iAudioCursorPos = newIndex;
+
+            DrawDeferred();
+
+            return EKeyWasConsumed;
+            }
+        }
+
+    TInt64 newStartTimeInt = iMovie.AudioClipStartTime( iAudioCursorPos ).Int64() + TimeIncrement( iKeyRepeatCount );
+                    
+    for ( i = 0; i < iMovie.VideoClipCount(); i++ )
+        {
+        TTimeIntervalMicroSeconds endtime = iMovie.VideoClipEndTime( i );
+        TTimeIntervalMicroSeconds audioclipstart =  iMovie.AudioClipStartTime( index );
+
+        if ( ( audioclipstart < endtime ) && TTimeIntervalMicroSeconds(newStartTimeInt) > endtime )
+            {
+            newStartTimeInt = endtime.Int64();
+            break;
+            }
+        }
+
+    TInt64 audioclipeditedduration = iMovie.AudioClipEditedDuration( index ).Int64();
+
+    TInt64 newEndTimeInt = newStartTimeInt + audioclipeditedduration;
+    TTimeIntervalMicroSeconds audioclipend = iMovie.AudioClipEndTime( index );
+
+    for (i = 0; i < iMovie.VideoClipCount(); i++)
+        {
+        if ( ( audioclipend < iMovie.VideoClipEndTime(i)) && 
+            TTimeIntervalMicroSeconds( newEndTimeInt ) > iMovie.VideoClipEndTime( i ) )
+            {
+            newStartTimeInt = iMovie.VideoClipEndTime(i).Int64() - audioclipeditedduration;
+            break;
+            }
+        }
+
+    if (iAudioCursorPos < (iMovie.AudioClipCount() - 1))
+        {
+        newEndTimeInt = newStartTimeInt + audioclipeditedduration;
+        TInt64 nextStartTimeInt = iMovie.AudioClipStartTime( iAudioCursorPos + 1 ).Int64();
+                        
+        if (newEndTimeInt > nextStartTimeInt)
+            {
+            newStartTimeInt -= (newEndTimeInt - nextStartTimeInt);
+            }
+        }
+    iMovie.AudioClipSetStartTime( index, TTimeIntervalMicroSeconds(newStartTimeInt) );
+    iAudioCursorPos = index;
+    return EKeyWasConsumed;
+    }
+
+
+TInt CVeiEditVideoContainer::TimeIncrement(TInt aKeyCount) const
+    {
+    if ( aKeyCount < 3 )
+        {
+        return 100000;
+        }
+    else if ( aKeyCount < 4 )
+        {
+        return 300000;
+        }
+    else if ( aKeyCount < 5 )
+        {
+        return 500000;
+        }
+    else if ( aKeyCount < 19 )
+        {
+        return 1000000;
+        }
+    else
+        {
+        return 5000000;
+        }   
+    }
+
+
+TTimeIntervalMicroSeconds CVeiEditVideoContainer::TotalLength()
+    {
+    TTimeIntervalMicroSeconds duration = TTimeIntervalMicroSeconds(0);
+
+    if ( iVideoDisplay )
+        {
+        duration = iVideoDisplay->TotalLengthL();
+        }
+
+    return duration;
+    }
+    
+// ---------------------------------------------------------
+// CVeiEditVideoContainer::CountComponentControls() const
+// ---------------------------------------------------------
+//
+TInt CVeiEditVideoContainer::CountComponentControls() const
+    {
+    if (EModeMixingAudio == iSelectionMode || EModeAdjustVolume == iSelectionMode)
+        {
+        return 9; // return nbr of controls inside this container   
+        }
+    else
+        {       
+        return 10; // return nbr of controls inside this container
+        }
+    }
+
+// ---------------------------------------------------------
+// CVeiEditVideoContainer::ComponentControl(TInt aIndex) const
+// ---------------------------------------------------------
+//
+CCoeControl* CVeiEditVideoContainer::ComponentControl( TInt aIndex ) const
+    {
+    switch ( aIndex )
+        {
+        case 0:
+            return iVideoDisplay;
+        case 1:
+            return iInfoDisplay;
+        case 2:
+            return iDummyCutBarLeft;
+        case 3:         
+            return iTransitionDisplayLeft;
+        case 4:
+            return iTransitionDisplayRight;
+        case 5:
+            return iEffectSymbols;
+        case 6:
+            return iArrowsDisplay;
+        case 7:         
+            return iVerticalSlider; 
+        case 8:
+            return iHorizontalSlider;
+        case 9:
+            // this one is not used in modes EModeMixingAudio and EModeAdjustVolume
+            if (EModeMixingAudio != iSelectionMode && EModeAdjustVolume != iSelectionMode)
+                {       
+                return iDummyCutBar;
+                }
+            else
+                {
+                return NULL;
+                }
+        default: 
+            return NULL;
+        }
+    }
+
+void CVeiEditVideoContainer::SaveSnapshotL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::SaveSnapshotL(): in");
+
+    //first we have to encode bitmap
+    // get encoder types 
+    RImageTypeDescriptionArray imageTypes; 
+    iConverter->GetEncoderImageTypesL( imageTypes );    
+
+    CleanupStack::PushL( TCleanupItem( CleanupRArray, &imageTypes ) );
+
+    TInt selectedIdx = 0;
+
+    _LIT( KEncoderType, "JPEG" ); // encoder type for image conversion
+
+    for( TInt i=0; i<imageTypes.Count(); i++ ) 
+        {
+        if ( imageTypes[i]->Description() == KEncoderType )
+            {
+            selectedIdx = i;
+            }
+        }
+
+    RFs&    fs = iEikonEnv->FsSession();
+
+    TParse file;
+    TFileName newname;
+    TFileName snapshotdir;
+
+    TVeiSettings saveSettings;
+    // Get default snapshot name from settings view
+
+    STATIC_CAST( CVeiAppUi*, iEikonEnv->AppUi() )->ReadSettingsL( saveSettings );   
+
+    CAknMemorySelectionDialog::TMemory memory( saveSettings.MemoryInUse() );
+
+    newname.Append( saveSettings.DefaultSnapshotName() );
+    newname.Append( _L(".JPEG") );
+    file.Set( newname, NULL, NULL );
+    
+    TInt error = KErrNone;
+
+    snapshotdir.Zero();
+
+    if ( memory == CAknMemorySelectionDialog::EPhoneMemory )
+        {
+        snapshotdir.Append( PathInfo::PhoneMemoryRootPath() ); 
+        }
+    else
+        {
+        snapshotdir.Append( PathInfo::MemoryCardRootPath() ); 
+        }
+    snapshotdir.Append( PathInfo::ImagesPath() );
+
+    error = fs.MkDirAll( file.Path() );
+    if ( ( error != KErrAlreadyExists ) && ( error != KErrNone ) )
+        {
+        return;
+        }
+
+    newname.Zero();
+    newname.Append( file.NameAndExt() );
+    newname.Insert( 0, snapshotdir );
+    CApaApplication::GenerateFileName( fs, newname );
+
+    //for cancellation
+    if ( iSaveToFileName )
+        {
+        delete iSaveToFileName;
+        iSaveToFileName = NULL;
+        }
+    iSaveToFileName = HBufC::NewL( newname.Length() );
+    *iSaveToFileName = newname;
+
+    // request the actuall save/encode
+    // asynchronous, the result is reported via callback NotifyCompletion
+    iConverter->StartToEncodeL( newname, 
+        imageTypes[selectedIdx]->ImageType(), imageTypes[selectedIdx]->SubType() );
+
+    /*
+    if (iProgressDialog)
+        {
+        delete iProgressDialog;
+        iProgressDialog = NULL; 
+        }
+   
+    iProgressDialog = 
+           new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**, 
+          &iProgressDialog), ETrue);
+    iProgressDialog->SetCallback(this);
+    iProgressDialog->ExecuteDlgLD( R_VEI_PROGRESS_NOTE );
+
+
+    HBufC* stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_SAVING_IMAGE, iEikonEnv );      
+    iProgressDialog->SetTextL( *stringholder );
+    CleanupStack::PopAndDestroy( stringholder );
+
+    iProgressDialog->GetProgressInfoL()->SetFinalValue(100);
+    */
+    
+    CleanupStack::PopAndDestroy( &imageTypes ); 
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::SaveSnapshotL(): out");
+    }
+
+
+void CVeiEditVideoContainer::SetFinishedStatus( TBool aStatus )
+    {
+    iFinished = aStatus;
+    iCurrentPoint = 0;
+    DrawPlayHead();
+    }
+
+TInt CVeiEditVideoContainer::Update( TAny* aThis )
+    {
+    STATIC_CAST( CVeiEditVideoContainer*, aThis )->DoUpdate();
+    return 42;
+    }
+
+void CVeiEditVideoContainer::DoUpdate()
+    {
+    if (iView.EditorState() != CVeiEditVideoView::EQuickPreview )
+        {
+        iZoomFactorX++;
+        iZoomFactorY++;
+        if ( iZoomFactorX > KMaxZoomFactorX )
+            {
+            iZoomFactorX = KMaxZoomFactorX;
+            }
+        if ( iZoomFactorY > KMaxZoomFactorY )
+            {
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::DoUpdate: Zooming completed");
+            iZoomTimer->Cancel();
+            }
+        }
+    else
+        {
+        iZoomFactorX--;
+        iZoomFactorY--;
+        if ( iZoomFactorX < 0 )
+            {
+            iZoomFactorX = 0;
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::DoUpdate: Zooming completed");
+            iZoomTimer->Cancel();
+            }
+        if ( iZoomFactorY < 0 )
+            {
+            iZoomFactorY = 0;
+            }
+        }
+
+    if( iSelectionMode != EModePreview )
+        {
+        DrawTrackBoxes();
+        }
+    }
+
+TInt CVeiEditVideoContainer::UpdatePosition( TAny* aThis )
+    {   
+    STATIC_CAST( CVeiEditVideoContainer*, aThis )->DoUpdatePosition();          
+    return 42;
+    }   
+
+void CVeiEditVideoContainer::DoUpdatePosition()
+    {
+    
+    TUint time = static_cast<TInt32>(PlaybackPositionL().Int64() / 1000);
+    
+    //LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::DoUpdatePosition(): 1, time:%d", time);    
+
+/** Check if playhead needs to be drawn again*/
+    TInt64 barDuration = iMovie.Duration().Int64();
+
+    if (barDuration < 30000000)
+        {
+        barDuration = 30000000;
+        }
+    else if (barDuration < 45000000)
+        {
+        barDuration = 45000000;
+        }
+    else{
+        barDuration = ((barDuration / 30000000) + 1) * 30000000;
+        }
+
+    TInt barWidth = iVideoBarBox.Width();
+    
+    TInt videoClipCount = iMovie.VideoClipCount();
+    TInt audioClipCount = iMovie.AudioClipCount();  
+    TInt lastVideoClipX(0);
+    TTimeIntervalMicroSeconds endTime;
+
+    __ASSERT_ALWAYS( ((iMovie.VideoClipCount()>0) || (iMovie.AudioClipCount()>0)), 
+                    User::Panic( _L("VideoEditor" ), 34 ) );
+
+
+    if (( videoClipCount > 0 ) && ( audioClipCount > 0 ))
+        {
+        TTimeIntervalMicroSeconds videoClipEndTime = iMovie.VideoClipEndTime( videoClipCount-1 );
+        TTimeIntervalMicroSeconds audioClipEndTime = iMovie.AudioClipEndTime( audioClipCount-1 );
+        if ( videoClipEndTime > audioClipEndTime )
+            {
+            endTime = videoClipEndTime;
+            }
+        else
+            {
+            endTime = audioClipEndTime;
+            }
+        }
+    else if ( videoClipCount > 0 )
+        {
+        endTime = iMovie.VideoClipEndTime( videoClipCount-1 );
+        }
+    else
+        {
+        endTime = iMovie.AudioClipEndTime( audioClipCount-1 );
+        }
+
+    lastVideoClipX = iVideoBarBox.iTl.iX
+        + static_cast<TInt32>((((endTime.Int64() * barWidth)) / barDuration)) + 1;
+    
+    TInt width = lastVideoClipX - iVideoBarBox.iTl.iX;
+
+    TUint totalTime = static_cast<TInt32>(iMovie.Duration().Int64() /1000);
+    TInt nextPosition = time * width / totalTime + iVideoBarBox.iTl.iX;
+
+    if ( nextPosition != iCurrentPointX ) 
+        {
+        iCurrentPoint = time;
+        DrawPlayHead();
+        }
+    else
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::DoUpdatePosition 3, drawplayhead skipped");               
+        }
+    }
+
+void CVeiEditVideoContainer::PlayVideoFileL( const TDesC& aFilename, const TBool& aFullScreen )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideoFileL(): In");
+
+     if ( iTempFileName )
+        {
+        delete iTempFileName;
+        iTempFileName = NULL;
+        }
+
+    iTempFileName = HBufC::NewL(KMaxFileName);
+    *iTempFileName = aFilename;
+    
+    // Get default movie name from settings view
+
+    TFileName newname;
+    TVeiSettings movieSaveSettings;
+
+    STATIC_CAST( CVeiAppUi*, iEikonEnv->AppUi() )->ReadSettingsL( movieSaveSettings );  
+
+    newname.Append( movieSaveSettings.DefaultVideoName() );
+    iInfoDisplay->SetName( newname );
+
+    TTimeIntervalMicroSeconds movieDuration = iMovie.Duration();
+    iInfoDisplay->SetDuration( movieDuration );
+
+    if ( iTempVideoInfo ) 
+        {
+        delete iTempVideoInfo;
+        iTempVideoInfo = 0;     
+        }
+    iFullScreenSelected = aFullScreen;
+
+    if ( iCursorLocation == ECursorOnTransition )
+        {
+        iTransitionDisplayLeft->MakeVisible( EFalse );
+        iTransitionDisplayRight->MakeVisible( EFalse );
+        iArrowsDisplay->SetUpperArrowVisibility( EFalse );
+        iArrowsDisplay->SetLowerArrowVisibility( EFalse );
+        iDummyCutBar->SetRect( iDummyCutBarBox );
+        }
+    iInfoDisplay->MakeVisible( EFalse );
+    iDummyCutBar->MakeVisible( EFalse );
+    iDummyCutBarLeft->MakeVisible( EFalse );
+    iEffectSymbols->MakeVisible( EFalse );
+    iVideoDisplay->StopAnimation();
+    
+    SetPreviewState(EStateOpening);    
+
+    if ( !iScreenLight->IsActive() )
+        {
+        iScreenLight->Start();
+        }
+    
+    if ( iFullScreenSelected )
+        {        
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideoFileL: fullscreen selected");
+        iView.SetEditorState( CVeiEditVideoView::EPreview);    
+
+        SetBlackScreen( ETrue );        
+        iVideoDisplay->OpenFileL( aFilename );    
+        }
+    else
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideoFileL: fullscreen not selected");
+        iView.SetEditorState( CVeiEditVideoView::EQuickPreview);    
+        iVideoDisplay->SetRect( iVideoDisplayBox );
+        iVideoDisplay->ShowBlackScreen();
+        iInfoDisplay->SetRect( iInfoDisplayBox );
+
+        iDummyCutBar->MakeVisible( ETrue );
+        iDummyCutBar->Dim( ETrue );
+        iVideoDisplay->OpenFileL( aFilename );
+        }
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideoFileL(): Out");
+    }
+
+void CVeiEditVideoContainer::PlayVideo(const TDesC& /*aFilename*/, TBool& /*aFullScreen*/ )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideo In");
+    
+    if ( iVideoDisplay )
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideo(): 1");             
+
+        //  associated with, when put into background and back to foreground, play starts from different
+        // position it was paused (iSeekPos is not iLastPosition)
+        iVideoDisplay->SetPositionL( iSeekPos );
+                        
+        if ( iTempVideoInfo && !iFrameReady)
+            {           
+            iTempVideoInfo->CancelFrame();
+            }
+        iVideoDisplay->Play();      
+        }
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideo(): Out");   
+    }
+
+void CVeiEditVideoContainer::StopVideo( TBool aCloseStream )
+    { 
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::StopVideo: In, aCloseStream:%d", aCloseStream);
+    SetPreviewState(EStateStopped);    
+    if ( iPeriodic )
+        {
+        iPeriodic->Cancel();
+        }
+
+    iSeekPos = TTimeIntervalMicroSeconds( 0 );
+
+    iCloseStream = aCloseStream;
+
+    iVideoDisplay->Stop( aCloseStream ); 
+
+    iScreenLight->Stop();
+    if ( aCloseStream )
+        {
+        SetPreviewState(EStateClosed);        
+        }
+    else
+        {
+        SetFinishedStatus( ETrue );
+        }
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StopVideo: out");
+    }
+
+void CVeiEditVideoContainer::TakeSnapshotL()
+    {   
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::TakeSnapshotL: In, iFrameReady:%d", iFrameReady);
+
+    if( !iTempVideoInfo || !iFrameReady )
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::TakeSnapshotL: 1");
+        if (!iFrameReady)
+            {
+            iTakeSnapshotWaiting = ETrue;   
+            }   
+        return;
+        }
+        
+    iTakeSnapshotWaiting = EFalse;  
+    iTakeSnapshot = ETrue;
+    TTimeIntervalMicroSeconds pos = PlaybackPositionL();
+
+    TInt frameIndex;
+    TInt totalFrameCount;
+
+    frameIndex = iTempVideoInfo->GetVideoFrameIndexL( pos );
+    totalFrameCount = iTempVideoInfo->VideoFrameCount();
+
+    if ( frameIndex > totalFrameCount )
+        {
+        frameIndex = totalFrameCount;
+        }
+
+    TRect clipResolution = Rect();
+    TSize resol( clipResolution.iBr.iX, clipResolution.iBr.iY ); 
+    TDisplayMode displayMode = ENone;    
+    iFrameReady = EFalse;
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::TakeSnapshotL: 2");
+    //iTempVideoInfo->GetFrameL(*this, frameIndex, &resol, displayMode, ETrue);         
+
+    /* :
+     check out on every phone before releasing whether videodisplay should be stopped before starting
+     asynchronous GetFrameL()
+     see how EStateGettingFrame is handled in SetPreviewState 
+     Stopping frees memory and it is needed in memory sensible devices 
+    */
+    iTempVideoInfo->GetFrameL(*this, frameIndex, NULL, displayMode, ETrue);
+    SetPreviewState(EStateGettingFrame);
+
+    StartProgressDialogL(R_VEI_PROGRESS_NOTE_WITH_CANCEL, R_VEI_PROGRESS_NOTE_SAVING_IMAGE);
+
+    /*
+    if (iProgressDialog)
+        {
+        delete iProgressDialog;
+        iProgressDialog = NULL; 
+        }
+
+    iProgressDialog = 
+           new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**, 
+          &iProgressDialog), ETrue);
+    iProgressDialog->SetCallback(this);
+    iProgressDialog->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL );
+
+
+    HBufC* stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_SAVING_IMAGE, iEikonEnv );      
+    iProgressDialog->SetTextL( *stringholder );
+    CleanupStack::PopAndDestroy( stringholder );
+
+    iProgressDialog->GetProgressInfoL()->SetFinalValue(100);
+    */
+    // this is good place to start Progress Note, but for some reason this causes some phones to crash
+    // that is why progress note is started now in NotifyVideoClipFrameCompleted
+    //StartProgressDialogL(R_VEI_PROGRESS_NOTE_WITH_CANCEL, R_VEI_PROGRESS_NOTE_SAVING_IMAGE);
+            
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::TakeSnapshotL: Out");
+    }
+
+void CVeiEditVideoContainer::PauseVideoL()
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::PauseVideoL: In, iPreviewState:%d", iPreviewState);        
+
+    // if-condition added in order to prevent entering to pause state (icon is showed) from "wrong" state
+    // etc. from "stopped" state
+    if (EStatePlaying == iPreviewState)
+        {                           
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PauseVideoL 1");          
+        iLastPosition = iVideoDisplay->PositionL();
+
+        // think whether this should be here?
+        iSeekPos = iVideoDisplay->PositionL();
+        iVideoDisplay->SetPositionL(iSeekPos);
+        }
+    iVideoDisplay->PauseL();
+    SetPreviewState(EStatePaused);
+    iScreenLight->Stop();
+    if ( iPeriodic )
+        {
+        iPeriodic->Cancel();
+        }
+    iView.StopNaviPaneUpdateL();
+            
+    #ifdef GET_PAUSE_THUMBNAIL
+    GetThumbAtL( iLastPosition );
+    #endif      
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PauseVideoL out");            
+    }
+
+TTimeIntervalMicroSeconds CVeiEditVideoContainer::PlaybackPositionL()
+    {
+    if ( ( iSeeking ) || ( EStateStopped == iPreviewState) )
+        {
+        return iSeekPos;
+        }
+    if ( EStatePlaying != iPreviewState )
+        {
+        return iLastPosition;
+        }
+        
+    iLastPosition = iVideoDisplay->PositionL();
+
+    // for what situation is this for?
+    if ( ( iLastPosition == TTimeIntervalMicroSeconds( 0 ) ) &&
+         ( iSeekPos != TTimeIntervalMicroSeconds( 0 ) ) )
+        {
+        return iSeekPos;
+        }
+    // for what situation is this for?
+    return iLastPosition;
+    }
+
+
+void CVeiEditVideoContainer::SetSelectionMode( TSelectionMode aSelectionMode )
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::SetSelectionMode: In, aSelectionMode:%d", aSelectionMode);
+    iSelectionMode = aSelectionMode;
+
+    if (EModeMixingAudio == iSelectionMode)
+        {               
+        iHorizontalSlider->SetPosition(0);
+            
+        if (0 != iMovie.GetVideoClipVolumeGainL(KVedClipIndexAll))
+            {               
+            TReal gain = iMovie.GetVideoClipVolumeGainL(KVedClipIndexAll);///(KVolumeMaxGain/10);
+            gain = gain/(KVolumeMaxGain/10);
+            if (0 < gain)
+                {
+                gain += 0.5;
+                }
+            else
+                {
+                gain -= 0.5;
+                }                   
+            iHorizontalSlider->SetPosition( (TInt)(-gain) ); // see impl. of CSliderBar
+            }           
+                        
+        else if(0 != iMovie.GetAudioClipVolumeGainL(KVedClipIndexAll))
+            {           
+            TReal gain = iMovie.GetAudioClipVolumeGainL(KVedClipIndexAll);///(KVolumeMaxGain/10);
+            gain = gain/(KVolumeMaxGain/10);
+            if (0 < gain)
+                {
+                gain += 0.5;
+                }
+            else
+                {
+                gain -= 0.5;
+                }           
+            iHorizontalSlider->SetPosition( (TInt)gain );
+            }           
+                 
+        iHorizontalSlider->MakeVisible(ETrue);
+        iVerticalSlider->MakeVisible(EFalse);       
+        iVideoDisplay->ShowPictureL( *iAudioMixingIcon );
+        iInfoDisplay->MakeVisible(EFalse);
+
+
+        iVideoDisplay->StopAnimation();
+        if ( iCursorLocation == ECursorOnTransition )
+            {        
+            iTransitionDisplayLeft->MakeVisible( EFalse );
+            iTransitionDisplayRight->MakeVisible( EFalse );
+            iArrowsDisplay->SetUpperArrowVisibility( EFalse );
+            iArrowsDisplay->SetLowerArrowVisibility( EFalse );
+            iDummyCutBar->SetRect( iDummyCutBarBox );
+            }
+
+
+        }
+    else if (EModeAdjustVolume == iSelectionMode)
+        {       
+        
+        iVerticalSlider->SetPosition(0);
+        
+        if (VideoEditor::ECursorOnClip == CursorLocation())
+            {                                       
+            if (0 != iMovie.GetVideoClipVolumeGainL(CurrentIndex()))
+                {   
+                TReal adjustVolume = iMovie.GetVideoClipVolumeGainL(CurrentIndex());///(KVolumeMaxGain/10);
+                adjustVolume = adjustVolume/(KVolumeMaxGain/10);                                                
+                
+                if (0 < adjustVolume)
+                    {
+                    adjustVolume += 0.5;
+                    }
+                else if (0 > adjustVolume)
+                    {
+                    adjustVolume -= 0.5;
+                    }                   
+                iVerticalSlider->SetPosition(-adjustVolume); // see impl. of CSliderBar             
+                }                               
+            }
+        else if (VideoEditor::ECursorOnAudio == CursorLocation())
+            {                   
+            if (0 != iMovie.GetAudioClipVolumeGainL(CurrentIndex()))
+                {                                   
+                TReal adjustVolume = iMovie.GetAudioClipVolumeGainL(CurrentIndex());///(KVolumeMaxGain/10);
+                adjustVolume = adjustVolume/(KVolumeMaxGain/10);                                        
+                
+                if (0 < adjustVolume)
+                    {
+                    adjustVolume += 0.5;
+                    }
+                else if (0 > adjustVolume)
+                    {
+                    adjustVolume -= 0.5;
+                    }           
+                iVerticalSlider->SetPosition(-adjustVolume);                
+                }                           
+            }
+                
+        iHorizontalSlider->MakeVisible(EFalse);
+        iVerticalSlider->MakeVisible(ETrue);
+        }
+    else
+        {
+        iHorizontalSlider->MakeVisible(EFalse);
+        iVerticalSlider->MakeVisible(EFalse);
+        }
+
+    if ( iSelectionMode == EModeSlowMotion )
+        {
+        ArrowsControl();
+        }
+        
+    else 
+        {
+        iInfoDisplay->SetSlowMotionOn( EFalse );
+        switch(iSelectionMode)
+            {
+            case EModeRecordingSetStart:
+                iEffectSymbols->MakeVisible( ETrue );
+                iEffectSymbols->SetPauseAudioIconVisibility( EFalse );
+                iEffectSymbols->SetRecAudioIconVisibility( EFalse );
+                break;
+            case EModeRecordingPaused:
+                iEffectSymbols->MakeVisible( ETrue );
+                iInfoDisplay->SetLayout( CVeiTextDisplay::ERecordingPaused );
+                iEffectSymbols->SetRecAudioIconVisibility( EFalse );
+                iEffectSymbols->SetPauseAudioIconVisibility( ETrue );   
+                iEffectSymbols->DrawNow();
+                break;
+            case EModeRecording:
+                iEffectSymbols->MakeVisible( ETrue );
+                iEffectSymbols->SetPauseAudioIconVisibility( EFalse );
+                iEffectSymbols->SetRecAudioIconVisibility( ETrue );
+                break;
+            default:
+                iEffectSymbols->SetPauseAudioIconVisibility( EFalse );
+                iEffectSymbols->SetRecAudioIconVisibility( EFalse );
+                if ( !iFullScreenSelected )
+                {
+                if ( VideoEditorUtils::IsLandscapeScreenOrientation() ) //Landscape     
+                    {
+                    iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything );
+                    }
+                else
+                    {
+                    iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration );
+                    }
+                }
+                break;
+            }
+        }
+
+    DrawDeferred();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::SetSelectionMode: Out");
+    }
+
+TTypeUid::Ptr CVeiEditVideoContainer::MopSupplyObject( TTypeUid aId )
+    {
+    if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext )
+        {
+        return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+        }
+    return CCoeControl::MopSupplyObject( aId );
+    }
+// ---------------------------------------------------------
+// CVeiEditVideoContainer::Draw(const TRect& aRect) const
+// ---------------------------------------------------------
+//
+void CVeiEditVideoContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::Draw() In, iPreviewState:%d", iPreviewState);
+    CWindowGc& gc = SystemGc();
+
+    if(iBlackScreen)
+        {
+        gc.Clear( Rect() );
+        gc.SetPenStyle( CWindowGc::ESolidPen );
+        gc.SetBrushColor( KRgbBlack );
+        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+        gc.DrawRect( Rect() );
+        gc.SetPenStyle( CWindowGc::ESolidPen ); 
+        gc.DrawRoundRect( Rect(), TSize(4,4));
+        }
+    else
+        {
+        // Draw skin background
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+        MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
+        AknsDrawUtils::Background( skin, cc, this, gc, Rect() );            
+
+        if ( EStatePaused == iPreviewState  )
+            {               
+            gc.BitBltMasked( iPauseIconBox.iTl, iPauseBitmap, 
+                TRect( TPoint(0,0), iPauseBitmap->SizeInPixels() ), 
+                iPauseBitmapMask, EFalse );
+            }
+
+        if (EModeMixingAudio == iSelectionMode && CVeiEditVideoView::EMixAudio != iView.EditorState())
+            {
+            iHorizontalSlider->MakeVisible(EFalse);
+            }
+        else if (EModeMixingAudio == iSelectionMode && CVeiEditVideoView::EMixAudio == iView.EditorState())
+            {
+            iHorizontalSlider->MakeVisible(ETrue);
+            TPoint mixAudioVideoIconPoint(iHorizontalSliderPoint.iX, iHorizontalSliderPoint.iY + 20);   
+            TRect videoTrackIconSourceRect(0, 0, iVideoTrackIcon->SizeInPixels().iWidth, 
+                iVideoTrackIcon->SizeInPixels().iHeight);
+            gc.BitBltMasked( mixAudioVideoIconPoint, iVideoTrackIcon, videoTrackIconSourceRect,
+                iVideoTrackIconMask, EFalse);
+
+            TPoint mixAudioAudioIconPoint(iHorizontalSliderPoint.iX + 
+                iHorizontalSliderSize.iWidth - 15, iHorizontalSliderPoint.iY + 20);
+            TRect audioTrackIconSourceRect(0, 0, iAudioTrackIcon->SizeInPixels().iWidth, 
+                iAudioTrackIcon->SizeInPixels().iHeight);
+            gc.BitBltMasked(mixAudioAudioIconPoint, iAudioTrackIcon, audioTrackIconSourceRect,
+                iAudioTrackIconMask, EFalse);
+
+            return;
+            }
+
+        else if (EModeAdjustVolume == iSelectionMode && CVeiEditVideoView::EAdjustVolume != iView.EditorState())
+            {
+            iVerticalSlider->MakeVisible(EFalse);
+            }
+        else if (EModeAdjustVolume == iSelectionMode && CVeiEditVideoView::EAdjustVolume && iView.EditorState())
+            {
+            iVerticalSlider->MakeVisible(ETrue);
+            TPoint pluspoint(iVerticalSliderPoint.iX - 12, iVerticalSliderPoint.iY + 20); 
+            TPoint minuspoint(iVerticalSliderPoint.iX - 12, iVerticalSliderPoint.iY + iVerticalSliderSize.iHeight);
+            _LIT(KPlus, "+");
+            _LIT(KMinus, "-");
+
+            const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont );
+            gc.UseFont( font );
+
+            // Get text color from skin
+            TRgb textColor( KRgbBlack );
+            MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
+            AknsUtils::GetCachedColor(skinInstance, textColor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 );
+            gc.SetPenColor( textColor );
+
+            gc.DrawText( KPlus, pluspoint );
+            gc.DrawText( KMinus, minuspoint );
+
+            gc.DiscardFont();
+
+            return;
+            }
+
+        /* Initialize icon & text areas. */
+
+        CFbsBitmap* thumbnail = 0;
+
+        TInt i;
+
+        TSize roundEdgeSize(2,2);
+
+        /* Draw bar area. */
+
+        TRgb rgbUnselectedBorder = TRgb( 132,132,132 );
+
+        TRgb rgbUnselectedTrackFill = TRgb(221,221,221);
+        TRgb rgbUnselectedTrackBorder = TRgb( 201,201,201 );
+        TRgb rgbUnselectedTrackBorderOuterRect = TRgb( 162,162,162 );
+
+        TRgb rgbUnselectedAudioMarker = KRgbWhite;
+
+        TRgb rgbUnselectedClip = TRgb( 140,166,198 );
+
+        TRgb rgbUnselectedTransition = KRgbWhite;
+        TRgb rgbSelectedBorder = TRgb( 94,97,101 );
+        TRgb rgbSelectedAudioMarker = KRgbBlack;
+        TRgb rgbSelectedClip = TRgb( 108,139,182 );
+        TRgb rgbSelectedTransition = TRgb( 0x00, 0x9b, 0xff );
+        TRgb rgbActiveBorder = KRgbRed;
+        TRgb rgbActiveAudioMarker = KRgbRed;
+        TRgb rgbActiveClip = TRgb( 140,166,198 );
+        
+        TRect videoTrackIconSourceRect(0, 0, iVideoTrackIcon->SizeInPixels().iWidth, 
+                iVideoTrackIcon->SizeInPixels().iHeight);
+
+        gc.BitBltMasked( iVideoBarIconPos, iVideoTrackIcon, videoTrackIconSourceRect,
+            iVideoTrackIconMask, EFalse);
+
+        TRect audioTrackIconSourceRect(0, 0, iAudioTrackIcon->SizeInPixels().iWidth, 
+            iAudioTrackIcon->SizeInPixels().iHeight);
+        gc.BitBltMasked(iAudioBarIconPos, iAudioTrackIcon, audioTrackIconSourceRect,
+            iAudioTrackIconMask, EFalse);
+
+        gc.SetPenStyle( CGraphicsContext::ESolidPen );
+        gc.SetPenColor( rgbUnselectedTrackBorderOuterRect );
+        gc.SetBrushColor( rgbUnselectedTrackFill );
+        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+
+        if ( ( iMovie.VideoClipCount() == 0 ) && ( iCursorLocation != ECursorOnAudio ) &&
+             ( iCursorLocation != ECursorOnEmptyAudioTrack )  || 
+                ( iCursorLocation == ECursorOnEmptyVideoTrack ) )
+            {
+            gc.SetPenColor(rgbSelectedBorder);
+            gc.SetBrushColor( TRgb( 180,206,238 ) );
+            }
+
+        gc.DrawRoundRect(iVideoTrackBox, TSize(2,2));
+        gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+        gc.SetPenColor(rgbUnselectedTrackBorder);
+        TRect outerRect(iVideoTrackBox);
+        outerRect.Shrink(1,1);
+        gc.DrawRoundRect(outerRect, TSize(2,2) );
+
+
+        gc.SetPenColor( rgbUnselectedTrackBorderOuterRect );
+        gc.SetBrushColor( rgbUnselectedTrackFill );
+        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+
+        if (((iMovie.AudioClipCount() == 0) && (iCursorLocation == ECursorOnAudio) )|| 
+                ( iCursorLocation == ECursorOnEmptyAudioTrack ) )
+            {
+            gc.SetPenColor(rgbSelectedBorder);
+            gc.SetBrushColor( TRgb( 180,206,238 ) );
+            }
+
+        gc.DrawRoundRect(iAudioTrackBox, TSize(2,2));
+
+        gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+        gc.SetPenColor(rgbUnselectedTrackBorder);
+        outerRect = iAudioTrackBox;
+        outerRect.Shrink(1,1);
+        gc.DrawRoundRect(outerRect, TSize(2,2) );
+
+        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+
+        TInt64 barDuration = iMovie.Duration().Int64();
+        TInt64 audioDuration(0);
+        if ( (iMovie.AudioClipCount() != 0) && ((iSelectionMode == EModeRecording ) ||
+            (iSelectionMode == EModeRecordingPaused)))
+            {
+            audioDuration = (iMovie.AudioClipEndTime( iMovie.AudioClipCount() - 1 )).Int64();
+            }
+
+        audioDuration+= iRecordedAudioDuration.Int64();
+
+        if ( audioDuration > barDuration )
+            {
+            barDuration = audioDuration;
+            }
+
+        if ( iRecordedAudioStartTime > barDuration )
+            {
+            barDuration = iRecordedAudioStartTime.Int64();
+            }
+        if (barDuration < 30000000)
+            {
+            barDuration = 30000000;
+            }
+        else if (barDuration < 45000000)
+            {
+            barDuration = 45000000;
+            }
+        else{
+            barDuration = ((barDuration / 30000000) + 1) * 30000000;
+            }
+        
+        TBool drawSelectedRect = EFalse;
+        TInt selectedAudioClipIndex( -1 );
+        TRect selectedRect;
+
+        gc.SetPenColor(rgbUnselectedBorder);
+        gc.SetBrushColor(rgbUnselectedClip);
+
+        TRect audioBoxes  = TRect();
+       
+        TRect box;
+        box.iTl.iY = iAudioBarBox.iTl.iY;
+        box.iBr.iY = iAudioBarBox.iBr.iY;
+        TInt barWidth = iAudioBarBox.Width();
+        TInt videoIndex = 0;
+
+        for (i = 0; i < iMovie.AudioClipCount(); i++)
+            {
+            box.iTl.iX = iAudioBarBox.iTl.iX
+                + static_cast<TInt32>((iMovie.AudioClipStartTime(i).Int64() * barWidth) / 
+                barDuration);
+            box.iBr.iX = iAudioBarBox.iTl.iX
+                + static_cast<TInt32>((iMovie.AudioClipEndTime(i).Int64() * barWidth) / barDuration)+ 1;
+
+            if ((iCursorLocation == ECursorOnAudio)
+                && (i == CurrentIndex()) && (( iSelectionMode == EModeNavigation )
+                || ( iSelectionMode == EModeMove ) ||
+                   ( iSelectionMode == EModeDuration ) ))
+                {
+                drawSelectedRect = ETrue;
+                selectedAudioClipIndex = i;
+                selectedRect = box;
+                }
+            else
+                {
+                gc.DrawRect(box);
+
+                gc.SetPenColor(rgbUnselectedAudioMarker);
+
+                audioBoxes.Resize( box.Size() );
+               
+                if ( ( iMovie.AudioClipCutOutTime( i ).Int64() -
+                     iMovie.AudioClipCutInTime( i ).Int64() ) <
+                     iMovie.AudioClipInfo( i )->Duration().Int64() )        
+                    {
+                    TRect truncateBox;
+                    truncateBox.iTl.iY = box.iTl.iY + 2;
+                    truncateBox.iBr.iY = box.iBr.iY - 2;
+
+                    truncateBox.iTl.iX = box.iBr.iX - 4;
+                    truncateBox.iBr.iX = truncateBox.iTl.iX + 1;
+                    if (truncateBox.iTl.iX >= (box.iTl.iX + 2))
+                        {
+                        gc.DrawRect(truncateBox);
+                        }
+                
+                    truncateBox.iTl.iX = box.iBr.iX - 7;
+                    truncateBox.iBr.iX = truncateBox.iTl.iX + 1;
+                    if (truncateBox.iTl.iX >= (box.iTl.iX + 2))
+                        {
+                        gc.DrawRect(truncateBox);
+                        }
+
+                    truncateBox.iTl.iX = box.iBr.iX - 10;
+                    truncateBox.iBr.iX = truncateBox.iTl.iX + 1;
+                    if (truncateBox.iTl.iX >= (box.iTl.iX + 2))
+                        {
+                        gc.DrawRect(truncateBox);
+                        }
+                    }
+
+                gc.SetPenColor(rgbUnselectedBorder);
+                }
+
+            TTimeIntervalMicroSeconds audioClipStartTimeInt = iMovie.AudioClipStartTime(i).Int64() + iMovie.AudioClipCutInTime(i).Int64(); 
+            TTimeIntervalMicroSeconds audioClipEndTimeInt =   iMovie.AudioClipEndTime(i).Int64(); 
+
+            if ((audioClipStartTimeInt == TTimeIntervalMicroSeconds(0)) && (iMovie.VideoClipCount() > 0))
+                {
+                TRect syncBox;
+                syncBox.iTl.iX = box.iTl.iX;
+                syncBox.iTl.iY = iVideoBarBox.iBr.iY;
+                syncBox.iBr.iX = box.iTl.iX + 1;
+                syncBox.iBr.iY = iAudioBarBox.iTl.iY;
+
+                gc.DrawRect(syncBox);
+                }
+
+            while (videoIndex < iMovie.VideoClipCount())
+                {
+                TInt oldIndex = videoIndex;
+                if ( iMovie.VideoClipEndTime( oldIndex ) < audioClipStartTimeInt )
+                    {
+                    videoIndex++;
+                    }
+                else if ( iMovie.VideoClipEndTime( oldIndex ) == audioClipStartTimeInt )
+                    {
+                    TRect syncBox;
+                    syncBox.iTl.iX = box.iTl.iX;
+                    syncBox.iTl.iY = iVideoBarBox.iBr.iY;
+                    syncBox.iBr.iX = box.iTl.iX + 1;
+                    syncBox.iBr.iY = iAudioBarBox.iTl.iY;
+
+                    gc.DrawRect(syncBox);
+                    break;
+                    }
+                else
+                    {
+                    break;
+                    }
+                }
+
+            while (videoIndex < iMovie.VideoClipCount())
+                {
+                TInt oldIndex = videoIndex;
+
+                if ( iMovie.VideoClipEndTime( oldIndex ) < audioClipEndTimeInt )
+                    {
+                    videoIndex++;
+                    }
+                else if ( iMovie.VideoClipEndTime( oldIndex ) == audioClipEndTimeInt )
+                    {
+                    TRect syncBox;
+                    syncBox.iTl.iX = box.iBr.iX - 1;
+                    syncBox.iTl.iY = iVideoBarBox.iBr.iY;
+                    syncBox.iBr.iX = box.iBr.iX;
+                    syncBox.iBr.iY = iAudioBarBox.iTl.iY;
+
+                    gc.DrawRect(syncBox);
+                    break;
+                    }
+                else
+                    {
+                    break;
+                    }
+                }
+            }
+
+        if ((iSelectionMode == EModeRecordingSetStart) || (iSelectionMode == EModeRecording)
+            || (iSelectionMode == EModeRecordingPaused))
+            {
+            box.iTl.iX = iAudioBarBox.iTl.iX
+                + static_cast<TInt32>((iRecordedAudioStartTime.Int64() * barWidth) / barDuration);
+            TInt64 recordedAudioEndTimeInt = iRecordedAudioStartTime.Int64() + iRecordedAudioDuration.Int64();
+            box.iBr.iX = iAudioBarBox.iTl.iX
+                + static_cast<TInt32>((recordedAudioEndTimeInt * barWidth) / barDuration)+ 1;
+
+            gc.SetPenColor(rgbActiveBorder);
+            gc.SetBrushColor(rgbSelectedClip);
+            gc.DrawRect(box);
+            gc.SetPenColor(rgbUnselectedBorder);
+            gc.SetBrushColor(rgbUnselectedClip);
+            }
+
+        box.iTl.iY = iVideoBarBox.iTl.iY;
+        box.iBr.iY = iVideoBarBox.iBr.iY;
+        barWidth = iVideoBarBox.Width();
+        
+        TRect videoBoxes  = TRect();
+        
+        for (i = 0; i < iMovie.VideoClipCount(); i++)
+            {
+            box.iTl.iX = iVideoBarBox.iTl.iX
+                + static_cast<TInt32>((iMovie.VideoClipStartTime( i ).Int64() * barWidth) / barDuration);
+            box.iBr.iX = iVideoBarBox.iTl.iX
+                + static_cast<TInt32>((iMovie.VideoClipEndTime( i ).Int64() * barWidth) / barDuration)+ 1;
+            
+            videoBoxes.Resize( box.Size() );
+            
+            if ((iCursorLocation == ECursorOnClip)
+                && (i == CurrentIndex()) && ( iView.EditorState() == CVeiEditVideoView::EEdit ))
+                {
+                drawSelectedRect = ETrue;
+                selectedRect = box;
+                gc.DrawRect(box);
+                }
+            else
+                {
+                gc.DrawRect(box);
+                //Draw thumbnail in video box.
+                if ( i < iVideoItemArray.Count() )
+                    {
+                    thumbnail = iVideoItemArray[i]->iTimelineBitmap;
+                    }
+                if ( thumbnail )
+                    {
+                    //TSize thumbnailSizeInPixels = thumbnail->SizeInPixels();
+                    TPoint pos( box.iTl.iX+1, box.iTl.iY+1 );
+                    TSize pieceSize = TSize(STATIC_CAST(TInt, (box.Height()-2)*1.22), box.Height()-2);
+                    
+                    if ( pieceSize.iWidth >= box.Width()-2  )
+                        {
+                        pieceSize.SetSize( box.Width()-2, box.Height()-2 );
+                        }
+                    TRect pieceRect( TPoint(0,0), pieceSize );
+                    gc.BitBlt( pos, thumbnail, pieceRect ); 
+                    }
+
+             
+                //Draw play head.
+                if( iPreviewState == EStatePaused || iPreviewState == EStateStopped)
+                    {
+                    TRect bar( iBarArea );//bar rect.
+
+                    const TUint barY = 6;
+
+                    bar.iTl.iY += barY;
+                    bar.iTl.iX += barY;
+                    bar.iTl.iX += iVideoTrackIcon->SizeInPixels().iWidth;
+                    bar.iBr.iY -= barY / 2;
+                    bar.iBr.iX -= barY;
+
+                        
+                    gc.SetBrushColor( KRgbBlack );
+                    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+                    gc.SetPenColor( KRgbDarkGray );
+                    gc.SetPenStyle( CGraphicsContext::ESolidPen );
+
+                    TPoint inPointList[3];
+                    inPointList[0] = TPoint( (iCurrentPointX - barY) + 1, iBarArea.iTl.iY - 5 );
+                    inPointList[1] = TPoint( (iCurrentPointX + barY) - 1, iBarArea.iTl.iY - 5 );
+                    inPointList[2] = TPoint( iCurrentPointX, bar.iTl.iY - 6  );
+                    gc.DrawPolygon( inPointList, 3 );
+
+                    inPointList[0] = TPoint( (iCurrentPointX - barY) + 1, iBarArea.iBr.iY + 5 );
+                    inPointList[1] = TPoint( (iCurrentPointX + barY) - 1, iBarArea.iBr.iY + 5 );
+                    inPointList[2] = TPoint( iCurrentPointX, bar.iBr.iY );
+                    gc.DrawPolygon( inPointList, 3 );
+
+                    gc.SetPenSize( TSize( 3, 1 ) );
+                    gc.DrawLine( TPoint( iCurrentPointX, bar.iTl.iY - 5 ), 
+                    TPoint( iCurrentPointX, bar.iBr.iY ) );
+                    
+                    gc.SetPenColor(rgbUnselectedBorder);
+                    gc.SetBrushColor(rgbUnselectedClip);
+                    gc.SetPenSize( TSize( 1, 1 ) );
+                    }
+                }
+            }
+
+        if (drawSelectedRect)
+            {
+            selectedRect.Grow( iZoomFactorX,iZoomFactorY );
+
+
+            TRect outerBlackRect = selectedRect;
+            outerBlackRect.Grow(1,1);
+            gc.SetPenColor( KRgbBlack );
+            gc.SetPenStyle( CGraphicsContext::ESolidPen );
+            gc.DrawRoundRect( outerBlackRect, TSize(2,2) );
+
+
+            if (iSelectionMode == EModeMove )   //Move, draw dashed outline
+                {
+                gc.SetPenStyle( CGraphicsContext::EDashedPen );
+                gc.SetPenColor( KRgbBlack );
+                gc.SetBrushColor(rgbActiveClip);
+                }
+            else    
+                {
+                gc.SetPenColor(rgbSelectedBorder);
+                gc.SetBrushColor(rgbSelectedClip);
+                }
+
+            gc.DrawRoundRect( selectedRect,roundEdgeSize );
+            
+            selectedRect.Shrink(2,2);
+            gc.DrawBitmap( selectedRect, iGradientBitmap );
+
+             //Draw thumbnail in video box
+            if ( iCursorLocation == ECursorOnClip )
+                {
+                selectedRect.Grow(2,2);
+                
+                thumbnail = iVideoItemArray[CurrentIndex()]->iTimelineBitmap;
+                if ( thumbnail )
+                    {
+                    TPoint pos( selectedRect.iTl.iX+1, selectedRect.iTl.iY+1 );
+                    TSize pieceSize = TSize(STATIC_CAST(TInt, (selectedRect.Height()-2)*1.22), 
+                        selectedRect.Height()-2);
+
+                    if ( pieceSize.iWidth >= selectedRect.Width()-2 )
+                        {
+                        pieceSize.SetSize( selectedRect.Width()-2, selectedRect.Height()-2 );
+                        }
+                    TRect pieceRect( TPoint(0,0), pieceSize );
+                    gc.BitBlt( pos, thumbnail, pieceRect ); 
+                    }
+                }
+            drawSelectedRect = EFalse;
+
+            if (iSelectionMode == EModeNavigation)
+                {
+                gc.SetPenColor(rgbSelectedAudioMarker);
+                }
+            else
+                {
+                gc.SetPenColor(rgbActiveAudioMarker);
+                }
+
+            if ((selectedAudioClipIndex != -1) && 
+                 ( ( iMovie.AudioClipCutOutTime( selectedAudioClipIndex ).Int64() -
+                     iMovie.AudioClipCutInTime( selectedAudioClipIndex ).Int64() ) <
+                     iMovie.AudioClipInfo( selectedAudioClipIndex )->Duration().Int64() ) )
+                {
+                TRect truncateBox;
+                truncateBox.iTl.iY = selectedRect.iTl.iY + 2;
+                truncateBox.iBr.iY = selectedRect.iBr.iY - 2;
+
+                truncateBox.iTl.iX = selectedRect.iBr.iX - 4;
+                truncateBox.iBr.iX = truncateBox.iTl.iX + 1;
+                if (truncateBox.iTl.iX >= (selectedRect.iTl.iX + 2))
+                    {
+                    gc.DrawRect(truncateBox);
+                    }
+            
+                truncateBox.iTl.iX = selectedRect.iBr.iX - 7;
+                truncateBox.iBr.iX = truncateBox.iTl.iX + 1;
+                if (truncateBox.iTl.iX >= (selectedRect.iTl.iX + 2))
+                    {
+                    gc.DrawRect(truncateBox);
+                    }
+
+                truncateBox.iTl.iX = selectedRect.iBr.iX - 10;
+                truncateBox.iBr.iX = truncateBox.iTl.iX + 1;
+                if (truncateBox.iTl.iX >= (selectedRect.iTl.iX + 2))
+                    {
+                    gc.DrawRect(truncateBox);
+                    }
+                }
+            }
+
+        gc.SetPenStyle(CGraphicsContext::ESolidPen);
+        gc.SetPenColor(rgbUnselectedBorder);
+        gc.SetBrushColor(rgbUnselectedTransition);
+
+        box.iTl.iY += (box.Height() - iTransitionMarkerSize.iHeight) / 2; 
+        box.iBr.iY = box.iTl.iY + iTransitionMarkerSize.iHeight;
+        for (i = iMovie.VideoClipCount(); (i >= 0) && (iMovie.VideoClipCount() > 0); i--)
+            {
+            if ((i == 0) && (iMovie.VideoClipCount() > 0))
+                {
+                box.iTl.iX = iVideoBarBox.iTl.iX
+                    - (iTransitionMarkerSize.iWidth / 2);
+                }
+            else
+                {
+                box.iTl.iX = iVideoBarBox.iTl.iX
+                    + static_cast<TInt32>((iMovie.VideoClipEndTime( i-1 ).Int64() * barWidth) / barDuration)
+                    - (iTransitionMarkerSize.iWidth / 2);
+                }
+
+            box.iBr.iX = box.iTl.iX + iTransitionMarkerSize.iWidth;
+
+            if ((iCursorLocation == ECursorOnTransition) && (i == CurrentIndex() ) ) 
+                {
+                drawSelectedRect = ETrue;
+                selectedRect = box;
+                }
+            else
+                {
+                if ( (iCursorLocation == ECursorOnClip) && (i == CurrentIndex() ) &&( iSelectionMode != EModePreview ) )
+                    {
+                    box.Move( -iZoomFactorX,0);
+                    box.Grow(0,iZoomFactorX/2);
+                    gc.DrawRect(box);
+                    box.Shrink(0,iZoomFactorX/2);
+                    box.Move( iZoomFactorX,0 );
+                    }
+                else if ( (iCursorLocation == ECursorOnClip) && (i == CurrentIndex()+1 ) && ( iSelectionMode != EModePreview ) )
+                    {
+                    box.Move( iZoomFactorX,0 );
+                    box.Grow(0,iZoomFactorX/2);
+                    gc.DrawRect(box);
+                    box.Shrink(0,iZoomFactorX/2);
+                    box.Move( -iZoomFactorX,0 );
+                    }
+                else
+                    {
+                    gc.DrawRect(box);
+                    }
+                }
+            }
+
+        if (drawSelectedRect)
+            {
+            selectedRect.Grow(1,iZoomFactorX/2);
+            gc.SetPenColor(rgbSelectedBorder);
+            gc.SetBrushColor(rgbSelectedTransition);
+            gc.DrawRect(selectedRect);
+            }
+            
+        // draw the new position for the clip when a clip is dragged with touch
+        if ( iIsVideoDrag ) 
+            {    
+            TRgb rgbSelectedBorder = KRgbDarkMagenta;
+            TRgb rgbSelectedTransition = KRgbDarkMagenta;
+            gc.SetPenColor( rgbSelectedBorder );
+            gc.SetBrushColor( rgbSelectedTransition );
+            
+            box.iTl.iY = iVideoBarBox.iTl.iY;
+            box.iBr.iY = iVideoBarBox.iBr.iY;
+
+            // clip is moved from right to left
+            if ( iClickedClip > iNewClipPosition )
+                {
+                if ( iNewClipPosition == 0 )
+                    {
+                    box.iTl.iX = iVideoItemRectArray[ iNewClipPosition ].iTl.iX;
+                    box.iBr.iX = iVideoItemRectArray[ iNewClipPosition ].iTl.iX + 5;                        
+                    }
+                else
+                    {
+                    box.iTl.iX = iVideoItemRectArray[ iNewClipPosition ].iTl.iX - 5;
+                    box.iBr.iX = iVideoItemRectArray[ iNewClipPosition ].iTl.iX + 5;                        
+                    }
+                gc.DrawRect( box );
+                }
+            // clip is moved from left to right
+            else if ( iClickedClip < iNewClipPosition )
+                {
+                box.iTl.iX = iVideoItemRectArray[ iNewClipPosition ].iBr.iX - 5;
+                box.iBr.iX = iVideoItemRectArray[ iNewClipPosition ].iBr.iX + 5;                
+                gc.DrawRect( box );
+                }
+            }            
+        }//else 
+    }
+
+void CVeiEditVideoContainer::HandleResourceChange(TInt aType)
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleResourceChange() In, aType:%d", aType);
+    
+    if (KAknsMessageSkinChange == aType)
+        {
+        HandleComponentControlsResourceChange(aType);
+        }
+    CCoeControl::HandleResourceChange(aType);
+    
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleResourceChange() Out");
+    }
+
+void CVeiEditVideoContainer::DrawTrackBoxes() const
+    {
+    if(!iBlackScreen)
+        {
+        TRect drawableRect = iBarArea;
+        drawableRect.iTl.iX = (iVideoTrackBox.iTl.iX - KMaxZoomFactorX) - 2;
+        drawableRect.iBr.iX = (iVideoTrackBox.iBr.iX + KMaxZoomFactorX) + 2;
+        drawableRect.iTl.iY = (iVideoTrackBox.iTl.iY - KMaxZoomFactorY) - 2;
+        drawableRect.iBr.iY = (iAudioTrackBox.iBr.iY + KMaxZoomFactorY) + 2;
+
+        Window().Invalidate( drawableRect );
+        ActivateGc();
+    //Redraw of the window's invalid region.
+        Window().BeginRedraw( drawableRect );
+        Draw( drawableRect );
+
+        Window().EndRedraw();
+        DeactivateGc();
+        }
+    }
+
+
+
+
+// ----------------------------------------------------------------------------
+// CVeiEditVideoContainer::GetHelpContext(...) const
+//
+// Gets the control's help context. Associates the control with a particular
+// Help file and topic in a context sensitive application.
+// ----------------------------------------------------------------------------
+//
+void CVeiEditVideoContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetHelpContext(): In");
+
+    // Set UID of the CS Help file (same as application UID).
+    aContext.iMajor = KUidVideoEditor;
+
+    // Set the context/topic.
+    aContext.iContext = KVED_HLP_EDIT_VIDEO_VIEW;
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetHelpContext(): Out");
+    }
+
+
+void CVeiEditVideoContainer::ArrowsControl() const
+    {           
+    
+    iInfoDisplay->SetLayout( CVeiTextDisplay::EOnlyName );
+    iInfoDisplay->SetUpperArrowVisibility( EFalse );
+    iInfoDisplay->SetLowerArrowVisibility( EFalse );
+    iInfoDisplay->SetRightArrowVisibility( EFalse );
+    iInfoDisplay->SetLeftArrowVisibility( EFalse );
+ 
+    iArrowsDisplay->MakeVisible( EFalse );
+    iArrowsDisplay->SetUpperArrowVisibility( EFalse );
+    iArrowsDisplay->SetLowerArrowVisibility( EFalse );
+    iArrowsDisplay->SetRightArrowVisibility( EFalse );
+    iArrowsDisplay->SetLeftArrowVisibility( EFalse );
+    
+    iInfoDisplay->SetSlowMotionOn( EFalse );
+
+    iDummyCutBar->MakeVisible( ETrue );
+
+    if ( iCursorLocation == ECursorOnClip)
+        {
+        iInfoDisplay->MakeVisible( ETrue );
+        iInfoDisplay->SetRect( iInfoDisplayBox );
+
+        if( VideoEditorUtils::IsLandscapeScreenOrientation() )
+            {
+            iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything );
+            }
+        else
+            {
+            iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration );
+            }
+
+        if (iSelectionMode == EModeSlowMotion)
+            {
+            iArrowsDisplay->MakeVisible( ETrue );
+
+            if( !VideoEditorUtils::IsLandscapeScreenOrientation() )
+                {
+                iInfoDisplay->MakeVisible( EFalse );
+                }
+
+            iArrowsDisplay->SetSlowMotionOn( ETrue );
+            iArrowsDisplay->SetLayout( CVeiTextDisplay::EArrowsHorizontal );
+
+            iDummyCutBar->MakeVisible( EFalse );
+            
+            if ( iSlowMotionValue < 1000  )
+                {
+                iArrowsDisplay->SetRightArrowVisibility( ETrue );
+                }
+            if ( iSlowMotionValue > 250  ) 
+                {
+                iArrowsDisplay->SetLeftArrowVisibility( ETrue );
+                }
+                iArrowsDisplay->SetRect( iSlowMotionBox );
+            }       
+        else
+            {
+            iVideoDisplay->StopAnimation();
+            }
+        }
+    else if ( iCursorLocation == ECursorOnAudio )
+        {
+        iInfoDisplay->MakeVisible( ETrue );
+        iInfoDisplay->SetRect( iInfoDisplayBox );
+
+        if( VideoEditorUtils::IsLandscapeScreenOrientation() )
+            {
+            iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything );
+            }
+        else
+            {
+            iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration );
+            }
+
+        }
+     else if ( iCursorLocation == ECursorOnTransition )
+        {            
+        iDummyCutBar->MakeVisible( ETrue );
+        iInfoDisplay->MakeVisible( ETrue );
+
+        iInfoDisplay->SetUpperArrowVisibility( ETrue );
+        iInfoDisplay->SetLowerArrowVisibility( ETrue );
+        iInfoDisplay->SetLayout( CVeiTextDisplay::EArrowsVertical );
+        iInfoDisplay->SetRect( iTransitionArrowsBox );      
+        }
+    if ( iView.EditorState() == CVeiEditVideoView::EMixAudio || 
+            iView.EditorState() == CVeiEditVideoView::EAdjustVolume)
+        {               
+        iDummyCutBar->MakeVisible( EFalse );
+        }                   
+    
+    if ( iView.EditorState() == CVeiEditVideoView::EMixAudio)
+        {
+        iInfoDisplay->MakeVisible(EFalse);          
+        }       
+    if ( iView.EditorState() == CVeiEditVideoView::EAdjustVolume)
+        {
+        iInfoDisplay->MakeVisible(ETrue);           
+        }       
+    }
+
+void CVeiEditVideoContainer::DrawPlayHead()
+    {
+    CFbsBitmap* thumbnail = 0;
+    TRect redrawArea = TRect(iVideoBarIconPos.iX+iVideoTrackIcon->SizeInPixels().iWidth, 
+        iBarArea.iTl.iY - 5, iBarArea.iBr.iX, iBarArea.iBr.iY + 10 );
+    
+    Window().Invalidate( redrawArea );
+    ActivateGc();
+    //Redraw of the window's invalid region.
+    Window().BeginRedraw( redrawArea );
+    CWindowGc& gc = SystemGc();
+    
+    // Draw skin background
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
+    AknsDrawUtils::Background( skin, cc, this, gc, Rect() );
+
+    /* Draw bar area. */
+    TInt i;
+    TRgb rgbUnselectedBorder = TRgb( 132,132,132 );
+    TRgb rgbUnselectedTrackFill = TRgb(221,221,221);
+    TRgb rgbUnselectedTrackBorder = TRgb( 201,201,201 );
+    TRgb rgbUnselectedTrackBorderOuterRect = TRgb( 162,162,162 );
+
+    TRgb rgbUnselectedAudioMarker = KRgbWhite;
+    TRgb rgbUnselectedClip = TRgb( 140,166,198 );
+    TRgb rgbUnselectedTransition = KRgbWhite;
+    
+    gc.SetPenStyle( CGraphicsContext::ESolidPen );
+    gc.SetPenColor( rgbUnselectedTrackBorderOuterRect );
+    gc.SetBrushColor( rgbUnselectedTrackFill );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    gc.DrawRoundRect(iVideoTrackBox, TSize(2,2));
+
+    gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+    gc.SetPenColor( rgbUnselectedTrackBorder );
+    TRect outerRect( iVideoTrackBox );
+    outerRect.Shrink(1,1);
+    gc.DrawRoundRect(outerRect, TSize(2,2) );
+
+    gc.SetPenColor( rgbUnselectedTrackBorderOuterRect );
+    gc.SetBrushColor( rgbUnselectedTrackFill );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    gc.DrawRoundRect(iAudioTrackBox, TSize(2,2));
+
+    gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+    gc.SetPenColor(rgbUnselectedTrackBorder);
+    outerRect = iAudioTrackBox;
+    outerRect.Shrink(1,1);
+    gc.DrawRoundRect(outerRect, TSize(2,2) );
+
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+
+    TInt64 barDuration = iMovie.Duration().Int64();
+    TInt64 audioDuration(0);
+    if ( (iMovie.AudioClipCount() != 0) && (iSelectionMode == EModeRecording ))
+        {
+        audioDuration = (iMovie.AudioClipEndTime( iMovie.AudioClipCount() - 1 )).Int64();
+        }
+
+    audioDuration+= iRecordedAudioDuration.Int64();
+
+    if ( audioDuration > barDuration )
+        {
+        barDuration = audioDuration;
+        }
+
+    if ( iRecordedAudioStartTime > barDuration )
+        {
+        barDuration = iRecordedAudioStartTime.Int64();
+        }
+    if (barDuration < 30000000)
+        {
+        barDuration = 30000000;
+        }
+    else if (barDuration < 45000000)
+        {
+        barDuration = 45000000;
+        }
+    else{
+        barDuration = ((barDuration / 30000000) + 1) * 30000000;
+        }
+
+    gc.SetPenColor(rgbUnselectedBorder);
+    gc.SetBrushColor(rgbUnselectedClip);
+
+    TRect audioBoxes  = TRect(0,0,0,0);
+    
+    TRect box;
+    box.iTl.iY = iAudioBarBox.iTl.iY;
+    box.iBr.iY = iAudioBarBox.iBr.iY;
+    TInt barWidth = iAudioBarBox.Width();
+    TInt videoIndex = 0;
+
+    for (i = 0; i < iMovie.AudioClipCount(); i++)
+        {
+        box.iTl.iX = iAudioBarBox.iTl.iX
+            + static_cast<TInt32>((iMovie.AudioClipStartTime(i).Int64() * barWidth) / 
+            barDuration);
+        box.iBr.iX = iAudioBarBox.iTl.iX
+            + static_cast<TInt32>((iMovie.AudioClipEndTime(i).Int64() * barWidth) / barDuration)+ 1;
+
+            {
+            gc.DrawRect(box);
+
+            gc.SetPenColor(rgbUnselectedAudioMarker);
+            
+            audioBoxes = box;
+            
+            gc.SetPenColor(rgbUnselectedAudioMarker);
+
+            if ( ( iMovie.AudioClipCutOutTime( i ).Int64() -
+                 iMovie.AudioClipCutInTime( i ).Int64() ) <
+                 iMovie.AudioClipInfo( i )->Duration().Int64() )        
+                {
+                TRect truncateBox;
+                truncateBox.iTl.iY = box.iTl.iY + 2;
+                truncateBox.iBr.iY = box.iBr.iY - 2;
+
+                truncateBox.iTl.iX = box.iBr.iX - 4;
+                truncateBox.iBr.iX = truncateBox.iTl.iX + 1;
+                if (truncateBox.iTl.iX >= (box.iTl.iX + 2))
+                    {
+                    gc.DrawRect(truncateBox);
+                    }
+            
+                truncateBox.iTl.iX = box.iBr.iX - 7;
+                truncateBox.iBr.iX = truncateBox.iTl.iX + 1;
+                if (truncateBox.iTl.iX >= (box.iTl.iX + 2))
+                    {
+                    gc.DrawRect(truncateBox);
+                    }
+
+                truncateBox.iTl.iX = box.iBr.iX - 10;
+                truncateBox.iBr.iX = truncateBox.iTl.iX + 1;
+                if (truncateBox.iTl.iX >= (box.iTl.iX + 2))
+                    {
+                    gc.DrawRect(truncateBox);
+                    }
+                }
+
+            gc.SetPenColor(rgbUnselectedBorder);
+            }
+
+        TTimeIntervalMicroSeconds audioClipStartTimeInt = iMovie.AudioClipStartTime(i).Int64() + iMovie.AudioClipCutInTime(i).Int64(); 
+        TTimeIntervalMicroSeconds audioClipEndTimeInt =   iMovie.AudioClipEndTime(i).Int64(); 
+
+        if ((audioClipStartTimeInt == TTimeIntervalMicroSeconds(0)) && (iMovie.VideoClipCount() > 0))
+            {
+            TRect syncBox;
+            syncBox.iTl.iX = box.iTl.iX;
+            syncBox.iTl.iY = iVideoBarBox.iBr.iY;
+            syncBox.iBr.iX = box.iTl.iX + 1;
+            syncBox.iBr.iY = iAudioBarBox.iTl.iY;
+
+            gc.DrawRect(syncBox);
+            }
+
+        while (videoIndex < iMovie.VideoClipCount())
+            {
+            TInt oldIndex = videoIndex;
+            if ( iMovie.VideoClipEndTime( oldIndex ) < audioClipStartTimeInt )
+                {
+                videoIndex++;
+                }
+            else if ( iMovie.VideoClipEndTime( oldIndex ) == audioClipStartTimeInt )
+                {
+                TRect syncBox;
+                syncBox.iTl.iX = box.iTl.iX;
+                syncBox.iTl.iY = iVideoBarBox.iBr.iY;
+                syncBox.iBr.iX = box.iTl.iX + 1;
+                syncBox.iBr.iY = iAudioBarBox.iTl.iY;
+
+                gc.DrawRect(syncBox);
+                break;
+                }
+            else
+                {
+                break;
+                }
+            }
+
+        while (videoIndex < iMovie.VideoClipCount())
+            {
+            TInt oldIndex = videoIndex;
+
+            if ( iMovie.VideoClipEndTime( oldIndex ) < audioClipEndTimeInt )
+                {
+                videoIndex++;
+                }
+            else if ( iMovie.VideoClipEndTime( oldIndex ) == audioClipEndTimeInt )
+                {
+                TRect syncBox;
+                syncBox.iTl.iX = box.iBr.iX - 1;
+                syncBox.iTl.iY = iVideoBarBox.iBr.iY;
+                syncBox.iBr.iX = box.iBr.iX;
+                syncBox.iBr.iY = iAudioBarBox.iTl.iY;
+
+                gc.DrawRect(syncBox);
+                break;
+                }
+            else
+                {
+                break;
+                }
+            }
+        }
+
+    box.iTl.iY = iVideoBarBox.iTl.iY;
+    box.iBr.iY = iVideoBarBox.iBr.iY;
+    barWidth = iVideoBarBox.Width();
+
+
+    TRect videoBoxes  = TRect();
+    
+    for (i = 0; i < iMovie.VideoClipCount(); i++)
+        {
+        box.iTl.iX = iVideoBarBox.iTl.iX
+            + static_cast<TInt32>((iMovie.VideoClipStartTime( i ).Int64() * barWidth) / barDuration);
+        box.iBr.iX = iVideoBarBox.iTl.iX
+            + static_cast<TInt32>((iMovie.VideoClipEndTime( i ).Int64() * barWidth) / barDuration) + 1;
+        
+        videoBoxes.Resize( box.Size() );
+        
+        gc.DrawRect(box);
+        //Draw thumbnail in video boxes on the timeline. 
+        thumbnail = iVideoItemArray[i]->iTimelineBitmap;
+        if ( thumbnail )
+            {
+            TPoint pos( box.iTl.iX+1, box.iTl.iY+1 );
+
+            TSize pieceSize = TSize(STATIC_CAST(TInt, (box.Height()-2)*1.22), box.Height()-2);
+            
+            if ( pieceSize.iWidth >= box.Width()-2  )
+                {
+                pieceSize.SetSize( box.Width()-2, box.Height()-2 );
+                }
+            TRect pieceRect( TPoint(0,0), pieceSize );
+            gc.BitBlt( pos, thumbnail, pieceRect );
+            }
+        }
+
+    gc.SetPenStyle(CGraphicsContext::ESolidPen);
+    gc.SetPenColor(rgbUnselectedBorder);
+    gc.SetBrushColor(rgbUnselectedTransition);
+
+    box.iTl.iY += (box.Height() - iTransitionMarkerSize.iHeight) / 2; 
+    box.iBr.iY = box.iTl.iY + iTransitionMarkerSize.iHeight;
+    for (i = iMovie.VideoClipCount(); (i >= 0) && (iMovie.VideoClipCount() > 0); i--)
+        {
+        if ((i == 0) && (iMovie.VideoClipCount() > 0))
+            {
+            box.iTl.iX = iVideoBarBox.iTl.iX
+                - (iTransitionMarkerSize.iWidth / 2);
+            }
+        else
+            {
+            box.iTl.iX = iVideoBarBox.iTl.iX
+                + static_cast<TInt32>((iMovie.VideoClipEndTime( i-1 ).Int64() * barWidth) / barDuration)
+                - (iTransitionMarkerSize.iWidth / 2);
+            }
+
+        box.iBr.iX = box.iTl.iX + iTransitionMarkerSize.iWidth;
+
+        
+        gc.DrawRect(box);
+        }
+
+    //Draw play head.
+    TRect bar( iBarArea );//bar rect.
+    const TUint barY = 6;
+    TUint width = videoBoxes.Width();
+    TInt audioTrackWidth(0);
+    if ( audioBoxes.iBr.iX > 0 )
+        {
+        audioTrackWidth = audioBoxes.iBr.iX - iAudioTrackBox.iTl.iX;
+        }
+
+    if ( videoBoxes.Width() >= audioTrackWidth )
+        {
+        width = videoBoxes.Width();
+        }
+    else
+        {
+        width = audioTrackWidth;
+        }
+    TUint totalTime = static_cast<TInt32>(iMovie.Duration().Int64() /1000);//( iVideoDisplay->TotalLengthL().Int64() / 1000 ).Low();
+
+    if ( totalTime == 0 ) 
+        {
+        totalTime = 1;
+        }
+
+    TInt currentPointX = iCurrentPoint * width / totalTime + iVideoBarBox.iTl.iX;
+    iCurrentPointX = currentPointX;
+    
+    bar.iTl.iY += barY;
+    bar.iTl.iX += barY;
+    bar.iTl.iX += iVideoTrackIcon->SizeInPixels().iWidth;
+    bar.iBr.iY -= barY / 2;
+    bar.iBr.iX -= barY;
+
+                    
+    gc.SetBrushColor( KRgbBlack );
+    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+    gc.SetPenColor( KRgbDarkGray );
+    gc.SetPenStyle( CGraphicsContext::ESolidPen );
+
+    TPoint inPointList[3];
+    inPointList[0] = TPoint( currentPointX - barY + 1, iBarArea.iTl.iY - 5 );
+    inPointList[1] = TPoint( currentPointX + barY - 1, iBarArea.iTl.iY - 5 );
+    inPointList[2] = TPoint( currentPointX, bar.iTl.iY - 6  );
+    gc.DrawPolygon( inPointList, 3 );
+
+    inPointList[0] = TPoint( currentPointX - barY + 1, iBarArea.iBr.iY + 5 );
+    inPointList[1] = TPoint( currentPointX + barY - 1, iBarArea.iBr.iY + 5 );
+    inPointList[2] = TPoint( currentPointX, bar.iBr.iY  );
+    gc.DrawPolygon( inPointList, 3 );
+
+    gc.SetPenSize( TSize( 3, 1 ) );
+    gc.DrawLine( TPoint( currentPointX, bar.iTl.iY - 5 ), 
+    TPoint( currentPointX, bar.iBr.iY ) );
+    
+    Window().EndRedraw();
+    DeactivateGc();
+    }
+
+void CVeiEditVideoContainer::DialogDismissedL( TInt aButtonId )
+    {
+    iTakeSnapshot = EFalse;     
+    if ( aButtonId == -1 )  
+        { 
+        // when pressing cancel button.
+        /*if ( iTempVideoInfo && !iFrameReady)
+            {                           
+            iTempVideoInfo->CancelFrame();          
+            }       
+            */
+        CancelSnapshotSave();
+        }       
+    }
+    
+void CVeiEditVideoContainer::CancelSnapshotSave()
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::CancelSnapshotSave: in");
+    if ( iConverter )
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::CancelSnapshotSave: 1");       
+        iConverter->Cancel();
+        iConverter->CancelEncoding(); //also close the file
+        }
+    if ( iSaveToFileName )
+        {
+        LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::CancelSnapshotSave: 2, iSaveToFileName:%S", iSaveToFileName);
+
+        RFs&    fs = iEikonEnv->FsSession(); 
+        TInt result = fs.Delete( *iSaveToFileName ); 
+        delete iSaveToFileName;
+        iSaveToFileName = NULL;
+        }
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::CancelSnapshotSave: out"); 
+    }   
+
+void CVeiEditVideoContainer::SetCurrentIndex( TInt aCurrentIndex )
+    {
+    if ( (iCursorLocation == ECursorOnAudio) ||
+        (iCursorLocation == ECursorOnEmptyAudioTrack) )
+        {
+        iAudioCursorPos = aCurrentIndex;
+        }
+    else
+        {
+        iVideoCursorPos = aCurrentIndex;
+        }
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipAdded( CVedMovie& /*aMovie*/, 
+                                                        TInt aIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipAdded: in");
+
+    CStoryboardVideoItem* item=0;
+
+    if ( iView.WaitMode() == CVeiEditVideoView::EDuplicating )
+        {
+        TTimeIntervalMicroSeconds cutInTime = iMovie.VideoClipCutInTime( aIndex - 1 );
+        TTimeIntervalMicroSeconds cutOutTime = iMovie.VideoClipCutOutTime( aIndex - 1 );
+
+        iMovie.VideoClipSetColorEffect( aIndex, iMovie.VideoClipColorEffect( aIndex - 1 ) );
+        iMovie.VideoClipSetColorTone( aIndex, iMovie.VideoClipColorTone( aIndex - 1 ) );                
+        iMovie.SetVideoClipVolumeGainL(aIndex, iMovie.GetVideoClipVolumeGainL(aIndex - 1));
+
+        iMovie.VideoClipSetSpeed( aIndex, iMovie.VideoClipSpeed( aIndex - 1 ) );
+        iMovie.VideoClipSetMuted( aIndex, iMovie.VideoClipIsMuted( aIndex - 1 ) );
+
+        TBool isFile(iMovie.VideoClipInfo( aIndex )->Class() == EVedVideoClipClassFile);
+        if ( isFile )
+            {
+            iMovie.VideoClipSetCutInTime( aIndex, cutInTime );
+            iMovie.VideoClipSetCutOutTime( aIndex, cutOutTime );
+            }
+        /* Copy bitmaps, names etc. to new storyboarditem. */
+        TRAP_IGNORE( item = CStoryboardVideoItem::NewL( 
+            *iVideoItemArray[aIndex-1]->iIconBitmap, 
+            *iVideoItemArray[aIndex-1]->iIconMask, 
+            *iVideoItemArray[aIndex-1]->iFilename, 
+            iVideoItemArray[aIndex-1]->iIsFile,
+            *iVideoItemArray[aIndex-1]->iAlbumName ) );
+        if (item)
+            {
+            item->InsertLastFrameL( *iVideoItemArray[aIndex-1]->iLastFrameBitmap,
+                *iVideoItemArray[aIndex-1]->iLastFrameMask );
+            item->InsertTimelineFrameL( *iVideoItemArray[aIndex-1]->iTimelineBitmap,
+                *iVideoItemArray[aIndex-1]->iTimelineMask );
+
+            iVideoItemArray.Insert( item, aIndex );
+            }
+
+        iVideoCursorPos = aIndex;
+        iCursorLocation = ECursorOnClip; 
+        DrawDeferred();
+        iView.SetWaitMode( CVeiEditVideoView::ENotWaiting );
+        SetCursorLocation( CursorLocation() );
+        return;
+        }
+
+    iCurrentlyProcessedIndex = aIndex;
+    TFileName fileName;
+
+    TBool isFile(iMovie.VideoClipInfo( aIndex )->Class() == EVedVideoClipClassFile);
+    if ( isFile )
+        {
+        fileName = iMovie.VideoClipInfo( aIndex )->FileName();
+        }
+    else
+        {
+        CVedVideoClipInfo* info = iMovie.VideoClipInfo( aIndex );
+
+        if (info->Class() == EVedVideoClipClassGenerated) 
+            {
+            if (info->Generator()->Uid() == KUidTitleClipGenerator) 
+                {
+                fileName = iMovie.VideoClipInfo( aIndex )->DescriptiveName();
+                }
+            else if (info->Generator()->Uid() == KUidImageClipGenerator) 
+                {
+                CVeiImageClipGenerator* generator = STATIC_CAST(CVeiImageClipGenerator*, info->Generator());
+                fileName = generator->ImageFilename();
+                }
+            }
+        }
+
+    TFileName albumName;
+    GetAlbumL( fileName, albumName );
+
+    TRAPD( error, (item = CStoryboardVideoItem::NewL( *iNoThumbnailIcon, 
+        *iNoThumbnailIconMask, fileName, isFile, albumName )) );
+
+    if ( error == KErrNone )
+        {
+        iVideoItemArray.Insert( item, iCurrentlyProcessedIndex );
+    
+        iVideoCursorPos = aIndex;
+        iCursorLocation = ECursorOnClip; 
+        iZoomFactorX = 0;
+        iZoomFactorY = 0;
+
+        TRAPD( frameError, StartFrameTakerL( aIndex ) );
+        if ( frameError )
+            {
+            iMovie.RemoveVideoClip( aIndex );
+            iView.ShowErrorNote( R_VEI_VIDEO_FAILED );
+            iView.CancelWaitDialog();
+            iView.AddNext();
+            }
+        }
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipAdded: out");
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipAddingFailed( CVedMovie& 
+                /*aMovie*/, TInt DEBUGLOG_ARG(aError) )
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipAddingFailed: In and Out, aError:%d", aError);
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipInfoReady( CVedVideoClipInfo& aInfo,
+                                                      TInt aError )
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipInfoReady: In, aError:%d", aError);
+    // video info ready, get thumbnail
+    if (KErrNone == aError)
+        {   
+        if (iTempVideoInfo)     
+            {
+            delete iTempVideoInfo;
+            iTempVideoInfo = NULL;  
+            }
+        iTempVideoInfo = &aInfo;
+        TSize thumbResolution;
+        thumbResolution = iVideoDisplay->GetScreenSize();
+        /* Check if cursor is on transition. When editvideocontainer is activated
+            and right key is pressed very fast application crashes without this check */
+
+        TInt currentIndex;
+        currentIndex = CurrentIndex();
+
+        if ( iCursorLocation == ECursorOnTransition )
+            {
+            currentIndex--;
+            }
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipInfoReady: 1");
+        //we are in preview mode.
+        if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview )
+            {
+            return;
+            }
+        
+        TTimeIntervalMicroSeconds cutInTime = iMovie.VideoClipCutInTime( currentIndex );
+        TTimeIntervalMicroSeconds cutOutTime = iMovie.VideoClipCutOutTime( currentIndex );
+
+        TInt firstThumbNailIndex = iTempVideoInfo->GetVideoFrameIndexL( cutInTime );    
+    //  TInt lastThumbNailIndex = aInfo.GetVideoFrameIndexL( cutOutTime );    
+    //  lastThumbNailIndex--;   
+
+        TDisplayMode thumbnailDisplayMode( ENone ); 
+
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipInfoReady: 2");                        
+        /* :
+         check out on every phone before releasing whether videodisplay should be stopped before starting
+         asynchronous GetFrameL()
+         see how EStateGettingFrame is handled in SetPreviewState 
+         Stopping frees memory and it is needed in memory sensible devices 
+        */
+        TRAPD( err, iTempVideoInfo->GetFrameL( *this, firstThumbNailIndex, &thumbResolution, 
+            thumbnailDisplayMode ) );
+        if (KErrNone == err)
+            {
+            SetPreviewState(EStateGettingFrame);    
+            }       
+        LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipInfoReady: 3, err:%d", err);    
+        if ( KErrNone != err )
+            {
+            if ( iProgressDialog )
+                {
+                iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 );
+                TRAP_IGNORE( iProgressDialog->ProcessFinishedL() );
+                //iProgressDialog = NULL;
+                }
+            User::Panic( _L("VideoEditor"), 65 );
+            }
+        }
+    
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipInfoReady: Out");  
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipFrameCompleted(CVedVideoClipInfo& /*aInfo*/, 
+                                               TInt aError, 
+                                               CFbsBitmap* aFrame)
+    {
+    LOGFMT2(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipFrameCompleted: In, aError:%d, iTakeSnapshot:%d", aError, iTakeSnapshot);  
+    
+    iFrameReady = ETrue;
+        
+    if (EStateGettingFrame == iPreviewState)
+        {
+        SetPreviewState(iPreviousPreviewState); 
+        // SetEditorState is effective because iPreviewState is changed     
+        iView.SetEditorState( iView.EditorState() );
+        }       
+
+    if(KErrNone == aError && aFrame)
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipFrameCompleted: 3 calling iVideoDisplay->ShowPictureL()"); 
+        //TRAP_IGNORE(iVideoDisplay->ShowPictureL( *aFrame ));
+
+        if ( iTakeSnapshot)
+            {
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipFrameCompleted: 2");   
+
+            // For some reason some phones crash in taking snapshot if this progress note is started 
+            // earlier from TakeSnapshotL, that is why it is started now here
+            //StartProgressDialogL(R_VEI_PROGRESS_NOTE_WITH_CANCEL, R_VEI_PROGRESS_NOTE_SAVING_IMAGE);
+            iConverter->SetBitmap( aFrame );
+            SaveSnapshotL();
+            return;         
+            }
+        TRAP_IGNORE(iVideoDisplay->ShowPictureL( *aFrame ));    
+        delete aFrame;
+        aFrame = NULL;  
+        if (iProgressDialog )
+            {
+            iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 );
+            TRAP_IGNORE( iProgressDialog->ProcessFinishedL() );
+            //iProgressDialog = NULL;       
+            }
+        DrawDeferred();
+        if (iTakeSnapshotWaiting)
+            {
+            if (! iCallBack)
+                {       
+                TCallBack cb (CVeiEditVideoContainer::AsyncTakeSnapshot, this);
+                iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard);
+                }
+            iCallBack->CallBack();              
+            }
+        return;
+        }   
+    
+    if ( aFrame )
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipFrameCompleted: 4");
+        delete aFrame;
+        aFrame = NULL;  
+        }
+    
+    if (iProgressDialog )
+        {
+        iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 );
+        TRAP_IGNORE( iProgressDialog->ProcessFinishedL() );
+        //iProgressDialog = NULL;       
+        }
+    else if ( KErrNone == aError)
+        {
+        iView.HandleCommandL( EAknSoftkeyOk );
+        }
+/* In case of an error, we'll do nothing. */
+/* If clip is too short, we won't get new thumbnail, so use old one->return; */
+    if (KErrNone != aError)
+        {
+        iCurrentlyProcessedIndex = -1;
+        return;
+        }
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipFrameCompleted: Out");     
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/,
+                                                         TInt aIndex) 
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipGeneratorSettingsChanged: In");        
+    iCurrentlyProcessedIndex = aIndex;
+    StartFrameTakerL( aIndex );
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipGeneratorSettingsChanged: Out");       
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipDescriptiveNameChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/)
+    {   
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipDescriptiveNameChanged: In");      
+    TFileName fileName;
+    fileName = iMovie.VideoClipInfo( CurrentIndex() )->DescriptiveName();
+    iInfoDisplay->SetName(fileName);
+    iVideoDisplay->DrawDeferred();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipDescriptiveNameChanged: Out");     
+    }
+
+void CVeiEditVideoContainer::NotifyMovieQualityChanged(CVedMovie& /*aMovie*/)
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMovieQualityChanged: In and Out");      
+    }
+void CVeiEditVideoContainer::NotifyVideoClipRemoved( 
+                                    CVedMovie& /*aMovie*/, TInt aIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipRemoved: In");     
+    CStoryboardVideoItem* item = iVideoItemArray[ aIndex ];
+    iVideoItemArray.Remove( aIndex );
+    delete item;
+    SetCursorLocation( ECursorOnClip );
+    DrawDeferred();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipRemoved: Out");        
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipIndicesChanged( 
+                    CVedMovie& /*aMovie*/, TInt aOldIndex, TInt aNewIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipIndicesChanged: In");      
+    CStoryboardVideoItem* item = iVideoItemArray[ aOldIndex ];
+    iVideoItemArray.Remove( aOldIndex );    
+    iVideoItemArray.Insert( item, aNewIndex );
+    DrawDeferred();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipIndicesChanged: Out");     
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipTimingsChanged( 
+                                    CVedMovie& aMovie, TInt aIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipTimingsChanged: In");      
+    /* Check is slowmotion on */
+    if ( iMovie.VideoClipSpeed( iVideoCursorPos ) != 1000 )
+        {
+        iEffectSymbols->SetSlowMotionIconVisibility(ETrue);
+        }
+    else
+        {
+        // Engine sets mute automatically on if speed is set under 1000, but it does not return
+        // mute state to original if speed is reset to 1000, reclaimed to nokia
+        // problem is that we should respect user's mute settings prior to slow motion
+        // i.e. when removing slow motion mute settings should be reset to user defined value
+    //  iMovie.VideoClipSetMuted(aIndex, EFalse);
+        iEffectSymbols->SetSlowMotionIconVisibility(EFalse);
+        }
+    /* If SM is on, audio is muted */
+    if ((iMovie.VideoClipIsMuted(aIndex) != EFalse) || 
+            (iMovie.VideoClipEditedHasAudio(aIndex) == EFalse))
+        {       
+        iEffectSymbols->SetVolumeMuteIconVisibility(ETrue); 
+        }
+    else
+        {       
+        iEffectSymbols->SetVolumeMuteIconVisibility(EFalse);
+        }
+
+    TTimeIntervalMicroSeconds editedDuration = aMovie.VideoClipEditedDuration( aIndex );
+    
+    iInfoDisplay->SetDuration( editedDuration );
+
+    DrawTrackBoxes();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipTimingsChanged: Out");     
+    }
+    
+void CVeiEditVideoContainer::NotifyVideoClipColorEffectChanged( 
+                                    CVedMovie& /*aMovie*/, TInt aIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipColorEffectChanged: In");      
+
+    if ( iView.WaitMode() != CVeiEditVideoView::EDuplicating )
+        TRAP_IGNORE( UpdateThumbnailL( aIndex ) );
+
+    SetColourToningIcons(aIndex);   
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipColorEffectChanged: Out");     
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipAudioSettingsChanged( 
+                                    CVedMovie& /*aMovie*/, TInt aIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipAudioSettingsChanged: In");        
+    /* Check is Mute on */
+    if ((iMovie.VideoClipIsMuted(aIndex) != EFalse) || 
+            (iMovie.VideoClipEditedHasAudio(aIndex) == EFalse))
+        {       
+        iEffectSymbols->SetVolumeMuteIconVisibility(ETrue); 
+        }
+    else
+        {
+        iEffectSymbols->SetVolumeMuteIconVisibility(EFalse);
+        }
+    DrawDeferred();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipAudioSettingsChanged: Out");       
+    }
+
+void CVeiEditVideoContainer::NotifyStartTransitionEffectChanged( 
+                                                    CVedMovie& aMovie )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyStartTransitionEffectChanged: In");     
+    iInfoDisplay->SetName( *iTransitionInfo->StartTransitionName( aMovie.StartTransitionEffect() ) );
+        
+    ShowStartAnimationL( aMovie.StartTransitionEffect() );
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyStartTransitionEffectChanged: Out");        
+    }
+
+void CVeiEditVideoContainer::NotifyMiddleTransitionEffectChanged( 
+                                    CVedMovie& aMovie, TInt aIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMiddleTransitionEffectChanged: In");        
+    iInfoDisplay->SetName( *iTransitionInfo->MiddleTransitionName( aMovie.MiddleTransitionEffect( aIndex ) ) );
+
+    ShowMiddleAnimationL( aMovie.MiddleTransitionEffect( aIndex ) );
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMiddleTransitionEffectChanged: Out");       
+    }
+
+void CVeiEditVideoContainer::NotifyEndTransitionEffectChanged( 
+                                                    CVedMovie& aMovie )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyEndTransitionEffectChanged: In");       
+    iInfoDisplay->SetName( *iTransitionInfo->EndTransitionName( aMovie.EndTransitionEffect() ) );
+    ShowEndAnimationL( aMovie.EndTransitionEffect() );
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyEndTransitionEffectChanged: Out");      
+    }
+
+void CVeiEditVideoContainer::NotifyAudioClipAdded( 
+                                            CVedMovie& aMovie, TInt aIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipAdded: In");
+    CStoryboardAudioItem* item;
+/*  When audio clip is duplicated, check if original was recorded.
+    TMPXXXXX.XXX name is not shown on main pane if iRecordedAudio is ETrue.
+**/
+    if ( (aIndex > 0 ) && (iView.WaitMode() == CVeiEditVideoView::EDuplicating ))
+        {   
+        if ( iAudioItemArray[aIndex-1]->iRecordedAudio == 1 )
+            {
+            iRecordedAudio = ETrue; 
+            }
+        }
+    
+    if (CVeiEditVideoView::EDuplicating == iView.WaitMode())
+        {   
+        //copy adjust volume parameter from original clip (aIndex - 1)
+        TReal adjustVolume = aMovie.GetAudioClipVolumeGainL(aIndex-1);
+        aMovie.SetAudioClipVolumeGainL(aIndex, (TInt)(adjustVolume));
+        }   
+    item = CStoryboardAudioItem::NewLC( iRecordedAudio,
+                        aMovie.AudioClipInfo( aIndex )->FileName() );
+
+    iAudioCursorPos = aIndex;
+
+    iAudioItemArray.Insert( item, aIndex );
+    CleanupStack::Pop( item );
+
+    iView.SetWaitMode( CVeiEditVideoView::ENotWaiting );    
+    SetCursorLocation( ECursorOnAudio );
+    iRecordedAudio = EFalse;
+    DrawDeferred();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipAdded: Out");
+    }
+
+void CVeiEditVideoContainer::NotifyAudioClipAddingFailed( 
+                                    CVedMovie& /*aMovie*/, TInt DEBUGLOG_ARG(aError) )
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipAddingFailed: In, aError:%d", aError);
+    DrawDeferred();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipAddingFailed: Out");
+    }
+
+void CVeiEditVideoContainer::NotifyAudioClipRemoved( 
+                                    CVedMovie& /*aMovie*/, TInt aIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipRemoved: In");
+    CStoryboardAudioItem* item = iAudioItemArray[aIndex];
+    iAudioItemArray.Remove(aIndex);
+    delete item;
+    SetCursorLocation( ECursorOnAudio );
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipRemoved: Out");
+    }
+
+void CVeiEditVideoContainer::NotifyAudioClipIndicesChanged( 
+                        CVedMovie& /*aMovie*/, TInt aOldIndex, TInt aNewIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipIndicesChanged: In");
+    CStoryboardAudioItem* item = iAudioItemArray[ aOldIndex ];
+    iAudioItemArray.Remove( aOldIndex );
+    TInt err = iAudioItemArray.Insert( item, aNewIndex );
+    if ( err != KErrNone )
+        {
+        TBuf<30>buf;
+        buf.Format( _L("Audio clip moving failed (%d)."), err );
+        }
+
+    iAudioCursorPos = aNewIndex;
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipIndicesChanged: Out");
+    }
+
+void CVeiEditVideoContainer::NotifyAudioClipTimingsChanged( 
+                                CVedMovie& /*aMovie*/, TInt /*aIndex*/ )
+    {   
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipTimingsChanged: In");
+    IsAudioClipCutted();
+    DrawDeferred();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipTimingsChanged: Out");
+    }
+
+void CVeiEditVideoContainer::NotifyMovieReseted( CVedMovie& /*aMovie*/ )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMovieReseted: In");
+    iAudioItemArray.ResetAndDestroy();
+    iVideoItemArray.ResetAndDestroy();
+    iVideoCursorPos = 0;
+    iAudioCursorPos = 0;
+    iCursorLocation = ECursorOnClip;
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMovieReseted: Out");
+    }
+
+void CVeiEditVideoContainer::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/)
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMovieOutputParametersChanged: In and Out");
+    // @
+    }
+
+void CVeiEditVideoContainer::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, 
+                                                         TInt /*aClipIndex*/, 
+                                                         TInt /*aMarkIndex*/)
+    {
+    // @
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipDynamicLevelMarkInserted: In and out");
+    }
+
+void CVeiEditVideoContainer::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, 
+                                                        TInt /*aClipIndex*/, 
+                                                        TInt /*aMarkIndex*/)
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipDynamicLevelMarkRemoved: In and out");
+    // @
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/,
+                                                         TInt /*aClipIndex*/, 
+                                                         TInt /*aMarkIndex*/)
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipDynamicLevelMarkInserted: In and out");
+    // @
+    }
+
+void CVeiEditVideoContainer::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, 
+                                                        TInt /*aClipIndex*/, 
+                                                        TInt /*aMarkIndex*/)
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipDynamicLevelMarkRemoved: In and out");
+    // @
+    }
+
+void CVeiEditVideoContainer::UpdateThumbnailL( TInt aIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::UpdateThumbnailL: In");
+    /*HBufC* stringholder;
+    
+    if (iProgressNote)
+    {
+        delete iProgressNote;
+        iProgressNote = NULL;   
+    }
+    
+    iProgressNote = 
+        new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**, 
+        &iProgressNote), ETrue);
+    iProgressNote->SetCallback(this);
+    
+    if( iView.WaitMode() == CVeiEditVideoView::EProcessingMovieForCutting )
+        {
+        stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_CUTTING_VIDEO, iEikonEnv );
+        }
+    else
+        {
+        stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_COLOR_EFFECT, iEikonEnv );
+        }
+        
+    iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE );
+    iProgressNote->SetTextL( *stringholder );
+    CleanupStack::PopAndDestroy( stringholder );
+
+    iProgressNote->GetProgressInfoL()->SetFinalValue(100);
+    */
+    TInt resid; 
+    if( iView.WaitMode() == CVeiEditVideoView::EProcessingMovieForCutting )
+        {
+        resid = R_VEI_PROGRESS_NOTE_CUTTING_VIDEO;
+        }
+    else
+        {
+        resid = R_VEI_PROGRESS_NOTE_COLOR_EFFECT;
+        }
+    StartProgressDialogL(R_VEI_PROGRESS_NOTE, resid);
+
+    iCurrentlyProcessedIndex = iVideoCursorPos; 
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::UpdateThumbnailL: 2");
+    StartFrameTakerL( aIndex );
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::UpdateThumbnailL: Out");
+    }
+
+// ---------------------------------------------------------
+// CVeiEditVideoContainer::ConvertBW(CFbsBitmap& aBitmap)     
+// ---------------------------------------------------------
+//
+void CVeiEditVideoContainer::ConvertBW( CFbsBitmap& aBitmap ) const
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConvertBW: In");
+    TInt width =  aBitmap.SizeInPixels().iWidth;
+    TInt height = aBitmap.SizeInPixels().iHeight;
+
+    TBitmapUtil bitmapUtil( &aBitmap );
+    bitmapUtil.Begin( TPoint(0,0) );
+
+    for ( TInt y=0;y<height;y++ )
+        {
+        for ( TInt x=0;x<width;x++ )
+            {
+            bitmapUtil.SetPos( TPoint( x,y ) );
+
+            TUint32 colorr = ( bitmapUtil.GetPixel() );
+
+            TRgb vari = TRgb::Color64K( colorr );
+
+            TInt red = vari.Red();
+            TInt green = vari.Green();
+            TInt blue = vari.Blue();
+            
+            TUint Yy = STATIC_CAST( TUint, red*0.299 + green*0.587 + blue*0.114 );
+
+            bitmapUtil.SetPixel( TRgb(Yy,Yy,Yy).Color64K() );
+            }
+        }
+    bitmapUtil.End();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConvertBW: Out");
+    }
+
+// ---------------------------------------------------------
+// CVeiEditVideoContainer::ConvertToning(CFbsBitmap& aBitmap)     
+// ---------------------------------------------------------
+//
+void CVeiEditVideoContainer::ConvertToning( CFbsBitmap& aBitmap ) const
+    {   
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConvertToning: In");
+//  TInt ind = CurrentIndex();
+    TRgb toning = iMovie.VideoClipColorTone(CurrentIndex());
+    
+    TInt width =  aBitmap.SizeInPixels().iWidth;
+    TInt height = aBitmap.SizeInPixels().iHeight;
+
+    TBitmapUtil bitmapUtil( &aBitmap );
+    bitmapUtil.Begin( TPoint(0,0) );
+    
+    TInt R_ct = toning.Red();
+    TInt G_ct = toning.Green();         
+    TInt B_ct = toning.Blue();      
+                
+    /*
+    //vihreä
+    TInt R_ct = 185;
+    TInt G_ct = 255;            
+    TInt B_ct = 0;          
+    */
+    
+    TInt kr =   45808*R_ct - 38446*G_ct -  7362*B_ct + 32768;
+    TInt kg = - 19496*R_ct + 26952*G_ct -  3750*B_ct + 32768;
+    TInt kb = - 19608*R_ct - 38184*G_ct + 57792*B_ct + 32768;  
+
+    for ( TInt y=0;y<height;y++ )
+        {
+        for ( TInt x=0;x<width;x++ )
+            {
+            bitmapUtil.SetPos( TPoint( x,y ) );
+                                                                                
+            TUint32 colorr = ( bitmapUtil.GetPixel() );
+            TRgb vari = TRgb::Color64K( colorr );
+        
+            TInt alpha = 19668*vari.Red() + 38442*vari.Green() + 7450*vari.Blue(); 
+            TInt R_out = (alpha + kr)>>16;
+            TInt G_out = (alpha + kg)>>16;
+            TInt B_out = (alpha + kb)>>16;                          
+            
+            if(R_out<0) R_out=0;  if(R_out>255) R_out=255;
+            if(G_out<0) G_out=0;  if(G_out>255) G_out=255;
+            if(B_out<0) B_out=0;  if(B_out>255) B_out=255;                      
+
+            bitmapUtil.SetPixel( TRgb(R_out,G_out,B_out).Color64K() );
+            }
+        }
+    bitmapUtil.End();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConvertToning: Out");
+    }
+    
+    
+// ---------------------------------------------------------
+// CVeiEditVideoContainer::HandleControlEventL(
+//     CCoeControl* aControl,TCoeEvent aEventType)
+// ---------------------------------------------------------
+//
+void CVeiEditVideoContainer::HandleControlEventL(
+    CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
+    {
+    // : Add your control event handler code here
+    }
+
+// ----------------------------------------------------------------------------
+// CVeiEditVideoContainer::HandlePointerEventL
+// From CCoeControl
+// ----------------------------------------------------------------------------
+//		
+void CVeiEditVideoContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+	{
+	LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::HandlePointerEventL(): In" );
+    	
+	if( AknLayoutUtils::PenEnabled() )
+		{
+		CCoeControl::HandlePointerEventL( aPointerEvent );
+				
+		switch( aPointerEvent.iType )
+			{
+			case TPointerEvent::EButton1Down:
+				{
+				LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::HandlePointerEventL(): EButton1Down" );
+								
+                // Initialise the touch related member variables
+				iIsVideoDrag = EFalse;
+				iIsVideoTapped = EFalse;
+				
+				// the user taps the timeline bar				
+				if( iVideoBarBox.Contains( aPointerEvent.iPosition ) )
+					{
+					iCursorLocation = ECursorOnClip;
+                    HandleVideoTimelineTouchL( aPointerEvent );
+					}
+				// the user double-taps the cut bar
+				else if (( iDummyCutBar->Rect().Contains( aPointerEvent.iPosition )) &&
+				         ( aPointerEvent.iModifiers & EModifierDoubleClick ))
+				    {
+                    // open cut view    
+                    iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoCutting );
+				    }
+				// : the user double taps the thumbnail	(wait for the layout data)			
+				// : the user taps the transition arrows (wait for the layout data)
+				
+				// the volume adjustment view is active and the user taps the volume slider
+				else if (( EModeAdjustVolume == iSelectionMode ) && 
+				         ( iVerticalSlider->Rect().Contains( aPointerEvent.iPosition )))
+				    {
+				    HandleVolumeSliderTouchL( aPointerEvent );
+				    }
+				break;
+				}
+			case TPointerEvent::EDrag:
+				{
+				LOGFMT( KVideoEditorLogFile, "CVeiEditVideoContainer::HandlePointerEventL(): \
+				                              EDrag, iIsVideoTapped = %d", iIsVideoTapped );				
+				                              
+                // video drag takes effect only when the pointer has gone down inside a 
+                // video clip (i.e. iIsVideoTapped == ETrue)
+				if ( iVideoBarBox.Contains( aPointerEvent.iPosition ) && ( iIsVideoTapped ))
+	    			{
+	    			iIsVideoDrag = ETrue;
+                    HandleVideoTimelineTouchL( aPointerEvent );
+                    }
+				// the volume adjustment view is active and the user taps the volume slider
+				else if (( EModeAdjustVolume == iSelectionMode ) && 
+				         ( iVerticalSlider->Rect().Contains( aPointerEvent.iPosition )))
+				    {
+				    HandleVolumeSliderTouchL( aPointerEvent );
+				    }                    
+                break;		
+                }
+			case TPointerEvent::EButton1Up:
+				{				    
+				// pen up event is handled if it was dragged
+				if (iIsVideoDrag)
+					{
+                    iIsVideoDrag = EFalse;   
+					// pressed position is inside the timeline bar
+					if( iVideoBarBox.Contains( aPointerEvent.iPosition ) )
+						{
+						HandleVideoTimelineTouchL( aPointerEvent );
+						}						
+				    else
+				        {
+				        // the new position indicator has to be removed from the UI
+				        iNewClipPosition = iClickedClip;
+                        DrawNow();
+				        }
+					}
+					
+				break;
+				}		
+			default:
+				{
+				break;	
+				}	
+			}
+		}	
+	LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::HandlePointerEventL(): Out" );		
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVeiEditVideoContainer::HandleVideoTimelineTouchL
+// 
+// ----------------------------------------------------------------------------
+//	
+void CVeiEditVideoContainer::HandleVideoTimelineTouchL( TPointerEvent aPointerEvent )
+	{
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVideoTimelineTouchL(): In" );
+    	
+    CVeiEditVideoView::TEditorState state = iView.EditorState();
+
+	if (( AknLayoutUtils::PenEnabled() ) && 
+	    ( state!=CVeiEditVideoView::EPreview ) && 
+	    ( state!=CVeiEditVideoView::EQuickPreview ))
+		{	
+        
+        LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVideoTimelineTouchL, \
+                                     iClickedClip:%d", iClickedClip );
+				
+		// move video clip by dragging
+		if ( aPointerEvent.iType == TPointerEvent::EDrag )
+		    {
+		    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVideoTimelineTouchL, EDrag, \
+		                                 aPointerEvent.iPosition.iX = %d", aPointerEvent.iPosition.iX );
+		    
+		    // Find the clip that includes the current pointer position. 
+		    TInt clipIncludingDrag = FindClickedClip( aPointerEvent.iPosition.iX );
+		    
+		    // the pen is inside the same clip where it went down
+		    if (( clipIncludingDrag == iClickedClip ))
+		        {
+		        // the new position indicator has to be removed from UI
+                iNewClipPosition = iClickedClip; 		            
+		        }
+	        
+	        // the pen is on the empty part of the timeline
+	        else if ( aPointerEvent.iPosition.iX > iEmptyVideoTimeLineRect.iTl.iX ) 
+	            {
+	            // the last clip can't be moved right
+	            if ( iClickedClip < iMovie.VideoClipCount() - 1 )
+		            {
+		            iNewClipPosition = iMovie.VideoClipCount() - 1;
+		            }
+	            }
+   		    // the pen is on the left end of a video clip
+		    else if (( clipIncludingDrag >= 0) &&
+		             ( iVideoItemRectArray[ clipIncludingDrag ].Contains( TPoint( aPointerEvent.iPosition.iX, iVideoBarBox.Center().iY ))) && 
+		             ( aPointerEvent.iPosition.iX <= iVideoItemRectArray[ clipIncludingDrag ].iTl.iX + iVideoItemRectArray[ clipIncludingDrag ].Width()/2 ))
+		        {
+    		    // moving a clip from left to right
+    		    if (( iClickedClip < clipIncludingDrag ) && ( iClickedClip < clipIncludingDrag - 1 ))
+    		        {
+        		    iNewClipPosition = clipIncludingDrag - 1;
+    		        }
+    		    // moving a clip from right to left
+    		    else if ( iClickedClip > clipIncludingDrag )
+    		        {
+        		    iNewClipPosition = clipIncludingDrag;
+    		        }
+    		    else
+    		        {
+    		        iNewClipPosition = iClickedClip;    
+    		        }
+		        }
+		    // the pen is on the right end of a video clip
+		    else if (( clipIncludingDrag >= 0) &&
+          		     ( iVideoItemRectArray[ clipIncludingDrag ].Contains( TPoint( aPointerEvent.iPosition.iX, iVideoBarBox.Center().iY ))) && 
+		             ( aPointerEvent.iPosition.iX > iVideoItemRectArray[ clipIncludingDrag ].iTl.iX + iVideoItemRectArray[ clipIncludingDrag ].Width()/2 ))
+		        {
+    		    // moving a clip from left to right
+    		    if (( iClickedClip < clipIncludingDrag ))
+    		        {
+        		    iNewClipPosition = clipIncludingDrag;
+    		        }
+    		    // moving a clip from right to left
+    		    else if ( iClickedClip > clipIncludingDrag + 1)
+    		        {
+        		    iNewClipPosition = clipIncludingDrag + 1;
+    		        }
+    		    else
+    		        {
+    		        iNewClipPosition = iClickedClip;    
+    		        }
+		        }
+		    }
+		    
+		// pen up event after dragging
+        else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
+            {
+            iMovie.VideoClipSetIndex( iClickedClip, iNewClipPosition );    
+            if ( iVideoCursorPos != iNewClipPosition ) // eliminates blinking of the already selected clip
+                {
+                iVideoCursorPos = iNewClipPosition;
+                SetCursorLocation( ECursorOnClip );                                        
+                }
+
+            }
+        // user taps a clip
+		else if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) 
+		    {
+			CalculateVideoClipRects();	
+
+            iClickedClip = FindClickedClip( aPointerEvent.iPosition.iX );
+            iNewClipPosition = iClickedClip;
+				    
+		    if ( iClickedClip >= 0 )
+		        {
+		        iIsVideoTapped = ETrue;
+		        if ( iClickedClip != iVideoCursorPos ) // eliminates blinking of the already selected clip
+			        {  
+                    iVideoCursorPos = iClickedClip;
+                    SetCursorLocation( ECursorOnClip );        
+                    }
+		        }
+		    }
+
+        // : when the user clicks a transition marker, the transition view should open
+        
+        DrawNow();
+		LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVideoTimelineTouchL(): Out" );
+			
+		}// PenEnabled
+		
+	}
+
+
+// ----------------------------------------------------------------------------
+// CVeiEditVideoContainer::HandleVolumeSliderTouchL
+// 
+// ----------------------------------------------------------------------------
+//	
+void CVeiEditVideoContainer::HandleVolumeSliderTouchL( TPointerEvent aPointerEvent )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeSliderTouchL in");    
+
+    // calculate the new slider position
+    TInt newSliderPosition;
+    TInt volumeSliderSteps = KVolumeSliderMax - KVolumeSliderMin + 1;
+    TInt pointerPosInSlider = aPointerEvent.iPosition.iY - iVerticalSlider->Rect().iTl.iY;
+    newSliderPosition = (( volumeSliderSteps * pointerPosInSlider ) / iVerticalSlider->Rect().Height()) + KVolumeSliderMin;            
+    
+    iVerticalSlider->SetPosition( newSliderPosition);
+    iVerticalSlider->DrawNow();
+    
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeSliderTouchL out");        
+    }
+
+
+// ----------------------------------------------------------------------------
+// CVeiEditVideoContainer::ClipContainingClick
+// 
+// ----------------------------------------------------------------------------
+//	
+TInt CVeiEditVideoContainer::FindClickedClip( TInt aPressedPointX )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::FindClickedClip in"); 
+	// Video Timeline start and end points, and length
+	TInt timelineLeftEnd( iVideoBarBox.iTl.iX );
+	TInt timelineRightEnd( iVideoBarBox.iBr.iX );
+	TInt totalPBLength( timelineRightEnd - timelineLeftEnd );
+
+    // check which part of the timeline contains the click
+    TInt clickedClip = -1;
+    TInt i = 0;
+    while (( clickedClip < 0) && ( i < iMovie.VideoClipCount() ))
+        {
+        if ( ( aPressedPointX > iVideoItemRectArray[i].iTl.iX ) && 
+             ( aPressedPointX < iVideoItemRectArray[i].iBr.iX ))
+            {
+            clickedClip = i;    
+            }
+        else
+            {
+            i++;
+            }
+        }		
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::FindClickedClip out");         
+    return clickedClip;
+    }
+            
+            
+
+void CVeiEditVideoContainer::SetCursorLocation( TCursorLocation aCursorLocation ) 
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::SetCursorLocation in");   
+    
+    iCursorLocation = aCursorLocation; 
+    
+    if ( iView.EditorState() == CVeiEditVideoView::EMixAudio)
+        {       
+        iVideoDisplay->MakeVisible( ETrue );
+        iVideoDisplay->SetRect( iVideoDisplayBox ); 
+        iVideoDisplay->ShowPictureL(*iAudioMixingIcon);
+        iInfoDisplay->MakeVisible(EFalse);
+        iHorizontalSlider->MakeVisible(ETrue);
+        return;
+        }           
+    
+    iTransitionDisplayLeft->MakeVisible( EFalse );
+    iTransitionDisplayRight->MakeVisible( EFalse );
+    iDummyCutBarLeft->MakeVisible( EFalse );
+    iInfoDisplay->SetRect( iInfoDisplayBox );
+    iEffectSymbols->MakeVisible( EFalse );
+    if (CVeiEditVideoContainer::EModeSlowMotion != iSelectionMode)
+        {
+        // currently slow motion wastes processing time in background
+        iVideoDisplay->StopAnimation(); 
+        }   
+
+    if ( iCursorLocation == ECursorOnClip && iInfoDisplay )
+        {
+        iVideoDisplay->MakeVisible( ETrue );
+        iVideoDisplay->SetRect( iVideoDisplayBox ); 
+
+        if ( iMovie.VideoClipCount() > 0 )
+            {
+            if ( (iVideoCursorPos > (iMovie.VideoClipCount()-1)))
+                {
+                iVideoCursorPos--;
+                }
+
+            TParse parser;
+
+            parser.Set( iVideoItemArray[ CurrentIndex() ]->iFilename->Des(), NULL, NULL );          
+            iVideoDisplay->ShowPictureL( *iVideoItemArray[CurrentIndex()]->iIconBitmap,
+                    *iVideoItemArray[CurrentIndex()]->iIconMask );              
+                
+            iDummyCutBar->SetRect( iDummyCutBarBox );
+            iDummyCutBar->Dim( EFalse );
+
+            // : start using LAF data when it is available
+            // iDummyCutBar->Rect() == (80, 160, 273, 204) includes the scissor icon and the progress bar
+            iDummyCutBar->SetComponentRect( CVeiCutterBar::EProgressBar, TRect(115, 160,273,204)); 
+            iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, TRect(115, 160,135,204) );
+            iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon,  TRect(135,160,244,204) );
+            iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon,TRect(244,160,273,204) );                        
+            iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, TRect(115, 160,135,204) );
+            iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon,  TRect(135,160,244,204) );
+            iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon,TRect(244,160,273,204) );                     
+            iDummyCutBar->SetComponentRect( CVeiCutterBar::EScissorsIcon, TRect(80, 167,110,197) );
+            iDummyCutBar->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon,TRect(115,160,124,204) );            
+
+            TTimeIntervalMicroSeconds clipDuration = iMovie.VideoClipInfo( CurrentIndex())->Duration();
+            TTimeIntervalMicroSeconds clipCutInTime = iMovie.VideoClipCutInTime( CurrentIndex() );
+            TTimeIntervalMicroSeconds clipCutOutTime = iMovie.VideoClipCutOutTime( CurrentIndex() );
+
+            iDummyCutBar->SetTotalDuration( clipDuration );
+            iDummyCutBar->SetInPoint( clipCutInTime );
+            iDummyCutBar->SetOutPoint( clipCutOutTime );
+
+            TTime       fileModified;
+
+            RFs& fs = iEikonEnv->FsSession();
+            if ( parser.ExtPresent() )
+                {
+                fs.Modified( *iVideoItemArray[CurrentIndex()]->iFilename, fileModified );
+                }
+            else
+                {
+                fileModified = iVideoItemArray[CurrentIndex()]->iDateModified;
+                }
+
+            if ( VideoEditorUtils::IsLandscapeScreenOrientation() ) //Landscape     
+                {
+                iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything );
+                }
+            else
+                {
+                iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration );
+                }
+
+            iInfoDisplay->SetLocation( *iVideoItemArray[CurrentIndex()]->iAlbumName );
+
+            TFileName clipName = parser.Name();
+            TTimeIntervalMicroSeconds editedDuration = iMovie.VideoClipEditedDuration( CurrentIndex() );
+            iInfoDisplay->MakeVisible( ETrue );
+
+            if( !CurrentClipIsFile() )
+                {
+                TFileName fileName;
+                fileName = iMovie.VideoClipInfo( CurrentIndex() )->DescriptiveName();
+                iInfoDisplay->SetName(fileName);
+                }
+            else
+                {
+                iInfoDisplay->SetName( clipName );
+                }
+
+            iInfoDisplay->SetDuration( editedDuration );
+            iInfoDisplay->SetTime( fileModified );
+
+            // *** IconBox drawing ****
+            // indicator icons are hidden in preview state 
+            CVeiEditVideoView::TEditorState state = iView.EditorState();
+            if (state != CVeiEditVideoView::EPreview && state != CVeiEditVideoView::EQuickPreview)
+                {
+                if ((iMovie.VideoClipIsMuted(iVideoCursorPos) != EFalse) || 
+                    (iMovie.VideoClipEditedHasAudio(iVideoCursorPos) == EFalse))
+                    {               
+                    iEffectSymbols->SetVolumeMuteIconVisibility(ETrue); 
+                    }
+                else
+                    {               
+                    iEffectSymbols->SetVolumeMuteIconVisibility(EFalse);    
+                    }
+            
+                if ( iMovie.VideoClipSpeed( iVideoCursorPos ) != 1000 )
+                    {
+                    iEffectSymbols->SetSlowMotionIconVisibility(ETrue);
+                    }
+                else
+                    {
+                    iEffectSymbols->SetSlowMotionIconVisibility(EFalse);    
+                    }
+
+                SetColourToningIcons(iVideoCursorPos);
+
+                iEffectSymbols->MakeVisible( ETrue );
+                iEffectSymbols->SetRect( iEffectSymbolBox );
+                }
+            }
+        else
+            {
+            iInfoDisplay->SetLayout( CVeiTextDisplay::EOnlyName );
+            iVideoDisplay->ShowBlankScreen();
+            
+            iDummyCutBar->Dim( ETrue );
+            HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NO_VIDEO, iEikonEnv );
+            iInfoDisplay->SetName( *stringholder );         
+            CleanupStack::PopAndDestroy( stringholder );
+            }
+        StartZooming();
+        }
+    else if ( iCursorLocation == ECursorOnEmptyVideoTrack )
+        {
+        iVideoDisplay->MakeVisible( ETrue );
+        iVideoDisplay->SetRect( iVideoDisplayBox );
+        iDummyCutBar->SetRect( iDummyCutBarBox );
+        iDummyCutBar->Dim( ETrue );
+        iDummyCutBar->MakeVisible( EFalse); 
+        
+        iInfoDisplay->SetLayout( CVeiTextDisplay::EOnlyName );
+        iVideoDisplay->ShowBlankScreen();
+        iInfoDisplay->MakeVisible( ETrue );
+
+        HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NO_VIDEO, iEikonEnv );
+        iInfoDisplay->SetName( *stringholder );         
+        CleanupStack::PopAndDestroy( stringholder );
+        }
+    else if (( iCursorLocation == ECursorOnAudio ) &&
+            (( iSelectionMode == EModeRecordingSetStart ) ||
+             ( iSelectionMode == EModeRecording )))
+        {
+        HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NEW_AUDIO, iEikonEnv );
+
+        iVideoDisplay->MakeVisible( ETrue );
+        iInfoDisplay->MakeVisible( ETrue );
+        iInfoDisplay->SetName( *stringholder );     
+        iVideoDisplay->ShowPictureL( *iAudioIcon );
+        
+        iEffectSymbols->SetVolumeMuteIconVisibility( EFalse );
+        iEffectSymbols->SetBlackAndWhiteIconVisibility( EFalse );
+        iEffectSymbols->SetColourIconVisibility( EFalse );
+        iEffectSymbols->SetSlowMotionIconVisibility( EFalse );  
+
+        iVideoDisplay->SetRect( iVideoDisplayBox ); 
+        iDummyCutBar->SetRect( iDummyCutBarBox );
+
+        if ( iSelectionMode == EModeRecordingSetStart )
+            {
+            TTimeIntervalMicroSeconds duration = TTimeIntervalMicroSeconds(0);
+            iInfoDisplay->SetDuration( duration );
+            }
+        else
+            {
+            iInfoDisplay->SetDuration( iRecordedAudioDuration );
+            }
+        CleanupStack::PopAndDestroy( stringholder );
+        }
+    else if ( iCursorLocation == ECursorOnAudio )
+        {
+
+        iVideoDisplay->MakeVisible( ETrue );
+        iEffectSymbols->SetVolumeMuteIconVisibility( EFalse );
+        iEffectSymbols->SetBlackAndWhiteIconVisibility( EFalse );
+        iEffectSymbols->SetColourIconVisibility( EFalse );
+        iEffectSymbols->SetSlowMotionIconVisibility( EFalse );
+
+        iVideoDisplay->SetRect( iVideoDisplayBox ); 
+        iDummyCutBar->SetRect( iDummyCutBarBox );
+
+        if ( iMovie.AudioClipCount() > 0 )
+            {
+
+            CVedAudioClipInfo* audioclipinfo = iMovie.AudioClipInfo( CurrentIndex() );
+
+            TTimeIntervalMicroSeconds audioClipEditedDuration = iMovie.AudioClipEditedDuration( CurrentIndex() );
+            TTimeIntervalMicroSeconds audioClipDuration = audioclipinfo->Duration();
+            TTimeIntervalMicroSeconds audioClipCutInTime = iMovie.AudioClipCutInTime( CurrentIndex() );
+            TTimeIntervalMicroSeconds audioClipCutOutTime = iMovie.AudioClipCutOutTime( CurrentIndex() );
+            
+            iDummyCutBar->Dim( EFalse );
+
+            iDummyCutBar->SetTotalDuration( audioClipDuration );
+            iDummyCutBar->SetInPoint( audioClipCutInTime );
+            iDummyCutBar->SetOutPoint( audioClipCutOutTime );
+
+            TParse parser;
+            parser.Set( *iAudioItemArray[CurrentIndex()]->iFilename, NULL, NULL );          
+            iVideoDisplay->ShowPictureL( *iAudioIcon );
+
+            TTime       fileModified;
+
+            RFs& fs = iEikonEnv->FsSession();
+            fs.Modified( parser.FullName(), fileModified );
+
+            if ( VideoEditorUtils::IsLandscapeScreenOrientation() ) //Landscape     
+                {
+                iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything );
+                }
+            else
+                {
+                iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration );
+                }
+            TFileName audioClipName;
+
+            if ( iAudioItemArray[CurrentIndex()]->iRecordedAudio )
+                {
+                HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NEW_AUDIO, iEikonEnv );
+                audioClipName = *stringholder;
+                CleanupStack::PopAndDestroy( stringholder );
+                }
+            else
+                {
+                audioClipName = parser.Name();
+                }
+
+            iInfoDisplay->MakeVisible( ETrue );
+            iInfoDisplay->SetName( audioClipName );
+            iInfoDisplay->SetDuration( audioClipEditedDuration );
+            iInfoDisplay->SetTime( fileModified );
+            }
+        else
+            {
+            iVideoDisplay->MakeVisible( ETrue );
+            iInfoDisplay->SetLayout( CVeiTextDisplay::EOnlyName );
+            iVideoDisplay->ShowBlankScreen();
+            iDummyCutBar->Dim( ETrue );
+            iInfoDisplay->MakeVisible( ETrue );
+            HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NO_AUDIO, iEikonEnv );
+            iInfoDisplay->SetName( *stringholder );         
+            CleanupStack::PopAndDestroy( stringholder );
+            }
+        StartZooming();
+        }
+    else if ( iCursorLocation == ECursorOnTransition )
+        {
+        iVideoDisplay->MakeVisible( ETrue );
+        iTransitionDisplayLeft->MakeVisible( ETrue );
+        iTransitionDisplayRight->MakeVisible( ETrue );
+
+        TTimeIntervalMicroSeconds clipDuration;
+        TTimeIntervalMicroSeconds clipCutInTime;
+        TTimeIntervalMicroSeconds clipCutOutTime;
+
+        TInt nextIndex;
+        nextIndex = iVideoCursorPos;
+
+        if ( ( nextIndex < iMovie.VideoClipCount() ) ) // video on both sides OR no video on the left hand side 
+            {
+            CStoryboardVideoItem* item = iVideoItemArray[ nextIndex ];
+    
+            iConverter->ScaleL( item->iIconBitmap, item->iIconBitmap, iTransitionDisplayRight->GetScreenSize() );
+
+            clipDuration = iMovie.VideoClipInfo( nextIndex )->Duration();
+            clipCutInTime = iMovie.VideoClipCutInTime( nextIndex );
+            clipCutOutTime = iMovie.VideoClipCutOutTime( nextIndex );
+
+            iDummyCutBar->Dim( EFalse );
+            iDummyCutBar->SetTotalDuration( clipDuration );
+            iDummyCutBar->SetInPoint( clipCutInTime );
+            iDummyCutBar->SetOutPoint( clipCutOutTime );
+            }
+        else // no video on the right hand side 
+            {
+            iTransitionDisplayRight->ShowBlankScreen();
+            iDummyCutBar->Dim( ETrue );
+            }
+        nextIndex--;
+                
+        if ( nextIndex >= 0 ) // video on both sides OR no video on the right hand side 
+            {
+            CStoryboardVideoItem* item = iVideoItemArray[ nextIndex ];
+            if ( item->iLastFrameBitmap != NULL )
+                {               
+                iTransitionDisplayLeft->ShowPictureL( *item->iLastFrameBitmap, *item->iLastFrameMask);
+                }
+            iDummyCutBarLeft->Dim( EFalse );
+
+            clipDuration = iMovie.VideoClipInfo( nextIndex )->Duration();
+            clipCutInTime = iMovie.VideoClipCutInTime( nextIndex );
+            clipCutOutTime = iMovie.VideoClipCutOutTime( nextIndex );
+
+            iDummyCutBarLeft->SetTotalDuration( clipDuration );
+            iDummyCutBarLeft->SetInPoint( clipCutInTime );
+            iDummyCutBarLeft->SetOutPoint( clipCutOutTime );
+            }
+        else // no video on the left hand side
+            {
+            iTransitionDisplayLeft->ShowBlankScreen();
+            iDummyCutBarLeft->Dim( ETrue );
+            }
+
+        iVideoDisplay->ShowBlankScreen();
+
+        iVideoDisplay->SetRect( iVideoDisplayBoxOnTransition );
+        iDummyCutBar->SetRect( iDummyCutBarBoxOnTransition ); 
+        
+        // : start using LAF data when it is available
+        // iDummyCutBar->Rect() == (321, 107, 433, 151) includes the scissor icon and the progress bar
+        iDummyCutBar->SetComponentRect( CVeiCutterBar::EProgressBar, TRect(355,107,433,151)); 
+        iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, TRect(355,107,360 ,151) );
+        iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon,  TRect(360,107,400 ,151) );
+        iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon,TRect(400,107,433 ,151) );                    
+        iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, TRect(355,107,360 ,151) );
+        iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon,  TRect(360,107,400 ,151) );
+        iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon,TRect(400,107,433 ,151) );            
+        iDummyCutBar->SetComponentRect( CVeiCutterBar::EScissorsIcon, TRect(321,107,350 ,151) );
+        iDummyCutBar->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon,TRect(321,107,350 ,151) );                        
+
+        iDummyCutBarLeft->MakeVisible( ETrue );
+        iDummyCutBarLeft->SetPosition( TPoint(iTransitionDisplayLeftBox.iTl.iX,
+            iTransitionDisplayLeftBox.iBr.iY- iVideoDisplay->GetBorderWidth() ) );
+        iDummyCutBarLeft->SetSize( TSize( iTransitionDisplayLeftBox.Width(), iDummyCutBarBox.Height() ) );
+
+        // : start using LAF data when it is available
+        // iDummyCutBarLeft->Rect() == (5, 107, 117, 151) includes the scissor icon and the progress bar
+        iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::EProgressBar, TRect(35,107,117,151)); 
+        iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, TRect(35,107,55 ,151) );
+        iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon,  TRect(55,107,100 ,151) );
+        iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon,TRect(100,107,117 ,151) );                    
+        iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, TRect(35,107,55 ,151) );
+        iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon,  TRect(55,107,100 ,151) );
+        iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon,TRect(100,107,117 ,151) );                    
+        iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::EScissorsIcon, TRect(5,107,30 ,151) );
+        iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon,TRect(5,107,30 ,151) );                        
+
+        ArrowsControl();
+
+        if ( iVideoCursorPos == 0 )
+            {
+            ShowStartAnimationL( iMovie.StartTransitionEffect() );
+            iInfoDisplay->SetName( *iTransitionInfo->StartTransitionName( iMovie.StartTransitionEffect() ) );
+            }
+        else if ( iVideoCursorPos == iMovie.VideoClipCount() )
+            {
+            iInfoDisplay->SetName( *iTransitionInfo->EndTransitionName( iMovie.EndTransitionEffect() ) );
+            ShowEndAnimationL( iMovie.EndTransitionEffect() );
+            }
+        else
+            {           
+            iInfoDisplay->SetName( *iTransitionInfo->MiddleTransitionName( iMovie.MiddleTransitionEffect( CurrentIndex() - 1 ) ) );
+            ShowMiddleAnimationL( iMovie.MiddleTransitionEffect( CurrentIndex() - 1 ) );
+            }
+        StartZooming();
+        }
+    else if ( iCursorLocation == ECursorOnEmptyAudioTrack )
+        {
+        iVideoDisplay->MakeVisible( ETrue );
+        iInfoDisplay->SetLayout( CVeiTextDisplay::EOnlyName );
+        iVideoDisplay->ShowBlankScreen();
+        iInfoDisplay->MakeVisible( ETrue );
+
+        HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NO_AUDIO, iEikonEnv );
+        iInfoDisplay->SetName( *stringholder );         
+        CleanupStack::PopAndDestroy( stringholder );
+
+        iVideoDisplay->SetRect( iVideoDisplayBox );
+        iDummyCutBar->SetRect( iDummyCutBarBox );
+        iDummyCutBar->Dim( ETrue );
+        }
+    if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview)
+        {
+        TFileName newname;
+        TVeiSettings movieSaveSettings;
+        STATIC_CAST( CVeiAppUi*, iEikonEnv->AppUi() )->ReadSettingsL( movieSaveSettings );  
+        newname.Append( movieSaveSettings.DefaultVideoName() );
+        iInfoDisplay->SetName( newname );
+
+        TTimeIntervalMicroSeconds tempFileDuration;
+        tempFileDuration = iVideoDisplay->TotalLengthL();
+        iInfoDisplay->SetDuration( tempFileDuration );
+        }
+    /*if ( iView.EditorState() == CVeiEditVideoView::EMixAudio)
+        {       
+        
+        //iHorizontalSliderSize = TSize(iHorizontalSlider->MinimumSize().iWidth, 50);
+        //  iHorizontalSliderPoint = TPoint( videoScreenX - 25, + videoScreenY + videoScreenSize.iHeight + 70); 
+        iHorizontalSlider->SetExtent( iHorizontalSliderPoint, iHorizontalSliderSize );              
+        iHorizontalSlider->MakeVisible(ETrue);
+        iHorizontalSlider->DrawDeferred();
+        iVideoDisplay->ShowPictureL(*iAudioMixingIcon);
+        }   
+        */
+    }
+
+TBool CVeiEditVideoContainer::CurrentClipIsFile()
+    {
+    if ( (iCursorLocation == ECursorOnClip) && (iMovie.VideoClipCount() > 0 ) )
+        {
+        return iVideoItemArray[ CurrentIndex() ]->iIsFile;
+        }
+    else
+        return EFalse;
+    }
+
+
+void CVeiEditVideoContainer::ShowMiddleAnimationL( TVedMiddleTransitionEffect aMiddleEffect )
+    {
+    switch( aMiddleEffect )
+        {
+        case EVedMiddleTransitionEffectNone:
+            iVideoDisplay->StopAnimation();
+            break;
+        case EVedMiddleTransitionEffectDipToBlack:
+            iVideoDisplay->ShowAnimationL( R_VEI_DIP_TO_BLACK_ANIMATION );
+            break;
+        case EVedMiddleTransitionEffectDipToWhite:
+            iVideoDisplay->ShowAnimationL( R_VEI_DIP_TO_WHITE_ANIMATION );
+            break;
+        case EVedMiddleTransitionEffectCrossfade:
+            iVideoDisplay->ShowAnimationL( R_VEI_CROSSFADE_ANIMATION );
+            break;
+        case EVedMiddleTransitionEffectWipeLeftToRight:
+            iVideoDisplay->ShowAnimationL( R_VEI_WIPE_LEFT_ANIMATION );
+            break;
+        case EVedMiddleTransitionEffectWipeRightToLeft:
+            iVideoDisplay->ShowAnimationL( R_VEI_WIPE_RIGHT_ANIMATION );
+            break;
+        case EVedMiddleTransitionEffectWipeTopToBottom:
+            iVideoDisplay->ShowAnimationL( R_VEI_WIPE_TOP_TO_BOTTOM_ANIMATION );
+            break;
+        case EVedMiddleTransitionEffectWipeBottomToTop:
+            iVideoDisplay->ShowAnimationL( R_VEI_WIPE_BOTTOM_TO_TOP_ANIMATION );
+            break;
+        default:
+            break;
+        }
+    }
+
+
+void CVeiEditVideoContainer::ShowStartAnimationL( TVedStartTransitionEffect aStartEffect )
+    {
+    switch( aStartEffect )
+        {
+        case EVedStartTransitionEffectNone:
+            iVideoDisplay->StopAnimation();
+            break;
+        case EVedStartTransitionEffectFadeFromBlack:
+            iVideoDisplay->ShowAnimationL( R_VEI_FADE_FROM_BLACK_ANIMATION );
+            break;
+        case EVedStartTransitionEffectFadeFromWhite:
+            iVideoDisplay->ShowAnimationL( R_VEI_FADE_FROM_WHITE_ANIMATION );
+            break;
+        default:
+            break;
+        }
+    }
+
+void CVeiEditVideoContainer::ShowEndAnimationL( TVedEndTransitionEffect aEndEffect )
+    {
+    switch( aEndEffect )
+        {
+        case EVedEndTransitionEffectNone:
+            iVideoDisplay->StopAnimation();
+            break;
+        case EVedEndTransitionEffectFadeToBlack:
+            iVideoDisplay->ShowAnimationL( R_VEI_FADE_TO_BLACK_ANIMATION );
+            break;
+        case EVedEndTransitionEffectFadeToWhite:
+            iVideoDisplay->ShowAnimationL( R_VEI_FADE_TO_WHITE_ANIMATION );
+            break;
+        default:
+            break;
+        }
+    }
+
+
+void CVeiEditVideoContainer::NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo  )
+    {
+    LOGFMT4(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() In, \
+                aEvent:%d, iFullScreenSelected:%d, iView.EditorState():%d, iPreviewState:%d", \
+                aEvent, iFullScreenSelected, iView.EditorState(), iPreviewState);
+
+    if (EStateTerminating == iPreviewState)
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent(): app is closing...");
+        return;
+        }
+
+    switch (aEvent)
+        {
+        case MVeiVideoDisplayObserver::ELoadingStarted:
+            {
+            SetPreviewState(EStateOpening);     
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::ELoadingStarted");            
+            break;
+            }
+        case MVeiVideoDisplayObserver::EOpenComplete:
+            {
+            LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EOpenComplete 1:%Ld", iVideoDisplay->PositionL().Int64());
+                
+            iCursorPreviousLocation = CursorLocation();
+            
+            if ( !iFullScreenSelected )
+                {
+                TRAP_IGNORE( (/*iTempVideoInfo =*/ CVedVideoClipInfo::NewL( *iTempFileName,*this) ) );
+                
+                //for draw function
+                iCursorLocation = ECursorOnClip;
+                }
+
+            if ( CVeiEditVideoView::EPreview == iView.EditorState() )//Large preview
+                {
+                TRect wholeScreenRect = iView.ClientOrApplicationRect( iFullScreenSelected );
+                SetRect( iView.ClientOrApplicationRect( iFullScreenSelected ) );
+                iVideoDisplay->SetRect( wholeScreenRect );  
+
+                if ( !VideoEditorUtils::IsLandscapeScreenOrientation() ) //Portrait
+                    {
+                    iVideoDisplay->SetRotationL( EVideoRotationClockwise90 );                           
+                    }
+                
+                if ( iView.IsForeground() )
+                    {
+                    iVideoDisplay->ShowBlackScreen();
+                    DrawDeferred();
+                    if ( iTempVideoInfo && !iFrameReady)
+                        {                           
+                        iTempVideoInfo->CancelFrame();
+                        }
+                    iVideoDisplay->Play();      
+                    }
+                else
+                    {
+                    iView.SetEditorState( CVeiEditVideoView::EEdit );
+                    SetBlackScreen( EFalse );
+                    iView.SetFullScreenSelected( EFalse );
+                    iVideoDisplay->Stop( ETrue ); 
+                    }           
+                    
+                }       
+             else //Small preview
+                {
+                iVideoDisplay->SetRect( iVideoDisplayBox );
+                iInfoDisplay->SetRect( iInfoDisplayBox );
+                iVideoDisplay->SetRotationL( EVideoRotationNone );        
+
+                if ( !VideoEditorUtils::IsLandscapeScreenOrientation() ) //Portrait
+                    {
+                    iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration );
+                    iInfoDisplay->MakeVisible( ETrue );
+                    }
+                else //Landscape
+                    {
+                    iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything );
+                    iInfoDisplay->MakeVisible( ETrue );
+                    }
+                
+                if ( iView.IsForeground() )
+                    {
+                    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EOpenComplete 2");
+                    iVideoDisplay->ShowBlackScreen();
+                    DrawDeferred();
+                    if ( iTempVideoInfo && !iFrameReady)
+                        {                           
+                        iTempVideoInfo->CancelFrame();
+                        }
+                    iVideoDisplay->Play();                          
+                    }
+                else
+                    {
+                    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EOpenComplete 3");                    
+                    PauseVideoL();
+                    }           
+                }
+            break;
+            }                                                                                           
+        case MVeiVideoDisplayObserver::EBufferingStarted:
+            {
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EBufferingStarted");          
+            SetPreviewState( EStateBuffering );
+            if ( iPeriodic )
+                {
+                iPeriodic->Cancel();
+                }
+            break;
+            }
+        case MVeiVideoDisplayObserver::ELoadingComplete:
+            {
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::ELoadingComplete 1");                     
+            
+            if (EStatePaused == iPreviewState)
+                {
+                iVideoDisplay->PauseL();    
+                }
+            else
+                {
+                SetPreviewState( EStatePlaying );           
+            
+                if (iFullScreenSelected)
+                    {               
+                    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::ELoadingComplete 2");
+                    iView.SetEditorState( CVeiEditVideoView::EPreview);
+                    }
+                else 
+                    {               
+                    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::ELoadingComplete 3");
+                    iView.SetEditorState( CVeiEditVideoView::EQuickPreview);
+                    DrawDeferred();
+                    iVideoDisplay->ShowBlackScreen();
+                    iScreenLight->Start();
+                    const TUint delay = 100000;             
+                    iPeriodic->Start( delay, delay, TCallBack( CVeiEditVideoContainer::UpdatePosition, this ) );
+                    TRAP_IGNORE(iView.StartNaviPaneUpdateL()); 
+                    }
+                }
+            break;
+            }
+        case MVeiVideoDisplayObserver::EPlayComplete:
+            {
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EPlayComplete 1");
+            iScreenLight->Stop();
+            if ( iPeriodic )
+                {
+                iPeriodic->Cancel();
+                }
+            
+            if ( !iFullScreenSelected )
+                {
+                SetPreviewState(EStateStopped);
+                
+                iLastPosition = iVideoDisplay->TotalLengthL();
+                iSeekPos = TTimeIntervalMicroSeconds( 0 );
+                
+                SetFinishedStatus( ETrue );
+                LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EPlayComplete 2");                
+                GetThumbAtL(0);  
+                LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EPlayComplete 3"); 
+                
+                iView.SetEditorState( CVeiEditVideoView::EQuickPreview );
+                iView.StopNaviPaneUpdateL();
+                }
+            else
+                {
+                if (EModeMixingAudio != iSelectionMode)
+                    {                                               
+                    iView.SetEditorState( CVeiEditVideoView::EEdit );                   
+                    }
+                else
+                    {
+                    iView.SetEditorState(CVeiEditVideoView::EMixAudio);                 
+                    }
+                                
+                SetBlackScreen( EFalse );
+                iView.SetFullScreenSelected( EFalse );
+                iVideoDisplay->Stop( ETrue ); 
+                DrawDeferred();
+                }
+            
+            if (KErrNoMemory == aInfo || KErrSessionClosed == aInfo)
+                {
+                LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EPlayComplete 4");
+                iView.ShowGlobalErrorNote( aInfo );
+                StopVideo(ETrue);               
+                }  
+            
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EPlayComplete 5");
+            break;
+            }
+        case MVeiVideoDisplayObserver::EStop:
+            {
+            LOGFMT3(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop 1, \
+            iFullScreenSelected:%d, iSelectionMode:%d, iCloseStream:%d", \
+            iFullScreenSelected, iSelectionMode, iCloseStream);  
+            
+            if ( iPeriodic )
+                {                
+                iPeriodic->Cancel();
+                }
+            iView.StopNaviPaneUpdateL();    
+                
+            if (EStateGettingFrame == iPreviewState)
+                {
+                break;  
+                }
+            // position must be set here to 0 because state EStateGettingFrame cannot be resoluted in player                    
+            // and position must not be set to 0 in that state
+            iVideoDisplay->SetPositionL(TTimeIntervalMicroSeconds( 0 ));
+                                               
+            if ( iFullScreenSelected || iCloseStream )
+                {
+                LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop 4");
+                SetPreviewState(EStateClosed);                
+                iVideoDisplay->SetBlackScreen( EFalse );
+                iDummyCutBar->MakeVisible( ETrue );
+                
+                if (EModeMixingAudio != iSelectionMode)
+                    {                                   
+                    iView.SetEditorState( CVeiEditVideoView::EEdit );
+                    SetSelectionMode( EModeNavigation );
+                    }
+                else
+                    {
+                    iView.SetEditorState(CVeiEditVideoView::EMixAudio);
+                    break;
+                    }
+                SetCursorLocation( iCursorPreviousLocation );
+                LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop 5");
+                DrawDeferred();
+                iCloseStream = EFalse;
+                break;
+                }
+                
+            if (EModeMixingAudio != iSelectionMode)
+                {   
+                LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop 2");
+                GetThumbAtL(0); 
+                LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop 3");
+                }    
+
+            SetPreviewState(EStateStopped);            
+            iLastPosition = iVideoDisplay->TotalLengthL();
+            iSeekPos = TTimeIntervalMicroSeconds( 0 );
+            iView.DoUpdateEditNaviLabelL();
+            SetFinishedStatus( ETrue );
+            iView.SetEditorState( CVeiEditVideoView::EQuickPreview );
+            // redraw needed at least to erase pause icon
+            DrawDeferred();            
+            break;
+            }
+        case MVeiVideoDisplayObserver::EVolumeLevelChanged:
+            {
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EVolumeLevelChanged 1");
+            TInt playerVolume = iVideoDisplay->Volume();
+            iView.ShowVolumeLabelL( playerVolume );
+            break;
+            }
+        case MVeiVideoDisplayObserver::EError:
+            {
+            LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EError 1");
+            iView.ShowGlobalErrorNote( aInfo );         
+            if (KErrMMAudioDevice  == aInfo)
+                {
+                PauseVideoL();  
+                }
+            else
+                {
+                StopVideo(ETrue);
+                }               
+            break;
+            }                           
+        default:
+            {
+            LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() default case, aEvent:%d", aEvent);
+            };
+        }
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() Out");
+    }
+
+
+void CVeiEditVideoContainer::StartFrameTakerL( TInt aIndex )
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartFrameTakerL: In");
+
+// First frame is shown in main display so it is bigger.. Last frame is always
+// on transition display and one frame for the video timeline.
+    TSize firstThumbResolution = iVideoDisplay->GetScreenSize();
+    TSize lastThumbResolution = iTransitionDisplayLeft->GetScreenSize();
+    TSize timelineThumbResolution = TSize( 34, /*iVideoBarBox.Height()-2*/28 );
+    
+    TTimeIntervalMicroSeconds cutInTime = iMovie.VideoClipCutInTime( aIndex );
+    TTimeIntervalMicroSeconds cutOutTime = iMovie.VideoClipCutOutTime( aIndex );
+
+
+    TInt frameCount = iMovie.VideoClipInfo(aIndex)->VideoFrameCount();
+
+    TInt firstThumbNailIndex =  iMovie.VideoClipInfo(aIndex)->GetVideoFrameIndexL( cutInTime ); 
+    TInt lastThumbNailIndex =  iMovie.VideoClipInfo(aIndex)->GetVideoFrameIndexL( cutOutTime );    
+    if ( lastThumbNailIndex >= frameCount )
+        {
+        lastThumbNailIndex = frameCount-1;
+        }
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartFrameTakerL: 2");
+
+    iFrameTaker->GetFramesL( *iMovie.VideoClipInfo(aIndex), 
+            firstThumbNailIndex, &firstThumbResolution,
+            lastThumbNailIndex, &lastThumbResolution, 
+            firstThumbNailIndex, &timelineThumbResolution,
+            EPriorityLow );
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartFrameTakerL: Out");          
+    }
+
+void CVeiEditVideoContainer::NotifyFramesCompleted( CFbsBitmap* aFirstFrame, 
+                                       CFbsBitmap* aLastFrame,  CFbsBitmap* aTimelineFrame,  TInt aError )
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyFramesCompleted: In, aError:%d", aError);
+    CStoryboardVideoItem* item;
+    if( aError==KErrNone )
+        {
+        if ( iMovie.VideoClipColorEffect( iVideoCursorPos ) == EVedColorEffectBlackAndWhite ) 
+            {
+            ConvertBW( *aFirstFrame );
+            ConvertBW( *aLastFrame );
+            ConvertBW( *aTimelineFrame );
+            }
+        if ( iMovie.VideoClipColorEffect( iVideoCursorPos ) == EVedColorEffectToning ) 
+            {
+            //TRgb toning = iMovie.VideoClipColorTone(CurrentIndex());
+            ConvertToning(*aFirstFrame);
+            ConvertToning(*aLastFrame);
+            ConvertToning(*aTimelineFrame);
+            }   
+
+        item = iVideoItemArray[ iCurrentlyProcessedIndex ];
+        TRAP_IGNORE( 
+            item->InsertLastFrameL( *aLastFrame, *aLastFrame );
+            item->InsertFirstFrameL( *aFirstFrame, *aFirstFrame );
+            item->InsertTimelineFrameL( *aTimelineFrame, *aTimelineFrame );         
+            iVideoDisplay->ShowPictureL( *item->iIconBitmap, *item->iIconMask);
+            );
+
+        // UpdateThumbnail launches progressnote. 
+        if (iProgressDialog )
+            {
+            iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 );
+            TRAP_IGNORE( iProgressDialog->ProcessFinishedL() );
+            //iProgressDialog = NULL;           
+            }
+        iView.HandleCommandL( EAknSoftkeyOk );
+        }
+        
+    // UpdateThumbnail launches progressnote. 
+    if (iProgressDialog )
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyFramesCompleted: 2");
+        iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 );
+        TRAP_IGNORE( iProgressDialog->ProcessFinishedL() );
+        //iProgressDialog = NULL;
+        }   
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyFramesCompleted: 3");
+    iCurrentlyProcessedIndex = -1;
+    iView.SetWaitMode( CVeiEditVideoView::ENotWaiting );
+    SetCursorLocation( CursorLocation() );
+    
+    iView.CancelWaitDialog(aError);
+    iView.AddNext();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyFramesCompleted: Out");         
+    }
+
+void CVeiEditVideoContainer::NotifyCompletion( TInt DEBUGLOG_ARG(aErr) )
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyCompletion: In, err:%d", aErr);
+
+    if (EStateTerminating == iPreviewState)
+        {
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyCompletion(): app is closing...");
+        return;
+        }
+
+    if ( iTakeSnapshot )
+        {
+        //  to eliminate previous (wrong) output file from being deleted in CancelSnapshotSave()    
+        delete iSaveToFileName;
+        iSaveToFileName = NULL;
+        
+        if ( iProgressDialog )
+            {
+            iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 );
+            TRAP_IGNORE( iProgressDialog->ProcessFinishedL() );
+            //iProgressDialog = NULL;
+            }
+        return;
+        }
+    
+    TRAP_IGNORE(iTransitionDisplayRight->ShowPictureL( *iConverter->GetBitmap()));
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyCompletion: Out");          
+    }
+
+void CVeiEditVideoContainer::SetSlowMotionStartValueL(TInt aSlowMotionStartValue)
+    {       
+    iSlowMotionValue = aSlowMotionStartValue; 
+    iArrowsDisplay->SetSlowMotionPreset( iSlowMotionValue / 10 );
+    
+    TInt frameInterval = (1000-iSlowMotionValue)/2;
+
+    iVideoDisplay->ShowAnimationL( R_VEI_SLOW_MOTION_ANIMATION, frameInterval );
+    }
+
+void CVeiEditVideoContainer::SetRecordedAudioDuration( const TTimeIntervalMicroSeconds& aDuration )
+    {
+    iRecordedAudioDuration = aDuration;
+        
+    if ( (iCursorLocation==ECursorOnTransition) && (CurrentIndex() > 0) )
+        {
+        iVideoCursorPos--;
+        }
+    iInfoDisplay->SetLayout( CVeiTextDisplay::ERecording ); // Name and duration RED
+    iInfoDisplay->SetDuration( iRecordedAudioDuration );
+    }
+
+
+TBool CVeiEditVideoContainer::IsAudioClipCutted()
+    {       
+        TTimeIntervalMicroSeconds audioClipDuration = iMovie.AudioClipInfo( CurrentIndex())->Duration();
+        TTimeIntervalMicroSeconds audioClipCutInTime = iMovie.AudioClipCutInTime( CurrentIndex() );
+        TTimeIntervalMicroSeconds audioClipCutOutTime = iMovie.AudioClipCutOutTime( CurrentIndex() );
+    
+        TTimeIntervalMicroSeconds appendTime(500000);
+        TTimeIntervalMicroSeconds cuttedAudioDuration = ( audioClipCutOutTime.Int64() - audioClipCutInTime.Int64() ) + appendTime.Int64();
+        iInfoDisplay->SetDuration( cuttedAudioDuration );
+
+        iDummyCutBar->SetTotalDuration( audioClipDuration );
+        iDummyCutBar->SetInPoint( audioClipCutInTime );
+        iDummyCutBar->SetOutPoint( audioClipCutOutTime );
+        iDummyCutBar->Dim( EFalse );
+
+        if ( ( audioClipCutOutTime.Int64() - audioClipCutInTime.Int64() ) == audioClipDuration.Int64() )
+            {
+            return EFalse;
+            }
+        else
+            {
+            return ETrue; 
+            }           
+    }
+
+/* Checks if aFilename is belongs to any album. Album name is returned, or KNullDesC
+if aFilename does not belong to album. */
+void CVeiEditVideoContainer::GetAlbumL( const TDesC& aFilename, TDes& aAlbumName ) const
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetAlbumL: in");
+
+    CMGAlbumManager* albumManager = MGAlbumManagerFactory::NewAlbumManagerL();
+    TInt albumCount = albumManager->AlbumCount();
+
+    // Get album Id 
+    for( TInt i=0;i<albumCount;i++ )
+        {
+        CMGAlbumInfo* albumInfo = albumManager->AlbumInfoLC( i );
+        TInt albumId = albumInfo->Id();
+        TInt itemCount = albumInfo->ItemCount();
+
+        TFileName albumName = albumInfo->Name();
+        CleanupStack::PopAndDestroy(albumInfo);
+
+        if ( itemCount > 0 )
+            {
+            TInt itemPos;
+            CDesCArrayFlat* filenameArray = new (ELeave) CDesCArrayFlat( itemCount );
+            CleanupStack::PushL (filenameArray);
+
+            albumManager->GetAlbumFileArrayL( albumId, *filenameArray );
+        
+            TInt isFound = filenameArray->Find( aFilename, itemPos );
+            CleanupStack::PopAndDestroy (filenameArray);
+
+            if ( isFound == KErrNone ) /* filename was found on filenamearray */
+                {
+                delete albumManager;
+                aAlbumName.Append(albumName);
+                LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetAlbumL: out1");
+                return;
+                }
+            }
+        }
+    delete albumManager;
+
+    aAlbumName = KNullDesC;
+    
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetAlbumL: out2");
+    }
+
+
+void CVeiEditVideoContainer::SetBlackScreen( TBool aBlack )
+    {
+    LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::SetBlackScreen: In, aBlack:%d", aBlack);
+
+    iBlackScreen = aBlack;
+
+    // Black backbround for the preview
+    if ( iBlackScreen )
+        {
+        iVideoDisplay->MakeVisible( EFalse );
+        /* Video Display components for transitioin state*/
+        iTransitionDisplayRight->MakeVisible( EFalse );
+        iTransitionDisplayLeft->MakeVisible( EFalse );
+
+        iDummyCutBar->MakeVisible( EFalse );
+        iDummyCutBarLeft->MakeVisible( EFalse );
+
+        /* IconBox */   
+        iEffectSymbols->MakeVisible( EFalse );
+        iInfoDisplay->MakeVisible( EFalse );
+        iArrowsDisplay->MakeVisible( EFalse );
+
+        iHorizontalSlider->MakeVisible( EFalse );
+        iVerticalSlider->MakeVisible( EFalse );
+    
+        if( iCursorLocation == ECursorOnTransition )
+            {
+            iVideoDisplay->StopAnimation();
+            }
+        }
+    else
+        {
+        SetCursorLocation( CursorLocation() );
+        }
+    DrawDeferred();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::SetBlackScreen: Out");
+    }
+
+TInt CVeiEditVideoContainer::SnapshotSize()
+    {
+    TInt sizeEstimate = 0;
+
+    if( iTempVideoInfo )
+        {       
+        TTimeIntervalMicroSeconds playBackPos = PlaybackPositionL();
+        TInt frame = iTempVideoInfo->GetVideoFrameIndexL( playBackPos );
+        sizeEstimate = iTempVideoInfo->VideoFrameSizeL( frame );
+        }
+
+    return sizeEstimate;
+    }
+
+TInt CVeiEditVideoContainer::AudioMixingRatio() const
+    {
+    return iHorizontalSlider->SliderPosition(); 
+    }
+
+
+TInt CVeiEditVideoContainer::Volume() const
+    {
+    return -(iVerticalSlider->SliderPosition());
+    }
+
+//=============================================================================
+void CVeiEditVideoContainer::SetColourToningIcons(TInt /*aIndex*/)
+    {
+    if ( ( iMovie.VideoClipColorEffect( iVideoCursorPos ) ) == EVedColorEffectBlackAndWhite )
+        {
+        iEffectSymbols->SetBlackAndWhiteIconVisibility(ETrue);
+        }
+    else
+        {
+        iEffectSymbols->SetBlackAndWhiteIconVisibility(EFalse);
+        }
+    if ( ( iMovie.VideoClipColorEffect( iVideoCursorPos ) ) == EVedColorEffectToning )
+        {
+        iEffectSymbols->SetColourIconVisibility(ETrue);
+        }
+    else
+        {
+        iEffectSymbols->SetColourIconVisibility(EFalse);
+        }
+    }
+//=======================================================================================================
+void CVeiEditVideoContainer::StartProgressDialogL(const TInt aDialogResId, const TInt aTextResId)
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartProgressDialogL: In");   
+    
+    if (iProgressDialog)
+        {       
+        LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartProgressDialogL: 1");
+        delete iProgressDialog;
+        iProgressDialog = NULL;
+        }
+    
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartProgressDialogL: 2");    
+    
+    iProgressDialog = new (ELeave) CAknProgressDialog( 
+        reinterpret_cast<CEikDialog**>(&iProgressDialog), ETrue );
+    iProgressDialog->PrepareLC(aDialogResId);   
+    iProgressDialog->SetCallback( this );   
+
+                                                        
+    HBufC* stringholder = StringLoader::LoadLC( aTextResId, iEikonEnv );
+    iProgressDialog->SetTextL( *stringholder );
+    CleanupStack::PopAndDestroy(stringholder);
+
+    iProgressDialog->GetProgressInfoL()->SetFinalValue( 100 );
+    iProgressDialog->RunLD();
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartProgressDialogL: Out");  
+    }
+
+//=============================================================================
+void CVeiEditVideoContainer::SetPreviewState(const TPreviewState aNewState)
+    {   
+    LOGFMT3(KVideoEditorLogFile, "CVeiEditVideoContainer::SetPreviewState In, aNewState:%d, iPreviewState:%d, iPreviousPreviewState:%d", aNewState, iPreviewState, iPreviousPreviewState);
+
+    if (EStateGettingFrame == aNewState)
+        {
+        iPreviousPreviewState = iPreviewState;                                  
+        }               
+    iPreviewState = aNewState;
+    iSeeking = EFalse;
+    
+    /*if (EStateTerminating != iPreviewState)
+        {
+        iView.SetEditorState( iView.EditorState() );    
+        }   
+        */
+
+    // Make sure that the pause indicator is drawn immediately
+    if (EStatePaused == iPreviewState)
+        {
+        DrawNow();
+        }
+
+    // While playing, grab the volume keys for adjusting playback volume.
+    // In other states let them pass e.g. to the music player.
+    if(EStatePlaying == aNewState)
+        {
+        if (!iRemConTarget)
+            {
+            // We can ignore the possible error - the if the remote connection
+            // fails, we just won't receive volume keys, which is a minor problem.
+            TRAPD(err, iRemConTarget = CVeiRemConTarget::NewL( *this ) );
+            if (KErrNone != err)
+                {
+                LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::SetPreviewState: CVeiRemConTarget::NewL failed: %d", err);
+                }
+            }
+        }
+    else
+        {
+        delete iRemConTarget;
+        iRemConTarget = NULL;
+        }
+    
+    // : implement #ifdef here to facilitate easy remove of unnecessary stopping    
+    //#ifdef STOP_PLAYER_DURING_GETFRAME
+    if (EStateGettingFrame == aNewState)
+        {   
+        /* :
+         check out on every phone before releasing whether videodisplay should be stopped before starting
+         asynchronous GetFrameL()
+         see how EStateGettingFrame is handled in SetPreviewState 
+         Stopping frees memory and it is needed in memory sensible devices 
+        */
+        //iVideoDisplay->Stop(ETrue);   
+        // SetEditorState is effective because iPreviewState is changed
+        iView.SetEditorState( iView.EditorState() );        
+        }
+    //#endif    
+    }
+
+//=============================================================================
+void CVeiEditVideoContainer::HandleVolumeUpL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeUpL: in");
+
+    iVideoDisplay->AdjustVolumeL( 1 );
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeUpL: out");
+    }
+
+//=============================================================================
+void CVeiEditVideoContainer::HandleVolumeDownL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeDownL: in");
+
+    iVideoDisplay->AdjustVolumeL( -1 );
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeDownL: out");
+    }
+
+//=============================================================================
+void CVeiEditVideoContainer::PrepareForTerminationL()
+    {
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PrepareForTerminationL: in");
+
+    SetPreviewState( EStateTerminating );
+    iVideoDisplay->Stop(ETrue);
+    iScreenLight->Stop();
+
+    LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PrepareForTerminationL: out");
+    }
+
+//=============================================================================
+TInt CVeiEditVideoContainer::AsyncTakeSnapshot(TAny* aThis)
+    {
+    LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::AsyncTakeSnapshot");
+    
+    // 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.
+    CVeiEditVideoContainer* container = static_cast<CVeiEditVideoContainer*>(aThis);
+    TInt err = KErrNone;
+    TRAP(err, container->TakeSnapshotL());
+    LOGFMT( KVideoEditorLogFile, "CVeiEditVideoContainer::AsyncTakeSnapshot 1, err:%d", err);   
+    User::LeaveIfError(err);        
+    return KErrNone;
+    }
+
+//=============================================================================    
+void CVeiEditVideoContainer::CalculateVideoClipRects()
+    {
+    LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::CalculateVideoClipRects: in" );
+    iVideoItemRectArray.Reset();
+    
+    TRect selectedRect; // rect of the highlighted clip
+    TRect videoClipRect; // rect of the video clip in timeline
+    TInt barWidth = iVideoBarBox.Width();
+    TInt64 barDuration = iMovie.Duration().Int64();
+    
+    TInt64 audioDuration(0);
+    if ( (iMovie.AudioClipCount() != 0) && ((iSelectionMode == EModeRecording ) ||
+        (iSelectionMode == EModeRecordingPaused)))
+        {
+        audioDuration = (iMovie.AudioClipEndTime( iMovie.AudioClipCount() - 1 )).Int64();
+        }
+
+    audioDuration+= iRecordedAudioDuration.Int64();
+
+    if ( audioDuration > barDuration )
+        {
+        barDuration = audioDuration;
+        }
+    if ( iRecordedAudioStartTime > barDuration )
+        {
+        barDuration = iRecordedAudioStartTime.Int64();
+        }
+    if (barDuration < 30000000)
+        {
+        barDuration = 30000000;
+        }
+    else if (barDuration < 45000000)
+        {
+        barDuration = 45000000;
+        }
+    else{
+        barDuration = ((barDuration / 30000000) + 1) * 30000000;
+        }
+
+    videoClipRect.iTl.iY = iVideoBarBox.iTl.iY;
+    videoClipRect.iBr.iY = iVideoBarBox.iBr.iY;
+      
+    // calculate the rect of each of the video clip  
+    for (TInt i = 0; i < iMovie.VideoClipCount(); i++ )
+        {
+        videoClipRect.iTl.iX = iVideoBarBox.iTl.iX
+            + static_cast<TInt32>( (iMovie.VideoClipStartTime( i ).Int64() * barWidth ) / barDuration );
+        videoClipRect.iBr.iX = iVideoBarBox.iTl.iX
+            + static_cast<TInt32>( (iMovie.VideoClipEndTime( i ).Int64() * barWidth ) / barDuration )+ 1;
+                
+        if ((iCursorLocation == ECursorOnClip)
+            && (i == CurrentIndex()) && ( iView.EditorState() == CVeiEditVideoView::EEdit ))
+            // the current video clip selected
+            {
+            LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::CalculateVideoClipRects: selected clip" );
+            selectedRect = videoClipRect;
+            selectedRect.Grow( iZoomFactorX,iZoomFactorY );            
+            iVideoItemRectArray.Insert( selectedRect, i );
+            }
+        else
+            {
+            iVideoItemRectArray.Insert( videoClipRect, i );
+            }
+
+        LOGFMT6( KVideoEditorLogFile, "CVeiEditVideoContainer::CalculateVideoClipRects, iVideoItemRectArray.[%d]->Rect(): \
+                                                    (%d,%d,%d,%d), barWidth = %d ", \
+                                                    i,
+                                                    iVideoItemRectArray[i].iTl.iX, 
+                                                    iVideoItemRectArray[i].iTl.iY, 
+                                                    iVideoItemRectArray[i].iBr.iX,
+                                                    iVideoItemRectArray[i].iBr.iY,
+                                                    barWidth );
+        }
+
+    // Calculate the empty rect of the timeline
+    if ( iMovie.VideoClipCount() > 0 )
+        {
+        iEmptyVideoTimeLineRect.iTl = TPoint ( iVideoItemRectArray[ iMovie.VideoClipCount()-1 ].iBr.iX, iVideoBarBox.iTl.iY );
+        iEmptyVideoTimeLineRect.iBr = iVideoBarBox.iBr; 
+        }
+    else
+        {
+        iEmptyVideoTimeLineRect = iVideoBarBox; 
+        }
+
+    LOGFMT4( KVideoEditorLogFile, "CVeiEditVideoContainer::CalculateVideoClipRects, iEmptyVideoTimeLineRect: \
+                                                    (%d,%d,%d,%d) ", \
+                                                    iEmptyVideoTimeLineRect.iTl.iX, 
+                                                    iEmptyVideoTimeLineRect.iTl.iY, 
+                                                    iEmptyVideoTimeLineRect.iBr.iX,
+                                                    iEmptyVideoTimeLineRect.iBr.iY );                                                    
+                    
+    LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::CalculateVideoClipRects: out" );
+    }
+// End of File