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