diff options
| author | Andrew A. de Laix <alain@lindenlab.com> | 2010-07-02 08:56:49 -0700 |
|---|---|---|
| committer | Andrew A. de Laix <alain@lindenlab.com> | 2010-07-02 08:56:49 -0700 |
| commit | 6098fd2ebcd1bd78a8f8c638f707e8a14033df9b (patch) | |
| tree | 9e296f4096ee670237e9545ee0e9c083c6ad5dbd /indra/newview/llinventoryfilter.cpp | |
| parent | f1a1f613cf035d9c8e15c03bac7b00972eb3bb66 (diff) | |
| parent | 5fd6887477b61e10ffd29086b9330a54b3a571d2 (diff) | |
Automated merge with ssh://hg.lindenlab.com/brad/viewer-dev
Diffstat (limited to 'indra/newview/llinventoryfilter.cpp')
| -rw-r--r-- | indra/newview/llinventoryfilter.cpp | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 6e829f2dc2..f8241320cf 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -57,7 +57,7 @@ LLInventoryFilter::FilterOps::FilterOps() : mPermissions(PERM_NONE), mFilterTypes(FILTERTYPE_OBJECT), mFilterUUID(LLUUID::null), - mIncludeLinks(TRUE) + mFilterLinks(FILTERLINK_INCLUDE_LINKS) { } @@ -104,8 +104,10 @@ BOOL LLInventoryFilter::check(const LLFolderViewItem* item) const BOOL passed_filtertype = checkAgainstFilterType(item); const BOOL passed_permissions = checkAgainstPermissions(item); + const BOOL passed_filterlink = checkAgainstFilterLinks(item); const BOOL passed = (passed_filtertype && - passed_permissions && + passed_permissions && + passed_filterlink && (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos)); return passed; @@ -229,6 +231,21 @@ BOOL LLInventoryFilter::checkAgainstPermissions(const LLFolderViewItem* item) co return (perm & mFilterOps.mPermissions) == mFilterOps.mPermissions; } +BOOL LLInventoryFilter::checkAgainstFilterLinks(const LLFolderViewItem* item) const +{ + const LLFolderViewEventListener* listener = item->getListener(); + if (!listener) return FALSE; + + const LLUUID object_id = listener->getUUID(); + const LLInventoryObject *object = gInventory.getObject(object_id); + const BOOL is_link = object->getIsLinkType(); + if (is_link && (mFilterOps.mFilterLinks == FILTERLINK_EXCLUDE_LINKS)) + return FALSE; + if (!is_link && (mFilterOps.mFilterLinks == FILTERLINK_ONLY_LINKS)) + return FALSE; + return TRUE; +} + const std::string& LLInventoryFilter::getFilterSubString(BOOL trim) const { return mFilterSubString; @@ -246,6 +263,7 @@ BOOL LLInventoryFilter::isNotDefault() const || mFilterOps.mFilterCategoryTypes != mDefaultFilterOps.mFilterCategoryTypes || mFilterOps.mFilterWearableTypes != mDefaultFilterOps.mFilterWearableTypes || mFilterOps.mFilterTypes != FILTERTYPE_OBJECT + || mFilterOps.mFilterLinks != FILTERLINK_INCLUDE_LINKS || mFilterSubString.size() || mFilterOps.mPermissions != mDefaultFilterOps.mPermissions || mFilterOps.mMinDate != mDefaultFilterOps.mMinDate @@ -259,6 +277,7 @@ BOOL LLInventoryFilter::isActive() const || mFilterOps.mFilterCategoryTypes != 0xffffffffffffffffULL || mFilterOps.mFilterWearableTypes != 0xffffffffffffffffULL || mFilterOps.mFilterTypes != FILTERTYPE_OBJECT + || mFilterOps.mFilterLinks != FILTERLINK_INCLUDE_LINKS || mFilterSubString.size() || mFilterOps.mPermissions != PERM_NONE || mFilterOps.mMinDate != time_min() @@ -410,6 +429,11 @@ void LLInventoryFilter::setFilterSubString(const std::string& string) mFilterOps.mFilterUUID == LLUUID::null; setModified(FILTER_RESTART); } + + // Cancel out filter links once the search string is modified + { + mFilterOps.mFilterLinks = FILTERLINK_INCLUDE_LINKS; + } } } @@ -508,16 +532,17 @@ void LLInventoryFilter::setHoursAgo(U32 hours) mFilterOps.mFilterTypes |= FILTERTYPE_DATE; } -void LLInventoryFilter::setIncludeLinks(BOOL include_links) +void LLInventoryFilter::setFilterLinks(U64 filter_links) { - if (mFilterOps.mIncludeLinks != include_links) + if (mFilterOps.mFilterLinks != filter_links) { - if (!mFilterOps.mIncludeLinks) - setModified(FILTER_LESS_RESTRICTIVE); - else + if (mFilterOps.mFilterLinks == FILTERLINK_EXCLUDE_LINKS || + mFilterOps.mFilterLinks == FILTERLINK_ONLY_LINKS) setModified(FILTER_MORE_RESTRICTIVE); + else + setModified(FILTER_LESS_RESTRICTIVE); } - mFilterOps.mIncludeLinks = include_links; + mFilterOps.mFilterLinks = filter_links; } void LLInventoryFilter::setShowFolderState(EFolderShow state) @@ -895,9 +920,9 @@ U32 LLInventoryFilter::getHoursAgo() const { return mFilterOps.mHoursAgo; } -BOOL LLInventoryFilter::getIncludeLinks() const +U64 LLInventoryFilter::getFilterLinks() const { - return mFilterOps.mIncludeLinks; + return mFilterOps.mFilterLinks; } LLInventoryFilter::EFolderShow LLInventoryFilter::getShowFolderState() const { |
