diff options
| -rw-r--r-- | indra/llui/llflatlistview.cpp | 21 | ||||
| -rw-r--r-- | indra/llui/llflatlistview.h | 17 | ||||
| -rw-r--r-- | indra/newview/lloutfitslist.cpp | 7 | 
3 files changed, 43 insertions, 2 deletions
| diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index c7463e581c..f22b49f30f 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -1226,6 +1226,8 @@ LLFlatListViewEx::LLFlatListViewEx(const Params& p)  :	LLFlatListView(p)  , mNoFilteredItemsMsg(p.no_filtered_items_msg)  , mNoItemsMsg(p.no_items_msg) +, mForceShowingUnmatchedItems(false) +, mLastFilterSucceded(false)  {  } @@ -1250,6 +1252,16 @@ void LLFlatListViewEx::updateNoItemsMessage(const std::string& filter_string)  } +bool LLFlatListViewEx::getForceShowingUnmatchedItems() +{ +	return mForceShowingUnmatchedItems; +} + +void LLFlatListViewEx::setForceShowingUnmatchedItems(bool show) +{ +	mForceShowingUnmatchedItems = show; +} +  void LLFlatListViewEx::setFilterSubString(const std::string& filter_str)  {  	if (0 != LLStringUtil::compareInsensitive(filter_str, mFilterSubString)) @@ -1273,6 +1285,7 @@ void LLFlatListViewEx::filterItems()  	item_panel_list_t items;  	getItems(items); +	mLastFilterSucceded = false;  	for (item_panel_list_t::iterator  			 iter = items.begin(),  			 iter_end = items.end(); @@ -1283,13 +1296,14 @@ void LLFlatListViewEx::filterItems()  		// i.e. we don't hide items that don't support 'match_filter' action, separators etc.  		if (0 == pItem->notify(action))  		{ +			mLastFilterSucceded = true;  			pItem->setVisible(true);  		}  		else  		{  			// TODO: implement (re)storing of current selection.  			selectItem(pItem, false); -			pItem->setVisible(false); +			pItem->setVisible(mForceShowingUnmatchedItems);  		}  	} @@ -1297,4 +1311,9 @@ void LLFlatListViewEx::filterItems()  	notifyParentItemsRectChanged();  } +bool LLFlatListViewEx::wasLasFilterSuccessfull() +{ +	return mLastFilterSucceded; +} +  //EOF diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index 0820a7ab67..caeddfc179 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -470,6 +470,10 @@ public:  	void setNoItemsMsg(const std::string& msg) { mNoItemsMsg = msg; }  	void setNoFilteredItemsMsg(const std::string& msg) { mNoFilteredItemsMsg = msg; } +	bool getForceShowingUnmatchedItems(); + +	void setForceShowingUnmatchedItems(bool show); +  	/**  	 * Sets up new filter string and filters the list.  	 */ @@ -481,6 +485,11 @@ public:  	 */  	void filterItems(); +	/** +	 * Returns true if last call of filterItems() found at least one matching item +	 */ +	bool wasLasFilterSuccessfull(); +  protected:  	LLFlatListViewEx(const Params& p); @@ -496,6 +505,14 @@ private:  	std::string mNoFilteredItemsMsg;  	std::string mNoItemsMsg;  	std::string	mFilterSubString; +	/** +	 * Show list items that don't match current filter +	 */ +	bool mForceShowingUnmatchedItems; +	/** +	 * True if last call of filterItems() found at least one matching item +	 */ +	bool mLastFilterSucceded;  };  #endif diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index b8489d450b..67442dd573 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -439,6 +439,9 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)  		// Setting callback to reset items selection inside outfit on accordion collapsing and expanding (EXT-7875)  		tab->setDropDownStateChangedCallback(boost::bind(&LLOutfitsList::resetItemSelection, this, list, cat_id)); +		// force showing list items that don't match current filter(EXT-7158) +		list->setForceShowingUnmatchedItems(true); +  		// Setting list commit callback to monitor currently selected wearable item.  		list->setCommitCallback(boost::bind(&LLOutfitsList::onSelectionChange, this, _1)); @@ -850,6 +853,8 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring)  			restoreOutfitSelection(tab, iter->first);  		}  	} + +	mAccordion->arrange();  }  void LLOutfitsList::applyFilterToTab( @@ -873,7 +878,7 @@ void LLOutfitsList::applyFilterToTab(  	{  		// hide tab if its title doesn't pass filter  		// and it has no visible items -		tab->setVisible(list->size() > 0); +		tab->setVisible(list->wasLasFilterSuccessfull());  		// remove title highlighting because it might  		// have been previously highlighted by less restrictive filter | 
