Add functionality to save area search flags and options as defaults when the floater is opened.

master
Zi Ree 2025-06-20 17:10:13 +02:00
parent c1d93ee128
commit d91fa91d6a
4 changed files with 340 additions and 11 deletions

View File

@ -26379,5 +26379,271 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>0</integer>
</map>
<!-- <FS:Zi> Area Search Defaults -->
<key>FSAreaSearch_ExcludeAttachments</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Exclude attachments</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>FSAreaSearch_ExcludeChildPrims</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Exclude child prims</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>FSAreaSearch_ExcludeNeighborRegions</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Exclude neighbor regions</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>FSAreaSearch_ExcludePhysical</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Exclude physical objects</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>FSAreaSearch_ExcludeReflectionProbes</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Exclude reflection probes</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_ExcludeTemporary</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Exclude temporary objects</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>FSAreaSearch_FilterDistance</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Filter by distance</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_FilterForSale</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Only show objects that are for sale</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_MaximumDistance</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Maximum distance</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>999999</integer>
</map>
<key>FSAreaSearch_MaximumPrice</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Maximum price</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>999999</integer>
</map>
<key>FSAreaSearch_MinimumDistance</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Minimum distance</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_MinimumPrice</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Minimum price</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyAttachments</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only attachments</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyCopiable</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only copiable objects</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyCurrentParcel</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only objects in the current parcel</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyForSale</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only objects that are for sale</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyLocked</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only locked objects</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyMOAP</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only objects that have shared media applied</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyModifiable</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only modifiable objects</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyPhantom</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only phantom objects</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyPhysical</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only physical objects</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyReflectionProbes</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only reflection probes</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyTemporary</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only temporary objects</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSAreaSearch_OnlyTransferable</key>
<map>
<key>Comment</key>
<string>Area Search Filter: Find only transferable objects</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<!-- </FS:Zi> Area Search Defaults -->
</map>
</llsd>

View File

@ -2188,89 +2188,109 @@ FSPanelAreaSearchFilter::FSPanelAreaSearchFilter(FSAreaSearch* pointer)
bool FSPanelAreaSearchFilter::postBuild()
{
mCheckboxLocked = getChild<LLCheckBoxCtrl>("filter_locked");
mCheckboxLocked->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyLocked"));
mCheckboxLocked->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxPhysical = getChild<LLCheckBoxCtrl>("filter_physical");
mCheckboxPhysical->setEnabled(false);
mCheckboxPhysical->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyPhysical"));
mCheckboxPhysical->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxTemporary = getChild<LLCheckBoxCtrl>("filter_temporary");
mCheckboxTemporary->setEnabled(false);
mCheckboxTemporary->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyTemporary"));
mCheckboxTemporary->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxPhantom = getChild<LLCheckBoxCtrl>("filter_phantom");
mCheckboxPhantom->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyPhantom"));
mCheckboxPhantom->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxForSale = getChild<LLCheckBoxCtrl>("filter_for_sale");
mCheckboxForSale->set(gSavedSettings.getBOOL("FSAreaSearch_FilterForSale"));
mCheckboxForSale->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxAttachment = getChild<LLCheckBoxCtrl>("filter_attachment");
mCheckboxAttachment->setEnabled(false);
mCheckboxAttachment->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyAttachments"));
mCheckboxAttachment->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mSpinForSaleMinValue= getChild<LLSpinCtrl>("min_price");
mSpinForSaleMinValue->set(gSavedSettings.getS32("FSAreaSearch_MinimumPrice"));
mSpinForSaleMinValue->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitSpin, this));
mSpinForSaleMaxValue= getChild<LLSpinCtrl>("max_price");
mSpinForSaleMaxValue->set(gSavedSettings.getS32("FSAreaSearch_MaximumPrice"));
mSpinForSaleMaxValue->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitSpin, this));
mComboClickAction = getChild<LLComboBox>("click_action");
mComboClickAction->setValue(gSavedSettings.getS32("FSAreaSearch_ClickAction"));
mComboClickAction->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCombo, this));
mCheckboxExcludeAttachment = getChild<LLCheckBoxCtrl>("exclude_attachment");
mCheckboxExcludeAttachment->set(true);
mCheckboxExcludeAttachment->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludeAttachments"));
mCheckboxExcludeAttachment->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxExcludePhysics = getChild<LLCheckBoxCtrl>("exclude_physical");
mCheckboxExcludePhysics->set(true);
mCheckboxExcludePhysics->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludePhysical"));
mCheckboxExcludePhysics->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxExcludetemporary = getChild<LLCheckBoxCtrl>("exclude_temporary");
mCheckboxExcludetemporary->set(true);
mCheckboxExcludetemporary->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludeTemporary"));
mCheckboxExcludetemporary->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxExcludeReflectionProbes = getChild<LLCheckBoxCtrl>("exclude_reflection_probes");
mCheckboxExcludeReflectionProbes->set(false);
mCheckboxExcludeReflectionProbes->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludeReflectionProbes"));
mCheckboxExcludeReflectionProbes->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxExcludeChildPrim = getChild<LLCheckBoxCtrl>("exclude_childprim");
mCheckboxExcludeChildPrim->set(true);
mCheckboxExcludeChildPrim->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludeChildPrims"));
mCheckboxExcludeChildPrim->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxExcludeNeighborRegions = getChild<LLCheckBoxCtrl>("exclude_neighbor_region");
mCheckboxExcludeNeighborRegions->set(true);
mCheckboxExcludeNeighborRegions->set(gSavedSettings.getBOOL("FSAreaSearch_ExcludeNeighborRegions"));
mCheckboxExcludeNeighborRegions->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mButtonApply = getChild<LLButton>("apply");
mButtonApply->setClickedCallback(boost::bind(&FSAreaSearch::onButtonClickedSearch, mFSAreaSearch));
mButtonApply = getChild<LLButton>("save_as_default");
mButtonApply->setClickedCallback(boost::bind(&FSPanelAreaSearchFilter::onButtonClickedSaveAsDefault, this));
mCheckboxDistance = getChild<LLCheckBoxCtrl>("filter_distance");
mCheckboxExcludeAttachment->set(gSavedSettings.getBOOL("FSAreaSearch_FilterDistance"));
mCheckboxDistance->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mSpinDistanceMinValue = getChild<LLSpinCtrl>("min_distance");
mCheckboxDistance->set(gSavedSettings.getS32("FSAreaSearch_MinimumDistance"));
mSpinDistanceMinValue->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitSpin, this));
mSpinDistanceMaxValue= getChild<LLSpinCtrl>("max_distance");
mSpinDistanceMaxValue->set(gSavedSettings.getS32("FSAreaSearch_MaximumDistance"));
mSpinDistanceMaxValue->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitSpin, this));
mCheckboxMoaP = getChild<LLCheckBoxCtrl>("filter_moap");
mCheckboxMoaP->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyMOAP"));
mCheckboxMoaP->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxReflectionProbe = getChild<LLCheckBoxCtrl>("filter_reflection_probe");
mCheckboxReflectionProbe->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyReflectionProbes"));
mCheckboxReflectionProbe->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxPermCopy = getChild<LLCheckBoxCtrl>("filter_perm_copy");
mCheckboxPermCopy->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyCopiable"));
mCheckboxPermCopy->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxPermModify = getChild<LLCheckBoxCtrl>("filter_perm_modify");
mCheckboxPermModify->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyModifiable"));
mCheckboxPermModify->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxPermTransfer = getChild<LLCheckBoxCtrl>("filter_perm_transfer");
mCheckboxPermModify->set(gSavedSettings.getBOOL("FSAreaSearch_OnlyTransferable"));
mCheckboxPermTransfer->setCommitCallback(boost::bind(&FSPanelAreaSearchFilter::onCommitCheckbox, this));
mCheckboxAgentParcelOnly = getChild<LLCheckBoxCtrl>("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
//---------------------------------------------------------------------------

View File

@ -378,6 +378,7 @@ private:
void onCommitCheckbox();
void onCommitSpin();
void onCommitCombo();
void onButtonClickedSaveAsDefault();
FSAreaSearch* mFSAreaSearch;
LLCheckBoxCtrl* mCheckboxForSale;

View File

@ -612,6 +612,14 @@
left="10"
bottom="-6"
follows="left|bottom"/>
<button
name="save_as_default"
label="Save as Default"
mouse_opaque="true"
height="20"
width="160"
left_pad="10"
follows="left|bottom"/>
</panel>
<panel
border="true"