summaryrefslogtreecommitdiff
path: root/indra/llui/llmultislider.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/llmultislider.h')
-rw-r--r--indra/llui/llmultislider.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/indra/llui/llmultislider.h b/indra/llui/llmultislider.h
new file mode 100644
index 0000000000..67f627d21c
--- /dev/null
+++ b/indra/llui/llmultislider.h
@@ -0,0 +1,129 @@
+/**
+ * @file llmultislider.h
+ * @brief A simple multislider
+ *
+ * $LicenseInfo:firstyear=2007&license=viewergpl$
+ *
+ * Copyright (c) 2007-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_MULTI_SLIDER_H
+#define LL_MULTI_SLIDER_H
+
+#include "lluictrl.h"
+#include "v4color.h"
+
+class LLUICtrlFactory;
+
+class LLMultiSlider : public LLUICtrl
+{
+public:
+ LLMultiSlider(
+ const LLString& name,
+ const LLRect& rect,
+ void (*on_commit_callback)(LLUICtrl* ctrl, void* userdata),
+ void* callback_userdata,
+ F32 initial_value,
+ F32 min_value,
+ F32 max_value,
+ F32 increment,
+ S32 max_sliders,
+ BOOL allow_overlap,
+ BOOL draw_track,
+ BOOL use_triangle,
+ const LLString& control_name = LLString::null );
+
+ virtual EWidgetType getWidgetType() const;
+ virtual LLString getWidgetTag() const;
+ virtual LLXMLNodePtr getXML(bool save_children = true) const;
+ static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
+
+ void setSliderValue(const LLString& name, F32 value, BOOL from_event = FALSE);
+ F32 getSliderValue(const LLString& name) const;
+
+ const LLString& getCurSlider() const { return mCurSlider; }
+ F32 getCurSliderValue() const { return getSliderValue(mCurSlider); }
+ void setCurSlider(const LLString& name);
+ void setCurSliderValue(F32 val, BOOL from_event = false) { setSliderValue(mCurSlider, val, from_event); }
+
+ virtual void setValue(const LLSD& value);
+ virtual LLSD getValue() const { return mValue; }
+
+ virtual void setMinValue(LLSD min_value) { setMinValue((F32)min_value.asReal()); }
+ virtual void setMaxValue(LLSD max_value) { setMaxValue((F32)max_value.asReal()); }
+
+ F32 getInitialValue() const { return mInitialValue; }
+ F32 getMinValue() const { return mMinValue; }
+ F32 getMaxValue() const { return mMaxValue; }
+ F32 getIncrement() const { return mIncrement; }
+ void setMinValue(F32 min_value) { mMinValue = min_value; }
+ void setMaxValue(F32 max_value) { mMaxValue = max_value; }
+ void setIncrement(F32 increment) { mIncrement = increment; }
+ void setMouseDownCallback( void (*cb)(LLUICtrl* ctrl, void* userdata) ) { mMouseDownCallback = cb; }
+ void setMouseUpCallback( void (*cb)(LLUICtrl* ctrl, void* userdata) ) { mMouseUpCallback = cb; }
+
+ bool findUnusedValue(F32& initVal);
+ const LLString& addSlider();
+ const LLString& addSlider(F32 val);
+ void deleteSlider(const LLString& name);
+ void deleteCurSlider() { deleteSlider(mCurSlider); }
+ void clear();
+
+ 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, BOOL called_from_parent);
+ virtual void draw();
+
+protected:
+ LLSD mValue;
+ F32 mInitialValue;
+ F32 mMinValue;
+ F32 mMaxValue;
+ F32 mIncrement;
+ LLString mCurSlider;
+ static S32 mNameCounter;
+
+ S32 mMaxNumSliders;
+ BOOL mAllowOverlap;
+ BOOL mDrawTrack;
+ BOOL mUseTriangle; /// hacked in toggle to use a triangle
+
+ S32 mMouseOffset;
+ LLRect mDragStartThumbRect;
+
+ std::map<LLString, LLRect> mThumbRects;
+ LLColor4 mTrackColor;
+ LLColor4 mThumbOutlineColor;
+ LLColor4 mThumbCenterColor;
+ LLColor4 mThumbCenterSelectedColor;
+ LLColor4 mDisabledThumbColor;
+ LLColor4 mTriangleColor;
+
+ void (*mMouseDownCallback)(LLUICtrl* ctrl, void* userdata);
+ void (*mMouseUpCallback)(LLUICtrl* ctrl, void* userdata);
+};
+
+#endif // LL_LLSLIDER_H