summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelcontents.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llpanelcontents.cpp')
-rw-r--r--indra/newview/llpanelcontents.cpp85
1 files changed, 75 insertions, 10 deletions
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index 489289e814..7910bcb41d 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -31,6 +31,7 @@
// linden library includes
#include "llerror.h"
+#include "llfiltereditor.h"
#include "llfloaterreg.h"
#include "llfontgl.h"
#include "llinventorydefines.h"
@@ -76,16 +77,22 @@ const char* LLPanelContents::PERMS_GROUP_CONTROL_KEY = "perms_group_control";
const char* LLPanelContents::PERMS_ANYONE_INTERACT_KEY = "perms_anyone_interact";
const char* LLPanelContents::PERMS_ANYONE_CONTROL_KEY = "perms_anyone_control";
-BOOL LLPanelContents::postBuild()
+bool LLPanelContents::postBuild()
{
- setMouseOpaque(FALSE);
+ setMouseOpaque(false);
childSetAction("button new script",&LLPanelContents::onClickNewScript, this);
childSetAction("button permissions",&LLPanelContents::onClickPermissions, this);
+ mFilterEditor = getChild<LLFilterEditor>("contents_filter");
+ mFilterEditor->setCommitCallback([&](LLUICtrl*, const LLSD&) { onFilterEdit(); });
+
mPanelInventoryObject = getChild<LLPanelObjectInventory>("contents_inventory");
- return TRUE;
+ // update permission filter once UI is fully initialized
+ mSavedFolderState.setApply(false);
+
+ return true;
}
LLPanelContents::LLPanelContents()
@@ -105,7 +112,7 @@ void LLPanelContents::getState(LLViewerObject *objectp )
{
if( !objectp )
{
- getChildView("button new script")->setEnabled(FALSE);
+ getChildView("button new script")->setEnabled(false);
return;
}
@@ -116,7 +123,7 @@ void LLPanelContents::getState(LLViewerObject *objectp )
bool editable = gAgent.isGodlike()
|| (objectp->permModify() && !objectp->isPermanentEnforced()
&& ( objectp->permYouOwner() || ( !group_id.isNull() && gAgent.isInGroup(group_id) ))); // solves SL-23488
- BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
+ bool all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME );
// Edit script button - ok if object is editable and there's an unambiguous destination for the object.
getChildView("button new script")->setEnabled(
@@ -129,9 +136,69 @@ void LLPanelContents::getState(LLViewerObject *objectp )
mPanelInventoryObject->setEnabled(!objectp->isPermanentEnforced());
}
+void LLPanelContents::onFilterEdit()
+{
+ const std::string& filter_substring = mFilterEditor->getText();
+ if (!mPanelInventoryObject->hasInventory())
+ {
+ mDirtyFilter = true;
+ }
+ else
+ {
+ LLFolderView* root_folder = mPanelInventoryObject->getRootFolder();
+ if (filter_substring.empty())
+ {
+ if (mPanelInventoryObject->getFilter().getFilterSubString().empty())
+ {
+ // The current filter and the new filter are empty, nothing to do
+ return;
+ }
+
+ if (mDirtyFilter && !mSavedFolderState.hasOpenFolders())
+ {
+ if (root_folder)
+ {
+ root_folder->setOpenArrangeRecursively(true, LLFolderViewFolder::ERecurseType::RECURSE_DOWN);
+ }
+ }
+ else
+ {
+ mSavedFolderState.setApply(true);
+ if (root_folder)
+ {
+ root_folder->applyFunctorRecursively(mSavedFolderState);
+ }
+ }
+ mDirtyFilter = false;
+
+ // Add a folder with the current item to the list of previously opened folders
+ if (root_folder)
+ {
+ LLOpenFoldersWithSelection opener;
+ root_folder->applyFunctorRecursively(opener);
+ root_folder->scrollToShowSelection();
+ }
+ }
+ else if (mPanelInventoryObject->getFilter().getFilterSubString().empty())
+ {
+ // The first letter in search term, save existing folder open state
+ if (!mPanelInventoryObject->getFilter().isNotDefault())
+ {
+ mSavedFolderState.setApply(false);
+ if (root_folder)
+ {
+ root_folder->applyFunctorRecursively(mSavedFolderState);
+ }
+ mDirtyFilter = false;
+ }
+ }
+ }
+ mPanelInventoryObject->getFilter().setFilterSubString(filter_substring);
+}
+
void LLPanelContents::refresh()
{
- const BOOL children_ok = TRUE;
+ const bool children_ok = true;
LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok);
getState(object);
@@ -149,7 +216,6 @@ void LLPanelContents::clearContents()
}
}
-
//
// Static functions
//
@@ -157,7 +223,7 @@ void LLPanelContents::clearContents()
// static
void LLPanelContents::onClickNewScript(void *userdata)
{
- const BOOL children_ok = TRUE;
+ const bool children_ok = true;
LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(children_ok);
if(object)
{
@@ -186,7 +252,7 @@ void LLPanelContents::onClickNewScript(void *userdata)
LLSaleInfo::DEFAULT,
LLInventoryItemFlags::II_FLAGS_NONE,
time_corrected());
- object->saveScript(new_item, TRUE, true);
+ object->saveScript(new_item, true, true);
std::string name = new_item->getName();
@@ -199,7 +265,6 @@ void LLPanelContents::onClickNewScript(void *userdata)
}
}
-
// static
void LLPanelContents::onClickPermissions(void *userdata)
{