From 68c8248fb9450cc9adb41f53f0d2f03d5fd4124e Mon Sep 17 00:00:00 2001
From: Jonathan Yap <none@none>
Date: Wed, 29 Jun 2011 10:28:06 -0400
Subject: [PATCH] STORM-1459 "Wearing Tab" - Add ability to copy displayed
 inventory names to clipboard

---
 doc/contributions.txt                         |  2 ++
 indra/newview/llpanelwearing.cpp              | 26 +++++++++++++++++++
 indra/newview/llpanelwearing.h                |  1 +
 .../default/xui/en/panel_outfits_wearing.xml  | 11 +++++++-
 4 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 256c39eb9e0..b253a7662d4 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -449,6 +449,7 @@ Jonathan Yap
 	STORM-1313
 	STORM-899
 	STORM-1273
+	STORM-1459
 Kage Pixel
 	VWR-11
 Ken March
@@ -690,6 +691,7 @@ Robin Cornelius
 	STORM-1019
 	STORM-1095
 	STORM-1128
+	STORM-1459
 	VWR-2488
 	VWR-9557
 	VWR-10579
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 911a9e5ddad..e0109675a64 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -38,6 +38,8 @@
 #include "llsidetray.h"
 #include "llviewermenu.h"
 #include "llwearableitemslist.h"
+#include "llsdserialize.h"
+#include "llclipboard.h"
 
 // Context menu and Gear menu helper.
 static void edit_outfit()
@@ -182,6 +184,7 @@ 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");
 
@@ -280,4 +283,27 @@ void LLPanelWearing::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const
 	mCOFItemsList->getSelectedUUIDs(selected_uuids);
 }
 
+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++)
+	{
+		LLSD uuid = (*iter);
+		LLViewerInventoryItem* item = gInventory.getItem(uuid);
+		if (!need_cr)
+		{
+			text += item->getName();
+			need_cr = true;
+		}
+		else
+		{
+			text += "\n" + item->getName();
+		}
+	}
+	gClipboard.copyFromString(utf8str_to_wstring(text));
+}
+
 // EOF
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
index 157b2c4c5f0..4c9f5ed0798 100644
--- a/indra/newview/llpanelwearing.h
+++ b/indra/newview/llpanelwearing.h
@@ -66,6 +66,7 @@ class LLPanelWearing : public LLPanelAppearanceTab
 
 private:
 	void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y);
+	void copyToClipboard();
 
 	LLInventoryCategoriesObserver* 	mCategoriesObserver;
 	LLWearableItemsList* 			mCOFItemsList;
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 d85b778db21..eef499184cb 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
@@ -42,6 +42,15 @@
          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"
@@ -49,6 +58,6 @@
          layout="topleft"
          left_pad="1"
          name="dummy_icon"
-         width="274" />
+         width="123" />
     </panel>
 </panel>
-- 
GitLab