From 27dca7fa4093665ef84e3f4ce7de7a85ef897ad8 Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@alchemyviewer.org> Date: Wed, 4 Jan 2023 23:53:53 -0500 Subject: [PATCH] Add nearby list click to zoom option --- .../newview/app_settings/settings_alchemy.xml | 11 ++++ indra/newview/llpanelpeople.cpp | 66 +++++++++++++++++-- indra/newview/llpanelpeople.h | 8 +++ .../xui/en/menu_people_nearby_view.xml | 41 ++++++++++++ 4 files changed, 122 insertions(+), 4 deletions(-) diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml index 734dbc79d03..92baa20706e 100644 --- a/indra/newview/app_settings/settings_alchemy.xml +++ b/indra/newview/app_settings/settings_alchemy.xml @@ -607,6 +607,17 @@ <key>Value</key> <real>0.15</real> </map> + <key>AlchemyNearbyPeopleClickAction</key> + <map> + <key>Comment</key> + <string>0 - IM, 1 - Profile, 2 - Zoom In, 3 - Teleport To</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>2</integer> + </map> <key>AlchemyNearbyTypingIndicators</key> <map> <key>Comment</key> diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 1cc810b806b..c6ed2c7c65c 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -44,6 +44,7 @@ #include "llpanelpeople.h" // newview +#include "alavataractions.h" #include "llaccordionctrl.h" #include "llaccordionctrltab.h" #include "llagent.h" @@ -686,7 +687,7 @@ BOOL LLPanelPeople::postBuild() mOnlineFriendList->setItemDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, _1)); mAllFriendList->setItemDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, _1)); - mNearbyList->setItemDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, _1)); + mNearbyList->setItemDoubleClickCallback(boost::bind(&LLPanelPeople::onNearbyListDoubleClicked, this, _1)); mRecentList->setItemDoubleClickCallback(boost::bind(&LLPanelPeople::onAvatarListDoubleClicked, this, _1)); mOnlineFriendList->setCommitCallback(boost::bind(&LLPanelPeople::onAvatarListCommitted, this, mOnlineFriendList)); @@ -1192,6 +1193,38 @@ void LLPanelPeople::onAvatarListCommitted(LLAvatarList* list) updateButtons(); } +void LLPanelPeople::onNearbyListDoubleClicked(LLUICtrl* ctrl) +{ + LLAvatarListItem* item = dynamic_cast<LLAvatarListItem*>(ctrl); + if(!item) + { + return; + } + + LLUUID clicked_id = item->getAvatarId(); + if(gAgent.getID() == clicked_id) + { + return; + } + U32 nearby_list_click_behavior = gSavedSettings.getU32("AlchemyNearbyPeopleClickAction"); + switch (nearby_list_click_behavior) + { + default: + case 0: + LLAvatarActions::startIM(clicked_id); + break; + case 1: + LLAvatarActions::showProfile(clicked_id); + break; + case 2: + handle_zoom_to_object(clicked_id); + break; + case 3: + ALAvatarActions::teleportTo(clicked_id); + break; + } +} + void LLPanelPeople::onAddFriendButtonClicked() { LLUUID id = getCurrentItemID(); @@ -1417,21 +1450,46 @@ void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata) mNearbyList->setShowCompleteName(!hide_usernames); mNearbyList->handleDisplayNamesOptionChanged(); } + else if (chosen_item == "click_im") + { + gSavedSettings.setU32("AlchemyNearbyPeopleClickAction", E_CLICK_TO_IM); + } + else if (chosen_item == "click_profile") + { + gSavedSettings.setU32("AlchemyNearbyPeopleClickAction", E_CLICK_TO_PROFILE); + } + else if (chosen_item == "click_zoom") + { + gSavedSettings.setU32("AlchemyNearbyPeopleClickAction", E_CLICK_TO_ZOOM); + } + else if (chosen_item == "click_teleport") + { + gSavedSettings.setU32("AlchemyNearbyPeopleClickAction", E_CLICK_TO_TELEPORT); + } } bool LLPanelPeople::onNearbyViewSortMenuItemCheck(const LLSD& userdata) { std::string item = userdata.asString(); U32 sort_order = gSavedSettings.getU32("NearbyPeopleSortOrder"); + U32 click_action = gSavedSettings.getU32("AlchemyNearbyPeopleClickAction"); if (item == "sort_by_recent_speakers") return sort_order == E_SORT_BY_RECENT_SPEAKERS; - if (item == "sort_name") + else if (item == "sort_name") return sort_order == E_SORT_BY_NAME; - if (item == "sort_distance") + else if (item == "sort_distance") return sort_order == E_SORT_BY_DISTANCE; - if (item == "sort_arrival") + else if (item == "sort_arrival") return sort_order == E_SORT_BY_RECENT_ARRIVAL; + else if (item == "click_im") + return click_action == E_CLICK_TO_IM; + else if (item == "click_profile") + return click_action == E_CLICK_TO_PROFILE; + else if (item == "click_zoom") + return click_action == E_CLICK_TO_ZOOM; + else if (item == "click_teleport") + return click_action == E_CLICK_TO_TELEPORT; return false; } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index ab108c51982..0a0a5feb2a5 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -78,6 +78,13 @@ class LLPanelPeople E_SORT_BY_RECENT_ARRIVAL = 5 } ESortOrder; + typedef enum e_click_actions { + E_CLICK_TO_IM = 0, + E_CLICK_TO_PROFILE = 1, + E_CLICK_TO_ZOOM = 2, + E_CLICK_TO_TELEPORT = 3 + } EClickActions; + void removePicker(); // methods indirectly called by the updaters @@ -108,6 +115,7 @@ class LLPanelPeople void onMoreButtonClicked(); void onAvatarListDoubleClicked(LLUICtrl* ctrl); void onAvatarListCommitted(LLAvatarList* list); + void onNearbyListDoubleClicked(LLUICtrl* ctrl); bool onGroupPlusButtonValidate(); void onGroupMinusButtonClicked(); void onGroupPlusMenuItemClicked(const LLSD& userdata); diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml index 889447e5623..e3e6e8c16ee 100644 --- a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml +++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml @@ -44,6 +44,47 @@ parameter="sort_arrival"/> </menu_item_check> <menu_item_separator layout="topleft" /> + <menu_item_check + label="Click to IM" + name="click_im"> + <menu_item_check.on_click + function="People.Nearby.ViewSort.Action" + parameter="click_im"/> + <menu_item_check.on_check + function="People.Nearby.ViewSort.CheckItem" + parameter="click_im"/> + </menu_item_check> + <menu_item_check + label="Click to view profile" + name="click_profile"> + <menu_item_check.on_click + function="People.Nearby.ViewSort.Action" + parameter="click_profile"/> + <menu_item_check.on_check + function="People.Nearby.ViewSort.CheckItem" + parameter="click_profile"/> + </menu_item_check> + <menu_item_check + label="Click to zoom in" + name="click_zoom"> + <menu_item_check.on_click + function="People.Nearby.ViewSort.Action" + parameter="click_zoom"/> + <menu_item_check.on_check + function="People.Nearby.ViewSort.CheckItem" + parameter="click_zoom"/> + </menu_item_check> + <menu_item_check + label="Click to teleport to" + name="click_teleport"> + <menu_item_check.on_click + function="People.Nearby.ViewSort.Action" + parameter="click_teleport"/> + <menu_item_check.on_check + function="People.Nearby.ViewSort.CheckItem" + parameter="click_teleport"/> + </menu_item_check> + <menu_item_separator layout="topleft" /> <menu_item_check name="view_icons" label="View People Icons"> <menu_item_check.on_click function="People.Nearby.ViewSort.Action" -- GitLab