aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.txt9
-rw-r--r--linden/indra/newview/llfloatermap.cpp121
-rw-r--r--linden/indra/newview/llfloatermap.h3
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml8
4 files changed, 94 insertions, 47 deletions
diff --git a/ChangeLog.txt b/ChangeLog.txt
index ce8c579..8c1722a 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,3 +1,12 @@
12009-09-16 McCabe Maxsted <hakushakukun@gmail.com>
2
3 * Estate and track buttons now disable when they should, tweaked spacing.
4
5 modified: linden/indra/newview/llfloatermap.cpp
6 modified: linden/indra/newview/llfloatermap.h
7 modified: linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml
8
9
12009-09-15 McCabe Maxsted <hakushakukun@gmail.com> 102009-09-15 McCabe Maxsted <hakushakukun@gmail.com>
2 11
3 * Applied patch by Robin Cornelius for VWR-11128 - Python not always detected by develop.py. 12 * Applied patch by Robin Cornelius for VWR-11128 - Python not always detected by develop.py.
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 @@
51#include "llfloaterreporter.h" 51#include "llfloaterreporter.h"
52#include "llimview.h" 52#include "llimview.h"
53#include "llmutelist.h" 53#include "llmutelist.h"
54#include "llparcel.h"
55#include "llregionposition.h"
54#include "roles_constants.h" 56#include "roles_constants.h"
55#include "llscrolllistctrl.h" 57#include "llscrolllistctrl.h"
56#include "lltracker.h" 58#include "lltracker.h"
57#include "llviewerobjectlist.h" 59#include "llviewerobjectlist.h"
60#include "llviewermenu.h"
58#include "llviewermessage.h" 61#include "llviewermessage.h"
62#include "llviewerparcelmgr.h"
59#include "llviewerregion.h" 63#include "llviewerregion.h"
60#include "llviewerwindow.h" 64#include "llviewerwindow.h"
65#include "llvoavatar.h"
61#include "llworld.h" 66#include "llworld.h"
62 67
63LLFloaterMap::LLFloaterMap(const LLSD& key) 68LLFloaterMap::LLFloaterMap(const LLSD& key)
@@ -233,7 +238,7 @@ void LLFloaterMap::populateRadar()
233 238
234 // Add to list only if we get their name 239 // Add to list only if we get their name
235 std::string fullname = getSelectedName(avatar_ids[i]); 240 std::string fullname = getSelectedName(avatar_ids[i]);
236 if (!fullname.empty() && fullname != " ") 241 if (!fullname.empty())
237 { 242 {
238 std::string mute_text = LLMuteList::getInstance()->isMuted(avatar_ids[i]) ? getString("muted") : ""; 243 std::string mute_text = LLMuteList::getInstance()->isMuted(avatar_ids[i]) ? getString("muted") : "";
239 element["id"] = avatar_ids[i]; 244 element["id"] = avatar_ids[i];
@@ -281,30 +286,69 @@ void LLFloaterMap::populateRadar()
281 286
282void LLFloaterMap::toggleButtons() 287void LLFloaterMap::toggleButtons()
283{ 288{
284 BOOL enabled = FALSE; 289 BOOL enable = FALSE;
285 BOOL unmute_enabled = FALSE; 290 BOOL enable_unmute = FALSE;
291 BOOL enable_track = FALSE;
292 BOOL enable_estate = FALSE;
286 if (childHasFocus("RadarPanel")) 293 if (childHasFocus("RadarPanel"))
287 { 294 {
288 enabled = mSelectedAvatar.notNull() ? visibleItemsSelected() : FALSE; 295 enable = mSelectedAvatar.notNull() ? visibleItemsSelected() : FALSE;
289 unmute_enabled = mSelectedAvatar.notNull() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE; 296 enable_unmute = mSelectedAvatar.notNull() ? LLMuteList::getInstance()->isMuted(mSelectedAvatar) : FALSE;
297 enable_track = gAgent.isGodlike() || is_agent_mappable(mSelectedAvatar);
298 enable_estate = getKickable(mSelectedAvatar);
290 } 299 }
291 else 300 else
292 { 301 {
293 mRadarList->deselect(); 302 mRadarList->deselect();
294 } 303 }
295 304
296 childSetEnabled("im_btn", enabled); 305 childSetEnabled("im_btn", enable);
297 childSetEnabled("profile_btn", enabled); 306 childSetEnabled("profile_btn", enable);
298 childSetEnabled("offer_teleport_btn", enabled); 307 childSetEnabled("offer_teleport_btn", enable);
299 childSetEnabled("track_btn", enabled); 308 childSetEnabled("track_btn", enable_track);
300 childSetEnabled("invite_btn", enabled); 309 childSetEnabled("invite_btn", enable);
301 childSetEnabled("add_btn", enabled); 310 childSetEnabled("add_btn", enable);
302 childSetEnabled("freeze_btn", enabled); 311 childSetEnabled("freeze_btn", enable_estate);
303 childSetEnabled("eject_btn", enabled); 312 childSetEnabled("eject_btn", enable_estate);
304 childSetEnabled("mute_btn", enabled); 313 childSetEnabled("mute_btn", enable);
305 childSetEnabled("unmute_btn", unmute_enabled); 314 childSetEnabled("unmute_btn", enable_unmute);
306 childSetEnabled("ar_btn", enabled); 315 childSetEnabled("ar_btn", enable);
307 childSetEnabled("estate_eject_btn", enabled); 316 childSetEnabled("estate_eject_btn", enable_estate);
317}
318
319BOOL LLFloaterMap::getKickable(const LLUUID &agent_id)
320{
321 if (agent_id.notNull())
322 {
323 LLViewerObject* av_obj = gObjectList.findObject(agent_id);
324 if (av_obj != NULL && av_obj->isAvatar())
325 {
326 LLVOAvatar* avatar = (LLVOAvatar*)av_obj;
327 LLViewerRegion* region = avatar->getRegion();
328 if (region)
329 {
330 const LLVector3& pos = avatar->getPositionRegion();
331 const LLVector3d& pos_global = avatar->getPositionGlobal();
332 if (LLWorld::getInstance()->positionRegionValidGlobal(pos_global))
333 {
334 LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();
335
336 BOOL new_value = (region != NULL);
337
338 if (new_value)
339 {
340 new_value = region->isOwnedSelf(pos);
341 if (!new_value || region->isOwnedGroup(pos))
342 {
343 new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN);
344 }
345 }
346 return new_value;
347 }
348 }
349 }
350 }
351 return FALSE;
308} 352}
309 353
310// static 354// static
@@ -354,12 +398,8 @@ void LLFloaterMap::onClickIM(void* user_data)
354 if (item != NULL) 398 if (item != NULL)
355 { 399 {
356 LLUUID agent_id = item->getUUID(); 400 LLUUID agent_id = item->getUUID();
357 std::string fullname; 401 gIMMgr->setFloaterOpen(TRUE);
358 if(gCacheName->getFullName(agent_id, fullname)) 402 gIMMgr->addSession(getSelectedName(agent_id), IM_NOTHING_SPECIAL, agent_id);
359 {
360 gIMMgr->setFloaterOpen(TRUE);
361 gIMMgr->addSession(fullname, IM_NOTHING_SPECIAL, agent_id);
362 }
363 } 403 }
364} 404}
365 405
@@ -392,6 +432,7 @@ void LLFloaterMap::onClickTrack(void* user_data)
392{ 432{
393 LLFloaterMap* self = (LLFloaterMap*) user_data; 433 LLFloaterMap* self = (LLFloaterMap*) user_data;
394 LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus(); 434 LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus();
435
395 if (LLTracker::TRACKING_AVATAR == tracking_status) 436 if (LLTracker::TRACKING_AVATAR == tracking_status)
396 { 437 {
397 LLTracker::stopTracking(NULL); 438 LLTracker::stopTracking(NULL);
@@ -402,9 +443,7 @@ void LLFloaterMap::onClickTrack(void* user_data)
402 if (item != NULL) 443 if (item != NULL)
403 { 444 {
404 LLUUID agent_id = item->getUUID(); 445 LLUUID agent_id = item->getUUID();
405 std::string fullname; 446 LLTracker::trackAvatar(agent_id, getSelectedName(agent_id));
406 gCacheName->getFullName(agent_id, fullname);
407 LLTracker::trackAvatar(agent_id, fullname);
408 } 447 }
409 } 448 }
410} 449}
@@ -445,9 +484,7 @@ void LLFloaterMap::onClickAddFriend(void* user_data)
445 if (item != NULL) 484 if (item != NULL)
446 { 485 {
447 LLUUID agent_id = item->getUUID(); 486 LLUUID agent_id = item->getUUID();
448 std::string fullname; 487 LLPanelFriends::requestFriendshipDialog(agent_id, getSelectedName(agent_id));
449 gCacheName->getFullName(agent_id, fullname);
450 LLPanelFriends::requestFriendshipDialog(agent_id, fullname);
451 } 488 }
452} 489}
453 490
@@ -456,10 +493,10 @@ void LLFloaterMap::onClickAddFriend(void* user_data)
456// 493//
457 494
458//static 495//static
459std::string LLFloaterMap::getSelectedName(LLUUID agent_id) 496std::string LLFloaterMap::getSelectedName(const LLUUID &agent_id)
460{ 497{
461 std::string agent_name; 498 std::string agent_name;
462 if(agent_id.notNull() && gCacheName->getFullName(agent_id, agent_name)) 499 if(gCacheName->getFullName(agent_id, agent_name) && agent_name != " ")
463 { 500 {
464 return agent_name; 501 return agent_name;
465 } 502 }
@@ -516,7 +553,7 @@ void LLFloaterMap::onClickFreeze(void *user_data)
516 LLFloaterMap *self = (LLFloaterMap*)user_data; 553 LLFloaterMap *self = (LLFloaterMap*)user_data;
517 LLStringUtil::format_map_t args; 554 LLStringUtil::format_map_t args;
518 LLSD payload; 555 LLSD payload;
519 args["[AVATAR_NAME]"] = self->getSelectedName(self->mSelectedAvatar); 556 args["[AVATAR_NAME]"] = getSelectedName(self->mSelectedAvatar);
520 gViewerWindow->alertXml("FreezeAvatarFullname", args, callbackFreeze, user_data); 557 gViewerWindow->alertXml("FreezeAvatarFullname", args, callbackFreeze, user_data);
521} 558}
522 559
@@ -526,7 +563,7 @@ void LLFloaterMap::onClickEject(void *user_data)
526 LLFloaterMap *self = (LLFloaterMap*)user_data; 563 LLFloaterMap *self = (LLFloaterMap*)user_data;
527 LLStringUtil::format_map_t args; 564 LLStringUtil::format_map_t args;
528 LLSD payload; 565 LLSD payload;
529 args["AVATAR_NAME"] = self->getSelectedName(self->mSelectedAvatar); 566 args["AVATAR_NAME"] = getSelectedName(self->mSelectedAvatar);
530 gViewerWindow->alertXml("EjectAvatarFullName", args, callbackEject, user_data); 567 gViewerWindow->alertXml("EjectAvatarFullName", args, callbackEject, user_data);
531} 568}
532 569
@@ -534,11 +571,11 @@ void LLFloaterMap::onClickEject(void *user_data)
534void LLFloaterMap::onClickMute(void *user_data) 571void LLFloaterMap::onClickMute(void *user_data)
535{ 572{
536 LLFloaterMap *self = (LLFloaterMap*)user_data; 573 LLFloaterMap *self = (LLFloaterMap*)user_data;
537 574 LLScrollListItem *item = self->mRadarList->getFirstSelected();
538 LLUUID agent_id = self->mSelectedAvatar; 575 if (item != NULL)
539 std::string agent_name = self->getSelectedName(agent_id);
540 if(!agent_name.empty())
541 { 576 {
577 LLUUID agent_id = item->getUUID();
578 std::string agent_name = getSelectedName(agent_id);
542 if (LLMuteList::getInstance()->isMuted(agent_id)) 579 if (LLMuteList::getInstance()->isMuted(agent_id))
543 { 580 {
544 //LLMute mute(agent_id, agent_name, LLMute::AGENT); 581 //LLMute mute(agent_id, agent_name, LLMute::AGENT);
@@ -557,11 +594,11 @@ void LLFloaterMap::onClickMute(void *user_data)
557void LLFloaterMap::onClickUnmute(void *user_data) 594void LLFloaterMap::onClickUnmute(void *user_data)
558{ 595{
559 LLFloaterMap *self = (LLFloaterMap*)user_data; 596 LLFloaterMap *self = (LLFloaterMap*)user_data;
560 597 LLScrollListItem *item = self->mRadarList->getFirstSelected();
561 LLUUID agent_id = self->mSelectedAvatar; 598 if (item != NULL)
562 std::string agent_name = self->getSelectedName(agent_id);
563 if(!agent_name.empty())
564 { 599 {
600 LLUUID agent_id = item->getUUID();
601 std::string agent_name = getSelectedName(agent_id);
565 if (LLMuteList::getInstance()->isMuted(agent_id)) 602 if (LLMuteList::getInstance()->isMuted(agent_id))
566 { 603 {
567 LLMute mute(agent_id, agent_name, LLMute::AGENT); 604 LLMute mute(agent_id, agent_name, LLMute::AGENT);
@@ -582,7 +619,7 @@ void LLFloaterMap::onClickEjectFromEstate(void *user_data)
582 LLFloaterMap *self = (LLFloaterMap*)user_data; 619 LLFloaterMap *self = (LLFloaterMap*)user_data;
583 LLStringUtil::format_map_t args; 620 LLStringUtil::format_map_t args;
584 LLSD payload; 621 LLSD payload;
585 args["EVIL_USER"] = self->getSelectedName(self->mSelectedAvatar); 622 args["EVIL_USER"] = getSelectedName(self->mSelectedAvatar);
586 gViewerWindow->alertXml("EstateKickUser", args, callbackEjectFromEstate, user_data); 623 gViewerWindow->alertXml("EstateKickUser", args, callbackEjectFromEstate, user_data);
587} 624}
588 625
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:
72 static void onList(LLUICtrl* ctrl, void* user_data); 72 static void onList(LLUICtrl* ctrl, void* user_data);
73 static void onRangeChange(LLFocusableElement* focus, void* user_data); 73 static void onRangeChange(LLFocusableElement* focus, void* user_data);
74 BOOL visibleItemsSelected() const; 74 BOOL visibleItemsSelected() const;
75 BOOL getKickable(const LLUUID &agent_id);
75 void toggleButtons(); 76 void toggleButtons();
76 void populateRadar(); 77 void populateRadar();
77 78
@@ -83,7 +84,7 @@ private:
83 static void onClickInvite(void* user_data); 84 static void onClickInvite(void* user_data);
84 static void callback_invite_to_group(LLUUID group_id, void *user_data); 85 static void callback_invite_to_group(LLUUID group_id, void *user_data);
85 86
86 static std::string getSelectedName(LLUUID agent_id); 87 static std::string getSelectedName(const LLUUID &agent_id);
87 static void onClickFreeze(void *user_data); 88 static void onClickFreeze(void *user_data);
88 static void onClickEject(void *user_data); 89 static void onClickEject(void *user_data);
89 static void onClickMute(void *user_data); 90 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 @@
36 width="40"> 36 width="40">
37 Meters 37 Meters
38 </text> 38 </text>
39 <tab_container border="false" bottom_delta="-179" height="174" left="0" mouse_opaque="false" 39 <tab_container border="false" bottom_delta="-176" height="172" left="0" mouse_opaque="false"
40 name="button_container" tab_position="top" follows="left|right|bottom" width="198"> 40 name="button_container" tab_position="top" follows="left|right|bottom" width="198">
41 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="160" 41 <panel border="true" bottom="-180" follows="left|top|right|bottom" height="160"
42 label="Avatars" left="1" mouse_opaque="true" name="avatar_tab" width="198"> 42 label="Avatars" left="1" mouse_opaque="true" name="avatar_tab" width="198">
@@ -76,17 +76,17 @@
76 <button bottom_delta="-25" follows="top|right" height="22" label="Report..." 76 <button bottom_delta="-25" follows="top|right" height="22" label="Report..."
77 left_delta="0" name="ar_btn" 77 left_delta="0" name="ar_btn"
78 tool_tip="" width="80" /> 78 tool_tip="" width="80" />
79 <button bottom_delta="-25" follows="top|right" height="22" label="Estate..." 79 <button bottom_delta="-25" follows="top|right" height="22" label="Kick..."
80 left_delta="0" name="estate_eject_btn" tool_tip="" 80 left_delta="0" name="estate_eject_btn" tool_tip=""
81 width="80" /> 81 width="80" />
82 </panel> 82 </panel>
83 </tab_container> 83 </tab_container>
84 <scroll_list bottom="-187" width="96" height="140" left="10" 84 <scroll_list bottom="-190" width="104" height="143" left="4"
85 follows="left|bottom|right" draw_border="false" draw_heading="true" 85 follows="left|bottom|right" draw_border="false" draw_heading="true"
86 draw_stripes="true" column_padding="5" sort_column="1" mouse_opaque="true" 86 draw_stripes="true" column_padding="5" sort_column="1" mouse_opaque="true"
87 background_visible="true" multi_select="false" name="RadarList"> 87 background_visible="true" multi_select="false" name="RadarList">
88 <column name="avatar_name" label="Name" dynamicwidth="true" /> 88 <column name="avatar_name" label="Name" dynamicwidth="true" />
89 <column name="avatar_distance" label="Dist." width="55" /> 89 <column name="avatar_distance" label="Dist." width="48" />
90 </scroll_list> 90 </scroll_list>
91 </panel> 91 </panel>
92 <string name="no_one_near"> 92 <string name="no_one_near">