From 497ca78802464402b24835d41fd85e4692b7c9ab Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 16 Mar 2017 23:39:41 +0100 Subject: [PATCH] Add MAINT-7215 to our avatar rendering settings floater early - yes, we even can multiselect --- .../newview/fsfloateravatarrendersettings.cpp | 56 +++++++++++++++++++ indra/newview/fsfloateravatarrendersettings.h | 5 ++ .../de/floater_fs_avatar_render_settings.xml | 1 + .../xui/de/menu_avatar_rendering_settings.xml | 5 ++ .../en/floater_fs_avatar_render_settings.xml | 15 +++++ .../en/menu_avatar_rendering_settings_add.xml | 18 ++++++ 6 files changed, 100 insertions(+) create mode 100644 indra/newview/skins/default/xui/de/menu_avatar_rendering_settings.xml create mode 100644 indra/newview/skins/default/xui/en/menu_avatar_rendering_settings_add.xml diff --git a/indra/newview/fsfloateravatarrendersettings.cpp b/indra/newview/fsfloateravatarrendersettings.cpp index e751f4ef97..e62c3697e1 100644 --- a/indra/newview/fsfloateravatarrendersettings.cpp +++ b/indra/newview/fsfloateravatarrendersettings.cpp @@ -31,6 +31,7 @@ #include "fscommon.h" #include "llfiltereditor.h" +#include "llfloateravatarpicker.h" #include "llnamelistctrl.h" #include "lltrans.h" #include "llviewercontrol.h" @@ -45,6 +46,7 @@ FSFloaterAvatarRenderSettings::FSFloaterAvatarRenderSettings(const LLSD& key) mFilterSubString(LLStringUtil::null), mFilterSubStringOrig(LLStringUtil::null) { + mCommitCallbackRegistrar.add("Settings.AddNewEntry", boost::bind(&FSFloaterAvatarRenderSettings::onClickAdd, this, _2)); } FSFloaterAvatarRenderSettings::~FSFloaterAvatarRenderSettings() @@ -87,11 +89,21 @@ BOOL FSFloaterAvatarRenderSettings::postBuild() mRenderSettingChangedCallbackConnection = FSAvatarRenderPersistence::instance().setAvatarRenderSettingChangedCallback(boost::bind(&FSFloaterAvatarRenderSettings::onAvatarRenderSettingChanged, this, _1, _2)); + this->setVisibleCallback(boost::bind(&FSFloaterAvatarRenderSettings::removePicker, this)); + loadInitialList(); return TRUE; } +void FSFloaterAvatarRenderSettings::removePicker() +{ + if (mPicker.get()) + { + mPicker.get()->closeFloater(); + } +} + void FSFloaterAvatarRenderSettings::onCloseBtn() { closeFloater(); @@ -145,6 +157,50 @@ BOOL FSFloaterAvatarRenderSettings::handleKeyHere(KEY key, MASK mask) return LLFloater::handleKeyHere(key, mask); } +void FSFloaterAvatarRenderSettings::onClickAdd(const LLSD& userdata) +{ + const std::string command_name = userdata.asString(); + LLVOAvatar::VisualMuteSettings render_setting = LLVOAvatar::AV_RENDER_NORMALLY; + if ("never" == command_name) + { + render_setting = LLVOAvatar::AV_DO_NOT_RENDER; + } + else if ("always" == command_name) + { + render_setting = LLVOAvatar::AV_ALWAYS_RENDER; + } + + LLView* button = findChild("plus_btn", TRUE); + LLFloater* root_floater = gFloaterView->getParentFloater(this); + LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(&FSFloaterAvatarRenderSettings::callbackAvatarPicked, this, _1, render_setting), + TRUE, TRUE, TRUE, root_floater->getName(), button); + + if (root_floater) + { + root_floater->addDependentFloater(picker); + } + + mPicker = picker->getHandle(); +} + +void FSFloaterAvatarRenderSettings::callbackAvatarPicked(const uuid_vec_t& ids, LLVOAvatar::VisualMuteSettings render_setting) +{ + for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) + { + LLUUID avatar_id = *it; + + LLVOAvatar *avatarp = dynamic_cast(gObjectList.findObject(avatar_id)); + if (avatarp) + { + avatarp->setVisualMuteSettings(render_setting); + } + else + { + FSAvatarRenderPersistence::instance().setAvatarRenderSettings(avatar_id, render_setting); + } + } +} + //--------------------------------------------------------------------------- // Context menu diff --git a/indra/newview/fsfloateravatarrendersettings.h b/indra/newview/fsfloateravatarrendersettings.h index 4217a6f714..095fbbcb61 100644 --- a/indra/newview/fsfloateravatarrendersettings.h +++ b/indra/newview/fsfloateravatarrendersettings.h @@ -50,11 +50,16 @@ private: void onCloseBtn(); void onFilterEdit(const std::string& search_string); void onAvatarRenderSettingChanged(const LLUUID& avatar_id, LLVOAvatar::VisualMuteSettings render_setting); + void onClickAdd(const LLSD& userdata); void loadInitialList(); void addElementToList(const LLUUID& avatar_id, LLVOAvatar::VisualMuteSettings render_setting); + void callbackAvatarPicked(const uuid_vec_t& ids, LLVOAvatar::VisualMuteSettings render_setting); + void removePicker(); + LLNameListCtrl* mAvatarList; + LLHandle mPicker; boost::signals2::connection mRenderSettingChangedCallbackConnection; diff --git a/indra/newview/skins/default/xui/de/floater_fs_avatar_render_settings.xml b/indra/newview/skins/default/xui/de/floater_fs_avatar_render_settings.xml index a7c8ba1d13..85284bc6b4 100644 --- a/indra/newview/skins/default/xui/de/floater_fs_avatar_render_settings.xml +++ b/indra/newview/skins/default/xui/de/floater_fs_avatar_render_settings.xml @@ -7,6 +7,7 @@ Komplett + diff --git a/indra/newview/skins/default/xui/de/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/de/menu_avatar_rendering_settings.xml new file mode 100644 index 0000000000..4d77c98977 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_avatar_rendering_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/floater_fs_avatar_render_settings.xml b/indra/newview/skins/default/xui/en/floater_fs_avatar_render_settings.xml index 7f271b79c1..e4818cedc4 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_avatar_render_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_avatar_render_settings.xml @@ -29,6 +29,21 @@ max_length_chars="300" name="filter_input" top="4" + right="-35" /> + + + + + + + + + \ No newline at end of file