From ed420c3645dd4067de755c54f775d71c9a745643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Liru=20F=C3=A6rs?= Date: Wed, 15 Jan 2020 19:46:49 -0500 Subject: [PATCH] Add Edit and Add to Selection to Object UI menus --- indra/newview/llviewermenu.cpp | 44 +++++++++++++++++++ .../default/xui/en-us/menu_objects_list.xml | 8 ++++ .../default/xui/en-us/menu_url_objectim.xml | 8 ++++ 3 files changed, 60 insertions(+) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 2af557b96..d59bc9c6f 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -9732,6 +9732,48 @@ class ListObjectEnableTouch : public view_listener_t } }; +class ListObjectEdit : public view_listener_t +{ + bool handleEvent(LLPointer event, const LLSD& userdata) + { + std::vector objs; + auto func = rlv_handler_t::isEnabled() ? static_cast>([&objs](LLViewerObject* obj) { if (gRlvHandler.canEdit(obj)) objs.push_back(obj); }) : [&objs](LLViewerObject* obj) { if (obj) objs.push_back(obj); }; + list_for_each_object(func); + + if (objs.empty()) return true; + + bool new_selection = userdata.asBoolean(); + + auto& selmgr = LLSelectMgr::instance(); + if (new_selection) selmgr.deselectAll(); + + auto selection = new_selection ? nullptr : selmgr.getSelection(); + auto old_primary = selection ? selection->getPrimaryObject() : nullptr; + for (const auto& obj : objs) + selmgr.selectObjectAndFamily(obj, true); + + if (old_primary) selmgr.selectObjectAndFamily(old_primary); + + if (new_selection) handle_object_edit(); + return true; + } +}; + +class ListObjectCanEdit : public view_listener_t +{ + bool handleEvent(LLPointer event, const LLSD& userdata) + { + bool new_selection = userdata["data"].asBoolean(); + auto& selmgr = LLSelectMgr::instance(); + auto selection = new_selection ? nullptr : selmgr.getSelection(); + bool has_old_selection = selection && !selection->isEmpty() && !selection->isAttachment(); + auto func = rlv_handler_t::isEnabled() ? static_cast>([](LLViewerObject* obj) { return !!gRlvHandler.canEdit(obj); }) : [](LLViewerObject* obj) { return !!obj; }; + gMenuHolder->findControl(userdata["control"].asString()) + ->setValue((new_selection || has_old_selection) && list_has_valid_object(func)); + return true; + } +}; + class MediaCtrlCopyURL : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) @@ -10132,6 +10174,8 @@ void initialize_menus() addMenu(new ListObjectEnablePay, "List.Object.EnablePay"); addMenu(new ListObjectTouch, "List.Object.Touch"); addMenu(new ListObjectEnableTouch, "List.Object.EnableTouch"); + addMenu(new ListObjectEdit, "List.Object.Edit"); + addMenu(new ListObjectCanEdit, "List.Object.CanEdit"); add_radar_listeners(); diff --git a/indra/newview/skins/default/xui/en-us/menu_objects_list.xml b/indra/newview/skins/default/xui/en-us/menu_objects_list.xml index d7ed7f282..7606a5bbb 100644 --- a/indra/newview/skins/default/xui/en-us/menu_objects_list.xml +++ b/indra/newview/skins/default/xui/en-us/menu_objects_list.xml @@ -28,6 +28,14 @@ + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_objectim.xml b/indra/newview/skins/default/xui/en-us/menu_url_objectim.xml index dc5bede9c..6f32a938f 100644 --- a/indra/newview/skins/default/xui/en-us/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/en-us/menu_url_objectim.xml @@ -68,6 +68,14 @@ + + + + + + + +