summaryrefslogtreecommitdiff
path: root/indra/newview/llfloateravatarpicker.cpp
diff options
context:
space:
mode:
authorAndrey Lihatskiy <alihatskiy@productengine.com>2024-05-01 08:16:58 +0300
committerAndrey Lihatskiy <alihatskiy@productengine.com>2024-05-01 08:16:58 +0300
commit38c2a5bde985a6a8a96d912d432f8bdf7e5b60be (patch)
treeb3469444ea8dabe4e76a8a265ac086a9db78891c /indra/newview/llfloateravatarpicker.cpp
parent9bf2dfbb39032d7407295089cf181de0987083e5 (diff)
parente7eced3c87310b15ac20cc3cd470d67686104a14 (diff)
Merge branch 'marchcat/w-whitespace' into marchcat/x-ws-merge
Diffstat (limited to 'indra/newview/llfloateravatarpicker.cpp')
-rw-r--r--indra/newview/llfloateravatarpicker.cpp1054
1 files changed, 527 insertions, 527 deletions
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index e8ce4aa42a..f903b1bd8d 100644
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -1,24 +1,24 @@
-/**
+/**
* @file llfloateravatarpicker.cpp
*
* $LicenseInfo:firstyear=2003&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
- *
+ *
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
+ *
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -32,14 +32,14 @@
#include "llcallingcard.h"
#include "llfocusmgr.h"
#include "llfloaterreg.h"
-#include "llimview.h" // for gIMMgr
-#include "lltooldraganddrop.h" // for LLToolDragAndDrop
+#include "llimview.h" // for gIMMgr
+#include "lltooldraganddrop.h" // for LLToolDragAndDrop
#include "llviewercontrol.h"
-#include "llviewerregion.h" // getCapability()
+#include "llviewerregion.h" // getCapability()
#include "llworld.h"
// Linden libraries
-#include "llavatarnamecache.h" // IDEVO
+#include "llavatarnamecache.h" // IDEVO
#include "llbutton.h"
#include "llcachename.h"
#include "lllineeditor.h"
@@ -61,299 +61,299 @@ static const U32 AVATAR_PICKER_SEARCH_TIMEOUT = 180U;
static std::map<LLUUID, LLAvatarName> sAvatarNameMap;
LLFloaterAvatarPicker* LLFloaterAvatarPicker::show(select_callback_t callback,
- BOOL allow_multiple,
- BOOL closeOnSelect,
- BOOL skip_agent,
+ BOOL allow_multiple,
+ BOOL closeOnSelect,
+ BOOL skip_agent,
const std::string& name,
LLView * frustumOrigin)
{
- // *TODO: Use a key to allow this not to be an effective singleton
- LLFloaterAvatarPicker* floater =
- LLFloaterReg::showTypedInstance<LLFloaterAvatarPicker>("avatar_picker", LLSD(name));
- if (!floater)
- {
- LL_WARNS() << "Cannot instantiate avatar picker" << LL_ENDL;
- return NULL;
- }
-
- floater->mSelectionCallback = callback;
- floater->setAllowMultiple(allow_multiple);
- floater->mNearMeListComplete = FALSE;
- floater->mCloseOnSelect = closeOnSelect;
- floater->mExcludeAgentFromSearchResults = skip_agent;
-
- if (!closeOnSelect)
- {
- // Use Select/Close
- std::string select_string = floater->getString("Select");
- std::string close_string = floater->getString("Close");
- floater->getChild<LLButton>("ok_btn")->setLabel(select_string);
- floater->getChild<LLButton>("cancel_btn")->setLabel(close_string);
- }
+ // *TODO: Use a key to allow this not to be an effective singleton
+ LLFloaterAvatarPicker* floater =
+ LLFloaterReg::showTypedInstance<LLFloaterAvatarPicker>("avatar_picker", LLSD(name));
+ if (!floater)
+ {
+ LL_WARNS() << "Cannot instantiate avatar picker" << LL_ENDL;
+ return NULL;
+ }
+
+ floater->mSelectionCallback = callback;
+ floater->setAllowMultiple(allow_multiple);
+ floater->mNearMeListComplete = FALSE;
+ floater->mCloseOnSelect = closeOnSelect;
+ floater->mExcludeAgentFromSearchResults = skip_agent;
+
+ if (!closeOnSelect)
+ {
+ // Use Select/Close
+ std::string select_string = floater->getString("Select");
+ std::string close_string = floater->getString("Close");
+ floater->getChild<LLButton>("ok_btn")->setLabel(select_string);
+ floater->getChild<LLButton>("cancel_btn")->setLabel(close_string);
+ }
if(frustumOrigin)
{
floater->mFrustumOrigin = frustumOrigin->getHandle();
}
- return floater;
+ return floater;
}
// Default constructor
LLFloaterAvatarPicker::LLFloaterAvatarPicker(const LLSD& key)
: LLFloater(key),
- mNumResultsReturned(0),
- mNearMeListComplete(FALSE),
- mCloseOnSelect(FALSE),
+ mNumResultsReturned(0),
+ mNearMeListComplete(FALSE),
+ mCloseOnSelect(FALSE),
mExcludeAgentFromSearchResults(FALSE),
- mContextConeOpacity (0.f),
+ mContextConeOpacity (0.f),
mContextConeInAlpha(CONTEXT_CONE_IN_ALPHA),
mContextConeOutAlpha(CONTEXT_CONE_OUT_ALPHA),
mContextConeFadeTime(CONTEXT_CONE_FADE_TIME)
{
- mCommitCallbackRegistrar.add("Refresh.FriendList", boost::bind(&LLFloaterAvatarPicker::populateFriend, this));
+ mCommitCallbackRegistrar.add("Refresh.FriendList", boost::bind(&LLFloaterAvatarPicker::populateFriend, this));
}
BOOL LLFloaterAvatarPicker::postBuild()
{
- getChild<LLLineEditor>("Edit")->setKeystrokeCallback( boost::bind(&LLFloaterAvatarPicker::editKeystroke, this, _1, _2),NULL);
-
- childSetAction("Find", boost::bind(&LLFloaterAvatarPicker::onBtnFind, this));
- getChildView("Find")->setEnabled(FALSE);
- childSetAction("Refresh", boost::bind(&LLFloaterAvatarPicker::onBtnRefresh, this));
- getChild<LLUICtrl>("near_me_range")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onRangeAdjust, this));
-
- LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>("SearchResults");
- searchresults->setDoubleClickCallback( boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
- searchresults->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this));
- getChildView("SearchResults")->setEnabled(FALSE);
-
- LLScrollListCtrl* nearme = getChild<LLScrollListCtrl>("NearMe");
- nearme->setDoubleClickCallback(boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
- nearme->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this));
-
- LLScrollListCtrl* friends = getChild<LLScrollListCtrl>("Friends");
- friends->setDoubleClickCallback(boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
- getChild<LLUICtrl>("Friends")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this));
-
- childSetAction("ok_btn", boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
- getChildView("ok_btn")->setEnabled(FALSE);
- childSetAction("cancel_btn", boost::bind(&LLFloaterAvatarPicker::onBtnClose, this));
-
- getChild<LLUICtrl>("Edit")->setFocus(TRUE);
-
- LLPanel* search_panel = getChild<LLPanel>("SearchPanel");
- if (search_panel)
- {
- // Start searching when Return is pressed in the line editor.
- search_panel->setDefaultBtn("Find");
- }
-
- getChild<LLScrollListCtrl>("SearchResults")->setCommentText(getString("no_results"));
-
- getChild<LLTabContainer>("ResidentChooserTabs")->setCommitCallback(
- boost::bind(&LLFloaterAvatarPicker::onTabChanged, this));
-
- setAllowMultiple(FALSE);
-
- center();
-
- populateFriend();
-
- return TRUE;
+ getChild<LLLineEditor>("Edit")->setKeystrokeCallback( boost::bind(&LLFloaterAvatarPicker::editKeystroke, this, _1, _2),NULL);
+
+ childSetAction("Find", boost::bind(&LLFloaterAvatarPicker::onBtnFind, this));
+ getChildView("Find")->setEnabled(FALSE);
+ childSetAction("Refresh", boost::bind(&LLFloaterAvatarPicker::onBtnRefresh, this));
+ getChild<LLUICtrl>("near_me_range")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onRangeAdjust, this));
+
+ LLScrollListCtrl* searchresults = getChild<LLScrollListCtrl>("SearchResults");
+ searchresults->setDoubleClickCallback( boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
+ searchresults->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this));
+ getChildView("SearchResults")->setEnabled(FALSE);
+
+ LLScrollListCtrl* nearme = getChild<LLScrollListCtrl>("NearMe");
+ nearme->setDoubleClickCallback(boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
+ nearme->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this));
+
+ LLScrollListCtrl* friends = getChild<LLScrollListCtrl>("Friends");
+ friends->setDoubleClickCallback(boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
+ getChild<LLUICtrl>("Friends")->setCommitCallback(boost::bind(&LLFloaterAvatarPicker::onList, this));
+
+ childSetAction("ok_btn", boost::bind(&LLFloaterAvatarPicker::onBtnSelect, this));
+ getChildView("ok_btn")->setEnabled(FALSE);
+ childSetAction("cancel_btn", boost::bind(&LLFloaterAvatarPicker::onBtnClose, this));
+
+ getChild<LLUICtrl>("Edit")->setFocus(TRUE);
+
+ LLPanel* search_panel = getChild<LLPanel>("SearchPanel");
+ if (search_panel)
+ {
+ // Start searching when Return is pressed in the line editor.
+ search_panel->setDefaultBtn("Find");
+ }
+
+ getChild<LLScrollListCtrl>("SearchResults")->setCommentText(getString("no_results"));
+
+ getChild<LLTabContainer>("ResidentChooserTabs")->setCommitCallback(
+ boost::bind(&LLFloaterAvatarPicker::onTabChanged, this));
+
+ setAllowMultiple(FALSE);
+
+ center();
+
+ populateFriend();
+
+ return TRUE;
}
void LLFloaterAvatarPicker::setOkBtnEnableCb(validate_callback_t cb)
{
- mOkButtonValidateSignal.connect(cb);
+ mOkButtonValidateSignal.connect(cb);
}
void LLFloaterAvatarPicker::onTabChanged()
{
- getChildView("ok_btn")->setEnabled(isSelectBtnEnabled());
+ getChildView("ok_btn")->setEnabled(isSelectBtnEnabled());
}
// Destroys the object
LLFloaterAvatarPicker::~LLFloaterAvatarPicker()
{
- gFocusMgr.releaseFocusIfNeeded( this );
+ gFocusMgr.releaseFocusIfNeeded( this );
}
void LLFloaterAvatarPicker::onBtnFind()
{
- find();
+ find();
}
static void getSelectedAvatarData(const LLScrollListCtrl* from, uuid_vec_t& avatar_ids, std::vector<LLAvatarName>& avatar_names)
{
- std::vector<LLScrollListItem*> items = from->getAllSelected();
- for (std::vector<LLScrollListItem*>::iterator iter = items.begin(); iter != items.end(); ++iter)
- {
- LLScrollListItem* item = *iter;
- if (item->getUUID().notNull())
- {
- avatar_ids.push_back(item->getUUID());
-
- std::map<LLUUID, LLAvatarName>::iterator iter = sAvatarNameMap.find(item->getUUID());
- if (iter != sAvatarNameMap.end())
- {
- avatar_names.push_back(iter->second);
- }
- else
- {
- // the only case where it isn't in the name map is friends
- // but it should be in the name cache
- LLAvatarName av_name;
- LLAvatarNameCache::get(item->getUUID(), &av_name);
- avatar_names.push_back(av_name);
- }
- }
- }
+ std::vector<LLScrollListItem*> items = from->getAllSelected();
+ for (std::vector<LLScrollListItem*>::iterator iter = items.begin(); iter != items.end(); ++iter)
+ {
+ LLScrollListItem* item = *iter;
+ if (item->getUUID().notNull())
+ {
+ avatar_ids.push_back(item->getUUID());
+
+ std::map<LLUUID, LLAvatarName>::iterator iter = sAvatarNameMap.find(item->getUUID());
+ if (iter != sAvatarNameMap.end())
+ {
+ avatar_names.push_back(iter->second);
+ }
+ else
+ {
+ // the only case where it isn't in the name map is friends
+ // but it should be in the name cache
+ LLAvatarName av_name;
+ LLAvatarNameCache::get(item->getUUID(), &av_name);
+ avatar_names.push_back(av_name);
+ }
+ }
+ }
}
void LLFloaterAvatarPicker::onBtnSelect()
{
- // If select btn not enabled then do not callback
- if (!isSelectBtnEnabled())
- return;
-
- if(mSelectionCallback)
- {
- std::string acvtive_panel_name;
- LLScrollListCtrl* list = NULL;
- LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
- if(active_panel)
- {
- acvtive_panel_name = active_panel->getName();
- }
- if(acvtive_panel_name == "SearchPanel")
- {
- list = getChild<LLScrollListCtrl>("SearchResults");
- }
- else if(acvtive_panel_name == "NearMePanel")
- {
- list = getChild<LLScrollListCtrl>("NearMe");
- }
- else if (acvtive_panel_name == "FriendsPanel")
- {
- list = getChild<LLScrollListCtrl>("Friends");
- }
-
- if(list)
- {
- uuid_vec_t avatar_ids;
- std::vector<LLAvatarName> avatar_names;
- getSelectedAvatarData(list, avatar_ids, avatar_names);
- mSelectionCallback(avatar_ids, avatar_names);
- }
- }
- getChild<LLScrollListCtrl>("SearchResults")->deselectAllItems(TRUE);
- getChild<LLScrollListCtrl>("NearMe")->deselectAllItems(TRUE);
- getChild<LLScrollListCtrl>("Friends")->deselectAllItems(TRUE);
- if(mCloseOnSelect)
- {
- mCloseOnSelect = FALSE;
- closeFloater();
- }
+ // If select btn not enabled then do not callback
+ if (!isSelectBtnEnabled())
+ return;
+
+ if(mSelectionCallback)
+ {
+ std::string acvtive_panel_name;
+ LLScrollListCtrl* list = NULL;
+ LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
+ if(active_panel)
+ {
+ acvtive_panel_name = active_panel->getName();
+ }
+ if(acvtive_panel_name == "SearchPanel")
+ {
+ list = getChild<LLScrollListCtrl>("SearchResults");
+ }
+ else if(acvtive_panel_name == "NearMePanel")
+ {
+ list = getChild<LLScrollListCtrl>("NearMe");
+ }
+ else if (acvtive_panel_name == "FriendsPanel")
+ {
+ list = getChild<LLScrollListCtrl>("Friends");
+ }
+
+ if(list)
+ {
+ uuid_vec_t avatar_ids;
+ std::vector<LLAvatarName> avatar_names;
+ getSelectedAvatarData(list, avatar_ids, avatar_names);
+ mSelectionCallback(avatar_ids, avatar_names);
+ }
+ }
+ getChild<LLScrollListCtrl>("SearchResults")->deselectAllItems(TRUE);
+ getChild<LLScrollListCtrl>("NearMe")->deselectAllItems(TRUE);
+ getChild<LLScrollListCtrl>("Friends")->deselectAllItems(TRUE);
+ if(mCloseOnSelect)
+ {
+ mCloseOnSelect = FALSE;
+ closeFloater();
+ }
}
void LLFloaterAvatarPicker::onBtnRefresh()
{
- getChild<LLScrollListCtrl>("NearMe")->deleteAllItems();
- getChild<LLScrollListCtrl>("NearMe")->setCommentText(getString("searching"));
- mNearMeListComplete = FALSE;
+ getChild<LLScrollListCtrl>("NearMe")->deleteAllItems();
+ getChild<LLScrollListCtrl>("NearMe")->setCommentText(getString("searching"));
+ mNearMeListComplete = FALSE;
}
void LLFloaterAvatarPicker::onBtnClose()
{
- closeFloater();
+ closeFloater();
}
void LLFloaterAvatarPicker::onRangeAdjust()
{
- onBtnRefresh();
+ onBtnRefresh();
}
void LLFloaterAvatarPicker::onList()
{
- getChildView("ok_btn")->setEnabled(isSelectBtnEnabled());
+ getChildView("ok_btn")->setEnabled(isSelectBtnEnabled());
}
void LLFloaterAvatarPicker::populateNearMe()
{
- BOOL all_loaded = TRUE;
- BOOL empty = TRUE;
- LLScrollListCtrl* near_me_scroller = getChild<LLScrollListCtrl>("NearMe");
- near_me_scroller->deleteAllItems();
-
- uuid_vec_t avatar_ids;
- LLWorld::getInstance()->getAvatars(&avatar_ids, NULL, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange"));
- for(U32 i=0; i<avatar_ids.size(); i++)
- {
- LLUUID& av = avatar_ids[i];
- if(mExcludeAgentFromSearchResults && (av == gAgent.getID())) continue;
- LLSD element;
- element["id"] = av; // value
- LLAvatarName av_name;
-
- if (!LLAvatarNameCache::get(av, &av_name))
- {
- element["columns"][0]["column"] = "name";
- element["columns"][0]["value"] = LLCacheName::getDefaultName();
- all_loaded = FALSE;
- }
- else
- {
- element["columns"][0]["column"] = "name";
- element["columns"][0]["value"] = av_name.getDisplayName();
- element["columns"][1]["column"] = "username";
- element["columns"][1]["value"] = av_name.getUserName();
-
- sAvatarNameMap[av] = av_name;
- }
- near_me_scroller->addElement(element);
- empty = FALSE;
- }
-
- if (empty)
- {
- getChildView("NearMe")->setEnabled(FALSE);
- getChildView("ok_btn")->setEnabled(FALSE);
- near_me_scroller->setCommentText(getString("no_one_near"));
- }
- else
- {
- getChildView("NearMe")->setEnabled(TRUE);
- getChildView("ok_btn")->setEnabled(TRUE);
- near_me_scroller->selectFirstItem();
- onList();
- near_me_scroller->setFocus(TRUE);
- }
-
- if (all_loaded)
- {
- mNearMeListComplete = TRUE;
- }
+ BOOL all_loaded = TRUE;
+ BOOL empty = TRUE;
+ LLScrollListCtrl* near_me_scroller = getChild<LLScrollListCtrl>("NearMe");
+ near_me_scroller->deleteAllItems();
+
+ uuid_vec_t avatar_ids;
+ LLWorld::getInstance()->getAvatars(&avatar_ids, NULL, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange"));
+ for(U32 i=0; i<avatar_ids.size(); i++)
+ {
+ LLUUID& av = avatar_ids[i];
+ if(mExcludeAgentFromSearchResults && (av == gAgent.getID())) continue;
+ LLSD element;
+ element["id"] = av; // value
+ LLAvatarName av_name;
+
+ if (!LLAvatarNameCache::get(av, &av_name))
+ {
+ element["columns"][0]["column"] = "name";
+ element["columns"][0]["value"] = LLCacheName::getDefaultName();
+ all_loaded = FALSE;
+ }
+ else
+ {
+ element["columns"][0]["column"] = "name";
+ element["columns"][0]["value"] = av_name.getDisplayName();
+ element["columns"][1]["column"] = "username";
+ element["columns"][1]["value"] = av_name.getUserName();
+
+ sAvatarNameMap[av] = av_name;
+ }
+ near_me_scroller->addElement(element);
+ empty = FALSE;
+ }
+
+ if (empty)
+ {
+ getChildView("NearMe")->setEnabled(FALSE);
+ getChildView("ok_btn")->setEnabled(FALSE);
+ near_me_scroller->setCommentText(getString("no_one_near"));
+ }
+ else
+ {
+ getChildView("NearMe")->setEnabled(TRUE);
+ getChildView("ok_btn")->setEnabled(TRUE);
+ near_me_scroller->selectFirstItem();
+ onList();
+ near_me_scroller->setFocus(TRUE);
+ }
+
+ if (all_loaded)
+ {
+ mNearMeListComplete = TRUE;
+ }
}
void LLFloaterAvatarPicker::populateFriend()
{
- LLScrollListCtrl* friends_scroller = getChild<LLScrollListCtrl>("Friends");
- friends_scroller->deleteAllItems();
- LLCollectAllBuddies collector;
- LLAvatarTracker::instance().applyFunctor(collector);
- LLCollectAllBuddies::buddy_map_t::iterator it;
-
- for(it = collector.mOnline.begin(); it!=collector.mOnline.end(); it++)
- {
- friends_scroller->addStringUUIDItem(it->second, it->first);
- }
- for(it = collector.mOffline.begin(); it!=collector.mOffline.end(); it++)
- {
- friends_scroller->addStringUUIDItem(it->second, it->first);
- }
- friends_scroller->sortByColumnIndex(0, TRUE);
+ LLScrollListCtrl* friends_scroller = getChild<LLScrollListCtrl>("Friends");
+ friends_scroller->deleteAllItems();
+ LLCollectAllBuddies collector;
+ LLAvatarTracker::instance().applyFunctor(collector);
+ LLCollectAllBuddies::buddy_map_t::iterator it;
+
+ for(it = collector.mOnline.begin(); it!=collector.mOnline.end(); it++)
+ {
+ friends_scroller->addStringUUIDItem(it->second, it->first);
+ }
+ for(it = collector.mOffline.begin(); it!=collector.mOffline.end(); it++)
+ {
+ friends_scroller->addStringUUIDItem(it->second, it->first);
+ }
+ friends_scroller->sortByColumnIndex(0, TRUE);
}
void LLFloaterAvatarPicker::drawFrustum()
@@ -366,42 +366,42 @@ void LLFloaterAvatarPicker::draw()
{
drawFrustum();
- // sometimes it is hard to determine when Select/Ok button should be disabled (see LLAvatarActions::shareWithAvatars).
- // lets check this via mOkButtonValidateSignal callback periodically.
- static LLFrameTimer timer;
- if (timer.hasExpired())
- {
- timer.setTimerExpirySec(0.33f); // three times per second should be enough.
-
- // simulate list changes.
- onList();
- timer.start();
- }
-
- LLFloater::draw();
- if (!mNearMeListComplete && getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel() == getChild<LLPanel>("NearMePanel"))
- {
- populateNearMe();
- }
+ // sometimes it is hard to determine when Select/Ok button should be disabled (see LLAvatarActions::shareWithAvatars).
+ // lets check this via mOkButtonValidateSignal callback periodically.
+ static LLFrameTimer timer;
+ if (timer.hasExpired())
+ {
+ timer.setTimerExpirySec(0.33f); // three times per second should be enough.
+
+ // simulate list changes.
+ onList();
+ timer.start();
+ }
+
+ LLFloater::draw();
+ if (!mNearMeListComplete && getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel() == getChild<LLPanel>("NearMePanel"))
+ {
+ populateNearMe();
+ }
}
BOOL LLFloaterAvatarPicker::visibleItemsSelected() const
{
- LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
-
- if(active_panel == getChild<LLPanel>("SearchPanel"))
- {
- return getChild<LLScrollListCtrl>("SearchResults")->getFirstSelectedIndex() >= 0;
- }
- else if(active_panel == getChild<LLPanel>("NearMePanel"))
- {
- return getChild<LLScrollListCtrl>("NearMe")->getFirstSelectedIndex() >= 0;
- }
- else if(active_panel == getChild<LLPanel>("FriendsPanel"))
- {
- return getChild<LLScrollListCtrl>("Friends")->getFirstSelectedIndex() >= 0;
- }
- return FALSE;
+ LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
+
+ if(active_panel == getChild<LLPanel>("SearchPanel"))
+ {
+ return getChild<LLScrollListCtrl>("SearchResults")->getFirstSelectedIndex() >= 0;
+ }
+ else if(active_panel == getChild<LLPanel>("NearMePanel"))
+ {
+ return getChild<LLScrollListCtrl>("NearMe")->getFirstSelectedIndex() >= 0;
+ }
+ else if(active_panel == getChild<LLPanel>("FriendsPanel"))
+ {
+ return getChild<LLScrollListCtrl>("Friends")->getFirstSelectedIndex() >= 0;
+ }
+ return FALSE;
}
/*static*/
@@ -442,236 +442,236 @@ void LLFloaterAvatarPicker::findCoro(std::string url, LLUUID queryID, std::strin
void LLFloaterAvatarPicker::find()
{
- //clear our stored LLAvatarNames
- sAvatarNameMap.clear();
-
- std::string text = getChild<LLUICtrl>("Edit")->getValue().asString();
-
- size_t separator_index = text.find_first_of(" ._");
- if (separator_index != text.npos)
- {
- std::string first = text.substr(0, separator_index);
- std::string last = text.substr(separator_index+1, text.npos);
- LLStringUtil::trim(last);
- if("Resident" == last)
- {
- text = first;
- }
- }
-
- mQueryID.generate();
-
- std::string url;
- url.reserve(128); // avoid a memory allocation or two
-
- LLViewerRegion* region = gAgent.getRegion();
- if(region)
- {
- url = region->getCapability("AvatarPickerSearch");
- // Prefer use of capabilities to search on both SLID and display name
- if (!url.empty())
- {
- // capability urls don't end in '/', but we need one to parse
- // query parameters correctly
- if (url.size() > 0 && url[url.size()-1] != '/')
- {
- url += "/";
- }
- url += "?page_size=100&names=";
- std::replace(text.begin(), text.end(), '.', ' ');
- url += LLURI::escape(text);
- LL_INFOS() << "avatar picker " << url << LL_ENDL;
+ //clear our stored LLAvatarNames
+ sAvatarNameMap.clear();
+
+ std::string text = getChild<LLUICtrl>("Edit")->getValue().asString();
+
+ size_t separator_index = text.find_first_of(" ._");
+ if (separator_index != text.npos)
+ {
+ std::string first = text.substr(0, separator_index);
+ std::string last = text.substr(separator_index+1, text.npos);
+ LLStringUtil::trim(last);
+ if("Resident" == last)
+ {
+ text = first;
+ }
+ }
+
+ mQueryID.generate();
+
+ std::string url;
+ url.reserve(128); // avoid a memory allocation or two
+
+ LLViewerRegion* region = gAgent.getRegion();
+ if(region)
+ {
+ url = region->getCapability("AvatarPickerSearch");
+ // Prefer use of capabilities to search on both SLID and display name
+ if (!url.empty())
+ {
+ // capability urls don't end in '/', but we need one to parse
+ // query parameters correctly
+ if (url.size() > 0 && url[url.size()-1] != '/')
+ {
+ url += "/";
+ }
+ url += "?page_size=100&names=";
+ std::replace(text.begin(), text.end(), '.', ' ');
+ url += LLURI::escape(text);
+ LL_INFOS() << "avatar picker " << url << LL_ENDL;
LLCoros::instance().launch("LLFloaterAvatarPicker::findCoro",
boost::bind(&LLFloaterAvatarPicker::findCoro, url, mQueryID, getKey().asString()));
- }
- else
- {
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessage("AvatarPickerRequest");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->addUUID("QueryID", mQueryID); // not used right now
- msg->nextBlock("Data");
- msg->addString("Name", text);
- gAgent.sendReliableMessage();
- }
- }
- getChild<LLScrollListCtrl>("SearchResults")->deleteAllItems();
- getChild<LLScrollListCtrl>("SearchResults")->setCommentText(getString("searching"));
-
- getChildView("ok_btn")->setEnabled(FALSE);
- mNumResultsReturned = 0;
+ }
+ else
+ {
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessage("AvatarPickerRequest");
+ msg->nextBlock("AgentData");
+ msg->addUUID("AgentID", gAgent.getID());
+ msg->addUUID("SessionID", gAgent.getSessionID());
+ msg->addUUID("QueryID", mQueryID); // not used right now
+ msg->nextBlock("Data");
+ msg->addString("Name", text);
+ gAgent.sendReliableMessage();
+ }
+ }
+ getChild<LLScrollListCtrl>("SearchResults")->deleteAllItems();
+ getChild<LLScrollListCtrl>("SearchResults")->setCommentText(getString("searching"));
+
+ getChildView("ok_btn")->setEnabled(FALSE);
+ mNumResultsReturned = 0;
}
void LLFloaterAvatarPicker::setAllowMultiple(BOOL allow_multiple)
{
- getChild<LLScrollListCtrl>("SearchResults")->setAllowMultipleSelection(allow_multiple);
- getChild<LLScrollListCtrl>("NearMe")->setAllowMultipleSelection(allow_multiple);
- getChild<LLScrollListCtrl>("Friends")->setAllowMultipleSelection(allow_multiple);
+ getChild<LLScrollListCtrl>("SearchResults")->setAllowMultipleSelection(allow_multiple);
+ getChild<LLScrollListCtrl>("NearMe")->setAllowMultipleSelection(allow_multiple);
+ getChild<LLScrollListCtrl>("Friends")->setAllowMultipleSelection(allow_multiple);
}
LLScrollListCtrl* LLFloaterAvatarPicker::getActiveList()
{
- std::string acvtive_panel_name;
- LLScrollListCtrl* list = NULL;
- LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
- if(active_panel)
- {
- acvtive_panel_name = active_panel->getName();
- }
- if(acvtive_panel_name == "SearchPanel")
- {
- list = getChild<LLScrollListCtrl>("SearchResults");
- }
- else if(acvtive_panel_name == "NearMePanel")
- {
- list = getChild<LLScrollListCtrl>("NearMe");
- }
- else if (acvtive_panel_name == "FriendsPanel")
- {
- list = getChild<LLScrollListCtrl>("Friends");
- }
- return list;
+ std::string acvtive_panel_name;
+ LLScrollListCtrl* list = NULL;
+ LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
+ if(active_panel)
+ {
+ acvtive_panel_name = active_panel->getName();
+ }
+ if(acvtive_panel_name == "SearchPanel")
+ {
+ list = getChild<LLScrollListCtrl>("SearchResults");
+ }
+ else if(acvtive_panel_name == "NearMePanel")
+ {
+ list = getChild<LLScrollListCtrl>("NearMe");
+ }
+ else if (acvtive_panel_name == "FriendsPanel")
+ {
+ list = getChild<LLScrollListCtrl>("Friends");
+ }
+ return list;
}
BOOL LLFloaterAvatarPicker::handleDragAndDrop(S32 x, S32 y, MASK mask,
- BOOL drop, EDragAndDropType cargo_type,
- void *cargo_data, EAcceptance *accept,
- std::string& tooltip_msg)
+ BOOL drop, EDragAndDropType cargo_type,
+ void *cargo_data, EAcceptance *accept,
+ std::string& tooltip_msg)
{
- LLScrollListCtrl* list = getActiveList();
- if(list)
- {
- LLRect rc_list;
- LLRect rc_point(x,y,x,y);
- if (localRectToOtherView(rc_point, &rc_list, list))
- {
- // Keep selected only one item
- list->deselectAllItems(TRUE);
- list->selectItemAt(rc_list.mLeft, rc_list.mBottom, mask);
- LLScrollListItem* selection = list->getFirstSelected();
- if (selection)
- {
- LLUUID session_id = LLUUID::null;
- LLUUID dest_agent_id = selection->getUUID();
- std::string avatar_name = selection->getColumn(0)->getValue().asString();
- if (dest_agent_id.notNull() && dest_agent_id != gAgentID)
- {
- if (drop)
- {
- // Start up IM before give the item
- session_id = gIMMgr->addSession(avatar_name, IM_NOTHING_SPECIAL, dest_agent_id);
- }
- return LLToolDragAndDrop::handleGiveDragAndDrop(dest_agent_id, session_id, drop,
- cargo_type, cargo_data, accept, getName());
- }
- }
- }
- }
- *accept = ACCEPT_NO;
- return TRUE;
+ LLScrollListCtrl* list = getActiveList();
+ if(list)
+ {
+ LLRect rc_list;
+ LLRect rc_point(x,y,x,y);
+ if (localRectToOtherView(rc_point, &rc_list, list))
+ {
+ // Keep selected only one item
+ list->deselectAllItems(TRUE);
+ list->selectItemAt(rc_list.mLeft, rc_list.mBottom, mask);
+ LLScrollListItem* selection = list->getFirstSelected();
+ if (selection)
+ {
+ LLUUID session_id = LLUUID::null;
+ LLUUID dest_agent_id = selection->getUUID();
+ std::string avatar_name = selection->getColumn(0)->getValue().asString();
+ if (dest_agent_id.notNull() && dest_agent_id != gAgentID)
+ {
+ if (drop)
+ {
+ // Start up IM before give the item
+ session_id = gIMMgr->addSession(avatar_name, IM_NOTHING_SPECIAL, dest_agent_id);
+ }
+ return LLToolDragAndDrop::handleGiveDragAndDrop(dest_agent_id, session_id, drop,
+ cargo_type, cargo_data, accept, getName());
+ }
+ }
+ }
+ }
+ *accept = ACCEPT_NO;
+ return TRUE;
}
void LLFloaterAvatarPicker::openFriendsTab()
{
- LLTabContainer* tab_container = getChild<LLTabContainer>("ResidentChooserTabs");
- if (tab_container == NULL)
- {
- llassert(tab_container != NULL);
- return;
- }
-
- tab_container->selectTabByName("FriendsPanel");
+ LLTabContainer* tab_container = getChild<LLTabContainer>("ResidentChooserTabs");
+ if (tab_container == NULL)
+ {
+ llassert(tab_container != NULL);
+ return;
+ }
+
+ tab_container->selectTabByName("FriendsPanel");
}
-// static
+// static
void LLFloaterAvatarPicker::processAvatarPickerReply(LLMessageSystem* msg, void**)
{
- LLUUID agent_id;
- LLUUID query_id;
- LLUUID avatar_id;
- std::string first_name;
- std::string last_name;
-
- msg->getUUID("AgentData", "AgentID", agent_id);
- msg->getUUID("AgentData", "QueryID", query_id);
-
- // Not for us
- if (agent_id != gAgent.getID()) return;
-
- LLFloaterAvatarPicker* floater = LLFloaterReg::findTypedInstance<LLFloaterAvatarPicker>("avatar_picker");
-
- // floater is closed or these are not results from our last request
- if (NULL == floater || query_id != floater->mQueryID)
- {
- return;
- }
-
- LLScrollListCtrl* search_results = floater->getChild<LLScrollListCtrl>("SearchResults");
-
- // clear "Searching" label on first results
- if (floater->mNumResultsReturned++ == 0)
- {
- search_results->deleteAllItems();
- }
-
- BOOL found_one = FALSE;
- S32 num_new_rows = msg->getNumberOfBlocks("Data");
- for (S32 i = 0; i < num_new_rows; i++)
- {
- msg->getUUIDFast( _PREHASH_Data,_PREHASH_AvatarID, avatar_id, i);
- msg->getStringFast(_PREHASH_Data,_PREHASH_FirstName, first_name, i);
- msg->getStringFast(_PREHASH_Data,_PREHASH_LastName, last_name, i);
-
- if (avatar_id != agent_id || !floater->isExcludeAgentFromSearchResults()) // exclude agent from search results?
- {
- std::string avatar_name;
- if (avatar_id.isNull())
- {
- LLStringUtil::format_map_t map;
- map["[TEXT]"] = floater->getChild<LLUICtrl>("Edit")->getValue().asString();
- avatar_name = floater->getString("not_found", map);
- search_results->setEnabled(FALSE);
- floater->getChildView("ok_btn")->setEnabled(FALSE);
- }
- else
- {
- avatar_name = LLCacheName::buildFullName(first_name, last_name);
- search_results->setEnabled(TRUE);
- found_one = TRUE;
-
- LLAvatarName av_name;
- av_name.fromString(avatar_name);
- const LLUUID& agent_id = avatar_id;
- sAvatarNameMap[agent_id] = av_name;
-
- }
- LLSD element;
- element["id"] = avatar_id; // value
- element["columns"][0]["column"] = "name";
- element["columns"][0]["value"] = avatar_name;
- search_results->addElement(element);
- }
- }
-
- if (found_one)
- {
- floater->getChildView("ok_btn")->setEnabled(TRUE);
- search_results->selectFirstItem();
- floater->onList();
- search_results->setFocus(TRUE);
- }
+ LLUUID agent_id;
+ LLUUID query_id;
+ LLUUID avatar_id;
+ std::string first_name;
+ std::string last_name;
+
+ msg->getUUID("AgentData", "AgentID", agent_id);
+ msg->getUUID("AgentData", "QueryID", query_id);
+
+ // Not for us
+ if (agent_id != gAgent.getID()) return;
+
+ LLFloaterAvatarPicker* floater = LLFloaterReg::findTypedInstance<LLFloaterAvatarPicker>("avatar_picker");
+
+ // floater is closed or these are not results from our last request
+ if (NULL == floater || query_id != floater->mQueryID)
+ {
+ return;
+ }
+
+ LLScrollListCtrl* search_results = floater->getChild<LLScrollListCtrl>("SearchResults");
+
+ // clear "Searching" label on first results
+ if (floater->mNumResultsReturned++ == 0)
+ {
+ search_results->deleteAllItems();
+ }
+
+ BOOL found_one = FALSE;
+ S32 num_new_rows = msg->getNumberOfBlocks("Data");
+ for (S32 i = 0; i < num_new_rows; i++)
+ {
+ msg->getUUIDFast( _PREHASH_Data,_PREHASH_AvatarID, avatar_id, i);
+ msg->getStringFast(_PREHASH_Data,_PREHASH_FirstName, first_name, i);
+ msg->getStringFast(_PREHASH_Data,_PREHASH_LastName, last_name, i);
+
+ if (avatar_id != agent_id || !floater->isExcludeAgentFromSearchResults()) // exclude agent from search results?
+ {
+ std::string avatar_name;
+ if (avatar_id.isNull())
+ {
+ LLStringUtil::format_map_t map;
+ map["[TEXT]"] = floater->getChild<LLUICtrl>("Edit")->getValue().asString();
+ avatar_name = floater->getString("not_found", map);
+ search_results->setEnabled(FALSE);
+ floater->getChildView("ok_btn")->setEnabled(FALSE);
+ }
+ else
+ {
+ avatar_name = LLCacheName::buildFullName(first_name, last_name);
+ search_results->setEnabled(TRUE);
+ found_one = TRUE;
+
+ LLAvatarName av_name;
+ av_name.fromString(avatar_name);
+ const LLUUID& agent_id = avatar_id;
+ sAvatarNameMap[agent_id] = av_name;
+
+ }
+ LLSD element;
+ element["id"] = avatar_id; // value
+ element["columns"][0]["column"] = "name";
+ element["columns"][0]["value"] = avatar_name;
+ search_results->addElement(element);
+ }
+ }
+
+ if (found_one)
+ {
+ floater->getChildView("ok_btn")->setEnabled(TRUE);
+ search_results->selectFirstItem();
+ floater->onList();
+ search_results->setFocus(TRUE);
+ }
}
void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD& content)
{
- // Check for out-of-date query
- if (query_id == mQueryID)
- {
- LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>("SearchResults");
+ // Check for out-of-date query
+ if (query_id == mQueryID)
+ {
+ LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>("SearchResults");
// clear "Searching" label on first results
search_results->deleteAllItems();
@@ -734,81 +734,81 @@ void LLFloaterAvatarPicker::processResponse(const LLUUID& query_id, const LLSD&
search_results->setFocus(TRUE);
}
}
- }
+ }
}
void LLFloaterAvatarPicker::editKeystroke(LLLineEditor* caller, void* user_data)
{
- getChildView("Find")->setEnabled(caller->getText().size() > 0);
+ getChildView("Find")->setEnabled(caller->getText().size() > 0);
}
// virtual
BOOL LLFloaterAvatarPicker::handleKeyHere(KEY key, MASK mask)
{
- if (key == KEY_RETURN && mask == MASK_NONE)
- {
- if (getChild<LLUICtrl>("Edit")->hasFocus())
- {
- onBtnFind();
- }
- else
- {
- onBtnSelect();
- }
- return TRUE;
- }
- else if (key == KEY_ESCAPE && mask == MASK_NONE)
- {
- closeFloater();
- return TRUE;
- }
-
- return LLFloater::handleKeyHere(key, mask);
+ if (key == KEY_RETURN && mask == MASK_NONE)
+ {
+ if (getChild<LLUICtrl>("Edit")->hasFocus())
+ {
+ onBtnFind();
+ }
+ else
+ {
+ onBtnSelect();
+ }
+ return TRUE;
+ }
+ else if (key == KEY_ESCAPE && mask == MASK_NONE)
+ {
+ closeFloater();
+ return TRUE;
+ }
+
+ return LLFloater::handleKeyHere(key, mask);
}
bool LLFloaterAvatarPicker::isSelectBtnEnabled()
{
- bool ret_val = visibleItemsSelected();
-
- if ( ret_val && !isMinimized())
- {
- std::string acvtive_panel_name;
- LLScrollListCtrl* list = NULL;
- LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
-
- if(active_panel)
- {
- acvtive_panel_name = active_panel->getName();
- }
-
- if(acvtive_panel_name == "SearchPanel")
- {
- list = getChild<LLScrollListCtrl>("SearchResults");
- }
- else if(acvtive_panel_name == "NearMePanel")
- {
- list = getChild<LLScrollListCtrl>("NearMe");
- }
- else if (acvtive_panel_name == "FriendsPanel")
- {
- list = getChild<LLScrollListCtrl>("Friends");
- }
-
- if(list)
- {
- uuid_vec_t avatar_ids;
- std::vector<LLAvatarName> avatar_names;
- getSelectedAvatarData(list, avatar_ids, avatar_names);
- if (avatar_ids.size() >= 1)
- {
- ret_val = mOkButtonValidateSignal.num_slots()?mOkButtonValidateSignal(avatar_ids):true;
- }
- else
- {
- ret_val = false;
- }
- }
- }
-
- return ret_val;
+ bool ret_val = visibleItemsSelected();
+
+ if ( ret_val && !isMinimized())
+ {
+ std::string acvtive_panel_name;
+ LLScrollListCtrl* list = NULL;
+ LLPanel* active_panel = getChild<LLTabContainer>("ResidentChooserTabs")->getCurrentPanel();
+
+ if(active_panel)
+ {
+ acvtive_panel_name = active_panel->getName();
+ }
+
+ if(acvtive_panel_name == "SearchPanel")
+ {
+ list = getChild<LLScrollListCtrl>("SearchResults");
+ }
+ else if(acvtive_panel_name == "NearMePanel")
+ {
+ list = getChild<LLScrollListCtrl>("NearMe");
+ }
+ else if (acvtive_panel_name == "FriendsPanel")
+ {
+ list = getChild<LLScrollListCtrl>("Friends");
+ }
+
+ if(list)
+ {
+ uuid_vec_t avatar_ids;
+ std::vector<LLAvatarName> avatar_names;
+ getSelectedAvatarData(list, avatar_ids, avatar_names);
+ if (avatar_ids.size() >= 1)
+ {
+ ret_val = mOkButtonValidateSignal.num_slots()?mOkButtonValidateSignal(avatar_ids):true;
+ }
+ else
+ {
+ ret_val = false;
+ }
+ }
+ }
+
+ return ret_val;
}