/** * @file llslider.h * @brief A simple slider with no label. * * $LicenseInfo:firstyear=2002&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ #ifndef LL_LLSLIDER_H #define LL_LLSLIDER_H #include "llf32uictrl.h" #include "v4color.h" #include "lluiimage.h" class LLSlider : public LLF32UICtrl { public: struct Params : public LLInitParam::Block<Params, LLF32UICtrl::Params> { Optional<std::string> orientation; Optional<LLUIColor> thumb_outline_color, thumb_center_color; Optional<LLUIImage*> thumb_image, thumb_image_pressed, thumb_image_disabled, track_image_horizontal, track_image_vertical, track_highlight_horizontal_image, track_highlight_vertical_image; Optional<CommitCallbackParam> mouse_down_callback, mouse_up_callback; Params(); }; protected: LLSlider(const Params&); friend class LLUICtrlFactory; public: virtual ~LLSlider(); void setValue( F32 value, bool from_event = false ); // overrides for LLF32UICtrl methods virtual void setValue(const LLSD& value ) { setValue((F32)value.asReal(), true); } virtual void setMinValue(const LLSD& min_value) { setMinValue((F32)min_value.asReal()); } virtual void setMaxValue(const LLSD& max_value) { setMaxValue((F32)max_value.asReal()); } virtual void setMinValue(F32 min_value) { LLF32UICtrl::setMinValue(min_value); updateThumbRect(); } virtual void setMaxValue(F32 max_value) { LLF32UICtrl::setMaxValue(max_value); updateThumbRect(); } boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb ); boost::signals2::connection setMouseUpCallback( const commit_signal_t::slot_type& cb ); virtual bool handleHover(S32 x, S32 y, MASK mask); virtual bool handleMouseUp(S32 x, S32 y, MASK mask); virtual bool handleMouseDown(S32 x, S32 y, MASK mask); virtual bool handleKeyHere(KEY key, MASK mask); virtual bool handleScrollWheel(S32 x, S32 y, S32 clicks); virtual void draw(); private: void setValueAndCommit(F32 value); void updateThumbRect(); bool mVolumeSlider; S32 mMouseOffset; LLRect mDragStartThumbRect; LLPointer<LLUIImage> mThumbImage; LLPointer<LLUIImage> mThumbImagePressed; LLPointer<LLUIImage> mThumbImageDisabled; LLPointer<LLUIImage> mTrackImageHorizontal; LLPointer<LLUIImage> mTrackImageVertical; LLPointer<LLUIImage> mTrackHighlightHorizontalImage; LLPointer<LLUIImage> mTrackHighlightVerticalImage; const EOrientation mOrientation; LLRect mThumbRect; LLUIColor mThumbOutlineColor; LLUIColor mThumbCenterColor; commit_signal_t* mMouseDownSignal; commit_signal_t* mMouseUpSignal; }; #endif // LL_LLSLIDER_H