diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp index 81f4543545..4bc92a35d3 100644 --- a/indra/newview/llfloatermap.cpp +++ b/indra/newview/llfloatermap.cpp @@ -102,6 +102,9 @@ BOOL LLFloaterMap::postBuild() registrar.add("Minimap.Zoom", boost::bind(&LLFloaterMap::handleZoom, this, _2)); registrar.add("Minimap.Tracker", boost::bind(&LLFloaterMap::handleStopTracking, this, _2)); + registrar.add("Minimap.Mark", boost::bind(&LLFloaterMap::handleMark, this, _2)); + registrar.add("Minimap.ClearMarks", boost::bind(&LLFloaterMap::handleClearMarks, this)); + mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); if (mPopupMenu && !LLTracker::isTracking(0)) { @@ -160,6 +163,8 @@ BOOL LLFloaterMap::handleDoubleClick( S32 x, S32 y, MASK mask ) BOOL LLFloaterMap::handleRightMouseDown(S32 x, S32 y, MASK mask) { + mMap->saveClosestAgentAtLastRightClick(); + if (mPopupMenu) { mPopupMenu->buildDrawLabels(); @@ -331,3 +336,13 @@ void LLFloaterMap::setMinimized(BOOL b) setTitle(""); } } + +void LLFloaterMap::handleMark(const LLSD& userdata) +{ + mMap->setAvatarMark(userdata); +} + +void LLFloaterMap::handleClearMarks() +{ + mMap->clearAvatarMarks(); +} diff --git a/indra/newview/llfloatermap.h b/indra/newview/llfloatermap.h index 4cbb48fb3e..8349fe685f 100644 --- a/indra/newview/llfloatermap.h +++ b/indra/newview/llfloatermap.h @@ -57,6 +57,8 @@ private: void handleStopTracking (const LLSD& userdata); void setDirectionPos( LLTextBox* text_box, F32 rotation ); void updateMinorDirections(); + void handleMark(const LLSD& userdata); + void handleClearMarks(); void stretchMiniMap(S32 width,S32 height); diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 2ee84ed5ff..3046ea30fc 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -88,6 +88,9 @@ const S32 MOUSE_DRAG_SLOP = 2; // How far the mouse needs to move before we thi const F32 WIDTH_PIXELS = 2.f; const S32 CIRCLE_STEPS = 100; +std::map LLNetMap::sAvatarMarksMap; + + LLNetMap::LLNetMap (const Params & p) : LLUICtrl (p), mBackgroundColor (p.bg_color()), @@ -129,6 +132,9 @@ BOOL LLNetMap::postBuild() registrar.add("Minimap.Zoom", boost::bind(&LLNetMap::handleZoom, this, _2)); registrar.add("Minimap.Tracker", boost::bind(&LLNetMap::handleStopTracking, this, _2)); + registrar.add("Minimap.Mark", boost::bind(&LLNetMap::handleMark, this, _2)); + registrar.add("Minimap.ClearMarks", boost::bind(&LLNetMap::handleClearMarks, this)); + mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); if (mPopupMenu && !LLTracker::isTracking(0)) { @@ -433,6 +439,12 @@ void LLNetMap::draw() isHeightUnknown = false; } } + + // Mark Avatars with special colors + if (LLNetMap::sAvatarMarksMap.find(uuid) != LLNetMap::sAvatarMarksMap.end()) + { + color = LLNetMap::sAvatarMarksMap[uuid]; + } } // Ansariel: Moved down here so we can take precise @@ -1034,6 +1046,8 @@ BOOL LLNetMap::handleMouseUp( S32 x, S32 y, MASK mask ) BOOL LLNetMap::handleRightMouseDown(S32 x, S32 y, MASK mask) { + saveClosestAgentAtLastRightClick(); + if (mPopupMenu) { mPopupMenu->buildDrawLabels(); @@ -1164,3 +1178,34 @@ void LLNetMap::handleStopTracking (const LLSD& userdata) LLTracker::stopTracking ((void*)LLTracker::isTracking(NULL)); } } + +void LLNetMap::handleMark(const LLSD& userdata) +{ + setAvatarMark(userdata); +} + +void LLNetMap::handleClearMarks() +{ + clearAvatarMarks(); +} + +void LLNetMap::setAvatarMark(const LLSD& userdata) +{ + if (mClosestAgentAtLastRightClick.notNull()) + { + // Use the name as color definition name from colors.xml + LLColor4 color = LLUIColorTable::instance().getColor(userdata.asString(), LLColor4::green); + LLNetMap::sAvatarMarksMap[mClosestAgentAtLastRightClick] = color; + llinfos << "Minimap: Marking " << mClosestAgentAtLastRightClick.asString() << " in " << userdata.asString() << llendl; + } +} + +void LLNetMap::saveClosestAgentAtLastRightClick() +{ + mClosestAgentAtLastRightClick = mClosestAgentToCursor; +} + +void LLNetMap::clearAvatarMarks() +{ + LLNetMap::sAvatarMarksMap.clear(); +} diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h index 6b927d00ca..1d98c51022 100644 --- a/indra/newview/llnetmap.h +++ b/indra/newview/llnetmap.h @@ -129,12 +129,19 @@ private: std::string mToolTipMsg; + static std::map sAvatarMarksMap; + public: void setSelected(uuid_vec_t uuids) { gmSelected=uuids; }; + void setAvatarMark(const LLSD& userdata); + void saveClosestAgentAtLastRightClick(); + void clearAvatarMarks(); private: void handleZoom(const LLSD& userdata); void handleStopTracking (const LLSD& userdata); + void handleMark(const LLSD& userdata); + void handleClearMarks(); LLMenuGL* mPopupMenu; uuid_vec_t gmSelected; diff --git a/indra/newview/skins/default/xui/de/menu_mini_map.xml b/indra/newview/skins/default/xui/de/menu_mini_map.xml index 2e0d72c40c..4f31e6b361 100644 --- a/indra/newview/skins/default/xui/de/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/de/menu_mini_map.xml @@ -6,6 +6,14 @@ + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/menu_mini_map.xml b/indra/newview/skins/default/xui/en/menu_mini_map.xml index f9cad9dfdd..c1cf59fc96 100644 --- a/indra/newview/skins/default/xui/en/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/en/menu_mini_map.xml @@ -65,6 +65,43 @@ parameter="MiniMapChatRing" /> + + + + + + + + + + + + + + + + + +