diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4cf84fe95c..af18019bf0 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -22688,6 +22688,17 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
1
+ FSFriendListColumnShowPermissions
+
diff --git a/indra/newview/fscontactsfriendsmenu.cpp b/indra/newview/fscontactsfriendsmenu.cpp
index eae05aa7f1..43f152e6fc 100644
--- a/indra/newview/fscontactsfriendsmenu.cpp
+++ b/indra/newview/fscontactsfriendsmenu.cpp
@@ -36,6 +36,7 @@
#include "llslurl.h"
#include "lluictrlfactory.h"
#include "llurlaction.h"
+#include "llviewercontrol.h"
FSContactsFriendsMenu gFSContactsFriendsMenu;
@@ -60,9 +61,11 @@ LLContextMenu* FSContactsFriendsMenu::createMenu()
registrar.add("Contacts.Friends.TrackAvatar", boost::bind(&FSContactsFriendsMenu::onTrackAvatarMenuItemClick, this));
registrar.add("Contacts.Friends.CopyLabel", boost::bind(&FSContactsFriendsMenu::copyNameToClipboard, this, id));
registrar.add("Contacts.Friends.CopyUrl", boost::bind(&FSContactsFriendsMenu::copySLURLToClipboard, this, id));
+ registrar.add("Contacts.Friends.SelectOption", boost::bind(&FSContactsFriendsMenu::selectOption, this, _2));
enable_registrar.add("Contacts.Friends.EnableItem", boost::bind(&FSContactsFriendsMenu::enableContextMenuItem, this, _2));
enable_registrar.add("Contacts.Friends.EnableZoomIn", boost::bind(&LLAvatarActions::canZoomIn, id));
+ enable_registrar.add("Contacts.Friends.CheckOption", boost::bind(&FSContactsFriendsMenu::checkOption, this, _2));
return createFromFile("menu_fs_contacts_friends.xml");
}
@@ -72,8 +75,10 @@ LLContextMenu* FSContactsFriendsMenu::createMenu()
registrar.add("Contacts.Friends.OfferTeleport", boost::bind(&FSContactsFriendsMenu::offerTeleport, this));
registrar.add("Contacts.Friends.RemoveFriend", boost::bind(&LLAvatarActions::removeFriendsDialog, mUUIDs));
registrar.add("Contacts.Friends.AddToContactSet", boost::bind(&FSContactsFriendsMenu::addToContactSet, this));
+ registrar.add("Contacts.Friends.SelectOption", boost::bind(&FSContactsFriendsMenu::selectOption, this, _2));
enable_registrar.add("Contacts.Friends.EnableItem", boost::bind(&FSContactsFriendsMenu::enableContextMenuItem, this, _2));
+ enable_registrar.add("Contacts.Friends.CheckOption", boost::bind(&FSContactsFriendsMenu::checkOption, this, _2));
return createFromFile("menu_fs_contacts_friends_multiselect.xml");
}
@@ -126,7 +131,7 @@ bool FSContactsFriendsMenu::enableContextMenuItem(const LLSD& userdata)
}
return false;
}
- else if (item == std::string("can_callog"))
+ else if (item == "can_callog")
{
if (mUUIDs.size() == 1)
{
@@ -134,6 +139,25 @@ bool FSContactsFriendsMenu::enableContextMenuItem(const LLSD& userdata)
}
return false;
}
+ else if (item == "FSFriendListColumnShowUserName")
+ {
+ return (gSavedSettings.getBOOL("FSFriendListColumnShowDisplayName") ||
+ gSavedSettings.getBOOL("FSFriendListColumnShowFullName"));
+ }
+ else if (item == "FSFriendListColumnShowDisplayName")
+ {
+ return (gSavedSettings.getBOOL("FSFriendListColumnShowUserName") ||
+ gSavedSettings.getBOOL("FSFriendListColumnShowFullName"));
+ }
+ else if (item == "FSFriendListColumnShowFullName")
+ {
+ return (gSavedSettings.getBOOL("FSFriendListColumnShowUserName") ||
+ gSavedSettings.getBOOL("FSFriendListColumnShowDisplayName"));
+ }
+ else if (item == "FSFriendListFullNameFormat")
+ {
+ return gSavedSettings.getBOOL("FSFriendListColumnShowFullName");
+ }
return false;
}
@@ -169,3 +193,48 @@ void FSContactsFriendsMenu::copySLURLToClipboard(const LLUUID& id)
LLUrlAction::copyURLToClipboard(LLSLURL("agent", id, "about").getSLURLString());
}
+void FSContactsFriendsMenu::selectOption(const LLSD& userdata)
+{
+ std::string option = userdata.asString();
+
+ if (option == "sort_by_username")
+ {
+ gSavedSettings.setS32("FSFriendListSortOrder", 0);
+ }
+ else if (option == "sort_by_displayname")
+ {
+ gSavedSettings.setS32("FSFriendListSortOrder", 1);
+ }
+ else if (option == "format_username_displayname")
+ {
+ gSavedSettings.setS32("FSFriendListFullNameFormat", 0);
+ }
+ else if (option == "format_displayname_username")
+ {
+ gSavedSettings.setS32("FSFriendListFullNameFormat", 1);
+ }
+}
+
+bool FSContactsFriendsMenu::checkOption(const LLSD& userdata)
+{
+ std::string option = userdata.asString();
+
+ if (option == "sort_by_username")
+ {
+ return (gSavedSettings.getS32("FSFriendListSortOrder") == 0);
+ }
+ else if (option == "sort_by_displayname")
+ {
+ return (gSavedSettings.getS32("FSFriendListSortOrder") == 1);
+ }
+ else if (option == "format_username_displayname")
+ {
+ return (gSavedSettings.getS32("FSFriendListFullNameFormat") == 0);
+ }
+ else if (option == "format_displayname_username")
+ {
+ return (gSavedSettings.getS32("FSFriendListFullNameFormat") == 1);
+ }
+
+ return false;
+}
diff --git a/indra/newview/fscontactsfriendsmenu.h b/indra/newview/fscontactsfriendsmenu.h
index 45de40144d..f3a83dec30 100644
--- a/indra/newview/fscontactsfriendsmenu.h
+++ b/indra/newview/fscontactsfriendsmenu.h
@@ -42,6 +42,8 @@ private:
void addToContactSet();
void copyNameToClipboard(const LLUUID& id);
void copySLURLToClipboard(const LLUUID& id);
+ void selectOption(const LLSD& userdata);
+ bool checkOption(const LLSD& userdata);
};
extern FSContactsFriendsMenu gFSContactsFriendsMenu;
diff --git a/indra/newview/fsfloatercontacts.cpp b/indra/newview/fsfloatercontacts.cpp
index fb1bb5d6dd..9105ed0eb1 100644
--- a/indra/newview/fsfloatercontacts.cpp
+++ b/indra/newview/fsfloatercontacts.cpp
@@ -167,6 +167,7 @@ BOOL FSFloaterContacts::postBuild()
gSavedSettings.getControl("FSFriendListColumnShowUserName")->getSignal()->connect(boost::bind(&FSFloaterContacts::onColumnDisplayModeChanged, this, "FSFriendListColumnShowUserName"));
gSavedSettings.getControl("FSFriendListColumnShowDisplayName")->getSignal()->connect(boost::bind(&FSFloaterContacts::onColumnDisplayModeChanged, this, "FSFriendListColumnShowDisplayName"));
gSavedSettings.getControl("FSFriendListColumnShowFullName")->getSignal()->connect(boost::bind(&FSFloaterContacts::onColumnDisplayModeChanged, this, "FSFriendListColumnShowFullName"));
+ gSavedSettings.getControl("FSFriendListColumnShowPermissions")->getSignal()->connect(boost::bind(&FSFloaterContacts::onColumnDisplayModeChanged, this, std::string()));
onColumnDisplayModeChanged();
LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&FSFloaterContacts::onDisplayNameChanged, this));
@@ -1091,6 +1092,8 @@ void FSFloaterContacts::onColumnDisplayModeChanged(const std::string& settings_n
std::vector column_params = mFriendsList->getColumnInitParams();
mFriendsList->clearColumns();
+ mFriendsList->updateLayout();
+
for (std::vector::iterator it = column_params.begin(); it != column_params.end(); ++it)
{
LLScrollListColumn::Params p = *it;
@@ -1155,6 +1158,30 @@ void FSFloaterContacts::onColumnDisplayModeChanged(const std::string& settings_n
}
mFriendsList->addColumn(params);
}
+ else if (p.name.getValue() == "icon_visible_online" ||
+ p.name.getValue() == "icon_visible_map" ||
+ p.name.getValue() == "icon_edit_mine" ||
+ p.name.getValue() == "icon_visible_map_theirs" ||
+ p.name.getValue() == "icon_edit_theirs")
+ {
+ LLScrollListColumn::Params params;
+ params.header = p.header;
+ params.name = p.name;
+ params.halign = p.halign;
+ params.sort_direction = p.sort_direction;
+ params.sort_column = p.sort_column;
+ params.tool_tip = p.tool_tip;
+
+ if (gSavedSettings.getBOOL("FSFriendListColumnShowPermissions"))
+ {
+ params.width = p.width;
+ }
+ else
+ {
+ params.width.pixel_width.set(-1, true);
+ }
+ mFriendsList->addColumn(params);
+ }
else
{
mFriendsList->addColumn(p);
@@ -1163,6 +1190,7 @@ void FSFloaterContacts::onColumnDisplayModeChanged(const std::string& settings_n
}
mFriendsList->dirtyColumns();
+ mFriendsList->updateColumns(true); // Force update or icons don't properly hide if permission columns are hidden
// primary sort = online status, secondary sort = name
if (gSavedSettings.getS32("FSFriendListSortOrder"))
diff --git a/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml b/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml
index 7d7f5d9c5d..270cb6b83d 100644
--- a/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml
+++ b/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml
@@ -13,4 +13,14 @@
+
diff --git a/indra/newview/skins/default/xui/de/menu_fs_contacts_friends_multiselect.xml b/indra/newview/skins/default/xui/de/menu_fs_contacts_friends_multiselect.xml
index 412e0fa797..083d75d89c 100644
--- a/indra/newview/skins/default/xui/de/menu_fs_contacts_friends_multiselect.xml
+++ b/indra/newview/skins/default/xui/de/menu_fs_contacts_friends_multiselect.xml
@@ -4,4 +4,14 @@
+
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml b/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml
index 42d59c9fdd..3a111022c8 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml
@@ -52,7 +52,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/en/menu_fs_contacts_friends.xml b/indra/newview/skins/default/xui/en/menu_fs_contacts_friends.xml
index 96ef2991e8..62503d2eb1 100644
--- a/indra/newview/skins/default/xui/en/menu_fs_contacts_friends.xml
+++ b/indra/newview/skins/default/xui/en/menu_fs_contacts_friends.xml
@@ -115,4 +115,100 @@
+
+
diff --git a/indra/newview/skins/default/xui/en/menu_fs_contacts_friends_multiselect.xml b/indra/newview/skins/default/xui/en/menu_fs_contacts_friends_multiselect.xml
index 07ebb82cea..25927cd079 100644
--- a/indra/newview/skins/default/xui/en/menu_fs_contacts_friends_multiselect.xml
+++ b/indra/newview/skins/default/xui/en/menu_fs_contacts_friends_multiselect.xml
@@ -36,4 +36,100 @@
function="Contacts.Friends.EnableItem"
parameter="remove_friend"/>
+
+
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml b/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml
index 8caf2ed8bb..a08b8805e0 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml
@@ -48,7 +48,7 @@
control_name="RestrainedLove"
layout="topleft"
follows="left|top"
- top_pad="10"
+ top_pad="3"
left="15"
width="270"
height="20"
@@ -260,6 +260,17 @@
+
+