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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +