From 296eb54d07bee139cffab725cb6049092ce369ae Mon Sep 17 00:00:00 2001 From: Ansariel Date: Fri, 12 Sep 2014 23:43:07 +0200 Subject: [PATCH] FIRE-14575: Add option to hide permission columns to contact list; exposed option (as well as all other options) in the context menu --- indra/newview/app_settings/settings.xml | 11 +++ indra/newview/fscontactsfriendsmenu.cpp | 71 +++++++++++++- indra/newview/fscontactsfriendsmenu.h | 2 + indra/newview/fsfloatercontacts.cpp | 28 ++++++ .../xui/de/menu_fs_contacts_friends.xml | 10 ++ .../menu_fs_contacts_friends_multiselect.xml | 10 ++ .../xui/de/panel_preferences_firestorm.xml | 2 +- .../xui/en/menu_fs_contacts_friends.xml | 96 +++++++++++++++++++ .../menu_fs_contacts_friends_multiselect.xml | 96 +++++++++++++++++++ .../xui/en/panel_preferences_firestorm.xml | 13 ++- 10 files changed, 336 insertions(+), 3 deletions(-) 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 + + Comment + If enabled, show permission columns in the contacts list + Persist + 1 + Type + Boolean + Value + 1 + 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 @@ + +