xref: /haiku/src/apps/mediaplayer/interface/TransportControlGroup.h (revision 83b1a68c52ba3e0e8796282759f694b7fdddf06d)
1 /*
2  * Copyright 2006-2010 Stephan Aßmus <superstippi@gmx.de>
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 #ifndef TRANSPORT_CONTROL_GROUP_H
6 #define TRANSPORT_CONTROL_GROUP_H
7 
8 
9 // NOTE: Based on my code in the BeOS interface for the VLC media player
10 // that I did during the VLC 0.4.3 - 0.4.6 times. Code not written by me
11 // removed. -Stephan Aßmus
12 
13 
14 #include <GroupView.h>
15 
16 
17 class BShape;
18 class DurationView;
19 class PeakView;
20 class PlayPauseButton;
21 class PositionToolTip;
22 class SeekSlider;
23 class SymbolButton;
24 class VolumeSlider;
25 
26 enum {
27 	SKIP_BACK_ENABLED		= 1 << 0,
28 	SEEK_BACK_ENABLED		= 1 << 1,
29 	PLAYBACK_ENABLED		= 1 << 2,
30 	SEEK_FORWARD_ENABLED	= 1 << 3,
31 	SKIP_FORWARD_ENABLED	= 1 << 4,
32 	VOLUME_ENABLED			= 1 << 5,
33 	SEEK_ENABLED			= 1 << 6,
34 };
35 
36 
37 class TransportControlGroup : public BGroupView {
38 public:
39 								TransportControlGroup(BRect frame,
40 									bool useSkipButtons, bool usePeakView,
41 									bool useWindButtons);
42 	virtual						~TransportControlGroup();
43 
44 	// BView interface
45 	virtual	void				AttachedToWindow();
46 	virtual	void				GetPreferredSize(float* width, float* height);
47 	virtual	void				MessageReceived(BMessage* message);
48 
49 	// TransportControlGroup
50 	virtual	uint32				EnabledButtons();
51 	virtual	void				TogglePlaying();
52 	virtual	void				Stop();
53 	virtual	void				Rewind();
54 	virtual	void				Forward();
55 	virtual	void				SkipBackward();
56 	virtual	void				SkipForward();
57 	virtual	void				VolumeChanged(float value);
58 	virtual	void				ToggleMute();
59 	virtual	void				PositionChanged(float value);
60 
61 			void				SetEnabled(uint32 whichButtons);
62 
63 			void				SetPlaybackState(uint32 state);
64 			void				SetSkippable(bool backward, bool forward);
65 
66 			void				SetAudioEnabled(bool enable);
67 			void				SetMuted(bool mute);
68 
69 			void				SetVolume(float value);
70 			void				SetAudioChannelCount(int32 count);
71 			void				SetPosition(float value, bigtime_t position,
72 									bigtime_t duration);
73 			float				Position() const;
74 
75 			PeakView*			GetPeakView() const
76 									{ return fPeakView; }
77 
78 			void				SetDisabledString(const char* string);
79 			void				SetSymbolScale(float scale);
80 
81 private:
82 			void				_TogglePlaying();
83 			void				_Stop();
84 			void				_Rewind();
85 			void				_Forward();
86 			void				_SkipBackward();
87 			void				_SkipForward();
88 			void				_UpdateVolume();
89 			void				_ToggleMute();
90 			void				_UpdatePosition();
91 
92 			float				_LinearToExponential(float db);
93 			float				_ExponentialToLinear(float db);
94 			float				_DbToGain(float db);
95 			float				_GainToDb(float gain);
96 
97 			BShape*				_CreateSkipBackwardsShape(float height) const;
98 			BShape*				_CreateSkipForwardShape(float height) const;
99 			BShape*				_CreateRewindShape(float height) const;
100 			BShape*				_CreateForwardShape(float height) const;
101 			BShape*				_CreatePlayShape(float height) const;
102 			BShape*				_CreatePauseShape(float height) const;
103 			BShape*				_CreateStopShape(float height) const;
104 			BShape*				_CreateSpeakerShape(float height) const;
105 
106 private:
107 			SeekSlider*			fSeekSlider;
108 			DurationView*		fDurationView;
109 			PositionToolTip*	fPositionToolTip;
110 			PeakView*			fPeakView;
111 			VolumeSlider*		fVolumeSlider;
112 
113 			SymbolButton*		fSkipBack;
114 			SymbolButton*		fSkipForward;
115 			SymbolButton*		fRewind;
116 			SymbolButton*		fForward;
117 			PlayPauseButton*	fPlayPause;
118 			SymbolButton*		fStop;
119 			SymbolButton*		fMute;
120 
121 			BGroupLayout*		fSeekLayout;
122 			BGroupLayout*		fControlLayout;
123 
124 			float				fSymbolScale;
125 			uint32				fLastEnabledButtons;
126 };
127 
128 #endif	// TRANSPORT_CONTROL_GROUP_H
129