EXT-7742 WIP "Add to Outfit" type filter should contain items for each wearable type and for each category
added ability to filter inventory folder view by wearable typemeow-7.2.2
parent
e9a6d24fc1
commit
e0c404a866
|
|
@ -37,6 +37,7 @@
|
|||
#include "llinventorytype.h"
|
||||
#include "llpermissionsflags.h"
|
||||
#include "llpointer.h"
|
||||
#include "llwearabletype.h"
|
||||
|
||||
|
||||
class LLFolderViewItem;
|
||||
|
|
@ -89,6 +90,7 @@ public:
|
|||
virtual BOOL hasChildren() const = 0;
|
||||
virtual LLInventoryType::EType getInventoryType() const = 0;
|
||||
virtual void performAction(LLInventoryModel* model, std::string action) = 0;
|
||||
virtual LLWearableType::EType getWearableType() const = 0;
|
||||
|
||||
// This method should be called when a drag begins. returns TRUE
|
||||
// if the drag can begin, otherwise FALSE.
|
||||
|
|
|
|||
|
|
@ -123,6 +123,7 @@ public:
|
|||
EDragAndDropType cargo_type,
|
||||
void* cargo_data) { return FALSE; }
|
||||
virtual LLInventoryType::EType getInventoryType() const { return mInvType; }
|
||||
virtual LLWearableType::EType getWearableType() const { return LLWearableType::WT_NONE; }
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Convenience functions for adding various common menu options.
|
||||
|
|
@ -471,6 +472,7 @@ public:
|
|||
virtual void buildContextMenu(LLMenuGL& menu, U32 flags);
|
||||
virtual std::string getLabelSuffix() const;
|
||||
virtual BOOL renameItem(const std::string& new_name);
|
||||
virtual LLWearableType::EType getWearableType() const { return mWearableType; }
|
||||
|
||||
static void onWearOnAvatar( void* userdata ); // Access to wearOnAvatar() from menu
|
||||
static BOOL canWearOnAvatar( void* userdata );
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@
|
|||
LLInventoryFilter::FilterOps::FilterOps() :
|
||||
mFilterObjectTypes(0xffffffffffffffffULL),
|
||||
mFilterCategoryTypes(0xffffffffffffffffULL),
|
||||
mFilterWearableTypes(0xffffffffffffffffULL),
|
||||
mMinDate(time_min()),
|
||||
mMaxDate(time_max()),
|
||||
mHoursAgo(0),
|
||||
|
|
@ -139,8 +140,6 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) con
|
|||
return FALSE;
|
||||
}
|
||||
}
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -164,8 +163,6 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) con
|
|||
if ((1LL << cat->getPreferredType() & mFilterOps.mFilterCategoryTypes) == U64(0))
|
||||
return FALSE;
|
||||
}
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -178,8 +175,6 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) con
|
|||
if (object->getLinkedUUID() != mFilterOps.mFilterUUID)
|
||||
return FALSE;
|
||||
}
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -201,8 +196,18 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) con
|
|||
listener->getCreationDate() > mFilterOps.mMaxDate)
|
||||
return FALSE;
|
||||
}
|
||||
//
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// FILTERTYPE_WEARABLE
|
||||
// Pass if this item is a wearable of the appropriate type
|
||||
if (filterTypes & FILTERTYPE_WEARABLE)
|
||||
{
|
||||
LLWearableType::EType type = listener->getWearableType();
|
||||
if ((0x1LL << type & mFilterOps.mFilterWearableTypes) == 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -238,6 +243,8 @@ std::string::size_type LLInventoryFilter::getStringMatchOffset() const
|
|||
BOOL LLInventoryFilter::isNotDefault() const
|
||||
{
|
||||
return mFilterOps.mFilterObjectTypes != mDefaultFilterOps.mFilterObjectTypes
|
||||
|| mFilterOps.mFilterCategoryTypes != mDefaultFilterOps.mFilterCategoryTypes
|
||||
|| mFilterOps.mFilterWearableTypes != mDefaultFilterOps.mFilterWearableTypes
|
||||
|| mFilterOps.mFilterTypes != FILTERTYPE_OBJECT
|
||||
|| mFilterSubString.size()
|
||||
|| mFilterOps.mPermissions != mDefaultFilterOps.mPermissions
|
||||
|
|
@ -249,6 +256,8 @@ BOOL LLInventoryFilter::isNotDefault() const
|
|||
BOOL LLInventoryFilter::isActive() const
|
||||
{
|
||||
return mFilterOps.mFilterObjectTypes != 0xffffffffffffffffULL
|
||||
|| mFilterOps.mFilterCategoryTypes != 0xffffffffffffffffULL
|
||||
|| mFilterOps.mFilterWearableTypes != 0xffffffffffffffffULL
|
||||
|| mFilterOps.mFilterTypes != FILTERTYPE_OBJECT
|
||||
|| mFilterSubString.size()
|
||||
|| mFilterOps.mPermissions != PERM_NONE
|
||||
|
|
@ -322,7 +331,35 @@ void LLInventoryFilter::setFilterCategoryTypes(U64 types)
|
|||
setModified(FILTER_MORE_RESTRICTIVE);
|
||||
}
|
||||
}
|
||||
mFilterOps.mFilterTypes |= FILTERTYPE_CATEGORY;
|
||||
mFilterOps.mFilterTypes |= FILTERTYPE_OBJECT;
|
||||
}
|
||||
|
||||
void LLInventoryFilter::setFilterWearableTypes(U64 types)
|
||||
{
|
||||
if (mFilterOps.mFilterWearableTypes != types)
|
||||
{
|
||||
// keep current items only if no type bits getting turned off
|
||||
BOOL fewer_bits_set = (mFilterOps.mFilterWearableTypes & ~types);
|
||||
BOOL more_bits_set = (~mFilterOps.mFilterWearableTypes & types);
|
||||
|
||||
mFilterOps.mFilterWearableTypes = types;
|
||||
if (more_bits_set && fewer_bits_set)
|
||||
{
|
||||
// neither less or more restrive, both simultaneously
|
||||
// so we need to filter from scratch
|
||||
setModified(FILTER_RESTART);
|
||||
}
|
||||
else if (more_bits_set)
|
||||
{
|
||||
// target is only one of all requested types so more type bits == less restrictive
|
||||
setModified(FILTER_LESS_RESTRICTIVE);
|
||||
}
|
||||
else if (fewer_bits_set)
|
||||
{
|
||||
setModified(FILTER_MORE_RESTRICTIVE);
|
||||
}
|
||||
}
|
||||
mFilterOps.mFilterTypes |= FILTERTYPE_WEARABLE;
|
||||
}
|
||||
|
||||
void LLInventoryFilter::setFilterUUID(const LLUUID& object_id)
|
||||
|
|
|
|||
|
|
@ -59,10 +59,11 @@ public:
|
|||
enum EFilterType
|
||||
{
|
||||
FILTERTYPE_NONE = 0,
|
||||
FILTERTYPE_OBJECT = 1, // normal default search-by-object-type
|
||||
FILTERTYPE_CATEGORY = 2, // search by folder type
|
||||
FILTERTYPE_UUID = 4, // find the object with UUID and any links to it
|
||||
FILTERTYPE_DATE = 8 // search by date range
|
||||
FILTERTYPE_OBJECT = 0x1 << 0, // normal default search-by-object-type
|
||||
FILTERTYPE_CATEGORY = 0x1 << 1, // search by folder type
|
||||
FILTERTYPE_UUID = 0x1 << 2, // find the object with UUID and any links to it
|
||||
FILTERTYPE_DATE = 0x1 << 3, // search by date range
|
||||
FILTERTYPE_WEARABLE = 0x1 << 4 // search by wearable type
|
||||
};
|
||||
|
||||
// REFACTOR: Change this to an enum.
|
||||
|
|
@ -81,6 +82,7 @@ public:
|
|||
BOOL isFilterObjectTypesWith(LLInventoryType::EType t) const;
|
||||
void setFilterCategoryTypes(U64 types);
|
||||
void setFilterUUID(const LLUUID &object_id);
|
||||
void setFilterWearableTypes(U64 types);
|
||||
|
||||
void setFilterSubString(const std::string& string);
|
||||
const std::string& getFilterSubString(BOOL trim = FALSE) const;
|
||||
|
|
@ -168,6 +170,7 @@ private:
|
|||
U32 mFilterTypes;
|
||||
|
||||
U64 mFilterObjectTypes; // For _OBJECT
|
||||
U64 mFilterWearableTypes;
|
||||
U64 mFilterCategoryTypes; // For _CATEGORY
|
||||
LLUUID mFilterUUID; // for UUID
|
||||
|
||||
|
|
|
|||
|
|
@ -226,6 +226,11 @@ void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
|
|||
getFilter()->setFilterPermissions(filter_perm_mask);
|
||||
}
|
||||
|
||||
void LLInventoryPanel::setFilterWearableTypes(U64 types)
|
||||
{
|
||||
getFilter()->setFilterWearableTypes(types);
|
||||
}
|
||||
|
||||
void LLInventoryPanel::setFilterSubString(const std::string& string)
|
||||
{
|
||||
getFilter()->setFilterSubString(string);
|
||||
|
|
|
|||
|
|
@ -138,6 +138,7 @@ public:
|
|||
U32 getFilterObjectTypes() const { return mFolderRoot->getFilterObjectTypes(); }
|
||||
void setFilterPermMask(PermissionMask filter_perm_mask);
|
||||
U32 getFilterPermMask() const { return mFolderRoot->getFilterPermissions(); }
|
||||
void setFilterWearableTypes(U64 filter);
|
||||
void setFilterSubString(const std::string& string);
|
||||
const std::string getFilterSubString() { return mFolderRoot->getFilterSubString(); }
|
||||
void setSinceLogoff(BOOL sl);
|
||||
|
|
|
|||
Loading…
Reference in New Issue