aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.txt64
-rw-r--r--linden/indra/newview/app_settings/settings.xml13
-rw-r--r--linden/indra/newview/llfirstuse.cpp11
-rw-r--r--linden/indra/newview/llfirstuse.h1
-rw-r--r--linden/indra/newview/llfloatermap.cpp638
-rw-r--r--linden/indra/newview/llfloatermap.h45
-rw-r--r--linden/indra/newview/llnetmap.cpp41
-rw-r--r--linden/indra/newview/llnetmap.h18
-rw-r--r--linden/indra/newview/llpanelgeneral.cpp2
-rw-r--r--linden/indra/newview/skins/default/colors_base.xml1
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml97
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml5
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/notify.xml5
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml4
15 files changed, 925 insertions, 22 deletions
diff --git a/ChangeLog.txt b/ChangeLog.txt
index bec47c6..ab8c1d7 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -30,9 +30,18 @@
30 30
31 * Applied patch by Aleric Inglewood for VWR-13996 - avatars using 1.22 completely invisible on first sight. 31 * Applied patch by Aleric Inglewood for VWR-13996 - avatars using 1.22 completely invisible on first sight.
32 32
33 modified: linden/indra/newview/llspatialpartition.cpp 33 modified: linden/indra/newview/llspatialpartition.cpp
34 34
35 35
362009-09-16 McCabe Maxsted <hakushakukun@gmail.com>
37
38 * Estate and track buttons now disable when they should, tweaked spacing.
39
40 modified: linden/indra/newview/llfloatermap.cpp
41 modified: linden/indra/newview/llfloatermap.h
42 modified: linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml
43
44
362009-09-15 McCabe Maxsted <hakushakukun@gmail.com> 452009-09-15 McCabe Maxsted <hakushakukun@gmail.com>
37 46
38 * Applied patch by Robin Cornelius for VWR-11128 - Python not always detected by develop.py. 47 * Applied patch by Robin Cornelius for VWR-11128 - Python not always detected by develop.py.
@@ -53,7 +62,50 @@
53 new file: linden/indra/newview/app_settings/windlight/skies/Rouge%204.xml 62 new file: linden/indra/newview/app_settings/windlight/skies/Rouge%204.xml
54 new file: linden/indra/newview/app_settings/windlight/skies/Rouge%205.xml 63 new file: linden/indra/newview/app_settings/windlight/skies/Rouge%205.xml
55 new file: linden/indra/newview/app_settings/windlight/skies/Rouge%206.xml 64 new file: linden/indra/newview/app_settings/windlight/skies/Rouge%206.xml
65
66
67 * Added tabs to mini-map radar.
68
69 modified: linden/indra/newview/llfloatermap.cpp
70 modified: linden/indra/newview/llfloatermap.h
71 modified: linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml
72
73
74 * Some code cleanup.
75
76 modified: linden/indra/newview/llfloatermap.cpp
77 modified: linden/indra/newview/llfloatermap.h
78 modified: linden/indra/newview/llnetmap.cpp
79
80
81 * Fixed bad RLVa behavior in minimap.
82
83 modified: linden/indra/newview/llnetmap.cpp
56 84
85
86 * Don't track avatars when focus lost.
87
88 modified: linden/indra/newview/llfloatermap.cpp
89
90
91 * Fixed min minimap size.
92
93 modified: linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml
94
95
96 * Moved Rotate Mini-Map option to mini-map menu, added first use dialog.
97
98 modified: linden/indra/newview/llfirstuse.cpp
99 modified: linden/indra/newview/llfirstuse.h
100 modified: linden/indra/newview/llfloatermap.cpp
101 modified: linden/indra/newview/llnetmap.cpp
102 modified: linden/indra/newview/llnetmap.h
103 modified: linden/indra/newview/llpanelgeneral.cpp
104 modified: linden/indra/newview/app_settings/settings.xml
105 modified: linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml
106 modified: linden/indra/newview/skins/default/xui/en-us/notify.xml
107 modified: linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
108
57 109
582009-09-14 McCabe Maxsted <hakushakukun@gmail.com> 1102009-09-14 McCabe Maxsted <hakushakukun@gmail.com>
59 111
@@ -566,6 +618,16 @@
566 modified: linden/indra/cmake/GStreamer.cmake 618 modified: linden/indra/cmake/GStreamer.cmake
567 619
568 620
6212009-08-12 McCabe Maxsted <hakushakukun@gmail.com>
622
623 * Added basic radar to the minimap.
624
625 modified: linden/indra/newview/llfloatermap.cpp
626 modified: linden/indra/newview/llfloatermap.h
627 modified: linden/indra/newview/llnetmap.cpp
628 modified: linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml
629
630
5692009-06-14 McCabe Maxsted <hakushakukun@gmail.com> 6312009-06-14 McCabe Maxsted <hakushakukun@gmail.com>
570 632
571 * Added IM preference for showing IMs in either main or local chat. 633 * Added IM preference for showing IMs in either main or local chat.
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 60abc1b..f4d853b 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -5245,7 +5245,7 @@
5245 <key>Type</key> 5245 <key>Type</key>
5246 <string>F32</string> 5246 <string>F32</string>
5247 <key>Value</key> 5247 <key>Value</key>
5248 <integer>20</integer> 5248 <integer>96</integer>
5249 </map> 5249 </map>
5250 <key>NewCacheLocation</key> 5250 <key>NewCacheLocation</key>
5251 <map> 5251 <map>
@@ -10339,6 +10339,17 @@
10339 <key>Value</key> 10339 <key>Value</key>
10340 <integer>1</integer> 10340 <integer>1</integer>
10341 </map> 10341 </map>
10342 <key>WarnFirstMiniMap</key>
10343 <map>
10344 <key>Comment</key>
10345 <string>Enables FirstMiniMap warning dialog</string>
10346 <key>Persist</key>
10347 <integer>1</integer>
10348 <key>Type</key>
10349 <string>Boolean</string>
10350 <key>Value</key>
10351 <integer>1</integer>
10352 </map>
10342 <key>WarnFirstOverrideKeys</key> 10353 <key>WarnFirstOverrideKeys</key>
10343 <map> 10354 <map>
10344 <key>Comment</key> 10355 <key>Comment</key>
diff --git a/linden/indra/newview/llfirstuse.cpp b/linden/indra/newview/llfirstuse.cpp
index ee7053d..b807b17 100644
--- a/linden/indra/newview/llfirstuse.cpp
+++ b/linden/indra/newview/llfirstuse.cpp
@@ -131,6 +131,17 @@ void LLFirstUse::useMap()
131} 131}
132 132
133// static 133// static
134void LLFirstUse::useMiniMap()
135{
136 if (gSavedSettings.getWarning("FirstMiniMap"))
137 {
138 gSavedSettings.setWarning("FirstMiniMap", FALSE);
139
140 LLNotifyBox::showXml("FirstMiniMap");
141 }
142}
143
144// static
134void LLFirstUse::useGoTo() 145void LLFirstUse::useGoTo()
135{ 146{
136 // nothing for now JC 147 // nothing for now JC
diff --git a/linden/indra/newview/llfirstuse.h b/linden/indra/newview/llfirstuse.h
index eef0537..cbb31ab 100644
--- a/linden/indra/newview/llfirstuse.h
+++ b/linden/indra/newview/llfirstuse.h
@@ -92,6 +92,7 @@ public:
92 static void useBalanceDecrease(S32 delta); 92 static void useBalanceDecrease(S32 delta);
93 static void useSit(); 93 static void useSit();
94 static void useMap(); 94 static void useMap();
95 static void useMiniMap();
95 static void useGoTo(); 96 static void useGoTo();
96 static void useBuild(); 97 static void useBuild();
97 static void useLeftClickNoHit(); 98 static void useLeftClickNoHit();
diff --git a/linden/indra/newview/llfloatermap.cpp b/linden/indra/newview/llfloatermap.cpp
index 8714d4f..3be891e 100644
--- a/linden/indra/newview/llfloatermap.cpp
+++ b/linden/indra/newview/llfloatermap.cpp
@@ -42,14 +42,40 @@
42#include "llresizebar.h" 42#include "llresizebar.h"
43#include "lluictrlfactory.h" 43#include "lluictrlfactory.h"
44 44
45// radar
46#include "llfirstuse.h"
47#include "llfloateravatarinfo.h"
48#include "llfloaterfriends.h"
49#include "llfloatergroupinvite.h"
50#include "llfloatergroups.h"
51#include "llfloaterreporter.h"
52#include "llimview.h"
53#include "llmutelist.h"
54#include "llparcel.h"
55#include "llregionposition.h"
56#include "roles_constants.h"
57#include "llscrolllistctrl.h"
58#include "lltracker.h"
59#include "llviewerobjectlist.h"
60#include "llviewermenu.h"
61#include "llviewermessage.h"
62#include "llviewerparcelmgr.h"
63#include "llviewerregion.h"
64#include "llviewerwindow.h"
65#include "llvoavatar.h"
66#include "llworld.h"
67
45LLFloaterMap::LLFloaterMap(const LLSD& key) 68LLFloaterMap::LLFloaterMap(const LLSD& key)
46 : 69 :
47 LLFloater(std::string("minimap")), 70 LLFloater(std::string("minimap")),
48 mPanelMap(NULL) 71 mPanelMap(NULL),
72 mUpdate(TRUE)
49{ 73{
50 LLCallbackMap::map_t factory_map; 74 LLCallbackMap::map_t factory_map;
51 factory_map["mini_mapview"] = LLCallbackMap(createPanelMiniMap, this); 75 factory_map["mini_mapview"] = LLCallbackMap(createPanelMiniMap, this);
52 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_mini_map.xml", &factory_map, FALSE); 76 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_mini_map.xml", &factory_map, FALSE);
77
78 mSelectedAvatar.setNull();
53} 79}
54 80
55 81
@@ -67,6 +93,30 @@ BOOL LLFloaterMap::postBuild()
67 sendChildToBack(getDragHandle()); 93 sendChildToBack(getDragHandle());
68 sendChildToFront(getChild<LLButton>("llfloater_close_btn")); 94 sendChildToFront(getChild<LLButton>("llfloater_close_btn"));
69 setIsChrome(TRUE); 95 setIsChrome(TRUE);
96
97 mRadarList = getChild<LLScrollListCtrl>("RadarList");
98 childSetCommitCallback("RadarList", onList, this);
99 mRadarList->setDoubleClickCallback(onClickIM);
100
101 childSetFocusChangedCallback("near_me_range", onRangeChange, this);
102
103 childSetAction("im_btn", onClickIM, this);
104 childSetAction("profile_btn", onClickProfile, this);
105 childSetAction("offer_teleport_btn", onClickOfferTeleport, this);
106 childSetAction("track_btn", onClickTrack, this);
107 childSetAction("invite_btn", onClickInvite, this);
108 childSetAction("add_btn", onClickAddFriend, this);
109 childSetAction("freeze_btn", onClickFreeze, this);
110 childSetAction("eject_btn", onClickEject, this);
111 childSetAction("mute_btn", onClickMute, this);
112 childSetAction("unmute_btn", onClickUnmute, this);
113 childSetAction("ar_btn", onClickAR, this);
114 childSetAction("estate_eject_btn", onClickEjectFromEstate, this);
115
116 setDefaultBtn("im_btn");
117
118 populateRadar();
119
70 return TRUE; 120 return TRUE;
71} 121}
72 122
@@ -122,13 +172,597 @@ void LLFloaterMap::draw()
122 } 172 }
123} 173}
124 174
125
126// [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-05 (RLVa-1.0.0c) 175// [RLVa:KB] - Version: 1.22.11 | Checked: 2009-07-05 (RLVa-1.0.0c)
127void LLFloaterMap::open() 176void LLFloaterMap::open()
128{ 177{
129 if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWMINIMAP)) 178 if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWMINIMAP))
130 { 179 {
131 LLFloater::open(); 180 LLFloater::open();
181 LLFirstUse::useMiniMap();
132 } 182 }
133} 183}
134// [/RLVa:KB] 184// [/RLVa:KB]
185
186// TODO: make this detachable
187// TODO: make this expand/collapse
188
189/*
190* Imprudence Radar
191* @brief inworld radar integrated with the minimap
192* by McCabe Maxsted
193* Estate tab portion by Dale Glass
194*/
195
196//static
197void LLFloaterMap::updateRadar()
198{
199 LLFloaterMap::getInstance()->populateRadar();
200}
201
202void LLFloaterMap::populateRadar()
203{
204 if (!mUpdate || !LLFloaterMap::getInstance()->getVisible())
205 {
206 return;
207 }
208
209 if (visibleItemsSelected())
210 {
211 mSelectedAvatar = mRadarList->getFirstSelected()->getUUID();
212 }
213 else
214 {
215 mSelectedAvatar.setNull();
216 }
217
218 S32 scroll_pos = mRadarList->getScrollPos();
219
220 LLVector3d current_pos = gAgent.getPositionGlobal();
221
222 // find what avatars you can see
223 std::vector<LLUUID> avatar_ids;
224 std::vector<LLVector3d> positions;
225 LLWorld::getInstance()->getAvatars(&avatar_ids, &positions, current_pos, gSavedSettings.getF32("NearMeRange"));
226
227 LLSD element;
228
229 mRadarList->deleteAllItems();
230
231 for (U32 i=0; i<avatar_ids.size(); i++)
232 {
233 if (avatar_ids[i] == gAgent.getID() ||
234 avatar_ids[i].isNull())
235 {
236 continue;
237 }
238
239 // Add to list only if we get their name
240 std::string fullname = getSelectedName(avatar_ids[i]);
241 if (!fullname.empty())
242 {
243 std::string mute_text = LLMuteList::getInstance()->isMuted(avatar_ids[i]) ? getString("muted") : "";
244 element["id"] = avatar_ids[i];
245 element["columns"][0]["column"] = "avatar_name";
246 element["columns"][0]["type"] = "text";
247 element["columns"][0]["value"] = fullname + " " + mute_text;
248 element["columns"][1]["column"] = "avatar_distance";
249 element["columns"][1]["type"] = "text";
250
251 LLVector3d temp = positions[i] - current_pos;
252 F32 distance = (F32)temp.magVec();
253 char dist[32];
254 snprintf(dist, sizeof(dist), "%.1f", distance);
255 element["columns"][1]["value"] = strcat(dist,"m");
256
257 mRadarList->addElement(element, ADD_BOTTOM);
258 }
259 }
260
261 mRadarList->sortItems();
262 mRadarList->setScrollPos(scroll_pos);
263 if (mSelectedAvatar.notNull())
264 {
265 mRadarList->selectByID(mSelectedAvatar);
266 }
267
268 // set count
269 std::stringstream avatar_count;
270 avatar_count.str("");
271 if (avatar_ids.empty())
272 {
273 mRadarList->addCommentText(getString("no_one_near"), ADD_TOP);
274 avatar_count << "0";
275 }
276 else
277 {
278 avatar_count << (int)avatar_ids.size();
279 }
280 childSetText("lblAvatarCount", avatar_count.str());
281
282 toggleButtons();
283
284 //llinfos << "mSelectedAvatar: " << mSelectedAvatar.asString() << llendl;
285}
286
287void LLFloaterMap::toggleButtons()
288{
289 BOOL enable = FALSE;
290 BOOL enable_unmute = FALSE;
291 BOOL enable_track = FALSE;
292 BOOL enable_estate = FALSE;
293 if (childHasFocus("RadarPanel"))
294 {
295 enable = mSelectedAvatar.notNull() ? visibleItemsSelected() : 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);
299 }
300 else
301 {
302 mRadarList->deselect();
303 }
304
305 childSetEnabled("im_btn", enable);
306 childSetEnabled("profile_btn", enable);
307 childSetEnabled("offer_teleport_btn", enable);
308 childSetEnabled("track_btn", enable_track);
309 childSetEnabled("invite_btn", enable);
310 childSetEnabled("add_btn", enable);
311 childSetEnabled("freeze_btn", enable_estate);
312 childSetEnabled("eject_btn", enable_estate);
313 childSetEnabled("mute_btn", enable);
314 childSetEnabled("unmute_btn", enable_unmute);
315 childSetEnabled("ar_btn", enable);
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;
352}
353
354// static
355void LLFloaterMap::onList(LLUICtrl* ctrl, void* user_data)
356{
357 LLFloaterMap* self = (LLFloaterMap*)user_data;
358 if (self)
359 {
360 self->toggleButtons();
361 }
362}
363
364BOOL LLFloaterMap::visibleItemsSelected() const
365{
366 if (mRadarList->getFirstSelectedIndex() >= 0)
367 {
368 return TRUE;
369 }
370 return FALSE;
371}
372
373// static
374void LLFloaterMap::onRangeChange(LLFocusableElement* focus, void* user_data)
375{
376 LLFloaterMap* self = (LLFloaterMap*)user_data;
377 if (self)
378 {
379 self->mUpdate = !(self->childHasFocus("near_me_range"));
380 }
381}
382
383// static
384LLUUID LLFloaterMap::getSelected()
385{
386 return LLFloaterMap::getInstance()->mSelectedAvatar;
387}
388
389//
390// Avatar tab
391//
392
393// static
394void LLFloaterMap::onClickIM(void* user_data)
395{
396 LLFloaterMap* self = (LLFloaterMap*) user_data;
397 LLScrollListItem *item = self->mRadarList->getFirstSelected();
398 if (item != NULL)
399 {
400 LLUUID agent_id = item->getUUID();
401 gIMMgr->setFloaterOpen(TRUE);
402 gIMMgr->addSession(getSelectedName(agent_id), IM_NOTHING_SPECIAL, agent_id);
403 }
404}
405
406// static
407void LLFloaterMap::onClickProfile(void* user_data)
408{
409 LLFloaterMap* self = (LLFloaterMap*) user_data;
410 LLScrollListItem *item = self->mRadarList->getFirstSelected();
411 if (item != NULL)
412 {
413 LLUUID agent_id = item->getUUID();
414 LLFloaterAvatarInfo::show(agent_id);
415 }
416}
417
418// static
419void LLFloaterMap::onClickOfferTeleport(void* user_data)
420{
421 LLFloaterMap* self = (LLFloaterMap*) user_data;
422 LLScrollListItem *item = self->mRadarList->getFirstSelected();
423 if (item != NULL)
424 {
425 LLUUID agent_id = item->getUUID();
426 handle_lure(agent_id);
427 }
428}
429
430// static
431void LLFloaterMap::onClickTrack(void* user_data)
432{
433 LLFloaterMap* self = (LLFloaterMap*) user_data;
434 LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus();
435
436 if (LLTracker::TRACKING_AVATAR == tracking_status)
437 {
438 LLTracker::stopTracking(NULL);
439 }
440 else
441 {
442 LLScrollListItem *item = self->mRadarList->getFirstSelected();
443 if (item != NULL)
444 {
445 LLUUID agent_id = item->getUUID();
446 LLTracker::trackAvatar(agent_id, getSelectedName(agent_id));
447 }
448 }
449}
450
451// static
452void LLFloaterMap::onClickInvite(void* user_data)
453{
454 LLFloaterMap* self = (LLFloaterMap*) user_data;
455 LLScrollListItem *item = self->mRadarList->getFirstSelected();
456 if (item != NULL)
457 {
458 LLUUID agent_id = item->getUUID();
459 LLFloaterGroupPicker* widget;
460 widget = LLFloaterGroupPicker::showInstance(LLSD(gAgent.getID()));
461 if (widget)
462 {
463 widget->center();
464 widget->setPowersMask(GP_MEMBER_INVITE);
465 widget->setSelectCallback(callback_invite_to_group, (void *)&agent_id);
466 }
467 }
468}
469
470// static
471void LLFloaterMap::callback_invite_to_group(LLUUID group_id, void *user_data)
472{
473 std::vector<LLUUID> agent_ids;
474 agent_ids.push_back(*(LLUUID *)user_data);
475
476 LLFloaterGroupInvite::showForGroup(group_id, &agent_ids);
477}
478
479// static
480void LLFloaterMap::onClickAddFriend(void* user_data)
481{
482 LLFloaterMap* self = (LLFloaterMap*) user_data;
483 LLScrollListItem *item = self->mRadarList->getFirstSelected();
484 if (item != NULL)
485 {
486 LLUUID agent_id = item->getUUID();
487 LLPanelFriends::requestFriendshipDialog(agent_id, getSelectedName(agent_id));
488 }
489}
490
491//
492// Estate tab
493//
494
495//static
496std::string LLFloaterMap::getSelectedName(const LLUUID &agent_id)
497{
498 std::string agent_name;
499 if(gCacheName->getFullName(agent_id, agent_name) && agent_name != " ")
500 {
501 return agent_name;
502 }
503 return LLStringUtil::null;
504}
505
506//static
507void LLFloaterMap::callbackFreeze(S32 option, void *user_data)
508{
509 LLFloaterMap *self = (LLFloaterMap*)user_data;
510
511 if ( option == 0 )
512 {
513 sendFreeze(self->mSelectedAvatar, true);
514 }
515 else if ( option == 1 )
516 {
517 sendFreeze(self->mSelectedAvatar, false);
518 }
519}
520
521//static
522void LLFloaterMap::callbackEject(S32 option, void *user_data)
523{
524 LLFloaterMap *self = (LLFloaterMap*)user_data;
525
526 if ( option == 0 )
527 {
528 sendEject(self->mSelectedAvatar, false);
529 }
530 else if ( option == 1 )
531 {
532 sendEject(self->mSelectedAvatar, true);
533 }
534}
535
536//static
537void LLFloaterMap::callbackEjectFromEstate(S32 option, void *user_data)
538{
539 LLFloaterMap *self = (LLFloaterMap*)user_data;
540
541 if ( option == 0 )
542 {
543 cmdEstateEject(self->mSelectedAvatar);
544 }
545 else if ( option == 1 )
546 {
547 cmdEstateBan(self->mSelectedAvatar);
548 }
549}
550
551void LLFloaterMap::onClickFreeze(void *user_data)
552{
553 LLFloaterMap *self = (LLFloaterMap*)user_data;
554 LLStringUtil::format_map_t args;
555 LLSD payload;
556 args["[AVATAR_NAME]"] = getSelectedName(self->mSelectedAvatar);
557 gViewerWindow->alertXml("FreezeAvatarFullname", args, callbackFreeze, user_data);
558}
559
560//static
561void LLFloaterMap::onClickEject(void *user_data)
562{
563 LLFloaterMap *self = (LLFloaterMap*)user_data;
564 LLStringUtil::format_map_t args;
565 LLSD payload;
566 args["AVATAR_NAME"] = getSelectedName(self->mSelectedAvatar);
567 gViewerWindow->alertXml("EjectAvatarFullName", args, callbackEject, user_data);
568}
569
570//static
571void LLFloaterMap::onClickMute(void *user_data)
572{
573 LLFloaterMap *self = (LLFloaterMap*)user_data;
574 LLScrollListItem *item = self->mRadarList->getFirstSelected();
575 if (item != NULL)
576 {
577 LLUUID agent_id = item->getUUID();
578 std::string agent_name = getSelectedName(agent_id);
579 if (LLMuteList::getInstance()->isMuted(agent_id))
580 {
581 //LLMute mute(agent_id, agent_name, LLMute::AGENT);
582 //LLMuteList::getInstance()->remove(mute);
583 //LLFloaterMute::getInstance()->selectMute(agent_id);
584 }
585 else
586 {
587 LLMute mute(agent_id, agent_name, LLMute::AGENT);
588 LLMuteList::getInstance()->add(mute);
589 }
590 }
591}
592
593//static
594void LLFloaterMap::onClickUnmute(void *user_data)
595{
596 LLFloaterMap *self = (LLFloaterMap*)user_data;
597 LLScrollListItem *item = self->mRadarList->getFirstSelected();
598 if (item != NULL)
599 {
600 LLUUID agent_id = item->getUUID();
601 std::string agent_name = getSelectedName(agent_id);
602 if (LLMuteList::getInstance()->isMuted(agent_id))
603 {
604 LLMute mute(agent_id, agent_name, LLMute::AGENT);
605 LLMuteList::getInstance()->remove(mute);
606 //LLFloaterMute::getInstance()->selectMute(agent_id);
607 }
608 else
609 {
610 //LLMute mute(agent_id, agent_name, LLMute::AGENT);
611 //LLMuteList::getInstance()->add(mute);
612 }
613 }
614}
615
616//static
617void LLFloaterMap::onClickEjectFromEstate(void *user_data)
618{
619 LLFloaterMap *self = (LLFloaterMap*)user_data;
620 LLStringUtil::format_map_t args;
621 LLSD payload;
622 args["EVIL_USER"] = getSelectedName(self->mSelectedAvatar);
623 gViewerWindow->alertXml("EstateKickUser", args, callbackEjectFromEstate, user_data);
624}
625
626//static
627void LLFloaterMap::onClickAR(void *user_data)
628{
629 LLFloaterMap *self = (LLFloaterMap*)user_data;
630 LLUUID agent_id = self->mSelectedAvatar;
631
632 if (agent_id.notNull())
633 {
634 LLFloaterReporter::showFromObject(agent_id);
635 }
636}
637
638// static
639void LLFloaterMap::cmdEstateEject(const LLUUID &avatar)
640{
641 sendEstateMessage("teleporthomeuser", avatar);
642}
643
644// static
645void LLFloaterMap::cmdEstateBan(const LLUUID &avatar)
646{
647 sendEstateMessage("teleporthomeuser", avatar); // Kick first, just to be sure
648 sendEstateBan(avatar);
649}
650
651// static
652void LLFloaterMap::sendFreeze(const LLUUID& avatar_id, bool freeze)
653{
654 U32 flags = 0x0;
655 if (!freeze)
656 {
657 // unfreeze
658 flags |= 0x1;
659 }
660
661 LLMessageSystem* msg = gMessageSystem;
662 LLViewerObject* avatar = gObjectList.findObject(avatar_id);
663
664 if (avatar)
665 {
666 msg->newMessage("FreezeUser");
667 msg->nextBlock("AgentData");
668 msg->addUUID("AgentID", gAgent.getID());
669 msg->addUUID("SessionID", gAgent.getSessionID());
670 msg->nextBlock("Data");
671 msg->addUUID("TargetID", avatar_id );
672 msg->addU32("Flags", flags );
673 msg->sendReliable( avatar->getRegion()->getHost() );
674 }
675}
676
677// static
678void LLFloaterMap::sendEject(const LLUUID& avatar_id, bool ban)
679{
680 LLMessageSystem* msg = gMessageSystem;
681 LLViewerObject* avatar = gObjectList.findObject(avatar_id);
682
683 if (avatar)
684 {
685 U32 flags = 0x0;
686 if ( ban )
687 {
688 // eject and add to ban list
689 flags |= 0x1;
690 }
691
692 msg->newMessage("EjectUser");
693 msg->nextBlock("AgentData");
694 msg->addUUID("AgentID", gAgent.getID() );
695 msg->addUUID("SessionID", gAgent.getSessionID() );
696 msg->nextBlock("Data");
697 msg->addUUID("TargetID", avatar_id );
698 msg->addU32("Flags", flags );
699 msg->sendReliable( avatar->getRegion()->getHost() );
700 }
701}
702
703// static
704void LLFloaterMap::sendEstateMessage(const char* request, const LLUUID &target)
705{
706
707 LLMessageSystem* msg = gMessageSystem;
708 LLUUID invoice;
709
710 // This seems to provide an ID so that the sim can say which request it's
711 // replying to. I think this can be ignored for now.
712 invoice.generate();
713
714 llinfos << "Sending estate request '" << request << "'" << llendl;
715 msg->newMessage("EstateOwnerMessage");
716 msg->nextBlockFast(_PREHASH_AgentData);
717 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
718 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
719 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
720 msg->nextBlock("MethodData");
721 msg->addString("Method", request);
722 msg->addUUID("Invoice", invoice);
723
724 // Agent id
725 msg->nextBlock("ParamList");
726 msg->addString("Parameter", gAgent.getID().asString().c_str());
727
728 // Target
729 msg->nextBlock("ParamList");
730 msg->addString("Parameter", target.asString().c_str());
731
732 msg->sendReliable(gAgent.getRegion()->getHost());
733}
734
735// static
736void LLFloaterMap::sendEstateBan(const LLUUID& agent)
737{
738 LLUUID invoice;
739 U32 flags = ESTATE_ACCESS_BANNED_AGENT_ADD;
740
741 invoice.generate();
742
743 LLMessageSystem* msg = gMessageSystem;
744 msg->newMessage("EstateOwnerMessage");
745 msg->nextBlockFast(_PREHASH_AgentData);
746 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
747 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
748 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
749
750 msg->nextBlock("MethodData");
751 msg->addString("Method", "estateaccessdelta");
752 msg->addUUID("Invoice", invoice);
753
754 char buf[MAX_STRING]; /* Flawfinder: ignore*/
755 gAgent.getID().toString(buf);
756 msg->nextBlock("ParamList");
757 msg->addString("Parameter", buf);
758
759 snprintf(buf, MAX_STRING, "%u", flags); /* Flawfinder: ignore */
760 msg->nextBlock("ParamList");
761 msg->addString("Parameter", buf);
762
763 agent.toString(buf);
764 msg->nextBlock("ParamList");
765 msg->addString("Parameter", buf);
766
767 gAgent.sendReliableMessage();
768}
diff --git a/linden/indra/newview/llfloatermap.h b/linden/indra/newview/llfloatermap.h
index 857b1ed..81e4159 100644
--- a/linden/indra/newview/llfloatermap.h
+++ b/linden/indra/newview/llfloatermap.h
@@ -33,6 +33,7 @@
33#define LL_LLFLOATERMAP_H 33#define LL_LLFLOATERMAP_H
34 34
35#include "llfloater.h" 35#include "llfloater.h"
36#include "llscrolllistctrl.h"
36 37
37class LLNetMap; 38class LLNetMap;
38 39
@@ -46,6 +47,9 @@ public:
46 47
47 static void* createPanelMiniMap(void* data); 48 static void* createPanelMiniMap(void* data);
48 49
50 static void updateRadar();
51 static LLUUID getSelected();
52
49 BOOL postBuild(); 53 BOOL postBuild();
50 54
51 /*virtual*/ void draw(); 55 /*virtual*/ void draw();
@@ -59,7 +63,46 @@ public:
59 63
60private: 64private:
61 LLFloaterMap(const LLSD& key = LLSD()); 65 LLFloaterMap(const LLSD& key = LLSD());
62 LLNetMap* mPanelMap; 66
67 LLNetMap* mPanelMap;
68 LLScrollListCtrl* mRadarList;
69 LLUUID mSelectedAvatar;
70 bool mUpdate;
71
72 static void onList(LLUICtrl* ctrl, void* user_data);
73 static void onRangeChange(LLFocusableElement* focus, void* user_data);
74 BOOL visibleItemsSelected() const;
75 BOOL getKickable(const LLUUID &agent_id);
76 void toggleButtons();
77 void populateRadar();
78
79 static void onClickProfile(void* user_data);
80 static void onClickIM(void* user_data);
81 static void onClickAddFriend(void* user_data);
82 static void onClickOfferTeleport(void* user_data);
83 static void onClickTrack(void* user_data);
84 static void onClickInvite(void* user_data);
85 static void callback_invite_to_group(LLUUID group_id, void *user_data);
86
87 static std::string getSelectedName(const LLUUID &agent_id);
88 static void onClickFreeze(void *user_data);
89 static void onClickEject(void *user_data);
90 static void onClickMute(void *user_data);
91 static void onClickUnmute(void *user_data);
92 static void onClickAR(void *user_data);
93 static void onClickEjectFromEstate(void *user_data);
94
95 static void callbackFreeze(S32 option, void *user_data);
96 static void callbackEject(S32 option, void *user_data);
97 static void callbackAR(void *user_data);
98 static void callbackEjectFromEstate(S32 option, void *user_data);
99
100 static void sendFreeze(const LLUUID &avatar, bool);
101 static void sendEject(const LLUUID &avatar, bool);
102 static void cmdEstateEject(const LLUUID &avatar);
103 static void cmdEstateBan(const LLUUID &avatar);
104 static void sendEstateBan(const LLUUID& agent);
105 static void sendEstateMessage(const char* request, const LLUUID &target);
63}; 106};
64 107
65#endif // LL_LLFLOATERMAP_H 108#endif // LL_LLFLOATERMAP_H
diff --git a/linden/indra/newview/llnetmap.cpp b/linden/indra/newview/llnetmap.cpp
index 8f5d90d..c407f04 100644
--- a/linden/indra/newview/llnetmap.cpp
+++ b/linden/indra/newview/llnetmap.cpp
@@ -45,6 +45,7 @@
45#include "llcolorscheme.h" 45#include "llcolorscheme.h"
46#include "llviewercontrol.h" 46#include "llviewercontrol.h"
47#include "llfloateravatarinfo.h" 47#include "llfloateravatarinfo.h"
48#include "llfloatermap.h"
48#include "llfloaterworldmap.h" 49#include "llfloaterworldmap.h"
49#include "llframetimer.h" 50#include "llframetimer.h"
50#include "llmutelist.h" 51#include "llmutelist.h"
@@ -98,6 +99,8 @@ LLNetMap::LLNetMap(const std::string& name) :
98 (new LLScaleMap())->registerListener(this, "MiniMap.ZoomLevel"); 99 (new LLScaleMap())->registerListener(this, "MiniMap.ZoomLevel");
99 (new LLCenterMap())->registerListener(this, "MiniMap.Center"); 100 (new LLCenterMap())->registerListener(this, "MiniMap.Center");
100 (new LLCheckCenterMap())->registerListener(this, "MiniMap.CheckCenter"); 101 (new LLCheckCenterMap())->registerListener(this, "MiniMap.CheckCenter");
102 (new LLRotateMap())->registerListener(this, "MiniMap.Rotate");
103 (new LLCheckRotateMap())->registerListener(this, "MiniMap.CheckRotate");
101 (new LLShowWorldMap())->registerListener(this, "MiniMap.ShowWorldMap"); 104 (new LLShowWorldMap())->registerListener(this, "MiniMap.ShowWorldMap");
102 (new LLStopTracking())->registerListener(this, "MiniMap.StopTracking"); 105 (new LLStopTracking())->registerListener(this, "MiniMap.StopTracking");
103 (new LLEnableTracking())->registerListener(this, "MiniMap.EnableTracking"); 106 (new LLEnableTracking())->registerListener(this, "MiniMap.EnableTracking");
@@ -117,6 +120,11 @@ LLNetMap::LLNetMap(const std::string& name) :
117 mPopupMenuHandle = menu->getHandle(); 120 mPopupMenuHandle = menu->getHandle();
118} 121}
119 122
123BOOL LLNetMap::postBuild()
124{
125 return TRUE;
126}
127
120LLNetMap::~LLNetMap() 128LLNetMap::~LLNetMap()
121{ 129{
122} 130}
@@ -330,6 +338,7 @@ void LLNetMap::draw()
330 LLColor4 avatar_color = gColors.getColor( "MapAvatar" ); 338 LLColor4 avatar_color = gColors.getColor( "MapAvatar" );
331 LLColor4 friend_color = gColors.getColor( "MapFriend" ); 339 LLColor4 friend_color = gColors.getColor( "MapFriend" );
332 LLColor4 muted_color = gColors.getColor( "MapMuted" ); 340 LLColor4 muted_color = gColors.getColor( "MapMuted" );
341 LLColor4 selected_color = gColors.getColor( "MapSelected" );
333 LLColor4 glyph_color; 342 LLColor4 glyph_color;
334 343
335 std::vector<LLUUID> avatar_ids; 344 std::vector<LLUUID> avatar_ids;
@@ -340,9 +349,13 @@ void LLNetMap::draw()
340 // TODO: it'd be very cool to draw these in sorted order from lowest Z to highest. 349 // TODO: it'd be very cool to draw these in sorted order from lowest Z to highest.
341 // just be careful to sort the avatar IDs along with the positions. -MG 350 // just be careful to sort the avatar IDs along with the positions. -MG
342 pos_map = globalPosToView(positions[i], rotate_map); 351 pos_map = globalPosToView(positions[i], rotate_map);
343 352
353 if (LLFloaterMap::getSelected() == avatar_ids[i])
354 {
355 glyph_color = selected_color;
356 }
344 // Show them muted even if they're friends 357 // Show them muted even if they're friends
345 if (LLMuteList::getInstance()->isMuted(avatar_ids[i])) 358 else if (LLMuteList::getInstance()->isMuted(avatar_ids[i]))
346 { 359 {
347 glyph_color = muted_color; 360 glyph_color = muted_color;
348 } 361 }
@@ -356,7 +369,7 @@ void LLNetMap::draw()
356 } 369 }
357 370
358// [RLVa:KB] 371// [RLVa:KB]
359 if ( !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) ) 372 if ( rlv_handler_t::isEnabled() && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) )
360 { 373 {
361 // User is not allowed to see who it is, or even if it's a friend, 374 // User is not allowed to see who it is, or even if it's a friend,
362 // due to RLV settings. 375 // due to RLV settings.
@@ -460,6 +473,8 @@ void LLNetMap::draw()
460 setDirectionPos( getChild<LLTextBox>("se_label"), rotation + F_PI + F_PI_BY_TWO + F_PI_BY_TWO / 2); 473 setDirectionPos( getChild<LLTextBox>("se_label"), rotation + F_PI + F_PI_BY_TWO + F_PI_BY_TWO / 2);
461 474
462 LLView::draw(); 475 LLView::draw();
476
477 LLFloaterMap::updateRadar();
463} 478}
464 479
465void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent) 480void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent)
@@ -562,7 +577,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec
562 if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, fullname)) 577 if(mClosestAgentToCursor.notNull() && gCacheName->getFullName(mClosestAgentToCursor, fullname))
563 { 578 {
564// [RLVa:KB] 579// [RLVa:KB]
565 if ( !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) ) 580 if ( rlv_handler_t::isEnabled() && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) )
566 { 581 {
567 // User is not allowed to see who it is, due to RLV settings. 582 // User is not allowed to see who it is, due to RLV settings.
568 msg.append(rlv_handler_t::cstrHidden); 583 msg.append(rlv_handler_t::cstrHidden);
@@ -576,7 +591,7 @@ BOOL LLNetMap::handleToolTip( S32 x, S32 y, std::string& msg, LLRect* sticky_rec
576 } 591 }
577 592
578// [RLVa:KB] 593// [RLVa:KB]
579 if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) 594 if (rlv_handler_t::isEnabled() && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
580 { 595 {
581 // User is not allowed to see where they are, due to RLV settings. 596 // User is not allowed to see where they are, due to RLV settings.
582 msg.append( rlv_handler_t::cstrHidden ); 597 msg.append( rlv_handler_t::cstrHidden );
@@ -922,6 +937,22 @@ bool LLNetMap::LLScaleMap::handleEvent(LLPointer<LLEvent> event, const LLSD& use
922 return true; 937 return true;
923} 938}
924 939
940bool LLNetMap::LLRotateMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
941{
942 BOOL rotate = gSavedSettings.getBOOL("MiniMapRotate");
943 gSavedSettings.setBOOL("MiniMapRotate", !rotate);
944
945 return true;
946}
947
948bool LLNetMap::LLCheckRotateMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
949{
950 LLNetMap *self = mPtr;
951 BOOL enabled = gSavedSettings.getBOOL("MiniMapRotate");
952 self->findControl(userdata["control"].asString())->setValue(enabled);
953 return true;
954}
955
925bool LLNetMap::LLCenterMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 956bool LLNetMap::LLCenterMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
926{ 957{
927 S32 center = userdata.asInteger(); 958 S32 center = userdata.asInteger();
diff --git a/linden/indra/newview/llnetmap.h b/linden/indra/newview/llnetmap.h
index ef046d8..55fbe1f 100644
--- a/linden/indra/newview/llnetmap.h
+++ b/linden/indra/newview/llnetmap.h
@@ -52,6 +52,8 @@ class LLNetMap : public LLPanel
52{ 52{
53public: 53public:
54 LLNetMap(const std::string& name); 54 LLNetMap(const std::string& name);
55
56 virtual BOOL postBuild();
55 virtual ~LLNetMap(); 57 virtual ~LLNetMap();
56 58
57 virtual void draw(); 59 virtual void draw();
@@ -111,8 +113,8 @@ private:
111 LLPointer<LLImageGL> mObjectImagep; 113 LLPointer<LLImageGL> mObjectImagep;
112 114
113private: 115private:
114 LLUUID mClosestAgentToCursor; 116 LLUUID mClosestAgentToCursor;
115 LLUUID mClosestAgentAtLastRightClick; 117 LLUUID mClosestAgentAtLastRightClick;
116 118
117 static BOOL sRotateMap; 119 static BOOL sRotateMap;
118 static LLNetMap* sInstance; 120 static LLNetMap* sInstance;
@@ -140,6 +142,18 @@ private:
140 /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata); 142 /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
141 }; 143 };
142 144
145 class LLRotateMap : public LLMemberListener<LLNetMap>
146 {
147 public:
148 /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
149 };
150
151 class LLCheckRotateMap : public LLMemberListener<LLNetMap>
152 {
153 public:
154 /*virtual*/ bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata);
155 };
156
143 class LLShowWorldMap : public LLMemberListener<LLNetMap> 157 class LLShowWorldMap : public LLMemberListener<LLNetMap>
144 { 158 {
145 public: 159 public:
diff --git a/linden/indra/newview/llpanelgeneral.cpp b/linden/indra/newview/llpanelgeneral.cpp
index f370116..490e40d 100644
--- a/linden/indra/newview/llpanelgeneral.cpp
+++ b/linden/indra/newview/llpanelgeneral.cpp
@@ -60,7 +60,6 @@ BOOL LLPanelGeneral::postBuild()
60 childSetValue("small_avatar_names_checkbox", gSavedSettings.getBOOL("SmallAvatarNames")); 60 childSetValue("small_avatar_names_checkbox", gSavedSettings.getBOOL("SmallAvatarNames"));
61 childSetValue("show_my_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitle")); 61 childSetValue("show_my_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitle"));
62 childSetValue("afk_timeout_spinner", gSavedSettings.getF32("AFKTimeout")); 62 childSetValue("afk_timeout_spinner", gSavedSettings.getF32("AFKTimeout"));
63 childSetValue("rotate_mini_map_checkbox", gSavedSettings.getBOOL("MiniMapRotate"));
64 childSetValue("notify_money_change_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange")); 63 childSetValue("notify_money_change_checkbox", gSavedSettings.getBOOL("NotifyMoneyChange"));
65 childSetValue("use_system_color_picker_checkbox", gSavedSettings.getBOOL("UseDefaultColorPicker")); 64 childSetValue("use_system_color_picker_checkbox", gSavedSettings.getBOOL("UseDefaultColorPicker"));
66 childSetValue("show_search_panel", gSavedSettings.getBOOL("ShowSearchBar")); 65 childSetValue("show_search_panel", gSavedSettings.getBOOL("ShowSearchBar"));
@@ -96,7 +95,6 @@ void LLPanelGeneral::apply()
96 gSavedSettings.setBOOL("SmallAvatarNames", childGetValue("small_avatar_names_checkbox")); 95 gSavedSettings.setBOOL("SmallAvatarNames", childGetValue("small_avatar_names_checkbox"));
97 gSavedSettings.setBOOL("RenderHideGroupTitle", childGetValue("show_my_title_checkbox")); 96 gSavedSettings.setBOOL("RenderHideGroupTitle", childGetValue("show_my_title_checkbox"));
98 gSavedSettings.setF32("AFKTimeout", childGetValue("afk_timeout_spinner").asReal()); 97 gSavedSettings.setF32("AFKTimeout", childGetValue("afk_timeout_spinner").asReal());
99 gSavedSettings.setBOOL("MiniMapRotate", childGetValue("rotate_mini_map_checkbox"));
100 gSavedSettings.setBOOL("NotifyMoneyChange", childGetValue("notify_money_change_checkbox")); 98 gSavedSettings.setBOOL("NotifyMoneyChange", childGetValue("notify_money_change_checkbox"));
101 gSavedSettings.setBOOL("UseDefaultColorPicker", childGetValue("use_system_color_picker_checkbox")); 99 gSavedSettings.setBOOL("UseDefaultColorPicker", childGetValue("use_system_color_picker_checkbox"));
102 gSavedSettings.setBOOL("ShowSearchBar", childGetValue("show_search_panel")); 100 gSavedSettings.setBOOL("ShowSearchBar", childGetValue("show_search_panel"));
diff --git a/linden/indra/newview/skins/default/colors_base.xml b/linden/indra/newview/skins/default/colors_base.xml
index d0f1049..9ad1787 100644
--- a/linden/indra/newview/skins/default/colors_base.xml
+++ b/linden/indra/newview/skins/default/colors_base.xml
@@ -162,6 +162,7 @@
162<MapAvatar value="0, 255, 0, 255" /> <!-- Your avatar's glyph color --> 162<MapAvatar value="0, 255, 0, 255" /> <!-- Your avatar's glyph color -->
163<MapFriend value="255, 255, 0, 255" /> <!-- Your friends' glyph color --> 163<MapFriend value="255, 255, 0, 255" /> <!-- Your friends' glyph color -->
164<MapMuted value="128, 128, 128, 255" /> <!-- Muted avatars' glyph color --> 164<MapMuted value="128, 128, 128, 255" /> <!-- Muted avatars' glyph color -->
165<MapSelected value="255, 0, 0, 255" /> <!-- Selected avatars' glyph color -->
165 166
166 <!-- MINI-MAP --> 167 <!-- MINI-MAP -->
167<NetMapBackgroundColor value="0, 0, 0, 77" /> <!-- Mini-map floater background --> 168<NetMapBackgroundColor value="0, 0, 0, 77" /> <!-- Mini-map floater background -->
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 9f1e164..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
@@ -1,7 +1,98 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater can_close="true" can_drag_on_left="false" can_minimize="false" can_resize="true" 2<floater can_close="true" can_drag_on_left="false" can_minimize="false" can_resize="true"
3 can_tear_off="false" follows="top|right" height="220" min_height="64" min_width="64" 3 can_tear_off="false" follows="top|right" height="455" min_height="400" min_width="240"
4 name="minimap" rect_control="FloaterMiniMapRect" width="200"> 4 name="minimap" rect_control="FloaterMiniMapRect" width="200">
5 <panel bottom="2" follows="left|top|right|bottom" height="216" label="Mini Map" 5
6 left="2" mouse_opaque="false" name="mini_mapview" width="196" /> 6 <panel label="Mini Map" name="mini_mapview"
7 top="-2" left="2" bottom="196" right="196"
8 follows="left|top|right|bottom" mouse_opaque="false" />
9
10 <panel name="RadarPanel" label="Radar"
11 background_visible="true" bg_alpha_color="NetMapBackgroundColor"
12 left="2" top="196" right="196" height="120"
13 follows="left|right|bottom" border="false" mouse_opaque="true">
14
15 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
16 bottom="-20" drop_shadow_visible="true" follows="left|top"
17 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
18 mouse_opaque="true" name="lblAvatarCount" v_pad="0"
19 width="220">
20 0
21 </text>
22 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
23 bottom="-20" drop_shadow_visible="true" follows="left|top"
24 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="27"
25 mouse_opaque="true" name="avatars_in" v_pad="0"
26 width="220">
27 Avatars in
28 </text>
29 <slider bottom_delta="0" left_delta="55" follows="left|top" width="110" height="15"
30 name="near_me_range" label="" control_name="NearMeRange"
31 min_val="5" max_val="512" increment="1" initial_val="96" decimal_digits="0" />
32 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
33 bottom_delta="0" left="190" drop_shadow_visible="true" follows="left|top"
34 font="SansSerifSmall" h_pad="0" halign="left" height="15"
35 mouse_opaque="true" name="meters" v_pad="0"
36 width="40">
37 Meters
38 </text>
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">
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">
43 <button bottom="-25" follows="top|right" height="22" label="IM/Call"
44 left="-85" name="im_btn" tool_tip="Open Instant Message session"
45 width="80" />
46 <button bottom_delta="-25" follows="top|right" height="22" label="Profile"
47 left_delta="0" name="profile_btn"
48 tool_tip="Show picture, groups, and other information" width="80" />
49 <button bottom_delta="-25" follows="top|right" height="22" label="Teleport..."
50 left_delta="0" name="offer_teleport_btn"
51 tool_tip="Offer this friend a teleport to your current location" width="80" />
52 <button bottom_delta="-25" follows="top|right" height="22" label="Track"
53 left_delta="0" name="track_btn"
54 tool_tip="Create a beacon to track this avatar" width="80" />
55 <button bottom_delta="-25" follows="top|right" height="22" label="Invite..."
56 left_delta="0" name="invite_btn"
57 tool_tip="Remove this person from your friends list" width="80" />
58 <button bottom_delta="-25" follows="top|right" height="22" label="Add..."
59 left_delta="0" name="add_btn" tool_tip="Offer friendship to a resident"
60 width="80" />
61 </panel>
62 <panel border="true" bottom="-160" follows="left|top|right|bottom" height="160"
63 label="Estate" left="1" mouse_opaque="true" name="estate_tab" width="198">
64 <button bottom="-25" follows="top|right" height="22" label="Freeze..."
65 left="-85" name="freeze_btn" tool_tip=""
66 width="80" />
67 <button bottom_delta="-25" follows="top|right" height="22" label="Eject..."
68 left_delta="0" name="eject_btn"
69 tool_tip="" width="80" />
70 <button bottom_delta="-25" follows="top|right" height="22" label="Mute..."
71 left_delta="0" name="mute_btn"
72 tool_tip="" width="80" />
73 <button bottom_delta="-25" follows="top|right" height="22" label="Unmute..."
74 left_delta="0" name="unmute_btn"
75 tool_tip="" width="80" />
76 <button bottom_delta="-25" follows="top|right" height="22" label="Report..."
77 left_delta="0" name="ar_btn"
78 tool_tip="" width="80" />
79 <button bottom_delta="-25" follows="top|right" height="22" label="Kick..."
80 left_delta="0" name="estate_eject_btn" tool_tip=""
81 width="80" />
82 </panel>
83 </tab_container>
84 <scroll_list bottom="-190" width="104" height="143" left="4"
85 follows="left|bottom|right" draw_border="false" draw_heading="true"
86 draw_stripes="true" column_padding="5" sort_column="1" mouse_opaque="true"
87 background_visible="true" multi_select="false" name="RadarList">
88 <column name="avatar_name" label="Name" dynamicwidth="true" />
89 <column name="avatar_distance" label="Dist." width="48" />
90 </scroll_list>
91 </panel>
92 <string name="no_one_near">
93 No avatars within range
94 </string>
95 <string name="muted">
96 (muted)
97 </string>
7</floater> 98</floater>
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml b/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml
index 485ae9f..0172b41 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml
@@ -19,6 +19,11 @@
19 <on_click function="MiniMap.Center" userdata="1" /> 19 <on_click function="MiniMap.Center" userdata="1" />
20 <on_check function="MiniMap.CheckCenter" userdata="1" /> 20 <on_check function="MiniMap.CheckCenter" userdata="1" />
21 </menu_item_check> 21 </menu_item_check>
22 <menu_item_check bottom_delta="-18" enabled="true" height="18" label="Rotate Mini-Map"
23 left="0" mouse_opaque="true" name="Rotate Mini-Map" width="128">
24 <on_click function="MiniMap.Rotate" userdata="" />
25 <on_check function="MiniMap.CheckRotate" userdata="" />
26 </menu_item_check>
22 <menu_item_separator /> 27 <menu_item_separator />
23 <menu_item_call bottom_delta="-18" enabled = "false" height="18" label="Show Map" 28 <menu_item_call bottom_delta="-18" enabled = "false" height="18" label="Show Map"
24 left="0" mouse_opaque="true" name="Show Map" width="128"> 29 left="0" mouse_opaque="true" name="Show Map" width="128">
diff --git a/linden/indra/newview/skins/default/xui/en-us/notify.xml b/linden/indra/newview/skins/default/xui/en-us/notify.xml
index 99fe75a..01e2546 100644
--- a/linden/indra/newview/skins/default/xui/en-us/notify.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/notify.xml
@@ -835,6 +835,11 @@ Use the controls on the right to find things
835and display different backgrounds. 835and display different backgrounds.
836 </message> 836 </message>
837 </notify> 837 </notify>
838 <notify name="FirstMiniMap" tip="false">
839 <message name="message">
840 Right-click the Mini-Map for more options.
841 </message>
842 </notify>
838 <notify name="FirstBuild" tip="false"> 843 <notify name="FirstBuild" tip="false">
839 <message name="message"> 844 <message name="message">
840 You can build new objects in some areas of [SECOND_LIFE]. 845 You can build new objects in some areas of [SECOND_LIFE].
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml b/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml
index 1a93341..19faa62 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel background_opaque="false" background_visible="true" bg_alpha_color="NetMapBackgroundColor" 2<panel background_opaque="false" background_visible="true" bg_alpha_color="NetMapBackgroundColor"
3 border="false" follows="left|top|right|bottom" height="216" label="Mini Map" 3 border="false" follows="left|top|right|bottom" height="716" label="Mini Map"
4 mouse_opaque="false" name="mini_mapview" width="196"> 4 mouse_opaque="false" name="mini_mapview" width="196">
5 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 5 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
6 bottom="-40" drop_shadow_visible="false" font="SansSerifSmall" h_pad="0" 6 bottom="-40" drop_shadow_visible="false" font="SansSerifSmall" h_pad="0"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
index ea04dfc..e8a2625 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
@@ -73,10 +73,6 @@
73 follows="left|top" height="16" increment="1" initial_val="300" 73 follows="left|top" height="16" increment="1" initial_val="300"
74 label="Away Timeout:" label_width="141" left="10" max_val="600" 74 label="Away Timeout:" label_width="141" left="10" max_val="600"
75 min_val="30" mouse_opaque="true" name="afk_timeout_spinner" width="202" /> 75 min_val="30" mouse_opaque="true" name="afk_timeout_spinner" width="202" />
76 <check_box bottom="-286" enabled="true" follows="left|top"
77 font="SansSerifSmall" height="16" initial_value="false"
78 label="Rotate Mini-Map" left="151" mouse_opaque="true"
79 name="rotate_mini_map_checkbox" radio_style="false" width="256" />
80 <check_box bottom="-304" enabled="true" 76 <check_box bottom="-304" enabled="true"
81 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 77 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
82 label="Notify when Linden dollars (L$) spent or received" left="151" 78 label="Notify when Linden dollars (L$) spent or received" left="151"