/*****************************************************************************
* MediaControlView.h: beos interface
*****************************************************************************
- * Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: MediaControlView.h,v 1.1 2002/08/04 17:23:43 sam Exp $
+ * Copyright (C) 1999, 2000, 2001 the VideoLAN team
+ * $Id$
*
* Authors: Tony Castley <tony@castley.net>
+ * Stephan Aßmus <stippi@yellowbites.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-#define HORZ_SPACE 5.0
-#define VERT_SPACE 5.0
+#ifndef BEOS_MEDIA_CONTROL_VIEW_H
+#define BEOS_MEDIA_CONTROL_VIEW_H
-class TransportButton;
+#include <Box.h>
+#include <Control.h>
+
+class BBitmap;
class PlayPauseButton;
-class MediaSlider;
+class PositionInfoView;
class SeekSlider;
+class TransportButton;
+class VolumeSlider;
class MediaControlView : public BBox
{
-public:
- MediaControlView( BRect frame );
- ~MediaControlView();
-
- virtual void MessageReceived(BMessage *message);
- void SetProgress(uint64 seek, uint64 size);
-
- void SetStatus(int status, int rate);
- void SetEnabled(bool);
- uint32 GetSeekTo();
- uint32 GetVolume();
- sem_id fScrubSem;
- bool fSeeking;
+ public:
+ MediaControlView( intf_thread_t * p_intf, BRect frame );
+ virtual ~MediaControlView();
+
+ // BBox
+ virtual void AttachedToWindow();
+ virtual void FrameResized(float width, float height);
+ virtual void GetPreferredSize(float* width, float* height);
+ virtual void MessageReceived(BMessage* message);
+ virtual void Pulse(); // detect stopped stream
+
+ // MediaControlView
+ void SetProgress( float position );
+
+ void SetStatus(int status, int rate);
+ void SetEnabled(bool enable);
+ void SetAudioEnabled(bool enable);
+ uint32 GetVolume() const;
+ void SetSkippable(bool backward,
+ bool forward);
+ void SetMuted(bool mute);
-private:
- MediaSlider * p_vol;
- SeekSlider * p_seek;
- TransportButton* p_slow;
- PlayPauseButton* p_play;
- TransportButton* p_fast;
- TransportButton* p_stop;
- TransportButton* p_mute;
-
- int current_rate;
- int current_status;
+ private:
+ void _LayoutControls(BRect frame) const;
+ BRect _MinFrame() const;
+ void _LayoutControl(BView* view,
+ BRect frame,
+ bool resizeWidth = false,
+ bool resizeHeight = false) const;
+
+ intf_thread_t * p_intf;
+
+ VolumeSlider* fVolumeSlider;
+ SeekSlider* fSeekSlider;
+ TransportButton* fSkipBack;
+ TransportButton* fSkipForward;
+ TransportButton* fRewind;
+ TransportButton* fForward;
+ PlayPauseButton* fPlayPause;
+ TransportButton* fStop;
+ TransportButton* fMute;
+ PositionInfoView* fPositionInfo;
+
+ int fCurrentRate;
+ int fCurrentStatus;
+ float fBottomControlHeight;
+ BRect fOldBounds;
+ bool fIsEnabled;
+
};
-class MediaSlider : public BSlider
+class SeekSlider : public BControl
{
-public:
- MediaSlider(BRect frame,
- BMessage *message,
- int32 minValue,
- int32 maxValue);
- ~MediaSlider();
- virtual void DrawThumb(void);
+ public:
+ SeekSlider(intf_thread_t * p_intf,
+ BRect frame,
+ const char* name,
+ MediaControlView* owner );
+
+ virtual ~SeekSlider();
+
+ // BControl
+ virtual void AttachedToWindow();
+ virtual void Draw(BRect updateRect);
+ virtual void MouseDown(BPoint where);
+ virtual void MouseMoved(BPoint where, uint32 transit,
+ const BMessage* dragMessage);
+ virtual void MouseUp(BPoint where);
+ virtual void ResizeToPreferred();
+
+ // SeekSlider
+ void SetPosition(float position);
+
+private:
+ int32 _ValueFor(float x) const;
+ void _StrokeFrame(BRect frame,
+ rgb_color left,
+ rgb_color top,
+ rgb_color right,
+ rgb_color bottom);
+
+ intf_thread_t * p_intf;
+ MediaControlView* fOwner;
+ bool fTracking;
};
-
-class SeekSlider : public MediaSlider
+class VolumeSlider : public BControl
{
-public:
- SeekSlider(BRect frame,
- MediaControlView *owner,
- int32 minValue,
- int32 maxValue,
- thumb_style thumbType = B_TRIANGLE_THUMB);
-
- ~SeekSlider();
- uint32 seekTo;
- virtual void MouseDown(BPoint);
- virtual void MouseUp(BPoint pt);
- virtual void MouseMoved(BPoint pt, uint32 c, const BMessage *m);
-private:
- MediaControlView* fOwner;
- bool fMouseDown;
+ public:
+ VolumeSlider(BRect frame,
+ const char* name,
+ int32 minValue,
+ int32 maxValue,
+ BMessage* message = NULL,
+ BHandler* target = NULL);
+
+ virtual ~VolumeSlider();
+
+ // BControl
+ virtual void AttachedToWindow();
+ virtual void SetValue(int32 value);
+ virtual void SetEnabled(bool enable);
+ virtual void Draw(BRect updateRect);
+ virtual void MouseDown(BPoint where);
+ virtual void MouseMoved(BPoint where, uint32 transit,
+ const BMessage* dragMessage);
+ virtual void MouseUp(BPoint where);
+
+ // VolumeSlider
+ bool IsValid() const;
+ void SetMuted(bool mute);
+
+ private:
+ void _MakeBitmaps();
+ void _DimBitmap(BBitmap* bitmap);
+ int32 _ValueFor(float xPos) const;
+
+ BBitmap* fLeftSideBits;
+ BBitmap* fRightSideBits;
+ BBitmap* fKnobBits;
+ bool fTracking;
+ bool fMuted;
+ int32 fMinValue;
+ int32 fMaxValue;
};
+class PositionInfoView : public BView
+{
+ public:
+ PositionInfoView( BRect frame,
+ const char* name,
+ intf_thread_t *p_intf );
+ virtual ~PositionInfoView();
+
+ // BView
+ virtual void Draw( BRect updateRect );
+ virtual void ResizeToPreferred();
+ virtual void GetPreferredSize( float* width,
+ float* height );
+ virtual void Pulse();
+
+ // PositionInfoView
+ enum
+ {
+ MODE_SMALL,
+ MODE_BIG,
+ };
+
+ void SetMode( uint32 mode );
+ void GetBigPreferredSize( float* width,
+ float* height );
+
+ void SetFile( int32 index, int32 size );
+ void SetTitle( int32 index, int32 size );
+ void SetChapter( int32 index, int32 size );
+ void SetTime( int32 seconds );
+ void SetTime( const char* string );
+ private:
+ void _InvalidateContents( uint32 which = 0 );
+ void _MakeString( BString& into,
+ int32 index,
+ int32 maxIndex ) const;
+// void _DrawAlignedString( const char* string,
+// BRect frame,
+// alignment mode = B_ALIGN_LEFT );
+
+ uint32 fMode;
+ int32 fCurrentFileIndex;
+ int32 fCurrentFileSize;
+ int32 fCurrentTitleIndex;
+ int32 fCurrentTitleSize;
+ int32 fCurrentChapterIndex;
+ int32 fCurrentChapterSize;
+
+ int32 fSeconds;
+ BString fTimeString;
+ bigtime_t fLastPulseUpdate;
+ float fStackedWidthCache;
+ float fStackedHeightCache;
+
+ intf_thread_t * p_intf;
+
+};
+#endif // BEOS_MEDIA_CONTROL_VIEW_H