MediaControlView.h
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:6k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * MediaControlView.h: beos interface
  3.  *****************************************************************************
  4.  * Copyright (C) 1999, 2000, 2001 VideoLAN
  5.  * $Id: MediaControlView.h 8449 2004-08-17 20:55:55Z titer $
  6.  *
  7.  * Authors: Tony Castley <tony@castley.net>
  8.  *          Stephan Aßmus <stippi@yellowbites.com>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  23.  *****************************************************************************/
  24. #ifndef BEOS_MEDIA_CONTROL_VIEW_H
  25. #define BEOS_MEDIA_CONTROL_VIEW_H
  26. #include <Box.h>
  27. #include <Control.h>
  28. class BBitmap;
  29. class PlayPauseButton;
  30. class PositionInfoView;
  31. class SeekSlider;
  32. class TransportButton;
  33. class VolumeSlider;
  34. class MediaControlView : public BBox
  35. {
  36.  public:
  37. MediaControlView( intf_thread_t * p_intf, BRect frame );
  38. virtual ~MediaControlView();
  39. // BBox
  40. virtual void AttachedToWindow();
  41. virtual void FrameResized(float width, float height);
  42. virtual void GetPreferredSize(float* width, float* height);
  43. virtual void MessageReceived(BMessage* message);
  44. virtual void Pulse(); // detect stopped stream
  45. // MediaControlView
  46. void SetProgress( float position );
  47. void SetStatus(int status, int rate); 
  48. void SetEnabled(bool enable);
  49. void SetAudioEnabled(bool enable);
  50. uint32 GetVolume() const;
  51. void SetSkippable(bool backward,
  52.  bool forward);
  53. void SetMuted(bool mute);
  54.     
  55.  private:
  56. void _LayoutControls(BRect frame) const;
  57. BRect _MinFrame() const;
  58. void _LayoutControl(BView* view,
  59.    BRect frame,
  60.    bool resizeWidth = false,
  61.    bool resizeHeight = false) const;
  62. intf_thread_t *     p_intf;
  63. VolumeSlider* fVolumeSlider;
  64. SeekSlider* fSeekSlider;
  65. TransportButton* fSkipBack;
  66. TransportButton* fSkipForward;
  67. TransportButton* fRewind;
  68. TransportButton* fForward;
  69. PlayPauseButton* fPlayPause;
  70. TransportButton* fStop;
  71. TransportButton* fMute;
  72. PositionInfoView*   fPositionInfo;
  73. int fCurrentRate;
  74. int fCurrentStatus;
  75. float fBottomControlHeight;
  76. BRect fOldBounds;
  77. bool                fIsEnabled;
  78. };
  79. class SeekSlider : public BControl
  80. {
  81.  public:
  82. SeekSlider(intf_thread_t * p_intf,
  83.            BRect frame,
  84.    const char* name,
  85.    MediaControlView* owner );
  86. virtual ~SeekSlider();
  87. // BControl
  88. virtual void AttachedToWindow();
  89. virtual void Draw(BRect updateRect);
  90. virtual void MouseDown(BPoint where);
  91. virtual void MouseMoved(BPoint where, uint32 transit,
  92.    const BMessage* dragMessage);
  93. virtual void MouseUp(BPoint where);
  94. virtual void ResizeToPreferred();
  95. // SeekSlider
  96. void SetPosition(float position);
  97. private:
  98. int32 _ValueFor(float x) const;
  99. void _StrokeFrame(BRect frame,
  100.  rgb_color left,
  101.  rgb_color top,
  102.  rgb_color right,
  103.  rgb_color bottom);
  104.             intf_thread_t     * p_intf;
  105. MediaControlView* fOwner;
  106. bool fTracking;
  107. };
  108. class VolumeSlider : public BControl
  109. {
  110.  public:
  111. VolumeSlider(BRect frame,
  112.  const char* name,
  113.  int32 minValue,
  114.  int32 maxValue,
  115.  BMessage* message = NULL,
  116.  BHandler* target = NULL);
  117. virtual ~VolumeSlider();
  118. // BControl
  119. virtual void AttachedToWindow();
  120. virtual void SetValue(int32 value);
  121. virtual void SetEnabled(bool enable);
  122. virtual void Draw(BRect updateRect);
  123. virtual void MouseDown(BPoint where);
  124. virtual void MouseMoved(BPoint where, uint32 transit,
  125.    const BMessage* dragMessage);
  126. virtual void MouseUp(BPoint where);
  127. // VolumeSlider
  128. bool IsValid() const;
  129. void SetMuted(bool mute);
  130.  private:
  131. void _MakeBitmaps();
  132. void _DimBitmap(BBitmap* bitmap);
  133. int32 _ValueFor(float xPos) const;
  134. BBitmap* fLeftSideBits;
  135. BBitmap* fRightSideBits;
  136. BBitmap* fKnobBits;
  137. bool fTracking;
  138. bool fMuted;
  139. int32 fMinValue;
  140. int32 fMaxValue;
  141. };
  142. class PositionInfoView : public BView
  143. {
  144.  public:
  145. PositionInfoView( BRect frame,
  146.   const char* name,
  147.   intf_thread_t *p_intf );
  148. virtual ~PositionInfoView();
  149. // BView
  150. virtual void Draw( BRect updateRect );
  151. virtual void ResizeToPreferred();
  152. virtual void GetPreferredSize( float* width,
  153.   float* height );
  154. virtual void Pulse();
  155. // PositionInfoView
  156. enum
  157. {
  158. MODE_SMALL,
  159. MODE_BIG,
  160. };
  161. void SetMode( uint32 mode );
  162. void GetBigPreferredSize( float* width,
  163.  float* height );
  164. void SetFile( int32 index, int32 size );
  165. void SetTitle( int32 index, int32 size );
  166. void SetChapter( int32 index, int32 size );
  167. void SetTime( int32 seconds );
  168. void SetTime( const char* string );
  169.  private:
  170. void _InvalidateContents( uint32 which = 0 );
  171. void _MakeString( BString& into,
  172.  int32 index,
  173.  int32 maxIndex ) const;
  174. // void _DrawAlignedString( const char* string,
  175. // BRect frame,
  176. // alignment mode = B_ALIGN_LEFT );
  177. uint32 fMode;
  178. int32 fCurrentFileIndex;
  179. int32 fCurrentFileSize;
  180. int32 fCurrentTitleIndex;
  181. int32 fCurrentTitleSize;
  182. int32 fCurrentChapterIndex;
  183. int32 fCurrentChapterSize;
  184. int32 fSeconds;
  185. BString fTimeString;
  186. bigtime_t fLastPulseUpdate;
  187. float fStackedWidthCache;
  188. float fStackedHeightCache;
  189. intf_thread_t *     p_intf;
  190. };
  191. #endif // BEOS_MEDIA_CONTROL_VIEW_H