Embed Minimap into the Nearby list of the People Sidebar
parent
3eba59e963
commit
0d5b0cad14
|
|
@ -387,6 +387,7 @@ Jonathan Yap
|
|||
VWR-17801
|
||||
VWR-24347
|
||||
STORM-844
|
||||
STORM-643
|
||||
Kage Pixel
|
||||
VWR-11
|
||||
Ken March
|
||||
|
|
@ -769,6 +770,7 @@ Twisted Laws
|
|||
STORM-466
|
||||
STORM-467
|
||||
STORM-844
|
||||
STORM-643
|
||||
Vadim Bigbear
|
||||
VWR-2681
|
||||
Vector Hastings
|
||||
|
|
|
|||
|
|
@ -83,7 +83,8 @@ LLFloaterMap::~LLFloaterMap()
|
|||
BOOL LLFloaterMap::postBuild()
|
||||
{
|
||||
mMap = getChild<LLNetMap>("Net Map");
|
||||
mMap->setToolTipMsg(getString("ToolTipMsg"));
|
||||
mMap->setToolTipMsg(gSavedSettings.getBOOL("DoubleClickTeleport") ?
|
||||
getString("AltToolTipMsg") : getString("ToolTipMsg"));
|
||||
sendChildToBack(mMap);
|
||||
|
||||
mTextBoxNorth = getChild<LLTextBox> ("floater_map_north");
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@
|
|||
#include "llagentcamera.h"
|
||||
#include "llappviewer.h" // for gDisconnected
|
||||
#include "llcallingcard.h" // LLAvatarTracker
|
||||
#include "llfloaterworldmap.h"
|
||||
#include "lltracker.h"
|
||||
#include "llsurface.h"
|
||||
#include "llviewercamera.h"
|
||||
|
|
@ -91,7 +92,8 @@ LLNetMap::LLNetMap (const Params & p)
|
|||
mObjectImagep(),
|
||||
mClosestAgentToCursor(),
|
||||
mClosestAgentAtLastRightClick(),
|
||||
mToolTipMsg()
|
||||
mToolTipMsg(),
|
||||
mPopupMenu(NULL)
|
||||
{
|
||||
mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS);
|
||||
setScale(gSavedSettings.getF32("MiniMapScale"));
|
||||
|
|
@ -102,6 +104,21 @@ LLNetMap::~LLNetMap()
|
|||
gSavedSettings.setF32("MiniMapScale", mScale);
|
||||
}
|
||||
|
||||
BOOL LLNetMap::postBuild()
|
||||
{
|
||||
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
|
||||
|
||||
registrar.add("Minimap.Zoom", boost::bind(&LLNetMap::handleZoom, this, _2));
|
||||
registrar.add("Minimap.Tracker", boost::bind(&LLNetMap::handleStopTracking, this, _2));
|
||||
|
||||
mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
|
||||
if (mPopupMenu && !LLTracker::isTracking(0))
|
||||
{
|
||||
mPopupMenu->setItemEnabled ("Stop Tracking", false);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLNetMap::setScale( F32 scale )
|
||||
{
|
||||
scale = llclamp(scale, MAP_SCALE_MIN, MAP_SCALE_MAX);
|
||||
|
|
@ -354,16 +371,49 @@ void LLNetMap::draw()
|
|||
|
||||
pos_map = globalPosToView(pos_global);
|
||||
|
||||
LLUUID uuid(NULL);
|
||||
BOOL show_as_friend = FALSE;
|
||||
if( i < regionp->mMapAvatarIDs.count())
|
||||
{
|
||||
show_as_friend = (LLAvatarTracker::instance().getBuddyInfo(regionp->mMapAvatarIDs.get(i)) != NULL);
|
||||
uuid = regionp->mMapAvatarIDs.get(i);
|
||||
show_as_friend = (LLAvatarTracker::instance().getBuddyInfo(uuid) != NULL);
|
||||
}
|
||||
|
||||
LLColor4 color = show_as_friend ? map_avatar_friend_color : map_avatar_color;
|
||||
LLWorldMapView::drawAvatar(
|
||||
pos_map.mV[VX], pos_map.mV[VY],
|
||||
show_as_friend ? map_avatar_friend_color : map_avatar_color,
|
||||
color,
|
||||
pos_map.mV[VZ], mDotRadius);
|
||||
|
||||
if(uuid.notNull())
|
||||
{
|
||||
bool selected = false;
|
||||
uuid_vec_t::iterator sel_iter = gmSelected.begin();
|
||||
for (; sel_iter != gmSelected.end(); sel_iter++)
|
||||
{
|
||||
if(*sel_iter == uuid)
|
||||
{
|
||||
selected = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(selected)
|
||||
{
|
||||
if( (pos_map.mV[VX] < 0) ||
|
||||
(pos_map.mV[VY] < 0) ||
|
||||
(pos_map.mV[VX] >= getRect().getWidth()) ||
|
||||
(pos_map.mV[VY] >= getRect().getHeight()) )
|
||||
{
|
||||
S32 x = llround( pos_map.mV[VX] );
|
||||
S32 y = llround( pos_map.mV[VY] );
|
||||
LLWorldMapView::drawTrackingCircle( getRect(), x, y, color, 1, 10);
|
||||
} else
|
||||
{
|
||||
LLWorldMapView::drawTrackingDot(pos_map.mV[VX],pos_map.mV[VY],color,0.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
F32 dist_to_cursor = dist_vec(LLVector2(pos_map.mV[VX], pos_map.mV[VY]),
|
||||
LLVector2(local_mouse_x,local_mouse_y));
|
||||
if(dist_to_cursor < min_pick_dist && dist_to_cursor < closest_dist)
|
||||
|
|
@ -460,6 +510,13 @@ void LLNetMap::draw()
|
|||
gGL.popUIMatrix();
|
||||
|
||||
LLUICtrl::draw();
|
||||
|
||||
if (LLTracker::isTracking(0))
|
||||
{
|
||||
mPopupMenu->setItemEnabled ("Stop Tracking", true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent)
|
||||
|
|
@ -600,7 +657,6 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, MASK mask )
|
|||
args["[REGION]"] = region_name;
|
||||
std::string msg = mToolTipMsg;
|
||||
LLStringUtil::format(msg, args);
|
||||
|
||||
LLToolTipMgr::instance().show(LLToolTip::Params()
|
||||
.message(msg)
|
||||
.sticky_rect(sticky_rect));
|
||||
|
|
@ -793,6 +849,9 @@ BOOL LLNetMap::handleMouseDown( S32 x, S32 y, MASK mask )
|
|||
|
||||
BOOL LLNetMap::handleMouseUp( S32 x, S32 y, MASK mask )
|
||||
{
|
||||
if(abs(mMouseDown.mX-x)<3 && abs(mMouseDown.mY-y)<3)
|
||||
handleClick(x,y,mask);
|
||||
|
||||
if (hasMouseCapture())
|
||||
{
|
||||
if (mPanning)
|
||||
|
|
@ -821,6 +880,53 @@ BOOL LLNetMap::handleMouseUp( S32 x, S32 y, MASK mask )
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL LLNetMap::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
if (mPopupMenu)
|
||||
{
|
||||
mPopupMenu->buildDrawLabels();
|
||||
mPopupMenu->updateParent(LLMenuGL::sMenuContainer);
|
||||
LLMenuGL::showPopup(this, mPopupMenu, x, y);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLNetMap::handleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
// TODO: allow clicking an avatar on minimap to select avatar in the nearby avatar list
|
||||
// if(mClosestAgentToCursor.notNull())
|
||||
// mNearbyList->selectUser(mClosestAgentToCursor);
|
||||
// Needs a registered observer i guess to accomplish this without using
|
||||
// globals to tell the mNearbyList in llpeoplepanel to select the user
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLNetMap::handleDoubleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
LLVector3d pos_global = viewPosToGlobal(x, y);
|
||||
|
||||
// If we're not tracking a beacon already, double-click will set one
|
||||
if (!LLTracker::isTracking(NULL))
|
||||
{
|
||||
LLFloaterWorldMap* world_map = LLFloaterWorldMap::getInstance();
|
||||
if (world_map)
|
||||
{
|
||||
world_map->trackLocation(pos_global);
|
||||
}
|
||||
}
|
||||
|
||||
if (gSavedSettings.getBOOL("DoubleClickTeleport"))
|
||||
{
|
||||
// If DoubleClickTeleport is on, double clicking the minimap will teleport there
|
||||
gAgent.teleportViaLocationLookAt(pos_global);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFloaterReg::showInstance("world_map");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLNetMap::outsideSlop( S32 x, S32 y, S32 start_x, S32 start_y, S32 slop )
|
||||
{
|
||||
|
|
@ -871,3 +977,38 @@ BOOL LLNetMap::handleHover( S32 x, S32 y, MASK mask )
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLNetMap::handleZoom(const LLSD& userdata)
|
||||
{
|
||||
std::string level = userdata.asString();
|
||||
|
||||
F32 scale = 0.0f;
|
||||
if (level == std::string("default"))
|
||||
{
|
||||
LLControlVariable *pvar = gSavedSettings.getControl("MiniMapScale");
|
||||
if(pvar)
|
||||
{
|
||||
pvar->resetToDefault();
|
||||
scale = gSavedSettings.getF32("MiniMapScale");
|
||||
}
|
||||
}
|
||||
else if (level == std::string("close"))
|
||||
scale = LLNetMap::MAP_SCALE_MAX;
|
||||
else if (level == std::string("medium"))
|
||||
scale = LLNetMap::MAP_SCALE_MID;
|
||||
else if (level == std::string("far"))
|
||||
scale = LLNetMap::MAP_SCALE_MIN;
|
||||
if (scale != 0.0f)
|
||||
{
|
||||
setScale(scale);
|
||||
}
|
||||
}
|
||||
|
||||
void LLNetMap::handleStopTracking (const LLSD& userdata)
|
||||
{
|
||||
if (mPopupMenu)
|
||||
{
|
||||
mPopupMenu->setItemEnabled ("Stop Tracking", false);
|
||||
LLTracker::stopTracking ((void*)LLTracker::isTracking(NULL));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ class LLCoordGL;
|
|||
class LLImageRaw;
|
||||
class LLViewerTexture;
|
||||
class LLFloaterMap;
|
||||
class LLMenuGL;
|
||||
|
||||
class LLNetMap : public LLUICtrl
|
||||
{
|
||||
|
|
@ -72,7 +73,12 @@ public:
|
|||
/*virtual*/ BOOL handleHover( S32 x, S32 y, MASK mask );
|
||||
/*virtual*/ BOOL handleToolTip( S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
|
||||
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
|
||||
/*virtual*/ BOOL handleClick(S32 x, S32 y, MASK mask);
|
||||
/*virtual*/ BOOL handleDoubleClick( S32 x, S32 y, MASK mask );
|
||||
|
||||
void setScale( F32 scale );
|
||||
void setToolTipMsg(const std::string& msg) { mToolTipMsg = msg; }
|
||||
void renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U &color, F32 radius );
|
||||
|
|
@ -120,6 +126,16 @@ private:
|
|||
LLUUID mClosestAgentAtLastRightClick;
|
||||
|
||||
std::string mToolTipMsg;
|
||||
|
||||
public:
|
||||
void setSelected(uuid_vec_t uuids) { gmSelected=uuids; };
|
||||
|
||||
private:
|
||||
void handleZoom(const LLSD& userdata);
|
||||
void handleStopTracking (const LLSD& userdata);
|
||||
|
||||
LLMenuGL* mPopupMenu;
|
||||
uuid_vec_t gmSelected;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
#include "llgroupactions.h"
|
||||
#include "llgrouplist.h"
|
||||
#include "llinventoryobserver.h"
|
||||
#include "llnetmap.h"
|
||||
#include "llpanelpeoplemenus.h"
|
||||
#include "llsidetray.h"
|
||||
#include "llsidetraypanelcontainer.h"
|
||||
|
|
@ -494,7 +495,8 @@ LLPanelPeople::LLPanelPeople()
|
|||
mNearbyGearButton(NULL),
|
||||
mFriendsGearButton(NULL),
|
||||
mGroupsGearButton(NULL),
|
||||
mRecentGearButton(NULL)
|
||||
mRecentGearButton(NULL),
|
||||
mMiniMap(NULL)
|
||||
{
|
||||
mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList, this));
|
||||
mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList, this));
|
||||
|
|
@ -567,6 +569,9 @@ BOOL LLPanelPeople::postBuild()
|
|||
mNearbyList->setNoItemsMsg(getString("no_one_near"));
|
||||
mNearbyList->setNoFilteredItemsMsg(getString("no_one_filtered_near"));
|
||||
mNearbyList->setShowIcons("NearbyListShowIcons");
|
||||
mMiniMap = (LLNetMap*)getChildView("Net Map",true);
|
||||
mMiniMap->setToolTipMsg(gSavedSettings.getBOOL("DoubleClickTeleport") ?
|
||||
getString("AltMiniMapToolTipMsg") : getString("MiniMapToolTipMsg"));
|
||||
|
||||
mRecentList = getChild<LLPanel>(RECENT_TAB_NAME)->getChild<LLAvatarList>("avatar_list");
|
||||
mRecentList->setNoItemsCommentText(getString("no_recent_people"));
|
||||
|
|
@ -1088,6 +1093,12 @@ void LLPanelPeople::onAvatarListDoubleClicked(LLUICtrl* ctrl)
|
|||
|
||||
void LLPanelPeople::onAvatarListCommitted(LLAvatarList* list)
|
||||
{
|
||||
if (getActiveTabName() == NEARBY_TAB_NAME)
|
||||
{
|
||||
uuid_vec_t selected_uuids;
|
||||
getCurrentItemIDs(selected_uuids);
|
||||
mMiniMap->setSelected(selected_uuids);
|
||||
} else
|
||||
// Make sure only one of the friends lists (online/all) has selection.
|
||||
if (getActiveTabName() == FRIENDS_TAB_NAME)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ private:
|
|||
LLAvatarList* mNearbyList;
|
||||
LLAvatarList* mRecentList;
|
||||
LLGroupList* mGroupList;
|
||||
LLNetMap* mMiniMap;
|
||||
|
||||
LLHandle<LLView> mGroupPlusMenuHandle;
|
||||
LLHandle<LLView> mNearbyViewSortMenuHandle;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,11 @@
|
|||
name="ToolTipMsg">
|
||||
[REGION](Double-click to open Map, shift-drag to pan)
|
||||
</floater.string>
|
||||
<floater.string name="mini_map_caption">
|
||||
<floater.string
|
||||
name="AltToolTipMsg">
|
||||
[REGION](Double-click to teleport, shift-drag to pan)
|
||||
</floater.string>
|
||||
<floater.string name="mini_map_caption">
|
||||
MINIMAP
|
||||
</floater.string>
|
||||
<net_map
|
||||
|
|
|
|||
|
|
@ -54,7 +54,13 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
|
|||
<string
|
||||
name="no_groups_msg"
|
||||
value="Looking for Groups to join? Try [secondlife:///app/search/groups Search]." />
|
||||
<filter_editor
|
||||
<string
|
||||
name="MiniMapToolTipMsg"
|
||||
value="[REGION](Double-click to open Map, shift-drag to pan)"/>
|
||||
<string
|
||||
name="AltMiniMapToolTipMsg"
|
||||
value="[REGION](Double-click to teleport, shift-drag to pan)"/>
|
||||
<filter_editor
|
||||
follows="left|top|right"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
|
|
@ -93,16 +99,26 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
|
|||
name="nearby_panel"
|
||||
top="0"
|
||||
width="313">
|
||||
<avatar_list
|
||||
<net_map
|
||||
bg_color="NetMapBackgroundColor"
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
mouse_opaque="false"
|
||||
name="Net Map"
|
||||
width="307"
|
||||
height="140"
|
||||
top="0"/>
|
||||
<avatar_list
|
||||
allow_select="true"
|
||||
follows="all"
|
||||
height="356"
|
||||
follows="top|left|bottom|right"
|
||||
height="216"
|
||||
ignore_online_status="true"
|
||||
layout="topleft"
|
||||
left="3"
|
||||
multi_select="true"
|
||||
name="avatar_list"
|
||||
top="0"
|
||||
top="145"
|
||||
width="307" />
|
||||
<panel
|
||||
background_visible="true"
|
||||
|
|
|
|||
Loading…
Reference in New Issue