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