From ce9ac6501461eca8acd2c1074d71a9ed6df13df3 Mon Sep 17 00:00:00 2001
From: Yuri Chebotarev <ychebotarev@productengine.com>
Date: Wed, 23 Jun 2010 17:43:43 +0300
Subject: [PATCH] EXT-7963 FIX introduce new variable
 "keep_selection_visible_on_reshape" and use it for "edit outfit" flatlist
 controls.

reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/641/

--HG--
branch : product-engine
---
 indra/llui/llflatlistview.cpp                             | 8 ++++++++
 indra/llui/llflatlistview.h                               | 5 +++++
 .../newview/skins/default/xui/en/panel_cof_wearables.xml  | 3 +++
 3 files changed, 16 insertions(+)

diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index 2433c14315f..c7463e581cc 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -50,14 +50,21 @@ LLFlatListView::Params::Params()
 	allow_select("allow_select"),
 	multi_select("multi_select"),
 	keep_one_selected("keep_one_selected"),
+	keep_selection_visible_on_reshape("keep_selection_visible_on_reshape",false),
 	no_items_text("no_items_text")
 {};
 
 void LLFlatListView::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */)
 {
+	S32 delta = height - getRect().getHeight();
 	LLScrollContainer::reshape(width, height, called_from_parent);
 	setItemsNoScrollWidth(width);
 	rearrangeItems();
+	
+	if(delta!= 0 && mKeepSelectionVisibleOnReshape)
+	{
+		ensureSelectedVisible();
+	}
 }
 
 const LLRect& LLFlatListView::getItemsRect() const
@@ -380,6 +387,7 @@ LLFlatListView::LLFlatListView(const LLFlatListView::Params& p)
   , mPrevNotifyParentRect(LLRect())
   , mNoItemsCommentTextbox(NULL)
   , mIsConsecutiveSelection(false)
+  , mKeepSelectionVisibleOnReshape(p.keep_selection_visible_on_reshape)
 {
 	mBorderThickness = getBorderWidth();
 
diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h
index f4e0426f159..0820a7ab67a 100644
--- a/indra/llui/llflatlistview.h
+++ b/indra/llui/llflatlistview.h
@@ -105,6 +105,9 @@ class LLFlatListView : public LLScrollContainer, public LLEditMenuHandler
 		/** don't allow to deselect all selected items (for mouse events on items only) */
 		Optional<bool> keep_one_selected;
 
+		/** try to keep selection visible after reshape */
+		Optional<bool> keep_selection_visible_on_reshape;
+
 		/** padding between items */
 		Optional<U32> item_pad; 
 
@@ -412,6 +415,8 @@ class LLFlatListView : public LLScrollContainer, public LLEditMenuHandler
 
 	bool mIsConsecutiveSelection;
 
+	bool mKeepSelectionVisibleOnReshape;
+
 	/** All pairs of the list */
 	pairs_list_t mItemPairs;
 
diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
index f016c27b0a8..d2c8ab159f4 100644
--- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
+++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
@@ -31,6 +31,7 @@
              item_pad="3"
              layout="topleft"
              left="0"
+             keep_selection_visible_on_reshape="true"
              multi_select="true"
              name="list_attachments"
              top="0"
@@ -45,6 +46,7 @@
              follows="all"
              height="10"
              item_pad="3"
+             keep_selection_visible_on_reshape="true"
              layout="topleft"
              left="0"
              multi_select="true"
@@ -61,6 +63,7 @@
              follows="all"
              height="10"
              item_pad="3"
+             keep_selection_visible_on_reshape="true"
              layout="topleft"
              left="0"
              multi_select="true"
-- 
GitLab