diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 31 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.h | 3 | ||||
| -rw-r--r-- | indra/newview/lloutfitslist.cpp | 10 | 
3 files changed, 36 insertions, 8 deletions
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 78edcb3e25..2729053390 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1275,6 +1275,11 @@ bool LLAppearanceMgr::getCanRemoveFromCOF(const LLUUID& outfit_cat_id)  // static  bool LLAppearanceMgr::getCanAddToCOF(const LLUUID& outfit_cat_id)  { +	if (gAgentWearables.isCOFChangeInProgress()) +	{ +		return false; +	} +  	LLInventoryModel::cat_array_t cats;  	LLInventoryModel::item_array_t items;  	LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); @@ -1286,6 +1291,32 @@ bool LLAppearanceMgr::getCanAddToCOF(const LLUUID& outfit_cat_id)  	return items.size() > 0;  } +bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id) +{ +	// Don't allow wearing anything while we're changing appearance. +	if (gAgentWearables.isCOFChangeInProgress()) +	{ +		return false; +	} + +	// Check whether it's the base outfit. +	if (outfit_cat_id.isNull() || outfit_cat_id == getBaseOutfitUUID()) +	{ +		return false; +	} + +	// Check whether the outfit contains any non-worn wearables. +	LLInventoryModel::cat_array_t cats; +	LLInventoryModel::item_array_t items; +	LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ true); +	gInventory.collectDescendentsIf(outfit_cat_id, +		cats, +		items, +		LLInventoryModel::EXCLUDE_TRASH, +		not_worn); +	return items.size() > 0; +} +  void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category)  {  	LLInventoryModel::cat_array_t cats; diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 9f554dbdef..eb495bd274 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -84,6 +84,9 @@ public:  	// Determine whether we can add anything (but body parts) from the outfit contents to COF.  	static bool getCanAddToCOF(const LLUUID& outfit_cat_id); +	// Determine whether we can replace current outfit with the given one. +	bool getCanReplaceCOF(const LLUUID& outfit_cat_id); +  	// Copy all items in a category.  	void shallowCopyCategoryContents(const LLUUID& src_id, const LLUUID& dst_id,  									 LLPointer<LLInventoryCallback> cb); diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 8147a97317..f921bca623 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -275,11 +275,10 @@ protected:  		}  		else if ("wear_replace" == param)  		{ -			return !gAgentWearables.isCOFChangeInProgress(); +			return LLAppearanceMgr::instance().getCanReplaceCOF(outfit_cat_id);  		}  		else if ("wear_add" == param)  		{ -			if (gAgentWearables.isCOFChangeInProgress()) return false;  			return LLAppearanceMgr::getCanAddToCOF(outfit_cat_id);  		}  		else if ("take_off" == param) @@ -676,7 +675,7 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)  		}  		// outfit selected -		return LLAppearanceMgr::getCanAddToCOF(mSelectedOutfitUUID); +		return LLAppearanceMgr::instance().getCanReplaceCOF(mSelectedOutfitUUID);  	}  	if (command_name == "take_off")  	{ @@ -689,11 +688,6 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)  	if (command_name == "wear_add")  	{  		// *TODO: do we ever get here? -		if (gAgentWearables.isCOFChangeInProgress()) -		{ -			return false; -		} -  		return LLAppearanceMgr::getCanAddToCOF(mSelectedOutfitUUID);  	}  | 
