diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp
index ad44c509d9..33cc00f425 100755
--- a/indra/newview/llfloaterbump.cpp
+++ b/indra/newview/llfloaterbump.cpp
@@ -35,6 +35,10 @@
#include "lluictrlfactory.h"
#include "llviewermessage.h"
+#include "fsscrolllistctrl.h"
+#include "llclipboard.h"
+#include "llfloaterreg.h"
+
///----------------------------------------------------------------------------
/// Class LLFloaterBump
///----------------------------------------------------------------------------
@@ -51,6 +55,16 @@ LLFloaterBump::~LLFloaterBump()
{
}
+// FIRE-13888: Add copy function to bumps list
+BOOL LLFloaterBump::postBuild()
+{
+ FSScrollListCtrl* list = getChild("bump_list");
+ list->setContextMenu(&gFSBumpListMenu);
+
+ return LLFloater::postBuild();
+}
+//
+
// virtual
void LLFloaterBump::onOpen(const LLSD& key)
{
@@ -126,3 +140,57 @@ void LLFloaterBump::add(LLScrollListCtrl* list, LLMeanCollisionData* mcd)
row["columns"][0]["font"] = "SansSerifBold";
list->addElement(row);
}
+
+// FIRE-13888: Add copy function to bumps list
+LLContextMenu* FSBumpListMenu::createMenu()
+{
+ LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+ LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
+
+ registrar.add("BumpList.Action", boost::bind(&FSBumpListMenu::onContextMenuItemClick, this, _2));
+ enable_registrar.add("BumpList.Enable", boost::bind(&FSBumpListMenu::onContextMenuItemEnable, this, _2));
+
+ return createFromFile("menu_fs_bump_list.xml");
+}
+
+void FSBumpListMenu::onContextMenuItemClick(const LLSD& userdata)
+{
+ std::string item = userdata.asString();
+
+ if (item == "copy")
+ {
+ LLFloaterBump* floater = LLFloaterReg::findTypedInstance("bumps");
+ if (floater && !gMeanCollisionList.empty() && !mUUIDs.empty())
+ {
+ std::string bumps_text;
+ FSScrollListCtrl* list = floater->getChild("bump_list");
+
+ std::vector selected = list->getAllSelected();
+ for (std::vector::iterator it = selected.begin(); it != selected.end(); ++it)
+ {
+ bumps_text += ( (bumps_text.empty() ? "" : "\n") + (*it)->getColumn(0)->getValue().asString() );
+ }
+
+ if (!bumps_text.empty())
+ {
+ LLClipboard::instance().copyToClipboard(utf8str_to_wstring(bumps_text), 0, bumps_text.size() );
+ }
+ }
+ }
+}
+
+bool FSBumpListMenu::onContextMenuItemEnable(const LLSD& userdata)
+{
+ std::string item = userdata.asString();
+
+ if (item == "can_copy")
+ {
+ LLFloaterBump* floater = LLFloaterReg::findTypedInstance("bumps");
+ return (floater && !gMeanCollisionList.empty() && !mUUIDs.empty());
+ }
+
+ return false;
+}
+
+FSBumpListMenu gFSBumpListMenu;
+//
diff --git a/indra/newview/llfloaterbump.h b/indra/newview/llfloaterbump.h
index 5acab6da8c..8802e3d059 100755
--- a/indra/newview/llfloaterbump.h
+++ b/indra/newview/llfloaterbump.h
@@ -29,6 +29,7 @@
#define LL_LLFLOATERBUMP_H
#include "llfloater.h"
+#include "lllistcontextmenu.h"
class LLMeanCollisionData;
class LLScrollListCtrl;
@@ -42,6 +43,8 @@ protected:
public:
/*virtual*/ void onOpen(const LLSD& key);
+ // FIRE-13888: Add copy function to bumps list
+ BOOL postBuild();
private:
@@ -49,4 +52,16 @@ private:
virtual ~LLFloaterBump();
};
+// FIRE-13888: Add copy function to bumps list
+class FSBumpListMenu : public LLListContextMenu
+{
+public:
+ /*virtual*/ LLContextMenu* createMenu();
+private:
+ void onContextMenuItemClick(const LLSD& userdata);
+ bool onContextMenuItemEnable(const LLSD& userdata);
+};
+
+extern FSBumpListMenu gFSBumpListMenu;
+//
#endif
diff --git a/indra/newview/skins/default/xui/de/menu_fs_bump_list.xml b/indra/newview/skins/default/xui/de/menu_fs_bump_list.xml
new file mode 100644
index 0000000000..f6f04cb050
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_fs_bump_list.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en/floater_bumps.xml b/indra/newview/skins/default/xui/en/floater_bumps.xml
index 0fef64baf7..89c32a3722 100755
--- a/indra/newview/skins/default/xui/en/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/en/floater_bumps.xml
@@ -36,7 +36,7 @@
name="timeStr">
[[hour,datetime,slt]:[min,datetime,slt]]
-
+
+
+
+
+
+