From 879e30e0617798a786f39b815668cec4e6dbc310 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Tue, 13 Oct 2009 04:06:49 -0700 Subject: Updated inventory search to include description (from Emerald) --- linden/indra/newview/llfolderview.cpp | 57 +++++++++++++++++----- linden/indra/newview/llfolderview.h | 11 +++-- linden/indra/newview/llinventoryactions.cpp | 20 +++++++- linden/indra/newview/llinventoryview.cpp | 1 + .../skins/default/xui/en-us/floater_inventory.xml | 6 ++- 5 files changed, 78 insertions(+), 17 deletions(-) (limited to 'linden/indra/newview') diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp index 5407f06..61d7df0 100644 --- a/linden/indra/newview/llfolderview.cpp +++ b/linden/indra/newview/llfolderview.cpp @@ -297,11 +297,22 @@ void LLFolderViewItem::refreshFromListener() else mLabelCreator = creator_name;*/ + //Label for desc search + std::string desc; + if(item) + { + if(!item->getDescription().empty()) + { + desc = item->getDescription(); + } + } + mLabelDesc = desc; + //Label for name search mLabel = mListener->getDisplayName(); //Build label for combined search - RK - mLabelAll = mLabel + " " + mLabelCreator; + mLabelAll = mLabel + " " + mLabelCreator + " " + mLabelDesc; setIcon(mListener->getIcon()); time_t creation_date = mListener->getCreationDate(); @@ -321,32 +332,53 @@ void LLFolderViewItem::refresh() std::string searchable_label(mLabel); std::string searchable_label_creator(mLabelCreator); + std::string searchable_label_desc(mLabelDesc); std::string searchable_label_all(mLabelAll); //add the (no modify), (no transfer) etc stuff to each label. searchable_label.append(mLabelSuffix); searchable_label_creator.append(mLabelSuffix); + searchable_label_desc.append(mLabelSuffix); searchable_label_all.append(mLabelSuffix); //all labels need to be uppercase. LLStringUtil::toUpper(searchable_label); LLStringUtil::toUpper(searchable_label_creator); + LLStringUtil::toUpper(searchable_label_desc); LLStringUtil::toUpper(searchable_label_all); - if (mSearchableLabel.compare(searchable_label) || - mSearchableLabelCreator.compare(searchable_label_creator)) + if (mSearchableLabel.compare(searchable_label) || + mSearchableLabelCreator.compare(searchable_label_creator) || + mSearchableLabelDesc.compare(searchable_label_creator)) { mSearchableLabel.assign(searchable_label); mSearchableLabelCreator.assign(searchable_label_creator); + mSearchableLabelDesc.assign(searchable_label_desc); mSearchableLabelAll.assign(searchable_label_all); dirtyFilter(); - // some part of label has changed, so overall width has potentially changed + //some part of label has changed, so overall width has potentially changed if (mParentFolder) - { mParentFolder->requestArrange(); - } } + + /*if(mSearchableLabelCreator.compare(searchable_label_creator)) + { + mSearchableLabelCreator.assign(searchable_label_creator); + + dirtyFilter(); + if(mParentFolder) + mParentFolder->requestArrange(); + } + + if(mSearchableLabelDesc.compare(searchable_label_desc)) + { + mSearchableLabelDesc.assign(searchable_label_desc); + + dirtyFilter(); + if(mParentFolder) + mParentFolder->requestArrange(); + }*/ S32 label_width = sFont->getWidth(mLabel); if( mLabelSuffix.size() ) @@ -621,11 +653,12 @@ void LLFolderViewItem::rename(const std::string& new_name) } } -const std::string& LLFolderViewItem::getSearchableLabel() const +const std::string& LLFolderViewItem::getSearchableLabel(U32 search_type = 0) const { - U32 search_type = gSavedSettings.getU32("InventorySearchType"); - if(search_type == 4) + if(search_type == 3) return mSearchableLabelAll; + else if(search_type == 2) + return mSearchableLabelDesc; else if(search_type == 1) return mSearchableLabelCreator; else @@ -4564,11 +4597,13 @@ BOOL LLInventoryFilter::check(LLFolderViewItem* item) } LLFolderViewEventListener* listener = item->getListener(); const LLUUID& item_id = listener->getUUID(); - mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos; + + U32 search_type = gSavedSettings.getU32("InventorySearchType"); + mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel(search_type).find(mFilterSubString) : std::string::npos; BOOL passed = (listener->getNInventoryType() & mFilterOps.mFilterTypes || listener->getNInventoryType() == LLInventoryType::NIT_NONE) && (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos) && (mFilterWorn == false || gAgent.isWearingItem(item_id) || - gAgent.getAvatarObject() && gAgent.getAvatarObject()->isWearingAttachment(item_id)) + (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isWearingAttachment(item_id))) && ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions) && (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate); return passed; diff --git a/linden/indra/newview/llfolderview.h b/linden/indra/newview/llfolderview.h index 25b4362..82a1951 100644 --- a/linden/indra/newview/llfolderview.h +++ b/linden/indra/newview/llfolderview.h @@ -338,11 +338,16 @@ protected: std::string mLabel; std::string mSearchableLabel; - std::string mLabelAll; - std::string mSearchableLabelAll; + std::string mLabelCreator; std::string mSearchableLabelCreator; + std::string mLabelDesc; + std::string mSearchableLabelDesc; + + std::string mLabelAll; + std::string mSearchableLabelAll; + std::string mType; S32 mLabelWidth; U32 mCreationDate; @@ -469,7 +474,7 @@ public: // viewed. This method will ask the viewed object itself. const std::string& getName( void ) const; - const std::string& getSearchableLabel( void ) const; + const std::string& getSearchableLabel( U32 search_type ) const; // This method returns the label displayed on the view. This // method was primarily added to allow sorting on the folder diff --git a/linden/indra/newview/llinventoryactions.cpp b/linden/indra/newview/llinventoryactions.cpp index b598c83..25592c1 100644 --- a/linden/indra/newview/llinventoryactions.cpp +++ b/linden/indra/newview/llinventoryactions.cpp @@ -484,7 +484,8 @@ class SetSearchType : public inventory_listener_t gSavedSettings.setU32("InventorySearchType", 0); mPtr->getControl("Inventory.SearchByName")->setValue(TRUE); - mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE); + mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE); + mPtr->getControl("Inventory.SearchByDesc")->setValue(FALSE); mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE); } else if(search_type == "creator") @@ -493,16 +494,31 @@ class SetSearchType : public inventory_listener_t mPtr->getControl("Inventory.SearchByName")->setValue(FALSE); mPtr->getControl("Inventory.SearchByCreator")->setValue(TRUE); + mPtr->getControl("Inventory.SearchByDesc")->setValue(FALSE); + mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE); + } + else if(search_type == "desc") + { + gSavedSettings.setU32("InventorySearchType", 2); + + mPtr->getControl("Inventory.SearchByName")->setValue(FALSE); + mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE); + mPtr->getControl("Inventory.SearchByDesc")->setValue(TRUE); mPtr->getControl("Inventory.SearchByAll")->setValue(FALSE); } else if(search_type == "all") { - gSavedSettings.setU32("InventorySearchType", 4); + gSavedSettings.setU32("InventorySearchType", 3); mPtr->getControl("Inventory.SearchByName")->setValue(FALSE); mPtr->getControl("Inventory.SearchByCreator")->setValue(FALSE); + mPtr->getControl("Inventory.SearchByDesc")->setValue(FALSE); mPtr->getControl("Inventory.SearchByAll")->setValue(TRUE); } + + //Clear search when switching modes. + mPtr->getActivePanel()->setFilterSubString(LLStringUtil::null); + mPtr->getActivePanel()->setFilterTypes(LLInventoryType::NIT_ALL); return true; } }; diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp index 008d79d..b4a8b72 100644 --- a/linden/indra/newview/llinventoryview.cpp +++ b/linden/indra/newview/llinventoryview.cpp @@ -527,6 +527,7 @@ void LLInventoryView::init(LLInventoryModel* inventory) addBoolControl("Inventory.SearchByName", search_by_name); addBoolControl("Inventory.SearchByCreator", !search_by_name); + addBoolControl("Inventory.SearchByDesc", !search_by_name); addBoolControl("Inventory.SearchByAll", !search_by_name); diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml b/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml index f0c97f2..103a11e 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml @@ -206,7 +206,7 @@ </menu_item_check> </menu> <menu bottom_delta="64" drop_shadow="true" height="49" - label="Search" left="0" mouse_opaque="false" name="Sort" opaque="true" + label="Search" left="0" mouse_opaque="false" name="Search" opaque="true" tear_off="true" width="118"> <menu_item_check bottom_delta="-18" control_name="Inventory.SearchByName" height="18" label="By Name" left="0" mouse_opaque="true" name="By Name" width="118"> @@ -216,6 +216,10 @@ label="By Creator" left="0" mouse_opaque="true" name="By Creator" width="118"> <on_click filter="" function="Inventory.SetSearchBy" userdata="creator" /> </menu_item_check> + <menu_item_check bottom_delta="-18" control_name="Inventory.SearchByDesc" height="18" + label="By Description" left="0" mouse_opaque="true" name="By Description" width="118"> + <on_click filter="" function="Inventory.SetSearchBy" userdata="desc" /> + </menu_item_check> <menu_item_separator bottom_delta="-8" height="8" left="0" mouse_opaque="true" name="separator" width="118" /> <menu_item_check bottom_delta="-18" control_name="Inventory.SearchByAll" height="18" -- cgit v1.1