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

Symbian

开发平台:

C/C++

  1. /*
  2. * ============================================================================
  3. *  Name     : CVideoContainer from VideoContainer.h
  4. *  Part of  : Video
  5. *  Created  : 10/14/2003 by Forum Nokia
  6. *  Implementation notes:
  7. *     Initial content was generated by Series 60 AppWizard.
  8. *  Version  :
  9. *  Copyright: Forum Nokia
  10. * ============================================================================
  11. */
  12. #include "VideoContainer.h"
  13. #include <aknlists.h>
  14. #include "FileList.hrh"
  15. #include "FileListEngine.h"
  16. #include "VideoAppUi.h"
  17. #include <video.rsg>
  18. const TInt KClientAreaScreenheight = 160;
  19. const TInt KClientAreaScreenWidth = 176;
  20. /*
  21. -----------------------------------------------------------------------------
  22. void CVideoContainer::ConstructL(const TRect& aRect)
  23. Description: second phase constructor
  24. Comments   :
  25.     Return values: N/A
  26. -----------------------------------------------------------------------------
  27. */
  28. void CVideoContainer::ConstructL(const TRect& aRect)
  29.     {
  30.     CreateWindowL();
  31. iListBox = new( ELeave ) CAknDoubleNumberStyleListBox();
  32. iListBox->SetContainerWindowL( *this );
  33. iListBox->ConstructL( this, EAknListBoxMarkableList);
  34. iListBox->CreateScrollBarFrameL(ETrue);
  35. iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, 
  36.   CEikScrollBarFrame::EAuto);
  37.     
  38. iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
  39.     iListBox->ActivateL();
  40. iAvkonAppUi->AddToStackL( iListBox );
  41. // Create the file list engine and prepare for listing all the files
  42. // in the Nokia video directory
  43. iFileListEngine = new (ELeave) CFileListEngine;
  44.     SetFileList( EFileListVideos, EFileListDate );
  45.     SetRect(aRect);
  46. iVideoRect = Rect();
  47. TPoint point = PositionRelativeToScreen();
  48. iVideoRect.iTl.iX += point.iX;
  49. iVideoRect.iTl.iY += point.iY;
  50. iVideoRect.iBr.iX += point.iX;
  51. iVideoRect.iBr.iY += point.iY;
  52. iVideoRect.Shrink( 1, 1 );
  53.     ActivateL();
  54.     }
  55. /*
  56. -----------------------------------------------------------------------------
  57. CVideoContainer::~CVideoContainer()
  58. Description: destructor
  59. Comments   :
  60.     Return values: N/A
  61. -----------------------------------------------------------------------------
  62. */
  63. CVideoContainer::~CVideoContainer()
  64.     {
  65. if ( iListBox )
  66. iAvkonAppUi->RemoveFromStack(iListBox);
  67. delete iListBox;
  68. delete iFileListEngine;
  69.     }
  70. /*
  71. -----------------------------------------------------------------------------
  72. CVideoContainer::~CVideoContainer()
  73. Description: Called by framework when the view size is changed
  74. Comments   :
  75.     Return values: N/A
  76. -----------------------------------------------------------------------------
  77. */
  78. void CVideoContainer::SizeChanged()
  79.     {
  80. if ( iListBox )
  81. iListBox->SetExtent(TPoint(0,0),TSize(KClientAreaScreenWidth,KClientAreaScreenheight));
  82.     }
  83. /*
  84. -----------------------------------------------------------------------------
  85. TInt CVideoContainer::CountComponentControls() const
  86. Description: Called by framework to return number of controls in the
  87.      container class.
  88. Comments   :
  89.     Return values: Number of the controls in the container
  90. -----------------------------------------------------------------------------
  91. */
  92. TInt CVideoContainer::CountComponentControls() const
  93.     {
  94. if ( iListBox )
  95. return 1;
  96. else
  97. return 0;
  98.     }
  99. /*
  100. -----------------------------------------------------------------------------
  101. CCoeControl* CVideoContainer::ComponentControl(TInt aIndex ) const
  102. Description: Called by framework to control pointers according to index
  103. Comments   :
  104.     Return values: CCoeControl pointer
  105. -----------------------------------------------------------------------------
  106. */
  107. CCoeControl* CVideoContainer::ComponentControl(TInt aIndex ) const
  108.     {
  109.     switch ( aIndex )
  110.         {
  111.         case 0:
  112.             return iListBox;
  113.         default:
  114.             return NULL;
  115.         }
  116.     }
  117. /*
  118. -----------------------------------------------------------------------------
  119. void CVideoContainer::Draw(const TRect& aRect) const
  120. Description: Called by framework to draw the screen
  121. Comments   :
  122.     Return values: N/A
  123. -----------------------------------------------------------------------------
  124. */
  125. void CVideoContainer::Draw(const TRect& aRect) const
  126.     {
  127.     CWindowGc& gc = SystemGc();
  128.     gc.SetPenStyle( CGraphicsContext::ENullPen );
  129.     gc.SetBrushColor( KRgbGray );
  130.     gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
  131.     gc.DrawRect( aRect );
  132.     }
  133. /*
  134. -----------------------------------------------------------------------------
  135. void CVideoContainer::HandleControlEventL(
  136. CCoeControl* aControl,TCoeEvent aEventType )
  137. Description: Called by framework to handle control event
  138. Comments   :
  139.     Return values: N/A
  140. -----------------------------------------------------------------------------
  141. */
  142. void CVideoContainer::HandleControlEventL(
  143.     CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
  144.     {
  145.     }
  146. /*
  147. -----------------------------------------------------------------------------
  148. void CVideoContainer::SetFileList(TInt aDirectory, TInt aSizeDate)
  149. Description: set up filelist. Directory and Size can be changed. See 
  150.  Filelist.hrh for possible values. This function is located in 
  151.  the container and not in the engine, because it activates the 
  152.  listbox.Called by framework to handle control event.
  153. Comments   :
  154.     Return values: N/A
  155. -----------------------------------------------------------------------------
  156. */
  157. void CVideoContainer::SetFileList(TInt aDirectory, TInt aSizeDate)
  158.     {
  159.     // Set the listbox to use the the file list model
  160.     CDesCArray* items = static_cast<CDesCArray*>(iListBox->Model()->ItemTextArray());
  161.     // If there are items, they will be removed here
  162.     if (iFileListEngine->RemoveItems(items)) 
  163.         {
  164.         // This makes changes to the actual listbox
  165.         iListBox->HandleItemRemovalL();  
  166.         }
  167.     // Let's show directory
  168.     iFileListEngine->SetDirectory(aDirectory);  
  169.     // Let's decide whether to show file size or modification date
  170.     iFileListEngine->SetSizeDate(aSizeDate);
  171.     // Do preparations for the FileList
  172.     if(iFileListEngine->StartFileList() == KErrNone)
  173.         {        
  174.         // Create FileList Items in the ListBox
  175.         iFileListEngine->GetFileListItems(items);       
  176.         }
  177.     // Close FileList session
  178.     iFileListEngine->EndFileList();                  
  179.     // Refresh the listbox due to model change
  180. iListBox->HandleItemAdditionL();
  181.     iListBox->SetCurrentItemIndex(0);
  182.     iListBox->DrawNow();
  183.     }
  184. /*
  185. -----------------------------------------------------------------------------
  186. TKeyResponse CVideoContainer::OfferKeyEventL(
  187. const TKeyEvent& aKeyEvent,TEventCode aType)
  188. Description: Called by framework when a key is pressed
  189. Comments   :
  190.     Return values: whether the key has been consumed or not.
  191. -----------------------------------------------------------------------------
  192. */
  193. TKeyResponse CVideoContainer::OfferKeyEventL(
  194.     const TKeyEvent& aKeyEvent,TEventCode aType)
  195.     {
  196.     // See if we have a selection
  197.     TInt code = aKeyEvent.iCode;
  198.     switch( code )
  199.         {
  200. // is navigator button pressed
  201.      case EKeyOK:
  202. {
  203. // During paused/playing state, pressing OK key should not replay 
  204. // the playing video clip
  205. if ( static_cast<CVideoAppUi*>iAvkonAppUi->GetVideoEngine( )->GetEngineState() ==
  206.  EPPlaying || static_cast<CVideoAppUi*>iAvkonAppUi->GetVideoEngine( )->GetEngineState() ==
  207.  EPPaused )
  208.  return EKeyWasConsumed;
  209. TFileName fileName;
  210.             iFileListEngine->GetVideoFilePathAndNameAtPositon(iListBox->CurrentItemIndex(), fileName);
  211. static_cast<CVideoAppUi*>iAvkonAppUi->PlayVideoFileL( fileName );
  212. // Change the menu to "pause" and "Stop"
  213. iCba = CEikButtonGroupContainer::Current();
  214. if( iCba) 
  215. {
  216. iCba->SetCommandSetL( R_VIDEO_PAUSE_STOP );
  217. iCba->DrawNow();
  218. }
  219.             return (EKeyWasConsumed);
  220.             break;
  221. }
  222. case EKeyLeftArrow:
  223. case EKeyRightArrow:
  224. case EKeyUpArrow:
  225. case EKeyDownArrow:
  226. {
  227. // Just in case it refreshes the screen to flicker the screen during 
  228. // playing/paused when the key event is passed to the list box.
  229. if ( static_cast<CVideoAppUi*>iAvkonAppUi->GetVideoEngine( )->GetEngineState() ==
  230.  EPPlaying || static_cast<CVideoAppUi*>iAvkonAppUi->GetVideoEngine( )->GetEngineState() ==
  231.  EPPaused )
  232.  return EKeyWasConsumed;
  233. else
  234. return iListBox->OfferKeyEventL(aKeyEvent, aType);
  235. break;
  236. }
  237.         default:
  238.             // Let Listbox take care of its key handling
  239.             return iListBox->OfferKeyEventL(aKeyEvent, aType);
  240.             break;
  241.         }
  242.     }
  243. /*
  244. -----------------------------------------------------------------------------
  245. void CVideoContainer::GetCurrentVideoFileNameL(TDes &aFileName)
  246. Description: Get the current video file name.
  247. Comments   :
  248.     Return values: N/A
  249. -----------------------------------------------------------------------------
  250. */
  251. void CVideoContainer::GetCurrentVideoFileNameL(TDes &aFileName)
  252. {
  253.     iFileListEngine->GetVideoFilePathAndNameAtPositon(iListBox->CurrentItemIndex(), aFileName);
  254. }
  255. /*
  256. -----------------------------------------------------------------------------
  257. TInt CVideoContainer::GetNumOfItemsInListBox()
  258. Description: Get the total number of items in the listbox
  259. Comments   :
  260.     Return values: number of items in the current list box
  261. -----------------------------------------------------------------------------
  262. */
  263. TInt CVideoContainer::GetNumOfItemsInListBox()
  264. {
  265.     // Set the listbox to use the the file list model
  266.     CDesCArray* items = static_cast<CDesCArray*>(iListBox->Model()->ItemTextArray());
  267. return items->Count();
  268. }