summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2012-03-27 22:39:31 -0400
committerNat Goodspeed <nat@lindenlab.com>2012-03-27 22:39:31 -0400
commitb7e0e44e3246299b639f787e3ab9b8e59cdc05c3 (patch)
tree475ea883c65a66f97d5db24a4c1041073e60a596 /indra/newview
parentb8561da34d5d733670b6b1eabf483871ec6c18b0 (diff)
CHOP-854: Use new LLInventoryModel::removeObject() to discard offer.
Introduce new LLInventoryModel::removeCategory() method comparable to removeItem(), but for folder objects (using changeCategoryParent() rather than changeItemParent()). Introduce removeObject() method that calls one of the above, depending on runtime object type.
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llinventorymodel.cpp39
-rw-r--r--indra/newview/llinventorymodel.h7
-rwxr-xr-xindra/newview/llviewermessage.cpp4
3 files changed, 48 insertions, 2 deletions
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index de52f3a18d..1ede6bc1c9 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -46,6 +46,7 @@
#include "llviewerregion.h"
#include "llcallbacklist.h"
#include "llvoavatarself.h"
+#include <typeinfo>
//#define DIFF_INVENTORY_FILES
#ifdef DIFF_INVENTORY_FILES
@@ -3003,6 +3004,44 @@ void LLInventoryModel::removeItem(const LLUUID& item_id)
}
}
+void LLInventoryModel::removeCategory(const LLUUID& category_id)
+{
+ LLViewerInventoryCategory* cat = getCategory(category_id);
+ if (! cat)
+ {
+ LL_WARNS("Inventory") << "couldn't find inventory folder " << category_id << LL_ENDL;
+ }
+ else
+ {
+ const LLUUID new_parent = findCategoryUUIDForType(LLFolderType::FT_TRASH);
+ LL_INFOS("Inventory") << "Moving to Trash (" << new_parent << "):" << LL_ENDL;
+ changeCategoryParent(cat, new_parent, TRUE);
+ }
+}
+
+void LLInventoryModel::removeObject(const LLUUID& object_id)
+{
+ LLInventoryObject* obj = getObject(object_id);
+ if (dynamic_cast<LLViewerInventoryItem*>(obj))
+ {
+ removeItem(object_id);
+ }
+ else if (dynamic_cast<LLViewerInventoryCategory*>(obj))
+ {
+ removeCategory(object_id);
+ }
+ else if (obj)
+ {
+ LL_WARNS("Inventory") << "object ID " << object_id
+ << " is an object of unrecognized class "
+ << typeid(*obj).name() << LL_ENDL;
+ }
+ else
+ {
+ LL_WARNS("Inventory") << "object ID " << object_id << " not found" << LL_ENDL;
+ }
+}
+
const LLUUID &LLInventoryModel::getRootFolderID() const
{
return mRootFolderID;
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index f4602ce922..8382e875b4 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -325,8 +325,13 @@ public:
// consistent internal state. No cache accounting, observer
// notification, or server update is performed.
void deleteObject(const LLUUID& id);
+ /// move Item item_id to Trash
void removeItem(const LLUUID& item_id);
-
+ /// move Category category_id to Trash
+ void removeCategory(const LLUUID& category_id);
+ /// removeItem() or removeCategory(), whichever is appropriate
+ void removeObject(const LLUUID& object_id);
+
// Delete a particular inventory object by ID, and delete it from
// the server. Also updates linked items.
void purgeObject(const LLUUID& id);
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 3c6770df43..ed5dd84586 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1064,7 +1064,9 @@ public:
// If we now try to remove the inventory item, it will cause a nested
// notifyObservers() call, which won't work.
// So defer moving the item to trash until viewer gets idle (in a moment).
- LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeItem, &gInventory, mObjectID));
+ // Use removeObject() rather than removeItem() because at this level,
+ // the object could be either an item or a folder.
+ LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeObject, &gInventory, mObjectID));
gInventory.removeObserver(this);
delete this;
}