videditor/ManualVideoEditor/src/VeiCutAudioView.cpp
branchRCL_3
changeset 3 e0b5df5c0969
parent 0 951a5db380a0
child 5 4c409de21d23
equal deleted inserted replaced
0:951a5db380a0 3:e0b5df5c0969
     1 /*
       
     2 * Copyright (c) 2010 Ixonos Plc.
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - Initial contribution
       
    11 *
       
    12 * Contributors:
       
    13 * Ixonos Plc
       
    14 *
       
    15 * Description: 
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 // System includes
       
    22 #include <aknviewappui.h>
       
    23 #include <avkon.hrh>
       
    24 #include <manualvideoeditor.rsg>
       
    25 #include <VedAudioClipInfo.h>
       
    26 
       
    27 #include <akntitle.h> 
       
    28 #include <barsread.h>
       
    29 #include <stringloader.h> 
       
    30 #include <aknnotewrappers.h>
       
    31 #include <aknquerydialog.h>
       
    32 #include <aknnavide.h>
       
    33 #include <eikbtgpc.h>
       
    34 #include <eikmenub.h>
       
    35 #include <eikmenup.h>
       
    36 #include <eikprogi.h>
       
    37 #include <apparc.h>
       
    38 #include <aknselectionlist.h>
       
    39 
       
    40 //User includes
       
    41 #include "VeiAppUi.h"
       
    42 #include "VeiCutAudioView.h"
       
    43 #include "VeiCutAudioContainer.h" 
       
    44 #include "ManualVideoEditor.hrh"
       
    45 #include "VeiTimeLabelNavi.h"
       
    46 #include "VideoEditorCommon.h"
       
    47 #include "VeiVideoEditorSettings.h"
       
    48 #include "VeiErrorUi.h"
       
    49 
       
    50 CVeiCutAudioView* CVeiCutAudioView::NewL()
       
    51     {
       
    52     CVeiCutAudioView* self = CVeiCutAudioView::NewLC();
       
    53     CleanupStack::Pop( self );
       
    54 
       
    55     return self;
       
    56     }
       
    57 
       
    58 
       
    59 CVeiCutAudioView* CVeiCutAudioView::NewLC()
       
    60     {
       
    61     CVeiCutAudioView* self = new (ELeave) CVeiCutAudioView();
       
    62     CleanupStack::PushL( self );
       
    63     self->ConstructL();
       
    64     return self;
       
    65     }
       
    66 
       
    67 CVeiCutAudioView::CVeiCutAudioView()
       
    68     {
       
    69     }
       
    70 
       
    71 void CVeiCutAudioView::ConstructL()
       
    72     {
       
    73     BaseConstructL( R_VEI_CUT_AUDIO_VIEW );
       
    74 
       
    75     CEikStatusPane* sp = StatusPane();
       
    76 
       
    77     iNaviPane = (CAknNavigationControlContainer*) sp->ControlL(
       
    78             TUid::Uid(EEikStatusPaneUidNavi));
       
    79 
       
    80     iTimeNavi = CreateTimeLabelNaviL();
       
    81     iTimeNavi->SetMopParent( this );
       
    82 
       
    83     iVolumeNavi = iNaviPane->CreateVolumeIndicatorL(
       
    84             R_AVKON_NAVI_PANE_VOLUME_INDICATOR );
       
    85 
       
    86     iErrorUI = CVeiErrorUI::NewL( *iCoeEnv );   
       
    87     
       
    88     iTimeUpdater = CPeriodic::NewL( CActive::EPriorityLow );
       
    89     iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow );
       
    90     }
       
    91 
       
    92 // ---------------------------------------------------------
       
    93 // CVeiCutAudioView::~CVeiCutAudioView()
       
    94 // ?implementation_description
       
    95 // ---------------------------------------------------------
       
    96 //
       
    97 CVeiCutAudioView::~CVeiCutAudioView()
       
    98     {
       
    99     if ( iContainer )
       
   100         {
       
   101         AppUi()->RemoveFromViewStack( *this, iContainer );
       
   102         delete iContainer;
       
   103         iContainer = 0;
       
   104         }
       
   105     if ( iTimeUpdater )
       
   106         {
       
   107         iTimeUpdater->Cancel();
       
   108         delete iTimeUpdater;
       
   109         }
       
   110     if ( iVolumeHider )
       
   111         {
       
   112         iVolumeHider->Cancel();
       
   113         delete iVolumeHider;
       
   114         }
       
   115 
       
   116     if ( iErrorUI )
       
   117         {
       
   118         delete iErrorUI;
       
   119         }
       
   120 
       
   121     delete iVolumeNavi;
       
   122 
       
   123     delete iTimeNavi;
       
   124     
       
   125     delete iCallBack;
       
   126     }
       
   127 
       
   128 
       
   129 void CVeiCutAudioView::DynInitMenuPaneL( TInt aResourceId,CEikMenuPane* aMenuPane )
       
   130     {
       
   131     TInt state = iContainer->State();
       
   132 
       
   133     if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU_CLEAR_MARKS)
       
   134         {
       
   135         // delet in, out, in & out as necessary.
       
   136 
       
   137         if (iMovie->AudioClipCutInTime(iIndex) <= TTimeIntervalMicroSeconds(0)) 
       
   138             {
       
   139             aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksIn, ETrue);
       
   140             }
       
   141         if (iMovie->AudioClipCutOutTime(iIndex) >= iMovie->AudioClipInfo(iIndex)->Duration() ) 
       
   142             {
       
   143             aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksOut, ETrue);
       
   144             }
       
   145         if (!((iMovie->AudioClipCutOutTime(iIndex) < iMovie->AudioClipInfo(iIndex)->Duration())
       
   146             && (iMovie->AudioClipCutInTime(iIndex) > TTimeIntervalMicroSeconds(0))))
       
   147             {
       
   148             aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksInOut, ETrue);
       
   149             }
       
   150         }
       
   151 
       
   152     if ( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU )
       
   153         {
       
   154         aMenuPane->SetItemDimmed( EVeiCmdCutVideoTakeSnapshot, ETrue );
       
   155 
       
   156         if ( iPopupMenuOpened != EFalse )
       
   157             {
       
   158             aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue );
       
   159             aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewHelp, ETrue );
       
   160             }
       
   161 
       
   162         if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) && 
       
   163             iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo( iIndex )->Duration() ) )
       
   164             {
       
   165             aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewPlayMarked );
       
   166             }
       
   167         if ( state != CVeiCutAudioContainer::EStatePlayingMenuOpen && 
       
   168             state != CVeiCutAudioContainer::EStatePaused )
       
   169             {
       
   170             aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewContinue );
       
   171             }
       
   172         if ( ( state == CVeiCutAudioContainer::EStateStopped ) ||
       
   173              ( state == CVeiCutAudioContainer::EStateStoppedInitial ) )
       
   174             {
       
   175             aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewStop );
       
   176             }
       
   177 
       
   178         if ( ( iMovie->AudioClipCutOutTime( iIndex ) >= iMovie->AudioClipInfo( iIndex )->Duration() ) &&
       
   179             ( iMovie->AudioClipCutInTime( iIndex ) <= TTimeIntervalMicroSeconds( 0 ) ) ) 
       
   180             {
       
   181             aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue );
       
   182             }
       
   183         if ( state == CVeiCutAudioContainer::EStatePaused )
       
   184             {
       
   185             aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue  );
       
   186             }
       
   187         if ( state == CVeiCutAudioContainer::EStateStoppedInitial )
       
   188             {
       
   189             //aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue );
       
   190             //aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue );    
       
   191             }
       
   192         }
       
   193 
       
   194     if ( aResourceId != R_VEI_CUT_VIDEO_VIEW_MENU )
       
   195         return;
       
   196 
       
   197 
       
   198     if ( ( state != CVeiCutAudioContainer::EStateStopped ) && 
       
   199         ( state != CVeiCutAudioContainer::EStateStoppedInitial ) &&
       
   200         ( state != CVeiCutAudioContainer::EStatePaused ) )
       
   201         {
       
   202         aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue  );
       
   203         aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue  );
       
   204         aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue  ); 
       
   205         }
       
   206     else
       
   207         {
       
   208         if ( iContainer->PlaybackPositionL() <= iMovie->AudioClipCutInTime( iIndex ) )
       
   209             {
       
   210             aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue );  
       
   211             }
       
   212         else 
       
   213             {
       
   214             if ( iContainer->PlaybackPositionL() >= iMovie->AudioClipCutOutTime( iIndex ) )
       
   215                 {
       
   216                 aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue );
       
   217                 }
       
   218             }
       
   219         }
       
   220 
       
   221     }
       
   222 
       
   223 TUid CVeiCutAudioView::Id() const
       
   224     {
       
   225     return TUid::Uid( EVeiCutAudioView );
       
   226     }
       
   227 
       
   228 void CVeiCutAudioView::HandleCommandL(TInt aCommand)
       
   229     {   
       
   230     switch ( aCommand )
       
   231         {
       
   232         case EAknSoftkeyOk:
       
   233             {
       
   234             iPopupMenuOpened = ETrue;
       
   235             if (iContainer->State() == CVeiCutAudioContainer::EStatePlaying) 
       
   236                 {
       
   237                 PausePreviewL();
       
   238                 iContainer->SetStateL(CVeiCutAudioContainer::EStatePlayingMenuOpen);
       
   239                 }
       
   240 
       
   241             MenuBar()->TryDisplayMenuBarL();
       
   242             if (iContainer->State() == CVeiCutAudioContainer::EStatePlayingMenuOpen) 
       
   243                 {
       
   244                 iContainer->SetStateL(CVeiCutAudioContainer::EStatePaused);
       
   245                 }
       
   246             iPopupMenuOpened = EFalse;
       
   247             break;
       
   248             }       
       
   249         case EVeiCmdCutVideoViewDone:
       
   250         case EVeiCmdCutVideoViewBack:
       
   251         case EAknSoftkeyBack:
       
   252             {
       
   253             iContainer->CloseStreamL();
       
   254 
       
   255             StopNaviPaneUpdateL();
       
   256 
       
   257             // Activate Edit Video view
       
   258             AppUi()->ActivateLocalViewL( TUid::Uid(EVeiEditVideoView) );
       
   259             break;
       
   260             }
       
   261 
       
   262         case EVeiCmdCutVideoViewMarkIn:
       
   263             {
       
   264             MarkInL();
       
   265             break;
       
   266             }
       
   267         case EVeiCmdCutVideoViewMarkOut:
       
   268             {
       
   269             MarkOutL();
       
   270             break;
       
   271             }
       
   272         case EVeiCmdCutVideoViewClearMarksInOut:
       
   273             {
       
   274             ClearInOutL( ETrue, ETrue );
       
   275             break;
       
   276             }
       
   277         case EVeiCmdCutVideoViewClearMarksIn:
       
   278             {
       
   279             ClearInOutL( ETrue, EFalse );
       
   280             break;
       
   281             }
       
   282         case EVeiCmdCutVideoViewClearMarksOut:
       
   283             {
       
   284             ClearInOutL( EFalse, ETrue );
       
   285             break;
       
   286             }
       
   287         case EVeiCmdCutVideoViewPlayMarked:
       
   288             {
       
   289             STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
       
   290                 SetPauseIconVisibilityL( EFalse );
       
   291             PlayMarkedL();
       
   292             break;
       
   293             }
       
   294         case EVeiCmdCutVideoViewPlay:
       
   295             {
       
   296             STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
       
   297                 SetPauseIconVisibilityL( EFalse );
       
   298             iNaviPane->PushL( *iTimeNavi );
       
   299             
       
   300             PlayPreviewL();
       
   301             break;
       
   302             }
       
   303         case EVeiCmdCutVideoViewStop:
       
   304             {
       
   305             STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
       
   306                 SetPauseIconVisibilityL( EFalse );
       
   307             iNaviPane->PushL( *iTimeNavi );
       
   308             iContainer->StopL();
       
   309             StopNaviPaneUpdateL();
       
   310             break;
       
   311             }
       
   312         case EVeiCmdCutVideoViewContinue:
       
   313             {
       
   314             STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
       
   315                 SetPauseIconVisibilityL( EFalse );
       
   316             iNaviPane->PushL( *iTimeNavi );
       
   317             PlayPreviewL();
       
   318             break;
       
   319             }
       
   320         case EVeiCmdCutVideoVolumeDown:
       
   321             {
       
   322             if ( !iAudioMuted )
       
   323                 {
       
   324                 VolumeDownL();
       
   325                 }
       
   326             break;
       
   327             }
       
   328         case EVeiCmdCutVideoVolumeUp:
       
   329             {
       
   330             if ( !iAudioMuted )
       
   331                 {
       
   332                 VolumeUpL();    
       
   333                 }
       
   334             break;
       
   335             }
       
   336         //
       
   337         // Options->Help
       
   338         //
       
   339         case EVeiCmdCutVideoViewHelp:
       
   340             {
       
   341             // CS Help launching is handled in Video Editor's AppUi.
       
   342             AppUi()->HandleCommandL( EVeiCmdCutVideoViewHelp );
       
   343             break;
       
   344             }
       
   345         default:
       
   346             {
       
   347             AppUi()->HandleCommandL( aCommand );
       
   348             break;
       
   349             }
       
   350         }
       
   351     }
       
   352 
       
   353 
       
   354 void CVeiCutAudioView::DoActivateL(
       
   355    const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
       
   356    const TDesC8& /*aCustomMessage*/)
       
   357     {
       
   358 
       
   359     if (!iContainer)
       
   360         {
       
   361         iContainer = CVeiCutAudioContainer::NewL( AppUi()->ClientRect(), *this, *iErrorUI );
       
   362         iContainer->SetMopParent( this );
       
   363         AppUi()->AddToStackL( *this, iContainer );
       
   364         }
       
   365 
       
   366     CEikStatusPane *statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); 
       
   367     
       
   368     CAknTitlePane* titlePane = (CAknTitlePane*) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) );
       
   369     TResourceReader reader1;
       
   370     iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_CUTAUDIO_VIEW_TITLE_NAME );
       
   371     titlePane->SetFromResourceL( reader1 );
       
   372     CleanupStack::PopAndDestroy(); //reader1
       
   373 
       
   374     iNaviPane->PushL( *iTimeNavi );
       
   375     
       
   376     iAudioMuted = EFalse;
       
   377 
       
   378     STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->
       
   379         SetVolumeIconVisibilityL( ETrue );
       
   380     STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
       
   381             SetPauseIconVisibilityL( EFalse );
       
   382     
       
   383     iContainer->SetInTimeL( iMovie->AudioClipCutInTime( iIndex ) );
       
   384     iContainer->SetOutTimeL( iMovie->AudioClipCutOutTime( iIndex ) );
       
   385     iContainer->SetDuration( iMovie->AudioClipInfo( iIndex )->Duration() );
       
   386     
       
   387     // <testing>
       
   388 /*  TTimeIntervalMicroSeconds time1 = iMovie->AudioClipInfo( iIndex )->Duration();
       
   389     TTimeIntervalMicroSeconds time2 = iMovie->AudioClipCutInTime( iIndex );
       
   390     TTimeIntervalMicroSeconds time3 = iMovie->AudioClipCutOutTime( iIndex );    
       
   391     TTimeIntervalMicroSeconds time4 = iMovie->AudioClipStartTime( iIndex );
       
   392     TTimeIntervalMicroSeconds time5 = iMovie->AudioClipEndTime( iIndex );
       
   393     TTimeIntervalMicroSeconds time6 = iMovie->AudioClipEditedDuration( iIndex );
       
   394     TTimeIntervalMicroSeconds time7(time3.Int64() - time2.Int64());
       
   395     TTimeIntervalMicroSeconds time8(time5.Int64() - time4.Int64());
       
   396 */  // </testing>
       
   397 
       
   398     // Start processing the file asynchronously. This is needed because
       
   399     // CVeiCutAudioContainer::OpenAudioFileL launches a progress dialog.
       
   400     // If it is called syncronously the previous view deactivation has 
       
   401     // not completed, and view shutter dismisses the progress dialog...
       
   402     if (! iCallBack)
       
   403         {       
       
   404         TCallBack cb (CVeiCutAudioView::AsyncOpenAudioFile, this);
       
   405         iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard);
       
   406         }
       
   407     iCallBack->CallBack();
       
   408 
       
   409     iOriginalCutInTime = iMovie->AudioClipCutInTime( iIndex );
       
   410     
       
   411     DrawTimeNaviL();
       
   412 
       
   413     iErrorNmb = 0;      
       
   414     }
       
   415 
       
   416 // ---------------------------------------------------------
       
   417 // CVeiCutAudioView::AsyncOpenAudioFile
       
   418 // ?implementation_description
       
   419 // ---------------------------------------------------------
       
   420 //
       
   421 TInt CVeiCutAudioView::AsyncOpenAudioFile(TAny* aThis)
       
   422     {
       
   423     LOG( KVideoEditorLogFile, "CVeiCutAudioView::AsyncOpenAudioFile");
       
   424 
       
   425     // In the asynchronous version, trap the rest of the functions 
       
   426     // to make sure that the caller's TRequestStatus is always 
       
   427     // completed, also in case of failures.
       
   428     CVeiCutAudioView* view = static_cast<CVeiCutAudioView*>(aThis);
       
   429     TRAPD(err, view->OpenAudioFileL() );
       
   430 
       
   431     if (err)
       
   432         {
       
   433         // Display error message here, otherwise it would be quietly ignored.
       
   434         TBuf<256> unused;
       
   435         view->AppUi()->HandleError(err, SExtendedError(), unused, unused);
       
   436         }
       
   437 
       
   438     return err;
       
   439     }
       
   440 
       
   441 // ---------------------------------------------------------
       
   442 // CVeiCutAudioView::OpenAudioFileL()
       
   443 // ?implementation_description
       
   444 // ---------------------------------------------------------
       
   445 //
       
   446 void CVeiCutAudioView::OpenAudioFileL()
       
   447     {
       
   448     TFileName audioClipFileName = iMovie->AudioClipInfo( iIndex )->FileName();
       
   449     iContainer->OpenAudioFileL( audioClipFileName );
       
   450     }
       
   451 
       
   452 // ---------------------------------------------------------
       
   453 // CVeiCutAudioView::DoDeactivate()
       
   454 // ?implementation_description
       
   455 // ---------------------------------------------------------
       
   456 //
       
   457 void CVeiCutAudioView::DoDeactivate()
       
   458    {  
       
   459     iNaviPane->Pop( iVolumeNavi );
       
   460 
       
   461     if ( iTimeUpdater )
       
   462         {
       
   463         iTimeUpdater->Cancel();
       
   464         }
       
   465     if ( iVolumeHider )
       
   466         {
       
   467         iVolumeHider->Cancel();
       
   468         }
       
   469     if ( iContainer )
       
   470         {
       
   471         iNaviPane->Pop( iTimeNavi );
       
   472         AppUi()->RemoveFromViewStack( *this, iContainer );
       
   473 
       
   474         delete iContainer;
       
   475         iContainer = NULL;
       
   476         }
       
   477 
       
   478     }
       
   479 
       
   480 void CVeiCutAudioView::SetVideoClipAndIndex( CVedMovie& aVideoClip, TInt aIndex )
       
   481     {
       
   482     iMovie = &aVideoClip;
       
   483 
       
   484     iIndex = aIndex;
       
   485     }
       
   486 
       
   487 void CVeiCutAudioView::PlayPreviewL()
       
   488     {
       
   489     iPlayMarked = EFalse;
       
   490     StartNaviPaneUpdateL();
       
   491     iContainer->PlayL();
       
   492     }
       
   493 
       
   494 void CVeiCutAudioView::PausePreviewL()
       
   495     {
       
   496     STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
       
   497         SetPauseIconVisibilityL( ETrue );
       
   498     StopNaviPaneUpdateL();
       
   499     iContainer->PauseL();
       
   500     }
       
   501 
       
   502 void CVeiCutAudioView::UpdateCBAL(TInt aState)
       
   503     {
       
   504     switch (aState)
       
   505         {
       
   506         case CVeiCutAudioContainer::EStateInitializing:
       
   507         case CVeiCutAudioContainer::EStateOpening:
       
   508             {
       
   509             Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY); 
       
   510             break;
       
   511             }
       
   512         case CVeiCutAudioContainer::EStateStoppedInitial:
       
   513             {           
       
   514             if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) ) &&
       
   515                  ( iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo(iIndex)->Duration() ) )
       
   516                 {       
       
   517                 Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK);   
       
   518                 }
       
   519             else
       
   520                 {                                                               
       
   521                 Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_DONE);             
       
   522                 }
       
   523             break;          
       
   524             }
       
   525         case CVeiCutAudioContainer::EStatePaused:
       
   526         case CVeiCutAudioContainer::EStateStopped:
       
   527             {
       
   528             if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) ) &&
       
   529                  ( iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo(iIndex)->Duration() ) )
       
   530                 {       
       
   531                 Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK);   
       
   532                 }
       
   533             else
       
   534                 {                                                               
       
   535                 Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_DONE);             
       
   536                 }
       
   537             break;
       
   538             }
       
   539         case CVeiCutAudioContainer::EStatePlaying:
       
   540             {
       
   541 
       
   542             if ( iContainer->PlaybackPositionL() < iMovie->AudioClipCutInTime( iIndex ) )
       
   543                 {
       
   544                 Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_EMPTY ); 
       
   545                 iMarkState = EMarkStateIn;
       
   546                 }
       
   547             else if ( iContainer->PlaybackPositionL() < iMovie->AudioClipCutOutTime( iIndex ) )
       
   548                 {
       
   549                 Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_OUT ); 
       
   550                 iMarkState = EMarkStateInOut;
       
   551                 }
       
   552             else if ( ( iContainer->PlaybackPositionL() > iMovie->AudioClipCutOutTime( iIndex ) ) && iPlayMarked )
       
   553                 {
       
   554                 iContainer->StopL();
       
   555                 iPlayMarked = EFalse;
       
   556                 }
       
   557             else
       
   558                 {
       
   559                 Cba()->SetCommandSetL( R_VEI_SOFTKEYS_EMPTY_OUT ); 
       
   560                 iMarkState = EMarkStateOut;
       
   561                 }
       
   562             break;
       
   563             }
       
   564         default:
       
   565             {
       
   566             break;  
       
   567             }
       
   568         }
       
   569     Cba()->DrawDeferred();
       
   570     }
       
   571 
       
   572 void CVeiCutAudioView::PlayMarkedL()
       
   573     {
       
   574     TTimeIntervalMicroSeconds audioPlayStartTime;
       
   575     audioPlayStartTime = iMovie->AudioClipCutInTime( iIndex );
       
   576     
       
   577     TTimeIntervalMicroSeconds audioPlayCutOutTime;
       
   578     audioPlayCutOutTime = iMovie->AudioClipCutOutTime( iIndex );
       
   579     
       
   580     if ( !(( audioPlayStartTime.Int64() + 50000 ) > audioPlayCutOutTime.Int64() ) )
       
   581         {
       
   582         iPlayMarked = ETrue;    
       
   583         StartNaviPaneUpdateL();
       
   584     
       
   585         iContainer->PlayL( audioPlayStartTime.Int64() + 1000 );
       
   586         }
       
   587     else    
       
   588         {
       
   589         iContainer->StopL();
       
   590         }
       
   591     }
       
   592 
       
   593 void CVeiCutAudioView::ClearInOutL( TBool aClearIn, TBool aClearOut )
       
   594     {
       
   595     if ( aClearIn ) 
       
   596         {
       
   597         iMovie->AudioClipSetCutInTime( iIndex, TTimeIntervalMicroSeconds( 0 ) );
       
   598         iContainer->SetInTimeL( iMovie->AudioClipCutInTime( iIndex ) );
       
   599         }
       
   600     if ( aClearOut ) 
       
   601         {
       
   602         TTimeIntervalMicroSeconds audioClipOriginalDuration;
       
   603         audioClipOriginalDuration = iMovie->AudioClipInfo( iIndex )->Duration();
       
   604         iMovie->AudioClipSetCutOutTime( iIndex, audioClipOriginalDuration );
       
   605         iContainer->SetOutTimeL( audioClipOriginalDuration );
       
   606         }
       
   607         
       
   608     TTimeIntervalMicroSeconds cutin = iMovie->AudioClipCutInTime( iIndex );
       
   609     TTimeIntervalMicroSeconds cutout = iMovie->AudioClipCutOutTime( iIndex );
       
   610     
       
   611     if ( ( cutin == TTimeIntervalMicroSeconds( 0 ) ) &&
       
   612          ( cutout == iMovie->AudioClipInfo(iIndex)->Duration() ) )
       
   613         {       
       
   614         Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK);   
       
   615         Cba()->DrawDeferred();
       
   616         }   
       
   617     }
       
   618 
       
   619 void CVeiCutAudioView::MarkInL()
       
   620     {
       
   621     STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
       
   622                 SetPauseIconVisibilityL( ETrue );
       
   623     StopNaviPaneUpdateL();
       
   624 /* Check that cut in time is before cut out time */
       
   625     TTimeIntervalMicroSeconds cutOutTime = iMovie->AudioClipCutOutTime( iIndex );
       
   626     TTimeIntervalMicroSeconds cutInTime = iContainer->PlaybackPositionL();
       
   627     if ( cutInTime >= cutOutTime )
       
   628         {
       
   629         cutInTime = cutOutTime.Int64() - 100000;
       
   630         }
       
   631     
       
   632     iMovie->AudioClipSetCutInTime( iIndex, cutInTime );
       
   633     iContainer->MarkedInL();
       
   634     }
       
   635 
       
   636 void CVeiCutAudioView::MarkOutL()
       
   637     {
       
   638     STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )->
       
   639         SetPauseIconVisibilityL( ETrue );
       
   640     StopNaviPaneUpdateL();
       
   641     
       
   642     TTimeIntervalMicroSeconds cutOutTime = iContainer->PlaybackPositionL();
       
   643     TTimeIntervalMicroSeconds cutInTime = iMovie->AudioClipCutInTime( iIndex );
       
   644     if ( cutOutTime <= cutInTime )
       
   645         {
       
   646         cutOutTime = cutInTime.Int64() + 100000;
       
   647         }           
       
   648     
       
   649     //iMovie->AudioClipSetCutOutTime( iIndex, iContainer->PlaybackPositionL() );
       
   650     iMovie->AudioClipSetCutOutTime( iIndex, cutOutTime );   
       
   651     iContainer->MarkedOutL();
       
   652     }
       
   653 
       
   654 void CVeiCutAudioView::MoveStartOrEndMarkL( TTimeIntervalMicroSeconds aPosition, CVeiCutAudioContainer::TCutMark aMarkType )
       
   655 	{
       
   656 	LOG(KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, In");
       
   657 	
       
   658 	StopNaviPaneUpdateL();
       
   659 	
       
   660 	LOG(KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, 2");
       
   661 	
       
   662 	if ( aMarkType == CVeiCutAudioContainer::EStartMark )
       
   663 		{
       
   664 		iMovie->VideoClipSetCutInTime( iIndex, aPosition );
       
   665 		}
       
   666 	else if ( aMarkType == CVeiCutAudioContainer::EEndMark )
       
   667 		{
       
   668 		iMovie->VideoClipSetCutOutTime( iIndex, aPosition );
       
   669 		}		
       
   670 	LOG( KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, Out" );
       
   671 	}
       
   672 
       
   673 
       
   674 TUint CVeiCutAudioView::InPointTime()
       
   675     {
       
   676     if ( !iMovie )
       
   677         {
       
   678         return 0;
       
   679         }
       
   680     else
       
   681         {
       
   682         return (static_cast<TInt32>(iMovie->AudioClipCutInTime(iIndex).Int64() / 1000));
       
   683         }
       
   684     }
       
   685 
       
   686 TUint CVeiCutAudioView::OutPointTime()
       
   687     {
       
   688     if ( !iMovie )
       
   689         {
       
   690         return 0;
       
   691         }
       
   692     else
       
   693         {
       
   694         return (static_cast<TInt32>(iMovie->AudioClipCutOutTime(iIndex).Int64() / 1000));
       
   695         }
       
   696     }
       
   697 
       
   698 CAknNavigationDecorator* CVeiCutAudioView::CreateTimeLabelNaviL()
       
   699     {
       
   700     CVeiTimeLabelNavi* timelabelnavi = CVeiTimeLabelNavi::NewLC();
       
   701     CAknNavigationDecorator* decoratedFolder =
       
   702         CAknNavigationDecorator::NewL(iNaviPane, timelabelnavi, CAknNavigationDecorator::ENotSpecified);
       
   703     CleanupStack::Pop(timelabelnavi);
       
   704     
       
   705     CleanupStack::PushL(decoratedFolder);
       
   706     decoratedFolder->SetContainerWindowL(*iNaviPane);
       
   707     CleanupStack::Pop(decoratedFolder);
       
   708     decoratedFolder->MakeScrollButtonVisible(EFalse);
       
   709 
       
   710     return decoratedFolder;
       
   711     }
       
   712 
       
   713 TInt CVeiCutAudioView::UpdateTimeCallbackL(TAny* aPtr)
       
   714     {
       
   715     CVeiCutAudioView* view = (CVeiCutAudioView*)aPtr;
       
   716 
       
   717     view->UpdateTimeL();
       
   718 
       
   719     return 1;
       
   720     }
       
   721 
       
   722 
       
   723 void CVeiCutAudioView::UpdateTimeL()
       
   724     {
       
   725     DrawTimeNaviL();
       
   726 
       
   727     TTimeIntervalMicroSeconds playbackPos = iContainer->PlaybackPositionL();
       
   728 
       
   729     if (iMarkState == EMarkStateIn) 
       
   730         {
       
   731         if (playbackPos > iMovie->AudioClipCutInTime( iIndex )) 
       
   732             {
       
   733             UpdateCBAL(iContainer->State());
       
   734             }
       
   735         }
       
   736     else if (iMarkState == EMarkStateOut) 
       
   737         {
       
   738         if (playbackPos < iMovie->AudioClipCutOutTime( iIndex )) 
       
   739             {
       
   740             UpdateCBAL(iContainer->State());
       
   741             }
       
   742         }
       
   743     else 
       
   744         {
       
   745         if ((playbackPos < iMovie->AudioClipCutInTime( iIndex )) ||
       
   746             (playbackPos > iMovie->AudioClipCutOutTime( iIndex ))) 
       
   747             {
       
   748             UpdateCBAL(iContainer->State());
       
   749             }
       
   750         }
       
   751     }
       
   752 
       
   753 void CVeiCutAudioView::DrawTimeNaviL()
       
   754     {
       
   755     TTime elapsed( iContainer->PlaybackPositionL().Int64() );
       
   756     TTime total( iContainer->TotalLength().Int64() );
       
   757 
       
   758     TBuf<16> elapsedBuf;
       
   759     TBuf<16> totalBuf;
       
   760 
       
   761     HBufC* dateFormatString;
       
   762 
       
   763     if ( ( total.Int64() / 1000 ) < 3600000 )   // check if time is over 99:59
       
   764         {
       
   765         dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_MIN_SEC );
       
   766         }
       
   767     else
       
   768         {
       
   769         dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_LONG );
       
   770         }
       
   771 
       
   772     elapsed.FormatL(elapsedBuf, *dateFormatString);
       
   773     total.FormatL(totalBuf, *dateFormatString);
       
   774     CleanupStack::PopAndDestroy(dateFormatString);
       
   775            
       
   776     CDesCArrayFlat* strings = new (ELeave) CDesCArrayFlat(2);
       
   777     CleanupStack::PushL(strings);
       
   778     strings->AppendL(elapsedBuf);
       
   779     strings->AppendL(totalBuf);
       
   780     HBufC* stringholder = StringLoader::LoadL(R_VEI_NAVI_TIME, *strings, iEikonEnv);
       
   781     CleanupStack::PopAndDestroy(strings);
       
   782     CleanupStack::PushL(stringholder);
       
   783 
       
   784     STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLabelL(stringholder->Des());
       
   785 
       
   786     CleanupStack::PopAndDestroy(stringholder);
       
   787 
       
   788 
       
   789     /* Prevent the screen light dimming. */
       
   790     if (elapsed.DateTime().Second() == 0 || elapsed.DateTime().Second() == 15 || elapsed.DateTime().Second() == 30 || elapsed.DateTime().Second() == 45)
       
   791         {
       
   792         User::ResetInactivityTime();
       
   793         }
       
   794     }
       
   795 
       
   796 
       
   797 void CVeiCutAudioView::StartNaviPaneUpdateL()
       
   798     {
       
   799     DrawTimeNaviL();
       
   800     if (iTimeUpdater && !iTimeUpdater->IsActive())
       
   801         {
       
   802         iTimeUpdater->Start(500000, 500000, TCallBack(CVeiCutAudioView::UpdateTimeCallbackL, this));
       
   803         }
       
   804     }
       
   805 
       
   806 void CVeiCutAudioView::StopNaviPaneUpdateL()
       
   807     {
       
   808     if (iContainer)
       
   809         {
       
   810         DrawTimeNaviL();
       
   811         }
       
   812     if (iTimeUpdater && iTimeUpdater->IsActive())
       
   813         {
       
   814         iTimeUpdater->Cancel();
       
   815         }
       
   816     }
       
   817 
       
   818 TInt CVeiCutAudioView::HideVolumeCallbackL(TAny* aPtr)
       
   819     {
       
   820     CVeiCutAudioView* view = (CVeiCutAudioView*)aPtr;
       
   821     view->HideVolume();
       
   822     return 0;
       
   823     }
       
   824 
       
   825 void CVeiCutAudioView::HideVolume()
       
   826     {
       
   827     iNaviPane->Pop(iVolumeNavi);
       
   828     }
       
   829 
       
   830 void CVeiCutAudioView::VolumeMuteL()
       
   831     {
       
   832     iContainer->SetVolumeL(-1000);
       
   833     }
       
   834 
       
   835 void CVeiCutAudioView::VolumeDownL()
       
   836     {
       
   837     iContainer->SetVolumeL(-1);
       
   838     TInt volume = iContainer->Volume();
       
   839     if (iVolumeHider->IsActive())
       
   840         {
       
   841         iVolumeHider->Cancel();
       
   842         }
       
   843     if (volume == 0) 
       
   844         {
       
   845         STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->
       
   846             SetVolumeIconVisibilityL( EFalse );
       
   847         HideVolume();
       
   848         volume = 1;
       
   849         return;
       
   850         }
       
   851 
       
   852     iNaviPane->PushL(*iVolumeNavi);
       
   853     iVolumeHider->Start(1000000, 100000, TCallBack(CVeiCutAudioView::HideVolumeCallbackL, this));
       
   854 
       
   855     STATIC_CAST(CAknVolumeControl*, iVolumeNavi->DecoratedControl())->SetValue(volume);
       
   856 
       
   857     STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(ETrue);
       
   858 
       
   859     if (volume < iContainer->MaxVolume())
       
   860         {
       
   861         STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(ETrue);
       
   862         }
       
   863     else
       
   864         {
       
   865         STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(EFalse);
       
   866         }
       
   867     }
       
   868 
       
   869 void CVeiCutAudioView::VolumeUpL()
       
   870     {
       
   871     iContainer->SetVolumeL(1);
       
   872     STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->
       
   873             SetVolumeIconVisibilityL( ETrue );
       
   874 
       
   875     TInt volume = iContainer->Volume();
       
   876     if (iVolumeHider->IsActive())
       
   877         {
       
   878         iVolumeHider->Cancel();
       
   879         }
       
   880     iNaviPane->PushL(*iVolumeNavi);
       
   881     iVolumeHider->Start(1000000, 1000000, TCallBack(CVeiCutAudioView::HideVolumeCallbackL, this));
       
   882 
       
   883     STATIC_CAST(CAknVolumeControl*, iVolumeNavi->DecoratedControl())->SetValue(volume);
       
   884 
       
   885     if (volume > iContainer->MinVolume() + 1)
       
   886         {
       
   887         STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(ETrue);
       
   888         }
       
   889     else
       
   890         {
       
   891         STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(EFalse);
       
   892         }
       
   893 
       
   894     if (volume < iContainer->MaxVolume())
       
   895         {
       
   896         STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(ETrue);
       
   897         }
       
   898     else
       
   899         {
       
   900         STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(EFalse);
       
   901         }
       
   902     
       
   903     }
       
   904 
       
   905 void CVeiCutAudioView::HandleForegroundEventL  ( TBool aForeground )
       
   906     {
       
   907     if ( !aForeground )
       
   908         {
       
   909         // If the application is closing down, calling PauseL could result in 
       
   910         // a callback from the MMF player after the container is already deleted,
       
   911         // causing KERN-EXEC 3
       
   912         if ( static_cast<CVeiAppUi*>( AppUi() )->AppIsOnTheWayToDestruction() )
       
   913             {
       
   914             iContainer->PrepareForTerminationL();
       
   915             }
       
   916         else
       
   917             {
       
   918             iContainer->PauseL();
       
   919             }
       
   920         iNaviPane->Pop( iTimeNavi );
       
   921         }
       
   922     else
       
   923         {
       
   924         iNaviPane->PushL( *iTimeNavi );
       
   925         }
       
   926     }
       
   927 
       
   928 // ---------------------------------------------------------
       
   929 // CVeiCutAudioView::HandleStatusPaneSizeChange()
       
   930 // ---------------------------------------------------------
       
   931 //
       
   932 void CVeiCutAudioView::HandleStatusPaneSizeChange()
       
   933     {
       
   934     if ( iContainer )
       
   935         {
       
   936         iContainer->SetRect( AppUi()->ClientRect() );
       
   937         }
       
   938     }
       
   939 
       
   940 void CVeiCutAudioView::GetAudioVisualizationL()
       
   941     {
       
   942     LOG(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization(), In");
       
   943     CVedAudioClipInfo* audioInfo = NULL;
       
   944     if (iMovie)
       
   945         {       
       
   946         audioInfo = iMovie->AudioClipInfo( iIndex );        
       
   947         if (audioInfo && iContainer)
       
   948             {
       
   949             TInt64 duration = audioInfo->Duration().Int64();
       
   950             TInt resolution = (duration/1000)/KAudioSampleInterval;
       
   951 
       
   952             LOGFMT(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization() 2, calling audioInfo->GetVisualizationL(*iContainer, resolution, 1), where resolution is:%Ld", resolution);
       
   953             audioInfo->GetVisualizationL(*iContainer, resolution, 1);
       
   954             }               
       
   955         }
       
   956 
       
   957     LOG(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization(), Out");
       
   958     }
       
   959 
       
   960 void CVeiCutAudioView::CancelVisualizationL()
       
   961     {
       
   962     CVedAudioClipInfo* audioInfo = NULL;
       
   963     if (iMovie)
       
   964         {       
       
   965         audioInfo = iMovie->AudioClipInfo( iIndex );        
       
   966         }
       
   967     if (audioInfo && iContainer)
       
   968         {       
       
   969         TInt resolution = (audioInfo->Duration().Int64()/1000)/KAudioSampleInterval;    
       
   970         audioInfo->CancelVisualizationL();      
       
   971         }   
       
   972     }
       
   973 
       
   974 void CVeiCutAudioView::HandleResourceChange(TInt aType)
       
   975     {
       
   976     LOGFMT(KVideoEditorLogFile, "CVeiCutAudioView::HandleResourceChange() In, aType:%d", aType);
       
   977     
       
   978     if (KAknsMessageSkinChange == aType)
       
   979         {
       
   980         // Handle skin change in the navi label controls - they do not receive 
       
   981         // it automatically since they are not in the control stack
       
   982         iTimeNavi->DecoratedControl()->HandleResourceChange( aType );
       
   983         iVolumeNavi->DecoratedControl()->HandleResourceChange( aType );
       
   984         }
       
   985     
       
   986     LOG(KVideoEditorLogFile, "CVeiCutAudioView::HandleResourceChange() Out");
       
   987     }
       
   988 
       
   989 // End of File