diff options
| -rw-r--r-- | indra/newview/llinventoryfunctions.cpp | 41 | ||||
| -rw-r--r-- | indra/newview/llinventoryfunctions.h | 3 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.cpp | 7 | 
3 files changed, 49 insertions, 2 deletions
| diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 37088064c6..7e9a2cb716 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -245,6 +245,47 @@ BOOL get_is_item_worn(const LLUUID& id)  	return FALSE;  } +BOOL get_can_item_be_worn(const LLUUID& id) +{ +	const LLViewerInventoryItem* item = gInventory.getItem(id); +	if (!item) +		return FALSE; +	 +	switch(item->getType()) +	{ +		case LLAssetType::AT_OBJECT: +		{ +			if (isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(item->getLinkedUUID())) +			{ +				// Already being worn +				return FALSE; +			} +			else +			{ +				// Not being worn yet. +				return TRUE; +			} +			break; +		} +		case LLAssetType::AT_BODYPART: +		case LLAssetType::AT_CLOTHING: +			if(gAgentWearables.isWearingItem(item->getLinkedUUID())) +			{ +				// Already being worn +				return FALSE; +			} +			else +			{ +				// Not being worn yet. +				return TRUE; +			} +			break; +		default: +			break; +	} +	return FALSE; +} +  BOOL get_is_item_removable(const LLInventoryModel* model, const LLUUID& id)  {  	if (!model) diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 6619a50d28..1c3f82c531 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -46,6 +46,9 @@  // Is this item or its baseitem is worn, attached, etc...  BOOL get_is_item_worn(const LLUUID& id); +// Could this item be worn (correct type + not already being worn) +BOOL get_can_item_be_worn(const LLUUID& id); +  BOOL get_is_item_removable(const LLInventoryModel* model, const LLUUID& id);  BOOL get_is_category_removable(const LLInventoryModel* model, const LLUUID& id); diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 1544717873..ffd879dfd7 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -661,10 +661,13 @@ void LLPanelOutfitEdit::onInventorySelectionChange()  	getSelectedItemsUUID(selected_items);  	if (selected_items.empty())  	{ +		mPlusBtn->setEnabled(false);  		return;  	} -	uuid_vec_t::iterator worn_item = std::find_if(selected_items.begin(), selected_items.end(), boost::bind(&get_is_item_worn, _1)); -	bool can_add = ( worn_item == selected_items.end() ); + +	// If any of the selected items are not wearable (due to already being worn OR being of the wrong type), disable the add button. +	uuid_vec_t::iterator unwearable_item = std::find_if(selected_items.begin(), selected_items.end(), !boost::bind(& get_can_item_be_worn, _1)); +	bool can_add = ( unwearable_item == selected_items.end() );  	mPlusBtn->setEnabled(can_add); | 
