From f33605f8b113f1fed84564c7618630acd5c9427a Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Thu, 24 Jun 2021 16:17:04 +0300
Subject: SL-15297 WIP Implement performance floater - implement complexity
 bars

---
 indra/llui/llscrolllistcell.cpp | 73 +++++++++++++++++++++++++++++++++++++++++
 indra/llui/llscrolllistcell.h   | 21 ++++++++++++
 2 files changed, 94 insertions(+)

(limited to 'indra/llui')

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);
@@ -165,6 +169,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
 //
diff --git a/indra/llui/llscrolllistcell.h b/indra/llui/llscrolllistcell.h
index 19576fb247..26a272b270 100644
--- a/indra/llui/llscrolllistcell.h
+++ b/indra/llui/llscrolllistcell.h
@@ -33,6 +33,7 @@
 #include "lluistring.h"
 #include "v4color.h"
 #include "llui.h"
+#include "llgltexture.h"
 
 class LLCheckBoxCtrl;
 class LLSD;
@@ -192,6 +193,26 @@ private:
 	LLFontGL::HAlign		mAlignment;
 };
 
+
+class LLScrollListBar : public LLScrollListCell
+{
+public:
+    LLScrollListBar(const LLScrollListCell::Params& p);
+    /*virtual*/ ~LLScrollListBar();
+    /*virtual*/ void	draw(const LLColor4& color, const LLColor4& highlight_color) const;
+    /*virtual*/ S32		getWidth() const;
+    /*virtual*/ S32		getHeight() const;
+    /*virtual*/ const LLSD		getValue() const;
+    /*virtual*/ void	setColor(const LLColor4&);
+    /*virtual*/ void	setValue(const LLSD& value);
+
+private:
+    LLColor4                    mColor;
+    F32                         mRatio;
+    S32                         mBottom;
+    S32                         mRightPad;
+    S32                         mLeftPad;
+};
 /*
  * An interactive cell containing a check box.
  */
-- 
cgit v1.2.3


From 74c6580e5c3507ef72590a3543e2b0b2ee9c13a3 Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Fri, 25 Jun 2021 20:05:07 +0300
Subject: SL-15297 WIP restore selection after updating the list & don't show
 avatars in the list as disabled when complexity is not limited

---
 indra/llui/llscrolllistcell.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/llui')

diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp
index 50f0f5f820..c5f53823f3 100644
--- a/indra/llui/llscrolllistcell.cpp
+++ b/indra/llui/llscrolllistcell.cpp
@@ -54,7 +54,7 @@ LLScrollListCell* LLScrollListCell::create(const LLScrollListCell::Params& cell_
 	{
 		cell = new LLScrollListIconText(cell_p);
 	}
-    else if (cell_p.type() == "image")
+    else if (cell_p.type() == "bar")
     {
         cell = new LLScrollListBar(cell_p);
     }
-- 
cgit v1.2.3


From 928191f525cf8a02816718eefd9a65097d8ecb8b Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Mon, 19 Jul 2021 20:07:03 +0300
Subject: SL-15297 performance floater UI update #2

---
 indra/llui/llscrolllistcell.cpp | 3 +--
 indra/llui/llscrolllistcell.h   | 1 +
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/llui')

diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp
index c5f53823f3..61470d1440 100644
--- a/indra/llui/llscrolllistcell.cpp
+++ b/indra/llui/llscrolllistcell.cpp
@@ -234,8 +234,7 @@ void LLScrollListBar::draw(const LLColor4& color, const LLColor4& highlight_colo
     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);
+    gl_rect_2d(left, mBottom, getWidth() - mRightPad, mBottom - 1, mColor);
 }
 
 //
diff --git a/indra/llui/llscrolllistcell.h b/indra/llui/llscrolllistcell.h
index 26a272b270..9a659dfd0d 100644
--- a/indra/llui/llscrolllistcell.h
+++ b/indra/llui/llscrolllistcell.h
@@ -154,6 +154,7 @@ public:
 
 	void			setText(const LLStringExplicit& text);
 	void			setFontStyle(const U8 font_style);
+    void			setAlignment(LLFontGL::HAlign align) { mFontAlignment = align; }
 
 protected:
 	LLUIString		mText;
-- 
cgit v1.2.3


From b50de181623874ab799fdc31532dffe8f7bc610a Mon Sep 17 00:00:00 2001
From: Mnikolenko Productengine <mnikolenko@productengine.com>
Date: Tue, 25 Jan 2022 19:43:32 +0200
Subject: SL-16627 add auto-adjustment warning for affected settings

---
 indra/llui/llcombobox.cpp | 18 +++++++++++++++++-
 indra/llui/llcombobox.h   |  5 +++++
 2 files changed, 22 insertions(+), 1 deletion(-)

(limited to 'indra/llui')

diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
index bcc653a602..5768686659 100644
--- a/indra/llui/llcombobox.cpp
+++ b/indra/llui/llcombobox.cpp
@@ -78,6 +78,7 @@ LLComboBox::Params::Params()
 	combo_button("combo_button"),
 	combo_list("combo_list"),
 	combo_editor("combo_editor"),
+    mouse_down_callback("mouse_down_callback"),
 	drop_down_button("drop_down_button")
 {
 	addSynonym(items, "combo_item");
@@ -97,7 +98,8 @@ LLComboBox::LLComboBox(const LLComboBox::Params& p)
 	mTextChangedCallback(p.text_changed_callback()),
 	mListPosition(p.list_position),
 	mLastSelectedIndex(-1),
-	mLabel(p.label)
+	mLabel(p.label),
+    mMouseDownSignal(NULL)
 {
 	// Text label button
 
@@ -153,6 +155,11 @@ LLComboBox::LLComboBox(const LLComboBox::Params& p)
 
 	createLineEditor(p);
 
+    if (p.mouse_down_callback.isProvided())
+    {
+        setMouseDownCallback(initCommitCallback(p.mouse_down_callback));
+    }
+
 	mTopLostSignalConnection = setTopLostCallback(boost::bind(&LLComboBox::hideList, this));
 }
 
@@ -183,6 +190,7 @@ LLComboBox::~LLComboBox()
 
 	// explicitly disconect this signal, since base class destructor might fire top lost
 	mTopLostSignalConnection.disconnect();
+    delete mMouseDownSignal;
 }
 
 
@@ -709,6 +717,9 @@ void LLComboBox::hideList()
 
 void LLComboBox::onButtonMouseDown()
 {
+    if (mMouseDownSignal)
+        (*mMouseDownSignal)( this, 0 );
+
 	if (!mList->getVisible())
 	{
 		// this might change selection, so do it first
@@ -1183,6 +1194,11 @@ BOOL LLComboBox::selectItemRange( S32 first, S32 last )
 	return mList->selectItemRange(first, last);
 }
 
+boost::signals2::connection LLComboBox::setMouseDownCallback( const commit_signal_t::slot_type& cb ) 
+{ 
+    if (!mMouseDownSignal) mMouseDownSignal = new commit_signal_t();
+    return mMouseDownSignal->connect(cb); 
+}
 
 static LLDefaultChildRegistry::Register<LLIconsComboBox> register_icons_combo_box("icons_combo_box");
 
diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h
index e17d6cdfb4..49a55c98a3 100644
--- a/indra/llui/llcombobox.h
+++ b/indra/llui/llcombobox.h
@@ -78,6 +78,8 @@ public:
 											text_entry_callback,
 											text_changed_callback;
 
+        Optional<CommitCallbackParam>       mouse_down_callback;
+
 		Optional<EPreferredPosition, PreferredPositionValues>	list_position;
 		
 		// components
@@ -207,6 +209,8 @@ public:
 	void			setTextEntryCallback( commit_callback_t cb ) { mTextEntryCallback = cb; }
 	void			setTextChangedCallback( commit_callback_t cb ) { mTextChangedCallback = cb; }
 
+    boost::signals2::connection setMouseDownCallback( const commit_signal_t::slot_type& cb );
+
 	/**
 	* Connects callback to signal called when Return key is pressed.
 	*/
@@ -244,6 +248,7 @@ private:
 	commit_callback_t	mTextChangedCallback;
 	commit_callback_t	mSelectionCallback;
 	boost::signals2::connection mTopLostSignalConnection;
+    commit_signal_t*	mMouseDownSignal;
 	commit_signal_t		mOnReturnSignal;
 	S32                 mLastSelectedIndex;
 };
-- 
cgit v1.2.3