From 2765106aba75d84cc4f5f9b49f7fa7d4395db96f Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sun, 3 Jun 2012 18:09:26 +0200 Subject: [PATCH] Fixed not working search on radar (FIRE-2179) --- indra/llui/llscrolllistctrl.cpp | 25 ++++++++++++++++++++++++- indra/llui/llscrolllistctrl.h | 8 ++++++++ indra/newview/llpanelpeople.cpp | 5 ++++- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 553fac7a14..be6e193133 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -199,7 +199,10 @@ LLScrollListCtrl::LLScrollListCtrl(const LLScrollListCtrl::Params& p) mHoveredColor(p.hovered_color()), mSearchColumn(p.search_column), mColumnPadding(p.column_padding), - mContextMenuType(MENU_NONE) + // Fix for FS-specific people list (radar) + //mContextMenuType(MENU_NONE) + mContextMenuType(MENU_NONE), + mFilterColumn(-1) { mItemListRect.setOriginAndSize( mBorderThickness, @@ -1406,11 +1409,31 @@ void LLScrollListCtrl::drawItems() static LLUICachedControl type_ahead_timeout ("TypeAheadTimeout", 0); highlight_color.mV[VALPHA] = clamp_rescale(mSearchTimer.getElapsedTimeF32(), type_ahead_timeout * 0.7f, type_ahead_timeout, 0.4f, 0.f); + // Fix for FS-specific people list (radar) + std::string preparedFilterString(mFilterString); + if (mFilterColumn > -1) + { + std::transform(preparedFilterString.begin(), preparedFilterString.end(), preparedFilterString.begin(), ::tolower); + } + // Fix for FS-specific people list (radar) + item_list::iterator iter; for (iter = mItemList.begin(); iter != mItemList.end(); iter++) { LLScrollListItem* item = *iter; + // Fix for FS-specific people list (radar) + if (mFilterColumn > -1) + { + std::string filterColumnValue = item->getColumn(mFilterColumn)->getValue().asString(); + std::transform(filterColumnValue.begin(), filterColumnValue.end(), filterColumnValue.begin(), ::tolower); + if (mFilterString.length() > 0 && filterColumnValue.find(preparedFilterString) == std::string::npos) + { + continue; + } + } + // Fix for FS-specific people list (radar) + item_rect.setOriginAndSize( x, cur_y, diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 511f7dc319..d6a89931a0 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -303,6 +303,10 @@ public: void clearSearchString() { mSearchString.clear(); } + // Fix for FS-specific people list (radar) + void setFilterString(const std::string& str) { mFilterString = str; } + void setFilterColumn(S32 col) { mFilterColumn = col; } + // support right-click context menus for avatar/group lists enum ContextMenuType { MENU_NONE, MENU_AVATAR, MENU_GROUP }; void setContextMenu(const ContextMenuType &menu) { mContextMenuType = menu; } @@ -490,6 +494,10 @@ private: LLWString mSearchString; LLFrameTimer mSearchTimer; + // Fix for FS-specific people list (radar) + std::string mFilterString; + S32 mFilterColumn; + S32 mSearchColumn; S32 mNumDynamicWidthColumns; S32 mTotalStaticColumnWidth; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 81fbc85f43..7f148bda36 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -607,6 +607,7 @@ BOOL LLPanelPeople::postBuild() // AO: radarlist takes over for nearbylist for presentation. mRadarList = nearby_tab->getChild("radar_list"); mRadarList->sortByColumn("range",TRUE); // sort by range + mRadarList->setFilterColumn(0); mRadarFrameCount = 0; mRadarAlertRequest = false; mRadarLastBulkOffsetRequestTime = 0; @@ -1749,8 +1750,10 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string) // Apply new filter. - // AO: currently broken + // Changed for FS specific radar // mNearbyList->setNameFilter(mFilterSubStringOrig); + mRadarList->setFilterString(mFilterSubStringOrig); + // Changed for FS specific radar mOnlineFriendList->setNameFilter(mFilterSubStringOrig); mAllFriendList->setNameFilter(mFilterSubStringOrig); mRecentList->setNameFilter(mFilterSubStringOrig);