From a6475e379e972776761a9d69b76fcbb392959a26 Mon Sep 17 00:00:00 2001
From: Jonathan Yap <none@none>
Date: Wed, 29 Jun 2011 15:12:21 -0400
Subject: [PATCH] STORM-1459 "Wearing Tab" - Add ability to copy displayed
 inventory names to clipboard Made changes with input from Oz & Vadim

---
 doc/contributions.txt                         |  1 +
 indra/newview/llpanelwearing.cpp              | 20 +++++++++----------
 indra/newview/llpanelwearing.h                |  3 ++-
 .../default/xui/en/menu_wearing_gear.xml      |  7 +++++++
 .../default/xui/en/panel_outfits_wearing.xml  | 11 +---------
 5 files changed, 20 insertions(+), 22 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index b253a7662d4..5114aa53ddc 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -103,6 +103,7 @@ Ales Beaumont
 Alexandrea Fride
     STORM-255
 	STORM-960
+	STORM-1459
 Alissa Sabre
 	VWR-81
 	VWR-83
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index e0109675a64..c2f39524c46 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -60,6 +60,7 @@ class LLWearingGearMenu
 
 		registrar.add("Gear.Edit", boost::bind(&edit_outfit));
 		registrar.add("Gear.TakeOff", boost::bind(&LLWearingGearMenu::onTakeOff, this));
+		registrar.add("Gear.Copy", boost::bind(&LLPanelWearing::copyToClipboard, mPanelWearing));
 
 		enable_registrar.add("Gear.OnEnable", boost::bind(&LLPanelWearing::isActionEnabled, mPanelWearing, _2));
 
@@ -184,7 +185,6 @@ BOOL LLPanelWearing::postBuild()
 {
 	mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list");
 	mCOFItemsList->setRightMouseDownCallback(boost::bind(&LLPanelWearing::onWearableItemsListRightClick, this, _1, _2, _3));
-	childSetAction("copy_to_clipboard", boost::bind(&LLPanelWearing::copyToClipboard, this));
 
 	LLMenuButton* menu_gear_btn = getChild<LLMenuButton>("options_gear_btn");
 
@@ -286,24 +286,22 @@ void LLPanelWearing::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const
 void LLPanelWearing::copyToClipboard()
 {
 	std::string text;
-	bool need_cr = false;
 	std::vector<LLSD> data;
 	mCOFItemsList->getValues(data);
-	for(std::vector<LLSD>::iterator iter = data.begin(); iter != data.end(); iter++)
+
+	for(std::vector<LLSD>::const_iterator iter = data.begin(); iter != data.end();)
 	{
 		LLSD uuid = (*iter);
 		LLViewerInventoryItem* item = gInventory.getItem(uuid);
-		if (!need_cr)
-		{
-			text += item->getName();
-			need_cr = true;
-		}
-		else
+
+		iter++;
+		if (item != NULL)
 		{
-			text += "\n" + item->getName();
+			// Append a CR to all but the last line
+			text += iter != data.end() ? item->getName() + "\n" : item->getName();
 		}
 	}
+
 	gClipboard.copyFromString(utf8str_to_wstring(text));
 }
-
 // EOF
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
index 4c9f5ed0798..9a212b3cca9 100644
--- a/indra/newview/llpanelwearing.h
+++ b/indra/newview/llpanelwearing.h
@@ -60,13 +60,14 @@ class LLPanelWearing : public LLPanelAppearanceTab
 
 	/*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const;
 
+	/*virtual*/ void copyToClipboard();
+
 	boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb);
 
 	bool hasItemSelected();
 
 private:
 	void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y);
-	void copyToClipboard();
 
 	LLInventoryCategoriesObserver* 	mCategoriesObserver;
 	LLWearableItemsList* 			mCOFItemsList;
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
index 0ac2c142535..0e858ccf107 100644
--- a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
@@ -20,4 +20,11 @@
          function="Gear.OnEnable"
          parameter="take_off" />
     </menu_item_call>
+    <menu_item_call
+     label="Copy outfit list to clipboard"
+     layout="topleft"
+     name="copy">
+        <on_click
+         function="Gear.Copy" />
+    </menu_item_call>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
index eef499184cb..d85b778db21 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
@@ -42,15 +42,6 @@
          tool_tip="Show additional options"
          top="1"
          width="31" />
-        <button
-         follows="bottom|left|right"
-         height="25"
-         layout="topleft"
-         left_pad="1"
-         name="copy_to_clipboard"
-         label="Send to clipboard"
-         tool_tip="Send current outfit names to clipboard"
-         width="150" />
         <icon
          follows="bottom|left|right"
          height="25"
@@ -58,6 +49,6 @@
          layout="topleft"
          left_pad="1"
          name="dummy_icon"
-         width="123" />
+         width="274" />
     </panel>
 </panel>
-- 
GitLab