diff options
-rw-r--r-- | ChangeLog.txt | 64 | ||||
-rw-r--r-- | linden/indra/newview/app_settings/settings.xml | 13 | ||||
-rw-r--r-- | linden/indra/newview/llfirstuse.cpp | 11 | ||||
-rw-r--r-- | linden/indra/newview/llfirstuse.h | 1 | ||||
-rw-r--r-- | linden/indra/newview/llfloatermap.cpp | 638 | ||||
-rw-r--r-- | linden/indra/newview/llfloatermap.h | 45 | ||||
-rw-r--r-- | linden/indra/newview/llnetmap.cpp | 41 | ||||
-rw-r--r-- | linden/indra/newview/llnetmap.h | 18 | ||||
-rw-r--r-- | linden/indra/newview/llpanelgeneral.cpp | 2 | ||||
-rw-r--r-- | linden/indra/newview/skins/default/colors_base.xml | 1 | ||||
-rw-r--r-- | linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml | 97 | ||||
-rw-r--r-- | linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml | 5 | ||||
-rw-r--r-- | linden/indra/newview/skins/default/xui/en-us/notify.xml | 5 | ||||
-rw-r--r-- | linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml | 2 | ||||
-rw-r--r-- | linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml | 4 |
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 | ||
36 | 2009-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 | |||
36 | 2009-09-15 McCabe Maxsted <hakushakukun@gmail.com> | 45 | 2009-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 | ||
58 | 2009-09-14 McCabe Maxsted <hakushakukun@gmail.com> | 110 | 2009-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 | ||
621 | 2009-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 | |||
569 | 2009-06-14 McCabe Maxsted <hakushakukun@gmail.com> | 631 | 2009-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 |
134 | void LLFirstUse::useMiniMap() | ||
135 | { | ||
136 | if (gSavedSettings.getWarning("FirstMiniMap")) | ||
137 | { | ||
138 | gSavedSettings.setWarning("FirstMiniMap", FALSE); | ||
139 | |||
140 | LLNotifyBox::showXml("FirstMiniMap"); | ||
141 | } | ||
142 | } | ||
143 | |||
144 | // static | ||
134 | void LLFirstUse::useGoTo() | 145 | void 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 | |||
45 | LLFloaterMap::LLFloaterMap(const LLSD& key) | 68 | LLFloaterMap::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) |
127 | void LLFloaterMap::open() | 176 | void 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 | ||
197 | void LLFloaterMap::updateRadar() | ||
198 | { | ||
199 | LLFloaterMap::getInstance()->populateRadar(); | ||
200 | } | ||
201 | |||
202 | void 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 | |||
287 | void 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 | |||
319 | BOOL 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 | ||
355 | void LLFloaterMap::onList(LLUICtrl* ctrl, void* user_data) | ||
356 | { | ||
357 | LLFloaterMap* self = (LLFloaterMap*)user_data; | ||
358 | if (self) | ||
359 | { | ||
360 | self->toggleButtons(); | ||
361 | } | ||
362 | } | ||
363 | |||
364 | BOOL LLFloaterMap::visibleItemsSelected() const | ||
365 | { | ||
366 | if (mRadarList->getFirstSelectedIndex() >= 0) | ||
367 | { | ||
368 | return TRUE; | ||
369 | } | ||
370 | return FALSE; | ||
371 | } | ||
372 | |||
373 | // static | ||
374 | void 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 | ||
384 | LLUUID LLFloaterMap::getSelected() | ||
385 | { | ||
386 | return LLFloaterMap::getInstance()->mSelectedAvatar; | ||
387 | } | ||
388 | |||
389 | // | ||
390 | // Avatar tab | ||
391 | // | ||
392 | |||
393 | // static | ||
394 | void 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 | ||
407 | void 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 | ||
419 | void 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 | ||
431 | void 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 | ||
452 | void 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 | ||
471 | void 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 | ||
480 | void 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 | ||
496 | std::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 | ||
507 | void 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 | ||
522 | void 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 | ||
537 | void 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 | |||
551 | void 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 | ||
561 | void 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 | ||
571 | void 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 | ||
594 | void 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 | ||
617 | void 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 | ||
627 | void 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 | ||
639 | void LLFloaterMap::cmdEstateEject(const LLUUID &avatar) | ||
640 | { | ||
641 | sendEstateMessage("teleporthomeuser", avatar); | ||
642 | } | ||
643 | |||
644 | // static | ||
645 | void LLFloaterMap::cmdEstateBan(const LLUUID &avatar) | ||
646 | { | ||
647 | sendEstateMessage("teleporthomeuser", avatar); // Kick first, just to be sure | ||
648 | sendEstateBan(avatar); | ||
649 | } | ||
650 | |||
651 | // static | ||
652 | void 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 | ||
678 | void 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 | ||
704 | void 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 | ||
736 | void 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 | ||
37 | class LLNetMap; | 38 | class 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 | ||
60 | private: | 64 | private: |
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 | ||
123 | BOOL LLNetMap::postBuild() | ||
124 | { | ||
125 | return TRUE; | ||
126 | } | ||
127 | |||
120 | LLNetMap::~LLNetMap() | 128 | LLNetMap::~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 | ||
465 | void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent) | 480 | void 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 | ||
940 | bool 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 | |||
948 | bool 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 | |||
925 | bool LLNetMap::LLCenterMap::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) | 956 | bool 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 | { |
53 | public: | 53 | public: |
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 | ||
113 | private: | 115 | private: |
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 | |||
835 | and display different backgrounds. | 835 | and 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" |