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.meow-7.2.2
parent
b8561da34d
commit
b7e0e44e32
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue