summaryrefslogtreecommitdiff
path: root/indra/llui/llscrolllistcell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/llscrolllistcell.cpp')
-rw-r--r--indra/llui/llscrolllistcell.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp
index 13839da400..50f0f5f820 100644
--- a/indra/llui/llscrolllistcell.cpp
+++ b/indra/llui/llscrolllistcell.cpp
@@ -54,6 +54,10 @@ LLScrollListCell* LLScrollListCell::create(const LLScrollListCell::Params& cell_
{
cell = new LLScrollListIconText(cell_p);
}
+ else if (cell_p.type() == "image")
+ {
+ cell = new LLScrollListBar(cell_p);
+ }
else // default is "text"
{
cell = new LLScrollListText(cell_p);
@@ -166,6 +170,75 @@ void LLScrollListIcon::draw(const LLColor4& color, const LLColor4& highlight_col
}
//
+// LLScrollListBar
+//
+LLScrollListBar::LLScrollListBar(const LLScrollListCell::Params& p)
+ : LLScrollListCell(p),
+ mRatio(0),
+ mColor(p.color),
+ mBottom(1),
+ mLeftPad(1),
+ mRightPad(1)
+{}
+
+LLScrollListBar::~LLScrollListBar()
+{
+}
+
+/*virtual*/
+S32 LLScrollListBar::getHeight() const
+{
+ return LLScrollListCell::getHeight();
+}
+
+/*virtual*/
+const LLSD LLScrollListBar::getValue() const
+{
+ return LLStringUtil::null;
+}
+
+void LLScrollListBar::setValue(const LLSD& value)
+{
+ if (value.has("ratio"))
+ {
+ mRatio = value["ratio"].asReal();
+ }
+ if (value.has("bottom"))
+ {
+ mBottom = value["bottom"].asInteger();
+ }
+ if (value.has("left_pad"))
+ {
+ mLeftPad = value["left_pad"].asInteger();
+ }
+ if (value.has("right_pad"))
+ {
+ mRightPad = value["right_pad"].asInteger();
+ }
+}
+
+void LLScrollListBar::setColor(const LLColor4& color)
+{
+ mColor = color;
+}
+
+S32 LLScrollListBar::getWidth() const
+{
+ return LLScrollListCell::getWidth();
+}
+
+
+void LLScrollListBar::draw(const LLColor4& color, const LLColor4& highlight_color) const
+{
+ S32 bar_width = getWidth() - mLeftPad - mRightPad;
+ S32 left = bar_width - bar_width * mRatio;
+ left = llclamp(left, mLeftPad, getWidth() - mRightPad - 1);
+
+ gl_line_2d(left, mBottom, getWidth() - mRightPad, mBottom, mColor);
+ gl_line_2d(left, mBottom - 1, getWidth() - mRightPad, mBottom - 1, mColor);
+}
+
+//
// LLScrollListText
//
U32 LLScrollListText::sCount = 0;