CHUI-849 WIP, SH-4116 WIP - added simpler match check in inventory for when we don't need the list of matches to be returned.
parent
1bf6688561
commit
4967998a5c
|
|
@ -1541,15 +1541,8 @@ bool LLAppearanceMgr::getCanRemoveOutfit(const LLUUID& outfit_cat_id)
|
|||
// static
|
||||
bool LLAppearanceMgr::getCanRemoveFromCOF(const LLUUID& outfit_cat_id)
|
||||
{
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
LLFindWearablesEx is_worn(/*is_worn=*/ true, /*include_body_parts=*/ false);
|
||||
gInventory.collectDescendentsIf(outfit_cat_id,
|
||||
cats,
|
||||
items,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
is_worn);
|
||||
return items.size() > 0;
|
||||
return gInventory.hasMatchingDirectDescendent(outfit_cat_id, is_worn);
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
@ -1560,15 +1553,8 @@ bool LLAppearanceMgr::getCanAddToCOF(const LLUUID& outfit_cat_id)
|
|||
return false;
|
||||
}
|
||||
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false);
|
||||
gInventory.collectDescendentsIf(outfit_cat_id,
|
||||
cats,
|
||||
items,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
not_worn);
|
||||
return items.size() > 0;
|
||||
return gInventory.hasMatchingDirectDescendent(outfit_cat_id, not_worn);
|
||||
}
|
||||
|
||||
bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id)
|
||||
|
|
@ -1586,15 +1572,8 @@ bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id)
|
|||
}
|
||||
|
||||
// Check whether the outfit contains any wearables we aren't wearing already (STORM-702).
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
LLFindWearablesEx is_worn(/*is_worn=*/ false, /*include_body_parts=*/ true);
|
||||
gInventory.collectDescendentsIf(outfit_cat_id,
|
||||
cats,
|
||||
items,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
is_worn);
|
||||
return items.size() > 0;
|
||||
return gInventory.hasMatchingDirectDescendent(outfit_cat_id, is_worn);
|
||||
}
|
||||
|
||||
void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category, LLPointer<LLInventoryCallback> cb)
|
||||
|
|
@ -2243,6 +2222,7 @@ void LLAppearanceMgr::wearInventoryCategoryOnAvatar( LLInventoryCategory* catego
|
|||
LLAppearanceMgr::changeOutfit(TRUE, category->getUUID(), append);
|
||||
}
|
||||
|
||||
// FIXME do we really want to search entire inventory for matching name?
|
||||
void LLAppearanceMgr::wearOutfitByName(const std::string& name)
|
||||
{
|
||||
LL_INFOS("Avatar") << self_av_string() << "Wearing category " << name << LL_ENDL;
|
||||
|
|
@ -3501,22 +3481,21 @@ void LLAppearanceMgr::unregisterAttachment(const LLUUID& item_id)
|
|||
|
||||
BOOL LLAppearanceMgr::getIsInCOF(const LLUUID& obj_id) const
|
||||
{
|
||||
return gInventory.isObjectDescendentOf(obj_id, getCOF());
|
||||
const LLUUID& cof = getCOF();
|
||||
if (obj_id == cof)
|
||||
return TRUE;
|
||||
const LLInventoryObject* obj = gInventory.getObject(obj_id);
|
||||
if (obj && obj->getParentUUID() == cof)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLAppearanceMgr::isLinkInCOF(const LLUUID& obj_id)
|
||||
{
|
||||
LLInventoryModel::cat_array_t cats;
|
||||
LLInventoryModel::item_array_t items;
|
||||
LLLinkedItemIDMatches find_links(gInventory.getLinkedItemID(obj_id));
|
||||
gInventory.collectDescendentsIf(LLAppearanceMgr::instance().getCOF(),
|
||||
cats,
|
||||
items,
|
||||
LLInventoryModel::EXCLUDE_TRASH,
|
||||
find_links);
|
||||
|
||||
return !items.empty();
|
||||
const LLUUID& target_id = gInventory.getLinkedItemID(obj_id);
|
||||
LLLinkedItemIDMatches find_links(target_id);
|
||||
return gInventory.hasMatchingDirectDescendent(LLAppearanceMgr::instance().getCOF(), find_links);
|
||||
}
|
||||
|
||||
BOOL LLAppearanceMgr::getIsProtectedCOFItem(const LLUUID& obj_id) const
|
||||
|
|
@ -3533,18 +3512,6 @@ BOOL LLAppearanceMgr::getIsProtectedCOFItem(const LLUUID& obj_id) const
|
|||
// For now, don't allow direct deletion from the COF. Instead, force users
|
||||
// to choose "Detach" or "Take Off".
|
||||
return TRUE;
|
||||
/*
|
||||
const LLInventoryObject *obj = gInventory.getObject(obj_id);
|
||||
if (!obj) return FALSE;
|
||||
|
||||
// Can't delete bodyparts, since this would be equivalent to removing the item.
|
||||
if (obj->getType() == LLAssetType::AT_BODYPART) return TRUE;
|
||||
|
||||
// Can't delete the folder link, since this is saved for bookkeeping.
|
||||
if (obj->getActualType() == LLAssetType::AT_LINK_FOLDER) return TRUE;
|
||||
|
||||
return FALSE;
|
||||
*/
|
||||
}
|
||||
|
||||
class CallAfterCategoryFetchStage2: public LLInventoryFetchItemsObserver
|
||||
|
|
|
|||
|
|
@ -593,6 +593,40 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
|
|||
return id;
|
||||
}
|
||||
|
||||
// This is optimized for the case that we just want to know whether a
|
||||
// category has any immediate children meeting a condition, without
|
||||
// needing to recurse or build up any lists.
|
||||
bool LLInventoryModel::hasMatchingDirectDescendent(const LLUUID& cat_id,
|
||||
LLInventoryCollectFunctor& filter)
|
||||
{
|
||||
LLInventoryModel::cat_array_t *cats;
|
||||
LLInventoryModel::item_array_t *items;
|
||||
getDirectDescendentsOf(cat_id, cats, items);
|
||||
if (cats)
|
||||
{
|
||||
for (LLInventoryModel::cat_array_t::const_iterator it = cats->begin();
|
||||
it != cats->end(); ++it)
|
||||
{
|
||||
if (filter(*it,NULL))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (items)
|
||||
{
|
||||
for (LLInventoryModel::item_array_t::const_iterator it = items->begin();
|
||||
it != items->end(); ++it)
|
||||
{
|
||||
if (filter(NULL,*it))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Starting with the object specified, add it's descendents to the
|
||||
// array provided, but do not add the inventory object specified by
|
||||
// id. There is no guaranteed order. Neither array will be erased
|
||||
|
|
@ -723,6 +757,10 @@ LLInventoryModel::item_array_t LLInventoryModel::collectLinkedItems(const LLUUID
|
|||
const LLUUID& start_folder_id)
|
||||
{
|
||||
item_array_t items;
|
||||
const LLInventoryObject *obj = getObject(id);
|
||||
if (!obj || obj->getIsLinkType())
|
||||
return items;
|
||||
|
||||
LLInventoryModel::cat_array_t cat_array;
|
||||
LLLinkedItemIDMatches is_linked_item_match(id);
|
||||
collectDescendentsIf((start_folder_id == LLUUID::null ? gInventory.getRootFolderID() : start_folder_id),
|
||||
|
|
@ -1170,17 +1208,20 @@ void LLInventoryModel::updateLinkedObjectsFromPurge(const LLUUID &baseobj_id)
|
|||
|
||||
// REBUILD is expensive, so clear the current change list first else
|
||||
// everything else on the changelist will also get rebuilt.
|
||||
gInventory.notifyObservers();
|
||||
for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin();
|
||||
iter != item_array.end();
|
||||
iter++)
|
||||
if (item_array.size())
|
||||
{
|
||||
const LLViewerInventoryItem *linked_item = (*iter);
|
||||
const LLUUID &item_id = linked_item->getUUID();
|
||||
if (item_id == baseobj_id) continue;
|
||||
addChangedMask(LLInventoryObserver::REBUILD, item_id);
|
||||
gInventory.notifyObservers();
|
||||
for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin();
|
||||
iter != item_array.end();
|
||||
iter++)
|
||||
{
|
||||
const LLViewerInventoryItem *linked_item = (*iter);
|
||||
const LLUUID &item_id = linked_item->getUUID();
|
||||
if (item_id == baseobj_id) continue;
|
||||
addChangedMask(LLInventoryObserver::REBUILD, item_id);
|
||||
}
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
|
||||
// This is a method which collects the descendents of the id
|
||||
|
|
|
|||
|
|
@ -205,6 +205,9 @@ public:
|
|||
EXCLUDE_TRASH = FALSE,
|
||||
INCLUDE_TRASH = TRUE
|
||||
};
|
||||
// Simpler existence test if matches don't actually need to be collected.
|
||||
bool hasMatchingDirectDescendent(const LLUUID& cat_id,
|
||||
LLInventoryCollectFunctor& filter);
|
||||
void collectDescendents(const LLUUID& id,
|
||||
cat_array_t& categories,
|
||||
item_array_t& items,
|
||||
|
|
|
|||
Loading…
Reference in New Issue