diff options
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.h | 1 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 27 | ||||
| -rw-r--r-- | indra/newview/lloutfitgallery.cpp | 17 | 
4 files changed, 44 insertions, 22 deletions
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index cc676550ab..e7e85467cd 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -27,6 +27,7 @@  #include "llviewerprecompiledheaders.h"  #include <boost/lexical_cast.hpp> +#include <boost/foreach.hpp>  #include "llaccordionctrltab.h"  #include "llagent.h"  #include "llagentcamera.h" @@ -1515,6 +1516,26 @@ void LLAppearanceMgr::replaceCurrentOutfit(const LLUUID& new_outfit)  	wearInventoryCategory(cat, false, false);  } +// Remove existing photo link from outfit folder. +void LLAppearanceMgr::removeOutfitPhoto(const LLUUID& outfit_id) +{ +    LLInventoryModel::cat_array_t sub_cat_array; +    LLInventoryModel::item_array_t outfit_item_array; +    gInventory.collectDescendents( +        outfit_id, +        sub_cat_array, +        outfit_item_array, +        LLInventoryModel::EXCLUDE_TRASH); +    BOOST_FOREACH(LLViewerInventoryItem* outfit_item, outfit_item_array) +    { +        LLViewerInventoryItem* linked_item = outfit_item->getLinkedItem(); +        if (linked_item != NULL && linked_item->getActualType() == LLAssetType::AT_TEXTURE) +        { +            gInventory.removeItem(outfit_item->getUUID()); +        } +    } +} +  // Open outfit renaming dialog.  void LLAppearanceMgr::renameOutfit(const LLUUID& outfit_id)  { diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index bf181cb4ad..3646f245c1 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -61,6 +61,7 @@ public:  	void changeOutfit(bool proceed, const LLUUID& category, bool append);  	void replaceCurrentOutfit(const LLUUID& new_outfit);  	void renameOutfit(const LLUUID& outfit_id); +	void removeOutfitPhoto(const LLUUID& outfit_id);  	void takeOffOutfit(const LLUUID& cat_id);  	void addCategoryToCurrentOutfit(const LLUUID& cat_id);  	S32 findExcessOrDuplicateItems(const LLUUID& cat_id, diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 86cc6dfae1..9f0b35fc8c 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -4358,12 +4358,14 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response  // Returns true if the item can be moved to Current Outfit or any outfit folder.  static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit)  { -	if ((inv_item->getInventoryType() != LLInventoryType::IT_WEARABLE) && -		(inv_item->getInventoryType() != LLInventoryType::IT_GESTURE) && -		(inv_item->getInventoryType() != LLInventoryType::IT_ATTACHMENT) && -        (inv_item->getInventoryType() != LLInventoryType::IT_OBJECT) && -        (inv_item->getInventoryType() != LLInventoryType::IT_TEXTURE)) -    { +	LLInventoryType::EType inv_type = inv_item->getInventoryType(); +	if ((inv_type != LLInventoryType::IT_WEARABLE) && +		(inv_type != LLInventoryType::IT_GESTURE) && +		(inv_type != LLInventoryType::IT_ATTACHMENT) && +		(inv_type != LLInventoryType::IT_OBJECT) && +		(inv_type != LLInventoryType::IT_SNAPSHOT) && +		(inv_type != LLInventoryType::IT_TEXTURE)) +	{  		return FALSE;  	} @@ -4373,6 +4375,11 @@ static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_curr  		return FALSE;  	} +	if((inv_type == LLInventoryType::IT_TEXTURE) || (inv_type == LLInventoryType::IT_SNAPSHOT)) +	{ +		return TRUE; +	} +  	if (move_is_into_current_outfit && get_is_item_worn(inv_item->getUUID()))  	{  		return FALSE; @@ -4423,6 +4430,14 @@ void LLFolderBridge::dropToFavorites(LLInventoryItem* inv_item)  void LLFolderBridge::dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit)  { +	if((inv_item->getInventoryType() == LLInventoryType::IT_TEXTURE) || (inv_item->getInventoryType() == LLInventoryType::IT_SNAPSHOT)) +	{ +		LLAppearanceMgr::instance().removeOutfitPhoto(mUUID); +		LLPointer<LLInventoryCallback> cb = NULL; +		link_inventory_object(mUUID, LLConstPointer<LLInventoryObject>(inv_item), cb); +		return; +	} +  	// BAP - should skip if dup.  	if (move_is_into_current_outfit)  	{ diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp index f414179f9c..dcc4d70a2c 100644 --- a/indra/newview/lloutfitgallery.cpp +++ b/indra/newview/lloutfitgallery.cpp @@ -1073,22 +1073,7 @@ void LLOutfitGallery::linkPhotoToOutfit(LLUUID photo_id, LLUUID outfit_id)  bool LLOutfitGallery::checkRemovePhoto(LLUUID outfit_id)  { -    //remove existing photo link from outfit folder -    LLInventoryModel::cat_array_t sub_cat_array; -    LLInventoryModel::item_array_t outfit_item_array; -    gInventory.collectDescendents( -        outfit_id, -        sub_cat_array, -        outfit_item_array, -        LLInventoryModel::EXCLUDE_TRASH); -    BOOST_FOREACH(LLViewerInventoryItem* outfit_item, outfit_item_array) -    { -        LLViewerInventoryItem* linked_item = outfit_item->getLinkedItem(); -        if (linked_item != NULL && linked_item->getActualType() == LLAssetType::AT_TEXTURE) -        { -            gInventory.removeItem(outfit_item->getUUID()); -        } -    } +    LLAppearanceMgr::instance().removeOutfitPhoto(outfit_id);      return true;  }  | 
