VideoAppUi.cpp
上传用户:xinrui0099
上传日期:2010-03-05
资源大小:48k
文件大小:15k
源码类别:

Symbian

开发平台:

C/C++

  1. /*
  2. * ============================================================================
  3. *  Name     : CVideoAppUi from VideoAppUi.cpp
  4. *  Part of  : Video
  5. *  Created  : 10/14/2003 by Forum Nokia
  6. *  Implementation notes:
  7. *  Version  :
  8. *  Copyright: Nokia Corporation, 2003
  9. * ============================================================================
  10. */
  11. #include "VideoAppUi.h"
  12. #include "VideoContainer.h" 
  13. #include <Video.rsg>
  14. #include "video.hrh"
  15. #include "VideoEngine.h"
  16. #include "VideoNaviDecoratorTime.h"
  17. #include "VideoFileDetailsDialog.h"
  18. #include <avkon.hrh>
  19. #include <documenthandler.h>
  20. #include <apmstd.h>
  21. #include <aknnavi.h>
  22. #include <aknnavide.h>
  23. #include <stringloader.h>
  24. #include <eikmenup.h>
  25. /*
  26. -----------------------------------------------------------------------------
  27. void CVideoAppUi::ConstructL()
  28. Description: second phase constructor
  29. Comments   :
  30.     Return values: N/A
  31. -----------------------------------------------------------------------------
  32. */
  33. void CVideoAppUi::ConstructL()
  34.     {
  35.     BaseConstructL();
  36.     iAppContainer = new (ELeave) CVideoContainer;
  37.     iAppContainer->SetMopParent( this );
  38.     iAppContainer->ConstructL( ClientRect() );
  39.     AddToStackL( iAppContainer );
  40. iEngine = CVideoEngine::NewL();
  41.     // Show tabs for main views from resources
  42.     CEikStatusPane* sp = StatusPane();
  43.     iNaviPane = (CAknNavigationControlContainer *)sp->ControlL(TUid::Uid(EEikStatusPaneUidNavi));
  44. iTimeNavi =  CreateTimeNaviL();
  45. iNaviPane->PushL( *iTimeNavi );
  46.     // Read time format strings from AVKON resource;
  47.     iMinSecFormatString = 
  48.         iEikonEnv->AllocReadResourceL(R_QTN_TIME_DURAT_MIN_SEC); 
  49.    
  50.     iHourMinSecFormatString = 
  51.         iEikonEnv->AllocReadResourceL(R_QTN_TIME_DURAT_LONG);
  52. iCba = NULL;
  53.     }
  54. /*
  55. -----------------------------------------------------------------------------
  56. CVideoAppUi::~CVideoAppUi()
  57. Description: destructor, free all the resources
  58. Comments   :
  59.     Return values: N/A
  60. -----------------------------------------------------------------------------
  61. */
  62. CVideoAppUi::~CVideoAppUi()
  63.     {
  64.     if ( iAppContainer )
  65.         {
  66.         RemoveFromStack( iAppContainer );
  67.         delete iAppContainer;
  68.         }
  69. delete iEngine;
  70. delete iTimeNavi;
  71.     delete iMinSecFormatString;
  72.     delete iHourMinSecFormatString;
  73.    }
  74. /*
  75. -----------------------------------------------------------------------------
  76. void CVideoAppUi::DynInitMenuPaneL(
  77. TInt aResourceId,CEikMenuPane* aMenuPane)
  78. Description: This function is called by the EIKON framework just before 
  79.  it displays a menu pane. Its default implementation is empty, 
  80.  and by overriding it, the application can set the state of menu 
  81.  items dynamically according to the state of application data.
  82. Comments   :
  83.     Return values: N/A
  84. -----------------------------------------------------------------------------
  85. */
  86. void CVideoAppUi::DynInitMenuPaneL(
  87.     TInt aResourceId,CEikMenuPane* aMenuPane)
  88.     {
  89.     if ( aResourceId == R_VIDEO_MENU )
  90. {
  91. // Check whether the database has been created or not
  92. if ( iEngine->GetEngineState() != EPPlaying )
  93. {
  94. // The video clip is not being played
  95. aMenuPane->SetItemDimmed( EVideoCmdAppStop, ETrue );
  96. aMenuPane->SetItemDimmed( EVideoCmdAppPause, ETrue );
  97. }
  98. // If there is no item in the list box, hide the play, docplay
  99. // and file info menu items
  100. if ( !iAppContainer->GetNumOfItemsInListBox() )
  101. {
  102. aMenuPane->SetItemDimmed( EVideoCmdAppDocFileInfo, ETrue );
  103. aMenuPane->SetItemDimmed( EVideoCmdAppDocPlay, ETrue );
  104. aMenuPane->SetItemDimmed( EVideoCmdAppPlay, ETrue );
  105. }
  106. }
  107.     }
  108. /*
  109. -----------------------------------------------------------------------------
  110. TKeyResponse CVideoAppUi::HandleKeyEventL(
  111. const TKeyEvent& aKeyEvent,TEventCode aType)
  112. Description: takes care of key event handling
  113. Comments   :
  114.     Return values: N/A
  115. -----------------------------------------------------------------------------
  116. */
  117. TKeyResponse CVideoAppUi::HandleKeyEventL(
  118.     const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/)
  119.     {
  120.     return EKeyWasNotConsumed;
  121.     }
  122. /*
  123. -----------------------------------------------------------------------------
  124. void CVideoAppUi::HandleCommandL(TInt aCommand)
  125. Description: takes care of command handling
  126. Comments   :
  127.     Return values: N/A
  128. -----------------------------------------------------------------------------
  129. */
  130. void CVideoAppUi::HandleCommandL(TInt aCommand)
  131.     {
  132.     switch ( aCommand )
  133.         {
  134. case EAknSoftkeyExit:
  135.         case EAknSoftkeyBack:
  136.         case EEikCmdExit:
  137.             {
  138.             Exit();
  139.             break;
  140.             }
  141.        
  142. // Play command is selected
  143. case EVideoCmdAppPlay:
  144. {
  145. DoPlayL();
  146. break;
  147. }
  148.         // Stop command is selected
  149. case EVideoCmdAppStop:
  150. {
  151. DoStopL();
  152. break;
  153. }
  154.         
  155.         // Pause command is selected
  156. case EVideoCmdAppPause:
  157. {
  158. DoPauseL();
  159. break;
  160. }
  161. // DocPlay command is selected
  162. case EVideoCmdAppDocPlay:
  163. {
  164. DoDocPlayL();
  165. break;
  166. }
  167.         // File info command is selected
  168. case EVideoCmdAppDocFileInfo:
  169. {
  170. DoGetFileInfoL();
  171. break;
  172. }
  173. // Continuer command is selected
  174. case EVideoCmdAppContinue:
  175. {
  176. DoResumeL();
  177. break;
  178. }
  179.         // Return command is selected
  180. case EVideoCmdAppReturn:
  181. {
  182. DoStopL();
  183. break;
  184. }
  185.         default:
  186.             break;      
  187.         }
  188.     }
  189. /*
  190. -----------------------------------------------------------------------------
  191. void CVideoAppUi::DoPlayL()
  192. Description: Call engine to play a video clip
  193. Comments   :
  194.     Return values: N/A
  195. -----------------------------------------------------------------------------
  196. */
  197. void CVideoAppUi::DoPlayL()
  198. {
  199. // Set the file name first
  200. TFileName fileName;
  201. iAppContainer->GetCurrentVideoFileNameL( fileName );
  202. // Play the video file
  203. PlayVideoFileL( fileName );
  204. // We need change the memu to something else "Pause" and "Stop".
  205. iCba = CEikButtonGroupContainer::Current();
  206. if( iCba) 
  207. {
  208. iCba->SetCommandSetL( R_VIDEO_PAUSE_STOP );
  209. iCba->DrawNow();
  210. }
  211. }
  212. /*
  213. -----------------------------------------------------------------------------
  214. void CVideoAppUi::DoResumeL()
  215. Description: Resumes a paused video clip
  216. Comments   :
  217.     Return values: N/A
  218. -----------------------------------------------------------------------------
  219. */
  220. void CVideoAppUi::DoResumeL()
  221. {
  222. if ( iEngine->GetEngineState() != EPPaused )
  223. return;
  224. iEngine->DoPlayL();
  225. // We need change the memu to something else "Pause" and "Stop".
  226. iCba = CEikButtonGroupContainer::Current();
  227. if( iCba) 
  228. {
  229. iCba->SetCommandSetL( R_VIDEO_PAUSE_STOP );
  230. iCba->DrawNow();
  231. }
  232. }
  233. /*
  234. -----------------------------------------------------------------------------
  235. void CVideoAppUi::PlayVideoFileL(TDesC &aFileName)
  236. Description: Play a video file
  237. Comments   :
  238.     Return values: N/A
  239. -----------------------------------------------------------------------------
  240. */
  241. void CVideoAppUi::PlayVideoFileL(TDesC &aFileName)
  242. {
  243. // Set the file name first
  244. iEngine->SetNewFileL( aFileName );
  245. // Set time navi pane to "Loading...."
  246. _LIT( KLoading, "Loading..." );
  247. SetNaviLabelL( KLoading );
  248. // Init the controller
  249. DoInitControllerL();
  250. }
  251. /*
  252. -----------------------------------------------------------------------------
  253. void CVideoAppUi::DoStopL()
  254. Description: Stop a playing video file
  255. Comments   :
  256.     Return values: N/A
  257. -----------------------------------------------------------------------------
  258. */
  259. void CVideoAppUi::DoStopL()
  260. {
  261. SetNaviLabelL( KNullDesC );
  262. iEngine->DoStop();
  263. iCba = CEikButtonGroupContainer::Current();
  264. if( iCba) 
  265. {
  266. iCba->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_EXIT );
  267. iCba->DrawNow();
  268. }
  269. // Refresh the List window.
  270. iAppContainer->DrawNow();
  271. }
  272. /*
  273. -----------------------------------------------------------------------------
  274. void CVideoAppUi::InitControllerCompletedL(TInt aError )
  275. Description: It is called when the controller is initialized
  276. Comments   :
  277.     Return values: N/A
  278. -----------------------------------------------------------------------------
  279. */
  280. void CVideoAppUi::InitControllerCompletedL(TInt /*aError*/ )
  281.     {
  282.     // play it
  283. iEngine->DoPlayL();
  284.     }
  285. /*
  286. -----------------------------------------------------------------------------
  287. void CVideoAppUi::PlayCompletedL(TInt aError )
  288. Description: called after a video has been completed
  289. Comments   :
  290.     Return values: N/A
  291. -----------------------------------------------------------------------------
  292. */
  293. void CVideoAppUi::PlayCompletedL(TInt /*aError*/)
  294.     {
  295. // The play has been completed, we need to refresh the display now.
  296. iAppContainer->DrawNow();
  297. SetNaviLabelL( KNullDesC );
  298. iCba = CEikButtonGroupContainer::Current();
  299. if( iCba) 
  300. {
  301. iCba->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_EXIT );
  302. iCba->DrawNow();
  303. }
  304.     }
  305. /*
  306. -----------------------------------------------------------------------------
  307. void CVideoAppUi::DoInitControllerL()
  308. Description: Initialize the video engine
  309. Comments   :
  310.     Return values: N/A
  311. -----------------------------------------------------------------------------
  312. */
  313. void CVideoAppUi::DoInitControllerL()
  314. {
  315.     if ( iAppContainer )
  316.         {
  317.         TRect tmp  = iAppContainer->VideoRect();
  318.         iEngine->InitControllerL( this, iAppContainer->ClientWsSession(), 
  319.                       iAppContainer->ScreenDevice(),
  320.                                   iAppContainer->ClientWindow(), tmp, tmp );
  321.         }
  322. }
  323. /*
  324. -----------------------------------------------------------------------------
  325. void CVideoAppUi::DoPauseL()
  326. Description: Pause a playing video clip
  327. Comments   :
  328.     Return values: N/A
  329. -----------------------------------------------------------------------------
  330. */
  331. void CVideoAppUi::DoPauseL()
  332. {
  333. iEngine->DoPauseL();
  334. // Change the CBA to "continue" and "stop"
  335. iCba = CEikButtonGroupContainer::Current();
  336. if( iCba) 
  337. {
  338. iCba->SetCommandSetL( R_VIDEO_CONTINUE_RETURN );
  339. iCba->DrawNow();
  340. }
  341. }
  342. /*
  343. -----------------------------------------------------------------------------
  344. void CVideoAppUi::DoDocPlayL()
  345. Description: Launch a video player using a document handler
  346. Comments   :
  347.     Return values: N/A
  348. -----------------------------------------------------------------------------
  349. */
  350. void CVideoAppUi::DoDocPlayL()
  351. {
  352.     TDataType data = TDataType( KNullUid );
  353. // Set the file name first
  354. TFileName fileName;
  355. iAppContainer->GetCurrentVideoFileNameL( fileName );
  356. iEngine->DocumentHandlerL().OpenFileEmbeddedL( fileName, data );
  357. }
  358. /*
  359. -----------------------------------------------------------------------------
  360. CAknNavigationDecorator* CVideoAppUi::CreateTimeNaviL()
  361. Description: Create a Navi pane to show the time progress.
  362. Comments   :
  363.     Return values: N/A
  364. -----------------------------------------------------------------------------
  365. */
  366. CAknNavigationDecorator* CVideoAppUi::CreateTimeNaviL()
  367. {
  368.     CVideoNaviDecoratorTime* timeNavi = CVideoNaviDecoratorTime::NewL();
  369.     CleanupStack::PushL(timeNavi);
  370.     CAknNavigationDecorator* decoratedFolder =
  371.         CAknNavigationDecorator::NewL( iNaviPane, timeNavi, 
  372.                                  CAknNavigationDecorator::ENotSpecified );
  373.     CleanupStack::Pop(); // timeNavi, decoratedFolder owns it now.
  374.     
  375.     CleanupStack::PushL( decoratedFolder );
  376.     decoratedFolder->SetContainerWindowL( *iNaviPane );
  377.     timeNavi->SetContainerWindowL( *decoratedFolder);
  378.     CleanupStack::Pop(); // decoratedFolder
  379.         
  380.     decoratedFolder->MakeScrollButtonVisible( EFalse );
  381.     return decoratedFolder;
  382. }
  383. /*
  384. -----------------------------------------------------------------------------
  385. void CVideoAppUi::SetNaviLabelL(TDesC &aLabel)
  386. Description: Set the text for the time Navi pane
  387. Comments   :
  388.     Return values: N/A
  389. -----------------------------------------------------------------------------
  390. */
  391. void CVideoAppUi::SetNaviLabelL(const TDesC &aLabel)
  392. {
  393.     CVideoNaviDecoratorTime* timeNavi = 
  394.         static_cast<CVideoNaviDecoratorTime*>(iTimeNavi->DecoratedControl());
  395. timeNavi->SetLabelL( aLabel);
  396. }
  397. /*
  398. -----------------------------------------------------------------------------
  399. void CVideoAppUi::DoGetFileInfoL()
  400. Description: Get the video file information
  401. Comments   :
  402.     Return values: N/A
  403. -----------------------------------------------------------------------------
  404. */
  405. void CVideoAppUi::DoGetFileInfoL()
  406. {
  407.     CVideoFileDetailsDialog* dlg = CVideoFileDetailsDialog::NewL();
  408. TFileName fileName;
  409. iAppContainer->GetCurrentVideoFileNameL( fileName );
  410. dlg->ExecuteLD( fileName);
  411. }
  412. /*
  413. -----------------------------------------------------------------------------
  414. CVideoEngine* CVideoAppUi::GetVideoEngine()
  415. Description: Get the video engine
  416. Comments   :
  417.     Return values: N/A
  418. -----------------------------------------------------------------------------
  419. */
  420. CVideoEngine* CVideoAppUi::GetVideoEngine()
  421. {
  422. return iEngine;
  423. }
  424. /*
  425. -----------------------------------------------------------------------------
  426. void CVideoAppUi::PlaybackPositionChangedL(TInt64 aPlaybackPosInSeconds, 
  427.   TInt64 aTotalLengthInSeconds)
  428. Description: Set the play back time poistion (play progress)
  429. Comments   :
  430.     Return values: N/A
  431. -----------------------------------------------------------------------------
  432. */
  433. void CVideoAppUi::PlaybackPositionChangedL(TInt64 aPlaybackPosInSeconds, TInt64 aTotalLengthInSeconds)
  434.     {
  435.     
  436.     TTime posTime = TTime( aPlaybackPosInSeconds*KMPOneSecond );
  437.     TTime durTime = TTime( aTotalLengthInSeconds*KMPOneSecond );
  438.     TBuf<16> pos;
  439.     TBuf<16> dur;
  440.     if (aTotalLengthInSeconds > 0 && aTotalLengthInSeconds < KOneHourInSeconds)
  441.        {
  442.        // Format time to user readable format. (min:sec) 
  443.        posTime.FormatL(pos, *iMinSecFormatString);
  444.        durTime.FormatL(dur, *iMinSecFormatString);     
  445.        }
  446.     else
  447.        {
  448.        // Format time to user readable format. (hour:min:sec)
  449.        posTime.FormatL(pos, *iHourMinSecFormatString);
  450.        aTotalLengthInSeconds = 0;
  451.        }
  452.                 
  453.     // if duration greated than 0, show postion in 00:00/00:00 format
  454.     if (aTotalLengthInSeconds > 0)
  455.         {
  456.         CDesCArrayFlat* strings = new CDesCArrayFlat(2);
  457.         CleanupStack::PushL(strings);
  458.         strings->AppendL(pos); //First string (position)
  459.         strings->AppendL(dur); //Second string (duration)
  460.         HBufC* stringholder = StringLoader::LoadLC(R_VIDEO_NAVI_TIME,*strings,iEikonEnv);
  461.         static_cast<CVideoNaviDecoratorTime*> (iTimeNavi->DecoratedControl())->SetLabelL(*stringholder);
  462.         CleanupStack::PopAndDestroy(2); // strings & stringholder
  463.         }    
  464.     else // show position in 00:00:00 format
  465.         {
  466.         static_cast<CVideoNaviDecoratorTime*>(iTimeNavi->DecoratedControl())->SetLabelL(pos);
  467.         }
  468.     }