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 ++++++++++++++------- linden/indra/newview/llfloatermap.h | 3 +- .../skins/default/xui/en-us/floater_mini_map.xml | 8 +- 3 files changed, 85 insertions(+), 47 deletions(-) (limited to 'linden/indra/newview') 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); } diff --git a/linden/indra/newview/llfloatermap.h b/linden/indra/newview/llfloatermap.h index fae6184..81e4159 100644 --- a/linden/indra/newview/llfloatermap.h +++ b/linden/indra/newview/llfloatermap.h @@ -72,6 +72,7 @@ private: static void onList(LLUICtrl* ctrl, void* user_data); static void onRangeChange(LLFocusableElement* focus, void* user_data); BOOL visibleItemsSelected() const; + BOOL getKickable(const LLUUID &agent_id); void toggleButtons(); void populateRadar(); @@ -83,7 +84,7 @@ private: static void onClickInvite(void* user_data); static void callback_invite_to_group(LLUUID group_id, void *user_data); - static std::string getSelectedName(LLUUID agent_id); + static std::string getSelectedName(const LLUUID &agent_id); static void onClickFreeze(void *user_data); static void onClickEject(void *user_data); static void onClickMute(void *user_data); diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml b/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml index 041672e..3485812 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml @@ -36,7 +36,7 @@ width="40"> Meters - @@ -76,17 +76,17 @@