/*******************************************************************************
/
/	File:			ChannelSlider.h
/
/   Description:    BChannelSlider implements a slider which can have a number
/					of (on-screen) related values. A typical use is for a stereo
/					volume control.
/
/	Copyright 1998-99, Be Incorporated, All Rights Reserved
/
*******************************************************************************/

#if !defined(_CHANNEL_SLIDER_H)
#define _CHANNEL_SLIDER_H

#include <ChannelControl.h>

class BChannelSlider :
	public BChannelControl
{
public:
							BChannelSlider(
									BRect area,
									const char * name,
									const char * label,
									BMessage * model,
									int32 channels = 1,
									uint32 resize = B_FOLLOW_LEFT | B_FOLLOW_TOP,
									uint32 flags = B_WILL_DRAW);
							BChannelSlider(
									BMessage * from);
virtual						~BChannelSlider();
static	BArchivable *		Instantiate(
									BMessage * from);
virtual	status_t			Archive(
									BMessage * into,
									bool deep = true) const;

virtual	int32				MaxChannelCount() const;
virtual	bool				SupportsIndividualLimits() const;

virtual	void 				Draw(
									BRect area);
virtual	void				MouseDown(
									BPoint where);
virtual void				MouseUp(
									BPoint pt);
virtual void				MouseMoved(
									BPoint pt,
									uint32 code,
									const BMessage * message);
virtual	void				KeyDown(
									const char * bytes,
									int32 size);

virtual	void				GetPreferredSize(
									float * width,
									float * height);
virtual	void				FrameResized(
									float width,
									float height);
virtual	void				MakeFocus(
									bool focusState = true);

virtual	BBitmap *			ThumbFor(
									int32 channel);
virtual	BRect				ThumbFrameFor(
									int32 channel);
virtual	float				ThumbDeltaFor(
									int32 channel);
virtual	float				ThumbRangeFor(
									int32 channel);
		orientation			Orientation() const;

private:

		BChannelSlider(	/* unimplemented */
				const BChannelSlider &);
		BChannelSlider& operator=(	/* unimplemented */
				const BChannelSlider &);

virtual	status_t _Reserved_BChannelSlider_0(void *, ...);
virtual	status_t _Reserved_BChannelSlider_1(void *, ...);
virtual	status_t _Reserved_BChannelSlider_2(void *, ...);
virtual	status_t _Reserved_BChannelSlider_3(void *, ...);
virtual	status_t _Reserved_BChannelSlider_4(void *, ...);
virtual	status_t _Reserved_BChannelSlider_5(void *, ...);
virtual	status_t _Reserved_BChannelSlider_6(void *, ...);
virtual	status_t _Reserved_BChannelSlider_7(void *, ...);

		float _m_last_height;
		float _m_last_width;
		float _m_baseline;
		float _m_linefeed;
		BBitmap * _m_left_knob;
		BBitmap * _m_mid_knob;
		BBitmap * _m_right_knob;
		BBitmap * _m_backing;
		BView * _m_backing_view;
		bool _m_vertical;
		bool _m_padding_[3];
		BPoint _m_click_delta;
		
		int		fCurrentChannel;
		bool	fAllChannels;
		float 	fMinpoint;

		uint32 _reserved_[12];

		void DrawThumbs();
		void DrawThumbFrame(
				BView * where,
				const BRect & area);
		bool Vertical();
};


#endif /* _CHANNEL_SLIDER_H */
