From c5926546aa73bfb2900dda7d010a4d72550e6787 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Tue, 11 Aug 2009 17:47:40 -0700 Subject: Moved radar back into llfloatermap.cpp, it works --- linden/indra/newview/llfloatermap.cpp | 256 ++++++++++++++++++++++++++++++++++ 1 file changed, 256 insertions(+) (limited to 'linden/indra/newview/llfloatermap.cpp') diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp index 6115404..b420eca 100644 --- a/linden/indra/newview/llfloatermap.cpp +++ b/linden/indra/newview/llfloatermap.cpp @@ -42,6 +42,20 @@ #include "llresizebar.h" #include "lluictrlfactory.h" +// radar +#include "llfloateravatarinfo.h" +#include "llfloaterfriends.h" +#include "llfloatergroupinvite.h" +#include "llfloatergroups.h" +#include "llimview.h" +#include "roles_constants.h" +#include "llscrolllistctrl.h" +#include "lltracker.h" +#include "llviewermessage.h" +#include "llworld.h" + +LLFloaterMap* LLFloaterMap::sInstance = NULL; + LLFloaterMap::LLFloaterMap(const LLSD& key) : LLFloater(std::string("minimap")), @@ -50,6 +64,7 @@ LLFloaterMap::LLFloaterMap(const LLSD& key) LLCallbackMap::map_t factory_map; factory_map["mini_mapview"] = LLCallbackMap(createPanelMiniMap, this); LLUICtrlFactory::getInstance()->buildFloater(this, "floater_mini_map.xml", &factory_map, FALSE); + sInstance = this; } @@ -58,6 +73,7 @@ void* LLFloaterMap::createPanelMiniMap(void* data) { LLFloaterMap* self = (LLFloaterMap*)data; self->mPanelMap = new LLNetMap("Mapview"); + self->mSelectedAvatar.setNull(); return self->mPanelMap; } @@ -67,12 +83,28 @@ BOOL LLFloaterMap::postBuild() sendChildToBack(getDragHandle()); sendChildToFront(getChild("llfloater_close_btn")); setIsChrome(TRUE); + + mRadarList = getChild("RadarList"); + childSetCommitCallback("RadarList", onList, this); + + childSetAction("im_btn", onClickIM, this); + childSetAction("profile_btn", onClickProfile, this); + childSetAction("offer_teleport_btn", onClickOfferTeleport, this); + childSetAction("track_btn", onClickTrack, this); + childSetAction("invite_btn", onClickInvite, this); + childSetAction("add_btn", onClickAddFriend, this); + + setDefaultBtn("im_btn"); + + populateRadar(); + return TRUE; } LLFloaterMap::~LLFloaterMap() { + sInstance = NULL; } @@ -122,3 +154,227 @@ void LLFloaterMap::draw() } } + +// +// Radar +// + +//static +void LLFloaterMap::updateRadar() +{ + LLFloaterMap* self = sInstance; + self->populateRadar(); +} + +void LLFloaterMap::populateRadar() +{ + BOOL empty = TRUE; + std::stringstream avatar_count_string; + LLScrollListCtrl* radar_scroller = getChild("RadarList"); + radar_scroller->deleteAllItems(); + + LLVector3d current_pos = gAgent.getPositionGlobal(); + + std::vector avatar_ids; + std::vector positions; + LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, current_pos, gSavedSettings.getF32("NearMeRange")); + for(U32 i=0; igetFullName(av, fullname)) + { + element["columns"][0]["value"] = LLCacheName::getDefaultName(); + } + else + { + element["columns"][0]["value"] = fullname; + } + + element["columns"][1]["column"] = "avatar_distance"; + element["columns"][1]["type"] = "text"; + element["columns"][1]["value"] = dist_formatted.str(); + radar_scroller->addElement(element); + empty = FALSE; + } + + avatar_count_string.str(""); + if (empty) + { + childSetEnabled("RadarList", false);childSetEnabled("im_btn", false); + radar_scroller->addCommentText(getString("no_one_near")); + avatar_count_string << "0"; + } + else + { + childSetEnabled("RadarList", true); + radar_scroller->selectFirstItem(); + avatar_count_string << (int)avatar_ids.size(); + } + LLTextBox* lblAvatarCount = getChild("lblAvatarCount"); + lblAvatarCount->setText(avatar_count_string.str()); + + onList(radar_scroller, this); +} + +// static +void LLFloaterMap::onList(LLUICtrl* ctrl, void* user_data) +{ + LLFloaterMap* self = (LLFloaterMap*)user_data; + if (self) + { + self->childSetEnabled("im_btn", self->visibleItemsSelected()); + self->childSetEnabled("profile_btn", self->visibleItemsSelected()); + self->childSetEnabled("offer_teleport_btn", self->visibleItemsSelected()); + self->childSetEnabled("track_btn", self->visibleItemsSelected()); + self->childSetEnabled("invite_btn", self->visibleItemsSelected()); + self->childSetEnabled("add_btn", self->visibleItemsSelected()); + + if (self->visibleItemsSelected()) + { + self->mSelectedAvatar = self->mRadarList->getFirstSelected()->getUUID(); + } + else + { + self->mSelectedAvatar.setNull(); + } + } +} + +BOOL LLFloaterMap::visibleItemsSelected() const +{ + if (mRadarList->getFirstSelectedIndex() >= 0) + { + return TRUE; + } + return FALSE; +} + +// static +BOOL LLFloaterMap::isSelected(LLUUID agent) +{ + if (sInstance->mSelectedAvatar == agent) + { + return TRUE; + } + return FALSE; +} + +// static +void LLFloaterMap::onClickIM(void* user_data) +{ + LLFloaterMap* self = (LLFloaterMap*) user_data; + LLScrollListItem *item = self->mRadarList->getFirstSelected(); + if (item != NULL) + { + LLUUID agent_id = item->getUUID(); + std::string fullname; + if(gCacheName->getFullName(agent_id, fullname)) + { + gIMMgr->setFloaterOpen(TRUE); + gIMMgr->addSession(fullname, IM_NOTHING_SPECIAL, agent_id); + } + } +} + +// static +void LLFloaterMap::onClickProfile(void* user_data) +{ + LLFloaterMap* self = (LLFloaterMap*) user_data; + LLScrollListItem *item = self->mRadarList->getFirstSelected(); + if (item != NULL) + { + LLUUID agent_id = item->getUUID(); + LLFloaterAvatarInfo::show(agent_id); + } +} + +// static +void LLFloaterMap::onClickOfferTeleport(void* user_data) +{ + LLFloaterMap* self = (LLFloaterMap*) user_data; + LLScrollListItem *item = self->mRadarList->getFirstSelected(); + if (item != NULL) + { + LLUUID agent_id = item->getUUID(); + handle_lure(agent_id); + } +} + +// static +void LLFloaterMap::onClickTrack(void* user_data) +{ + LLFloaterMap* self = (LLFloaterMap*) user_data; + LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus(); + if (LLTracker::TRACKING_AVATAR == tracking_status) + { + LLTracker::stopTracking(NULL); + } + else + { + LLScrollListItem *item = self->mRadarList->getFirstSelected(); + if (item != NULL) + { + LLUUID agent_id = item->getUUID(); + std::string fullname; + gCacheName->getFullName(agent_id, fullname); + LLTracker::trackAvatar(agent_id, fullname); + } + } +} + +// static +void LLFloaterMap::onClickInvite(void* user_data) +{ + LLFloaterMap* self = (LLFloaterMap*) user_data; + LLScrollListItem *item = self->mRadarList->getFirstSelected(); + if (item != NULL) + { + LLUUID agent_id = item->getUUID(); + LLFloaterGroupPicker* widget; + widget = LLFloaterGroupPicker::showInstance(LLSD(gAgent.getID())); + if (widget) + { + widget->center(); + widget->setPowersMask(GP_MEMBER_INVITE); + widget->setSelectCallback(callback_invite_to_group, (void *)&agent_id); + } + } +} + +// static +void LLFloaterMap::callback_invite_to_group(LLUUID group_id, void *user_data) +{ + std::vector agent_ids; + agent_ids.push_back(*(LLUUID *)user_data); + + LLFloaterGroupInvite::showForGroup(group_id, &agent_ids); +} + +// static +void LLFloaterMap::onClickAddFriend(void* user_data) +{ + LLFloaterMap* self = (LLFloaterMap*) user_data; + LLScrollListItem *item = self->mRadarList->getFirstSelected(); + if (item != NULL) + { + LLUUID agent_id = item->getUUID(); + std::string fullname; + gCacheName->getFullName(agent_id, fullname); + LLPanelFriends::requestFriendshipDialog(agent_id, fullname); + } +} -- cgit v1.1 From d5dc47ac672165a19fff6e57c866eca6439ea7e0 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Wed, 12 Aug 2009 11:48:21 -0700 Subject: Fixed radar list scrolling issue, still missing toggle --- linden/indra/newview/llfloatermap.cpp | 135 +++++++++++++++++++++++----------- 1 file changed, 93 insertions(+), 42 deletions(-) (limited to 'linden/indra/newview/llfloatermap.cpp') diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp index b420eca..9ade3bf 100644 --- a/linden/indra/newview/llfloatermap.cpp +++ b/linden/indra/newview/llfloatermap.cpp @@ -86,6 +86,7 @@ BOOL LLFloaterMap::postBuild() mRadarList = getChild("RadarList"); childSetCommitCallback("RadarList", onList, this); + mRadarList->setDoubleClickCallback(onClickIM); childSetAction("im_btn", onClickIM, this); childSetAction("profile_btn", onClickProfile, this); @@ -154,6 +155,7 @@ void LLFloaterMap::draw() } } +// TODO: make this detachable // // Radar @@ -168,67 +170,113 @@ void LLFloaterMap::updateRadar() void LLFloaterMap::populateRadar() { - BOOL empty = TRUE; std::stringstream avatar_count_string; - LLScrollListCtrl* radar_scroller = getChild("RadarList"); - radar_scroller->deleteAllItems(); - LLVector3d current_pos = gAgent.getPositionGlobal(); - std::vector avatar_ids; - std::vector positions; - LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, current_pos, gSavedSettings.getF32("NearMeRange")); - for(U32 i=0; i avatar_ids_new; + std::vector positions_new; + LLWorld::getInstance()->getAvatars(&avatar_ids_new, &positions_new, current_pos, gSavedSettings.getF32("NearMeRange")); + + // add an avatar to the list if it doesn't exist + std::vector::iterator result; + for (U32 i=0; igetFullName(av, fullname)) + result = find(mAvatarIDs.begin(), mAvatarIDs.end(), avatar_ids_new[i]); + if (result == mAvatarIDs.end()) { - element["columns"][0]["value"] = LLCacheName::getDefaultName(); - } - else + mAvatarIDs.push_back(avatar_ids_new[i]); + mPositions.push_back(positions_new[i]); + addToList(avatar_ids_new[i], positions_new[i], current_pos); + } + else // avatar exists, check for updated position { - element["columns"][0]["value"] = fullname; + if (mPositions[i] != positions_new[i]) + { + removeFromList(mAvatarIDs[i]); + mPositions[i] = positions_new[i]; + addToList(mAvatarIDs[i], mPositions[i], current_pos); + } } + } + + // pull out dead entries + for (U32 i=0; iaddElement(element); - empty = FALSE; + // pop_back is faster + std::swap(mAvatarIDs[i], mAvatarIDs.back()); + mAvatarIDs.pop_back(); + std::swap(mPositions[i], mPositions.back()); + mPositions.pop_back(); + } } - + avatar_count_string.str(""); - if (empty) + if (mAvatarIDs.empty()) { childSetEnabled("RadarList", false);childSetEnabled("im_btn", false); - radar_scroller->addCommentText(getString("no_one_near")); + mRadarList->addCommentText(getString("no_one_near")); avatar_count_string << "0"; } else { - childSetEnabled("RadarList", true); - radar_scroller->selectFirstItem(); - avatar_count_string << (int)avatar_ids.size(); + childSetEnabled("RadarList", true); + avatar_count_string << (int)mAvatarIDs.size(); } LLTextBox* lblAvatarCount = getChild("lblAvatarCount"); lblAvatarCount->setText(avatar_count_string.str()); + onList(mRadarList, this); +} - onList(radar_scroller, this); +void LLFloaterMap::addToList(const LLUUID& agent_id, const LLVector3d& agent_pos, const LLVector3d& current_pos) +{ + if (agent_id == gAgent.getID()) + return; + + F64 distance = dist_vec(current_pos, agent_pos); + std::stringstream dist_formatted; + dist_formatted << (double)((int)((distance + 0.05)*10.0))/10.0 << "m"; + + LLSD element; + element["id"] = agent_id; // value + element["columns"][0]["column"] = "avatar_name"; + element["columns"][0]["type"] = "text"; + + std::string fullname; + if(!gCacheName->getFullName(agent_id, fullname)) + { + element["columns"][0]["value"] = LLCacheName::getDefaultName(); + } + else + { + element["columns"][0]["value"] = fullname; + } + + element["columns"][1]["column"] = "avatar_distance"; + element["columns"][1]["type"] = "text"; + element["columns"][1]["value"] = dist_formatted.str(); + + mRadarList->addElement(element); + mRadarList->selectByID(mSelectedAvatar); + + onList(mRadarList, this); +} + +void LLFloaterMap::removeFromList(const LLUUID& agent_id) +{ + S32 index = mRadarList->getItemIndex(agent_id); + if (index >= 0) + { + mRadarList->deleteSingleItem(index); + mRadarList->selectByID(mSelectedAvatar); + + onList(mRadarList, this); + } } // static @@ -246,7 +294,10 @@ void LLFloaterMap::onList(LLUICtrl* ctrl, void* user_data) if (self->visibleItemsSelected()) { - self->mSelectedAvatar = self->mRadarList->getFirstSelected()->getUUID(); + if (self->mSelectedAvatar != self->mRadarList->getFirstSelected()->getUUID()) + { + self->mSelectedAvatar = self->mRadarList->getFirstSelected()->getUUID(); + } } else { -- cgit v1.1 From b86a81bb6a425234238770c7ff997e92b94777f1 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Tue, 15 Sep 2009 23:44:25 -0700 Subject: Some code cleanup --- linden/indra/newview/llfloatermap.cpp | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) (limited to 'linden/indra/newview/llfloatermap.cpp') diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp index 29a95c2..748bb7e 100644 --- a/linden/indra/newview/llfloatermap.cpp +++ b/linden/indra/newview/llfloatermap.cpp @@ -59,8 +59,6 @@ #include "llviewerwindow.h" #include "llworld.h" -LLFloaterMap* LLFloaterMap::sInstance = NULL; - LLFloaterMap::LLFloaterMap(const LLSD& key) : LLFloater(std::string("minimap")), @@ -73,8 +71,6 @@ LLFloaterMap::LLFloaterMap(const LLSD& key) mSelectedAvatar.setNull(); mAvatars.clear(); - - sInstance = this; } @@ -122,7 +118,6 @@ BOOL LLFloaterMap::postBuild() LLFloaterMap::~LLFloaterMap() { - sInstance = NULL; } @@ -195,8 +190,7 @@ void LLFloaterMap::open() //static void LLFloaterMap::updateRadar() { - LLFloaterMap* self = sInstance; - self->populateRadar(); + LLFloaterMap::getInstance()->populateRadar(); } void LLFloaterMap::populateRadar() @@ -208,7 +202,7 @@ void LLFloaterMap::populateRadar() if (visibleItemsSelected()) { - mSelectedAvatar = mRadarList->getSelectedValue().asUUID(); + mSelectedAvatar = mRadarList->getFirstSelected()->getUUID(); } else { @@ -283,11 +277,7 @@ void LLFloaterMap::populateRadar() mRadarList->sortItems(); mRadarList->setScrollPos(scroll_pos); - - if (mSelectedAvatar.notNull()) - { - mRadarList->selectByID(mSelectedAvatar); - } + mRadarList->selectByID(mSelectedAvatar); // set count std::stringstream avatar_count; @@ -304,12 +294,14 @@ void LLFloaterMap::populateRadar() childSetText("lblAvatarCount", avatar_count.str()); toggleButtons(); + + //llinfos << "mSelectedAvatar: " << mSelectedAvatar.asString() << llendl; } void LLFloaterMap::toggleButtons() { - BOOL enabled = mRadarList->hasFocus() ? visibleItemsSelected() : FALSE; - BOOL unmute_enabled = mRadarList->hasFocus() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE; + BOOL enabled = mSelectedAvatar.notNull() ? visibleItemsSelected() : FALSE; + BOOL unmute_enabled = mSelectedAvatar.notNull() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE; childSetEnabled("im_btn", enabled); childSetEnabled("profile_btn", enabled); @@ -334,7 +326,6 @@ void LLFloaterMap::onList(LLUICtrl* ctrl, void* user_data) self->toggleButtons(); } } - BOOL LLFloaterMap::visibleItemsSelected() const { @@ -356,13 +347,9 @@ void LLFloaterMap::onRangeChange(LLFocusableElement* focus, void* user_data) } // static -BOOL LLFloaterMap::isSelected(LLUUID agent) +LLUUID LLFloaterMap::getSelected() { - if (sInstance->mSelectedAvatar == agent) - { - return TRUE; - } - return FALSE; + return LLFloaterMap::getInstance()->mSelectedAvatar; } // -- cgit v1.1 From 99769066f53b0552ca0b303618ebe9aba8825b62 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Wed, 16 Sep 2009 00:36:45 -0700 Subject: Don't track avatars when focus lost --- linden/indra/newview/llfloatermap.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'linden/indra/newview/llfloatermap.cpp') diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp index 748bb7e..1ec2020 100644 --- a/linden/indra/newview/llfloatermap.cpp +++ b/linden/indra/newview/llfloatermap.cpp @@ -277,7 +277,10 @@ void LLFloaterMap::populateRadar() mRadarList->sortItems(); mRadarList->setScrollPos(scroll_pos); - mRadarList->selectByID(mSelectedAvatar); + if (mSelectedAvatar.notNull()) + { + mRadarList->selectByID(mSelectedAvatar); + } // set count std::stringstream avatar_count; @@ -300,8 +303,18 @@ void LLFloaterMap::populateRadar() void LLFloaterMap::toggleButtons() { - BOOL enabled = mSelectedAvatar.notNull() ? visibleItemsSelected() : FALSE; - BOOL unmute_enabled = mSelectedAvatar.notNull() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE; + BOOL enabled = FALSE; + BOOL unmute_enabled = FALSE; + LLPanel* panelp = getChild("RadarPanel"); + if (panelp->hasFocus()) + { + enabled = mSelectedAvatar.notNull() ? visibleItemsSelected() : FALSE; + unmute_enabled = mSelectedAvatar.notNull() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE; + } + else + { + mRadarList->deselect(); + } childSetEnabled("im_btn", enabled); childSetEnabled("profile_btn", enabled); -- cgit v1.1 From 5de9994da14352081ac802404ef018265487e758 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Wed, 16 Sep 2009 06:15:37 -0700 Subject: More cleanup --- linden/indra/newview/llfloatermap.cpp | 79 ++++++++++++----------------------- 1 file changed, 27 insertions(+), 52 deletions(-) (limited to 'linden/indra/newview/llfloatermap.cpp') diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp index 1ec2020..e70f4f1 100644 --- a/linden/indra/newview/llfloatermap.cpp +++ b/linden/indra/newview/llfloatermap.cpp @@ -70,7 +70,6 @@ LLFloaterMap::LLFloaterMap(const LLSD& key) LLUICtrlFactory::getInstance()->buildFloater(this, "floater_mini_map.xml", &factory_map, FALSE); mSelectedAvatar.setNull(); - mAvatars.clear(); } @@ -195,7 +194,7 @@ void LLFloaterMap::updateRadar() void LLFloaterMap::populateRadar() { - if (!mUpdate) + if (!mUpdate || !LLFloaterMap::getInstance()->getVisible()) { return; } @@ -218,8 +217,10 @@ void LLFloaterMap::populateRadar() std::vector positions; LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, current_pos, gSavedSettings.getF32("NearMeRange")); - // Add avatars to the list. If they're already there, update positions - std::pair::iterator, bool> ret; + LLSD element; + + mRadarList->deleteAllItems(); + for (U32 i=0; i(avatar_ids[i], positions[i])); - if (ret.second == false) + // Add to list only if we get their name + std::string fullname = getSelectedName(avatar_ids[i]); + if (!fullname.empty() && fullname != " ") { - mAvatars[avatar_ids[i]] = positions[i]; - } - } - - LLSD element; - - mRadarList->deleteAllItems(); - - // if an avatar's not in range anymore, kill it. Otherwise, populate radar - std::map::iterator mIt; - std::vector::iterator result; - for (mIt = mAvatars.begin(); mIt != mAvatars.end(); ) - { - result = find(avatar_ids.begin(), avatar_ids.end(), mIt->first); - if (result == avatar_ids.end()) - { - mAvatars.erase(mIt++); - } - else - { - // Add to list only if we get their name - std::string fullname = getSelectedName(mIt->first); - if (!fullname.empty() && fullname != " ") - { - std::string mute_text = LLMuteList::getInstance()->isMuted(mIt->first) ? getString("muted") : ""; - element["id"] = mIt->first; - element["columns"][0]["column"] = "avatar_name"; - element["columns"][0]["type"] = "text"; - element["columns"][0]["value"] = fullname + " " + mute_text; - element["columns"][1]["column"] = "avatar_distance"; - element["columns"][1]["type"] = "text"; - - F64 distance = dist_vec(current_pos, mIt->second); - std::stringstream dist_formatted; - dist_formatted.str(""); - dist_formatted << (double)((int)((distance + 0.05)*10.0))/10.0 << "m"; - element["columns"][1]["value"] = dist_formatted.str(); - - mRadarList->addElement(element, ADD_BOTTOM); - } - ++mIt; + std::string mute_text = LLMuteList::getInstance()->isMuted(avatar_ids[i]) ? getString("muted") : ""; + element["id"] = avatar_ids[i]; + element["columns"][0]["column"] = "avatar_name"; + element["columns"][0]["type"] = "text"; + element["columns"][0]["value"] = fullname + " " + mute_text; + element["columns"][1]["column"] = "avatar_distance"; + element["columns"][1]["type"] = "text"; + + LLVector3d temp = positions[i] - current_pos; + F32 distance = (F32)temp.magVec(); + char dist[32]; + snprintf(dist, sizeof(dist), "%.1f", distance); + element["columns"][1]["value"] = strcat(dist,"m"); + + mRadarList->addElement(element, ADD_BOTTOM); } } @@ -285,28 +261,27 @@ void LLFloaterMap::populateRadar() // set count std::stringstream avatar_count; avatar_count.str(""); - if (mAvatars.empty()) + if (avatar_ids.empty()) { mRadarList->addCommentText(getString("no_one_near"), ADD_TOP); avatar_count << "0"; } else { - avatar_count << (int)mAvatars.size(); + avatar_count << (int)avatar_ids.size(); } childSetText("lblAvatarCount", avatar_count.str()); toggleButtons(); //llinfos << "mSelectedAvatar: " << mSelectedAvatar.asString() << llendl; -} +} void LLFloaterMap::toggleButtons() { BOOL enabled = FALSE; BOOL unmute_enabled = FALSE; - LLPanel* panelp = getChild("RadarPanel"); - if (panelp->hasFocus()) + if (childHasFocus("RadarPanel")) { enabled = mSelectedAvatar.notNull() ? visibleItemsSelected() : FALSE; unmute_enabled = mSelectedAvatar.notNull() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE; -- cgit v1.1 From 15201e791e7572c7b573e427e12a81d7e39828a1 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Wed, 16 Sep 2009 10:02:19 -0700 Subject: Moved Rotate Mini-Map option to mini-map menu, added first use dialog --- linden/indra/newview/llfloatermap.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'linden/indra/newview/llfloatermap.cpp') diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp index e70f4f1..a1ab97e 100644 --- a/linden/indra/newview/llfloatermap.cpp +++ b/linden/indra/newview/llfloatermap.cpp @@ -43,6 +43,7 @@ #include "lluictrlfactory.h" // radar +#include "llfirstuse.h" #include "llfloateravatarinfo.h" #include "llfloaterfriends.h" #include "llfloatergroupinvite.h" @@ -172,6 +173,7 @@ void LLFloaterMap::open() if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWMINIMAP)) { LLFloater::open(); + LLFirstUse::useMiniMap(); } } // [/RLVa:KB] -- cgit v1.1 From 34a125d95b422e9faf33ccecdae98ecd331cb068 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Wed, 16 Sep 2009 23:22:41 -0700 Subject: Estate and track buttons now disable when they should, tweaked spacing --- linden/indra/newview/llfloatermap.cpp | 121 ++++++++++++++++++++++------------ 1 file changed, 79 insertions(+), 42 deletions(-) (limited to 'linden/indra/newview/llfloatermap.cpp') diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp index a1ab97e..3be891e 100644 --- a/linden/indra/newview/llfloatermap.cpp +++ b/linden/indra/newview/llfloatermap.cpp @@ -51,13 +51,18 @@ #include "llfloaterreporter.h" #include "llimview.h" #include "llmutelist.h" +#include "llparcel.h" +#include "llregionposition.h" #include "roles_constants.h" #include "llscrolllistctrl.h" #include "lltracker.h" #include "llviewerobjectlist.h" +#include "llviewermenu.h" #include "llviewermessage.h" +#include "llviewerparcelmgr.h" #include "llviewerregion.h" #include "llviewerwindow.h" +#include "llvoavatar.h" #include "llworld.h" LLFloaterMap::LLFloaterMap(const LLSD& key) @@ -233,7 +238,7 @@ void LLFloaterMap::populateRadar() // Add to list only if we get their name std::string fullname = getSelectedName(avatar_ids[i]); - if (!fullname.empty() && fullname != " ") + if (!fullname.empty()) { std::string mute_text = LLMuteList::getInstance()->isMuted(avatar_ids[i]) ? getString("muted") : ""; element["id"] = avatar_ids[i]; @@ -281,30 +286,69 @@ void LLFloaterMap::populateRadar() void LLFloaterMap::toggleButtons() { - BOOL enabled = FALSE; - BOOL unmute_enabled = FALSE; + BOOL enable = FALSE; + BOOL enable_unmute = FALSE; + BOOL enable_track = FALSE; + BOOL enable_estate = FALSE; if (childHasFocus("RadarPanel")) { - enabled = mSelectedAvatar.notNull() ? visibleItemsSelected() : FALSE; - unmute_enabled = mSelectedAvatar.notNull() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE; + enable = mSelectedAvatar.notNull() ? visibleItemsSelected() : FALSE; + enable_unmute = mSelectedAvatar.notNull() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE; + enable_track = gAgent.isGodlike() || is_agent_mappable(mSelectedAvatar); + enable_estate = getKickable(mSelectedAvatar); } else { mRadarList->deselect(); } - childSetEnabled("im_btn", enabled); - childSetEnabled("profile_btn", enabled); - childSetEnabled("offer_teleport_btn", enabled); - childSetEnabled("track_btn", enabled); - childSetEnabled("invite_btn", enabled); - childSetEnabled("add_btn", enabled); - childSetEnabled("freeze_btn", enabled); - childSetEnabled("eject_btn", enabled); - childSetEnabled("mute_btn", enabled); - childSetEnabled("unmute_btn", unmute_enabled); - childSetEnabled("ar_btn", enabled); - childSetEnabled("estate_eject_btn", enabled); + childSetEnabled("im_btn", enable); + childSetEnabled("profile_btn", enable); + childSetEnabled("offer_teleport_btn", enable); + childSetEnabled("track_btn", enable_track); + childSetEnabled("invite_btn", enable); + childSetEnabled("add_btn", enable); + childSetEnabled("freeze_btn", enable_estate); + childSetEnabled("eject_btn", enable_estate); + childSetEnabled("mute_btn", enable); + childSetEnabled("unmute_btn", enable_unmute); + childSetEnabled("ar_btn", enable); + childSetEnabled("estate_eject_btn", enable_estate); +} + +BOOL LLFloaterMap::getKickable(const LLUUID &agent_id) +{ + if (agent_id.notNull()) + { + LLViewerObject* av_obj = gObjectList.findObject(agent_id); + if (av_obj != NULL && av_obj->isAvatar()) + { + LLVOAvatar* avatar = (LLVOAvatar*)av_obj; + LLViewerRegion* region = avatar->getRegion(); + if (region) + { + const LLVector3& pos = avatar->getPositionRegion(); + const LLVector3d& pos_global = avatar->getPositionGlobal(); + if (LLWorld::getInstance()->positionRegionValidGlobal(pos_global)) + { + LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel(); + + BOOL new_value = (region != NULL); + + if (new_value) + { + new_value = region->isOwnedSelf(pos); + if (!new_value || region->isOwnedGroup(pos)) + { + new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN); + } + } + return new_value; + } + } + } + } + return FALSE; } // static @@ -354,12 +398,8 @@ void LLFloaterMap::onClickIM(void* user_data) if (item != NULL) { LLUUID agent_id = item->getUUID(); - std::string fullname; - if(gCacheName->getFullName(agent_id, fullname)) - { - gIMMgr->setFloaterOpen(TRUE); - gIMMgr->addSession(fullname, IM_NOTHING_SPECIAL, agent_id); - } + gIMMgr->setFloaterOpen(TRUE); + gIMMgr->addSession(getSelectedName(agent_id), IM_NOTHING_SPECIAL, agent_id); } } @@ -392,6 +432,7 @@ void LLFloaterMap::onClickTrack(void* user_data) { LLFloaterMap* self = (LLFloaterMap*) user_data; LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus(); + if (LLTracker::TRACKING_AVATAR == tracking_status) { LLTracker::stopTracking(NULL); @@ -402,9 +443,7 @@ void LLFloaterMap::onClickTrack(void* user_data) if (item != NULL) { LLUUID agent_id = item->getUUID(); - std::string fullname; - gCacheName->getFullName(agent_id, fullname); - LLTracker::trackAvatar(agent_id, fullname); + LLTracker::trackAvatar(agent_id, getSelectedName(agent_id)); } } } @@ -445,9 +484,7 @@ void LLFloaterMap::onClickAddFriend(void* user_data) if (item != NULL) { LLUUID agent_id = item->getUUID(); - std::string fullname; - gCacheName->getFullName(agent_id, fullname); - LLPanelFriends::requestFriendshipDialog(agent_id, fullname); + LLPanelFriends::requestFriendshipDialog(agent_id, getSelectedName(agent_id)); } } @@ -456,10 +493,10 @@ void LLFloaterMap::onClickAddFriend(void* user_data) // //static -std::string LLFloaterMap::getSelectedName(LLUUID agent_id) +std::string LLFloaterMap::getSelectedName(const LLUUID &agent_id) { std::string agent_name; - if(agent_id.notNull() && gCacheName->getFullName(agent_id, agent_name)) + if(gCacheName->getFullName(agent_id, agent_name) && agent_name != " ") { return agent_name; } @@ -516,7 +553,7 @@ void LLFloaterMap::onClickFreeze(void *user_data) LLFloaterMap *self = (LLFloaterMap*)user_data; LLStringUtil::format_map_t args; LLSD payload; - args["[AVATAR_NAME]"] = self->getSelectedName(self->mSelectedAvatar); + args["[AVATAR_NAME]"] = getSelectedName(self->mSelectedAvatar); gViewerWindow->alertXml("FreezeAvatarFullname", args, callbackFreeze, user_data); } @@ -526,7 +563,7 @@ void LLFloaterMap::onClickEject(void *user_data) LLFloaterMap *self = (LLFloaterMap*)user_data; LLStringUtil::format_map_t args; LLSD payload; - args["AVATAR_NAME"] = self->getSelectedName(self->mSelectedAvatar); + args["AVATAR_NAME"] = getSelectedName(self->mSelectedAvatar); gViewerWindow->alertXml("EjectAvatarFullName", args, callbackEject, user_data); } @@ -534,11 +571,11 @@ void LLFloaterMap::onClickEject(void *user_data) void LLFloaterMap::onClickMute(void *user_data) { LLFloaterMap *self = (LLFloaterMap*)user_data; - - LLUUID agent_id = self->mSelectedAvatar; - std::string agent_name = self->getSelectedName(agent_id); - if(!agent_name.empty()) + LLScrollListItem *item = self->mRadarList->getFirstSelected(); + if (item != NULL) { + LLUUID agent_id = item->getUUID(); + std::string agent_name = getSelectedName(agent_id); if (LLMuteList::getInstance()->isMuted(agent_id)) { //LLMute mute(agent_id, agent_name, LLMute::AGENT); @@ -557,11 +594,11 @@ void LLFloaterMap::onClickMute(void *user_data) void LLFloaterMap::onClickUnmute(void *user_data) { LLFloaterMap *self = (LLFloaterMap*)user_data; - - LLUUID agent_id = self->mSelectedAvatar; - std::string agent_name = self->getSelectedName(agent_id); - if(!agent_name.empty()) + LLScrollListItem *item = self->mRadarList->getFirstSelected(); + if (item != NULL) { + LLUUID agent_id = item->getUUID(); + std::string agent_name = getSelectedName(agent_id); if (LLMuteList::getInstance()->isMuted(agent_id)) { LLMute mute(agent_id, agent_name, LLMute::AGENT); @@ -582,7 +619,7 @@ void LLFloaterMap::onClickEjectFromEstate(void *user_data) LLFloaterMap *self = (LLFloaterMap*)user_data; LLStringUtil::format_map_t args; LLSD payload; - args["EVIL_USER"] = self->getSelectedName(self->mSelectedAvatar); + args["EVIL_USER"] = getSelectedName(self->mSelectedAvatar); gViewerWindow->alertXml("EstateKickUser", args, callbackEjectFromEstate, user_data); } -- cgit v1.1