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()