FIRE-19798: Add overview of persister avatar render settings

master
Ansariel 2016-08-09 17:54:47 +02:00
parent 5b23cb6be2
commit 0e930dce4f
12 changed files with 363 additions and 3 deletions

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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();
}
}

View File

@ -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

View File

@ -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>);

View File

@ -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>

View File

@ -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>

View File

@ -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"/>

View File

@ -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>

View File

@ -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>

View File

@ -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"