diff options
| author | AndreyL ProductEngine <andreylproductengine@lindenlab.com> | 2015-08-04 05:00:59 +0300 | 
|---|---|---|
| committer | AndreyL ProductEngine <andreylproductengine@lindenlab.com> | 2015-08-04 05:00:59 +0300 | 
| commit | b5378f93b298098cf841286ba6eb970ee5d855eb (patch) | |
| tree | c2f395318d33ae90c12d88d4258796b7ce6db62d /indra/newview/llinventoryfilter.cpp | |
| parent | 8f5676202821b9b8addb19fe8b93bac56057c6af (diff) | |
| parent | 310ec101dfd2c69ecc1a51d0a3a8ea12d5fdaf7a (diff) | |
Merge viewer-release and become version 3.8.3
Diffstat (limited to 'indra/newview/llinventoryfilter.cpp')
| -rwxr-xr-x | indra/newview/llinventoryfilter.cpp | 90 | 
1 files changed, 89 insertions, 1 deletions
| diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index c054747308..003bbcafed 100755 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -33,6 +33,8 @@  #include "llfolderviewitem.h"  #include "llinventorymodel.h"  #include "llinventorymodelbackgroundfetch.h" +#include "llinventoryfunctions.h" +#include "llmarketplacefunctions.h"  #include "llviewercontrol.h"  #include "llfolderview.h"  #include "llinventorybridge.h" @@ -137,12 +139,64 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const  	}  	// when applying a filter, matching folders get their contents downloaded first -	if (mFilterSubString.size() +	if (isNotDefault()  		&& !gInventory.isCategoryComplete(folder_id))  	{  		LLInventoryModelBackgroundFetch::instance().start(folder_id);  	} +	// 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 | +                                   FILTERTYPE_NO_MARKETPLACE_ITEMS; +    if (filterTypes & marketplace_filter) +    { +        S32 depth = depth_nesting_in_marketplace(folder_id); + +        if (filterTypes & FILTERTYPE_NO_MARKETPLACE_ITEMS) +        { +            if (depth >= 0) +            { +                return false; +            } +        } + +        if (filterTypes & FILTERTYPE_MARKETPLACE_LISTING_FOLDER) +        { +            if (depth > 1) +            { +                return false; +            } +        } +         +        if (depth > 0) +        { +            LLUUID listing_uuid = nested_parent_id(folder_id, depth); +            if (filterTypes & FILTERTYPE_MARKETPLACE_ACTIVE) +            { +                if (!LLMarketplaceData::instance().getActivationState(listing_uuid)) +                { +                    return false; +                } +            } +            else if (filterTypes & FILTERTYPE_MARKETPLACE_INACTIVE) +            { +                if (!LLMarketplaceData::instance().isListed(listing_uuid) || LLMarketplaceData::instance().getActivationState(listing_uuid)) +                { +                    return false; +                } +            } +            else if (filterTypes & FILTERTYPE_MARKETPLACE_UNASSOCIATED) +            { +                if (LLMarketplaceData::instance().isListed(listing_uuid)) +                { +                    return false; +                } +            } +        } +    } +      	// show folder links  	LLViewerInventoryItem* item = gInventory.getItem(folder_id);  	if (item && item->getActualType() == LLAssetType::AT_LINK_FOLDER) @@ -502,6 +556,40 @@ void LLInventoryFilter::setFilterEmptySystemFolders()  	mFilterOps.mFilterTypes |= FILTERTYPE_EMPTYFOLDERS;  } +void LLInventoryFilter::setFilterMarketplaceActiveFolders() +{ +	mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_ACTIVE; +} + +void LLInventoryFilter::setFilterMarketplaceInactiveFolders() +{ +	mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_INACTIVE; +} + +void LLInventoryFilter::setFilterMarketplaceUnassociatedFolders() +{ +	mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_UNASSOCIATED; +} + +void LLInventoryFilter::setFilterMarketplaceListingFolders(bool select_only_listing_folders) +{ +    if (select_only_listing_folders) +    { +        mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_LISTING_FOLDER; +        setModified(FILTER_MORE_RESTRICTIVE); +    } +    else +    { +        mFilterOps.mFilterTypes &= ~FILTERTYPE_MARKETPLACE_LISTING_FOLDER; +        setModified(FILTER_LESS_RESTRICTIVE); +    } +} + +void LLInventoryFilter::setFilterNoMarketplaceFolder() +{ +    mFilterOps.mFilterTypes |= FILTERTYPE_NO_MARKETPLACE_ITEMS; +} +  void LLInventoryFilter::setFilterUUID(const LLUUID& object_id)  {  	if (mFilterOps.mFilterUUID == LLUUID::null) | 
