FIRE-19798: Add overview of persister avatar render settings
parent
5b23cb6be2
commit
0e930dce4f
|
|
@ -139,6 +139,7 @@ set(viewer_SOURCE_FILES
|
|||
fsdroptarget.cpp
|
||||
fsexportperms.cpp
|
||||
fsfloateraddtocontactset.cpp
|
||||
fsfloateravatarrendersettings.cpp
|
||||
fsfloaterblocklist.cpp
|
||||
fsfloatercontacts.cpp
|
||||
fsfloatercontactsetconfiguration.cpp
|
||||
|
|
@ -878,6 +879,7 @@ set(viewer_HEADER_FILES
|
|||
fsdroptarget.h
|
||||
fsexportperms.h
|
||||
fsfloateraddtocontactset.h
|
||||
fsfloateravatarrendersettings.h
|
||||
fsfloaterblocklist.h
|
||||
fsfloatercontacts.h
|
||||
fsfloatercontactsetconfiguration.h
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include "fsavatarrenderpersistence.h"
|
||||
#include "llsdserialize.h"
|
||||
|
||||
|
||||
FSAvatarRenderPersistence::FSAvatarRenderPersistence()
|
||||
{
|
||||
}
|
||||
|
|
@ -69,6 +70,8 @@ void FSAvatarRenderPersistence::setAvatarRenderSettings(const LLUUID& avatar_id,
|
|||
{
|
||||
mAvatarRenderMap[avatar_id] = render_settings;
|
||||
}
|
||||
|
||||
mAvatarRenderSettingChangedCallback(avatar_id, render_settings);
|
||||
}
|
||||
|
||||
void FSAvatarRenderPersistence::loadAvatarRenderSettings()
|
||||
|
|
|
|||
|
|
@ -43,6 +43,15 @@ public:
|
|||
LLVOAvatar::VisualMuteSettings getAvatarRenderSettings(const LLUUID& avatar_id);
|
||||
void setAvatarRenderSettings(const LLUUID& avatar_id, LLVOAvatar::VisualMuteSettings render_settings);
|
||||
|
||||
typedef std::map<LLUUID, LLVOAvatar::VisualMuteSettings> avatar_render_setting_t;
|
||||
avatar_render_setting_t getAvatarRenderMap() const { return mAvatarRenderMap; }
|
||||
|
||||
typedef boost::signals2::signal<void(const LLUUID& avatar_id, LLVOAvatar::VisualMuteSettings render_setting)> render_setting_changed_callback_t;
|
||||
boost::signals2::connection setAvatarRenderSettingChangedCallback(const render_setting_changed_callback_t::slot_type& cb)
|
||||
{
|
||||
return mAvatarRenderSettingChangedCallback.connect(cb);
|
||||
}
|
||||
|
||||
private:
|
||||
FSAvatarRenderPersistence();
|
||||
virtual ~FSAvatarRenderPersistence();
|
||||
|
|
@ -50,8 +59,8 @@ private:
|
|||
void loadAvatarRenderSettings();
|
||||
void saveAvatarRenderSettings();
|
||||
|
||||
typedef std::map<LLUUID, LLVOAvatar::VisualMuteSettings> avatar_render_setting_t;
|
||||
avatar_render_setting_t mAvatarRenderMap;
|
||||
};
|
||||
|
||||
render_setting_changed_callback_t mAvatarRenderSettingChangedCallback;
|
||||
};
|
||||
#endif // FS_AVATARRENDERPERSISTENCE_H
|
||||
|
|
|
|||
|
|
@ -0,0 +1,154 @@
|
|||
/**
|
||||
* @file fsfloateravatarrendersettings.cpp
|
||||
* @brief Floater for showing persisted avatar render settings
|
||||
*
|
||||
* $LicenseInfo:firstyear=2016&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2016, Ansariel Hiller
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "fsfloateravatarrendersettings.h"
|
||||
|
||||
#include "llnamelistctrl.h"
|
||||
#include "lltrans.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
#include "llvoavatar.h"
|
||||
|
||||
|
||||
FSFloaterAvatarRenderSettings::FSFloaterAvatarRenderSettings(const LLSD& key)
|
||||
: LLFloater(key),
|
||||
mAvatarList(NULL),
|
||||
mRenderSettingChangedCallbackConnection()
|
||||
{
|
||||
}
|
||||
|
||||
FSFloaterAvatarRenderSettings::~FSFloaterAvatarRenderSettings()
|
||||
{
|
||||
if (mRenderSettingChangedCallbackConnection.connected())
|
||||
{
|
||||
mRenderSettingChangedCallbackConnection.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void FSFloaterAvatarRenderSettings::addElementToList(const LLUUID& avatar_id, LLVOAvatar::VisualMuteSettings render_setting)
|
||||
{
|
||||
static const std::string av_render_never = getString("av_render_never");
|
||||
static const std::string av_render_always = getString("av_render_always");
|
||||
static const std::string av_name_waiting = LLTrans::getString("AvatarNameWaiting");
|
||||
|
||||
LLNameListCtrl::NameItem item_params;
|
||||
item_params.value = avatar_id;
|
||||
item_params.target = LLNameListCtrl::INDIVIDUAL;
|
||||
|
||||
item_params.columns.add().column("name");
|
||||
item_params.name = av_name_waiting;
|
||||
|
||||
std::string render_value = (render_setting == LLVOAvatar::AV_DO_NOT_RENDER ? av_render_never : av_render_always);
|
||||
item_params.columns.add().value(render_value).column("render_setting");
|
||||
|
||||
mAvatarList->addNameItemRow(item_params);
|
||||
}
|
||||
|
||||
void FSFloaterAvatarRenderSettings::onOpen(const LLSD& key)
|
||||
{
|
||||
}
|
||||
|
||||
BOOL FSFloaterAvatarRenderSettings::postBuild()
|
||||
{
|
||||
mAvatarList = getChild<LLNameListCtrl>("avatar_list");
|
||||
mAvatarList->setContextMenu(&FSFloaterAvatarRenderPersistenceMenu::gFSAvatarRenderPersistenceMenu);
|
||||
|
||||
childSetAction("close_btn", boost::bind(&FSFloaterAvatarRenderSettings::onCloseBtn, this));
|
||||
|
||||
mRenderSettingChangedCallbackConnection = FSAvatarRenderPersistence::instance().setAvatarRenderSettingChangedCallback(boost::bind(&FSFloaterAvatarRenderSettings::onAvatarRenderSettingChanged, this, _1, _2));
|
||||
|
||||
loadInitialList();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void FSFloaterAvatarRenderSettings::onCloseBtn()
|
||||
{
|
||||
closeFloater();
|
||||
}
|
||||
|
||||
void FSFloaterAvatarRenderSettings::loadInitialList()
|
||||
{
|
||||
FSAvatarRenderPersistence::avatar_render_setting_t avatar_render_map = FSAvatarRenderPersistence::instance().getAvatarRenderMap();
|
||||
for (FSAvatarRenderPersistence::avatar_render_setting_t::iterator it = avatar_render_map.begin(); it != avatar_render_map.end(); ++it)
|
||||
{
|
||||
addElementToList(it->first, it->second);
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterAvatarRenderSettings::onAvatarRenderSettingChanged(const LLUUID& avatar_id, LLVOAvatar::VisualMuteSettings render_setting)
|
||||
{
|
||||
mAvatarList->removeNameItem(avatar_id);
|
||||
if (render_setting != LLVOAvatar::AV_RENDER_NORMALLY)
|
||||
{
|
||||
addElementToList(avatar_id, render_setting);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace FSFloaterAvatarRenderPersistenceMenu
|
||||
{
|
||||
|
||||
FSAvatarRenderPersistenceMenu gFSAvatarRenderPersistenceMenu;
|
||||
|
||||
LLContextMenu* FSAvatarRenderPersistenceMenu::createMenu()
|
||||
{
|
||||
// set up the callbacks for all of the avatar menu items
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
|
||||
registrar.add("Avatar.ChangeRenderSetting", boost::bind(&FSAvatarRenderPersistenceMenu::changeRenderSetting, this, _2));
|
||||
|
||||
// create the context menu from the XUI
|
||||
return createFromFile("menu_fs_avatar_render_setting.xml");
|
||||
}
|
||||
|
||||
void FSAvatarRenderPersistenceMenu::changeRenderSetting(const LLSD& param)
|
||||
{
|
||||
LLVOAvatar::VisualMuteSettings render_setting = (LLVOAvatar::VisualMuteSettings)param.asInteger();
|
||||
|
||||
for (uuid_vec_t::iterator it = mUUIDs.begin(); it != mUUIDs.end(); ++it)
|
||||
{
|
||||
LLUUID avatar_id = *it;
|
||||
|
||||
LLVOAvatar* avatar = dynamic_cast<LLVOAvatar*>(gObjectList.findObject(avatar_id));
|
||||
if (avatar)
|
||||
{
|
||||
// Set setting via the LLVOAvatar instance if it's available; will also call FSAvatarRenderPersistence::setAvatarRenderSettings()
|
||||
avatar->setVisualMuteSettings(render_setting);
|
||||
}
|
||||
else
|
||||
{
|
||||
FSAvatarRenderPersistence::instance().setAvatarRenderSettings(avatar_id, render_setting);
|
||||
}
|
||||
}
|
||||
|
||||
LLVOAvatar::cullAvatarsByPixelArea();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
/**
|
||||
* @file fsfloateravatarrendersettings.h
|
||||
* @brief Floater for showing persisted avatar render settings
|
||||
*
|
||||
* $LicenseInfo:firstyear=2016&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2016, Ansariel Hiller
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef FS_FLOATERAVATARRENDERSETTINGS_H
|
||||
#define FS_FLOATERAVATARRENDERSETTINGS_H
|
||||
|
||||
#include "fsavatarrenderpersistence.h"
|
||||
#include "llfloater.h"
|
||||
#include "lllistcontextmenu.h"
|
||||
#include "llvoavatar.h"
|
||||
|
||||
class LLNameListCtrl;
|
||||
|
||||
class FSFloaterAvatarRenderSettings : public LLFloater
|
||||
{
|
||||
LOG_CLASS(FSFloaterAvatarRenderSettings);
|
||||
public:
|
||||
FSFloaterAvatarRenderSettings(const LLSD& key);
|
||||
virtual ~FSFloaterAvatarRenderSettings();
|
||||
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
private:
|
||||
void onCloseBtn();
|
||||
void onAvatarRenderSettingChanged(const LLUUID& avatar_id, LLVOAvatar::VisualMuteSettings render_setting);
|
||||
|
||||
void loadInitialList();
|
||||
void addElementToList(const LLUUID& avatar_id, LLVOAvatar::VisualMuteSettings render_setting);
|
||||
|
||||
LLNameListCtrl* mAvatarList;
|
||||
|
||||
boost::signals2::connection mRenderSettingChangedCallbackConnection;
|
||||
};
|
||||
|
||||
|
||||
|
||||
namespace FSFloaterAvatarRenderPersistenceMenu
|
||||
{
|
||||
|
||||
class FSAvatarRenderPersistenceMenu : public LLListContextMenu
|
||||
{
|
||||
public:
|
||||
/*virtual*/ LLContextMenu* createMenu();
|
||||
private:
|
||||
void changeRenderSetting(const LLSD& param);
|
||||
};
|
||||
|
||||
extern FSAvatarRenderPersistenceMenu gFSAvatarRenderPersistenceMenu;
|
||||
|
||||
} // namespace FSFloaterAvatarRenderPersistenceMenu
|
||||
|
||||
#endif // FS_FLOATERAVATARRENDERSETTINGS_H
|
||||
|
|
@ -169,6 +169,7 @@
|
|||
#include "floatermedialists.h"
|
||||
#include "fsareasearch.h"
|
||||
#include "fsfloateraddtocontactset.h"
|
||||
#include "fsfloateravatarrendersettings.h"
|
||||
#include "fsfloatercontacts.h"
|
||||
#include "fsfloatercontactsetconfiguration.h"
|
||||
#include "fsfloaterexport.h"
|
||||
|
|
@ -439,6 +440,7 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("export_collada", "floater_export_collada.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<ColladaExportFloater>);
|
||||
LLFloaterReg::add("delete_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDeleteQueue>);
|
||||
LLFloaterReg::add("floater_profile", "floater_profile_view.xml",&LLFloaterReg::build<FSFloaterProfile>);
|
||||
LLFloaterReg::add("fs_avatar_render_settings", "floater_fs_avatar_render_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterAvatarRenderSettings>);
|
||||
LLFloaterReg::add("fs_blocklist", "floater_fs_blocklist.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterBlocklist>);
|
||||
LLFloaterReg::add("fs_add_contact", "floater_fs_contact_add.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterAddToContactSet>);
|
||||
LLFloaterReg::add("fs_contact_set_config", "floater_fs_contact_set_configuration.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterContactSetConfiguration>);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="avatarrendersettings" title="Avatar-Anzeigeeinstellungen">
|
||||
<floater.string name="av_render_never">
|
||||
Niemals
|
||||
</floater.string>
|
||||
<floater.string name="av_render_always">
|
||||
Immer
|
||||
</floater.string>
|
||||
<name_list name="avatar_list">
|
||||
<name_list.columns label="Name" name="name"/>
|
||||
<name_list.columns label="Anzeigeeinstellung" name="render_setting" width="125"/>
|
||||
</name_list>
|
||||
<button name="close_btn" label="Schließen"/>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<context_menu name="Avatar Render Settings Menu">
|
||||
<menu_item_call label="Normal anzeigen (entfernt von Liste)" name="av_render_normal"/>
|
||||
<menu_item_call label="Niemals anzeigen" name="av_render_never"/>
|
||||
<menu_item_call label="Immer anzeigen" name="av_render_always"/>
|
||||
</context_menu>
|
||||
|
|
@ -134,6 +134,7 @@
|
|||
<menu_item_call label="Sound-Explorer" name="Sound Explorer"/>
|
||||
<menu_item_call label="Animation-Explorer" name="Animation Explorer"/>
|
||||
<menu_item_call label="Asset-Blacklist" name="asset_blacklist"/>
|
||||
<menu_item_call label="Avatar-Anzeigeeinstellungen" name="Avatar Render Settings"/>
|
||||
</menu>
|
||||
<menu label="Bauen" name="BuildTools">
|
||||
<menu_item_check label="Bauen" name="Show Build Tools"/>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater
|
||||
name="avatarrendersettings"
|
||||
help_topic="fs_avatar_render_settings"
|
||||
title="Avatar Render Settings"
|
||||
min_width="350"
|
||||
min_height="320"
|
||||
width="450"
|
||||
height="320"
|
||||
save_rect="true"
|
||||
single_instance="false"
|
||||
reuse_instance="false"
|
||||
can_resize="true"
|
||||
can_minimize="true"
|
||||
can_close="true"
|
||||
can_drag_on_left="false">
|
||||
<floater.string name="av_render_never">
|
||||
Never
|
||||
</floater.string>
|
||||
<floater.string name="av_render_always">
|
||||
Always
|
||||
</floater.string>
|
||||
<name_list
|
||||
column_padding="0"
|
||||
draw_heading="true"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
right="-10"
|
||||
top="10"
|
||||
bottom="-32"
|
||||
name="avatar_list"
|
||||
name_column="name"
|
||||
draw_stripes="true"
|
||||
multi_select="true"
|
||||
content_type="Agents"
|
||||
sort_column="0"
|
||||
sort_ascending="true">
|
||||
<name_list.columns
|
||||
dynamic_width="true"
|
||||
label="Name"
|
||||
name="name" />
|
||||
<name_list.columns
|
||||
label="Render Setting"
|
||||
name="render_setting"
|
||||
width="100" />
|
||||
</name_list>
|
||||
<button
|
||||
name="close_btn"
|
||||
label="Close"
|
||||
font="SansSerif"
|
||||
height="23"
|
||||
width="80"
|
||||
right="-10"
|
||||
bottom="-5"
|
||||
follows="right|bottom"/>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<context_menu
|
||||
layout="topleft"
|
||||
name="Avatar Render Settings Menu">
|
||||
<menu_item_call
|
||||
label="Render normally (removes from list)"
|
||||
layout="topleft"
|
||||
name="av_render_normal">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.ChangeRenderSetting"
|
||||
parameter="0" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Never render"
|
||||
layout="topleft"
|
||||
name="av_render_never">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.ChangeRenderSetting"
|
||||
parameter="1" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Always render"
|
||||
layout="topleft"
|
||||
name="av_render_always">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.ChangeRenderSetting"
|
||||
parameter="2" />
|
||||
</menu_item_call>
|
||||
</context_menu>
|
||||
|
|
@ -1197,7 +1197,13 @@
|
|||
function="Floater.Toggle"
|
||||
parameter="ws_asset_blacklist" />
|
||||
</menu_item_call>
|
||||
|
||||
<menu_item_call
|
||||
label="Avatar Render Settings"
|
||||
name="Avatar Render Settings">
|
||||
<menu_item_call.on_click
|
||||
function="Floater.Toggle"
|
||||
parameter="fs_avatar_render_settings" />
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
<menu
|
||||
create_jump_keys="true"
|
||||
|
|
|
|||
Loading…
Reference in New Issue