diff options
| author | Mnikolenko Productengine <mnikolenko@productengine.com> | 2020-09-24 19:06:58 +0300 | 
|---|---|---|
| committer | Mnikolenko Productengine <mnikolenko@productengine.com> | 2020-09-24 19:06:58 +0300 | 
| commit | 3c381458525c234137ea4a51916d16291fdfd237 (patch) | |
| tree | 3d135a12a575d6758d081a436a7e5301406f29f5 | |
| parent | 7ae4f766f03fa9046c30ee868697e7ec637b6ad0 (diff) | |
SL-14001 New Inventory search visibility options should persist from login to login
| -rw-r--r-- | indra/newview/llinventoryfilter.cpp | 42 | ||||
| -rw-r--r-- | indra/newview/llinventoryfilter.h | 11 | ||||
| -rw-r--r-- | indra/newview/llpanelmaininventory.cpp | 14 | 
3 files changed, 63 insertions, 4 deletions
| diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 1b99c90d5c..2e0037aa57 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -64,7 +64,7 @@ LLInventoryFilter::FilterOps::FilterOps(const Params& p)  	mFilterTypes(p.types),  	mFilterUUID(p.uuid),  	mFilterLinks(p.links), -	mSearchVisibility(0xffffFFFFffffFFFFULL) +	mSearchVisibility(p.search_visibility)  {  } @@ -907,6 +907,44 @@ void LLInventoryFilter::setFilterSubString(const std::string& string)  	}  } +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); +		} +	} +} + +void LLInventoryFilter::setSearchVisibilityTypes(const Params& params) +{ +	if (!params.validateBlock()) +	{ +		return; +	} + +	if (params.filter_ops.search_visibility.isProvided()) +	{ +		setSearchVisibilityTypes(params.filter_ops.search_visibility); +	} +} +  void LLInventoryFilter::setFilterPermissions(PermissionMask perms)  {  	if (mFilterOps.mPermissions != perms) @@ -1375,6 +1413,7 @@ void LLInventoryFilter::toParams(Params& params) const  	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();  } @@ -1398,6 +1437,7 @@ void LLInventoryFilter::fromParams(const Params& params)  	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);  } diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h index caba8315c4..0580261c43 100644 --- a/indra/newview/llinventoryfilter.h +++ b/indra/newview/llinventoryfilter.h @@ -124,11 +124,13 @@ public:  		struct Params : public LLInitParam::Block<Params>  		{ -			Optional<U32>				types; +			Optional<U32>				types, +										search_visibility;  			Optional<U64>				object_types,  										wearable_types,                                          settings_types,  										category_types; +										  			Optional<EFilterLink>		links;  			Optional<LLUUID>			uuid;  			Optional<DateRange>			date_range; @@ -145,6 +147,7 @@ public:                  settings_types("settings_types", 0xffffFFFFffffFFFFULL),  				category_types("category_types", 0xffffFFFFffffFFFFULL),  				links("links", FILTERLINK_INCLUDE_LINKS), +				search_visibility("search_visibility", 0xFFFFFFFF),  				uuid("uuid"),  				date_range("date_range"),  				hours_ago("hours_ago", 0), @@ -157,12 +160,12 @@ public:  		FilterOps(const Params& = Params()); -		U32 			mFilterTypes; +		U32 			mFilterTypes, +						mSearchVisibility;  		U64				mFilterObjectTypes,   // For _OBJECT  						mFilterWearableTypes,                          mFilterSettingsTypes, // for _SETTINGS  						mFilterLinks, -						mSearchVisibility,  						mFilterCategoryTypes; // For _CATEGORY  		LLUUID      	mFilterUUID; 		  // for UUID @@ -226,6 +229,8 @@ public:  	void				toggleSearchVisibilityLinks();  	void				toggleSearchVisibilityTrash();  	void				toggleSearchVisibilityLibrary(); +	void 				setSearchVisibilityTypes(U32 types); +	void 				setSearchVisibilityTypes(const Params& params);  	void 				setFilterSubString(const std::string& string);  	const std::string& 	getFilterSubString(BOOL trim = FALSE) const; diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 7d04c1dc67..4691ee3849 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -229,6 +229,17 @@ BOOL LLPanelMainInventory::postBuild()  				recent_items_panel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::RECENTITEMS_SORT_ORDER));  			}  		} +		if(mActivePanel) +		{ +			if(savedFilterState.has(mActivePanel->getFilter().getName())) +			{ +				LLSD items = savedFilterState.get(mActivePanel->getFilter().getName()); +				LLInventoryFilter::Params p; +				LLParamSDParser parser; +				parser.readSD(items, p); +				mActivePanel->getFilter().setSearchVisibilityTypes(p); +			} +		}  	} @@ -265,6 +276,9 @@ BOOL LLPanelMainInventory::postBuild()  LLPanelMainInventory::~LLPanelMainInventory( void )  {  	// Save the filters state. +	// Some params types cannot be saved this way +	// for example, LLParamSDParser doesn't know about U64, +	// so some FilterOps params should be revised.  	LLSD filterRoot;  	LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");  	if (all_items_panel) | 
