summaryrefslogtreecommitdiff
path: root/indra/newview/llinventoryfilter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llinventoryfilter.cpp')
-rw-r--r--indra/newview/llinventoryfilter.cpp2178
1 files changed, 1089 insertions, 1089 deletions
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index 332c6d3085..b9ce90ff7b 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -1,4 +1,4 @@
-/**
+/**
* @file llinventoryfilter.cpp
* @brief Support for filtering your inventory to only display a subset of the
* available items.
@@ -6,21 +6,21 @@
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
-*
+*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
-*
+*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
-*
+*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*
+*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -49,22 +49,22 @@
#include "lltrans.h"
LLInventoryFilter::FilterOps::FilterOps(const Params& p)
-: mFilterObjectTypes(p.object_types),
- mFilterCategoryTypes(p.category_types),
- mFilterWearableTypes(p.wearable_types),
+: mFilterObjectTypes(p.object_types),
+ mFilterCategoryTypes(p.category_types),
+ mFilterWearableTypes(p.wearable_types),
mFilterSettingsTypes(p.settings_types),
- mMinDate(p.date_range.min_date),
- mMaxDate(p.date_range.max_date),
- mHoursAgo(p.hours_ago),
- mDateSearchDirection(p.date_search_direction),
- mShowFolderState(p.show_folder_state),
- mFilterCreatorType(p.creator_type),
- mPermissions(p.permissions),
- mFilterTypes(p.types),
- mFilterUUID(p.uuid),
- mFilterLinks(p.links),
+ mMinDate(p.date_range.min_date),
+ mMaxDate(p.date_range.max_date),
+ mHoursAgo(p.hours_ago),
+ mDateSearchDirection(p.date_search_direction),
+ mShowFolderState(p.show_folder_state),
+ mFilterCreatorType(p.creator_type),
+ mPermissions(p.permissions),
+ mFilterTypes(p.types),
+ mFilterUUID(p.uuid),
+ mFilterLinks(p.links),
mFilterThumbnails(p.thumbnails),
- mSearchVisibility(p.search_visibility)
+ mSearchVisibility(p.search_visibility)
{
}
@@ -72,133 +72,133 @@ LLInventoryFilter::FilterOps::FilterOps(const Params& p)
/// Class LLInventoryFilter
///----------------------------------------------------------------------------
LLInventoryFilter::LLInventoryFilter(const Params& p)
-: mName(p.name),
- mFilterModified(FILTER_NONE),
- mEmptyLookupMessage("InventoryNoMatchingItems"),
- mDefaultEmptyLookupMessage(""),
- mFilterOps(p.filter_ops),
- mBackupFilterOps(mFilterOps),
- mFilterSubString(p.substring),
- mCurrentGeneration(0),
- mFirstRequiredGeneration(0),
- mFirstSuccessGeneration(0),
- mSearchType(SEARCHTYPE_NAME),
+: mName(p.name),
+ mFilterModified(FILTER_NONE),
+ mEmptyLookupMessage("InventoryNoMatchingItems"),
+ mDefaultEmptyLookupMessage(""),
+ mFilterOps(p.filter_ops),
+ mBackupFilterOps(mFilterOps),
+ mFilterSubString(p.substring),
+ mCurrentGeneration(0),
+ mFirstRequiredGeneration(0),
+ mFirstSuccessGeneration(0),
+ mSearchType(SEARCHTYPE_NAME),
mSingleFolderMode(false)
{
- // copy mFilterOps into mDefaultFilterOps
- markDefault();
- mUsername = gAgentUsername;
- LLStringUtil::toUpper(mUsername);
-}
-
-bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
-{
- const LLFolderViewModelItemInventory* listener = dynamic_cast<const LLFolderViewModelItemInventory*>(item);
-
- // If it's a folder and we're showing all folders, return automatically.
- const BOOL is_folder = listener->getInventoryType() == LLInventoryType::IT_CATEGORY;
- if (is_folder && (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS))
- {
- return true;
- }
-
- std::string desc = listener->getSearchableCreatorName();
- switch(mSearchType)
- {
- case SEARCHTYPE_CREATOR:
- desc = listener->getSearchableCreatorName();
- break;
- case SEARCHTYPE_DESCRIPTION:
- desc = listener->getSearchableDescription();
- break;
- case SEARCHTYPE_UUID:
- desc = listener->getSearchableUUIDString();
- break;
- case SEARCHTYPE_NAME:
- default:
- desc = listener->getSearchableName();
- break;
- }
-
-
- bool passed = true;
- if (!mExactToken.empty() && (mSearchType == SEARCHTYPE_NAME))
- {
- passed = false;
- typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
- boost::char_separator<char> sep(" ");
- tokenizer tokens(desc, sep);
-
- for (auto token_iter : tokens)
- {
- if (token_iter == mExactToken)
- {
- passed = true;
- break;
- }
- }
- }
- else if ((mFilterTokens.size() > 0) && (mSearchType == SEARCHTYPE_NAME))
- {
- for (auto token_iter : mFilterTokens)
- {
- if (desc.find(token_iter) == std::string::npos)
- {
- return false;
- }
- }
- }
- else
- {
- passed = (mFilterSubString.size() ? desc.find(mFilterSubString) != std::string::npos : true);
- }
-
- passed = passed && checkAgainstFilterType(listener);
- passed = passed && checkAgainstPermissions(listener);
- passed = passed && checkAgainstFilterLinks(listener);
- passed = passed && checkAgainstCreator(listener);
- passed = passed && checkAgainstSearchVisibility(listener);
+ // copy mFilterOps into mDefaultFilterOps
+ markDefault();
+ mUsername = gAgentUsername;
+ LLStringUtil::toUpper(mUsername);
+}
+
+bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
+{
+ const LLFolderViewModelItemInventory* listener = dynamic_cast<const LLFolderViewModelItemInventory*>(item);
+
+ // If it's a folder and we're showing all folders, return automatically.
+ const BOOL is_folder = listener->getInventoryType() == LLInventoryType::IT_CATEGORY;
+ if (is_folder && (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS))
+ {
+ return true;
+ }
+
+ std::string desc = listener->getSearchableCreatorName();
+ switch(mSearchType)
+ {
+ case SEARCHTYPE_CREATOR:
+ desc = listener->getSearchableCreatorName();
+ break;
+ case SEARCHTYPE_DESCRIPTION:
+ desc = listener->getSearchableDescription();
+ break;
+ case SEARCHTYPE_UUID:
+ desc = listener->getSearchableUUIDString();
+ break;
+ case SEARCHTYPE_NAME:
+ default:
+ desc = listener->getSearchableName();
+ break;
+ }
+
+
+ bool passed = true;
+ if (!mExactToken.empty() && (mSearchType == SEARCHTYPE_NAME))
+ {
+ passed = false;
+ typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+ boost::char_separator<char> sep(" ");
+ tokenizer tokens(desc, sep);
+
+ for (auto token_iter : tokens)
+ {
+ if (token_iter == mExactToken)
+ {
+ passed = true;
+ break;
+ }
+ }
+ }
+ else if ((mFilterTokens.size() > 0) && (mSearchType == SEARCHTYPE_NAME))
+ {
+ for (auto token_iter : mFilterTokens)
+ {
+ if (desc.find(token_iter) == std::string::npos)
+ {
+ return false;
+ }
+ }
+ }
+ else
+ {
+ passed = (mFilterSubString.size() ? desc.find(mFilterSubString) != std::string::npos : true);
+ }
+
+ passed = passed && checkAgainstFilterType(listener);
+ passed = passed && checkAgainstPermissions(listener);
+ passed = passed && checkAgainstFilterLinks(listener);
+ passed = passed && checkAgainstCreator(listener);
+ passed = passed && checkAgainstSearchVisibility(listener);
passed = passed && checkAgainstFilterThumbnails(listener->getUUID());
- return passed;
+ return passed;
}
bool LLInventoryFilter::check(const LLInventoryItem* item)
{
- const bool passed_string = (mFilterSubString.size() ? item->getName().find(mFilterSubString) != std::string::npos : true);
- const bool passed_filtertype = checkAgainstFilterType(item);
- const bool passed_permissions = checkAgainstPermissions(item);
+ const bool passed_string = (mFilterSubString.size() ? item->getName().find(mFilterSubString) != std::string::npos : true);
+ const bool passed_filtertype = checkAgainstFilterType(item);
+ const bool passed_permissions = checkAgainstPermissions(item);
- return passed_filtertype && passed_permissions && passed_string;
+ return passed_filtertype && passed_permissions && passed_string;
}
bool LLInventoryFilter::checkFolder(const LLFolderViewModelItem* item) const
{
- const LLFolderViewModelItemInventory* listener = dynamic_cast<const LLFolderViewModelItemInventory*>(item);
- if (!listener)
- {
- LL_ERRS() << "Folder view event listener not found." << LL_ENDL;
- return false;
- }
+ const LLFolderViewModelItemInventory* listener = dynamic_cast<const LLFolderViewModelItemInventory*>(item);
+ if (!listener)
+ {
+ LL_ERRS() << "Folder view event listener not found." << LL_ENDL;
+ return false;
+ }
- const LLUUID folder_id = listener->getUUID();
+ const LLUUID folder_id = listener->getUUID();
- return checkFolder(folder_id);
+ return checkFolder(folder_id);
}
bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
{
- // we're showing all folders, overriding filter
- if (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS)
- {
- return true;
- }
+ // we're showing all folders, overriding filter
+ if (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS)
+ {
+ return true;
+ }
- // when applying a filter, matching folders get their contents downloaded first
- // but make sure we are not interfering with pre-download
- if (isNotDefault()
- && LLStartUp::getStartupState() > STATE_WEARABLES_WAIT
+ // when applying a filter, matching folders get their contents downloaded first
+ // but make sure we are not interfering with pre-download
+ if (isNotDefault()
+ && LLStartUp::getStartupState() > STATE_WEARABLES_WAIT
&& !LLInventoryModelBackgroundFetch::instance().inventoryFetchInProgress())
{
LLViewerInventoryCategory* cat = gInventory.getCategory(folder_id);
@@ -214,14 +214,14 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
// but if that is nesesary, do a forced scheduleFolderFetch.
cat->fetch();
}
- }
+ }
if (!checkAgainstFilterThumbnails(folder_id))
{
return false;
}
- // Marketplace folder filtering
+ // Marketplace folder filtering
const U32 filterTypes = mFilterOps.mFilterTypes;
const U32 marketplace_filter = FILTERTYPE_MARKETPLACE_ACTIVE | FILTERTYPE_MARKETPLACE_INACTIVE |
FILTERTYPE_MARKETPLACE_UNASSOCIATED | FILTERTYPE_MARKETPLACE_LISTING_FOLDER |
@@ -245,7 +245,7 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
return false;
}
}
-
+
if (depth > 0)
{
LLUUID listing_uuid = nested_parent_id(folder_id, depth);
@@ -272,44 +272,44 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
}
}
}
-
- // show folder links
- LLViewerInventoryItem* item = gInventory.getItem(folder_id);
- if (item && item->getActualType() == LLAssetType::AT_LINK_FOLDER)
- {
- return true;
- }
-
- if (mFilterOps.mFilterTypes & FILTERTYPE_CATEGORY)
- {
- // Can only filter categories for items in your inventory
- // (e.g. versus in-world object contents).
- const LLViewerInventoryCategory *cat = gInventory.getCategory(folder_id);
- if (!cat)
- return folder_id.isNull();
- LLFolderType::EType cat_type = cat->getPreferredType();
- if (cat_type != LLFolderType::FT_NONE && (1LL << cat_type & mFilterOps.mFilterCategoryTypes) == U64(0))
- return false;
- }
-
- return true;
+
+ // show folder links
+ LLViewerInventoryItem* item = gInventory.getItem(folder_id);
+ if (item && item->getActualType() == LLAssetType::AT_LINK_FOLDER)
+ {
+ return true;
+ }
+
+ if (mFilterOps.mFilterTypes & FILTERTYPE_CATEGORY)
+ {
+ // Can only filter categories for items in your inventory
+ // (e.g. versus in-world object contents).
+ const LLViewerInventoryCategory *cat = gInventory.getCategory(folder_id);
+ if (!cat)
+ return folder_id.isNull();
+ LLFolderType::EType cat_type = cat->getPreferredType();
+ if (cat_type != LLFolderType::FT_NONE && (1LL << cat_type & mFilterOps.mFilterCategoryTypes) == U64(0))
+ return false;
+ }
+
+ return true;
}
bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInventory* listener) const
{
- if (!listener) return FALSE;
+ if (!listener) return FALSE;
- LLInventoryType::EType object_type = listener->getInventoryType();
- const LLUUID object_id = listener->getUUID();
- const LLInventoryObject *object = gInventory.getObject(object_id);
+ LLInventoryType::EType object_type = listener->getInventoryType();
+ const LLUUID object_id = listener->getUUID();
+ const LLInventoryObject *object = gInventory.getObject(object_id);
- const U32 filterTypes = mFilterOps.mFilterTypes;
+ const U32 filterTypes = mFilterOps.mFilterTypes;
- ////////////////////////////////////////////////////////////////////////////////
- // FILTERTYPE_OBJECT
- // Pass if this item's type is of the correct filter type
- if (filterTypes & FILTERTYPE_OBJECT)
- {
+ ////////////////////////////////////////////////////////////////////////////////
+ // FILTERTYPE_OBJECT
+ // Pass if this item's type is of the correct filter type
+ if (filterTypes & FILTERTYPE_OBJECT)
+ {
switch (object_type)
{
case LLInventoryType::IT_NONE:
@@ -321,7 +321,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
break;
case LLInventoryType::IT_UNKNOWN:
{
- // Unknows are only shown when we show every type.
+ // Unknows are only shown when we show every type.
// Unknows are 255 and won't fit in 64 bits.
if (mFilterOps.mFilterObjectTypes != 0xffffffffffffffffULL)
{
@@ -336,70 +336,70 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
}
break;
}
- }
-
- if(filterTypes & FILTERTYPE_WORN)
- {
- if (!get_is_item_worn(object_id))
- {
- return FALSE;
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // FILTERTYPE_UUID
- // Pass if this item is the target UUID or if it links to the target UUID
- if (filterTypes & FILTERTYPE_UUID)
- {
- if (!object) return FALSE;
-
- if (object->getLinkedUUID() != mFilterOps.mFilterUUID)
- return FALSE;
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // FILTERTYPE_DATE
- // Pass if this item is within the date range.
- if (filterTypes & FILTERTYPE_DATE)
- {
- const U16 HOURS_TO_SECONDS = 3600;
- time_t earliest = time_corrected() - mFilterOps.mHoursAgo * HOURS_TO_SECONDS;
-
- if (mFilterOps.mMinDate > time_min() && mFilterOps.mMinDate < earliest)
- {
- earliest = mFilterOps.mMinDate;
- }
- else if (!mFilterOps.mHoursAgo)
- {
- earliest = 0;
- }
-
- if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection || isSinceLogoff())
- {
- if (listener->getCreationDate() < earliest ||
- listener->getCreationDate() > mFilterOps.mMaxDate)
- return FALSE;
- }
- else
- {
- if (listener->getCreationDate() > earliest ||
- 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(filterTypes & FILTERTYPE_WORN)
+ {
+ if (!get_is_item_worn(object_id))
+ {
+ return FALSE;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // FILTERTYPE_UUID
+ // Pass if this item is the target UUID or if it links to the target UUID
+ if (filterTypes & FILTERTYPE_UUID)
+ {
+ if (!object) return FALSE;
+
+ if (object->getLinkedUUID() != mFilterOps.mFilterUUID)
+ return FALSE;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // FILTERTYPE_DATE
+ // Pass if this item is within the date range.
+ if (filterTypes & FILTERTYPE_DATE)
+ {
+ const U16 HOURS_TO_SECONDS = 3600;
+ time_t earliest = time_corrected() - mFilterOps.mHoursAgo * HOURS_TO_SECONDS;
+
+ if (mFilterOps.mMinDate > time_min() && mFilterOps.mMinDate < earliest)
+ {
+ earliest = mFilterOps.mMinDate;
+ }
+ else if (!mFilterOps.mHoursAgo)
+ {
+ earliest = 0;
+ }
+
+ if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection || isSinceLogoff())
+ {
+ if (listener->getCreationDate() < earliest ||
+ listener->getCreationDate() > mFilterOps.mMaxDate)
+ return FALSE;
+ }
+ else
+ {
+ if (listener->getCreationDate() > earliest ||
+ 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 ((object_type == LLInventoryType::IT_WEARABLE) &&
(((0x1LL << type) & mFilterOps.mFilterWearableTypes) == 0))
- {
- return FALSE;
- }
- }
+ {
+ return FALSE;
+ }
+ }
////////////////////////////////////////////////////////////////////////////////
// FILTERTYPE_SETTINGS
@@ -409,58 +409,58 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
LLSettingsType::type_e type = listener->getSettingsType();
if ((object_type == LLInventoryType::IT_SETTINGS) &&
(((0x1LL << type) & mFilterOps.mFilterSettingsTypes) == 0))
- {
- return FALSE;
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // FILTERTYPE_EMPTYFOLDERS
- // Pass if this item is a folder and is not a system folder that should be hidden
- if (filterTypes & FILTERTYPE_EMPTYFOLDERS)
- {
- if (object_type == LLInventoryType::IT_CATEGORY)
- {
- bool is_hidden_if_empty = LLViewerFolderType::lookupIsHiddenIfEmpty(listener->getPreferredType());
- if (is_hidden_if_empty)
- {
- // Force the fetching of those folders so they are hidden if they really are empty...
- // But don't interfere with startup download
- if (LLStartUp::getStartupState() > STATE_WEARABLES_WAIT)
- {
- gInventory.fetchDescendentsOf(object_id);
- }
-
- LLInventoryModel::cat_array_t* cat_array = NULL;
- LLInventoryModel::item_array_t* item_array = NULL;
- gInventory.getDirectDescendentsOf(object_id,cat_array,item_array);
- S32 descendents_actual = 0;
- if(cat_array && item_array)
- {
- descendents_actual = cat_array->size() + item_array->size();
- }
- if (descendents_actual == 0)
- {
- return FALSE;
- }
- }
- }
- }
-
- return TRUE;
+ {
+ return FALSE;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // FILTERTYPE_EMPTYFOLDERS
+ // Pass if this item is a folder and is not a system folder that should be hidden
+ if (filterTypes & FILTERTYPE_EMPTYFOLDERS)
+ {
+ if (object_type == LLInventoryType::IT_CATEGORY)
+ {
+ bool is_hidden_if_empty = LLViewerFolderType::lookupIsHiddenIfEmpty(listener->getPreferredType());
+ if (is_hidden_if_empty)
+ {
+ // Force the fetching of those folders so they are hidden if they really are empty...
+ // But don't interfere with startup download
+ if (LLStartUp::getStartupState() > STATE_WEARABLES_WAIT)
+ {
+ gInventory.fetchDescendentsOf(object_id);
+ }
+
+ LLInventoryModel::cat_array_t* cat_array = NULL;
+ LLInventoryModel::item_array_t* item_array = NULL;
+ gInventory.getDirectDescendentsOf(object_id,cat_array,item_array);
+ S32 descendents_actual = 0;
+ if(cat_array && item_array)
+ {
+ descendents_actual = cat_array->size() + item_array->size();
+ }
+ if (descendents_actual == 0)
+ {
+ return FALSE;
+ }
+ }
+ }
+ }
+
+ return TRUE;
}
bool LLInventoryFilter::checkAgainstFilterType(const LLInventoryItem* item) const
{
- LLInventoryType::EType object_type = item->getInventoryType();
+ LLInventoryType::EType object_type = item->getInventoryType();
- const U32 filterTypes = mFilterOps.mFilterTypes;
+ const U32 filterTypes = mFilterOps.mFilterTypes;
- ////////////////////////////////////////////////////////////////////////////////
- // FILTERTYPE_OBJECT
- // Pass if this item's type is of the correct filter type
- if (filterTypes & FILTERTYPE_OBJECT)
- {
+ ////////////////////////////////////////////////////////////////////////////////
+ // FILTERTYPE_OBJECT
+ // Pass if this item's type is of the correct filter type
+ if (filterTypes & FILTERTYPE_OBJECT)
+ {
switch (object_type)
{
case LLInventoryType::IT_NONE:
@@ -472,7 +472,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLInventoryItem* item) cons
break;
case LLInventoryType::IT_UNKNOWN:
{
- // Unknows are only shown when we show every type.
+ // Unknows are only shown when we show every type.
// Unknows are 255 and won't fit in 64 bits.
if (mFilterOps.mFilterObjectTypes != 0xffffffffffffffffULL)
{
@@ -487,98 +487,98 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLInventoryItem* item) cons
}
break;
}
- }
+ }
- ////////////////////////////////////////////////////////////////////////////////
- // FILTERTYPE_UUID
- // Pass if this item is the target UUID or if it links to the target UUID
- if (filterTypes & FILTERTYPE_UUID)
- {
- if (!item) return false;
+ ////////////////////////////////////////////////////////////////////////////////
+ // FILTERTYPE_UUID
+ // Pass if this item is the target UUID or if it links to the target UUID
+ if (filterTypes & FILTERTYPE_UUID)
+ {
+ if (!item) return false;
- if (item->getLinkedUUID() != mFilterOps.mFilterUUID)
- return false;
- }
+ if (item->getLinkedUUID() != mFilterOps.mFilterUUID)
+ return false;
+ }
- ////////////////////////////////////////////////////////////////////////////////
- // FILTERTYPE_DATE
- // Pass if this item is within the date range.
- if (filterTypes & FILTERTYPE_DATE)
- {
- // We don't get the updated item creation date for the task inventory or
- // a notecard embedded item. See LLTaskInvFVBridge::getCreationDate().
- return false;
- }
+ ////////////////////////////////////////////////////////////////////////////////
+ // FILTERTYPE_DATE
+ // Pass if this item is within the date range.
+ if (filterTypes & FILTERTYPE_DATE)
+ {
+ // We don't get the updated item creation date for the task inventory or
+ // a notecard embedded item. See LLTaskInvFVBridge::getCreationDate().
+ return false;
+ }
- return true;
+ return true;
}
-// Items and folders that are on the clipboard or, recursively, in a folder which
+// Items and folders that are on the clipboard or, recursively, in a folder which
// is on the clipboard must be filtered out if the clipboard is in the "cut" mode.
bool LLInventoryFilter::checkAgainstClipboard(const LLUUID& object_id) const
{
- if (LLClipboard::instance().isCutMode())
- {
+ if (LLClipboard::instance().isCutMode())
+ {
LL_PROFILE_ZONE_SCOPED;
- LLUUID current_id = object_id;
- LLInventoryObject *current_object = gInventory.getObject(object_id);
- while (current_id.notNull() && current_object)
- {
- if (LLClipboard::instance().isOnClipboard(current_id))
- {
- return false;
- }
- current_id = current_object->getParentUUID();
- if (current_id.notNull())
- {
- current_object = gInventory.getObject(current_id);
- }
- }
- }
- return true;
+ LLUUID current_id = object_id;
+ LLInventoryObject *current_object = gInventory.getObject(object_id);
+ while (current_id.notNull() && current_object)
+ {
+ if (LLClipboard::instance().isOnClipboard(current_id))
+ {
+ return false;
+ }
+ current_id = current_object->getParentUUID();
+ if (current_id.notNull())
+ {
+ current_object = gInventory.getObject(current_id);
+ }
+ }
+ }
+ return true;
}
bool LLInventoryFilter::checkAgainstPermissions(const LLFolderViewModelItemInventory* listener) const
{
- if (!listener) return FALSE;
+ if (!listener) return FALSE;
- PermissionMask perm = listener->getPermissionMask();
- const LLInvFVBridge *bridge = dynamic_cast<const LLInvFVBridge *>(listener);
- 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;
+ PermissionMask perm = listener->getPermissionMask();
+ const LLInvFVBridge *bridge = dynamic_cast<const LLInvFVBridge *>(listener);
+ 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;
}
bool LLInventoryFilter::checkAgainstPermissions(const LLInventoryItem* item) const
{
- if (!item) return false;
+ if (!item) return false;
- LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
- PermissionMask perm = new_item->getPermissionMask();
- new_item = NULL;
+ LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
+ PermissionMask perm = new_item->getPermissionMask();
+ new_item = NULL;
- return (perm & mFilterOps.mPermissions) == mFilterOps.mPermissions;
+ return (perm & mFilterOps.mPermissions) == mFilterOps.mPermissions;
}
bool LLInventoryFilter::checkAgainstFilterLinks(const LLFolderViewModelItemInventory* listener) const
{
- if (!listener) return TRUE;
+ if (!listener) return TRUE;
- const LLUUID object_id = listener->getUUID();
- const LLInventoryObject *object = gInventory.getObject(object_id);
- if (!object) return TRUE;
+ const LLUUID object_id = listener->getUUID();
+ const LLInventoryObject *object = gInventory.getObject(object_id);
+ if (!object) return TRUE;
- 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 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;
}
bool LLInventoryFilter::checkAgainstFilterThumbnails(const LLUUID& object_id) const
@@ -596,167 +596,167 @@ bool LLInventoryFilter::checkAgainstFilterThumbnails(const LLUUID& object_id) co
bool LLInventoryFilter::checkAgainstCreator(const LLFolderViewModelItemInventory* listener) const
{
- if (!listener) return TRUE;
- const BOOL is_folder = listener->getInventoryType() == LLInventoryType::IT_CATEGORY;
- switch (mFilterOps.mFilterCreatorType)
- {
- case FILTERCREATOR_SELF:
- if(is_folder) return FALSE;
- return (listener->getSearchableCreatorName() == mUsername);
- case FILTERCREATOR_OTHERS:
- if(is_folder) return FALSE;
- return (listener->getSearchableCreatorName() != mUsername);
- case FILTERCREATOR_ALL:
- default:
- return TRUE;
- }
+ if (!listener) return TRUE;
+ const BOOL is_folder = listener->getInventoryType() == LLInventoryType::IT_CATEGORY;
+ switch (mFilterOps.mFilterCreatorType)
+ {
+ case FILTERCREATOR_SELF:
+ if(is_folder) return FALSE;
+ return (listener->getSearchableCreatorName() == mUsername);
+ case FILTERCREATOR_OTHERS:
+ if(is_folder) return FALSE;
+ return (listener->getSearchableCreatorName() != mUsername);
+ case FILTERCREATOR_ALL:
+ default:
+ return TRUE;
+ }
}
bool LLInventoryFilter::checkAgainstSearchVisibility(const LLFolderViewModelItemInventory* listener) const
{
- if (!listener || !hasFilterString()) return TRUE;
+ if (!listener || !hasFilterString()) return TRUE;
- const LLUUID object_id = listener->getUUID();
- const LLInventoryObject *object = gInventory.getObject(object_id);
- if (!object) return TRUE;
+ const LLUUID object_id = listener->getUUID();
+ const LLInventoryObject *object = gInventory.getObject(object_id);
+ if (!object) return TRUE;
- const BOOL is_link = object->getIsLinkType();
- if (is_link && ((mFilterOps.mSearchVisibility & VISIBILITY_LINKS) == 0))
- return FALSE;
+ const BOOL is_link = object->getIsLinkType();
+ if (is_link && ((mFilterOps.mSearchVisibility & VISIBILITY_LINKS) == 0))
+ return FALSE;
if (listener->isItemInOutfits() && ((mFilterOps.mSearchVisibility & VISIBILITY_OUTFITS) == 0))
return FALSE;
- if (listener->isItemInTrash() && ((mFilterOps.mSearchVisibility & VISIBILITY_TRASH) == 0))
- return FALSE;
+ if (listener->isItemInTrash() && ((mFilterOps.mSearchVisibility & VISIBILITY_TRASH) == 0))
+ return FALSE;
- if (!listener->isAgentInventory() && ((mFilterOps.mSearchVisibility & VISIBILITY_LIBRARY) == 0))
- return FALSE;
+ if (!listener->isAgentInventory() && ((mFilterOps.mSearchVisibility & VISIBILITY_LIBRARY) == 0))
+ return FALSE;
- return TRUE;
+ return TRUE;
}
const std::string& LLInventoryFilter::getFilterSubString(BOOL trim) const
{
- return mFilterSubString;
+ return mFilterSubString;
}
std::string::size_type LLInventoryFilter::getStringMatchOffset(LLFolderViewModelItem* item) const
{
- if (mSearchType == SEARCHTYPE_NAME)
- {
- return mFilterSubString.size() ? item->getSearchableName().find(mFilterSubString) : std::string::npos;
- }
- else
- {
- return std::string::npos;
- }
+ if (mSearchType == SEARCHTYPE_NAME)
+ {
+ return mFilterSubString.size() ? item->getSearchableName().find(mFilterSubString) : std::string::npos;
+ }
+ else
+ {
+ return std::string::npos;
+ }
}
bool LLInventoryFilter::isDefault() const
{
- return !isNotDefault();
+ return !isNotDefault();
}
// has user modified default filter params?
bool LLInventoryFilter::isNotDefault() const
{
- S32 not_default = 0;
+ S32 not_default = 0;
- not_default |= (mFilterOps.mFilterObjectTypes != mDefaultFilterOps.mFilterObjectTypes);
- not_default |= (mFilterOps.mFilterCategoryTypes != mDefaultFilterOps.mFilterCategoryTypes);
- not_default |= (mFilterOps.mFilterWearableTypes != mDefaultFilterOps.mFilterWearableTypes);
- not_default |= (mFilterOps.mFilterTypes != mDefaultFilterOps.mFilterTypes);
- not_default |= (mFilterOps.mFilterLinks != mDefaultFilterOps.mFilterLinks);
- not_default |= (mFilterSubString.size());
- not_default |= (mFilterOps.mPermissions != mDefaultFilterOps.mPermissions);
- not_default |= (mFilterOps.mMinDate != mDefaultFilterOps.mMinDate);
- not_default |= (mFilterOps.mMaxDate != mDefaultFilterOps.mMaxDate);
- not_default |= (mFilterOps.mHoursAgo != mDefaultFilterOps.mHoursAgo);
+ not_default |= (mFilterOps.mFilterObjectTypes != mDefaultFilterOps.mFilterObjectTypes);
+ not_default |= (mFilterOps.mFilterCategoryTypes != mDefaultFilterOps.mFilterCategoryTypes);
+ not_default |= (mFilterOps.mFilterWearableTypes != mDefaultFilterOps.mFilterWearableTypes);
+ not_default |= (mFilterOps.mFilterTypes != mDefaultFilterOps.mFilterTypes);
+ not_default |= (mFilterOps.mFilterLinks != mDefaultFilterOps.mFilterLinks);
+ not_default |= (mFilterSubString.size());
+ not_default |= (mFilterOps.mPermissions != mDefaultFilterOps.mPermissions);
+ not_default |= (mFilterOps.mMinDate != mDefaultFilterOps.mMinDate);
+ not_default |= (mFilterOps.mMaxDate != mDefaultFilterOps.mMaxDate);
+ not_default |= (mFilterOps.mHoursAgo != mDefaultFilterOps.mHoursAgo);
- return not_default != 0;
+ return not_default != 0;
}
bool LLInventoryFilter::isActive() const
{
- return mFilterOps.mFilterObjectTypes != 0xffffffffffffffffULL
- || 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()
- || mFilterOps.mMaxDate != time_max()
- || mFilterOps.mHoursAgo != 0;
+ return mFilterOps.mFilterObjectTypes != 0xffffffffffffffffULL
+ || 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()
+ || mFilterOps.mMaxDate != time_max()
+ || mFilterOps.mHoursAgo != 0;
}
bool LLInventoryFilter::isModified() const
{
- return mFilterModified != FILTER_NONE;
+ return mFilterModified != FILTER_NONE;
}
void LLInventoryFilter::updateFilterTypes(U64 types, U64& current_types)
{
- if (current_types != types)
- {
- // keep current items only if no type bits getting turned off
- bool fewer_bits_set = (current_types & ~types) != 0;
- bool more_bits_set = (~current_types & types) != 0;
-
- current_types = types;
- if (more_bits_set && fewer_bits_set)
- {
- // neither less or more restrictive, 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);
- }
- }
+ if (current_types != types)
+ {
+ // keep current items only if no type bits getting turned off
+ bool fewer_bits_set = (current_types & ~types) != 0;
+ bool more_bits_set = (~current_types & types) != 0;
+
+ current_types = types;
+ if (more_bits_set && fewer_bits_set)
+ {
+ // neither less or more restrictive, 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);
+ }
+ }
}
void LLInventoryFilter::setSearchType(ESearchType type)
{
- if(mSearchType != type)
- {
- mSearchType = type;
- setModified();
- }
+ if(mSearchType != type)
+ {
+ mSearchType = type;
+ setModified();
+ }
}
void LLInventoryFilter::setFilterCreator(EFilterCreatorType type)
{
- if (mFilterOps.mFilterCreatorType != type)
- {
- mFilterOps.mFilterCreatorType = type;
- setModified();
- }
+ if (mFilterOps.mFilterCreatorType != type)
+ {
+ mFilterOps.mFilterCreatorType = type;
+ setModified();
+ }
}
void LLInventoryFilter::setFilterObjectTypes(U64 types)
{
- updateFilterTypes(types, mFilterOps.mFilterObjectTypes);
- mFilterOps.mFilterTypes |= FILTERTYPE_OBJECT;
+ updateFilterTypes(types, mFilterOps.mFilterObjectTypes);
+ mFilterOps.mFilterTypes |= FILTERTYPE_OBJECT;
}
void LLInventoryFilter::setFilterCategoryTypes(U64 types)
{
- updateFilterTypes(types, mFilterOps.mFilterCategoryTypes);
- mFilterOps.mFilterTypes |= FILTERTYPE_CATEGORY;
+ updateFilterTypes(types, mFilterOps.mFilterCategoryTypes);
+ mFilterOps.mFilterTypes |= FILTERTYPE_CATEGORY;
}
void LLInventoryFilter::setFilterWearableTypes(U64 types)
{
- updateFilterTypes(types, mFilterOps.mFilterWearableTypes);
- mFilterOps.mFilterTypes |= FILTERTYPE_WEARABLE;
+ updateFilterTypes(types, mFilterOps.mFilterWearableTypes);
+ mFilterOps.mFilterTypes |= FILTERTYPE_WEARABLE;
}
void LLInventoryFilter::setFilterSettingsTypes(U64 types)
@@ -793,7 +793,7 @@ void LLInventoryFilter::setFilterThumbnails(U64 filter_thumbnails)
void LLInventoryFilter::setFilterEmptySystemFolders()
{
- mFilterOps.mFilterTypes |= FILTERTYPE_EMPTYFOLDERS;
+ mFilterOps.mFilterTypes |= FILTERTYPE_EMPTYFOLDERS;
}
void LLInventoryFilter::setFilterWorn()
@@ -803,17 +803,17 @@ void LLInventoryFilter::setFilterWorn()
void LLInventoryFilter::setFilterMarketplaceActiveFolders()
{
- mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_ACTIVE;
+ mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_ACTIVE;
}
void LLInventoryFilter::setFilterMarketplaceInactiveFolders()
{
- mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_INACTIVE;
+ mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_INACTIVE;
}
void LLInventoryFilter::setFilterMarketplaceUnassociatedFolders()
{
- mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_UNASSOCIATED;
+ mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_UNASSOCIATED;
}
void LLInventoryFilter::setFilterMarketplaceListingFolders(bool select_only_listing_folders)
@@ -833,20 +833,20 @@ void LLInventoryFilter::setFilterMarketplaceListingFolders(bool select_only_list
void LLInventoryFilter::toggleSearchVisibilityLinks()
{
- bool hide_links = mFilterOps.mSearchVisibility & VISIBILITY_LINKS;
- if (hide_links)
- {
- mFilterOps.mSearchVisibility &= ~VISIBILITY_LINKS;
- }
- else
- {
- mFilterOps.mSearchVisibility |= VISIBILITY_LINKS;
- }
+ bool hide_links = mFilterOps.mSearchVisibility & VISIBILITY_LINKS;
+ if (hide_links)
+ {
+ mFilterOps.mSearchVisibility &= ~VISIBILITY_LINKS;
+ }
+ else
+ {
+ mFilterOps.mSearchVisibility |= VISIBILITY_LINKS;
+ }
- if (hasFilterString())
- {
- setModified(hide_links ? FILTER_MORE_RESTRICTIVE : FILTER_LESS_RESTRICTIVE);
- }
+ if (hasFilterString())
+ {
+ setModified(hide_links ? FILTER_MORE_RESTRICTIVE : FILTER_LESS_RESTRICTIVE);
+ }
}
void LLInventoryFilter::toggleSearchVisibilityOutfits()
@@ -869,38 +869,38 @@ void LLInventoryFilter::toggleSearchVisibilityOutfits()
void LLInventoryFilter::toggleSearchVisibilityTrash()
{
- bool hide_trash = mFilterOps.mSearchVisibility & VISIBILITY_TRASH;
- if (hide_trash)
- {
- mFilterOps.mSearchVisibility &= ~VISIBILITY_TRASH;
- }
- else
- {
- mFilterOps.mSearchVisibility |= VISIBILITY_TRASH;
- }
+ bool hide_trash = mFilterOps.mSearchVisibility & VISIBILITY_TRASH;
+ if (hide_trash)
+ {
+ mFilterOps.mSearchVisibility &= ~VISIBILITY_TRASH;
+ }
+ else
+ {
+ mFilterOps.mSearchVisibility |= VISIBILITY_TRASH;
+ }
- if (hasFilterString())
- {
- setModified(hide_trash ? FILTER_MORE_RESTRICTIVE : FILTER_LESS_RESTRICTIVE);
- }
+ if (hasFilterString())
+ {
+ setModified(hide_trash ? FILTER_MORE_RESTRICTIVE : FILTER_LESS_RESTRICTIVE);
+ }
}
void LLInventoryFilter::toggleSearchVisibilityLibrary()
{
- bool hide_library = mFilterOps.mSearchVisibility & VISIBILITY_LIBRARY;
- if (hide_library)
- {
- mFilterOps.mSearchVisibility &= ~VISIBILITY_LIBRARY;
- }
- else
- {
- mFilterOps.mSearchVisibility |= VISIBILITY_LIBRARY;
- }
+ bool hide_library = mFilterOps.mSearchVisibility & VISIBILITY_LIBRARY;
+ if (hide_library)
+ {
+ mFilterOps.mSearchVisibility &= ~VISIBILITY_LIBRARY;
+ }
+ else
+ {
+ mFilterOps.mSearchVisibility |= VISIBILITY_LIBRARY;
+ }
- if (hasFilterString())
- {
- setModified(hide_library ? FILTER_MORE_RESTRICTIVE : FILTER_LESS_RESTRICTIVE);
- }
+ if (hasFilterString())
+ {
+ setModified(hide_library ? FILTER_MORE_RESTRICTIVE : FILTER_LESS_RESTRICTIVE);
+ }
}
void LLInventoryFilter::setFilterNoMarketplaceFolder()
@@ -910,675 +910,675 @@ void LLInventoryFilter::setFilterNoMarketplaceFolder()
void LLInventoryFilter::setFilterUUID(const LLUUID& object_id)
{
- if (mFilterOps.mFilterUUID == LLUUID::null)
- {
- setModified(FILTER_MORE_RESTRICTIVE);
- }
- else
- {
- setModified(FILTER_RESTART);
- }
- mFilterOps.mFilterUUID = object_id;
- mFilterOps.mFilterTypes = FILTERTYPE_UUID;
+ if (mFilterOps.mFilterUUID == LLUUID::null)
+ {
+ setModified(FILTER_MORE_RESTRICTIVE);
+ }
+ else
+ {
+ setModified(FILTER_RESTART);
+ }
+ mFilterOps.mFilterUUID = object_id;
+ mFilterOps.mFilterTypes = FILTERTYPE_UUID;
}
void LLInventoryFilter::setFilterSubString(const std::string& string)
{
- std::string filter_sub_string_new = string;
- mFilterSubStringOrig = string;
- LLStringUtil::trimHead(filter_sub_string_new);
- LLStringUtil::toUpper(filter_sub_string_new);
-
- if (mFilterSubString != filter_sub_string_new)
- {
-
- mFilterTokens.clear();
- if (filter_sub_string_new.find_first_of("+") != std::string::npos)
- {
- typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
- boost::char_separator<char> sep("+");
- tokenizer tokens(filter_sub_string_new, sep);
-
- for (auto token_iter : tokens)
- {
- mFilterTokens.push_back(token_iter);
- }
- }
-
- std::string old_token = mExactToken;
- mExactToken.clear();
- bool exact_token_changed = false;
- if (mFilterTokens.empty() && filter_sub_string_new.size() > 2)
- {
- boost::regex mPattern = boost::regex("\"\\s*([^<]*)?\\s*\"",
- boost::regex::perl | boost::regex::icase);
- boost::match_results<std::string::const_iterator> matches;
- mExactToken = (ll_regex_match(filter_sub_string_new, matches, mPattern) && matches[1].matched)
- ? matches[1]
- : LLStringUtil::null;
- if ((old_token.empty() && !mExactToken.empty())
- || (!old_token.empty() && mExactToken.empty()))
- {
- exact_token_changed = true;
- }
- }
-
- // hitting BACKSPACE, for example
- const BOOL less_restrictive = mFilterSubString.size() >= filter_sub_string_new.size()
- && !mFilterSubString.substr(0, filter_sub_string_new.size()).compare(filter_sub_string_new);
-
- // appending new characters
- const BOOL more_restrictive = mFilterSubString.size() < filter_sub_string_new.size()
- && !filter_sub_string_new.substr(0, mFilterSubString.size()).compare(mFilterSubString);
-
- mFilterSubString = filter_sub_string_new;
- if (exact_token_changed)
- {
- setModified(FILTER_RESTART);
- }
- else if (less_restrictive)
- {
- setModified(FILTER_LESS_RESTRICTIVE);
- }
- else if (more_restrictive)
- {
- setModified(FILTER_MORE_RESTRICTIVE);
- }
- else
- {
- setModified(FILTER_RESTART);
- }
-
- // Cancel out filter links once the search string is modified
- if (mFilterOps.mFilterLinks == FILTERLINK_ONLY_LINKS)
- {
- if (mBackupFilterOps.mFilterLinks == FILTERLINK_ONLY_LINKS)
- {
- // we started viewer/floater in 'only links' mode
- mFilterOps.mFilterLinks = FILTERLINK_INCLUDE_LINKS;
- }
- else
- {
- mFilterOps = mBackupFilterOps;
- setModified(FILTER_RESTART);
- }
- }
-
- // Cancel out UUID once the search string is modified
- if (mFilterOps.mFilterTypes == FILTERTYPE_UUID)
- {
- mFilterOps.mFilterTypes &= ~FILTERTYPE_UUID;
- mFilterOps.mFilterUUID = LLUUID::null;
- setModified(FILTER_RESTART);
- }
- }
+ std::string filter_sub_string_new = string;
+ mFilterSubStringOrig = string;
+ LLStringUtil::trimHead(filter_sub_string_new);
+ LLStringUtil::toUpper(filter_sub_string_new);
+
+ if (mFilterSubString != filter_sub_string_new)
+ {
+
+ mFilterTokens.clear();
+ if (filter_sub_string_new.find_first_of("+") != std::string::npos)
+ {
+ typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+ boost::char_separator<char> sep("+");
+ tokenizer tokens(filter_sub_string_new, sep);
+
+ for (auto token_iter : tokens)
+ {
+ mFilterTokens.push_back(token_iter);
+ }
+ }
+
+ std::string old_token = mExactToken;
+ mExactToken.clear();
+ bool exact_token_changed = false;
+ if (mFilterTokens.empty() && filter_sub_string_new.size() > 2)
+ {
+ boost::regex mPattern = boost::regex("\"\\s*([^<]*)?\\s*\"",
+ boost::regex::perl | boost::regex::icase);
+ boost::match_results<std::string::const_iterator> matches;
+ mExactToken = (ll_regex_match(filter_sub_string_new, matches, mPattern) && matches[1].matched)
+ ? matches[1]
+ : LLStringUtil::null;
+ if ((old_token.empty() && !mExactToken.empty())
+ || (!old_token.empty() && mExactToken.empty()))
+ {
+ exact_token_changed = true;
+ }
+ }
+
+ // hitting BACKSPACE, for example
+ const BOOL less_restrictive = mFilterSubString.size() >= filter_sub_string_new.size()
+ && !mFilterSubString.substr(0, filter_sub_string_new.size()).compare(filter_sub_string_new);
+
+ // appending new characters
+ const BOOL more_restrictive = mFilterSubString.size() < filter_sub_string_new.size()
+ && !filter_sub_string_new.substr(0, mFilterSubString.size()).compare(mFilterSubString);
+
+ mFilterSubString = filter_sub_string_new;
+ if (exact_token_changed)
+ {
+ setModified(FILTER_RESTART);
+ }
+ else if (less_restrictive)
+ {
+ setModified(FILTER_LESS_RESTRICTIVE);
+ }
+ else if (more_restrictive)
+ {
+ setModified(FILTER_MORE_RESTRICTIVE);
+ }
+ else
+ {
+ setModified(FILTER_RESTART);
+ }
+
+ // Cancel out filter links once the search string is modified
+ if (mFilterOps.mFilterLinks == FILTERLINK_ONLY_LINKS)
+ {
+ if (mBackupFilterOps.mFilterLinks == FILTERLINK_ONLY_LINKS)
+ {
+ // we started viewer/floater in 'only links' mode
+ mFilterOps.mFilterLinks = FILTERLINK_INCLUDE_LINKS;
+ }
+ else
+ {
+ mFilterOps = mBackupFilterOps;
+ setModified(FILTER_RESTART);
+ }
+ }
+
+ // Cancel out UUID once the search string is modified
+ if (mFilterOps.mFilterTypes == FILTERTYPE_UUID)
+ {
+ mFilterOps.mFilterTypes &= ~FILTERTYPE_UUID;
+ mFilterOps.mFilterUUID = LLUUID::null;
+ setModified(FILTER_RESTART);
+ }
+ }
}
void LLInventoryFilter::setSearchVisibilityTypes(U32 types)
{
- if (mFilterOps.mSearchVisibility != types)
- {
- // keep current items only if no perm bits getting turned off
- BOOL fewer_bits_set = (mFilterOps.mSearchVisibility & ~types);
- BOOL more_bits_set = (~mFilterOps.mSearchVisibility & types);
- mFilterOps.mSearchVisibility = types;
-
- if (more_bits_set && fewer_bits_set)
- {
- setModified(FILTER_RESTART);
- }
- else if (more_bits_set)
- {
- // target must have all requested permission bits, so more bits == more restrictive
- setModified(FILTER_MORE_RESTRICTIVE);
- }
- else if (fewer_bits_set)
- {
- setModified(FILTER_LESS_RESTRICTIVE);
- }
- }
+ if (mFilterOps.mSearchVisibility != types)
+ {
+ // keep current items only if no perm bits getting turned off
+ BOOL fewer_bits_set = (mFilterOps.mSearchVisibility & ~types);
+ BOOL more_bits_set = (~mFilterOps.mSearchVisibility & types);
+ mFilterOps.mSearchVisibility = types;
+
+ if (more_bits_set && fewer_bits_set)
+ {
+ setModified(FILTER_RESTART);
+ }
+ else if (more_bits_set)
+ {
+ // target must have all requested permission bits, so more bits == more restrictive
+ setModified(FILTER_MORE_RESTRICTIVE);
+ }
+ else if (fewer_bits_set)
+ {
+ setModified(FILTER_LESS_RESTRICTIVE);
+ }
+ }
}
void LLInventoryFilter::setSearchVisibilityTypes(const Params& params)
{
- if (!params.validateBlock())
- {
- return;
- }
+ if (!params.validateBlock())
+ {
+ return;
+ }
- if (params.filter_ops.search_visibility.isProvided())
- {
- setSearchVisibilityTypes(params.filter_ops.search_visibility);
- }
+ if (params.filter_ops.search_visibility.isProvided())
+ {
+ setSearchVisibilityTypes(params.filter_ops.search_visibility);
+ }
}
void LLInventoryFilter::setFilterPermissions(PermissionMask perms)
{
- if (mFilterOps.mPermissions != perms)
- {
- // keep current items only if no perm bits getting turned off
- BOOL fewer_bits_set = (mFilterOps.mPermissions & ~perms);
- BOOL more_bits_set = (~mFilterOps.mPermissions & perms);
- mFilterOps.mPermissions = perms;
-
- if (more_bits_set && fewer_bits_set)
- {
- setModified(FILTER_RESTART);
- }
- else if (more_bits_set)
- {
- // target must have all requested permission bits, so more bits == more restrictive
- setModified(FILTER_MORE_RESTRICTIVE);
- }
- else if (fewer_bits_set)
- {
- setModified(FILTER_LESS_RESTRICTIVE);
- }
- }
+ if (mFilterOps.mPermissions != perms)
+ {
+ // keep current items only if no perm bits getting turned off
+ BOOL fewer_bits_set = (mFilterOps.mPermissions & ~perms);
+ BOOL more_bits_set = (~mFilterOps.mPermissions & perms);
+ mFilterOps.mPermissions = perms;
+
+ if (more_bits_set && fewer_bits_set)
+ {
+ setModified(FILTER_RESTART);
+ }
+ else if (more_bits_set)
+ {
+ // target must have all requested permission bits, so more bits == more restrictive
+ setModified(FILTER_MORE_RESTRICTIVE);
+ }
+ else if (fewer_bits_set)
+ {
+ setModified(FILTER_LESS_RESTRICTIVE);
+ }
+ }
}
void LLInventoryFilter::setDateRange(time_t min_date, time_t max_date)
{
- mFilterOps.mHoursAgo = 0;
- if (mFilterOps.mMinDate != min_date)
- {
- mFilterOps.mMinDate = min_date;
- setModified();
- }
- if (mFilterOps.mMaxDate != llmax(mFilterOps.mMinDate, max_date))
- {
- mFilterOps.mMaxDate = llmax(mFilterOps.mMinDate, max_date);
- setModified();
- }
-
- if (areDateLimitsSet())
- {
- mFilterOps.mFilterTypes |= FILTERTYPE_DATE;
- }
- else
- {
- mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
- }
+ mFilterOps.mHoursAgo = 0;
+ if (mFilterOps.mMinDate != min_date)
+ {
+ mFilterOps.mMinDate = min_date;
+ setModified();
+ }
+ if (mFilterOps.mMaxDate != llmax(mFilterOps.mMinDate, max_date))
+ {
+ mFilterOps.mMaxDate = llmax(mFilterOps.mMinDate, max_date);
+ setModified();
+ }
+
+ if (areDateLimitsSet())
+ {
+ mFilterOps.mFilterTypes |= FILTERTYPE_DATE;
+ }
+ else
+ {
+ mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
+ }
}
void LLInventoryFilter::setDateRangeLastLogoff(BOOL sl)
{
- static LLCachedControl<U32> s_last_logoff(gSavedPerAccountSettings, "LastLogoff", 0);
- if (sl && !isSinceLogoff())
- {
- setDateRange(s_last_logoff(), time_max());
- setModified();
- }
- if (!sl && isSinceLogoff())
- {
- setDateRange(time_min(), time_max());
- setModified();
- }
-
- if (areDateLimitsSet())
- {
- mFilterOps.mFilterTypes |= FILTERTYPE_DATE;
- }
- else
- {
- mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
- }
+ static LLCachedControl<U32> s_last_logoff(gSavedPerAccountSettings, "LastLogoff", 0);
+ if (sl && !isSinceLogoff())
+ {
+ setDateRange(s_last_logoff(), time_max());
+ setModified();
+ }
+ if (!sl && isSinceLogoff())
+ {
+ setDateRange(time_min(), time_max());
+ setModified();
+ }
+
+ if (areDateLimitsSet())
+ {
+ mFilterOps.mFilterTypes |= FILTERTYPE_DATE;
+ }
+ else
+ {
+ mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
+ }
}
bool LLInventoryFilter::isSinceLogoff() const
{
- static LLCachedControl<U32> s_last_logoff(gSavedSettings, "LastLogoff", 0);
+ static LLCachedControl<U32> s_last_logoff(gSavedSettings, "LastLogoff", 0);
- return (mFilterOps.mMinDate == (time_t)s_last_logoff()) &&
- (mFilterOps.mMaxDate == time_max()) &&
- (mFilterOps.mFilterTypes & FILTERTYPE_DATE);
+ return (mFilterOps.mMinDate == (time_t)s_last_logoff()) &&
+ (mFilterOps.mMaxDate == time_max()) &&
+ (mFilterOps.mFilterTypes & FILTERTYPE_DATE);
}
void LLInventoryFilter::clearModified()
{
- mFilterModified = FILTER_NONE;
+ mFilterModified = FILTER_NONE;
}
void LLInventoryFilter::setHoursAgo(U32 hours)
{
- if (mFilterOps.mHoursAgo != hours)
- {
- bool are_date_limits_valid = mFilterOps.mMinDate == time_min() && mFilterOps.mMaxDate == time_max();
-
- bool is_increasing = hours > mFilterOps.mHoursAgo;
- bool is_decreasing = hours < mFilterOps.mHoursAgo;
- bool is_increasing_from_zero = is_increasing && !mFilterOps.mHoursAgo && !isSinceLogoff();
-
- // *NOTE: need to cache last filter time, in case filter goes stale
- BOOL less_restrictive;
- BOOL more_restrictive;
- if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection)
- {
- less_restrictive = ((are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo))) || !hours);
- more_restrictive = ((are_date_limits_valid && (!is_increasing && hours)) || is_increasing_from_zero);
- }
- else
- {
- less_restrictive = ((are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo))) || !hours);
- more_restrictive = ((are_date_limits_valid && (!is_decreasing && hours)) || is_increasing_from_zero);
- }
-
- mFilterOps.mHoursAgo = hours;
- mFilterOps.mMinDate = time_min();
- mFilterOps.mMaxDate = time_max();
- if (less_restrictive)
- {
- setModified(FILTER_LESS_RESTRICTIVE);
- }
- else if (more_restrictive)
- {
- setModified(FILTER_MORE_RESTRICTIVE);
- }
- else
- {
- setModified(FILTER_RESTART);
- }
- }
-
- if (areDateLimitsSet())
- {
- mFilterOps.mFilterTypes |= FILTERTYPE_DATE;
- }
- else
- {
- mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
- }
+ if (mFilterOps.mHoursAgo != hours)
+ {
+ bool are_date_limits_valid = mFilterOps.mMinDate == time_min() && mFilterOps.mMaxDate == time_max();
+
+ bool is_increasing = hours > mFilterOps.mHoursAgo;
+ bool is_decreasing = hours < mFilterOps.mHoursAgo;
+ bool is_increasing_from_zero = is_increasing && !mFilterOps.mHoursAgo && !isSinceLogoff();
+
+ // *NOTE: need to cache last filter time, in case filter goes stale
+ BOOL less_restrictive;
+ BOOL more_restrictive;
+ if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection)
+ {
+ less_restrictive = ((are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo))) || !hours);
+ more_restrictive = ((are_date_limits_valid && (!is_increasing && hours)) || is_increasing_from_zero);
+ }
+ else
+ {
+ less_restrictive = ((are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo))) || !hours);
+ more_restrictive = ((are_date_limits_valid && (!is_decreasing && hours)) || is_increasing_from_zero);
+ }
+
+ mFilterOps.mHoursAgo = hours;
+ mFilterOps.mMinDate = time_min();
+ mFilterOps.mMaxDate = time_max();
+ if (less_restrictive)
+ {
+ setModified(FILTER_LESS_RESTRICTIVE);
+ }
+ else if (more_restrictive)
+ {
+ setModified(FILTER_MORE_RESTRICTIVE);
+ }
+ else
+ {
+ setModified(FILTER_RESTART);
+ }
+ }
+
+ if (areDateLimitsSet())
+ {
+ mFilterOps.mFilterTypes |= FILTERTYPE_DATE;
+ }
+ else
+ {
+ mFilterOps.mFilterTypes &= ~FILTERTYPE_DATE;
+ }
}
void LLInventoryFilter::setDateSearchDirection(U32 direction)
{
- if (direction != mFilterOps.mDateSearchDirection)
- {
- mFilterOps.mDateSearchDirection = direction;
- setModified(FILTER_RESTART);
- }
+ if (direction != mFilterOps.mDateSearchDirection)
+ {
+ mFilterOps.mDateSearchDirection = direction;
+ setModified(FILTER_RESTART);
+ }
}
U32 LLInventoryFilter::getDateSearchDirection() const
{
- return mFilterOps.mDateSearchDirection;
+ return mFilterOps.mDateSearchDirection;
}
void LLInventoryFilter::setFilterLinks(U64 filter_links)
{
- if (mFilterOps.mFilterLinks != filter_links)
- {
- if (mFilterOps.mFilterLinks == FILTERLINK_EXCLUDE_LINKS ||
- mFilterOps.mFilterLinks == FILTERLINK_ONLY_LINKS)
- setModified(FILTER_MORE_RESTRICTIVE);
- else
- setModified(FILTER_LESS_RESTRICTIVE);
- }
- mFilterOps.mFilterLinks = filter_links;
+ if (mFilterOps.mFilterLinks != filter_links)
+ {
+ if (mFilterOps.mFilterLinks == FILTERLINK_EXCLUDE_LINKS ||
+ mFilterOps.mFilterLinks == FILTERLINK_ONLY_LINKS)
+ setModified(FILTER_MORE_RESTRICTIVE);
+ else
+ setModified(FILTER_LESS_RESTRICTIVE);
+ }
+ mFilterOps.mFilterLinks = filter_links;
}
void LLInventoryFilter::setShowFolderState(EFolderShow state)
{
- if (mFilterOps.mShowFolderState != state)
- {
- mFilterOps.mShowFolderState = state;
- if (state == SHOW_NON_EMPTY_FOLDERS)
- {
- // showing fewer folders than before
- setModified(FILTER_MORE_RESTRICTIVE);
- }
- else if (state == SHOW_ALL_FOLDERS)
- {
- // showing same folders as before and then some
- setModified(FILTER_LESS_RESTRICTIVE);
- }
- else
- {
- setModified();
- }
- }
+ if (mFilterOps.mShowFolderState != state)
+ {
+ mFilterOps.mShowFolderState = state;
+ if (state == SHOW_NON_EMPTY_FOLDERS)
+ {
+ // showing fewer folders than before
+ setModified(FILTER_MORE_RESTRICTIVE);
+ }
+ else if (state == SHOW_ALL_FOLDERS)
+ {
+ // showing same folders as before and then some
+ setModified(FILTER_LESS_RESTRICTIVE);
+ }
+ else
+ {
+ setModified();
+ }
+ }
}
void LLInventoryFilter::setFindAllLinksMode(const std::string &search_name, const LLUUID& search_id)
{
- // Save a copy of settings so that we will be able to restore it later
- // but make sure we are not searching for links already
- if(mFilterOps.mFilterLinks != FILTERLINK_ONLY_LINKS)
- {
- mBackupFilterOps = mFilterOps;
- }
-
- // set search options
- setFilterSubString(search_name);
- setFilterUUID(search_id);
- setShowFolderState(SHOW_NON_EMPTY_FOLDERS);
- setFilterLinks(FILTERLINK_ONLY_LINKS);
+ // Save a copy of settings so that we will be able to restore it later
+ // but make sure we are not searching for links already
+ if(mFilterOps.mFilterLinks != FILTERLINK_ONLY_LINKS)
+ {
+ mBackupFilterOps = mFilterOps;
+ }
+
+ // set search options
+ setFilterSubString(search_name);
+ setFilterUUID(search_id);
+ setShowFolderState(SHOW_NON_EMPTY_FOLDERS);
+ setFilterLinks(FILTERLINK_ONLY_LINKS);
}
void LLInventoryFilter::markDefault()
{
- mDefaultFilterOps = mFilterOps;
+ mDefaultFilterOps = mFilterOps;
}
void LLInventoryFilter::resetDefault()
{
- mFilterOps = mDefaultFilterOps;
- setModified();
+ mFilterOps = mDefaultFilterOps;
+ setModified();
}
void LLInventoryFilter::setModified(EFilterModified behavior)
{
- mFilterText.clear();
- mCurrentGeneration++;
-
- if (mFilterModified == FILTER_NONE)
- {
- mFilterModified = behavior;
- }
- else if (mFilterModified != behavior)
- {
- // trying to do both less restrictive and more restrictive filter
- // basically means restart from scratch
- mFilterModified = FILTER_RESTART;
- }
-
- // if not keeping current filter results, update last valid as well
- switch(mFilterModified)
- {
- case FILTER_RESTART:
- mFirstRequiredGeneration = mCurrentGeneration;
- mFirstSuccessGeneration = mCurrentGeneration;
- break;
- case FILTER_LESS_RESTRICTIVE:
- mFirstRequiredGeneration = mCurrentGeneration;
- break;
- case FILTER_MORE_RESTRICTIVE:
- mFirstSuccessGeneration = mCurrentGeneration;
- break;
- default:
- LL_ERRS() << "Bad filter behavior specified" << LL_ENDL;
- }
+ mFilterText.clear();
+ mCurrentGeneration++;
+
+ if (mFilterModified == FILTER_NONE)
+ {
+ mFilterModified = behavior;
+ }
+ else if (mFilterModified != behavior)
+ {
+ // trying to do both less restrictive and more restrictive filter
+ // basically means restart from scratch
+ mFilterModified = FILTER_RESTART;
+ }
+
+ // if not keeping current filter results, update last valid as well
+ switch(mFilterModified)
+ {
+ case FILTER_RESTART:
+ mFirstRequiredGeneration = mCurrentGeneration;
+ mFirstSuccessGeneration = mCurrentGeneration;
+ break;
+ case FILTER_LESS_RESTRICTIVE:
+ mFirstRequiredGeneration = mCurrentGeneration;
+ break;
+ case FILTER_MORE_RESTRICTIVE:
+ mFirstSuccessGeneration = mCurrentGeneration;
+ break;
+ default:
+ LL_ERRS() << "Bad filter behavior specified" << LL_ENDL;
+ }
}
bool LLInventoryFilter::isFilterObjectTypesWith(LLInventoryType::EType t) const
{
- return mFilterOps.mFilterObjectTypes & (1LL << t);
+ return mFilterOps.mFilterObjectTypes & (1LL << t);
}
const std::string& LLInventoryFilter::getFilterText()
{
- if (!mFilterText.empty())
- {
- return mFilterText;
- }
-
- std::string filtered_types;
- std::string not_filtered_types;
- BOOL filtered_by_type = FALSE;
- BOOL filtered_by_all_types = TRUE;
- S32 num_filter_types = 0;
-
- mFilterText.clear();
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_ANIMATION))
- {
- filtered_types += LLTrans::getString("Animations");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Animations");
-
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_CALLINGCARD))
- {
- filtered_types += LLTrans::getString("Calling Cards");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Calling Cards");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_WEARABLE))
- {
- filtered_types += LLTrans::getString("Clothing");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Clothing");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_GESTURE))
- {
- filtered_types += LLTrans::getString("Gestures");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Gestures");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_LANDMARK))
- {
- filtered_types += LLTrans::getString("Landmarks");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Landmarks");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_MATERIAL))
- {
- filtered_types += LLTrans::getString("Materials");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Materials");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_NOTECARD))
- {
- filtered_types += LLTrans::getString("Notecards");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Notecards");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_OBJECT) && isFilterObjectTypesWith(LLInventoryType::IT_ATTACHMENT))
- {
- filtered_types += LLTrans::getString("Objects");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Objects");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_LSL))
- {
- filtered_types += LLTrans::getString("Scripts");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Scripts");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_SOUND))
- {
- filtered_types += LLTrans::getString("Sounds");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Sounds");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_TEXTURE))
- {
- filtered_types += LLTrans::getString("Textures");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Textures");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_SNAPSHOT))
- {
- filtered_types += LLTrans::getString("Snapshots");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Snapshots");
- filtered_by_all_types = FALSE;
- }
-
- if (isFilterObjectTypesWith(LLInventoryType::IT_SETTINGS))
- {
- filtered_types += LLTrans::getString("Settings");
- filtered_by_type = TRUE;
- num_filter_types++;
- }
- else
- {
- not_filtered_types += LLTrans::getString("Settings");
- filtered_by_all_types = FALSE;
- }
-
- if (!LLInventoryModelBackgroundFetch::instance().folderFetchActive()
- && filtered_by_type
- && !filtered_by_all_types)
- {
- mFilterText += " - ";
- if (num_filter_types < 5)
- {
- mFilterText += filtered_types;
- }
- else
- {
- mFilterText += LLTrans::getString("No Filters");
- mFilterText += not_filtered_types;
- }
- // remove the ',' at the end
- mFilterText.erase(mFilterText.size() - 1, 1);
- }
-
- if (isSinceLogoff())
- {
- mFilterText += LLTrans::getString("Since Logoff");
- }
- return mFilterText;
+ if (!mFilterText.empty())
+ {
+ return mFilterText;
+ }
+
+ std::string filtered_types;
+ std::string not_filtered_types;
+ BOOL filtered_by_type = FALSE;
+ BOOL filtered_by_all_types = TRUE;
+ S32 num_filter_types = 0;
+
+ mFilterText.clear();
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_ANIMATION))
+ {
+ filtered_types += LLTrans::getString("Animations");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Animations");
+
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_CALLINGCARD))
+ {
+ filtered_types += LLTrans::getString("Calling Cards");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Calling Cards");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_WEARABLE))
+ {
+ filtered_types += LLTrans::getString("Clothing");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Clothing");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_GESTURE))
+ {
+ filtered_types += LLTrans::getString("Gestures");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Gestures");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_LANDMARK))
+ {
+ filtered_types += LLTrans::getString("Landmarks");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Landmarks");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_MATERIAL))
+ {
+ filtered_types += LLTrans::getString("Materials");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Materials");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_NOTECARD))
+ {
+ filtered_types += LLTrans::getString("Notecards");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Notecards");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_OBJECT) && isFilterObjectTypesWith(LLInventoryType::IT_ATTACHMENT))
+ {
+ filtered_types += LLTrans::getString("Objects");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Objects");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_LSL))
+ {
+ filtered_types += LLTrans::getString("Scripts");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Scripts");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_SOUND))
+ {
+ filtered_types += LLTrans::getString("Sounds");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Sounds");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_TEXTURE))
+ {
+ filtered_types += LLTrans::getString("Textures");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Textures");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_SNAPSHOT))
+ {
+ filtered_types += LLTrans::getString("Snapshots");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Snapshots");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (isFilterObjectTypesWith(LLInventoryType::IT_SETTINGS))
+ {
+ filtered_types += LLTrans::getString("Settings");
+ filtered_by_type = TRUE;
+ num_filter_types++;
+ }
+ else
+ {
+ not_filtered_types += LLTrans::getString("Settings");
+ filtered_by_all_types = FALSE;
+ }
+
+ if (!LLInventoryModelBackgroundFetch::instance().folderFetchActive()
+ && filtered_by_type
+ && !filtered_by_all_types)
+ {
+ mFilterText += " - ";
+ if (num_filter_types < 5)
+ {
+ mFilterText += filtered_types;
+ }
+ else
+ {
+ mFilterText += LLTrans::getString("No Filters");
+ mFilterText += not_filtered_types;
+ }
+ // remove the ',' at the end
+ mFilterText.erase(mFilterText.size() - 1, 1);
+ }
+
+ if (isSinceLogoff())
+ {
+ mFilterText += LLTrans::getString("Since Logoff");
+ }
+ return mFilterText;
}
LLInventoryFilter& LLInventoryFilter::operator=( const LLInventoryFilter& other )
{
- setFilterObjectTypes(other.getFilterObjectTypes());
- setDateRange(other.getMinDate(), other.getMaxDate());
- setHoursAgo(other.getHoursAgo());
- setDateSearchDirection(other.getDateSearchDirection());
- setShowFolderState(other.getShowFolderState());
- setFilterPermissions(other.getFilterPermissions());
- setFilterSubString(other.getFilterSubString());
- setDateRangeLastLogoff(other.isSinceLogoff());
- return *this;
+ setFilterObjectTypes(other.getFilterObjectTypes());
+ setDateRange(other.getMinDate(), other.getMaxDate());
+ setHoursAgo(other.getHoursAgo());
+ setDateSearchDirection(other.getDateSearchDirection());
+ setShowFolderState(other.getShowFolderState());
+ setFilterPermissions(other.getFilterPermissions());
+ setFilterSubString(other.getFilterSubString());
+ setDateRangeLastLogoff(other.isSinceLogoff());
+ return *this;
}
void LLInventoryFilter::toParams(Params& params) const
{
- params.filter_ops.types = getFilterObjectTypes();
- params.filter_ops.category_types = getFilterCategoryTypes();
- if (getFilterObjectTypes() & FILTERTYPE_WEARABLE)
- {
- params.filter_ops.wearable_types = getFilterWearableTypes();
- }
- params.filter_ops.date_range.min_date = getMinDate();
- params.filter_ops.date_range.max_date = getMaxDate();
- params.filter_ops.hours_ago = getHoursAgo();
- params.filter_ops.date_search_direction = getDateSearchDirection();
- params.filter_ops.show_folder_state = getShowFolderState();
- params.filter_ops.creator_type = getFilterCreatorType();
- params.filter_ops.permissions = getFilterPermissions();
- params.filter_ops.search_visibility = getSearchVisibilityTypes();
- params.substring = getFilterSubString();
- params.since_logoff = isSinceLogoff();
+ params.filter_ops.types = getFilterObjectTypes();
+ params.filter_ops.category_types = getFilterCategoryTypes();
+ if (getFilterObjectTypes() & FILTERTYPE_WEARABLE)
+ {
+ params.filter_ops.wearable_types = getFilterWearableTypes();
+ }
+ params.filter_ops.date_range.min_date = getMinDate();
+ params.filter_ops.date_range.max_date = getMaxDate();
+ params.filter_ops.hours_ago = getHoursAgo();
+ params.filter_ops.date_search_direction = getDateSearchDirection();
+ params.filter_ops.show_folder_state = getShowFolderState();
+ params.filter_ops.creator_type = getFilterCreatorType();
+ params.filter_ops.permissions = getFilterPermissions();
+ params.filter_ops.search_visibility = getSearchVisibilityTypes();
+ params.substring = getFilterSubString();
+ params.since_logoff = isSinceLogoff();
}
void LLInventoryFilter::fromParams(const Params& params)
{
- if (!params.validateBlock())
- {
- return;
- }
-
- setFilterObjectTypes(params.filter_ops.types);
- setFilterCategoryTypes(params.filter_ops.category_types);
- if (params.filter_ops.wearable_types.isProvided())
- {
- setFilterWearableTypes(params.filter_ops.wearable_types);
- }
- setDateRange(params.filter_ops.date_range.min_date, params.filter_ops.date_range.max_date);
- setHoursAgo(params.filter_ops.hours_ago);
- setDateSearchDirection(params.filter_ops.date_search_direction);
- setShowFolderState(params.filter_ops.show_folder_state);
- setFilterCreator(params.filter_ops.creator_type);
- setFilterPermissions(params.filter_ops.permissions);
- setSearchVisibilityTypes(params.filter_ops.search_visibility);
- setFilterSubString(params.substring);
- setDateRangeLastLogoff(params.since_logoff);
+ if (!params.validateBlock())
+ {
+ return;
+ }
+
+ setFilterObjectTypes(params.filter_ops.types);
+ setFilterCategoryTypes(params.filter_ops.category_types);
+ if (params.filter_ops.wearable_types.isProvided())
+ {
+ setFilterWearableTypes(params.filter_ops.wearable_types);
+ }
+ setDateRange(params.filter_ops.date_range.min_date, params.filter_ops.date_range.max_date);
+ setHoursAgo(params.filter_ops.hours_ago);
+ setDateSearchDirection(params.filter_ops.date_search_direction);
+ setShowFolderState(params.filter_ops.show_folder_state);
+ setFilterCreator(params.filter_ops.creator_type);
+ setFilterPermissions(params.filter_ops.permissions);
+ setSearchVisibilityTypes(params.filter_ops.search_visibility);
+ setFilterSubString(params.substring);
+ setDateRangeLastLogoff(params.since_logoff);
}
U64 LLInventoryFilter::getFilterTypes() const
{
- return mFilterOps.mFilterTypes;
+ return mFilterOps.mFilterTypes;
}
U64 LLInventoryFilter::getFilterObjectTypes() const
{
- return mFilterOps.mFilterObjectTypes;
+ return mFilterOps.mFilterObjectTypes;
}
U64 LLInventoryFilter::getFilterCategoryTypes() const
{
- return mFilterOps.mFilterCategoryTypes;
+ return mFilterOps.mFilterCategoryTypes;
}
U64 LLInventoryFilter::getFilterWearableTypes() const
{
- return mFilterOps.mFilterWearableTypes;
+ return mFilterOps.mFilterWearableTypes;
}
U64 LLInventoryFilter::getFilterSettingsTypes() const
@@ -1588,7 +1588,7 @@ U64 LLInventoryFilter::getFilterSettingsTypes() const
U64 LLInventoryFilter::getSearchVisibilityTypes() const
{
- return mFilterOps.mSearchVisibility;
+ return mFilterOps.mSearchVisibility;
}
U64 LLInventoryFilter::getFilterThumbnails() const
@@ -1598,124 +1598,124 @@ U64 LLInventoryFilter::getFilterThumbnails() const
bool LLInventoryFilter::hasFilterString() const
{
- return mFilterSubString.size() > 0;
+ return mFilterSubString.size() > 0;
}
std::string::size_type LLInventoryFilter::getFilterStringSize() const
{
- return mFilterSubString.size();
+ return mFilterSubString.size();
}
PermissionMask LLInventoryFilter::getFilterPermissions() const
{
- return mFilterOps.mPermissions;
+ return mFilterOps.mPermissions;
}
time_t LLInventoryFilter::getMinDate() const
{
- return mFilterOps.mMinDate;
+ return mFilterOps.mMinDate;
}
-time_t LLInventoryFilter::getMaxDate() const
-{
- return mFilterOps.mMaxDate;
+time_t LLInventoryFilter::getMaxDate() const
+{
+ return mFilterOps.mMaxDate;
}
-U32 LLInventoryFilter::getHoursAgo() const
-{
- return mFilterOps.mHoursAgo;
+U32 LLInventoryFilter::getHoursAgo() const
+{
+ return mFilterOps.mHoursAgo;
}
U64 LLInventoryFilter::getFilterLinks() const
{
- return mFilterOps.mFilterLinks;
+ return mFilterOps.mFilterLinks;
}
LLInventoryFilter::EFolderShow LLInventoryFilter::getShowFolderState() const
-{
- return mFilterOps.mShowFolderState;
+{
+ return mFilterOps.mShowFolderState;
}
LLInventoryFilter::EFilterCreatorType LLInventoryFilter::getFilterCreatorType() const
{
- return mFilterOps.mFilterCreatorType;
+ return mFilterOps.mFilterCreatorType;
}
bool LLInventoryFilter::isTimedOut()
{
- return mFilterTime.hasExpired();
+ return mFilterTime.hasExpired();
}
void LLInventoryFilter::resetTime(S32 timeout)
{
- mFilterTime.reset();
+ mFilterTime.reset();
F32 time_in_sec = (F32)(timeout)/1000.0;
- mFilterTime.setTimerExpirySec(time_in_sec);
+ mFilterTime.setTimerExpirySec(time_in_sec);
}
S32 LLInventoryFilter::getCurrentGeneration() const
-{
- return mCurrentGeneration;
+{
+ return mCurrentGeneration;
}
S32 LLInventoryFilter::getFirstSuccessGeneration() const
-{
- return mFirstSuccessGeneration;
+{
+ return mFirstSuccessGeneration;
}
S32 LLInventoryFilter::getFirstRequiredGeneration() const
-{
- return mFirstRequiredGeneration;
+{
+ return mFirstRequiredGeneration;
}
void LLInventoryFilter::setEmptyLookupMessage(const std::string& message)
{
- mEmptyLookupMessage = message;
+ mEmptyLookupMessage = message;
}
void LLInventoryFilter::setDefaultEmptyLookupMessage(const std::string& message)
{
- mDefaultEmptyLookupMessage = message;
+ mDefaultEmptyLookupMessage = message;
}
std::string LLInventoryFilter::getEmptyLookupMessage(bool is_empty_folder) const
{
- if ((isDefault() || is_empty_folder) && !mDefaultEmptyLookupMessage.empty())
- {
- return LLTrans::getString(mDefaultEmptyLookupMessage);
- }
- else
- {
- LLStringUtil::format_map_t args;
- args["[SEARCH_TERM]"] = LLURI::escape(getFilterSubStringOrig());
+ if ((isDefault() || is_empty_folder) && !mDefaultEmptyLookupMessage.empty())
+ {
+ return LLTrans::getString(mDefaultEmptyLookupMessage);
+ }
+ else
+ {
+ LLStringUtil::format_map_t args;
+ args["[SEARCH_TERM]"] = LLURI::escape(getFilterSubStringOrig());
- return LLTrans::getString(mEmptyLookupMessage, args);
- }
+ return LLTrans::getString(mEmptyLookupMessage, args);
+ }
}
bool LLInventoryFilter::areDateLimitsSet()
{
- return mFilterOps.mMinDate != time_min()
- || mFilterOps.mMaxDate != time_max()
- || mFilterOps.mHoursAgo != 0;
+ return mFilterOps.mMinDate != time_min()
+ || mFilterOps.mMaxDate != time_max()
+ || mFilterOps.mHoursAgo != 0;
}
bool LLInventoryFilter::showAllResults() const
{
- return hasFilterString() && !mSingleFolderMode;
+ return hasFilterString() && !mSingleFolderMode;
}
bool LLInventoryFilter::FilterOps::DateRange::validateBlock( bool emit_errors /*= true*/ ) const
{
- bool valid = LLInitParam::Block<DateRange>::validateBlock(emit_errors);
- if (valid)
- {
- if (max_date() < min_date())
- {
- if (emit_errors)
- {
- LL_WARNS() << "max_date should be greater or equal to min_date" << LL_ENDL;
- }
- valid = false;
- }
- }
- return valid;
+ bool valid = LLInitParam::Block<DateRange>::validateBlock(emit_errors);
+ if (valid)
+ {
+ if (max_date() < min_date())
+ {
+ if (emit_errors)
+ {
+ LL_WARNS() << "max_date should be greater or equal to min_date" << LL_ENDL;
+ }
+ valid = false;
+ }
+ }
+ return valid;
}