From d7c8b00d909e14f943edef9b9b52d1819fefd4e4 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Sat, 21 Mar 2015 03:47:21 -0400 Subject: [PATCH] In the Region Tracker Floater, save all selected items when refreshing. --- indra/llui/llscrolllistctrl.h | 17 +++++++++++++++++ indra/newview/alfloaterregiontracker.cpp | 10 +++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 9babab009..f1fe63e81 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -324,6 +324,23 @@ public: BOOL hasSortOrder() const; void clearSortOrder(); + template S32 selectMultiple(const std::vector& vec) + { + size_t count = 0; + for (item_list::iterator iter = mItemList.begin(); iter != mItemList.end(); ++iter) + { + LLScrollListItem* item = *iter; + for (std::vector::const_iterator titr = vec.begin(); titr != vec.end(); ++titr) + if (item->getEnabled() && static_cast(item->getValue()) == (*titr)) + { + selectItem(item, false); + ++count; + break; + } + } + if (mCommitOnSelectionChange) commitIfChanged(); + return count; + } S32 selectMultiple( uuid_vec_t ids ); // conceptually const, but mutates mItemList void updateSort() const; diff --git a/indra/newview/alfloaterregiontracker.cpp b/indra/newview/alfloaterregiontracker.cpp index e812d4e51..ff416c935 100644 --- a/indra/newview/alfloaterregiontracker.cpp +++ b/indra/newview/alfloaterregiontracker.cpp @@ -118,7 +118,11 @@ void ALFloaterRegionTracker::refresh() return; } - const std::string& saved_selected_value = mRegionScrollList->getSelectedValue().asString(); + std::vector saved_selected_values; + BOOST_FOREACH(const LLScrollListItem* item, mRegionScrollList->getAllSelected()) + { + saved_selected_values.push_back(item->getValue().asString()); + } mRegionScrollList->deleteAllItems(); const std::string& cur_region_name = gAgent.getRegion()->getName(); @@ -174,8 +178,8 @@ void ALFloaterRegionTracker::refresh() mRegionScrollList->addRow(row); } } - if (!saved_selected_value.empty()) - mRegionScrollList->selectByValue(saved_selected_value); + if (!saved_selected_values.empty()) + mRegionScrollList->selectMultiple(saved_selected_values); } BOOL ALFloaterRegionTracker::tick()