00001 00032 #ifndef LL_MULTI_SLIDER_H 00033 #define LL_MULTI_SLIDER_H 00034 00035 #include "lluictrl.h" 00036 #include "v4color.h" 00037 00038 class LLUICtrlFactory; 00039 00040 class LLMultiSlider : public LLUICtrl 00041 { 00042 public: 00043 LLMultiSlider( 00044 const LLString& name, 00045 const LLRect& rect, 00046 void (*on_commit_callback)(LLUICtrl* ctrl, void* userdata), 00047 void* callback_userdata, 00048 F32 initial_value, 00049 F32 min_value, 00050 F32 max_value, 00051 F32 increment, 00052 S32 max_sliders, 00053 BOOL allow_overlap, 00054 BOOL draw_track, 00055 BOOL use_triangle, 00056 const LLString& control_name = LLString::null ); 00057 00058 virtual LLXMLNodePtr getXML(bool save_children = true) const; 00059 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 00060 00061 void setSliderValue(const LLString& name, F32 value, BOOL from_event = FALSE); 00062 F32 getSliderValue(const LLString& name) const; 00063 00064 const LLString& getCurSlider() const { return mCurSlider; } 00065 F32 getCurSliderValue() const { return getSliderValue(mCurSlider); } 00066 void setCurSlider(const LLString& name); 00067 void setCurSliderValue(F32 val, BOOL from_event = false) { setSliderValue(mCurSlider, val, from_event); } 00068 00069 virtual void setValue(const LLSD& value); 00070 virtual LLSD getValue() const { return mValue; } 00071 00072 virtual void setMinValue(LLSD min_value) { setMinValue((F32)min_value.asReal()); } 00073 virtual void setMaxValue(LLSD max_value) { setMaxValue((F32)max_value.asReal()); } 00074 00075 F32 getInitialValue() const { return mInitialValue; } 00076 F32 getMinValue() const { return mMinValue; } 00077 F32 getMaxValue() const { return mMaxValue; } 00078 F32 getIncrement() const { return mIncrement; } 00079 void setMinValue(F32 min_value) { mMinValue = min_value; } 00080 void setMaxValue(F32 max_value) { mMaxValue = max_value; } 00081 void setIncrement(F32 increment) { mIncrement = increment; } 00082 void setMouseDownCallback( void (*cb)(LLUICtrl* ctrl, void* userdata) ) { mMouseDownCallback = cb; } 00083 void setMouseUpCallback( void (*cb)(LLUICtrl* ctrl, void* userdata) ) { mMouseUpCallback = cb; } 00084 00085 bool findUnusedValue(F32& initVal); 00086 const LLString& addSlider(); 00087 const LLString& addSlider(F32 val); 00088 void deleteSlider(const LLString& name); 00089 void deleteCurSlider() { deleteSlider(mCurSlider); } 00090 void clear(); 00091 00092 virtual BOOL handleHover(S32 x, S32 y, MASK mask); 00093 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); 00094 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); 00095 virtual BOOL handleKeyHere(KEY key, MASK mask); 00096 virtual void draw(); 00097 00098 protected: 00099 LLSD mValue; 00100 F32 mInitialValue; 00101 F32 mMinValue; 00102 F32 mMaxValue; 00103 F32 mIncrement; 00104 LLString mCurSlider; 00105 static S32 mNameCounter; 00106 00107 S32 mMaxNumSliders; 00108 BOOL mAllowOverlap; 00109 BOOL mDrawTrack; 00110 BOOL mUseTriangle; 00111 00112 S32 mMouseOffset; 00113 LLRect mDragStartThumbRect; 00114 00115 std::map<LLString, LLRect> mThumbRects; 00116 LLColor4 mTrackColor; 00117 LLColor4 mThumbOutlineColor; 00118 LLColor4 mThumbCenterColor; 00119 LLColor4 mThumbCenterSelectedColor; 00120 LLColor4 mDisabledThumbColor; 00121 LLColor4 mTriangleColor; 00122 00123 void (*mMouseDownCallback)(LLUICtrl* ctrl, void* userdata); 00124 void (*mMouseUpCallback)(LLUICtrl* ctrl, void* userdata); 00125 }; 00126 00127 #endif // LL_LLSLIDER_H