|
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 |