xref: /haiku/src/apps/icon-o-matic/generic/gui/popup_control/PopupSlider.h (revision 128277c969aa806add78941cd2972754c37a1572)
1*128277c9SStephan Aßmus /*
2*128277c9SStephan Aßmus  * Copyright 2006, Haiku.
3*128277c9SStephan Aßmus  * Distributed under the terms of the MIT License.
4*128277c9SStephan Aßmus  *
5*128277c9SStephan Aßmus  * Authors:
6*128277c9SStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
7*128277c9SStephan Aßmus  *		Ingo Weinhold <bonefish@cs.tu-berlin.de>
8*128277c9SStephan Aßmus  */
9*128277c9SStephan Aßmus 
10*128277c9SStephan Aßmus #ifndef POPUP_SLIDER_H
11*128277c9SStephan Aßmus #define POPUP_SLIDER_H
12*128277c9SStephan Aßmus 
13*128277c9SStephan Aßmus #include <String.h>
14*128277c9SStephan Aßmus 
15*128277c9SStephan Aßmus #include "MDividable.h"
16*128277c9SStephan Aßmus 
17*128277c9SStephan Aßmus #include "PopupControl.h"
18*128277c9SStephan Aßmus 
19*128277c9SStephan Aßmus class MDividable;
20*128277c9SStephan Aßmus class SliderView;
21*128277c9SStephan Aßmus 
22*128277c9SStephan Aßmus class PopupSlider : public PopupControl,
23*128277c9SStephan Aßmus 					public MDividable {
24*128277c9SStephan Aßmus  public:
25*128277c9SStephan Aßmus 								PopupSlider(const char* name = NULL,
26*128277c9SStephan Aßmus 											const char* label = NULL,
27*128277c9SStephan Aßmus 											BMessage* model = NULL,
28*128277c9SStephan Aßmus 											BHandler* target = NULL,
29*128277c9SStephan Aßmus 											int32 min = 0,
30*128277c9SStephan Aßmus 											int32 max = 100,
31*128277c9SStephan Aßmus 											int32 value = 0,
32*128277c9SStephan Aßmus 											const char* formatString = "%ld");
33*128277c9SStephan Aßmus 	virtual						~PopupSlider();
34*128277c9SStephan Aßmus 
35*128277c9SStephan Aßmus 								// MView
36*128277c9SStephan Aßmus 	virtual	minimax				layoutprefs();
37*128277c9SStephan Aßmus 	virtual	BRect				layout(BRect frame);
38*128277c9SStephan Aßmus 
39*128277c9SStephan Aßmus 								// BHandler
40*128277c9SStephan Aßmus 	virtual	void				MessageReceived(BMessage* message);
41*128277c9SStephan Aßmus 
42*128277c9SStephan Aßmus 								// BView
43*128277c9SStephan Aßmus 	virtual	void				AttachedToWindow();
44*128277c9SStephan Aßmus 	virtual	void				Draw(BRect updateRect);
45*128277c9SStephan Aßmus 	virtual	void				MouseDown(BPoint where);
46*128277c9SStephan Aßmus 
47*128277c9SStephan Aßmus 								// PopupControl
48*128277c9SStephan Aßmus 	virtual	void				PopupShown();
49*128277c9SStephan Aßmus 	virtual	void				PopupHidden(bool canceled);
50*128277c9SStephan Aßmus 
51*128277c9SStephan Aßmus 								// PopupSlider
52*128277c9SStephan Aßmus 			void				SetValue(int32 value);
53*128277c9SStephan Aßmus 			int32				Value() const;
54*128277c9SStephan Aßmus 			void				SetEnabled(bool enabled);
55*128277c9SStephan Aßmus 			bool				IsEnabled() const;
56*128277c9SStephan Aßmus 			void				TriggerValueChanged(const BMessage* message) const;
57*128277c9SStephan Aßmus 			bool				IsTracking() const;
58*128277c9SStephan Aßmus 								// override this to take some action
59*128277c9SStephan Aßmus 	virtual	void				ValueChanged(int32 newValue);
60*128277c9SStephan Aßmus 	virtual	void				DrawSlider(BRect frame, bool enabled);
61*128277c9SStephan Aßmus 	virtual	float				Scale(float ratio) const;
62*128277c9SStephan Aßmus 	virtual	float				DeScale(float ratio) const;
63*128277c9SStephan Aßmus 
64*128277c9SStephan Aßmus 			void				SetMessage(BMessage* message);
Message()65*128277c9SStephan Aßmus 			const BMessage*		Message() const
66*128277c9SStephan Aßmus 									{ return fModel; }
67*128277c9SStephan Aßmus 			void				SetPressedMessage(BMessage* message);
68*128277c9SStephan Aßmus 			void				SetReleasedMessage(BMessage* message);
69*128277c9SStephan Aßmus 
70*128277c9SStephan Aßmus 	virtual	void				SetMin(int32 min);
71*128277c9SStephan Aßmus 			int32				Min() const;
72*128277c9SStephan Aßmus 
73*128277c9SStephan Aßmus 	virtual	void				SetMax(int32 max);
74*128277c9SStephan Aßmus 			int32				Max() const;
75*128277c9SStephan Aßmus 
76*128277c9SStephan Aßmus 	virtual	void				SetLabel(const char* label);
77*128277c9SStephan Aßmus 			const char*			Label() const;
78*128277c9SStephan Aßmus 
79*128277c9SStephan Aßmus 								// support for MDividable
80*128277c9SStephan Aßmus 	virtual	float				LabelWidth();
81*128277c9SStephan Aßmus 
82*128277c9SStephan Aßmus // TODO: change design to implement these features:
83*128277c9SStephan Aßmus 								// you can override this function
84*128277c9SStephan Aßmus 								// to have costum value strings
85*128277c9SStephan Aßmus 	virtual	const char*			StringForValue(int32 value);
86*128277c9SStephan Aßmus 								// but you should override this
87*128277c9SStephan Aßmus 								// as well to make sure the width
88*128277c9SStephan Aßmus 								// of the slider is calculated properly
89*128277c9SStephan Aßmus 	virtual	float				MaxValueStringWidth();
90*128277c9SStephan Aßmus 
91*128277c9SStephan Aßmus 	virtual	void				SetFormatString(const char* formatString);
92*128277c9SStephan Aßmus 			const char*			FormatString() const;
93*128277c9SStephan Aßmus 
94*128277c9SStephan Aßmus  protected:
SliderFrame()95*128277c9SStephan Aßmus 			BRect				SliderFrame() const
96*128277c9SStephan Aßmus 									{ return fSliderButtonRect; }
97*128277c9SStephan Aßmus 
98*128277c9SStephan Aßmus 
99*128277c9SStephan Aßmus  private:
100*128277c9SStephan Aßmus 			float				_MinLabelWidth() const;
101*128277c9SStephan Aßmus 
102*128277c9SStephan Aßmus 			SliderView*			fSlider;
103*128277c9SStephan Aßmus 			BMessage*			fModel;
104*128277c9SStephan Aßmus 			BMessage*			fPressModel;
105*128277c9SStephan Aßmus 			BMessage*			fReleaseModel;
106*128277c9SStephan Aßmus 			BHandler*			fTarget;
107*128277c9SStephan Aßmus 			BString				fLabel;
108*128277c9SStephan Aßmus 			BRect				fSliderButtonRect;
109*128277c9SStephan Aßmus 			bool				fEnabled;
110*128277c9SStephan Aßmus 			bool				fTracking;
111*128277c9SStephan Aßmus };
112*128277c9SStephan Aßmus /*
113*128277c9SStephan Aßmus class PercentSlider : public PopupSlider {
114*128277c9SStephan Aßmus  public:
115*128277c9SStephan Aßmus 
116*128277c9SStephan Aßmus 	virtual	const char*			StringForValue(int32 value);
117*128277c9SStephan Aßmus 	virtual	float				MaxValueStringWidth();
118*128277c9SStephan Aßmus 
119*128277c9SStephan Aßmus };
120*128277c9SStephan Aßmus */
121*128277c9SStephan Aßmus 
122*128277c9SStephan Aßmus #endif	// POPUP_SLIDER_H
123