diff options
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/newview/llagentwearables.cpp | 27 | ||||
| -rwxr-xr-x | indra/newview/llagentwearables.h | 1 | ||||
| -rwxr-xr-x | indra/newview/llappearancemgr.cpp | 32 | ||||
| -rwxr-xr-x | indra/newview/llappearancemgr.h | 1 | ||||
| -rwxr-xr-x | indra/newview/llinventorybridge.cpp | 179 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.h | 3 | ||||
| -rwxr-xr-x | indra/newview/llviewermenu.cpp | 2 | 
7 files changed, 35 insertions, 210 deletions
| diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index e44b27c6af..53a255fe92 100755 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1715,7 +1715,7 @@ void LLAgentWearables::userRemoveWearablesOfType(const LLWearableType::EType &ty  	}  } -// Combines userRemoveAllAttachments() and userAttachMultipleAttachments() logic to +// Combines userRemoveMulipleAttachments() and userAttachMultipleAttachments() logic to  // get attachments into desired state with minimal number of adds/removes.  void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array)  { @@ -1811,31 +1811,6 @@ void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remo  	gMessageSystem->sendReliable(gAgent.getRegionHost());  } -void LLAgentWearables::userRemoveAllAttachments() -{ -	if (!isAgentAvatarValid()) return; - -	llvo_vec_t objects_to_remove; -	 -	for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();  -		 iter != gAgentAvatarp->mAttachmentPoints.end();) -	{ -		LLVOAvatar::attachment_map_t::iterator curiter = iter++; -		LLViewerJointAttachment* attachment = curiter->second; -		for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); -			 attachment_iter != attachment->mAttachedObjects.end(); -			 ++attachment_iter) -		{ -			LLViewerObject *attached_object = (*attachment_iter); -			if (attached_object) -			{ -				objects_to_remove.push_back(attached_object); -			} -		} -	} -	userRemoveMultipleAttachments(objects_to_remove); -} -  void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_array_t& obj_item_array)  {  	// Build a compound message to send all the objects that need to be rezzed. diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index 5932be21c6..550560d7bc 100755 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -215,7 +215,6 @@ public:  	static void 	userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array);  	static void		userRemoveMultipleAttachments(llvo_vec_t& llvo_array); -	static void		userRemoveAllAttachments();  	static void		userAttachMultipleAttachments(LLInventoryModel::item_array_t& obj_item_array);  	BOOL			itemUpdatePending(const LLUUID& item_id) const; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 933049fa79..71b7298f5c 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -2238,6 +2238,38 @@ void LLAppearanceMgr::removeAllClothesFromAvatar()  	removeItemsFromAvatar(item_ids);  } +void LLAppearanceMgr::removeAllAttachmentsFromAvatar() +{ +	if (!isAgentAvatarValid()) return; + +	LLAgentWearables::llvo_vec_t objects_to_remove; +	 +	for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin();  +		 iter != gAgentAvatarp->mAttachmentPoints.end();) +	{ +		LLVOAvatar::attachment_map_t::iterator curiter = iter++; +		LLViewerJointAttachment* attachment = curiter->second; +		for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); +			 attachment_iter != attachment->mAttachedObjects.end(); +			 ++attachment_iter) +		{ +			LLViewerObject *attached_object = (*attachment_iter); +			if (attached_object) +			{ +				objects_to_remove.push_back(attached_object); +			} +		} +	} +	uuid_vec_t ids_to_remove; +	for (LLAgentWearables::llvo_vec_t::iterator it = objects_to_remove.begin(); +		 it != objects_to_remove.end(); +		 ++it) +	{ +		ids_to_remove.push_back((*it)->getAttachmentItemID()); +	} +	removeItemsFromAvatar(ids_to_remove); +} +  void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id, bool do_update)  {  	gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 7734eba144..df27d5478a 100755 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -136,6 +136,7 @@ public:  	void removeCOFItemLinks(const LLUUID& item_id, bool do_update = true);  	void removeCOFLinksOfType(LLWearableType::EType type, bool do_update = true);  	void removeAllClothesFromAvatar(); +	void removeAllAttachmentsFromAvatar();  	// Add COF link to ensemble folder.  	void addEnsembleLink(LLInventoryCategory* item, bool do_update = true); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index e07365109b..27dfbba561 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -107,8 +107,6 @@ void dec_busy_count()  }  // Function declarations -void remove_inventory_category_from_avatar(LLInventoryCategory* category); -void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id);  bool move_task_inventory_callback(const LLSD& notification, const LLSD& response, LLMoveInv*);  bool confirm_attachment_rez(const LLSD& notification, const LLSD& response);  void teleport_via_landmark(const LLUUID& asset_id); @@ -5365,120 +5363,6 @@ LLWearableBridge::LLWearableBridge(LLInventoryPanel* inventory,  	mInvType = inv_type;  } -void remove_inventory_category_from_avatar( LLInventoryCategory* category ) -{ -	if(!category) return; -	lldebugs << "remove_inventory_category_from_avatar( " << category->getName() -			 << " )" << llendl; - - -	if (gAgentCamera.cameraCustomizeAvatar()) -	{ -		// switching to outfit editor should automagically save any currently edited wearable -		LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "edit_outfit")); -	} - -	remove_inventory_category_from_avatar_step2(TRUE, category->getUUID() ); -} - -struct OnRemoveStruct -{ -	LLUUID mUUID; -	OnRemoveStruct(const LLUUID& uuid): -		mUUID(uuid) -	{ -	} -}; - -void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id) -{ - -	// Find all the wearables that are in the category's subtree. -	lldebugs << "remove_inventory_category_from_avatar_step2()" << llendl; -	if(proceed) -	{ -		LLInventoryModel::cat_array_t cat_array; -		LLInventoryModel::item_array_t item_array; -		LLFindWearables is_wearable; -		gInventory.collectDescendentsIf(category_id, -										cat_array, -										item_array, -										LLInventoryModel::EXCLUDE_TRASH, -										is_wearable); -		S32 i; -		S32 wearable_count = item_array.count(); - -		LLInventoryModel::cat_array_t	obj_cat_array; -		LLInventoryModel::item_array_t	obj_item_array; -		LLIsType is_object( LLAssetType::AT_OBJECT ); -		gInventory.collectDescendentsIf(category_id, -										obj_cat_array, -										obj_item_array, -										LLInventoryModel::EXCLUDE_TRASH, -										is_object); -		S32 obj_count = obj_item_array.count(); - -		// Find all gestures in this folder -		LLInventoryModel::cat_array_t	gest_cat_array; -		LLInventoryModel::item_array_t	gest_item_array; -		LLIsType is_gesture( LLAssetType::AT_GESTURE ); -		gInventory.collectDescendentsIf(category_id, -										gest_cat_array, -										gest_item_array, -										LLInventoryModel::EXCLUDE_TRASH, -										is_gesture); -		S32 gest_count = gest_item_array.count(); - -		if (wearable_count > 0)	//Loop through wearables.  If worn, remove. -		{ -			for(i = 0; i  < wearable_count; ++i) -			{ -				LLViewerInventoryItem *item = item_array.get(i); -				if (item->getType() == LLAssetType::AT_BODYPART) -					continue; -				if (gAgent.isTeen() && item->isWearableType() && -					(item->getWearableType() == LLWearableType::WT_UNDERPANTS || item->getWearableType() == LLWearableType::WT_UNDERSHIRT)) -					continue; -				if (get_is_item_worn(item->getUUID())) -				{ -					LLWearableList::instance().getAsset(item->getAssetUUID(), -														item->getName(), -														item->getType(), -														LLWearableBridge::onRemoveFromAvatarArrived, -														new OnRemoveStruct(item->getLinkedUUID())); -				} -			} -		} - -		if (obj_count > 0) -		{ -			for(i = 0; i  < obj_count; ++i) -			{ -				LLViewerInventoryItem *obj_item = obj_item_array.get(i); -				if (get_is_item_worn(obj_item->getUUID())) -				{ -					LLVOAvatarSelf::detachAttachmentIntoInventory(obj_item->getLinkedUUID()); -				} -			} -		} - -		if (gest_count > 0) -		{ -			for(i = 0; i  < gest_count; ++i) -			{ -				LLViewerInventoryItem *gest_item = gest_item_array.get(i); -				if (get_is_item_worn(gest_item->getUUID())) -				{ -					LLGestureMgr::instance().deactivateGesture( gest_item->getLinkedUUID() ); -					gInventory.updateItem( gest_item ); -					gInventory.notifyObservers(); -				} - -			} -		} -	} -} -  BOOL LLWearableBridge::renameItem(const std::string& new_name)  {  	if (get_is_item_worn(mUUID)) @@ -5774,69 +5658,6 @@ BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data)  	return FALSE;  } -// static -void LLWearableBridge::onRemoveFromAvatar(void* user_data) -{ -	LLWearableBridge* self = (LLWearableBridge*)user_data; -	if(!self) return; -	if(get_is_item_worn(self->mUUID)) -	{ -		LLViewerInventoryItem* item = self->getItem(); -		if (item) -		{ -			LLUUID parent_id = item->getParentUUID(); -			LLWearableList::instance().getAsset(item->getAssetUUID(), -												item->getName(), -												item->getType(), -												onRemoveFromAvatarArrived, -												new OnRemoveStruct(LLUUID(self->mUUID))); -		} -	} -} - -// static -void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable, -												 void* userdata) -{ -	OnRemoveStruct *on_remove_struct = (OnRemoveStruct*) userdata; -	const LLUUID &item_id = gInventory.getLinkedItemID(on_remove_struct->mUUID); -	if(wearable) -	{ -		if( get_is_item_worn( item_id ) ) -		{ -			LLWearableType::EType type = wearable->getType(); - -			if( !(type==LLWearableType::WT_SHAPE || type==LLWearableType::WT_SKIN || type==LLWearableType::WT_HAIR || type==LLWearableType::WT_EYES ) ) //&& -				//!((!gAgent.isTeen()) && ( type==LLWearableType::WT_UNDERPANTS || type==LLWearableType::WT_UNDERSHIRT )) ) -			{ -				bool do_remove_all = false; -				U32 index = gAgentWearables.getWearableIndex(wearable); -				gAgentWearables.removeWearable( type, do_remove_all, index ); -			} -		} -	} - -	// Find and remove this item from the COF. -	LLAppearanceMgr::instance().removeCOFItemLinks(item_id,false); -	gInventory.notifyObservers(); - -	delete on_remove_struct; -} - -// static -void LLWearableBridge::removeItemFromAvatar(LLViewerInventoryItem *item) -{ -	llwarns << "safe to remove?" << llendl; -	if (item) -	{ -		LLWearableList::instance().getAsset(item->getAssetUUID(), -											item->getName(), -											item->getType(), -											LLWearableBridge::onRemoveFromAvatarArrived, -											new OnRemoveStruct(item->getUUID())); -	} -} -  void LLWearableBridge::removeFromAvatar()  {  	llwarns << "safe to remove?" << llendl; diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index dc9e88d54d..c37343e678 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -497,9 +497,6 @@ public:  	void			editOnAvatar();  	static BOOL		canRemoveFromAvatar( void* userdata ); -	static void		onRemoveFromAvatar( void* userdata ); -	static void		onRemoveFromAvatarArrived( LLWearable* wearable, 	void* userdata ); -	static void 	removeItemFromAvatar(LLViewerInventoryItem *item);  	static void 	removeAllClothesFromAvatar();  	void			removeFromAvatar();  protected: diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 5bed2eccb5..9001c79a4d 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2798,7 +2798,7 @@ class LLSelfRemoveAllAttachments : public view_listener_t  {  	bool handleEvent(const LLSD& userdata)  	{ -		LLAgentWearables::userRemoveAllAttachments(); +		LLAppearanceMgr::instance().removeAllAttachmentsFromAvatar();  		return true;  	}  }; | 
