Skip to content
Snippets Groups Projects
Commit 05a44d78 authored by Loren Shih's avatar Loren Shih
Browse files

EXT-7353 FIXED short cuts (links) to textures should show up in the texture picker

Added flag for controlling whether links show up in filtered lists.
parent 50fad31f
No related branches found
No related tags found
No related merge requests found
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include "llinventorymodelbackgroundfetch.h" #include "llinventorymodelbackgroundfetch.h"
#include "llviewercontrol.h" #include "llviewercontrol.h"
#include "llfolderview.h" #include "llfolderview.h"
#include "llinventorybridge.h"
// linden library includes // linden library includes
#include "lltrans.h" #include "lltrans.h"
...@@ -54,7 +55,8 @@ LLInventoryFilter::FilterOps::FilterOps() : ...@@ -54,7 +55,8 @@ LLInventoryFilter::FilterOps::FilterOps() :
mShowFolderState(SHOW_NON_EMPTY_FOLDERS), mShowFolderState(SHOW_NON_EMPTY_FOLDERS),
mPermissions(PERM_NONE), mPermissions(PERM_NONE),
mFilterTypes(FILTERTYPE_OBJECT), mFilterTypes(FILTERTYPE_OBJECT),
mFilterUUID(LLUUID::null) mFilterUUID(LLUUID::null),
mIncludeLinks(TRUE)
{ {
} }
...@@ -97,23 +99,23 @@ BOOL LLInventoryFilter::check(const LLFolderViewItem* item) ...@@ -97,23 +99,23 @@ BOOL LLInventoryFilter::check(const LLFolderViewItem* item)
return TRUE; return TRUE;
} }
const LLFolderViewEventListener* listener = item->getListener();
mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos; mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos;
const BOOL passed_filtertype = checkAgainstFilterType(item); const BOOL passed_filtertype = checkAgainstFilterType(item);
const BOOL passed = passed_filtertype && const BOOL passed_permissions = checkAgainstPermissions(item);
(mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos) && const BOOL passed = (passed_filtertype &&
((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions); passed_permissions &&
(mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos));
return passed; return passed;
} }
BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) const
{ {
const LLFolderViewEventListener* listener = item->getListener(); const LLFolderViewEventListener* listener = item->getListener();
if (!listener) return FALSE; if (!listener) return FALSE;
const LLInventoryType::EType object_type = listener->getInventoryType(); LLInventoryType::EType object_type = listener->getInventoryType();
const LLUUID object_id = listener->getUUID(); const LLUUID object_id = listener->getUUID();
const LLInventoryObject *object = gInventory.getObject(object_id); const LLInventoryObject *object = gInventory.getObject(object_id);
...@@ -128,7 +130,9 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) ...@@ -128,7 +130,9 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item)
if (object_type == LLInventoryType::IT_NONE) if (object_type == LLInventoryType::IT_NONE)
{ {
if (object && object->getIsLinkType()) if (object && object->getIsLinkType())
{
return FALSE; return FALSE;
}
} }
else if ((1LL << object_type & mFilterOps.mFilterObjectTypes) == U64(0)) else if ((1LL << object_type & mFilterOps.mFilterObjectTypes) == U64(0))
{ {
...@@ -203,6 +207,22 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) ...@@ -203,6 +207,22 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item)
return TRUE; return TRUE;
} }
BOOL LLInventoryFilter::checkAgainstPermissions(const LLFolderViewItem* item) const
{
const LLFolderViewEventListener* listener = item->getListener();
if (!listener) return FALSE;
PermissionMask perm = listener->getPermissionMask();
const LLInvFVBridge *bridge = dynamic_cast<const LLInvFVBridge *>(item->getListener());
if (bridge && bridge->isLink())
{
const LLUUID& linked_uuid = gInventory.getLinkedItemID(bridge->getUUID());
const LLViewerInventoryItem *linked_item = gInventory.getItem(linked_uuid);
if (linked_item)
perm = linked_item->getPermissionMask();
}
return (perm & mFilterOps.mPermissions) == mFilterOps.mPermissions;
}
const std::string& LLInventoryFilter::getFilterSubString(BOOL trim) const const std::string& LLInventoryFilter::getFilterSubString(BOOL trim) const
{ {
...@@ -451,6 +471,18 @@ void LLInventoryFilter::setHoursAgo(U32 hours) ...@@ -451,6 +471,18 @@ void LLInventoryFilter::setHoursAgo(U32 hours)
mFilterOps.mFilterTypes |= FILTERTYPE_DATE; mFilterOps.mFilterTypes |= FILTERTYPE_DATE;
} }
void LLInventoryFilter::setIncludeLinks(BOOL include_links)
{
if (mFilterOps.mIncludeLinks != include_links)
{
if (!mFilterOps.mIncludeLinks)
setModified(FILTER_LESS_RESTRICTIVE);
else
setModified(FILTER_MORE_RESTRICTIVE);
}
mFilterOps.mIncludeLinks = include_links;
}
void LLInventoryFilter::setShowFolderState(EFolderShow state) void LLInventoryFilter::setShowFolderState(EFolderShow state)
{ {
if (mFilterOps.mShowFolderState != state) if (mFilterOps.mShowFolderState != state)
...@@ -826,6 +858,10 @@ U32 LLInventoryFilter::getHoursAgo() const ...@@ -826,6 +858,10 @@ U32 LLInventoryFilter::getHoursAgo() const
{ {
return mFilterOps.mHoursAgo; return mFilterOps.mHoursAgo;
} }
BOOL LLInventoryFilter::getIncludeLinks() const
{
return mFilterOps.mIncludeLinks;
}
LLInventoryFilter::EFolderShow LLInventoryFilter::getShowFolderState() const LLInventoryFilter::EFolderShow LLInventoryFilter::getShowFolderState() const
{ {
return mFilterOps.mShowFolderState; return mFilterOps.mShowFolderState;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment