diff options
| -rw-r--r-- | indra/newview/llavataractions.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llavataractions.h | 12 | ||||
| -rw-r--r-- | indra/newview/llpanelpeople.cpp | 20 | ||||
| -rw-r--r-- | indra/newview/llpanelpeople.h | 1 | ||||
| -rw-r--r-- | indra/newview/llpanelpeoplemenus.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml | 9 | 
6 files changed, 45 insertions, 20 deletions
| diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index eedadb962f..b9ae976e58 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -689,6 +689,7 @@ void LLAvatarActions::toggleBlock(const LLUUID& id)  		LLMuteList::getInstance()->add(mute);  	}  } +  // static  bool LLAvatarActions::canOfferTeleport(const LLUUID& id)  { @@ -704,6 +705,21 @@ bool LLAvatarActions::canOfferTeleport(const LLUUID& id)  	return true;  } +// static +bool LLAvatarActions::canOfferTeleport(const uuid_vec_t& ids) +{ +	bool result = true; +	for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) +	{ +		if(!canOfferTeleport(*it)) +		{ +			result = false; +			break; +		} +	} +	return result; +} +  void LLAvatarActions::inviteToGroup(const LLUUID& id)  {  	LLFloaterGroupPicker* widget = LLFloaterReg::showTypedInstance<LLFloaterGroupPicker>("group_picker", LLSD(id)); diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index cd8ac3b653..6313ae0759 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -171,12 +171,18 @@ public:  	static void csr(const LLUUID& id, std::string name);  	/** -	 * Checks whether can offer teleport to the avatar -	 * Can't offer only for offline friends +	 * Checks whether we can offer a teleport to the avatar, only offline friends +	 * cannot be offered a teleport. +	 * +	 * @return false if avatar is a friend and not visibly online  	 */  	static bool canOfferTeleport(const LLUUID& id); -	 +	/** +	 * @return false if any one of the specified avatars a friend and not visibly online +	 */ +	static bool canOfferTeleport(const uuid_vec_t& ids); +  private:  	static bool callbackAddFriend(const LLSD& notification, const LLSD& response);  	static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 1c4476ca49..bb202c864d 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -754,12 +754,6 @@ void LLPanelPeople::buttonSetAction(const std::string& btn_name, const commit_si  	button->setClickedCallback(cb);  } -bool LLPanelPeople::isFriendOnline(const LLUUID& id) -{ -	uuid_vec_t ids = mOnlineFriendList->getIDs(); -	return std::find(ids.begin(), ids.end(), id) != ids.end(); -} -  void LLPanelPeople::updateButtons()  {  	std::string cur_tab		= getActiveTabName(); @@ -821,11 +815,11 @@ void LLPanelPeople::updateButtons()  	bool enable_calls = LLVoiceClient::getInstance()->isVoiceWorking() && LLVoiceClient::getInstance()->voiceEnabled(); -	buttonSetEnabled("teleport_btn",		friends_tab_active && item_selected && isFriendOnline(selected_uuids.front())); -	buttonSetEnabled("view_profile_btn",	item_selected); -	buttonSetEnabled("im_btn",				multiple_selected); // allow starting the friends conference for multiple selection -	buttonSetEnabled("call_btn",			multiple_selected && enable_calls); -	buttonSetEnabled("share_btn",			item_selected); // not implemented yet +	buttonSetEnabled("view_profile_btn",item_selected); +	buttonSetEnabled("share_btn",		item_selected); +	buttonSetEnabled("im_btn",			multiple_selected); // allow starting the friends conference for multiple selection +	buttonSetEnabled("call_btn",		multiple_selected && enable_calls); +	buttonSetEnabled("teleport_btn",	multiple_selected && LLAvatarActions::canOfferTeleport(selected_uuids));  	bool none_group_selected = item_selected && selected_id.isNull();  	buttonSetEnabled("group_info_btn", !none_group_selected); @@ -1329,7 +1323,9 @@ void LLPanelPeople::onGroupCallButtonClicked()  void LLPanelPeople::onTeleportButtonClicked()  { -	LLAvatarActions::offerTeleport(getCurrentItemID()); +	uuid_vec_t selected_uuids; +	getCurrentItemIDs(selected_uuids); +	LLAvatarActions::offerTeleport(selected_uuids);  }  void LLPanelPeople::onShareButtonClicked() diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index e931537042..b875ac51a6 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -72,7 +72,6 @@ private:  	void					updateNearbyList();  	void					updateRecentList(); -	bool					isFriendOnline(const LLUUID& id);  	bool					isItemsFreeOfFriends(const uuid_vec_t& uuids);  	void					updateButtons(); diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index efca3ae1c2..f12c4de2f7 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -81,6 +81,7 @@ LLContextMenu* NearbyMenu::createMenu()  		// registrar.add("Avatar.AddFriend",	boost::bind(&LLAvatarActions::requestFriendshipDialog,	mUUIDs)); // *TODO: unimplemented  		registrar.add("Avatar.IM",			boost::bind(&LLAvatarActions::startConference,			mUUIDs));  		registrar.add("Avatar.Call",		boost::bind(&LLAvatarActions::startAdhocCall,			mUUIDs)); +		registrar.add("Avatar.OfferTeleport",	boost::bind(&NearbyMenu::offerTeleport,					this));  		registrar.add("Avatar.RemoveFriend",boost::bind(&LLAvatarActions::removeFriendsDialog,		mUUIDs));  		// registrar.add("Avatar.Share",		boost::bind(&LLAvatarActions::startIM,					mUUIDs)); // *TODO: unimplemented  		// registrar.add("Avatar.Pay",		boost::bind(&LLAvatarActions::pay,						mUUIDs)); // *TODO: unimplemented @@ -168,8 +169,7 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata)  	}  	else if(item == std::string("can_offer_teleport"))  	{ -		const LLUUID& id = mUUIDs.front(); -		return LLAvatarActions::canOfferTeleport(id); +		return LLAvatarActions::canOfferTeleport(mUUIDs);  	}  	return false;  } @@ -191,8 +191,7 @@ void NearbyMenu::offerTeleport()  {  	// boost::bind cannot recognize overloaded method LLAvatarActions::offerTeleport(),  	// so we have to use a wrapper. -	const LLUUID& id = mUUIDs.front(); -	LLAvatarActions::offerTeleport(id); +	LLAvatarActions::offerTeleport(mUUIDs);  }  } // namespace LLPanelPeopleMenus diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml index 588342595e..5d58a9d289 100644 --- a/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml @@ -57,4 +57,13 @@          <on_click           function="Avatar.Pay" />      </menu_item_call> +    <menu_item_call +    label="Offer Teleport" +    name="teleport"> +      <menu_item_call.on_click +       function="Avatar.OfferTeleport"/> +      <menu_item_call.on_enable +      function="Avatar.EnableItem" +      parameter="can_offer_teleport"/> +    </menu_item_call>  </context_menu> | 
