diff --git a/indra/newview/fsradarmenu.cpp b/indra/newview/fsradarmenu.cpp
index 452076d5b6..1f894fb296 100644
--- a/indra/newview/fsradarmenu.cpp
+++ b/indra/newview/fsradarmenu.cpp
@@ -39,6 +39,7 @@
#include "llagentdata.h" // for gAgentID
#include "llavataractions.h"
#include "llcallingcard.h" // for LLAvatarTracker
+#include "llnetmap.h"
#include "llviewermenu.h" // for gMenuHolder
#include "rlvhandler.h"
@@ -85,6 +86,9 @@ LLContextMenu* FSRadarMenu::createMenu()
registrar.add("Avatar.AddToContactSet", boost::bind(&FSRadarMenu::addToContactSet, this));
registrar.add("Nearby.People.TeleportToAvatar", boost::bind(&FSRadarMenu::teleportToAvatar, this));
registrar.add("Nearby.People.TrackAvatar", boost::bind(&FSRadarMenu::onTrackAvatarMenuItemClick, this));
+ registrar.add("Nearby.People.SetAvatarMarkColor", boost::bind(&LLNetMap::setAvatarMarkColor, id, _2));
+ registrar.add("Nearby.People.ClearAvatarMarkColor", boost::bind(&LLNetMap::clearAvatarMarkColor, id));
+ registrar.add("Nearby.People.ClearAllAvatarMarkColors", boost::bind(&LLNetMap::clearAvatarMarkColors ));
enable_registrar.add("Avatar.EnableItem", boost::bind(&FSRadarMenu::enableContextMenuItem, this, _2));
enable_registrar.add("Avatar.CheckItem", boost::bind(&FSRadarMenu::checkContextMenuItem, this, _2));
@@ -119,6 +123,9 @@ LLContextMenu* FSRadarMenu::createMenu()
registrar.add("Avatar.Derender", boost::bind(&LLAvatarActions::derenderMultiple, mUUIDs, false));
registrar.add("Avatar.DerenderPermanent", boost::bind(&LLAvatarActions::derenderMultiple, mUUIDs, true));
registrar.add("Avatar.AddToContactSet", boost::bind(&FSRadarMenu::addToContactSet, this));
+ registrar.add("Nearby.People.SetAvatarMarkColor", boost::bind(&LLNetMap::setAvatarMarkColors, mUUIDs, _2));
+ registrar.add("Nearby.People.ClearAvatarMarkColor", boost::bind(&LLNetMap::clearAvatarMarkColors, mUUIDs));
+ registrar.add("Nearby.People.ClearAllAvatarMarkColors", boost::bind(&LLNetMap::clearAvatarMarkColors ));
enable_registrar.add("Avatar.EnableItem", boost::bind(&FSRadarMenu::enableContextMenuItem, this, _2));
enable_registrar.add("Avatar.VisibleFreezeEject", boost::bind(&LLAvatarActions::canLandFreezeOrEjectMultiple, mUUIDs, false));
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 06fdddf457..33c6eabe91 100755
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -1718,31 +1718,20 @@ void LLNetMap::handleZoom(const LLSD& userdata)
// Mark avatar feature
void LLNetMap::handleMark(const LLSD& userdata)
{
- // Use the name as color definition name from colors.xml
- LLColor4 color = LLUIColorTable::instance().getColor(userdata.asString(), LLColor4::green);
- for (uuid_vec_t::iterator it = mClosestAgentsRightClick.begin(); it != mClosestAgentsRightClick.end(); ++it)
- {
- sAvatarMarksMap[*it] = color;
- }
+ setAvatarMarkColors(mClosestAgentsRightClick, userdata);
}
void LLNetMap::handleClearMark()
{
- for (uuid_vec_t::iterator it = mClosestAgentsRightClick.begin(); it != mClosestAgentsRightClick.end(); ++it)
- {
- avatar_marks_map_t::iterator found = sAvatarMarksMap.find(*it);
- if (found != sAvatarMarksMap.end())
- {
- sAvatarMarksMap.erase(found);
- }
- }
+ clearAvatarMarkColors(mClosestAgentsRightClick);
}
void LLNetMap::handleClearMarks()
{
- sAvatarMarksMap.clear();
+ clearAvatarMarkColors();
}
+// static
bool LLNetMap::getAvatarMarkColor(const LLUUID& avatar_id, LLColor4& color)
{
avatar_marks_map_t::iterator found = sAvatarMarksMap.find(avatar_id);
@@ -1754,6 +1743,52 @@ bool LLNetMap::getAvatarMarkColor(const LLUUID& avatar_id, LLColor4& color)
return false;
}
+// static
+void LLNetMap::setAvatarMarkColor(const LLUUID& avatar_id, const LLSD& color)
+{
+ uuid_vec_t ids;
+ ids.push_back(avatar_id);
+ setAvatarMarkColors(ids, color);
+}
+
+// static
+void LLNetMap::setAvatarMarkColors(const uuid_vec_t& avatar_ids, const LLSD& color)
+{
+ // Use the name as color definition name from colors.xml
+ LLColor4 mark_color = LLUIColorTable::instance().getColor(color.asString(), LLColor4::green);
+
+ for (uuid_vec_t::const_iterator it = avatar_ids.begin(); it != avatar_ids.end(); ++it)
+ {
+ sAvatarMarksMap[*it] = mark_color;
+ }
+}
+
+// static
+void LLNetMap::clearAvatarMarkColor(const LLUUID& avatar_id)
+{
+ uuid_vec_t ids;
+ ids.push_back(avatar_id);
+ clearAvatarMarkColors(ids);
+}
+
+// static
+void LLNetMap::clearAvatarMarkColors(const uuid_vec_t& avatar_ids)
+{
+ for (uuid_vec_t::const_iterator it = avatar_ids.begin(); it != avatar_ids.end(); ++it)
+ {
+ avatar_marks_map_t::iterator found = sAvatarMarksMap.find(*it);
+ if (found != sAvatarMarksMap.end())
+ {
+ sAvatarMarksMap.erase(found);
+ }
+ }
+}
+
+// static
+void LLNetMap::clearAvatarMarkColors()
+{
+ sAvatarMarksMap.clear();
+}
//
void LLNetMap::handleCam()
diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h
index a84b150388..89c1166dd6 100755
--- a/indra/newview/llnetmap.h
+++ b/indra/newview/llnetmap.h
@@ -102,6 +102,12 @@ public:
// Mark avatar feature
static bool getAvatarMarkColor(const LLUUID& avatar_id, LLColor4& color);
+ static void setAvatarMarkColor(const LLUUID& avatar_id, const LLSD& color);
+ static void setAvatarMarkColors(const uuid_vec_t& avatar_ids, const LLSD& color);
+ static void clearAvatarMarkColor(const LLUUID& avatar_id);
+ static void clearAvatarMarkColors(const uuid_vec_t& avatar_ids);
+ static void clearAvatarMarkColors();
+ //
private:
const LLVector3d& getObjectImageCenterGlobal() { return mObjectImageCenterGlobal; }
diff --git a/indra/newview/skins/default/xui/en/menu_fs_radar.xml b/indra/newview/skins/default/xui/en/menu_fs_radar.xml
index 7e480d6bbc..f8d73719a9 100644
--- a/indra/newview/skins/default/xui/en/menu_fs_radar.xml
+++ b/indra/newview/skins/default/xui/en/menu_fs_radar.xml
@@ -70,6 +70,57 @@
+
+