From 7d79ee75b99975e74ed458efb3fa80d8b96252d1 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 24 Feb 2015 13:11:42 +0100 Subject: [PATCH] FIRE-13888: Add copy function to bumps list --- indra/newview/llfloaterbump.cpp | 68 +++++++++++++++++++ indra/newview/llfloaterbump.h | 15 ++++ .../default/xui/de/menu_fs_bump_list.xml | 4 ++ .../skins/default/xui/en/floater_bumps.xml | 2 +- .../default/xui/en/menu_fs_bump_list.xml | 15 ++++ 5 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 indra/newview/skins/default/xui/de/menu_fs_bump_list.xml create mode 100644 indra/newview/skins/default/xui/en/menu_fs_bump_list.xml 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]] - + + + + + +