From d91fa91d6a7b6f24696dedba146a2597f093a7fd Mon Sep 17 00:00:00 2001 From: Zi Ree Date: Fri, 20 Jun 2025 17:10:13 +0200 Subject: [PATCH] Add functionality to save area search flags and options as defaults when the floater is opened. --- indra/newview/app_settings/settings.xml | 266 ++++++++++++++++++ indra/newview/fsareasearch.cpp | 76 ++++- indra/newview/fsareasearch.h | 1 + .../default/xui/en/floater_fs_area_search.xml | 8 + 4 files changed, 340 insertions(+), 11 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index c3243b7dae..7aafed1f42 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -26379,5 +26379,271 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 + + FSAreaSearch_ExcludeAttachments + + Comment + Area Search Filter: Exclude attachments + Persist + 1 + Type + Boolean + Value + 1 + + FSAreaSearch_ExcludeChildPrims + + Comment + Area Search Filter: Exclude child prims + Persist + 1 + Type + Boolean + Value + 1 + + FSAreaSearch_ExcludeNeighborRegions + + Comment + Area Search Filter: Exclude neighbor regions + Persist + 1 + Type + Boolean + Value + 1 + + FSAreaSearch_ExcludePhysical + + Comment + Area Search Filter: Exclude physical objects + Persist + 1 + Type + Boolean + Value + 1 + + FSAreaSearch_ExcludeReflectionProbes + + Comment + Area Search Filter: Exclude reflection probes + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_ExcludeTemporary + + Comment + Area Search Filter: Exclude temporary objects + Persist + 1 + Type + Boolean + Value + 1 + + FSAreaSearch_FilterDistance + + Comment + Area Search Filter: Filter by distance + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_FilterForSale + + Comment + Area Search Filter: Only show objects that are for sale + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_MaximumDistance + + Comment + Area Search Filter: Maximum distance + Persist + 1 + Type + S32 + Value + 999999 + + FSAreaSearch_MaximumPrice + + Comment + Area Search Filter: Maximum price + Persist + 1 + Type + S32 + Value + 999999 + + FSAreaSearch_MinimumDistance + + Comment + Area Search Filter: Minimum distance + Persist + 1 + Type + S32 + Value + 0 + + FSAreaSearch_MinimumPrice + + Comment + Area Search Filter: Minimum price + Persist + 1 + Type + S32 + Value + 0 + + FSAreaSearch_OnlyAttachments + + Comment + Area Search Filter: Find only attachments + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyCopiable + + Comment + Area Search Filter: Find only copiable objects + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyCurrentParcel + + Comment + Area Search Filter: Find only objects in the current parcel + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyForSale + + Comment + Area Search Filter: Find only objects that are for sale + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyLocked + + Comment + Area Search Filter: Find only locked objects + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyMOAP + + Comment + Area Search Filter: Find only objects that have shared media applied + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyModifiable + + Comment + Area Search Filter: Find only modifiable objects + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyPhantom + + Comment + Area Search Filter: Find only phantom objects + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyPhysical + + Comment + Area Search Filter: Find only physical objects + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyReflectionProbes + + Comment + Area Search Filter: Find only reflection probes + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyTemporary + + Comment + Area Search Filter: Find only temporary objects + Persist + 1 + Type + Boolean + Value + 0 + + FSAreaSearch_OnlyTransferable + + Comment + Area Search Filter: Find only transferable objects + Persist + 1 + Type + Boolean + Value + 0 + + diff --git a/indra/newview/fsareasearch.cpp b/indra/newview/fsareasearch.cpp index ef4efc84fc..41d18a00f5 100644 --- a/indra/newview/fsareasearch.cpp +++ b/indra/newview/fsareasearch.cpp @@ -2188,89 +2188,109 @@ FSPanelAreaSearchFilter::FSPanelAreaSearchFilter(FSAreaSearch* pointer) bool FSPanelAreaSearchFilter::postBuild() { mCheckboxLocked = getChild("filter_locked"); + mCheckboxLocked->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyLocked")); mCheckboxLocked->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxPhysical = getChild("filter_physical"); - mCheckboxPhysical->setEnabled(false); + mCheckboxPhysical->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyPhysical")); mCheckboxPhysical->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxTemporary = getChild("filter_temporary"); - mCheckboxTemporary->setEnabled(false); + mCheckboxTemporary->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyTemporary")); mCheckboxTemporary->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxPhantom = getChild("filter_phantom"); + mCheckboxPhantom->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyPhantom")); mCheckboxPhantom->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxForSale = getChild("filter_for_sale"); + mCheckboxForSale->set(gSavedSettings.getBOOL("FSAreaSearch_FilterForSale")); mCheckboxForSale->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxAttachment = getChild("filter_attachment"); - mCheckboxAttachment->setEnabled(false); + mCheckboxAttachment->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyAttachments")); mCheckboxAttachment->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mSpinForSaleMinValue= getChild("min_price"); + mSpinForSaleMinValue->set(gSavedSettings.getS32("FSAreaSearch_MinimumPrice")); mSpinForSaleMinValue->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitSpin, this)); mSpinForSaleMaxValue= getChild("max_price"); + mSpinForSaleMaxValue->set(gSavedSettings.getS32("FSAreaSearch_MaximumPrice")); mSpinForSaleMaxValue->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitSpin, this)); mComboClickAction = getChild("click_action"); + mComboClickAction->setValue(gSavedSettings.getS32("FSAreaSearch_ClickAction")); mComboClickAction->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCombo, this)); mCheckboxExcludeAttachment = getChild("exclude_attachment"); - mCheckboxExcludeAttachment->set(true); + mCheckboxExcludeAttachment->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludeAttachments")); mCheckboxExcludeAttachment->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxExcludePhysics = getChild("exclude_physical"); - mCheckboxExcludePhysics->set(true); + mCheckboxExcludePhysics->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludePhysical")); mCheckboxExcludePhysics->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxExcludetemporary = getChild("exclude_temporary"); - mCheckboxExcludetemporary->set(true); + mCheckboxExcludetemporary->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludeTemporary")); mCheckboxExcludetemporary->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxExcludeReflectionProbes = getChild("exclude_reflection_probes"); - mCheckboxExcludeReflectionProbes->set(false); + mCheckboxExcludeReflectionProbes->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludeReflectionProbes")); mCheckboxExcludeReflectionProbes->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxExcludeChildPrim = getChild("exclude_childprim"); - mCheckboxExcludeChildPrim->set(true); + mCheckboxExcludeChildPrim->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludeChildPrims")); mCheckboxExcludeChildPrim->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxExcludeNeighborRegions = getChild("exclude_neighbor_region"); - mCheckboxExcludeNeighborRegions->set(true); + mCheckboxExcludeNeighborRegions->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludeNeighborRegions")); mCheckboxExcludeNeighborRegions->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mButtonApply = getChild("apply"); mButtonApply->setClickedCallback(boost::bind(&FSAreaSearch::onButtonClickedSearch, mFSAreaSearch)); + mButtonApply = getChild("save_as_default"); + mButtonApply->setClickedCallback(boost::bind(&FSPanelAreaSearchFilter::onButtonClickedSaveAsDefault, this)); + mCheckboxDistance = getChild("filter_distance"); + mCheckboxExcludeAttachment->set(gSavedSettings.getBOOL("FSAreaSearch_FilterDistance")); mCheckboxDistance->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mSpinDistanceMinValue = getChild("min_distance"); + mCheckboxDistance->set(gSavedSettings.getS32("FSAreaSearch_MinimumDistance")); mSpinDistanceMinValue->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitSpin, this)); mSpinDistanceMaxValue= getChild("max_distance"); + mSpinDistanceMaxValue->set(gSavedSettings.getS32("FSAreaSearch_MaximumDistance")); mSpinDistanceMaxValue->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitSpin, this)); mCheckboxMoaP = getChild("filter_moap"); + mCheckboxMoaP->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyMOAP")); mCheckboxMoaP->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxReflectionProbe = getChild("filter_reflection_probe"); + mCheckboxReflectionProbe->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyReflectionProbes")); mCheckboxReflectionProbe->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxPermCopy = getChild("filter_perm_copy"); + mCheckboxPermCopy->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyCopiable")); mCheckboxPermCopy->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxPermModify = getChild("filter_perm_modify"); + mCheckboxPermModify->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyModifiable")); mCheckboxPermModify->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxPermTransfer = getChild("filter_perm_transfer"); + mCheckboxPermModify->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyTransferable")); mCheckboxPermTransfer->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); mCheckboxAgentParcelOnly = getChild("filter_agent_parcel_only"); + mCheckboxAgentParcelOnly->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyCurrentParcel")); mCheckboxAgentParcelOnly->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this)); + onCommitCheckbox(); + return LLPanel::postBuild(); } @@ -2278,8 +2298,6 @@ void FSPanelAreaSearchFilter::onCommitCheckbox() { mFSAreaSearch->setFilterLocked(mCheckboxLocked->get()); mFSAreaSearch->setFilterPhantom(mCheckboxPhantom->get()); - mFSAreaSearch->setFilterForSale(mCheckboxForSale->get()); - mFSAreaSearch->setFilterDistance(mCheckboxDistance->get()); mFSAreaSearch->setFilterMoaP(mCheckboxMoaP->get()); mFSAreaSearch->setFilterReflectionProbe(mCheckboxReflectionProbe->get()); @@ -2338,6 +2356,14 @@ void FSPanelAreaSearchFilter::onCommitCheckbox() } mFSAreaSearch->setFilterAttachment(mCheckboxAttachment->get()); + mFSAreaSearch->setFilterForSale(mCheckboxForSale->get()); + mSpinForSaleMinValue->setEnabled(mCheckboxForSale->get()); + mSpinForSaleMaxValue->setEnabled(mCheckboxForSale->get()); + + mFSAreaSearch->setFilterDistance(mCheckboxDistance->get()); + mSpinDistanceMinValue->setEnabled(mCheckboxDistance->get()); + mSpinDistanceMaxValue->setEnabled(mCheckboxDistance->get()); + mFSAreaSearch->setExcludeChildPrims(mCheckboxExcludeChildPrim->get()); mFSAreaSearch->setExcludeNeighborRegions(mCheckboxExcludeNeighborRegions->get()); @@ -2372,6 +2398,34 @@ void FSPanelAreaSearchFilter::onCommitCombo() } } +void FSPanelAreaSearchFilter::onButtonClickedSaveAsDefault() +{ + gSavedSettings.setBOOL("FSAreaSearch_OnlyLocked", mCheckboxLocked->get()); + gSavedSettings.setBOOL("FSAreaSearch_OnlyPhysical", mCheckboxPhysical->get()); + gSavedSettings.setBOOL("FSAreaSearch_OnlyTemporary", mCheckboxTemporary->get()); + gSavedSettings.setBOOL("FSAreaSearch_OnlyPhantom", mCheckboxPhantom->get()); + gSavedSettings.setBOOL("FSAreaSearch_FilterForSale", mCheckboxForSale->get()); + gSavedSettings.setBOOL("FSAreaSearch_OnlyAttachments", mCheckboxAttachment->get()); + gSavedSettings.setS32("FSAreaSearch_MinimumPrice", mSpinForSaleMinValue->get()); + gSavedSettings.setS32("FSAreaSearch_MaximumPrice", mSpinForSaleMaxValue->get()); + gSavedSettings.setS32("FSAreaSearch_ClickAction", mComboClickAction->getValue()); + gSavedSettings.setBOOL("FSAreaSearch_ExcludeAttachments", mCheckboxExcludeAttachment->get()); + gSavedSettings.setBOOL("FSAreaSearch_ExcludePhysical", mCheckboxExcludePhysics->get()); + gSavedSettings.setBOOL("FSAreaSearch_ExcludeTemporary", mCheckboxExcludetemporary->get()); + gSavedSettings.setBOOL("FSAreaSearch_ExcludeReflectionProbes", mCheckboxExcludeReflectionProbes->get()); + gSavedSettings.setBOOL("FSAreaSearch_ExcludeChildPrims", mCheckboxExcludeChildPrim->get()); + gSavedSettings.setBOOL("FSAreaSearch_ExcludeNeighborRegions", mCheckboxExcludeNeighborRegions->get()); + gSavedSettings.setBOOL("FSAreaSearch_FilterDistance", mCheckboxExcludeAttachment->get()); + gSavedSettings.setS32("FSAreaSearch_MinimumDistance", mCheckboxDistance->get()); + gSavedSettings.setS32("FSAreaSearch_MaximumDistance", mSpinDistanceMaxValue->get()); + gSavedSettings.setBOOL("FSAreaSearch_OnlyMOAP", mCheckboxMoaP->get()); + gSavedSettings.setBOOL("FSAreaSearch_OnlyReflectionProbes", mCheckboxReflectionProbe->get()); + gSavedSettings.setBOOL("FSAreaSearch_OnlyCopiable", mCheckboxPermCopy->get()); + gSavedSettings.setBOOL("FSAreaSearch_OnlyModifiable", mCheckboxPermModify->get()); + gSavedSettings.setBOOL("FSAreaSearch_OnlyTransferable", mCheckboxPermModify->get()); + gSavedSettings.setBOOL("FSAreaSearch_OnlyCurrentParcel", mCheckboxAgentParcelOnly->get()); +} + //--------------------------------------------------------------------------- // Options tab //--------------------------------------------------------------------------- diff --git a/indra/newview/fsareasearch.h b/indra/newview/fsareasearch.h index a4bb89c2b0..3ad77fd36e 100644 --- a/indra/newview/fsareasearch.h +++ b/indra/newview/fsareasearch.h @@ -378,6 +378,7 @@ private: void onCommitCheckbox(); void onCommitSpin(); void onCommitCombo(); + void onButtonClickedSaveAsDefault(); FSAreaSearch* mFSAreaSearch; LLCheckBoxCtrl* mCheckboxForSale; diff --git a/indra/newview/skins/default/xui/en/floater_fs_area_search.xml b/indra/newview/skins/default/xui/en/floater_fs_area_search.xml index 7fb90bee9f..71c8ddd66e 100644 --- a/indra/newview/skins/default/xui/en/floater_fs_area_search.xml +++ b/indra/newview/skins/default/xui/en/floater_fs_area_search.xml @@ -612,6 +612,14 @@ left="10" bottom="-6" follows="left|bottom"/> +