diff options
| -rw-r--r-- | indra/newview/llautoreplace.cpp | 40 | ||||
| -rw-r--r-- | indra/newview/llautoreplace.h | 3 | ||||
| -rw-r--r-- | indra/newview/llfloaterautoreplacesettings.cpp | 17 | 
3 files changed, 57 insertions, 3 deletions
| diff --git a/indra/newview/llautoreplace.cpp b/indra/newview/llautoreplace.cpp index 0f1ce2bcd0..d71cf290d6 100644 --- a/indra/newview/llautoreplace.cpp +++ b/indra/newview/llautoreplace.cpp @@ -536,6 +536,46 @@ LLAutoReplaceSettings::AddListResult LLAutoReplaceSettings::addList(const LLSD&  	return result;  } +LLAutoReplaceSettings::AddListResult LLAutoReplaceSettings::replaceList(const LLSD& newList) +{ +	AddListResult result = AddListInvalidList; +	if ( listIsValid( newList ) ) +	{ +		std::string listName = newList[AUTOREPLACE_LIST_NAME].asString(); +		bool listFound = false; +		S32 search_index; +		LLSD targetList; +		// The following is working around the fact that LLSD arrays containing maps also seem to have undefined entries... see LLSD-30 +		for ( search_index = 0, targetList = mLists[0]; +			  !listFound && search_index < mLists.size(); +			  search_index += 1, targetList = mLists[search_index] +			 ) +		{ +			if ( targetList.isMap() ) +			{ +				if ( listNameMatches( targetList, listName) ) +				{ +					LL_DEBUGS("AutoReplace")<<"list to replace found at "<<search_index<<LL_ENDL; +					mLists.erase(search_index); +					mLists.insert(search_index, newList); +					listFound = true; +					result = AddListOk; +				} +			} +		} +		 +		if ( ! listFound ) +		{ +			LL_WARNS("AutoReplace") << "attempt to replace unconfigured list" << LL_ENDL; +		} +	} +	else +	{ +		LL_WARNS("AutoReplace") << "attempt to add invalid list" << LL_ENDL; +	} +	return result; +} +  bool LLAutoReplaceSettings::removeReplacementList(std::string listName)  {  	bool found = false; diff --git a/indra/newview/llautoreplace.h b/indra/newview/llautoreplace.h index 30b1fd2c65..f720cc4eda 100644 --- a/indra/newview/llautoreplace.h +++ b/indra/newview/llautoreplace.h @@ -67,6 +67,9 @@ class LLAutoReplaceSettings  	/// Inserts a new list at the end of the priority order  	AddListResult addList(const LLSD& newList); +	/// Inserts a list in place of an existing list of the same name +	AddListResult replaceList(const LLSD& newList); +  	/// Removes the named list, @returns false if not found  	bool removeReplacementList(std::string listName); diff --git a/indra/newview/llfloaterautoreplacesettings.cpp b/indra/newview/llfloaterautoreplacesettings.cpp index 7d1bcba978..5dcdded744 100644 --- a/indra/newview/llfloaterautoreplacesettings.cpp +++ b/indra/newview/llfloaterautoreplacesettings.cpp @@ -478,14 +478,25 @@ bool LLFloaterAutoReplaceSettings::callbackNewListName(const LLSD& notification,  bool LLFloaterAutoReplaceSettings::callbackListNameConflict(const LLSD& notification, const LLSD& response)  {  	LLSD newList = notification["payload"]["list"]; - +	std::string listName = LLAutoReplaceSettings::getListName(newList); +	  	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);  	switch ( option )  	{  	case 0:  		// Replace current list -		LL_INFOS("AutoReplace")<<"option 'replace current list' selected"<<LL_ENDL; -		 +		if ( LLAutoReplaceSettings::AddListOk == mSettings.replaceList(newList) ) +		{ +			LL_INFOS("AutoReplace") << "replaced list '"<<listName<<"'"<<LL_ENDL; +			mSelectedListName = listName; +			updateListNames(); +			updateListNamesControls(); +			updateReplacementsList(); +		} +		else +		{ +			LL_WARNS("AutoReplace")<<"failed to replace list '"<<listName<<"'"<<LL_ENDL; +		}  		break;  	case 1: | 
