Fixed not working search on radar (FIRE-2179)

Ansariel 2012-06-03 18:09:26 +02:00
parent f8d8f2e81c
commit 2765106aba
3 changed files with 36 additions and 2 deletions

View File

@ -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)
// <FS:Ansariel> 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<F32> 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);
// <FS:Ansariel> Fix for FS-specific people list (radar)
std::string preparedFilterString(mFilterString);
if (mFilterColumn > -1)
{
std::transform(preparedFilterString.begin(), preparedFilterString.end(), preparedFilterString.begin(), ::tolower);
}
// </FS:Ansariel> Fix for FS-specific people list (radar)
item_list::iterator iter;
for (iter = mItemList.begin(); iter != mItemList.end(); iter++)
{
LLScrollListItem* item = *iter;
// <FS:Ansariel> 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;
}
}
// </FS:Ansariel> Fix for FS-specific people list (radar)
item_rect.setOriginAndSize(
x,
cur_y,

View File

@ -303,6 +303,10 @@ public:
void clearSearchString() { mSearchString.clear(); }
// <FS:Ansariel> 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;
// <FS:Ansariel> Fix for FS-specific people list (radar)
std::string mFilterString;
S32 mFilterColumn;
S32 mSearchColumn;
S32 mNumDynamicWidthColumns;
S32 mTotalStaticColumnWidth;

View File

@ -607,6 +607,7 @@ BOOL LLPanelPeople::postBuild()
// AO: radarlist takes over for nearbylist for presentation.
mRadarList = nearby_tab->getChild<LLRadarListCtrl>("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
// <FS:Ansariel> Changed for FS specific radar
// mNearbyList->setNameFilter(mFilterSubStringOrig);
mRadarList->setFilterString(mFilterSubStringOrig);
// </FS:Ansariel> Changed for FS specific radar
mOnlineFriendList->setNameFilter(mFilterSubStringOrig);
mAllFriendList->setNameFilter(mFilterSubStringOrig);
mRecentList->setNameFilter(mFilterSubStringOrig);