diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 25 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.h | 6 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.cpp | 19 | ||||
| -rw-r--r-- | indra/newview/llwearableitemslist.cpp | 4 | 
4 files changed, 33 insertions, 21 deletions
| diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 862c68ecda..f4dbac5c0e 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -951,7 +951,7 @@ const LLUUID LLAppearanceMgr::getBaseOutfitUUID()  	return outfit_cat->getUUID();  } -bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_update, bool replace) +bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_update, bool replace, LLPointer<LLInventoryCallback> cb)  {  	if (item_id_to_wear.isNull()) return false; @@ -1005,7 +1005,7 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up  		// Remove existing body parts anyway because we must not be able to wear e.g. two skins.  		removeCOFLinksOfType(item_to_wear->getWearableType(), false); -		addCOFItemLink(item_to_wear, do_update); +		addCOFItemLink(item_to_wear, do_update, cb);  		break;  	case LLAssetType::AT_OBJECT:  		rez_attachment(item_to_wear, NULL); @@ -1959,9 +1959,10 @@ bool areMatchingWearables(const LLViewerInventoryItem *a, const LLViewerInventor  class LLDeferredCOFLinkObserver: public LLInventoryObserver  {  public: -	LLDeferredCOFLinkObserver(const LLUUID& item_id, bool do_update): +	LLDeferredCOFLinkObserver(const LLUUID& item_id, bool do_update, LLPointer<LLInventoryCallback> cb = NULL):  		mItemID(item_id), -		mDoUpdate(do_update) +		mDoUpdate(do_update), +		mCallback(cb)  	{  	} @@ -1975,7 +1976,7 @@ public:  		if (item)  		{  			gInventory.removeObserver(this); -			LLAppearanceMgr::instance().addCOFItemLink(item,mDoUpdate); +			LLAppearanceMgr::instance().addCOFItemLink(item,mDoUpdate,mCallback);  			delete this;  		}  	} @@ -1983,26 +1984,27 @@ public:  private:  	const LLUUID mItemID;  	bool mDoUpdate; +	LLPointer<LLInventoryCallback> mCallback;  };  // BAP - note that this runs asynchronously if the item is not already loaded from inventory.  // Dangerous if caller assumes link will exist after calling the function. -void LLAppearanceMgr::addCOFItemLink(const LLUUID &item_id, bool do_update ) +void LLAppearanceMgr::addCOFItemLink(const LLUUID &item_id, bool do_update, LLPointer<LLInventoryCallback> cb)  {  	const LLInventoryItem *item = gInventory.getItem(item_id);  	if (!item)  	{ -		LLDeferredCOFLinkObserver *observer = new LLDeferredCOFLinkObserver(item_id, do_update); +		LLDeferredCOFLinkObserver *observer = new LLDeferredCOFLinkObserver(item_id, do_update, cb);  		gInventory.addObserver(observer);  	}  	else  	{ -		addCOFItemLink(item, do_update); +		addCOFItemLink(item, do_update, cb);  	}  } -void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update ) +void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update, LLPointer<LLInventoryCallback> cb)  {		  	const LLViewerInventoryItem *vitem = dynamic_cast<const LLViewerInventoryItem*>(item);  	if (!vitem) @@ -2063,7 +2065,10 @@ void LLAppearanceMgr::addCOFItemLink(const LLInventoryItem *item, bool do_update  	}  	else  	{ -		LLPointer<LLInventoryCallback> cb = do_update ? new ModifiedCOFCallback : 0; +		if(do_update && cb.isNull()) +		{ +			cb = new ModifiedCOFCallback; +		}  		const std::string description = vitem->getIsLinkType() ? vitem->getDescription() : "";  		link_inventory_item( gAgent.getID(),  							 vitem->getLinkedUUID(), diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 8834f8c395..9a32af4c3d 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -99,7 +99,7 @@ public:  	const LLUUID getBaseOutfitUUID();  	// Wear/attach an item (from a user's inventory) on the agent -	bool wearItemOnAvatar(const LLUUID& item_to_wear, bool do_update = true, bool replace = false); +	bool wearItemOnAvatar(const LLUUID& item_to_wear, bool do_update = true, bool replace = false, LLPointer<LLInventoryCallback> cb = NULL);  	// Update the displayed outfit name in UI.  	void updatePanelOutfitName(const std::string& name); @@ -124,8 +124,8 @@ public:  				 LLPointer<LLInventoryCallback> cb);  	// Add COF link to individual item. -	void addCOFItemLink(const LLUUID& item_id, bool do_update = true); -	void addCOFItemLink(const LLInventoryItem *item, bool do_update = true); +	void addCOFItemLink(const LLUUID& item_id, bool do_update = true, LLPointer<LLInventoryCallback> cb = NULL); +	void addCOFItemLink(const LLInventoryItem *item, bool do_update = true, LLPointer<LLInventoryCallback> cb = NULL);  	// Remove COF entries  	void removeCOFItemLinks(const LLUUID& item_id, bool do_update = true); diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 2df1982e03..f8350a56ef 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -567,13 +567,20 @@ void LLPanelOutfitEdit::onSearchEdit(const std::string& string)  void LLPanelOutfitEdit::onPlusBtnClicked(void)  { -	LLUUID selected_id; -	getCurrentItemUUID(selected_id); - -	if (selected_id.isNull()) return; +	uuid_vec_t selected_items; +	getSelectedItemsUUID(selected_items); -	//replacing instead of adding the item -	LLAppearanceMgr::getInstance()->wearItemOnAvatar(selected_id, true, true); +	LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy; +	 +	for(uuid_vec_t::iterator iter = selected_items.begin(); iter != selected_items.end(); iter++) +	{ +		LLUUID selected_id = *iter; +		if (!selected_id.isNull()) +		{ +			//replacing instead of adding the item +			LLAppearanceMgr::getInstance()->wearItemOnAvatar(selected_id, false, true, link_waiter); +		} +	}  }  void LLPanelOutfitEdit::onVisibilityChange() diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 9f9a9bef35..015c058651 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -576,8 +576,8 @@ LLContextMenu* LLWearableItemsList::ContextMenu::createMenu()  	const uuid_vec_t& ids = mUUIDs;		// selected items IDs  	LLUUID selected_id = ids.front();	// ID of the first selected item -	functor_t wear = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, true); -	functor_t add = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, false); +	functor_t wear = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, true, LLPointer<LLInventoryCallback>(NULL)); +	functor_t add = boost::bind(&LLAppearanceMgr::wearItemOnAvatar, LLAppearanceMgr::getInstance(), _1, true, false, LLPointer<LLInventoryCallback>(NULL));  	functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1);  	// Register handlers common for all wearable types. | 
