summaryrefslogtreecommitdiff
path: root/indra/newview/llinventoryfunctions.cpp
diff options
context:
space:
mode:
authorLeslie Linden <leslie@lindenlab.com>2012-01-12 17:01:23 -0800
committerLeslie Linden <leslie@lindenlab.com>2012-01-12 17:01:23 -0800
commitba41aea4b2813ac96cad2bae7c82da6e5eefd63a (patch)
tree3a57c449c2c37ebdea3242d0158c77751cac0740 /indra/newview/llinventoryfunctions.cpp
parentec2b0e3af34bee7870283e5af2d16f879ad68f1b (diff)
EXP-1795 FIX -- Update warning dialog for dragging and dropping no-copy items to Merchant Outbox
* Any drag and drop or copy operation to the merchant outbox that contains one or more no-copy items now brings up a single modal dialog prompting the user to move the no-copy items to the outbox or to leave them all behind.
Diffstat (limited to 'indra/newview/llinventoryfunctions.cpp')
-rw-r--r--indra/newview/llinventoryfunctions.cpp60
1 files changed, 45 insertions, 15 deletions
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index e8efac1ebf..7672f7e674 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -82,6 +82,8 @@
#include "llvoavatarself.h"
#include "llwearablelist.h"
+#include <boost/foreach.hpp>
+
BOOL LLInventoryState::sWearNewClothing = FALSE;
LLUUID LLInventoryState::sWearNewClothingTransactionID;
@@ -535,13 +537,10 @@ void open_outbox()
LLFloaterReg::showInstance("outbox");
}
-void move_to_outbox_cb(const LLSD& notification, const LLSD& response)
+void move_to_outbox_cb_action(const LLSD& payload)
{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- if (option != 0) return; // canceled
-
- LLViewerInventoryItem * viitem = gInventory.getItem(notification["payload"]["item_id"].asUUID());
- LLUUID dest_folder_id = notification["payload"]["dest_folder_id"].asUUID();
+ LLViewerInventoryItem * viitem = gInventory.getItem(payload["item_id"].asUUID());
+ LLUUID dest_folder_id = payload["dest_folder_id"].asUUID();
if (viitem)
{
@@ -560,12 +559,12 @@ void move_to_outbox_cb(const LLSD& notification, const LLSD& response)
dest_folder_id,
false);
- LLUUID top_level_folder = notification["payload"]["top_level_folder"].asUUID();
+ LLUUID top_level_folder = payload["top_level_folder"].asUUID();
if (top_level_folder != LLUUID::null)
{
LLViewerInventoryCategory* category;
-
+
while (parent.notNull())
{
LLInventoryModel::cat_array_t* cat_array;
@@ -593,20 +592,41 @@ void move_to_outbox_cb(const LLSD& notification, const LLSD& response)
parent = next_parent;
}
}
-
+
open_outbox();
}
}
+static S32 move_to_outbox_operation_id = -1;
+static std::list<LLSD> move_to_outbox_payloads;
+
+void move_to_outbox_cb(const LLSD& notification, const LLSD& response)
+{
+ const S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ if (option == 0)
+ {
+ llassert(move_to_outbox_payloads.size() > 0);
+
+ BOOST_FOREACH(const LLSD& payload, move_to_outbox_payloads)
+ {
+ move_to_outbox_cb_action(payload);
+ }
+ }
+
+ move_to_outbox_operation_id = -1;
+ move_to_outbox_payloads.clear();
+}
+
-void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LLUUID& top_level_folder)
+void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LLUUID& top_level_folder, S32 operation_id)
{
// Collapse links directly to items/folders
LLViewerInventoryItem * viewer_inv_item = (LLViewerInventoryItem *) inv_item;
LLViewerInventoryCategory * linked_category = viewer_inv_item->getLinkedCategory();
if (linked_category != NULL)
{
- copy_folder_to_outbox(linked_category, dest_folder, top_level_folder);
+ copy_folder_to_outbox(linked_category, dest_folder, top_level_folder, operation_id);
}
else
{
@@ -639,11 +659,21 @@ void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LL
{
LLSD args;
args["ITEM_NAME"] = inv_item->getName();
+
LLSD payload;
payload["item_id"] = inv_item->getUUID();
payload["dest_folder_id"] = dest_folder;
payload["top_level_folder"] = top_level_folder;
- LLNotificationsUtil::add("ConfirmNoCopyToOutbox", args, payload, boost::bind(&move_to_outbox_cb, _1, _2));
+
+ if (move_to_outbox_operation_id != operation_id)
+ {
+ LLNotificationsUtil::add("ConfirmNoCopyToOutbox", args, payload, boost::bind(&move_to_outbox_cb, _1, _2));
+
+ move_to_outbox_operation_id = operation_id;
+ move_to_outbox_payloads.clear();
+ }
+
+ move_to_outbox_payloads.push_back(payload);
}
}
}
@@ -665,7 +695,7 @@ void move_item_within_outbox(LLInventoryItem* inv_item, LLUUID dest_folder)
false);
}
-void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder)
+void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder, S32 operation_id)
{
LLUUID new_folder_id = gInventory.createNewCategory(dest_folder, LLFolderType::FT_NONE, inv_cat->getName());
gInventory.notifyObservers();
@@ -680,7 +710,7 @@ void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_fold
for (LLInventoryModel::item_array_t::iterator iter = item_array_copy.begin(); iter != item_array_copy.end(); iter++)
{
LLInventoryItem* item = *iter;
- copy_item_to_outbox(item, new_folder_id, top_level_folder);
+ copy_item_to_outbox(item, new_folder_id, top_level_folder, operation_id);
}
LLInventoryModel::cat_array_t cat_array_copy = *cat_array;
@@ -688,7 +718,7 @@ void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_fold
for (LLInventoryModel::cat_array_t::iterator iter = cat_array_copy.begin(); iter != cat_array_copy.end(); iter++)
{
LLViewerInventoryCategory* category = *iter;
- copy_folder_to_outbox(category, new_folder_id, top_level_folder);
+ copy_folder_to_outbox(category, new_folder_id, top_level_folder, operation_id);
}
open_outbox();