From 70136a7e3d1ce1600ecc1b607923b6dd408b8d0e Mon Sep 17 00:00:00 2001
From: AndreyL ProductEngine <andreylproductengine@lindenlab.com>
Date: Wed, 2 Sep 2015 01:16:18 +0300
Subject: [PATCH] MAINT-5297 Allow global toggle of 'View People Icons' -
 Global switch part

--HG--
branch : develop
---
 indra/newview/app_settings/settings.xml       | 11 ++++++++
 indra/newview/llavatarlist.cpp                | 14 ++++++----
 indra/newview/llavatarlist.h                  |  2 +-
 indra/newview/llconversationview.cpp          |  4 +--
 indra/newview/llfloaterimcontainer.cpp        |  5 ++--
 indra/newview/llpanelpeople.cpp               | 24 ++++++++++++++---
 .../xui/en/menu_people_friends_view.xml       |  4 +--
 .../xui/en/menu_people_nearby_view.xml        |  4 +--
 .../xui/en/menu_people_recent_view.xml        |  4 +--
 .../xui/en/panel_preferences_setup.xml        | 26 +++++++++++++++++++
 10 files changed, 78 insertions(+), 20 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 1ed4528cb17..96fbc8323ba 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11007,6 +11007,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
+	<key>GlobalShowIconsOverride</key>
+	<map>
+		<key>Comment</key>
+		<string>Show/hide people icons in any list. This option should be set back to 0 when icons are enabled locally for the lists</string>
+		<key>Persist</key>
+		<integer>1</integer>
+		<key>Type</key>
+		<string>Boolean</string>
+		<key>Value</key>
+		<integer>0</integer>
+	</map>
     <key>FriendsSortOrder</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 8846d1317d1..c7fa375ada1 100755
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -63,16 +63,18 @@ bool LLAvatarList::contains(const LLUUID& id)
 	return std::find(ids.begin(), ids.end(), id) != ids.end();
 }
 
-void LLAvatarList::toggleIcons()
+void LLAvatarList::setIconsVisible(bool visible)
 {
+	if (visible == mShowIcons) // nothing to be done here.
+		return;
+
 	// Save the new value for new items to use.
-	mShowIcons = !mShowIcons;
-	gSavedSettings.setBOOL(mIconParamName, mShowIcons);
-	
+	mShowIcons = visible;
+
 	// Show/hide icons for all existing items.
 	std::vector<LLPanel*> items;
 	getItems(items);
-	for( std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++)
+	for (std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++)
 	{
 		static_cast<LLAvatarListItem*>(*it)->setAvatarIconVisible(mShowIcons);
 	}
@@ -187,6 +189,8 @@ void LLAvatarList::draw()
 		updateAvatarNames();
 	}
 
+	setIconsVisible(gSavedSettings.getBOOL(mIconParamName) && !gSavedSettings.getBOOL("GlobalShowIconsOverride"));
+
 	if (mDirty)
 		refresh();
 
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 3542577ae3c..159ff991e6a 100755
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -76,7 +76,7 @@ class LLAvatarList : public LLFlatListViewEx
 	void setSessionID(const LLUUID& session_id) { mSessionID = session_id; }
 	const LLUUID& getSessionID() { return mSessionID; }
 
-	void toggleIcons();
+	void setIconsVisible(bool visible);
 	void setSpeakingIndicatorsVisible(bool visible);
 	void showPermissions(bool visible);
 	void sortByName();
diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp
index 924a8d72067..3a6e4c4dfea 100644
--- a/indra/newview/llconversationview.cpp
+++ b/indra/newview/llconversationview.cpp
@@ -503,7 +503,7 @@ void LLConversationViewSession::refresh()
 		}
 	}
 	
-	setIconsVisible(gSavedSettings.getBOOL("ChatShowIcons"));
+	setIconsVisible(gSavedSettings.getBOOL("ChatShowIcons") && !gSavedSettings.getBOOL("GlobalShowIconsOverride"));
 	
 	requestArrange();
 	// Do the regular upstream refresh
@@ -572,7 +572,7 @@ void LLConversationViewParticipant::initFromParams(const LLConversationViewParti
 BOOL LLConversationViewParticipant::postBuild()
 {
     mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon");
-	mAvatarIcon->setVisible(gSavedSettings.getBOOL("ChatShowIcons"));
+	mAvatarIcon->setVisible(gSavedSettings.getBOOL("ChatShowIcons") && !gSavedSettings.getBOOL("GlobalShowIconsOverride"));
 
 	mInfoBtn = getChild<LLButton>("info_btn");
 	mInfoBtn->setClickedCallback(boost::bind(&LLConversationViewParticipant::onInfoBtnClick, this));
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index 1c9b2e6acbb..0a5a6e8e132 100755
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -926,7 +926,8 @@ void LLFloaterIMContainer::onCustomAction(const LLSD& userdata)
 	}
 	if ("view_icons" == command)
 	{
-		gSavedSettings.setBOOL("ChatShowIcons", !gSavedSettings.getBOOL("ChatShowIcons"));
+		gSavedSettings.setBOOL("ChatShowIcons", !(gSavedSettings.getBOOL("ChatShowIcons") && !gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		gSavedSettings.setBOOL("GlobalShowIconsOverride", (!gSavedSettings.getBOOL("ChatShowIcons") && gSavedSettings.getBOOL("GlobalShowIconsOverride")));
 	}
 	if ("chat_preferences" == command)
 	{
@@ -980,7 +981,7 @@ BOOL LLFloaterIMContainer::isActionChecked(const LLSD& userdata)
 	}
 	if ("view_icons" == command)
 	{
-		return gSavedSettings.getBOOL("ChatShowIcons");
+		return gSavedSettings.getBOOL("ChatShowIcons") && !gSavedSettings.getBOOL("GlobalShowIconsOverride");
 	}
 	if ("Translating.Enabled" == command)
 	{
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index de4efc8612f..6b86459d8f5 100755
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -1326,8 +1326,12 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata)
 	}
 	else if (chosen_item == "view_icons")
 	{
-		mAllFriendList->toggleIcons();
-		mOnlineFriendList->toggleIcons();
+		std::string param = mAllFriendList->getIconParamName();
+		gSavedSettings.setBOOL(param, !(gSavedSettings.getBOOL(param) && !gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		gSavedSettings.setBOOL("GlobalShowIconsOverride", (!gSavedSettings.getBOOL(param) && gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		gSavedSettings.setBOOL(mOnlineFriendList->getIconParamName(), gSavedSettings.getBOOL(param));
+		mAllFriendList->setIconsVisible(gSavedSettings.getBOOL(param));
+		mOnlineFriendList->setIconsVisible(gSavedSettings.getBOOL(param));
 	}
 	else if (chosen_item == "view_permissions")
 	{
@@ -1363,7 +1367,10 @@ void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata)
 	}
 	else if (chosen_item == "view_icons")
 	{
-		mNearbyList->toggleIcons();
+		std::string param = mNearbyList->getIconParamName();
+		gSavedSettings.setBOOL(param, !(gSavedSettings.getBOOL(param) && !gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		gSavedSettings.setBOOL("GlobalShowIconsOverride", (!gSavedSettings.getBOOL(param) && gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		mNearbyList->setIconsVisible(gSavedSettings.getBOOL(param));
 	}
 	else if (chosen_item == "sort_distance")
 	{
@@ -1382,6 +1389,8 @@ bool LLPanelPeople::onNearbyViewSortMenuItemCheck(const LLSD& userdata)
 		return sort_order == E_SORT_BY_NAME;
 	if (item == "sort_distance")
 		return sort_order == E_SORT_BY_DISTANCE;
+	if (item == "view_icons")
+		return gSavedSettings.getBOOL(mNearbyList->getIconParamName()) && !gSavedSettings.getBOOL("GlobalShowIconsOverride");
 
 	return false;
 }
@@ -1400,7 +1409,10 @@ void LLPanelPeople::onRecentViewSortMenuItemClicked(const LLSD& userdata)
 	}
 	else if (chosen_item == "view_icons")
 	{
-		mRecentList->toggleIcons();
+		std::string param = mRecentList->getIconParamName();
+		gSavedSettings.setBOOL(param, !(gSavedSettings.getBOOL(param) && !gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		gSavedSettings.setBOOL("GlobalShowIconsOverride", (!gSavedSettings.getBOOL(param) && gSavedSettings.getBOOL("GlobalShowIconsOverride")));
+		mRecentList->setIconsVisible(gSavedSettings.getBOOL(param));
 	}
 }
 
@@ -1413,6 +1425,8 @@ bool LLPanelPeople::onFriendsViewSortMenuItemCheck(const LLSD& userdata)
 		return sort_order == E_SORT_BY_NAME;
 	if (item == "sort_status")
 		return sort_order == E_SORT_BY_STATUS;
+	if (item == "view_icons")
+		return gSavedSettings.getBOOL(mAllFriendList->getIconParamName()) && !gSavedSettings.getBOOL("GlobalShowIconsOverride");
 
 	return false;
 }
@@ -1426,6 +1440,8 @@ bool LLPanelPeople::onRecentViewSortMenuItemCheck(const LLSD& userdata)
 		return sort_order == E_SORT_BY_MOST_RECENT;
 	if (item == "sort_name") 
 		return sort_order == E_SORT_BY_NAME;
+	if (item == "view_icons")
+		return gSavedSettings.getBOOL(mRecentList->getIconParamName()) && !gSavedSettings.getBOOL("GlobalShowIconsOverride");
 
 	return false;
 }
diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
index 8790fde7c55..02c6cfc006b 100755
--- a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
@@ -29,8 +29,8 @@
      function="People.Friends.ViewSort.Action"
      parameter="view_icons" />
     <menu_item_check.on_check
-     function="CheckControl"
-     parameter="FriendsListShowIcons" />
+     function="People.Friends.ViewSort.CheckItem"
+     parameter="view_icons" />
   </menu_item_check>
   <menu_item_check name="view_permissions" label="View Permissions Granted">
     <menu_item_check.on_click
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
index da88ca9f4d5..44b3d14e100 100755
--- a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
@@ -39,8 +39,8 @@
          function="People.Nearby.ViewSort.Action"
          parameter="view_icons" />
         <menu_item_check.on_check
-         function="CheckControl"
-         parameter="NearbyListShowIcons" />
+         function="People.Nearby.ViewSort.CheckItem"
+         parameter="view_icons"/>
     </menu_item_check>
     <menu_item_check name ="view_map" label="View Map">
         <menu_item_check.on_check
diff --git a/indra/newview/skins/default/xui/en/menu_people_recent_view.xml b/indra/newview/skins/default/xui/en/menu_people_recent_view.xml
index 1dbc90dd2be..cd2260d0c40 100755
--- a/indra/newview/skins/default/xui/en/menu_people_recent_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_recent_view.xml
@@ -29,7 +29,7 @@
      function="People.Recent.ViewSort.Action"
      parameter="view_icons" />
     <menu_item_check.on_check
-     function="CheckControl"
-     parameter="RecentListShowIcons" />
+     function="People.Recent.ViewSort.CheckItem"
+     parameter="view_icons" />
   </menu_item_check>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index b201e071ef8..a8be517f3cf 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -313,4 +313,30 @@
 		<button.commit_callback
 		  function="Pref.Proxy" />
   </button>
+  <text
+    type="string"
+    length="1"
+    follows="left|top"
+    height="10"
+    layout="topleft"
+    left="30"
+    name="People Icons:"
+    mouse_opaque="false"
+    top_pad="5"
+    width="300">
+		People Icons:
+  </text>
+  <check_box
+	top_delta="4"
+	enabled="true"
+	follows="left|top"
+	height="14"
+	initial_value="false"
+	control_name="GlobalShowIconsOverride"
+	label="Hide people icons (global override)"
+	left_delta="50"
+	mouse_opaque="true"
+	name="global_show_icons_override"
+	width="400"           
+	top_pad="10"/>
 </panel>
-- 
GitLab