aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden
diff options
context:
space:
mode:
authorMcCabe Maxsted2011-03-19 14:13:38 -0700
committerMcCabe Maxsted2011-03-19 14:13:38 -0700
commitc144b6636342a5e2b4b8bce3e714c96b593f20aa (patch)
tree63f263a8641238ac3ce10974f668e791e869bd3d /linden
parentMerge remote-tracking branch 'armin/exp' into exp (diff)
parentPackage both libz.so.1 and libz.so (symlink) on Linux32. (IMP-790) (diff)
downloadmeta-impy-c144b6636342a5e2b4b8bce3e714c96b593f20aa.zip
meta-impy-c144b6636342a5e2b4b8bce3e714c96b593f20aa.tar.gz
meta-impy-c144b6636342a5e2b4b8bce3e714c96b593f20aa.tar.bz2
meta-impy-c144b6636342a5e2b4b8bce3e714c96b593f20aa.tar.xz
Merge remote-tracking branch 'jacek/exp' into exp
Diffstat (limited to '')
-rw-r--r--linden/indra/llcommon/indra_constants.h5
-rw-r--r--linden/indra/llcommon/lltimer.cpp6
-rw-r--r--linden/indra/llinventory/llparcel.h1
-rw-r--r--linden/indra/llmessage/message_prehash.cpp2
-rw-r--r--linden/indra/llmessage/message_prehash.h2
-rw-r--r--linden/indra/llmessage/patch_code.cpp11
-rw-r--r--linden/indra/llmessage/patch_code.h2
-rw-r--r--linden/indra/llmessage/patch_dct.h2
-rw-r--r--linden/indra/newview/kowopenregionsettings.cpp6
-rw-r--r--linden/indra/newview/llcloud.cpp2
-rw-r--r--linden/indra/newview/llfloaterregioninfo.cpp6892
-rw-r--r--linden/indra/newview/llfloatertos.cpp610
-rw-r--r--linden/indra/newview/llglsandbox.cpp2
-rw-r--r--linden/indra/newview/llmaniptranslate.cpp2
-rw-r--r--linden/indra/newview/llmapresponders.cpp4
-rw-r--r--linden/indra/newview/llstartup.cpp14
-rw-r--r--linden/indra/newview/llsurface.cpp20
-rwxr-xr-xlinden/indra/newview/llviewermessage.cpp27
-rw-r--r--linden/indra/newview/llviewerparcelmgr.cpp21
-rw-r--r--linden/indra/newview/llviewerparcelmgr.h2
-rw-r--r--linden/indra/newview/llviewerparceloverlay.cpp4
-rw-r--r--linden/indra/newview/llviewerparceloverlay.h1
-rw-r--r--linden/indra/newview/llviewerregion.cpp3
-rw-r--r--linden/indra/newview/llvlmanager.cpp17
-rw-r--r--linden/indra/newview/llvowater.cpp2
-rw-r--r--linden/indra/newview/llwind.cpp4
-rw-r--r--linden/indra/newview/llworld.cpp27
-rw-r--r--linden/indra/newview/llworld.h6
-rw-r--r--linden/indra/newview/llworldmap.cpp23
-rw-r--r--linden/indra/newview/llworldmap.h2
-rw-r--r--linden/indra/newview/llworldmapview.cpp14
-rwxr-xr-xlinden/indra/newview/viewer_manifest.py3
-rw-r--r--linden/indra/newview/viewertime.cpp16
33 files changed, 3942 insertions, 3813 deletions
diff --git a/linden/indra/llcommon/indra_constants.h b/linden/indra/llcommon/indra_constants.h
index 279d280..b765d4d 100644
--- a/linden/indra/llcommon/indra_constants.h
+++ b/linden/indra/llcommon/indra_constants.h
@@ -153,6 +153,11 @@ const char WATER_LAYER_CODE = 'W';
153const char WIND_LAYER_CODE = '7'; 153const char WIND_LAYER_CODE = '7';
154const char CLOUD_LAYER_CODE = '8'; 154const char CLOUD_LAYER_CODE = '8';
155 155
156// Extended land layer for Aurora Sim
157const char AURORA_LAND_LAYER_CODE = 'M';
158const char AURORA_WIND_LAYER_CODE = '9';
159const char AURORA_CLOUD_LAYER_CODE = ':';
160
156// keys 161// keys
157// Bit masks for various keyboard modifier keys. 162// Bit masks for various keyboard modifier keys.
158const MASK MASK_NONE = 0x0000; 163const MASK MASK_NONE = 0x0000;
diff --git a/linden/indra/llcommon/lltimer.cpp b/linden/indra/llcommon/lltimer.cpp
index 2d283ec..b825c1e 100644
--- a/linden/indra/llcommon/lltimer.cpp
+++ b/linden/indra/llcommon/lltimer.cpp
@@ -529,14 +529,14 @@ struct tm* utc_to_offset_time(time_t utc_time, S32 offset, BOOL DST)
529{ 529{
530 if (DST) 530 if (DST)
531 { 531 {
532 //Subtract one then 532 //Add one then
533 offset--; 533 offset++;
534 } 534 }
535 535
536 // We subtract off the PST/PDT offset _before_ getting 536 // We subtract off the PST/PDT offset _before_ getting
537 // "UTC" time, because this will handle wrapping around 537 // "UTC" time, because this will handle wrapping around
538 // for 5 AM UTC -> 10 PM PDT of the previous day. 538 // for 5 AM UTC -> 10 PM PDT of the previous day.
539 utc_time -= offset * MIN_PER_HOUR * SEC_PER_MIN; 539 utc_time -= (-1 * offset) * MIN_PER_HOUR * SEC_PER_MIN;
540 540
541 // Internal buffer to PST/PDT (see above) 541 // Internal buffer to PST/PDT (see above)
542 struct tm* internal_time = gmtime(&utc_time); 542 struct tm* internal_time = gmtime(&utc_time);
diff --git a/linden/indra/llinventory/llparcel.h b/linden/indra/llinventory/llparcel.h
index 8faa673..f102ec4 100644
--- a/linden/indra/llinventory/llparcel.h
+++ b/linden/indra/llinventory/llparcel.h
@@ -67,6 +67,7 @@ const F32 PARCEL_PASS_HOURS_DEFAULT = 1.f;
67 67
68// Number of "chunks" in which parcel overlay data is sent 68// Number of "chunks" in which parcel overlay data is sent
69// Chunk 0 = southern rows, entire width 69// Chunk 0 = southern rows, entire width
70// NOTE: NOT USABLE FOR VAR SIZED REGIONS!
70const S32 PARCEL_OVERLAY_CHUNKS = 4; 71const S32 PARCEL_OVERLAY_CHUNKS = 4;
71 72
72// Bottom three bits are a color index for the land overlay 73// Bottom three bits are a color index for the land overlay
diff --git a/linden/indra/llmessage/message_prehash.cpp b/linden/indra/llmessage/message_prehash.cpp
index ecb45bf..78b9d07 100644
--- a/linden/indra/llmessage/message_prehash.cpp
+++ b/linden/indra/llmessage/message_prehash.cpp
@@ -587,6 +587,8 @@ char* _PREHASH_LastName = LLMessageStringTable::getInstance()->getString("LastNa
587char* _PREHASH_From = LLMessageStringTable::getInstance()->getString("From"); 587char* _PREHASH_From = LLMessageStringTable::getInstance()->getString("From");
588char* _PREHASH_RoleChange = LLMessageStringTable::getInstance()->getString("RoleChange"); 588char* _PREHASH_RoleChange = LLMessageStringTable::getInstance()->getString("RoleChange");
589char* _PREHASH_Port = LLMessageStringTable::getInstance()->getString("Port"); 589char* _PREHASH_Port = LLMessageStringTable::getInstance()->getString("Port");
590char* _PREHASH_RegionSizeX = LLMessageStringTable::getInstance()->getString("RegionSizeX");
591char* _PREHASH_RegionSizeY = LLMessageStringTable::getInstance()->getString("RegionSizeY");
590char* _PREHASH_MemberTitle = LLMessageStringTable::getInstance()->getString("MemberTitle"); 592char* _PREHASH_MemberTitle = LLMessageStringTable::getInstance()->getString("MemberTitle");
591char* _PREHASH_LogParcelChanges = LLMessageStringTable::getInstance()->getString("LogParcelChanges"); 593char* _PREHASH_LogParcelChanges = LLMessageStringTable::getInstance()->getString("LogParcelChanges");
592char* _PREHASH_AgentCachedTextureResponse = LLMessageStringTable::getInstance()->getString("AgentCachedTextureResponse"); 594char* _PREHASH_AgentCachedTextureResponse = LLMessageStringTable::getInstance()->getString("AgentCachedTextureResponse");
diff --git a/linden/indra/llmessage/message_prehash.h b/linden/indra/llmessage/message_prehash.h
index 8516483..64544dd 100644
--- a/linden/indra/llmessage/message_prehash.h
+++ b/linden/indra/llmessage/message_prehash.h
@@ -587,6 +587,8 @@ extern char * _PREHASH_LastName;
587extern char * _PREHASH_From; 587extern char * _PREHASH_From;
588extern char * _PREHASH_RoleChange; 588extern char * _PREHASH_RoleChange;
589extern char * _PREHASH_Port; 589extern char * _PREHASH_Port;
590extern char * _PREHASH_RegionSizeX;
591extern char * _PREHASH_RegionSizeY;
590extern char * _PREHASH_MemberTitle; 592extern char * _PREHASH_MemberTitle;
591extern char * _PREHASH_LogParcelChanges; 593extern char * _PREHASH_LogParcelChanges;
592extern char * _PREHASH_AgentCachedTextureResponse; 594extern char * _PREHASH_AgentCachedTextureResponse;
diff --git a/linden/indra/llmessage/patch_code.cpp b/linden/indra/llmessage/patch_code.cpp
index 90fb236..0cf8d2e 100644
--- a/linden/indra/llmessage/patch_code.cpp
+++ b/linden/indra/llmessage/patch_code.cpp
@@ -235,7 +235,7 @@ void decode_patch_group_header(LLBitPack &bitpack, LLGroupHeader *gopp)
235 gPatchSize = gopp->patch_size; 235 gPatchSize = gopp->patch_size;
236} 236}
237 237
238void decode_patch_header(LLBitPack &bitpack, LLPatchHeader *ph) 238void decode_patch_header(LLBitPack &bitpack, LLPatchHeader *ph, BOOL b_large_patch)
239{ 239{
240 U8 retvalu8; 240 U8 retvalu8;
241 241
@@ -274,15 +274,18 @@ void decode_patch_header(LLBitPack &bitpack, LLPatchHeader *ph)
274#endif 274#endif
275 ph->range = retvalu16; 275 ph->range = retvalu16;
276 276
277 retvalu16 = 0; 277 retvalu32 = 0;
278#ifdef LL_BIG_ENDIAN 278#ifdef LL_BIG_ENDIAN
279 ret = (U8 *)&retvalu16; 279 ret = (U8 *)&retvalu16;
280 bitpack.bitUnpack(&(ret[1]), 8); 280 bitpack.bitUnpack(&(ret[1]), 8);
281 bitpack.bitUnpack(&(ret[0]), 2); 281 bitpack.bitUnpack(&(ret[0]), 2);
282#else 282#else
283 bitpack.bitUnpack((U8 *)&retvalu16, 10); 283 if (b_large_patch)
284 bitpack.bitUnpack((U8 *)&retvalu32, 32);
285 else
286 bitpack.bitUnpack((U8 *)&retvalu32, 10);
284#endif 287#endif
285 ph->patchids = retvalu16; 288 ph->patchids = retvalu32;
286 289
287 gWordBits = (ph->quant_wbits & 0xf) + 2; 290 gWordBits = (ph->quant_wbits & 0xf) + 2;
288} 291}
diff --git a/linden/indra/llmessage/patch_code.h b/linden/indra/llmessage/patch_code.h
index 82fa6bb..dbfdf70 100644
--- a/linden/indra/llmessage/patch_code.h
+++ b/linden/indra/llmessage/patch_code.h
@@ -46,7 +46,7 @@ void end_patch_coding(LLBitPack &bitpack);
46 46
47void init_patch_decoding(LLBitPack &bitpack); 47void init_patch_decoding(LLBitPack &bitpack);
48void decode_patch_group_header(LLBitPack &bitpack, LLGroupHeader *gopp); 48void decode_patch_group_header(LLBitPack &bitpack, LLGroupHeader *gopp);
49void decode_patch_header(LLBitPack &bitpack, LLPatchHeader *ph); 49void decode_patch_header(LLBitPack &bitpack, LLPatchHeader *ph, BOOL b_large_patch);
50void decode_patch(LLBitPack &bitpack, S32 *patches); 50void decode_patch(LLBitPack &bitpack, S32 *patches);
51 51
52#endif 52#endif
diff --git a/linden/indra/llmessage/patch_dct.h b/linden/indra/llmessage/patch_dct.h
index 663e146..ba21be7 100644
--- a/linden/indra/llmessage/patch_dct.h
+++ b/linden/indra/llmessage/patch_dct.h
@@ -79,7 +79,7 @@ public:
79 F32 dc_offset; // 4 bytes 79 F32 dc_offset; // 4 bytes
80 U16 range; // 2 = 7 ((S16) FP range (breaks if we need > 32K meters in 1 patch) 80 U16 range; // 2 = 7 ((S16) FP range (breaks if we need > 32K meters in 1 patch)
81 U8 quant_wbits; // 1 = 8 (upper 4 bits is quant - 2, lower 4 bits is word bits - 2) 81 U8 quant_wbits; // 1 = 8 (upper 4 bits is quant - 2, lower 4 bits is word bits - 2)
82 U16 patchids; // 2 = 10 (actually only uses 10 bits, 5 for each) 82 U32 patchids; // 2 = 10 (actually only uses 10 bits, 5 for each)
83}; 83};
84 84
85// Compression routines 85// Compression routines
diff --git a/linden/indra/newview/kowopenregionsettings.cpp b/linden/indra/newview/kowopenregionsettings.cpp
index ef14d2a..0c4bb38 100644
--- a/linden/indra/newview/kowopenregionsettings.cpp
+++ b/linden/indra/newview/kowopenregionsettings.cpp
@@ -37,6 +37,7 @@
37#include "llfloaterregioninfo.h" 37#include "llfloaterregioninfo.h"
38#include "llfloaterworldmap.h" 38#include "llfloaterworldmap.h"
39#include "llvoiceclient.h" 39#include "llvoiceclient.h"
40#include "viewertime.h"
40 41
41//DEBUG includes 42//DEBUG includes
42//#include "llsdserialize.h" //LLSDNotationStreamer - for dumping LLSD to string 43//#include "llsdserialize.h" //LLSDNotationStreamer - for dumping LLSD to string
@@ -150,12 +151,15 @@ class OpenRegionInfoUpdate : public LLHTTPNode
150 } 151 }
151 if ( body.has("OffsetOfUTC") ) 152 if ( body.has("OffsetOfUTC") )
152 { 153 {
153 gSavedSettings.setS32("TimeOffset", body["OffsetOfUTC"].asReal()); 154 gSavedSettings.setS32("TimeOffset", body["OffsetOfUTC"].asInteger());
154 gSavedSettings.setBOOL("UseTimeOffset", true); 155 gSavedSettings.setBOOL("UseTimeOffset", true);
156 ViewerTime::sUseTimeOffset = true;
157 ViewerTime::sTimeOffset = gSavedSettings.getS32("TimeOffset");
155 } 158 }
156 if ( body.has("OffsetOfUTCDST") ) 159 if ( body.has("OffsetOfUTCDST") )
157 { 160 {
158 gSavedSettings.setBOOL("TimeOffsetDST", body["OffsetOfUTCDST"].asInteger() == 1 ? TRUE : FALSE); 161 gSavedSettings.setBOOL("TimeOffsetDST", body["OffsetOfUTCDST"].asInteger() == 1 ? TRUE : FALSE);
162 ViewerTime::sTimeOffsetDST = gSavedSettings.getBOOL("TimeOffsetDST");
159 } 163 }
160 if ( body.has("RenderWater") ) 164 if ( body.has("RenderWater") )
161 { 165 {
diff --git a/linden/indra/newview/llcloud.cpp b/linden/indra/newview/llcloud.cpp
index 3e9b86a..b325265 100644
--- a/linden/indra/newview/llcloud.cpp
+++ b/linden/indra/newview/llcloud.cpp
@@ -427,7 +427,7 @@ void LLCloudLayer::decompress(LLBitPack &bitpack, LLGroupHeader *group_headerp)
427 group_headerp->stride = group_headerp->patch_size; // offset required to step up one row 427 group_headerp->stride = group_headerp->patch_size; // offset required to step up one row
428 set_group_of_patch_header(group_headerp); 428 set_group_of_patch_header(group_headerp);
429 429
430 decode_patch_header(bitpack, &patch_header); 430 decode_patch_header(bitpack, &patch_header, FALSE);
431 decode_patch(bitpack, gBuffer); 431 decode_patch(bitpack, gBuffer);
432 decompress_patch(mDensityp, gBuffer, &patch_header); 432 decompress_patch(mDensityp, gBuffer, &patch_header);
433} 433}
diff --git a/linden/indra/newview/llfloaterregioninfo.cpp b/linden/indra/newview/llfloaterregioninfo.cpp
index d4ffe22..3c3625b 100644
--- a/linden/indra/newview/llfloaterregioninfo.cpp
+++ b/linden/indra/newview/llfloaterregioninfo.cpp
@@ -1,3446 +1,3446 @@
1/** 1/**
2 * @file llfloaterregioninfo.cpp 2 * @file llfloaterregioninfo.cpp
3 * @author Aaron Brashears 3 * @author Aaron Brashears
4 * @brief Implementation of the region info and controls floater and panels. 4 * @brief Implementation of the region info and controls floater and panels.
5 * 5 *
6 * $LicenseInfo:firstyear=2004&license=viewergpl$ 6 * $LicenseInfo:firstyear=2004&license=viewergpl$
7 * 7 *
8 * Copyright (c) 2004-2009, Linden Research, Inc. 8 * Copyright (c) 2004-2009, Linden Research, Inc.
9 * 9 *
10 * Second Life Viewer Source Code 10 * Second Life Viewer Source Code
11 * The source code in this file ("Source Code") is provided by Linden Lab 11 * The source code in this file ("Source Code") is provided by Linden Lab
12 * to you under the terms of the GNU General Public License, version 2.0 12 * to you under the terms of the GNU General Public License, version 2.0
13 * ("GPL"), unless you have obtained a separate licensing agreement 13 * ("GPL"), unless you have obtained a separate licensing agreement
14 * ("Other License"), formally executed by you and Linden Lab. Terms of 14 * ("Other License"), formally executed by you and Linden Lab. Terms of
15 * the GPL can be found in doc/GPL-license.txt in this distribution, or 15 * the GPL can be found in doc/GPL-license.txt in this distribution, or
16 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 16 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
17 * 17 *
18 * There are special exceptions to the terms and conditions of the GPL as 18 * There are special exceptions to the terms and conditions of the GPL as
19 * it is applied to this Source Code. View the full text of the exception 19 * it is applied to this Source Code. View the full text of the exception
20 * in the file doc/FLOSS-exception.txt in this software distribution, or 20 * in the file doc/FLOSS-exception.txt in this software distribution, or
21 * online at 21 * online at
22 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 22 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
23 * 23 *
24 * By copying, modifying or distributing this software, you acknowledge 24 * By copying, modifying or distributing this software, you acknowledge
25 * that you have read and understood your obligations described above, 25 * that you have read and understood your obligations described above,
26 * and agree to abide by those obligations. 26 * and agree to abide by those obligations.
27 * 27 *
28 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 28 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
29 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 29 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
30 * COMPLETENESS OR PERFORMANCE. 30 * COMPLETENESS OR PERFORMANCE.
31 * $/LicenseInfo$ 31 * $/LicenseInfo$
32 */ 32 */
33 33
34#include "llviewerprecompiledheaders.h" 34#include "llviewerprecompiledheaders.h"
35#include "llfloaterregioninfo.h" 35#include "llfloaterregioninfo.h"
36 36
37#include <algorithm> 37#include <algorithm>
38#include <functional> 38#include <functional>
39 39
40#include "llcachename.h" 40#include "llcachename.h"
41#include "lldir.h" 41#include "lldir.h"
42#include "lldispatcher.h" 42#include "lldispatcher.h"
43#include "llglheaders.h" 43#include "llglheaders.h"
44#include "llregionflags.h" 44#include "llregionflags.h"
45#include "llstl.h" 45#include "llstl.h"
46#include "indra_constants.h" 46#include "indra_constants.h"
47#include "message.h" 47#include "message.h"
48 48
49#include "llagent.h" 49#include "llagent.h"
50#include "llalertdialog.h" 50#include "llalertdialog.h"
51#include "llappviewer.h" 51#include "llappviewer.h"
52#include "llfloateravatarpicker.h" 52#include "llfloateravatarpicker.h"
53#include "llbutton.h" 53#include "llbutton.h"
54#include "llcheckboxctrl.h" 54#include "llcheckboxctrl.h"
55#include "llcombobox.h" 55#include "llcombobox.h"
56#include "llfilepicker.h" 56#include "llfilepicker.h"
57#include "llfloaterdaycycle.h" 57#include "llfloaterdaycycle.h"
58#include "llfloatergodtools.h" // for send_sim_wide_deletes() 58#include "llfloatergodtools.h" // for send_sim_wide_deletes()
59#include "llfloatertopobjects.h" // added to fix SL-32336 59#include "llfloatertopobjects.h" // added to fix SL-32336
60#include "llfloatergroups.h" 60#include "llfloatergroups.h"
61#include "llfloatertelehub.h" 61#include "llfloatertelehub.h"
62#include "llfloaterwindlight.h" 62#include "llfloaterwindlight.h"
63#include "llinventorymodel.h" 63#include "llinventorymodel.h"
64#include "lllineeditor.h" 64#include "lllineeditor.h"
65#include "llalertdialog.h" 65#include "llalertdialog.h"
66#include "llnamelistctrl.h" 66#include "llnamelistctrl.h"
67#include "llsliderctrl.h" 67#include "llsliderctrl.h"
68#include "llspinctrl.h" 68#include "llspinctrl.h"
69#include "lltabcontainer.h" 69#include "lltabcontainer.h"
70#include "lltextbox.h" 70#include "lltextbox.h"
71#include "llinventory.h" 71#include "llinventory.h"
72#include "lltexturectrl.h" 72#include "lltexturectrl.h"
73#include "lltrans.h" 73#include "lltrans.h"
74#include "llviewercontrol.h" 74#include "llviewercontrol.h"
75#include "lluictrlfactory.h" 75#include "lluictrlfactory.h"
76#include "llviewerimage.h" 76#include "llviewerimage.h"
77#include "llviewerimagelist.h" 77#include "llviewerimagelist.h"
78#include "llviewerregion.h" 78#include "llviewerregion.h"
79#include "llviewerstats.h" 79#include "llviewerstats.h"
80#include "llviewertexteditor.h" 80#include "llviewertexteditor.h"
81#include "llviewerwindow.h" 81#include "llviewerwindow.h"
82#include "llvlcomposition.h" 82#include "llvlcomposition.h"
83#include "hippolimits.h" 83#include "hippolimits.h"
84 84
85// [RLVa:KB] 85// [RLVa:KB]
86#include "rlvhandler.h" 86#include "rlvhandler.h"
87// [/RLVa:KB] 87// [/RLVa:KB]
88 88
89#define ELAR_ENABLED 0 // Enable when server support is implemented 89#define ELAR_ENABLED 0 // Enable when server support is implemented
90 90
91const S32 TERRAIN_TEXTURE_COUNT = 4; 91const S32 TERRAIN_TEXTURE_COUNT = 4;
92const S32 CORNER_COUNT = 4; 92const S32 CORNER_COUNT = 4;
93 93
94///---------------------------------------------------------------------------- 94///----------------------------------------------------------------------------
95/// Local class declaration 95/// Local class declaration
96///---------------------------------------------------------------------------- 96///----------------------------------------------------------------------------
97 97
98class LLDispatchEstateUpdateInfo : public LLDispatchHandler 98class LLDispatchEstateUpdateInfo : public LLDispatchHandler
99{ 99{
100public: 100public:
101 LLDispatchEstateUpdateInfo() {} 101 LLDispatchEstateUpdateInfo() {}
102 virtual ~LLDispatchEstateUpdateInfo() {} 102 virtual ~LLDispatchEstateUpdateInfo() {}
103 virtual bool operator()( 103 virtual bool operator()(
104 const LLDispatcher* dispatcher, 104 const LLDispatcher* dispatcher,
105 const std::string& key, 105 const std::string& key,
106 const LLUUID& invoice, 106 const LLUUID& invoice,
107 const sparam_t& strings); 107 const sparam_t& strings);
108}; 108};
109 109
110class LLDispatchSetEstateAccess : public LLDispatchHandler 110class LLDispatchSetEstateAccess : public LLDispatchHandler
111{ 111{
112public: 112public:
113 LLDispatchSetEstateAccess() {} 113 LLDispatchSetEstateAccess() {}
114 virtual ~LLDispatchSetEstateAccess() {} 114 virtual ~LLDispatchSetEstateAccess() {}
115 virtual bool operator()( 115 virtual bool operator()(
116 const LLDispatcher* dispatcher, 116 const LLDispatcher* dispatcher,
117 const std::string& key, 117 const std::string& key,
118 const LLUUID& invoice, 118 const LLUUID& invoice,
119 const sparam_t& strings); 119 const sparam_t& strings);
120}; 120};
121 121
122 122
123/* 123/*
124void unpack_request_params( 124void unpack_request_params(
125 LLMessageSystem* msg, 125 LLMessageSystem* msg,
126 LLDispatcher::sparam_t& strings, 126 LLDispatcher::sparam_t& strings,
127 LLDispatcher::iparam_t& integers) 127 LLDispatcher::iparam_t& integers)
128{ 128{
129 char str_buf[MAX_STRING]; 129 char str_buf[MAX_STRING];
130 S32 str_count = msg->getNumberOfBlocksFast(_PREHASH_StringData); 130 S32 str_count = msg->getNumberOfBlocksFast(_PREHASH_StringData);
131 S32 i; 131 S32 i;
132 for (i = 0; i < str_count; ++i) 132 for (i = 0; i < str_count; ++i)
133 { 133 {
134 // we treat the SParam as binary data (since it might be an 134 // we treat the SParam as binary data (since it might be an
135 // LLUUID in compressed form which may have embedded \0's,) 135 // LLUUID in compressed form which may have embedded \0's,)
136 str_buf[0] = '\0'; 136 str_buf[0] = '\0';
137 S32 data_size = msg->getSizeFast(_PREHASH_StringData, i, _PREHASH_SParam); 137 S32 data_size = msg->getSizeFast(_PREHASH_StringData, i, _PREHASH_SParam);
138 if (data_size >= 0) 138 if (data_size >= 0)
139 { 139 {
140 msg->getBinaryDataFast(_PREHASH_StringData, _PREHASH_SParam, 140 msg->getBinaryDataFast(_PREHASH_StringData, _PREHASH_SParam,
141 str_buf, data_size, i, MAX_STRING - 1); 141 str_buf, data_size, i, MAX_STRING - 1);
142 strings.push_back(std::string(str_buf, data_size)); 142 strings.push_back(std::string(str_buf, data_size));
143 } 143 }
144 } 144 }
145 145
146 U32 int_buf; 146 U32 int_buf;
147 S32 int_count = msg->getNumberOfBlocksFast(_PREHASH_IntegerData); 147 S32 int_count = msg->getNumberOfBlocksFast(_PREHASH_IntegerData);
148 for (i = 0; i < int_count; ++i) 148 for (i = 0; i < int_count; ++i)
149 { 149 {
150 msg->getU32("IntegerData", "IParam", int_buf, i); 150 msg->getU32("IntegerData", "IParam", int_buf, i);
151 integers.push_back(int_buf); 151 integers.push_back(int_buf);
152 } 152 }
153} 153}
154*/ 154*/
155 155
156 156
157 157
158bool estate_dispatch_initialized = false; 158bool estate_dispatch_initialized = false;
159 159
160 160
161///---------------------------------------------------------------------------- 161///----------------------------------------------------------------------------
162/// LLFloaterRegionInfo 162/// LLFloaterRegionInfo
163///---------------------------------------------------------------------------- 163///----------------------------------------------------------------------------
164 164
165//S32 LLFloaterRegionInfo::sRequestSerial = 0; 165//S32 LLFloaterRegionInfo::sRequestSerial = 0;
166LLUUID LLFloaterRegionInfo::sRequestInvoice; 166LLUUID LLFloaterRegionInfo::sRequestInvoice;
167 167
168LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed) 168LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
169{ 169{
170 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_region_info.xml", NULL, FALSE); 170 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_region_info.xml", NULL, FALSE);
171} 171}
172 172
173BOOL LLFloaterRegionInfo::postBuild() 173BOOL LLFloaterRegionInfo::postBuild()
174{ 174{
175 mTab = getChild<LLTabContainer>("region_panels"); 175 mTab = getChild<LLTabContainer>("region_panels");
176 176
177 // contruct the panels 177 // contruct the panels
178 LLPanelRegionInfo* panel; 178 LLPanelRegionInfo* panel;
179 179
180 panel = new LLPanelRegionGeneralInfo; 180 panel = new LLPanelRegionGeneralInfo;
181 mInfoPanels.push_back(panel); 181 mInfoPanels.push_back(panel);
182 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml"); 182 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml");
183 mTab->addTabPanel(panel, panel->getLabel(), TRUE); 183 mTab->addTabPanel(panel, panel->getLabel(), TRUE);
184 184
185 // We only use this panel on Aurora-based sims -- MC 185 // We only use this panel on Aurora-based sims -- MC
186 std::string url = gAgent.getRegion()->getCapability("DispatchOpenRegionSettings"); 186 std::string url = gAgent.getRegion()->getCapability("DispatchOpenRegionSettings");
187 if (!url.empty()) 187 if (!url.empty())
188 { 188 {
189 panel = new LLPanelRegionOpenSettingsInfo; 189 panel = new LLPanelRegionOpenSettingsInfo;
190 mInfoPanels.push_back(panel); 190 mInfoPanels.push_back(panel);
191 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_open_region_settings.xml"); 191 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_open_region_settings.xml");
192 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 192 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
193 } 193 }
194 194
195 panel = new LLPanelRegionDebugInfo; 195 panel = new LLPanelRegionDebugInfo;
196 mInfoPanels.push_back(panel); 196 mInfoPanels.push_back(panel);
197 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_debug.xml"); 197 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_debug.xml");
198 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 198 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
199 199
200 panel = new LLPanelRegionTextureInfo; 200 panel = new LLPanelRegionTextureInfo;
201 mInfoPanels.push_back(panel); 201 mInfoPanels.push_back(panel);
202 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_texture.xml"); 202 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_texture.xml");
203 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 203 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
204 204
205 panel = new LLPanelRegionTerrainInfo; 205 panel = new LLPanelRegionTerrainInfo;
206 mInfoPanels.push_back(panel); 206 mInfoPanels.push_back(panel);
207 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_terrain.xml"); 207 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_terrain.xml");
208 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 208 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
209 209
210 panel = new LLPanelEstateInfo; 210 panel = new LLPanelEstateInfo;
211 mInfoPanels.push_back(panel); 211 mInfoPanels.push_back(panel);
212 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_estate.xml"); 212 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_estate.xml");
213 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 213 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
214 214
215 panel = new LLPanelEstateCovenant; 215 panel = new LLPanelEstateCovenant;
216 mInfoPanels.push_back(panel); 216 mInfoPanels.push_back(panel);
217 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_covenant.xml"); 217 LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_covenant.xml");
218 mTab->addTabPanel(panel, panel->getLabel(), FALSE); 218 mTab->addTabPanel(panel, panel->getLabel(), FALSE);
219 219
220 gMessageSystem->setHandlerFunc( 220 gMessageSystem->setHandlerFunc(
221 "EstateOwnerMessage", 221 "EstateOwnerMessage",
222 &processEstateOwnerRequest); 222 &processEstateOwnerRequest);
223 223
224 return TRUE; 224 return TRUE;
225} 225}
226 226
227LLFloaterRegionInfo::~LLFloaterRegionInfo() 227LLFloaterRegionInfo::~LLFloaterRegionInfo()
228{ 228{
229} 229}
230 230
231void LLFloaterRegionInfo::onOpen() 231void LLFloaterRegionInfo::onOpen()
232{ 232{
233 LLRect rect = gSavedSettings.getRect("FloaterRegionInfo"); 233 LLRect rect = gSavedSettings.getRect("FloaterRegionInfo");
234 S32 left, top; 234 S32 left, top;
235 gFloaterView->getNewFloaterPosition(&left, &top); 235 gFloaterView->getNewFloaterPosition(&left, &top);
236 rect.translate(left,top); 236 rect.translate(left,top);
237 237
238 refreshFromRegion(gAgent.getRegion()); 238 refreshFromRegion(gAgent.getRegion());
239 requestRegionInfo(); 239 requestRegionInfo();
240 LLFloater::onOpen(); 240 LLFloater::onOpen();
241} 241}
242 242
243// static 243// static
244void LLFloaterRegionInfo::requestRegionInfo() 244void LLFloaterRegionInfo::requestRegionInfo()
245{ 245{
246 LLTabContainer* tab = findInstance()->getChild<LLTabContainer>("region_panels"); 246 LLTabContainer* tab = findInstance()->getChild<LLTabContainer>("region_panels");
247 247
248 tab->getChild<LLPanel>("General")->setCtrlsEnabled(FALSE); 248 tab->getChild<LLPanel>("General")->setCtrlsEnabled(FALSE);
249 tab->getChild<LLPanel>("Debug")->setCtrlsEnabled(FALSE); 249 tab->getChild<LLPanel>("Debug")->setCtrlsEnabled(FALSE);
250 tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE); 250 tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE);
251 tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE); 251 tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE);
252 tab->getChild<LLPanel>("RegionSettings")->setCtrlsEnabled(FALSE); 252 tab->getChild<LLPanel>("RegionSettings")->setCtrlsEnabled(FALSE);
253 253
254 // Must allow anyone to request the RegionInfo data 254 // Must allow anyone to request the RegionInfo data
255 // so non-owners/non-gods can see the values. 255 // so non-owners/non-gods can see the values.
256 // Therefore can't use an EstateOwnerMessage JC 256 // Therefore can't use an EstateOwnerMessage JC
257 LLMessageSystem* msg = gMessageSystem; 257 LLMessageSystem* msg = gMessageSystem;
258 msg->newMessage("RequestRegionInfo"); 258 msg->newMessage("RequestRegionInfo");
259 msg->nextBlock("AgentData"); 259 msg->nextBlock("AgentData");
260 msg->addUUID("AgentID", gAgent.getID()); 260 msg->addUUID("AgentID", gAgent.getID());
261 msg->addUUID("SessionID", gAgent.getSessionID()); 261 msg->addUUID("SessionID", gAgent.getSessionID());
262 gAgent.sendReliableMessage(); 262 gAgent.sendReliableMessage();
263} 263}
264 264
265// static 265// static
266void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**) 266void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**)
267{ 267{
268 static LLDispatcher dispatch; 268 static LLDispatcher dispatch;
269 if(!findInstance()) 269 if(!findInstance())
270 { 270 {
271 return; 271 return;
272 } 272 }
273 273
274 if (!estate_dispatch_initialized) 274 if (!estate_dispatch_initialized)
275 { 275 {
276 LLPanelEstateInfo::initDispatch(dispatch); 276 LLPanelEstateInfo::initDispatch(dispatch);
277 } 277 }
278 278
279 LLTabContainer* tab = findInstance()->getChild<LLTabContainer>("region_panels"); 279 LLTabContainer* tab = findInstance()->getChild<LLTabContainer>("region_panels");
280 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate"); 280 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate");
281 281
282 // unpack the message 282 // unpack the message
283 std::string request; 283 std::string request;
284 LLUUID invoice; 284 LLUUID invoice;
285 LLDispatcher::sparam_t strings; 285 LLDispatcher::sparam_t strings;
286 LLDispatcher::unpackMessage(msg, request, invoice, strings); 286 LLDispatcher::unpackMessage(msg, request, invoice, strings);
287 if(invoice != getLastInvoice()) 287 if(invoice != getLastInvoice())
288 { 288 {
289 llwarns << "Mismatched Estate message: " << request << llendl; 289 llwarns << "Mismatched Estate message: " << request << llendl;
290 return; 290 return;
291 } 291 }
292 292
293 //dispatch the message 293 //dispatch the message
294 dispatch.dispatch(request, invoice, strings); 294 dispatch.dispatch(request, invoice, strings);
295 295
296 LLViewerRegion* region = gAgent.getRegion(); 296 LLViewerRegion* region = gAgent.getRegion();
297 panel->updateControls(region); 297 panel->updateControls(region);
298} 298}
299 299
300 300
301// static 301// static
302void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg) 302void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
303{ 303{
304 LLPanel* panel; 304 LLPanel* panel;
305 305
306 llinfos << "LLFloaterRegionInfo::processRegionInfo" << llendl; 306 llinfos << "LLFloaterRegionInfo::processRegionInfo" << llendl;
307 if(!findInstance()) 307 if(!findInstance())
308 { 308 {
309 return; 309 return;
310 } 310 }
311 311
312 LLTabContainer* tab = findInstance()->getChild<LLTabContainer>("region_panels"); 312 LLTabContainer* tab = findInstance()->getChild<LLTabContainer>("region_panels");
313 313
314 LLViewerRegion* region = gAgent.getRegion(); 314 LLViewerRegion* region = gAgent.getRegion();
315 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); 315 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
316 316
317 // extract message 317 // extract message
318 std::string sim_name; 318 std::string sim_name;
319 std::string sim_type = LLTrans::getString("land_type_unknown"); 319 std::string sim_type = LLTrans::getString("land_type_unknown");
320 U32 region_flags; 320 U32 region_flags;
321 U8 agent_limit; 321 U8 agent_limit;
322 F32 object_bonus_factor; 322 F32 object_bonus_factor;
323 U8 sim_access; 323 U8 sim_access;
324 F32 water_height; 324 F32 water_height;
325 F32 terrain_raise_limit; 325 F32 terrain_raise_limit;
326 F32 terrain_lower_limit; 326 F32 terrain_lower_limit;
327 BOOL use_estate_sun; 327 BOOL use_estate_sun;
328 F32 sun_hour; 328 F32 sun_hour;
329 msg->getString("RegionInfo", "SimName", sim_name); 329 msg->getString("RegionInfo", "SimName", sim_name);
330 msg->getU32("RegionInfo", "RegionFlags", region_flags); 330 msg->getU32("RegionInfo", "RegionFlags", region_flags);
331 msg->getU8("RegionInfo", "MaxAgents", agent_limit); 331 msg->getU8("RegionInfo", "MaxAgents", agent_limit);
332 msg->getF32("RegionInfo", "ObjectBonusFactor", object_bonus_factor); 332 msg->getF32("RegionInfo", "ObjectBonusFactor", object_bonus_factor);
333 msg->getU8("RegionInfo", "SimAccess", sim_access); 333 msg->getU8("RegionInfo", "SimAccess", sim_access);
334 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_WaterHeight, water_height); 334 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_WaterHeight, water_height);
335 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainRaiseLimit, terrain_raise_limit); 335 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainRaiseLimit, terrain_raise_limit);
336 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainLowerLimit, terrain_lower_limit); 336 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainLowerLimit, terrain_lower_limit);
337 msg->getBOOL("RegionInfo", "UseEstateSun", use_estate_sun); 337 msg->getBOOL("RegionInfo", "UseEstateSun", use_estate_sun);
338 // actually the "last set" sun hour, not the current sun hour. JC 338 // actually the "last set" sun hour, not the current sun hour. JC
339 msg->getF32("RegionInfo", "SunHour", sun_hour); 339 msg->getF32("RegionInfo", "SunHour", sun_hour);
340 // the only reasonable way to decide if we actually have any data is to 340 // the only reasonable way to decide if we actually have any data is to
341 // check to see if any of these fields have nonzero sizes 341 // check to see if any of these fields have nonzero sizes
342 if (msg->getSize("RegionInfo2", "ProductSKU") > 0 || 342 if (msg->getSize("RegionInfo2", "ProductSKU") > 0 ||
343 msg->getSize("RegionInfo2", "ProductName") > 0) 343 msg->getSize("RegionInfo2", "ProductName") > 0)
344 { 344 {
345 msg->getString("RegionInfo2", "ProductName", sim_type); 345 msg->getString("RegionInfo2", "ProductName", sim_type);
346 } 346 }
347 347
348 // GENERAL PANEL 348 // GENERAL PANEL
349 panel = tab->getChild<LLPanel>("General"); 349 panel = tab->getChild<LLPanel>("General");
350 panel->childSetValue("region_text", LLSD(sim_name)); 350 panel->childSetValue("region_text", LLSD(sim_name));
351 panel->childSetValue("region_type", LLSD(sim_type)); 351 panel->childSetValue("region_type", LLSD(sim_type));
352 panel->childSetValue("version_channel_text", gLastVersionChannel); 352 panel->childSetValue("version_channel_text", gLastVersionChannel);
353 353
354 panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE ); 354 panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE );
355 panel->childSetValue("block_fly_check", (region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE ); 355 panel->childSetValue("block_fly_check", (region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE );
356 panel->childSetValue("allow_damage_check", (region_flags & REGION_FLAGS_ALLOW_DAMAGE) ? TRUE : FALSE ); 356 panel->childSetValue("allow_damage_check", (region_flags & REGION_FLAGS_ALLOW_DAMAGE) ? TRUE : FALSE );
357 panel->childSetValue("restrict_pushobject", (region_flags & REGION_FLAGS_RESTRICT_PUSHOBJECT) ? TRUE : FALSE ); 357 panel->childSetValue("restrict_pushobject", (region_flags & REGION_FLAGS_RESTRICT_PUSHOBJECT) ? TRUE : FALSE );
358 panel->childSetValue("allow_land_resell_check", (region_flags & REGION_FLAGS_BLOCK_LAND_RESELL) ? FALSE : TRUE ); 358 panel->childSetValue("allow_land_resell_check", (region_flags & REGION_FLAGS_BLOCK_LAND_RESELL) ? FALSE : TRUE );
359 panel->childSetValue("allow_parcel_changes_check", (region_flags & REGION_FLAGS_ALLOW_PARCEL_CHANGES) ? TRUE : FALSE ); 359 panel->childSetValue("allow_parcel_changes_check", (region_flags & REGION_FLAGS_ALLOW_PARCEL_CHANGES) ? TRUE : FALSE );
360 panel->childSetValue("block_parcel_search_check", (region_flags & REGION_FLAGS_BLOCK_PARCEL_SEARCH) ? TRUE : FALSE ); 360 panel->childSetValue("block_parcel_search_check", (region_flags & REGION_FLAGS_BLOCK_PARCEL_SEARCH) ? TRUE : FALSE );
361 panel->childSetValue("agent_limit_spin", LLSD((F32)agent_limit) ); 361 panel->childSetValue("agent_limit_spin", LLSD((F32)agent_limit) );
362 panel->childSetValue("object_bonus_spin", LLSD(object_bonus_factor) ); 362 panel->childSetValue("object_bonus_spin", LLSD(object_bonus_factor) );
363 panel->childSetValue("access_combo", LLSD(sim_access) ); 363 panel->childSetValue("access_combo", LLSD(sim_access) );
364 364
365 365
366 // detect teen grid for maturity 366 // detect teen grid for maturity
367 367
368 U32 parent_estate_id; 368 U32 parent_estate_id;
369 msg->getU32("RegionInfo", "ParentEstateID", parent_estate_id); 369 msg->getU32("RegionInfo", "ParentEstateID", parent_estate_id);
370 BOOL teen_grid = (parent_estate_id == 5); // *TODO add field to estate table and test that 370 BOOL teen_grid = (parent_estate_id == 5); // *TODO add field to estate table and test that
371 panel->childSetEnabled("access_combo", gAgent.isGodlike() || (region && region->canManageEstate() && !teen_grid)); 371 panel->childSetEnabled("access_combo", gAgent.isGodlike() || (region && region->canManageEstate() && !teen_grid));
372 panel->setCtrlsEnabled(allow_modify); 372 panel->setCtrlsEnabled(allow_modify);
373 373
374 // RegionSettings PANEL 374 // RegionSettings PANEL
375 panel = tab->getChild<LLPanel>("RegionSettings"); 375 panel = tab->getChild<LLPanel>("RegionSettings");
376 panel->setCtrlsEnabled(allow_modify); 376 panel->setCtrlsEnabled(allow_modify);
377 377
378 // DEBUG PANEL 378 // DEBUG PANEL
379 panel = tab->getChild<LLPanel>("Debug"); 379 panel = tab->getChild<LLPanel>("Debug");
380 380
381 panel->childSetValue("region_text", LLSD(sim_name) ); 381 panel->childSetValue("region_text", LLSD(sim_name) );
382 panel->childSetValue("disable_scripts_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_SCRIPTS)) ); 382 panel->childSetValue("disable_scripts_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_SCRIPTS)) );
383 panel->childSetValue("disable_collisions_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_COLLISIONS)) ); 383 panel->childSetValue("disable_collisions_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_COLLISIONS)) );
384 panel->childSetValue("disable_physics_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_PHYSICS)) ); 384 panel->childSetValue("disable_physics_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SKIP_PHYSICS)) );
385 panel->setCtrlsEnabled(allow_modify); 385 panel->setCtrlsEnabled(allow_modify);
386 386
387 // TERRAIN PANEL 387 // TERRAIN PANEL
388 panel = tab->getChild<LLPanel>("Terrain"); 388 panel = tab->getChild<LLPanel>("Terrain");
389 389
390 panel->childSetValue("region_text", LLSD(sim_name)); 390 panel->childSetValue("region_text", LLSD(sim_name));
391 panel->childSetValue("water_height_spin", LLSD(water_height)); 391 panel->childSetValue("water_height_spin", LLSD(water_height));
392 panel->childSetValue("terrain_raise_spin", LLSD(terrain_raise_limit)); 392 panel->childSetValue("terrain_raise_spin", LLSD(terrain_raise_limit));
393 panel->childSetValue("terrain_lower_spin", LLSD(terrain_lower_limit)); 393 panel->childSetValue("terrain_lower_spin", LLSD(terrain_lower_limit));
394 panel->childSetValue("use_estate_sun_check", LLSD(use_estate_sun)); 394 panel->childSetValue("use_estate_sun_check", LLSD(use_estate_sun));
395 395
396 panel->childSetValue("fixed_sun_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SUN_FIXED))); 396 panel->childSetValue("fixed_sun_check", LLSD((BOOL)(region_flags & REGION_FLAGS_SUN_FIXED)));
397 panel->childSetEnabled("fixed_sun_check", allow_modify && !use_estate_sun); 397 panel->childSetEnabled("fixed_sun_check", allow_modify && !use_estate_sun);
398 panel->childSetValue("sun_hour_slider", LLSD(sun_hour)); 398 panel->childSetValue("sun_hour_slider", LLSD(sun_hour));
399 panel->childSetEnabled("sun_hour_slider", allow_modify && !use_estate_sun); 399 panel->childSetEnabled("sun_hour_slider", allow_modify && !use_estate_sun);
400 panel->setCtrlsEnabled(allow_modify); 400 panel->setCtrlsEnabled(allow_modify);
401 401
402 getInstance()->refreshFromRegion( gAgent.getRegion() ); 402 getInstance()->refreshFromRegion( gAgent.getRegion() );
403} 403}
404 404
405// static 405// static
406LLPanelEstateInfo* LLFloaterRegionInfo::getPanelEstate() 406LLPanelEstateInfo* LLFloaterRegionInfo::getPanelEstate()
407{ 407{
408 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance(); 408 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance();
409 if (!floater) return NULL; 409 if (!floater) return NULL;
410 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels"); 410 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
411 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate"); 411 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate");
412 return panel; 412 return panel;
413} 413}
414 414
415// static 415// static
416LLPanelEstateCovenant* LLFloaterRegionInfo::getPanelCovenant() 416LLPanelEstateCovenant* LLFloaterRegionInfo::getPanelCovenant()
417{ 417{
418 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance(); 418 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance();
419 if (!floater) return NULL; 419 if (!floater) return NULL;
420 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels"); 420 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
421 LLPanelEstateCovenant* panel = (LLPanelEstateCovenant*)tab->getChild<LLPanel>("Covenant"); 421 LLPanelEstateCovenant* panel = (LLPanelEstateCovenant*)tab->getChild<LLPanel>("Covenant");
422 return panel; 422 return panel;
423} 423}
424 424
425// static 425// static
426LLPanelRegionOpenSettingsInfo* LLFloaterRegionInfo::getPanelOpenSettings() 426LLPanelRegionOpenSettingsInfo* LLFloaterRegionInfo::getPanelOpenSettings()
427{ 427{
428 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance(); 428 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance();
429 if (floater) 429 if (floater)
430 { 430 {
431 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels"); 431 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
432 LLPanelRegionOpenSettingsInfo* panel = (LLPanelRegionOpenSettingsInfo*)tab->getChild<LLPanel>("RegionSettings", FALSE, FALSE); 432 LLPanelRegionOpenSettingsInfo* panel = (LLPanelRegionOpenSettingsInfo*)tab->getChild<LLPanel>("RegionSettings", FALSE, FALSE);
433 if (panel) 433 if (panel)
434 { 434 {
435 return panel; 435 return panel;
436 } 436 }
437 } 437 }
438 return NULL; 438 return NULL;
439} 439}
440 440
441void LLFloaterRegionInfo::refreshFromRegion(LLViewerRegion* region) 441void LLFloaterRegionInfo::refreshFromRegion(LLViewerRegion* region)
442{ 442{
443 // call refresh from region on all panels 443 // call refresh from region on all panels
444 std::for_each( 444 std::for_each(
445 mInfoPanels.begin(), 445 mInfoPanels.begin(),
446 mInfoPanels.end(), 446 mInfoPanels.end(),
447 llbind2nd( 447 llbind2nd(
448#if LL_WINDOWS 448#if LL_WINDOWS
449 std::mem_fun1(&LLPanelRegionInfo::refreshFromRegion), 449 std::mem_fun1(&LLPanelRegionInfo::refreshFromRegion),
450#else 450#else
451 std::mem_fun(&LLPanelRegionInfo::refreshFromRegion), 451 std::mem_fun(&LLPanelRegionInfo::refreshFromRegion),
452#endif 452#endif
453 region)); 453 region));
454} 454}
455 455
456// public 456// public
457void LLFloaterRegionInfo::refresh() 457void LLFloaterRegionInfo::refresh()
458{ 458{
459 for(info_panels_t::iterator iter = mInfoPanels.begin(); 459 for(info_panels_t::iterator iter = mInfoPanels.begin();
460 iter != mInfoPanels.end(); ++iter) 460 iter != mInfoPanels.end(); ++iter)
461 { 461 {
462 (*iter)->refresh(); 462 (*iter)->refresh();
463 } 463 }
464} 464}
465 465
466 466
467///---------------------------------------------------------------------------- 467///----------------------------------------------------------------------------
468/// Local class implementation 468/// Local class implementation
469///---------------------------------------------------------------------------- 469///----------------------------------------------------------------------------
470 470
471// 471//
472// LLPanelRegionInfo 472// LLPanelRegionInfo
473// 473//
474 474
475// static 475// static
476void LLPanelRegionInfo::onBtnSet(void* user_data) 476void LLPanelRegionInfo::onBtnSet(void* user_data)
477{ 477{
478 LLPanelRegionInfo* panel = (LLPanelRegionInfo*)user_data; 478 LLPanelRegionInfo* panel = (LLPanelRegionInfo*)user_data;
479 if(!panel) return; 479 if(!panel) return;
480 if (panel->sendUpdate()) 480 if (panel->sendUpdate())
481 { 481 {
482 panel->disableButton("apply_btn"); 482 panel->disableButton("apply_btn");
483 } 483 }
484} 484}
485 485
486//static 486//static
487void LLPanelRegionInfo::onChangeChildCtrl(LLUICtrl* ctrl, void* user_data) 487void LLPanelRegionInfo::onChangeChildCtrl(LLUICtrl* ctrl, void* user_data)
488{ 488{
489 if (ctrl) 489 if (ctrl)
490 { 490 {
491 LLPanelRegionInfo* panel = (LLPanelRegionInfo*) ctrl->getParent(); 491 LLPanelRegionInfo* panel = (LLPanelRegionInfo*) ctrl->getParent();
492 panel->updateChild(ctrl); 492 panel->updateChild(ctrl);
493 } 493 }
494} 494}
495 495
496// static 496// static
497// Enables the "set" button if it is not already enabled 497// Enables the "set" button if it is not already enabled
498void LLPanelRegionInfo::onChangeAnything(LLUICtrl* ctrl, void* user_data) 498void LLPanelRegionInfo::onChangeAnything(LLUICtrl* ctrl, void* user_data)
499{ 499{
500 LLPanelRegionInfo* panel = (LLPanelRegionInfo*)user_data; 500 LLPanelRegionInfo* panel = (LLPanelRegionInfo*)user_data;
501 if(panel) 501 if(panel)
502 { 502 {
503 panel->enableButton("apply_btn"); 503 panel->enableButton("apply_btn");
504 panel->refresh(); 504 panel->refresh();
505 } 505 }
506} 506}
507 507
508// static 508// static
509// Enables set button on change to line editor 509// Enables set button on change to line editor
510void LLPanelRegionInfo::onChangeText(LLLineEditor* caller, void* user_data) 510void LLPanelRegionInfo::onChangeText(LLLineEditor* caller, void* user_data)
511{ 511{
512 // reuse the previous method 512 // reuse the previous method
513 onChangeAnything(0, user_data); 513 onChangeAnything(0, user_data);
514} 514}
515 515
516 516
517// virtual 517// virtual
518BOOL LLPanelRegionInfo::postBuild() 518BOOL LLPanelRegionInfo::postBuild()
519{ 519{
520 childSetAction("apply_btn", onBtnSet, this); 520 childSetAction("apply_btn", onBtnSet, this);
521 childDisable("apply_btn"); 521 childDisable("apply_btn");
522 refresh(); 522 refresh();
523 return TRUE; 523 return TRUE;
524} 524}
525 525
526// virtual 526// virtual
527void LLPanelRegionInfo::updateChild(LLUICtrl* child_ctr) 527void LLPanelRegionInfo::updateChild(LLUICtrl* child_ctr)
528{ 528{
529} 529}
530 530
531// virtual 531// virtual
532bool LLPanelRegionInfo::refreshFromRegion(LLViewerRegion* region) 532bool LLPanelRegionInfo::refreshFromRegion(LLViewerRegion* region)
533{ 533{
534 if (region) mHost = region->getHost(); 534 if (region) mHost = region->getHost();
535 return true; 535 return true;
536} 536}
537 537
538void LLPanelRegionInfo::sendEstateOwnerMessage( 538void LLPanelRegionInfo::sendEstateOwnerMessage(
539 LLMessageSystem* msg, 539 LLMessageSystem* msg,
540 const std::string& request, 540 const std::string& request,
541 const LLUUID& invoice, 541 const LLUUID& invoice,
542 const strings_t& strings) 542 const strings_t& strings)
543{ 543{
544 llinfos << "Sending estate request '" << request << "'" << llendl; 544 llinfos << "Sending estate request '" << request << "'" << llendl;
545 msg->newMessage("EstateOwnerMessage"); 545 msg->newMessage("EstateOwnerMessage");
546 msg->nextBlockFast(_PREHASH_AgentData); 546 msg->nextBlockFast(_PREHASH_AgentData);
547 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); 547 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
548 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); 548 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
549 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used 549 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
550 msg->nextBlock("MethodData"); 550 msg->nextBlock("MethodData");
551 msg->addString("Method", request); 551 msg->addString("Method", request);
552 msg->addUUID("Invoice", invoice); 552 msg->addUUID("Invoice", invoice);
553 if(strings.empty()) 553 if(strings.empty())
554 { 554 {
555 msg->nextBlock("ParamList"); 555 msg->nextBlock("ParamList");
556 msg->addString("Parameter", NULL); 556 msg->addString("Parameter", NULL);
557 } 557 }
558 else 558 else
559 { 559 {
560 strings_t::const_iterator it = strings.begin(); 560 strings_t::const_iterator it = strings.begin();
561 strings_t::const_iterator end = strings.end(); 561 strings_t::const_iterator end = strings.end();
562 for(; it != end; ++it) 562 for(; it != end; ++it)
563 { 563 {
564 msg->nextBlock("ParamList"); 564 msg->nextBlock("ParamList");
565 msg->addString("Parameter", *it); 565 msg->addString("Parameter", *it);
566 } 566 }
567 } 567 }
568 msg->sendReliable(mHost); 568 msg->sendReliable(mHost);
569} 569}
570 570
571void LLPanelRegionInfo::enableButton(const std::string& btn_name, BOOL enable) 571void LLPanelRegionInfo::enableButton(const std::string& btn_name, BOOL enable)
572{ 572{
573 childSetEnabled(btn_name, enable); 573 childSetEnabled(btn_name, enable);
574} 574}
575 575
576void LLPanelRegionInfo::disableButton(const std::string& btn_name) 576void LLPanelRegionInfo::disableButton(const std::string& btn_name)
577{ 577{
578 childDisable(btn_name); 578 childDisable(btn_name);
579} 579}
580 580
581void LLPanelRegionInfo::initCtrl(const std::string& name) 581void LLPanelRegionInfo::initCtrl(const std::string& name)
582{ 582{
583 childSetCommitCallback(name, onChangeAnything, this); 583 childSetCommitCallback(name, onChangeAnything, this);
584} 584}
585 585
586void LLPanelRegionInfo::initHelpBtn(const std::string& name, const std::string& xml_alert) 586void LLPanelRegionInfo::initHelpBtn(const std::string& name, const std::string& xml_alert)
587{ 587{
588 childSetAction(name, onClickHelp, new std::string(xml_alert)); 588 childSetAction(name, onClickHelp, new std::string(xml_alert));
589} 589}
590 590
591// static 591// static
592void LLPanelRegionInfo::onClickHelp(void* data) 592void LLPanelRegionInfo::onClickHelp(void* data)
593{ 593{
594 std::string* xml_alert = (std::string*)data; 594 std::string* xml_alert = (std::string*)data;
595 LLNotifications::instance().add(*xml_alert); 595 LLNotifications::instance().add(*xml_alert);
596} 596}
597 597
598///////////////////////////////////////////////////////////////////////////// 598/////////////////////////////////////////////////////////////////////////////
599// LLPanelRegionGeneralInfo 599// LLPanelRegionGeneralInfo
600// 600//
601bool LLPanelRegionGeneralInfo::refreshFromRegion(LLViewerRegion* region) 601bool LLPanelRegionGeneralInfo::refreshFromRegion(LLViewerRegion* region)
602{ 602{
603 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); 603 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
604 setCtrlsEnabled(allow_modify); 604 setCtrlsEnabled(allow_modify);
605 childDisable("apply_btn"); 605 childDisable("apply_btn");
606 childSetEnabled("access_text", allow_modify); 606 childSetEnabled("access_text", allow_modify);
607 // childSetEnabled("access_combo", allow_modify); 607 // childSetEnabled("access_combo", allow_modify);
608 // now set in processRegionInfo for teen grid detection 608 // now set in processRegionInfo for teen grid detection
609 childSetEnabled("kick_btn", allow_modify); 609 childSetEnabled("kick_btn", allow_modify);
610 childSetEnabled("kick_all_btn", allow_modify); 610 childSetEnabled("kick_all_btn", allow_modify);
611 childSetEnabled("im_btn", allow_modify); 611 childSetEnabled("im_btn", allow_modify);
612 childSetEnabled("manage_telehub_btn", allow_modify); 612 childSetEnabled("manage_telehub_btn", allow_modify);
613 613
614 // Data gets filled in by processRegionInfo 614 // Data gets filled in by processRegionInfo
615 615
616 return LLPanelRegionInfo::refreshFromRegion(region); 616 return LLPanelRegionInfo::refreshFromRegion(region);
617} 617}
618 618
619BOOL LLPanelRegionGeneralInfo::postBuild() 619BOOL LLPanelRegionGeneralInfo::postBuild()
620{ 620{
621 // Enable the "Apply" button if something is changed. JC 621 // Enable the "Apply" button if something is changed. JC
622 initCtrl("block_terraform_check"); 622 initCtrl("block_terraform_check");
623 initCtrl("block_fly_check"); 623 initCtrl("block_fly_check");
624 initCtrl("allow_damage_check"); 624 initCtrl("allow_damage_check");
625 initCtrl("allow_land_resell_check"); 625 initCtrl("allow_land_resell_check");
626 initCtrl("allow_parcel_changes_check"); 626 initCtrl("allow_parcel_changes_check");
627 initCtrl("agent_limit_spin"); 627 initCtrl("agent_limit_spin");
628 initCtrl("object_bonus_spin"); 628 initCtrl("object_bonus_spin");
629 initCtrl("access_combo"); 629 initCtrl("access_combo");
630 initCtrl("restrict_pushobject"); 630 initCtrl("restrict_pushobject");
631 initCtrl("block_parcel_search_check"); 631 initCtrl("block_parcel_search_check");
632 initCtrl("minimum_agent_age"); 632 initCtrl("minimum_agent_age");
633 633
634 initHelpBtn("terraform_help", "HelpRegionBlockTerraform"); 634 initHelpBtn("terraform_help", "HelpRegionBlockTerraform");
635 initHelpBtn("fly_help", "HelpRegionBlockFly"); 635 initHelpBtn("fly_help", "HelpRegionBlockFly");
636 initHelpBtn("damage_help", "HelpRegionAllowDamage"); 636 initHelpBtn("damage_help", "HelpRegionAllowDamage");
637 initHelpBtn("agent_limit_help", "HelpRegionAgentLimit"); 637 initHelpBtn("agent_limit_help", "HelpRegionAgentLimit");
638 initHelpBtn("object_bonus_help", "HelpRegionObjectBonus"); 638 initHelpBtn("object_bonus_help", "HelpRegionObjectBonus");
639 initHelpBtn("access_help", "HelpRegionMaturity"); 639 initHelpBtn("access_help", "HelpRegionMaturity");
640 initHelpBtn("restrict_pushobject_help", "HelpRegionRestrictPushObject"); 640 initHelpBtn("restrict_pushobject_help", "HelpRegionRestrictPushObject");
641 initHelpBtn("land_resell_help", "HelpRegionLandResell"); 641 initHelpBtn("land_resell_help", "HelpRegionLandResell");
642 initHelpBtn("parcel_changes_help", "HelpParcelChanges"); 642 initHelpBtn("parcel_changes_help", "HelpParcelChanges");
643 initHelpBtn("parcel_search_help", "HelpRegionSearch"); 643 initHelpBtn("parcel_search_help", "HelpRegionSearch");
644 644
645 childSetAction("kick_btn", onClickKick, this); 645 childSetAction("kick_btn", onClickKick, this);
646 childSetAction("kick_all_btn", onClickKickAll, this); 646 childSetAction("kick_all_btn", onClickKickAll, this);
647 childSetAction("im_btn", onClickMessage, this); 647 childSetAction("im_btn", onClickMessage, this);
648 childSetAction("manage_telehub_btn", onClickManageTelehub, this); 648 childSetAction("manage_telehub_btn", onClickManageTelehub, this);
649 649
650 return LLPanelRegionInfo::postBuild(); 650 return LLPanelRegionInfo::postBuild();
651} 651}
652 652
653// static 653// static
654void LLPanelRegionGeneralInfo::onClickKick(void* userdata) 654void LLPanelRegionGeneralInfo::onClickKick(void* userdata)
655{ 655{
656 llinfos << "LLPanelRegionGeneralInfo::onClickKick" << llendl; 656 llinfos << "LLPanelRegionGeneralInfo::onClickKick" << llendl;
657 LLPanelRegionGeneralInfo* panelp = (LLPanelRegionGeneralInfo*)userdata; 657 LLPanelRegionGeneralInfo* panelp = (LLPanelRegionGeneralInfo*)userdata;
658 658
659 // this depends on the grandparent view being a floater 659 // this depends on the grandparent view being a floater
660 // in order to set up floater dependency 660 // in order to set up floater dependency
661 LLFloater* parent_floater = gFloaterView->getParentFloater(panelp); 661 LLFloater* parent_floater = gFloaterView->getParentFloater(panelp);
662 LLFloater* child_floater = LLFloaterAvatarPicker::show(onKickCommit, userdata, FALSE, TRUE); 662 LLFloater* child_floater = LLFloaterAvatarPicker::show(onKickCommit, userdata, FALSE, TRUE);
663 parent_floater->addDependentFloater(child_floater); 663 parent_floater->addDependentFloater(child_floater);
664} 664}
665 665
666// static 666// static
667void LLPanelRegionGeneralInfo::onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata) 667void LLPanelRegionGeneralInfo::onKickCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata)
668{ 668{
669 if (names.empty() || ids.empty()) return; 669 if (names.empty() || ids.empty()) return;
670 if(ids[0].notNull()) 670 if(ids[0].notNull())
671 { 671 {
672 LLPanelRegionGeneralInfo* self = (LLPanelRegionGeneralInfo*)userdata; 672 LLPanelRegionGeneralInfo* self = (LLPanelRegionGeneralInfo*)userdata;
673 if(!self) return; 673 if(!self) return;
674 strings_t strings; 674 strings_t strings;
675 // [0] = our agent id 675 // [0] = our agent id
676 // [1] = target agent id 676 // [1] = target agent id
677 std::string buffer; 677 std::string buffer;
678 gAgent.getID().toString(buffer); 678 gAgent.getID().toString(buffer);
679 strings.push_back(buffer); 679 strings.push_back(buffer);
680 680
681 ids[0].toString(buffer); 681 ids[0].toString(buffer);
682 strings.push_back(strings_t::value_type(buffer)); 682 strings.push_back(strings_t::value_type(buffer));
683 683
684 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 684 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
685 self->sendEstateOwnerMessage(gMessageSystem, "teleporthomeuser", invoice, strings); 685 self->sendEstateOwnerMessage(gMessageSystem, "teleporthomeuser", invoice, strings);
686 } 686 }
687} 687}
688 688
689// static 689// static
690void LLPanelRegionGeneralInfo::onClickKickAll(void* userdata) 690void LLPanelRegionGeneralInfo::onClickKickAll(void* userdata)
691{ 691{
692 llinfos << "LLPanelRegionGeneralInfo::onClickKickAll" << llendl; 692 llinfos << "LLPanelRegionGeneralInfo::onClickKickAll" << llendl;
693 LLNotifications::instance().add("KickUsersFromRegion", 693 LLNotifications::instance().add("KickUsersFromRegion",
694 LLSD(), 694 LLSD(),
695 LLSD(), 695 LLSD(),
696 boost::bind(&LLPanelRegionGeneralInfo::onKickAllCommit, (LLPanelRegionGeneralInfo*)userdata, _1, _2)); 696 boost::bind(&LLPanelRegionGeneralInfo::onKickAllCommit, (LLPanelRegionGeneralInfo*)userdata, _1, _2));
697} 697}
698 698
699bool LLPanelRegionGeneralInfo::onKickAllCommit(const LLSD& notification, const LLSD& response) 699bool LLPanelRegionGeneralInfo::onKickAllCommit(const LLSD& notification, const LLSD& response)
700{ 700{
701 S32 option = LLNotification::getSelectedOption(notification, response); 701 S32 option = LLNotification::getSelectedOption(notification, response);
702 if (option == 0) 702 if (option == 0)
703 { 703 {
704 strings_t strings; 704 strings_t strings;
705 // [0] = our agent id 705 // [0] = our agent id
706 std::string buffer; 706 std::string buffer;
707 gAgent.getID().toString(buffer); 707 gAgent.getID().toString(buffer);
708 strings.push_back(buffer); 708 strings.push_back(buffer);
709 709
710 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 710 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
711 // historical message name 711 // historical message name
712 sendEstateOwnerMessage(gMessageSystem, "teleporthomeallusers", invoice, strings); 712 sendEstateOwnerMessage(gMessageSystem, "teleporthomeallusers", invoice, strings);
713 } 713 }
714 return false; 714 return false;
715} 715}
716 716
717// static 717// static
718void LLPanelRegionGeneralInfo::onClickMessage(void* userdata) 718void LLPanelRegionGeneralInfo::onClickMessage(void* userdata)
719{ 719{
720 llinfos << "LLPanelRegionGeneralInfo::onClickMessage" << llendl; 720 llinfos << "LLPanelRegionGeneralInfo::onClickMessage" << llendl;
721 LLNotifications::instance().add("MessageRegion", 721 LLNotifications::instance().add("MessageRegion",
722 LLSD(), 722 LLSD(),
723 LLSD(), 723 LLSD(),
724 boost::bind(&LLPanelRegionGeneralInfo::onMessageCommit, (LLPanelRegionGeneralInfo*)userdata, _1, _2)); 724 boost::bind(&LLPanelRegionGeneralInfo::onMessageCommit, (LLPanelRegionGeneralInfo*)userdata, _1, _2));
725} 725}
726 726
727// static 727// static
728bool LLPanelRegionGeneralInfo::onMessageCommit(const LLSD& notification, const LLSD& response) 728bool LLPanelRegionGeneralInfo::onMessageCommit(const LLSD& notification, const LLSD& response)
729{ 729{
730 if(LLNotification::getSelectedOption(notification, response) != 0) return false; 730 if(LLNotification::getSelectedOption(notification, response) != 0) return false;
731 731
732 std::string text = response["message"].asString(); 732 std::string text = response["message"].asString();
733 if (text.empty()) return false; 733 if (text.empty()) return false;
734 734
735 llinfos << "Message to everyone: " << text << llendl; 735 llinfos << "Message to everyone: " << text << llendl;
736 strings_t strings; 736 strings_t strings;
737 // [0] grid_x, unused here 737 // [0] grid_x, unused here
738 // [1] grid_y, unused here 738 // [1] grid_y, unused here
739 // [2] agent_id of sender 739 // [2] agent_id of sender
740 // [3] sender name 740 // [3] sender name
741 // [4] message 741 // [4] message
742 strings.push_back("-1"); 742 strings.push_back("-1");
743 strings.push_back("-1"); 743 strings.push_back("-1");
744 std::string buffer; 744 std::string buffer;
745 gAgent.getID().toString(buffer); 745 gAgent.getID().toString(buffer);
746 strings.push_back(buffer); 746 strings.push_back(buffer);
747 std::string name; 747 std::string name;
748 gAgent.buildFullname(name); 748 gAgent.buildFullname(name);
749 strings.push_back(strings_t::value_type(name)); 749 strings.push_back(strings_t::value_type(name));
750 strings.push_back(strings_t::value_type(text)); 750 strings.push_back(strings_t::value_type(text));
751 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 751 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
752 sendEstateOwnerMessage(gMessageSystem, "simulatormessage", invoice, strings); 752 sendEstateOwnerMessage(gMessageSystem, "simulatormessage", invoice, strings);
753 return false; 753 return false;
754} 754}
755 755
756// static 756// static
757void LLPanelRegionGeneralInfo::onClickManageTelehub(void* data) 757void LLPanelRegionGeneralInfo::onClickManageTelehub(void* data)
758{ 758{
759 LLFloaterRegionInfo::getInstance()->close(); 759 LLFloaterRegionInfo::getInstance()->close();
760 760
761 LLFloaterTelehub::show(); 761 LLFloaterTelehub::show();
762} 762}
763 763
764// setregioninfo 764// setregioninfo
765// strings[0] = 'Y' - block terraform, 'N' - not 765// strings[0] = 'Y' - block terraform, 'N' - not
766// strings[1] = 'Y' - block fly, 'N' - not 766// strings[1] = 'Y' - block fly, 'N' - not
767// strings[2] = 'Y' - allow damage, 'N' - not 767// strings[2] = 'Y' - allow damage, 'N' - not
768// strings[3] = 'Y' - allow land sale, 'N' - not 768// strings[3] = 'Y' - allow land sale, 'N' - not
769// strings[4] = agent limit 769// strings[4] = agent limit
770// strings[5] = object bonus 770// strings[5] = object bonus
771// strings[6] = sim access (0 = unknown, 13 = PG, 21 = Mature, 42 = Adult) 771// strings[6] = sim access (0 = unknown, 13 = PG, 21 = Mature, 42 = Adult)
772// strings[7] = restrict pushobject 772// strings[7] = restrict pushobject
773// strings[8] = 'Y' - allow parcel subdivide, 'N' - not 773// strings[8] = 'Y' - allow parcel subdivide, 'N' - not
774// strings[9] = 'Y' - block parcel search, 'N' - allow 774// strings[9] = 'Y' - block parcel search, 'N' - allow
775BOOL LLPanelRegionGeneralInfo::sendUpdate() 775BOOL LLPanelRegionGeneralInfo::sendUpdate()
776{ 776{
777 llinfos << "LLPanelRegionGeneralInfo::sendUpdate()" << llendl; 777 llinfos << "LLPanelRegionGeneralInfo::sendUpdate()" << llendl;
778 778
779 // First try using a Cap. If that fails use the old method. 779 // First try using a Cap. If that fails use the old method.
780 LLSD body; 780 LLSD body;
781 std::string url = gAgent.getRegion()->getCapability("DispatchRegionInfo"); 781 std::string url = gAgent.getRegion()->getCapability("DispatchRegionInfo");
782 if (!url.empty()) 782 if (!url.empty())
783 { 783 {
784 body["block_terraform"] = childGetValue("block_terraform_check"); 784 body["block_terraform"] = childGetValue("block_terraform_check");
785 body["block_fly"] = childGetValue("block_fly_check"); 785 body["block_fly"] = childGetValue("block_fly_check");
786 body["allow_damage"] = childGetValue("allow_damage_check"); 786 body["allow_damage"] = childGetValue("allow_damage_check");
787 body["allow_land_resell"] = childGetValue("allow_land_resell_check"); 787 body["allow_land_resell"] = childGetValue("allow_land_resell_check");
788 body["agent_limit"] = childGetValue("agent_limit_spin"); 788 body["agent_limit"] = childGetValue("agent_limit_spin");
789 body["prim_bonus"] = childGetValue("object_bonus_spin"); 789 body["prim_bonus"] = childGetValue("object_bonus_spin");
790 body["sim_access"] = childGetValue("access_combo"); 790 body["sim_access"] = childGetValue("access_combo");
791 body["restrict_pushobject"] = childGetValue("restrict_pushobject"); 791 body["restrict_pushobject"] = childGetValue("restrict_pushobject");
792 body["allow_parcel_changes"] = childGetValue("allow_parcel_changes_check"); 792 body["allow_parcel_changes"] = childGetValue("allow_parcel_changes_check");
793 body["block_parcel_search"] = childGetValue("block_parcel_search_check"); 793 body["block_parcel_search"] = childGetValue("block_parcel_search_check");
794 body["minimum_agent_age"] = childGetValue("minimum_agent_age"); 794 body["minimum_agent_age"] = childGetValue("minimum_agent_age");
795 795
796 LLHTTPClient::post(url, body, new LLHTTPClient::Responder()); 796 LLHTTPClient::post(url, body, new LLHTTPClient::Responder());
797 } 797 }
798 else 798 else
799 { 799 {
800 strings_t strings; 800 strings_t strings;
801 std::string buffer; 801 std::string buffer;
802 802
803 buffer = llformat("%s", (childGetValue("block_terraform_check").asBoolean() ? "Y" : "N")); 803 buffer = llformat("%s", (childGetValue("block_terraform_check").asBoolean() ? "Y" : "N"));
804 strings.push_back(strings_t::value_type(buffer)); 804 strings.push_back(strings_t::value_type(buffer));
805 805
806 buffer = llformat("%s", (childGetValue("block_fly_check").asBoolean() ? "Y" : "N")); 806 buffer = llformat("%s", (childGetValue("block_fly_check").asBoolean() ? "Y" : "N"));
807 strings.push_back(strings_t::value_type(buffer)); 807 strings.push_back(strings_t::value_type(buffer));
808 808
809 buffer = llformat("%s", (childGetValue("allow_damage_check").asBoolean() ? "Y" : "N")); 809 buffer = llformat("%s", (childGetValue("allow_damage_check").asBoolean() ? "Y" : "N"));
810 strings.push_back(strings_t::value_type(buffer)); 810 strings.push_back(strings_t::value_type(buffer));
811 811
812 buffer = llformat("%s", (childGetValue("allow_land_resell_check").asBoolean() ? "Y" : "N")); 812 buffer = llformat("%s", (childGetValue("allow_land_resell_check").asBoolean() ? "Y" : "N"));
813 strings.push_back(strings_t::value_type(buffer)); 813 strings.push_back(strings_t::value_type(buffer));
814 814
815 F32 value = (F32)childGetValue("agent_limit_spin").asReal(); 815 F32 value = (F32)childGetValue("agent_limit_spin").asReal();
816 buffer = llformat("%f", value); 816 buffer = llformat("%f", value);
817 strings.push_back(strings_t::value_type(buffer)); 817 strings.push_back(strings_t::value_type(buffer));
818 818
819 value = (F32)childGetValue("object_bonus_spin").asReal(); 819 value = (F32)childGetValue("object_bonus_spin").asReal();
820 buffer = llformat("%f", value); 820 buffer = llformat("%f", value);
821 strings.push_back(strings_t::value_type(buffer)); 821 strings.push_back(strings_t::value_type(buffer));
822 822
823 buffer = llformat("%d", childGetValue("access_combo").asInteger()); 823 buffer = llformat("%d", childGetValue("access_combo").asInteger());
824 strings.push_back(strings_t::value_type(buffer)); 824 strings.push_back(strings_t::value_type(buffer));
825 825
826 buffer = llformat("%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N")); 826 buffer = llformat("%s", (childGetValue("restrict_pushobject").asBoolean() ? "Y" : "N"));
827 strings.push_back(strings_t::value_type(buffer)); 827 strings.push_back(strings_t::value_type(buffer));
828 828
829 buffer = llformat("%s", (childGetValue("allow_parcel_changes_check").asBoolean() ? "Y" : "N")); 829 buffer = llformat("%s", (childGetValue("allow_parcel_changes_check").asBoolean() ? "Y" : "N"));
830 strings.push_back(strings_t::value_type(buffer)); 830 strings.push_back(strings_t::value_type(buffer));
831 831
832 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 832 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
833 sendEstateOwnerMessage(gMessageSystem, "setregioninfo", invoice, strings); 833 sendEstateOwnerMessage(gMessageSystem, "setregioninfo", invoice, strings);
834 } 834 }
835 835
836 // if we changed access levels, tell user about it 836 // if we changed access levels, tell user about it
837 LLViewerRegion* region = gAgent.getRegion(); 837 LLViewerRegion* region = gAgent.getRegion();
838 if (region && (childGetValue("access_combo").asInteger() != region->getSimAccess()) ) 838 if (region && (childGetValue("access_combo").asInteger() != region->getSimAccess()) )
839 { 839 {
840 LLNotifications::instance().add("RegionMaturityChange"); 840 LLNotifications::instance().add("RegionMaturityChange");
841 } 841 }
842 842
843 return TRUE; 843 return TRUE;
844} 844}
845 845
846///////////////////////////////////////////////////////////////////////////// 846/////////////////////////////////////////////////////////////////////////////
847// LLPanelRegionOpenSettingsInfo 847// LLPanelRegionOpenSettingsInfo
848// 848//
849bool LLPanelRegionOpenSettingsInfo::refreshFromRegion(LLViewerRegion* region) 849bool LLPanelRegionOpenSettingsInfo::refreshFromRegion(LLViewerRegion* region)
850{ 850{
851 // Data gets filled in by hippo manager 851 // Data gets filled in by hippo manager
852 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); 852 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
853 853
854 childSetValue("draw_distance", gAgent.mDrawDistance); 854 childSetValue("draw_distance", gAgent.mDrawDistance);
855 childSetValue("force_draw_distance", gAgent.mLockedDrawDistance); 855 childSetValue("force_draw_distance", gAgent.mLockedDrawDistance);
856 childSetValue("allow_minimap", LLSD(gHippoLimits->mAllowMinimap)); 856 childSetValue("allow_minimap", LLSD(gHippoLimits->mAllowMinimap));
857 childSetValue("allow_physical_prims", (gHippoLimits->mAllowPhysicalPrims == 1 ? TRUE : FALSE)); 857 childSetValue("allow_physical_prims", (gHippoLimits->mAllowPhysicalPrims == 1 ? TRUE : FALSE));
858 childSetValue("max_drag_distance", LLSD(gHippoLimits->mMaxDragDistance)); 858 childSetValue("max_drag_distance", LLSD(gHippoLimits->mMaxDragDistance));
859 childSetValue("min_hole_size", LLSD(gHippoLimits->mMinHoleSize)); 859 childSetValue("min_hole_size", LLSD(gHippoLimits->mMinHoleSize));
860 childSetValue("max_hollow_size", LLSD(gHippoLimits->mMaxHollow)); 860 childSetValue("max_hollow_size", LLSD(gHippoLimits->mMaxHollow));
861 childSetValue("max_inventory_items_transfer", LLSD(gHippoLimits->mMaxInventoryItemsTransfer)); 861 childSetValue("max_inventory_items_transfer", LLSD(gHippoLimits->mMaxInventoryItemsTransfer));
862 childSetValue("max_link_count", LLSD(gHippoLimits->mMaxLinkedPrims)); 862 childSetValue("max_link_count", LLSD(gHippoLimits->mMaxLinkedPrims));
863 childSetValue("max_link_count_phys", LLSD(gHippoLimits->mMaxPhysLinkedPrims)); 863 childSetValue("max_link_count_phys", LLSD(gHippoLimits->mMaxPhysLinkedPrims));
864 childSetValue("max_phys_prim_scale", LLSD(gHippoLimits->mMaxPrimScale));//Todo:Fix 864 childSetValue("max_phys_prim_scale", LLSD(gHippoLimits->mMaxPrimScale));//Todo:Fix
865 childSetValue("max_prim_scale", LLSD(gHippoLimits->mMaxPrimScale)); 865 childSetValue("max_prim_scale", LLSD(gHippoLimits->mMaxPrimScale));
866 childSetValue("min_prim_scale", LLSD(gHippoLimits->mMinPrimScale)); 866 childSetValue("min_prim_scale", LLSD(gHippoLimits->mMinPrimScale));
867 childSetValue("render_water", LLSD(gHippoLimits->mRenderWater)); 867 childSetValue("render_water", LLSD(gHippoLimits->mRenderWater));
868 childSetValue("show_tags", LLSD(gHippoLimits->mRenderName)); 868 childSetValue("show_tags", LLSD(gHippoLimits->mRenderName));
869 childSetValue("max_groups", LLSD(gHippoLimits->mMaxAgentGroups)); 869 childSetValue("max_groups", LLSD(gHippoLimits->mMaxAgentGroups));
870 childSetValue("allow_parcel_windlight", LLSD(gHippoLimits->mAllowParcelWindLight)); 870 childSetValue("allow_parcel_windlight", LLSD(gHippoLimits->mAllowParcelWindLight));
871 childSetValue("enable_teen_mode", LLSD(gHippoLimits->mEnableTeenMode)); 871 childSetValue("enable_teen_mode", LLSD(gHippoLimits->mEnableTeenMode));
872 childSetValue("enforce_max_build", LLSD(gHippoLimits->mEnforceMaxBuild)); 872 childSetValue("enforce_max_build", LLSD(gHippoLimits->mEnforceMaxBuild));
873 873
874 setCtrlsEnabled(allow_modify); 874 setCtrlsEnabled(allow_modify);
875 875
876 return LLPanelRegionInfo::refreshFromRegion(region); 876 return LLPanelRegionInfo::refreshFromRegion(region);
877} 877}
878 878
879BOOL LLPanelRegionOpenSettingsInfo::postBuild() 879BOOL LLPanelRegionOpenSettingsInfo::postBuild()
880{ 880{
881 // Enable the "Apply" button if something is changed. JC 881 // Enable the "Apply" button if something is changed. JC
882 initCtrl("draw_distance"); 882 initCtrl("draw_distance");
883 initCtrl("force_draw_distance"); 883 initCtrl("force_draw_distance");
884 initCtrl("max_drag_distance"); 884 initCtrl("max_drag_distance");
885 initCtrl("max_prim_scale"); 885 initCtrl("max_prim_scale");
886 initCtrl("min_prim_scale"); 886 initCtrl("min_prim_scale");
887 initCtrl("max_phys_prim_scale"); 887 initCtrl("max_phys_prim_scale");
888 initCtrl("max_hollow_size"); 888 initCtrl("max_hollow_size");
889 initCtrl("min_hole_size"); 889 initCtrl("min_hole_size");
890 initCtrl("max_link_count"); 890 initCtrl("max_link_count");
891 initCtrl("max_link_count_phys"); 891 initCtrl("max_link_count_phys");
892 initCtrl("max_inventory_items_transfer"); 892 initCtrl("max_inventory_items_transfer");
893 initCtrl("max_groups"); 893 initCtrl("max_groups");
894 initCtrl("render_water"); 894 initCtrl("render_water");
895 initCtrl("allow_minimap"); 895 initCtrl("allow_minimap");
896 initCtrl("allow_physical_prims"); 896 initCtrl("allow_physical_prims");
897 initCtrl("enable_teen_mode"); 897 initCtrl("enable_teen_mode");
898 initCtrl("show_tags"); 898 initCtrl("show_tags");
899 initCtrl("allow_parcel_windlight"); 899 initCtrl("allow_parcel_windlight");
900 900
901 initHelpBtn("force_draw_distance_help", "HelpForceDrawDistance"); 901 initHelpBtn("force_draw_distance_help", "HelpForceDrawDistance");
902 initHelpBtn("max_inventory_items_transfer_help", "HelpMaxInventoryItemsTransfer"); 902 initHelpBtn("max_inventory_items_transfer_help", "HelpMaxInventoryItemsTransfer");
903 initHelpBtn("max_groups_help", "HelpMaxGroups"); 903 initHelpBtn("max_groups_help", "HelpMaxGroups");
904 initHelpBtn("render_water_help", "HelpRenderWater"); 904 initHelpBtn("render_water_help", "HelpRenderWater");
905 initHelpBtn("allow_minimap_help", "HelpAllowMinimap"); 905 initHelpBtn("allow_minimap_help", "HelpAllowMinimap");
906 initHelpBtn("allow_physical_prims_help", "HelpAllowPhysicalPrims"); 906 initHelpBtn("allow_physical_prims_help", "HelpAllowPhysicalPrims");
907 initHelpBtn("enable_teen_mode_help", "HelpEnableTeenMode"); 907 initHelpBtn("enable_teen_mode_help", "HelpEnableTeenMode");
908 initHelpBtn("show_tags_help", "HelpShowTags"); 908 initHelpBtn("show_tags_help", "HelpShowTags");
909 initHelpBtn("allow_parcel_windlight_help", "HelpAllowParcelWindLight"); 909 initHelpBtn("allow_parcel_windlight_help", "HelpAllowParcelWindLight");
910 910
911 childSetAction("apply_ors_btn", onClickOrs, this); 911 childSetAction("apply_ors_btn", onClickOrs, this);
912 912
913 refreshFromRegion(gAgent.getRegion()); 913 refreshFromRegion(gAgent.getRegion());
914 914
915 return LLPanelRegionInfo::postBuild(); 915 return LLPanelRegionInfo::postBuild();
916} 916}
917 917
918// setregioninfo 918// setregioninfo
919// strings[0] = 'Y' - block terraform, 'N' - not 919// strings[0] = 'Y' - block terraform, 'N' - not
920// strings[1] = 'Y' - block fly, 'N' - not 920// strings[1] = 'Y' - block fly, 'N' - not
921// strings[2] = 'Y' - allow damage, 'N' - not 921// strings[2] = 'Y' - allow damage, 'N' - not
922// strings[3] = 'Y' - allow land sale, 'N' - not 922// strings[3] = 'Y' - allow land sale, 'N' - not
923// strings[4] = agent limit 923// strings[4] = agent limit
924// strings[5] = object bonus 924// strings[5] = object bonus
925// strings[6] = sim access (0 = unknown, 13 = PG, 21 = Mature, 42 = Adult) 925// strings[6] = sim access (0 = unknown, 13 = PG, 21 = Mature, 42 = Adult)
926// strings[7] = restrict pushobject 926// strings[7] = restrict pushobject
927// strings[8] = 'Y' - allow parcel subdivide, 'N' - not 927// strings[8] = 'Y' - allow parcel subdivide, 'N' - not
928// strings[9] = 'Y' - block parcel search, 'N' - allow 928// strings[9] = 'Y' - block parcel search, 'N' - allow
929void LLPanelRegionOpenSettingsInfo::onClickOrs(void* userdata) 929void LLPanelRegionOpenSettingsInfo::onClickOrs(void* userdata)
930{ 930{
931 LLPanelRegionOpenSettingsInfo* self; 931 LLPanelRegionOpenSettingsInfo* self;
932 self = (LLPanelRegionOpenSettingsInfo*)userdata; 932 self = (LLPanelRegionOpenSettingsInfo*)userdata;
933 933
934 llinfos << "LLPanelRegionOpenSettingsInfo::onClickOrs()" << llendl; 934 llinfos << "LLPanelRegionOpenSettingsInfo::onClickOrs()" << llendl;
935 935
936 LLSD body; 936 LLSD body;
937 std::string url = gAgent.getRegion()->getCapability("DispatchOpenRegionSettings"); 937 std::string url = gAgent.getRegion()->getCapability("DispatchOpenRegionSettings");
938 if (!url.empty()) 938 if (!url.empty())
939 { 939 {
940 body["draw_distance"] = self->childGetValue("draw_distance"); 940 body["draw_distance"] = self->childGetValue("draw_distance");
941 body["force_draw_distance"] = self->childGetValue("force_draw_distance"); 941 body["force_draw_distance"] = self->childGetValue("force_draw_distance");
942 body["allow_minimap"] = self->childGetValue("allow_minimap"); 942 body["allow_minimap"] = self->childGetValue("allow_minimap");
943 body["allow_physical_prims"] = self->childGetValue("allow_physical_prims"); 943 body["allow_physical_prims"] = self->childGetValue("allow_physical_prims");
944 body["max_drag_distance"] = self->childGetValue("max_drag_distance"); 944 body["max_drag_distance"] = self->childGetValue("max_drag_distance");
945 body["min_hole_size"] = self->childGetValue("min_hole_size"); 945 body["min_hole_size"] = self->childGetValue("min_hole_size");
946 body["max_hollow_size"] = self->childGetValue("max_hollow_size"); 946 body["max_hollow_size"] = self->childGetValue("max_hollow_size");
947 body["max_inventory_items_transfer"] = self->childGetValue("max_inventory_items_transfer"); 947 body["max_inventory_items_transfer"] = self->childGetValue("max_inventory_items_transfer");
948 body["max_link_count"] = self->childGetValue("max_link_count"); 948 body["max_link_count"] = self->childGetValue("max_link_count");
949 body["max_link_count_phys"] = self->childGetValue("max_link_count_phys"); 949 body["max_link_count_phys"] = self->childGetValue("max_link_count_phys");
950 body["max_phys_prim_scale"] = self->childGetValue("max_phys_prim_scale"); 950 body["max_phys_prim_scale"] = self->childGetValue("max_phys_prim_scale");
951 body["max_prim_scale"] = self->childGetValue("max_prim_scale"); 951 body["max_prim_scale"] = self->childGetValue("max_prim_scale");
952 body["min_prim_scale"] = self->childGetValue("min_prim_scale"); 952 body["min_prim_scale"] = self->childGetValue("min_prim_scale");
953 body["render_water"] = self->childGetValue("render_water"); 953 body["render_water"] = self->childGetValue("render_water");
954 body["show_tags"] = self->childGetValue("show_tags"); 954 body["show_tags"] = self->childGetValue("show_tags");
955 body["max_groups"] = self->childGetValue("max_groups"); 955 body["max_groups"] = self->childGetValue("max_groups");
956 body["allow_parcel_windlight"] = self->childGetValue("allow_parcel_windlight"); 956 body["allow_parcel_windlight"] = self->childGetValue("allow_parcel_windlight");
957 body["enable_teen_mode"] = self->childGetValue("enable_teen_mode"); 957 body["enable_teen_mode"] = self->childGetValue("enable_teen_mode");
958 body["enforce_max_build"] = self->childGetValue("enforce_max_build"); 958 body["enforce_max_build"] = self->childGetValue("enforce_max_build");
959 959
960 LLHTTPClient::post(url, body, new LLHTTPClient::Responder()); 960 LLHTTPClient::post(url, body, new LLHTTPClient::Responder());
961 } 961 }
962} 962}
963 963
964///////////////////////////////////////////////////////////////////////////// 964/////////////////////////////////////////////////////////////////////////////
965// LLPanelRegionDebugInfo 965// LLPanelRegionDebugInfo
966///////////////////////////////////////////////////////////////////////////// 966/////////////////////////////////////////////////////////////////////////////
967BOOL LLPanelRegionDebugInfo::postBuild() 967BOOL LLPanelRegionDebugInfo::postBuild()
968{ 968{
969 LLPanelRegionInfo::postBuild(); 969 LLPanelRegionInfo::postBuild();
970 initCtrl("disable_scripts_check"); 970 initCtrl("disable_scripts_check");
971 initCtrl("disable_collisions_check"); 971 initCtrl("disable_collisions_check");
972 initCtrl("disable_physics_check"); 972 initCtrl("disable_physics_check");
973 973
974 initHelpBtn("disable_scripts_help", "HelpRegionDisableScripts"); 974 initHelpBtn("disable_scripts_help", "HelpRegionDisableScripts");
975 initHelpBtn("disable_collisions_help", "HelpRegionDisableCollisions"); 975 initHelpBtn("disable_collisions_help", "HelpRegionDisableCollisions");
976 initHelpBtn("disable_physics_help", "HelpRegionDisablePhysics"); 976 initHelpBtn("disable_physics_help", "HelpRegionDisablePhysics");
977 initHelpBtn("top_colliders_help", "HelpRegionTopColliders"); 977 initHelpBtn("top_colliders_help", "HelpRegionTopColliders");
978 initHelpBtn("top_scripts_help", "HelpRegionTopScripts"); 978 initHelpBtn("top_scripts_help", "HelpRegionTopScripts");
979 initHelpBtn("restart_help", "HelpRegionRestart"); 979 initHelpBtn("restart_help", "HelpRegionRestart");
980 initHelpBtn("minimum_agent_age_help", "HelpRegionMinimumAge"); 980 initHelpBtn("minimum_agent_age_help", "HelpRegionMinimumAge");
981 981
982 982
983 childSetAction("choose_avatar_btn", onClickChooseAvatar, this); 983 childSetAction("choose_avatar_btn", onClickChooseAvatar, this);
984 childSetAction("return_btn", onClickReturn, this); 984 childSetAction("return_btn", onClickReturn, this);
985 childSetAction("top_colliders_btn", onClickTopColliders, this); 985 childSetAction("top_colliders_btn", onClickTopColliders, this);
986 childSetAction("top_scripts_btn", onClickTopScripts, this); 986 childSetAction("top_scripts_btn", onClickTopScripts, this);
987 childSetAction("restart_btn", onClickRestart, this); 987 childSetAction("restart_btn", onClickRestart, this);
988 childSetAction("cancel_restart_btn", onClickCancelRestart, this); 988 childSetAction("cancel_restart_btn", onClickCancelRestart, this);
989 989
990 return TRUE; 990 return TRUE;
991} 991}
992 992
993// virtual 993// virtual
994bool LLPanelRegionDebugInfo::refreshFromRegion(LLViewerRegion* region) 994bool LLPanelRegionDebugInfo::refreshFromRegion(LLViewerRegion* region)
995{ 995{
996 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); 996 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
997 setCtrlsEnabled(allow_modify); 997 setCtrlsEnabled(allow_modify);
998 childDisable("apply_btn"); 998 childDisable("apply_btn");
999 childDisable("target_avatar_name"); 999 childDisable("target_avatar_name");
1000 1000
1001 childSetEnabled("choose_avatar_btn", allow_modify); 1001 childSetEnabled("choose_avatar_btn", allow_modify);
1002 childSetEnabled("return_scripts", allow_modify && !mTargetAvatar.isNull()); 1002 childSetEnabled("return_scripts", allow_modify && !mTargetAvatar.isNull());
1003 childSetEnabled("return_other_land", allow_modify && !mTargetAvatar.isNull()); 1003 childSetEnabled("return_other_land", allow_modify && !mTargetAvatar.isNull());
1004 childSetEnabled("return_estate_wide", allow_modify && !mTargetAvatar.isNull()); 1004 childSetEnabled("return_estate_wide", allow_modify && !mTargetAvatar.isNull());
1005 childSetEnabled("return_btn", allow_modify && !mTargetAvatar.isNull()); 1005 childSetEnabled("return_btn", allow_modify && !mTargetAvatar.isNull());
1006 childSetEnabled("top_colliders_btn", allow_modify); 1006 childSetEnabled("top_colliders_btn", allow_modify);
1007 childSetEnabled("top_scripts_btn", allow_modify); 1007 childSetEnabled("top_scripts_btn", allow_modify);
1008 childSetEnabled("restart_btn", allow_modify); 1008 childSetEnabled("restart_btn", allow_modify);
1009 childSetEnabled("cancel_restart_btn", allow_modify); 1009 childSetEnabled("cancel_restart_btn", allow_modify);
1010 1010
1011 return LLPanelRegionInfo::refreshFromRegion(region); 1011 return LLPanelRegionInfo::refreshFromRegion(region);
1012} 1012}
1013 1013
1014// virtual 1014// virtual
1015BOOL LLPanelRegionDebugInfo::sendUpdate() 1015BOOL LLPanelRegionDebugInfo::sendUpdate()
1016{ 1016{
1017 llinfos << "LLPanelRegionDebugInfo::sendUpdate" << llendl; 1017 llinfos << "LLPanelRegionDebugInfo::sendUpdate" << llendl;
1018 strings_t strings; 1018 strings_t strings;
1019 std::string buffer; 1019 std::string buffer;
1020 1020
1021 buffer = llformat("%s", (childGetValue("disable_scripts_check").asBoolean() ? "Y" : "N")); 1021 buffer = llformat("%s", (childGetValue("disable_scripts_check").asBoolean() ? "Y" : "N"));
1022 strings.push_back(buffer); 1022 strings.push_back(buffer);
1023 1023
1024 buffer = llformat("%s", (childGetValue("disable_collisions_check").asBoolean() ? "Y" : "N")); 1024 buffer = llformat("%s", (childGetValue("disable_collisions_check").asBoolean() ? "Y" : "N"));
1025 strings.push_back(buffer); 1025 strings.push_back(buffer);
1026 1026
1027 buffer = llformat("%s", (childGetValue("disable_physics_check").asBoolean() ? "Y" : "N")); 1027 buffer = llformat("%s", (childGetValue("disable_physics_check").asBoolean() ? "Y" : "N"));
1028 strings.push_back(buffer); 1028 strings.push_back(buffer);
1029 1029
1030 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1030 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1031 sendEstateOwnerMessage(gMessageSystem, "setregiondebug", invoice, strings); 1031 sendEstateOwnerMessage(gMessageSystem, "setregiondebug", invoice, strings);
1032 return TRUE; 1032 return TRUE;
1033} 1033}
1034 1034
1035void LLPanelRegionDebugInfo::onClickChooseAvatar(void* data) 1035void LLPanelRegionDebugInfo::onClickChooseAvatar(void* data)
1036{ 1036{
1037 LLFloaterAvatarPicker::show(callbackAvatarID, data, FALSE, TRUE); 1037 LLFloaterAvatarPicker::show(callbackAvatarID, data, FALSE, TRUE);
1038} 1038}
1039 1039
1040// static 1040// static
1041void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data) 1041void LLPanelRegionDebugInfo::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data)
1042{ 1042{
1043 LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*) data; 1043 LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*) data;
1044 if (ids.empty() || names.empty()) return; 1044 if (ids.empty() || names.empty()) return;
1045 self->mTargetAvatar = ids[0]; 1045 self->mTargetAvatar = ids[0];
1046 self->childSetValue("target_avatar_name", LLSD(names[0])); 1046 self->childSetValue("target_avatar_name", LLSD(names[0]));
1047 self->refreshFromRegion( gAgent.getRegion() ); 1047 self->refreshFromRegion( gAgent.getRegion() );
1048} 1048}
1049 1049
1050// static 1050// static
1051void LLPanelRegionDebugInfo::onClickReturn(void* data) 1051void LLPanelRegionDebugInfo::onClickReturn(void* data)
1052{ 1052{
1053 LLPanelRegionDebugInfo* panelp = (LLPanelRegionDebugInfo*) data; 1053 LLPanelRegionDebugInfo* panelp = (LLPanelRegionDebugInfo*) data;
1054 if (panelp->mTargetAvatar.isNull()) return; 1054 if (panelp->mTargetAvatar.isNull()) return;
1055 1055
1056 LLSD args; 1056 LLSD args;
1057 args["USER_NAME"] = panelp->childGetValue("target_avatar_name").asString(); 1057 args["USER_NAME"] = panelp->childGetValue("target_avatar_name").asString();
1058 LLSD payload; 1058 LLSD payload;
1059 payload["avatar_id"] = panelp->mTargetAvatar; 1059 payload["avatar_id"] = panelp->mTargetAvatar;
1060 1060
1061 U32 flags = SWD_ALWAYS_RETURN_OBJECTS; 1061 U32 flags = SWD_ALWAYS_RETURN_OBJECTS;
1062 1062
1063 if (panelp->childGetValue("return_scripts").asBoolean()) 1063 if (panelp->childGetValue("return_scripts").asBoolean())
1064 { 1064 {
1065 flags |= SWD_SCRIPTED_ONLY; 1065 flags |= SWD_SCRIPTED_ONLY;
1066 } 1066 }
1067 1067
1068 if (panelp->childGetValue("return_other_land").asBoolean()) 1068 if (panelp->childGetValue("return_other_land").asBoolean())
1069 { 1069 {
1070 flags |= SWD_OTHERS_LAND_ONLY; 1070 flags |= SWD_OTHERS_LAND_ONLY;
1071 } 1071 }
1072 payload["flags"] = int(flags); 1072 payload["flags"] = int(flags);
1073 payload["return_estate_wide"] = panelp->childGetValue("return_estate_wide").asBoolean(); 1073 payload["return_estate_wide"] = panelp->childGetValue("return_estate_wide").asBoolean();
1074 LLNotifications::instance().add("EstateObjectReturn", args, payload, 1074 LLNotifications::instance().add("EstateObjectReturn", args, payload,
1075 boost::bind(&LLPanelRegionDebugInfo::callbackReturn, panelp, _1, _2)); 1075 boost::bind(&LLPanelRegionDebugInfo::callbackReturn, panelp, _1, _2));
1076} 1076}
1077 1077
1078bool LLPanelRegionDebugInfo::callbackReturn(const LLSD& notification, const LLSD& response) 1078bool LLPanelRegionDebugInfo::callbackReturn(const LLSD& notification, const LLSD& response)
1079{ 1079{
1080 S32 option = LLNotification::getSelectedOption(notification, response); 1080 S32 option = LLNotification::getSelectedOption(notification, response);
1081 if (option != 0) return false; 1081 if (option != 0) return false;
1082 1082
1083 LLUUID target_avatar = notification["payload"]["avatar_id"].asUUID(); 1083 LLUUID target_avatar = notification["payload"]["avatar_id"].asUUID();
1084 if (!target_avatar.isNull()) 1084 if (!target_avatar.isNull())
1085 { 1085 {
1086 U32 flags = notification["payload"]["flags"].asInteger(); 1086 U32 flags = notification["payload"]["flags"].asInteger();
1087 bool return_estate_wide = notification["payload"]["return_estate_wide"]; 1087 bool return_estate_wide = notification["payload"]["return_estate_wide"];
1088 if (return_estate_wide) 1088 if (return_estate_wide)
1089 { 1089 {
1090 // send as estate message - routed by spaceserver to all regions in estate 1090 // send as estate message - routed by spaceserver to all regions in estate
1091 strings_t strings; 1091 strings_t strings;
1092 strings.push_back(llformat("%d", flags)); 1092 strings.push_back(llformat("%d", flags));
1093 strings.push_back(target_avatar.asString()); 1093 strings.push_back(target_avatar.asString());
1094 1094
1095 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1095 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1096 1096
1097 sendEstateOwnerMessage(gMessageSystem, "estateobjectreturn", invoice, strings); 1097 sendEstateOwnerMessage(gMessageSystem, "estateobjectreturn", invoice, strings);
1098 } 1098 }
1099 else 1099 else
1100 { 1100 {
1101 // send to this simulator only 1101 // send to this simulator only
1102 send_sim_wide_deletes(target_avatar, flags); 1102 send_sim_wide_deletes(target_avatar, flags);
1103 } 1103 }
1104 } 1104 }
1105 return false; 1105 return false;
1106} 1106}
1107 1107
1108 1108
1109// static 1109// static
1110void LLPanelRegionDebugInfo::onClickTopColliders(void* data) 1110void LLPanelRegionDebugInfo::onClickTopColliders(void* data)
1111{ 1111{
1112 LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data; 1112 LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data;
1113 strings_t strings; 1113 strings_t strings;
1114 strings.push_back("1"); // one physics step 1114 strings.push_back("1"); // one physics step
1115 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1115 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1116 LLFloaterTopObjects::show(); 1116 LLFloaterTopObjects::show();
1117 LLFloaterTopObjects::clearList(); 1117 LLFloaterTopObjects::clearList();
1118 self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings); 1118 self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings);
1119} 1119}
1120 1120
1121// static 1121// static
1122void LLPanelRegionDebugInfo::onClickTopScripts(void* data) 1122void LLPanelRegionDebugInfo::onClickTopScripts(void* data)
1123{ 1123{
1124 LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data; 1124 LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data;
1125 strings_t strings; 1125 strings_t strings;
1126 strings.push_back("6"); // top 5 scripts 1126 strings.push_back("6"); // top 5 scripts
1127 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1127 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1128 LLFloaterTopObjects::show(); 1128 LLFloaterTopObjects::show();
1129 LLFloaterTopObjects::clearList(); 1129 LLFloaterTopObjects::clearList();
1130 self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings); 1130 self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings);
1131} 1131}
1132 1132
1133// static 1133// static
1134void LLPanelRegionDebugInfo::onClickRestart(void* data) 1134void LLPanelRegionDebugInfo::onClickRestart(void* data)
1135{ 1135{
1136 LLNotifications::instance().add("ConfirmRestart", LLSD(), LLSD(), 1136 LLNotifications::instance().add("ConfirmRestart", LLSD(), LLSD(),
1137 boost::bind(&LLPanelRegionDebugInfo::callbackRestart, (LLPanelRegionDebugInfo*)data, _1, _2)); 1137 boost::bind(&LLPanelRegionDebugInfo::callbackRestart, (LLPanelRegionDebugInfo*)data, _1, _2));
1138} 1138}
1139 1139
1140bool LLPanelRegionDebugInfo::callbackRestart(const LLSD& notification, const LLSD& response) 1140bool LLPanelRegionDebugInfo::callbackRestart(const LLSD& notification, const LLSD& response)
1141{ 1141{
1142 S32 option = LLNotification::getSelectedOption(notification, response); 1142 S32 option = LLNotification::getSelectedOption(notification, response);
1143 if (option != 0) return false; 1143 if (option != 0) return false;
1144 1144
1145 strings_t strings; 1145 strings_t strings;
1146 strings.push_back("120"); 1146 strings.push_back("120");
1147 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1147 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1148 sendEstateOwnerMessage(gMessageSystem, "restart", invoice, strings); 1148 sendEstateOwnerMessage(gMessageSystem, "restart", invoice, strings);
1149 return false; 1149 return false;
1150} 1150}
1151 1151
1152// static 1152// static
1153void LLPanelRegionDebugInfo::onClickCancelRestart(void* data) 1153void LLPanelRegionDebugInfo::onClickCancelRestart(void* data)
1154{ 1154{
1155 LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data; 1155 LLPanelRegionDebugInfo* self = (LLPanelRegionDebugInfo*)data;
1156 strings_t strings; 1156 strings_t strings;
1157 strings.push_back("-1"); 1157 strings.push_back("-1");
1158 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1158 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1159 self->sendEstateOwnerMessage(gMessageSystem, "restart", invoice, strings); 1159 self->sendEstateOwnerMessage(gMessageSystem, "restart", invoice, strings);
1160} 1160}
1161 1161
1162 1162
1163///////////////////////////////////////////////////////////////////////////// 1163/////////////////////////////////////////////////////////////////////////////
1164// LLPanelRegionTextureInfo 1164// LLPanelRegionTextureInfo
1165// 1165//
1166LLPanelRegionTextureInfo::LLPanelRegionTextureInfo() : LLPanelRegionInfo() 1166LLPanelRegionTextureInfo::LLPanelRegionTextureInfo() : LLPanelRegionInfo()
1167{ 1167{
1168 // nothing. 1168 // nothing.
1169} 1169}
1170 1170
1171bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region) 1171bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region)
1172{ 1172{
1173 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); 1173 BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
1174 setCtrlsEnabled(allow_modify); 1174 setCtrlsEnabled(allow_modify);
1175 childDisable("apply_btn"); 1175 childDisable("apply_btn");
1176 1176
1177 if (region) 1177 if (region)
1178 { 1178 {
1179 childSetValue("region_text", LLSD(region->getName())); 1179 childSetValue("region_text", LLSD(region->getName()));
1180 } 1180 }
1181 else 1181 else
1182 { 1182 {
1183 childSetValue("region_text", LLSD("")); 1183 childSetValue("region_text", LLSD(""));
1184 } 1184 }
1185 1185
1186 if (!region) return LLPanelRegionInfo::refreshFromRegion(region); 1186 if (!region) return LLPanelRegionInfo::refreshFromRegion(region);
1187 1187
1188 LLVLComposition* compp = region->getComposition(); 1188 LLVLComposition* compp = region->getComposition();
1189 LLTextureCtrl* texture_ctrl; 1189 LLTextureCtrl* texture_ctrl;
1190 std::string buffer; 1190 std::string buffer;
1191 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i) 1191 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
1192 { 1192 {
1193 buffer = llformat("texture_detail_%d", i); 1193 buffer = llformat("texture_detail_%d", i);
1194 texture_ctrl = getChild<LLTextureCtrl>(buffer); 1194 texture_ctrl = getChild<LLTextureCtrl>(buffer);
1195 if(texture_ctrl) 1195 if(texture_ctrl)
1196 { 1196 {
1197 lldebugs << "Detail Texture " << i << ": " 1197 lldebugs << "Detail Texture " << i << ": "
1198 << compp->getDetailTextureID(i) << llendl; 1198 << compp->getDetailTextureID(i) << llendl;
1199 LLUUID tmp_id(compp->getDetailTextureID(i)); 1199 LLUUID tmp_id(compp->getDetailTextureID(i));
1200 texture_ctrl->setImageAssetID(tmp_id); 1200 texture_ctrl->setImageAssetID(tmp_id);
1201 } 1201 }
1202 } 1202 }
1203 1203
1204 for(S32 i = 0; i < CORNER_COUNT; ++i) 1204 for(S32 i = 0; i < CORNER_COUNT; ++i)
1205 { 1205 {
1206 buffer = llformat("height_start_spin_%d", i); 1206 buffer = llformat("height_start_spin_%d", i);
1207 childSetValue(buffer, LLSD(compp->getStartHeight(i))); 1207 childSetValue(buffer, LLSD(compp->getStartHeight(i)));
1208 buffer = llformat("height_range_spin_%d", i); 1208 buffer = llformat("height_range_spin_%d", i);
1209 childSetValue(buffer, LLSD(compp->getHeightRange(i))); 1209 childSetValue(buffer, LLSD(compp->getHeightRange(i)));
1210 } 1210 }
1211 1211
1212 // Call the parent for common book-keeping 1212 // Call the parent for common book-keeping
1213 return LLPanelRegionInfo::refreshFromRegion(region); 1213 return LLPanelRegionInfo::refreshFromRegion(region);
1214} 1214}
1215 1215
1216 1216
1217BOOL LLPanelRegionTextureInfo::postBuild() 1217BOOL LLPanelRegionTextureInfo::postBuild()
1218{ 1218{
1219 LLPanelRegionInfo::postBuild(); 1219 LLPanelRegionInfo::postBuild();
1220 std::string buffer; 1220 std::string buffer;
1221 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i) 1221 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
1222 { 1222 {
1223 buffer = llformat("texture_detail_%d", i); 1223 buffer = llformat("texture_detail_%d", i);
1224 initCtrl(buffer); 1224 initCtrl(buffer);
1225 } 1225 }
1226 1226
1227 for(S32 i = 0; i < CORNER_COUNT; ++i) 1227 for(S32 i = 0; i < CORNER_COUNT; ++i)
1228 { 1228 {
1229 buffer = llformat("height_start_spin_%d", i); 1229 buffer = llformat("height_start_spin_%d", i);
1230 initCtrl(buffer); 1230 initCtrl(buffer);
1231 buffer = llformat("height_range_spin_%d", i); 1231 buffer = llformat("height_range_spin_%d", i);
1232 initCtrl(buffer); 1232 initCtrl(buffer);
1233 } 1233 }
1234 1234
1235// LLButton* btn = new LLButton("dump", LLRect(0, 20, 100, 0), "", onClickDump, this); 1235// LLButton* btn = new LLButton("dump", LLRect(0, 20, 100, 0), "", onClickDump, this);
1236// btn->setFollows(FOLLOWS_TOP|FOLLOWS_LEFT); 1236// btn->setFollows(FOLLOWS_TOP|FOLLOWS_LEFT);
1237// addChild(btn); 1237// addChild(btn);
1238 1238
1239 return LLPanelRegionInfo::postBuild(); 1239 return LLPanelRegionInfo::postBuild();
1240} 1240}
1241 1241
1242BOOL LLPanelRegionTextureInfo::sendUpdate() 1242BOOL LLPanelRegionTextureInfo::sendUpdate()
1243{ 1243{
1244 llinfos << "LLPanelRegionTextureInfo::sendUpdate()" << llendl; 1244 llinfos << "LLPanelRegionTextureInfo::sendUpdate()" << llendl;
1245 1245
1246 // Make sure user hasn't chosen wacky textures. 1246 // Make sure user hasn't chosen wacky textures.
1247 if (!validateTextureSizes()) 1247 //if (!validateTextureSizes())
1248 { 1248 //{
1249 return FALSE; 1249 // return FALSE;
1250 } 1250 //}
1251 1251
1252 LLTextureCtrl* texture_ctrl; 1252 LLTextureCtrl* texture_ctrl;
1253 std::string buffer; 1253 std::string buffer;
1254 std::string id_str; 1254 std::string id_str;
1255 LLMessageSystem* msg = gMessageSystem; 1255 LLMessageSystem* msg = gMessageSystem;
1256 strings_t strings; 1256 strings_t strings;
1257 1257
1258 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1258 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1259 1259
1260 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i) 1260 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
1261 { 1261 {
1262 buffer = llformat("texture_detail_%d", i); 1262 buffer = llformat("texture_detail_%d", i);
1263 texture_ctrl = getChild<LLTextureCtrl>(buffer); 1263 texture_ctrl = getChild<LLTextureCtrl>(buffer);
1264 if(texture_ctrl) 1264 if(texture_ctrl)
1265 { 1265 {
1266 LLUUID tmp_id(texture_ctrl->getImageAssetID()); 1266 LLUUID tmp_id(texture_ctrl->getImageAssetID());
1267 tmp_id.toString(id_str); 1267 tmp_id.toString(id_str);
1268 buffer = llformat("%d %s", i, id_str.c_str()); 1268 buffer = llformat("%d %s", i, id_str.c_str());
1269 strings.push_back(buffer); 1269 strings.push_back(buffer);
1270 } 1270 }
1271 } 1271 }
1272 sendEstateOwnerMessage(msg, "texturedetail", invoice, strings); 1272 sendEstateOwnerMessage(msg, "texturedetail", invoice, strings);
1273 strings.clear(); 1273 strings.clear();
1274 for(S32 i = 0; i < CORNER_COUNT; ++i) 1274 for(S32 i = 0; i < CORNER_COUNT; ++i)
1275 { 1275 {
1276 buffer = llformat("height_start_spin_%d", i); 1276 buffer = llformat("height_start_spin_%d", i);
1277 std::string buffer2 = llformat("height_range_spin_%d", i); 1277 std::string buffer2 = llformat("height_range_spin_%d", i);
1278 std::string buffer3 = llformat("%d %f %f", i, (F32)childGetValue(buffer).asReal(), (F32)childGetValue(buffer2).asReal()); 1278 std::string buffer3 = llformat("%d %f %f", i, (F32)childGetValue(buffer).asReal(), (F32)childGetValue(buffer2).asReal());
1279 strings.push_back(buffer3); 1279 strings.push_back(buffer3);
1280 } 1280 }
1281 sendEstateOwnerMessage(msg, "textureheights", invoice, strings); 1281 sendEstateOwnerMessage(msg, "textureheights", invoice, strings);
1282 strings.clear(); 1282 strings.clear();
1283 sendEstateOwnerMessage(msg, "texturecommit", invoice, strings); 1283 sendEstateOwnerMessage(msg, "texturecommit", invoice, strings);
1284 return TRUE; 1284 return TRUE;
1285} 1285}
1286 1286
1287BOOL LLPanelRegionTextureInfo::validateTextureSizes() 1287BOOL LLPanelRegionTextureInfo::validateTextureSizes()
1288{ 1288{
1289 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i) 1289 for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
1290 { 1290 {
1291 std::string buffer; 1291 std::string buffer;
1292 buffer = llformat("texture_detail_%d", i); 1292 buffer = llformat("texture_detail_%d", i);
1293 LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>(buffer); 1293 LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>(buffer);
1294 if (!texture_ctrl) continue; 1294 if (!texture_ctrl) continue;
1295 1295
1296 LLUUID image_asset_id = texture_ctrl->getImageAssetID(); 1296 LLUUID image_asset_id = texture_ctrl->getImageAssetID();
1297 LLViewerImage* img = gImageList.getImage(image_asset_id); 1297 LLViewerImage* img = gImageList.getImage(image_asset_id);
1298 S32 components = img->getComponents(); 1298 S32 components = img->getComponents();
1299 // Must ask for highest resolution version's width. JC 1299 // Must ask for highest resolution version's width. JC
1300 S32 width = img->getWidth(0); 1300 S32 width = img->getWidth(0);
1301 S32 height = img->getHeight(0); 1301 S32 height = img->getHeight(0);
1302 1302
1303 //llinfos << "texture detail " << i << " is " << width << "x" << height << "x" << components << llendl; 1303 //llinfos << "texture detail " << i << " is " << width << "x" << height << "x" << components << llendl;
1304 1304
1305 if (components != 3) 1305 if (components != 3)
1306 { 1306 {
1307 LLSD args; 1307 LLSD args;
1308 args["TEXTURE_NUM"] = i+1; 1308 args["TEXTURE_NUM"] = i+1;
1309 args["TEXTURE_BIT_DEPTH"] = llformat("%d",components * 8); 1309 args["TEXTURE_BIT_DEPTH"] = llformat("%d",components * 8);
1310 LLNotifications::instance().add("InvalidTerrainBitDepth", args); 1310 LLNotifications::instance().add("InvalidTerrainBitDepth", args);
1311 return FALSE; 1311 return FALSE;
1312 } 1312 }
1313 1313
1314 if (width > 512 || height > 512) 1314 if (width > 512 || height > 512)
1315 { 1315 {
1316 1316
1317 LLSD args; 1317 LLSD args;
1318 args["TEXTURE_NUM"] = i+1; 1318 args["TEXTURE_NUM"] = i+1;
1319 args["TEXTURE_SIZE_X"] = width; 1319 args["TEXTURE_SIZE_X"] = width;
1320 args["TEXTURE_SIZE_Y"] = height; 1320 args["TEXTURE_SIZE_Y"] = height;
1321 LLNotifications::instance().add("InvalidTerrainSize", args); 1321 LLNotifications::instance().add("InvalidTerrainSize", args);
1322 return FALSE; 1322 return FALSE;
1323 1323
1324 } 1324 }
1325 } 1325 }
1326 1326
1327 return TRUE; 1327 return TRUE;
1328} 1328}
1329 1329
1330 1330
1331// static 1331// static
1332void LLPanelRegionTextureInfo::onClickDump(void* data) 1332void LLPanelRegionTextureInfo::onClickDump(void* data)
1333{ 1333{
1334 llinfos << "LLPanelRegionTextureInfo::onClickDump()" << llendl; 1334 llinfos << "LLPanelRegionTextureInfo::onClickDump()" << llendl;
1335} 1335}
1336 1336
1337 1337
1338///////////////////////////////////////////////////////////////////////////// 1338/////////////////////////////////////////////////////////////////////////////
1339// LLPanelRegionTerrainInfo 1339// LLPanelRegionTerrainInfo
1340///////////////////////////////////////////////////////////////////////////// 1340/////////////////////////////////////////////////////////////////////////////
1341BOOL LLPanelRegionTerrainInfo::postBuild() 1341BOOL LLPanelRegionTerrainInfo::postBuild()
1342{ 1342{
1343 LLPanelRegionInfo::postBuild(); 1343 LLPanelRegionInfo::postBuild();
1344 1344
1345 initHelpBtn("water_height_help", "HelpRegionWaterHeight"); 1345 initHelpBtn("water_height_help", "HelpRegionWaterHeight");
1346 initHelpBtn("terrain_raise_help", "HelpRegionTerrainRaise"); 1346 initHelpBtn("terrain_raise_help", "HelpRegionTerrainRaise");
1347 initHelpBtn("terrain_lower_help", "HelpRegionTerrainLower"); 1347 initHelpBtn("terrain_lower_help", "HelpRegionTerrainLower");
1348 initHelpBtn("upload_raw_help", "HelpRegionUploadRaw"); 1348 initHelpBtn("upload_raw_help", "HelpRegionUploadRaw");
1349 initHelpBtn("download_raw_help", "HelpRegionDownloadRaw"); 1349 initHelpBtn("download_raw_help", "HelpRegionDownloadRaw");
1350 initHelpBtn("use_estate_sun_help", "HelpRegionUseEstateSun"); 1350 initHelpBtn("use_estate_sun_help", "HelpRegionUseEstateSun");
1351 initHelpBtn("fixed_sun_help", "HelpRegionFixedSun"); 1351 initHelpBtn("fixed_sun_help", "HelpRegionFixedSun");
1352 initHelpBtn("bake_terrain_help", "HelpRegionBakeTerrain"); 1352 initHelpBtn("bake_terrain_help", "HelpRegionBakeTerrain");
1353 1353
1354 initCtrl("water_height_spin"); 1354 initCtrl("water_height_spin");
1355 initCtrl("terrain_raise_spin"); 1355 initCtrl("terrain_raise_spin");
1356 initCtrl("terrain_lower_spin"); 1356 initCtrl("terrain_lower_spin");
1357 1357
1358 initCtrl("fixed_sun_check"); 1358 initCtrl("fixed_sun_check");
1359 childSetCommitCallback("fixed_sun_check", onChangeFixedSun, this); 1359 childSetCommitCallback("fixed_sun_check", onChangeFixedSun, this);
1360 childSetCommitCallback("use_estate_sun_check", onChangeUseEstateTime, this); 1360 childSetCommitCallback("use_estate_sun_check", onChangeUseEstateTime, this);
1361 childSetCommitCallback("sun_hour_slider", onChangeSunHour, this); 1361 childSetCommitCallback("sun_hour_slider", onChangeSunHour, this);
1362 1362
1363 childSetAction("download_raw_btn", onClickDownloadRaw, this); 1363 childSetAction("download_raw_btn", onClickDownloadRaw, this);
1364 childSetAction("upload_raw_btn", onClickUploadRaw, this); 1364 childSetAction("upload_raw_btn", onClickUploadRaw, this);
1365 childSetAction("bake_terrain_btn", onClickBakeTerrain, this); 1365 childSetAction("bake_terrain_btn", onClickBakeTerrain, this);
1366 1366
1367 return TRUE; 1367 return TRUE;
1368} 1368}
1369 1369
1370// virtual 1370// virtual
1371bool LLPanelRegionTerrainInfo::refreshFromRegion(LLViewerRegion* region) 1371bool LLPanelRegionTerrainInfo::refreshFromRegion(LLViewerRegion* region)
1372{ 1372{
1373 llinfos << "LLPanelRegionTerrainInfo::refreshFromRegion" << llendl; 1373 llinfos << "LLPanelRegionTerrainInfo::refreshFromRegion" << llendl;
1374 1374
1375 BOOL owner_or_god = gAgent.isGodlike() 1375 BOOL owner_or_god = gAgent.isGodlike()
1376 || (region && (region->getOwner() == gAgent.getID())); 1376 || (region && (region->getOwner() == gAgent.getID()));
1377 BOOL owner_or_god_or_manager = owner_or_god 1377 BOOL owner_or_god_or_manager = owner_or_god
1378 || (region && region->isEstateManager()); 1378 || (region && region->isEstateManager());
1379 setCtrlsEnabled(owner_or_god_or_manager); 1379 setCtrlsEnabled(owner_or_god_or_manager);
1380 childDisable("apply_btn"); 1380 childDisable("apply_btn");
1381 1381
1382 childSetEnabled("download_raw_btn", owner_or_god); 1382 childSetEnabled("download_raw_btn", owner_or_god);
1383 childSetEnabled("upload_raw_btn", owner_or_god); 1383 childSetEnabled("upload_raw_btn", owner_or_god);
1384 childSetEnabled("bake_terrain_btn", owner_or_god); 1384 childSetEnabled("bake_terrain_btn", owner_or_god);
1385 1385
1386 return LLPanelRegionInfo::refreshFromRegion(region); 1386 return LLPanelRegionInfo::refreshFromRegion(region);
1387} 1387}
1388 1388
1389// virtual 1389// virtual
1390BOOL LLPanelRegionTerrainInfo::sendUpdate() 1390BOOL LLPanelRegionTerrainInfo::sendUpdate()
1391{ 1391{
1392 llinfos << "LLPanelRegionTerrainInfo::sendUpdate" << llendl; 1392 llinfos << "LLPanelRegionTerrainInfo::sendUpdate" << llendl;
1393 std::string buffer; 1393 std::string buffer;
1394 strings_t strings; 1394 strings_t strings;
1395 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1395 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1396 1396
1397 buffer = llformat("%f", (F32)childGetValue("water_height_spin").asReal()); 1397 buffer = llformat("%f", (F32)childGetValue("water_height_spin").asReal());
1398 strings.push_back(buffer); 1398 strings.push_back(buffer);
1399 buffer = llformat("%f", (F32)childGetValue("terrain_raise_spin").asReal()); 1399 buffer = llformat("%f", (F32)childGetValue("terrain_raise_spin").asReal());
1400 strings.push_back(buffer); 1400 strings.push_back(buffer);
1401 buffer = llformat("%f", (F32)childGetValue("terrain_lower_spin").asReal()); 1401 buffer = llformat("%f", (F32)childGetValue("terrain_lower_spin").asReal());
1402 strings.push_back(buffer); 1402 strings.push_back(buffer);
1403 buffer = llformat("%s", (childGetValue("use_estate_sun_check").asBoolean() ? "Y" : "N")); 1403 buffer = llformat("%s", (childGetValue("use_estate_sun_check").asBoolean() ? "Y" : "N"));
1404 strings.push_back(buffer); 1404 strings.push_back(buffer);
1405 buffer = llformat("%s", (childGetValue("fixed_sun_check").asBoolean() ? "Y" : "N")); 1405 buffer = llformat("%s", (childGetValue("fixed_sun_check").asBoolean() ? "Y" : "N"));
1406 strings.push_back(buffer); 1406 strings.push_back(buffer);
1407 buffer = llformat("%f", (F32)childGetValue("sun_hour_slider").asReal() ); 1407 buffer = llformat("%f", (F32)childGetValue("sun_hour_slider").asReal() );
1408 strings.push_back(buffer); 1408 strings.push_back(buffer);
1409 1409
1410 // Grab estate information in case the user decided to set the 1410 // Grab estate information in case the user decided to set the
1411 // region back to estate time. JC 1411 // region back to estate time. JC
1412 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance(); 1412 LLFloaterRegionInfo* floater = LLFloaterRegionInfo::getInstance();
1413 if (!floater) return true; 1413 if (!floater) return true;
1414 1414
1415 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels"); 1415 LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
1416 if (!tab) return true; 1416 if (!tab) return true;
1417 1417
1418 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate"); 1418 LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate");
1419 if (!panel) return true; 1419 if (!panel) return true;
1420 1420
1421 BOOL estate_global_time = panel->getGlobalTime(); 1421 BOOL estate_global_time = panel->getGlobalTime();
1422 BOOL estate_fixed_sun = panel->getFixedSun(); 1422 BOOL estate_fixed_sun = panel->getFixedSun();
1423 F32 estate_sun_hour; 1423 F32 estate_sun_hour;
1424 if (estate_global_time) 1424 if (estate_global_time)
1425 { 1425 {
1426 estate_sun_hour = 0.f; 1426 estate_sun_hour = 0.f;
1427 } 1427 }
1428 else 1428 else
1429 { 1429 {
1430 estate_sun_hour = panel->getSunHour(); 1430 estate_sun_hour = panel->getSunHour();
1431 } 1431 }
1432 1432
1433 buffer = llformat("%s", (estate_global_time ? "Y" : "N") ); 1433 buffer = llformat("%s", (estate_global_time ? "Y" : "N") );
1434 strings.push_back(buffer); 1434 strings.push_back(buffer);
1435 buffer = llformat("%s", (estate_fixed_sun ? "Y" : "N") ); 1435 buffer = llformat("%s", (estate_fixed_sun ? "Y" : "N") );
1436 strings.push_back(buffer); 1436 strings.push_back(buffer);
1437 buffer = llformat("%f", estate_sun_hour); 1437 buffer = llformat("%f", estate_sun_hour);
1438 strings.push_back(buffer); 1438 strings.push_back(buffer);
1439 1439
1440 sendEstateOwnerMessage(gMessageSystem, "setregionterrain", invoice, strings); 1440 sendEstateOwnerMessage(gMessageSystem, "setregionterrain", invoice, strings);
1441 return TRUE; 1441 return TRUE;
1442} 1442}
1443 1443
1444// static 1444// static
1445void LLPanelRegionTerrainInfo::onChangeUseEstateTime(LLUICtrl* ctrl, void* user_data) 1445void LLPanelRegionTerrainInfo::onChangeUseEstateTime(LLUICtrl* ctrl, void* user_data)
1446{ 1446{
1447 LLPanelRegionTerrainInfo* panel = (LLPanelRegionTerrainInfo*) user_data; 1447 LLPanelRegionTerrainInfo* panel = (LLPanelRegionTerrainInfo*) user_data;
1448 if (!panel) return; 1448 if (!panel) return;
1449 BOOL use_estate_sun = panel->childGetValue("use_estate_sun_check").asBoolean(); 1449 BOOL use_estate_sun = panel->childGetValue("use_estate_sun_check").asBoolean();
1450 panel->childSetEnabled("fixed_sun_check", !use_estate_sun); 1450 panel->childSetEnabled("fixed_sun_check", !use_estate_sun);
1451 panel->childSetEnabled("sun_hour_slider", !use_estate_sun); 1451 panel->childSetEnabled("sun_hour_slider", !use_estate_sun);
1452 if (use_estate_sun) 1452 if (use_estate_sun)
1453 { 1453 {
1454 panel->childSetValue("fixed_sun_check", LLSD(FALSE)); 1454 panel->childSetValue("fixed_sun_check", LLSD(FALSE));
1455 panel->childSetValue("sun_hour_slider", LLSD(0.f)); 1455 panel->childSetValue("sun_hour_slider", LLSD(0.f));
1456 } 1456 }
1457 panel->childEnable("apply_btn"); 1457 panel->childEnable("apply_btn");
1458} 1458}
1459 1459
1460// static 1460// static
1461void LLPanelRegionTerrainInfo::onChangeFixedSun(LLUICtrl* ctrl, void* user_data) 1461void LLPanelRegionTerrainInfo::onChangeFixedSun(LLUICtrl* ctrl, void* user_data)
1462{ 1462{
1463 LLPanelRegionTerrainInfo* panel = (LLPanelRegionTerrainInfo*) user_data; 1463 LLPanelRegionTerrainInfo* panel = (LLPanelRegionTerrainInfo*) user_data;
1464 if (!panel) return; 1464 if (!panel) return;
1465 // Just enable the apply button. We let the sun-hour slider be enabled 1465 // Just enable the apply button. We let the sun-hour slider be enabled
1466 // for both fixed-sun and non-fixed-sun. JC 1466 // for both fixed-sun and non-fixed-sun. JC
1467 panel->childEnable("apply_btn"); 1467 panel->childEnable("apply_btn");
1468} 1468}
1469 1469
1470// static 1470// static
1471void LLPanelRegionTerrainInfo::onChangeSunHour(LLUICtrl* ctrl, void*) 1471void LLPanelRegionTerrainInfo::onChangeSunHour(LLUICtrl* ctrl, void*)
1472{ 1472{
1473 // can't use userdata to get panel, slider uses it internally 1473 // can't use userdata to get panel, slider uses it internally
1474 LLPanelRegionTerrainInfo* panel = (LLPanelRegionTerrainInfo*) ctrl->getParent(); 1474 LLPanelRegionTerrainInfo* panel = (LLPanelRegionTerrainInfo*) ctrl->getParent();
1475 if (!panel) return; 1475 if (!panel) return;
1476 panel->childEnable("apply_btn"); 1476 panel->childEnable("apply_btn");
1477} 1477}
1478 1478
1479// static 1479// static
1480void LLPanelRegionTerrainInfo::onClickDownloadRaw(void* data) 1480void LLPanelRegionTerrainInfo::onClickDownloadRaw(void* data)
1481{ 1481{
1482 LLFilePicker& picker = LLFilePicker::instance(); 1482 LLFilePicker& picker = LLFilePicker::instance();
1483 if (!picker.getSaveFile(LLFilePicker::FFSAVE_RAW, "terrain.raw")) 1483 if (!picker.getSaveFile(LLFilePicker::FFSAVE_RAW, "terrain.raw"))
1484 { 1484 {
1485 llwarns << "No file" << llendl; 1485 llwarns << "No file" << llendl;
1486 return; 1486 return;
1487 } 1487 }
1488 std::string filepath = picker.getFirstFile(); 1488 std::string filepath = picker.getFirstFile();
1489 gXferManager->expectFileForRequest(filepath); 1489 gXferManager->expectFileForRequest(filepath);
1490 1490
1491 LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data; 1491 LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data;
1492 strings_t strings; 1492 strings_t strings;
1493 strings.push_back("download filename"); 1493 strings.push_back("download filename");
1494 strings.push_back(filepath); 1494 strings.push_back(filepath);
1495 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1495 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1496 self->sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings); 1496 self->sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
1497} 1497}
1498 1498
1499// static 1499// static
1500void LLPanelRegionTerrainInfo::onClickUploadRaw(void* data) 1500void LLPanelRegionTerrainInfo::onClickUploadRaw(void* data)
1501{ 1501{
1502 LLFilePicker& picker = LLFilePicker::instance(); 1502 LLFilePicker& picker = LLFilePicker::instance();
1503 if (!picker.getOpenFile(LLFilePicker::FFLOAD_RAW)) 1503 if (!picker.getOpenFile(LLFilePicker::FFLOAD_RAW))
1504 { 1504 {
1505 llwarns << "No file" << llendl; 1505 llwarns << "No file" << llendl;
1506 return; 1506 return;
1507 } 1507 }
1508 std::string filepath = picker.getFirstFile(); 1508 std::string filepath = picker.getFirstFile();
1509 gXferManager->expectFileForTransfer(filepath); 1509 gXferManager->expectFileForTransfer(filepath);
1510 1510
1511 LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data; 1511 LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data;
1512 strings_t strings; 1512 strings_t strings;
1513 strings.push_back("upload filename"); 1513 strings.push_back("upload filename");
1514 strings.push_back(filepath); 1514 strings.push_back(filepath);
1515 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1515 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1516 self->sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings); 1516 self->sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
1517 1517
1518 LLNotifications::instance().add("RawUploadStarted"); 1518 LLNotifications::instance().add("RawUploadStarted");
1519} 1519}
1520 1520
1521// static 1521// static
1522void LLPanelRegionTerrainInfo::onClickBakeTerrain(void* data) 1522void LLPanelRegionTerrainInfo::onClickBakeTerrain(void* data)
1523{ 1523{
1524 LLNotifications::instance().add( 1524 LLNotifications::instance().add(
1525 LLNotification::Params("ConfirmBakeTerrain") 1525 LLNotification::Params("ConfirmBakeTerrain")
1526 .functor(boost::bind(&LLPanelRegionTerrainInfo::callbackBakeTerrain, (LLPanelRegionTerrainInfo*)data, _1, _2))); 1526 .functor(boost::bind(&LLPanelRegionTerrainInfo::callbackBakeTerrain, (LLPanelRegionTerrainInfo*)data, _1, _2)));
1527} 1527}
1528 1528
1529bool LLPanelRegionTerrainInfo::callbackBakeTerrain(const LLSD& notification, const LLSD& response) 1529bool LLPanelRegionTerrainInfo::callbackBakeTerrain(const LLSD& notification, const LLSD& response)
1530{ 1530{
1531 S32 option = LLNotification::getSelectedOption(notification, response); 1531 S32 option = LLNotification::getSelectedOption(notification, response);
1532 if (option != 0) return false; 1532 if (option != 0) return false;
1533 1533
1534 strings_t strings; 1534 strings_t strings;
1535 strings.push_back("bake"); 1535 strings.push_back("bake");
1536 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 1536 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
1537 sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings); 1537 sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
1538 return false; 1538 return false;
1539} 1539}
1540 1540
1541///////////////////////////////////////////////////////////////////////////// 1541/////////////////////////////////////////////////////////////////////////////
1542// LLPanelEstateInfo 1542// LLPanelEstateInfo
1543// 1543//
1544 1544
1545LLPanelEstateInfo::LLPanelEstateInfo() 1545LLPanelEstateInfo::LLPanelEstateInfo()
1546: LLPanelRegionInfo(), 1546: LLPanelRegionInfo(),
1547 mEstateID(0) // invalid 1547 mEstateID(0) // invalid
1548{ 1548{
1549} 1549}
1550 1550
1551// static 1551// static
1552void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch) 1552void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch)
1553{ 1553{
1554 std::string name; 1554 std::string name;
1555 1555
1556// name.assign("setowner"); 1556// name.assign("setowner");
1557// static LLDispatchSetEstateOwner set_owner; 1557// static LLDispatchSetEstateOwner set_owner;
1558// dispatch.addHandler(name, &set_owner); 1558// dispatch.addHandler(name, &set_owner);
1559 1559
1560 name.assign("estateupdateinfo"); 1560 name.assign("estateupdateinfo");
1561 static LLDispatchEstateUpdateInfo estate_update_info; 1561 static LLDispatchEstateUpdateInfo estate_update_info;
1562 dispatch.addHandler(name, &estate_update_info); 1562 dispatch.addHandler(name, &estate_update_info);
1563 1563
1564 name.assign("setaccess"); 1564 name.assign("setaccess");
1565 static LLDispatchSetEstateAccess set_access; 1565 static LLDispatchSetEstateAccess set_access;
1566 dispatch.addHandler(name, &set_access); 1566 dispatch.addHandler(name, &set_access);
1567 1567
1568 estate_dispatch_initialized = true; 1568 estate_dispatch_initialized = true;
1569} 1569}
1570 1570
1571// static 1571// static
1572// Disables the sun-hour slider and the use fixed time check if the use global time is check 1572// Disables the sun-hour slider and the use fixed time check if the use global time is check
1573void LLPanelEstateInfo::onChangeUseGlobalTime(LLUICtrl* ctrl, void* user_data) 1573void LLPanelEstateInfo::onChangeUseGlobalTime(LLUICtrl* ctrl, void* user_data)
1574{ 1574{
1575 LLPanelEstateInfo* panel = (LLPanelEstateInfo*) user_data; 1575 LLPanelEstateInfo* panel = (LLPanelEstateInfo*) user_data;
1576 if (panel) 1576 if (panel)
1577 { 1577 {
1578 bool enabled = !panel->childGetValue("use_global_time_check").asBoolean(); 1578 bool enabled = !panel->childGetValue("use_global_time_check").asBoolean();
1579 panel->childSetEnabled("sun_hour_slider", enabled); 1579 panel->childSetEnabled("sun_hour_slider", enabled);
1580 panel->childSetEnabled("fixed_sun_check", enabled); 1580 panel->childSetEnabled("fixed_sun_check", enabled);
1581 panel->childSetValue("fixed_sun_check", LLSD(FALSE)); 1581 panel->childSetValue("fixed_sun_check", LLSD(FALSE));
1582 panel->enableButton("apply_btn"); 1582 panel->enableButton("apply_btn");
1583 } 1583 }
1584} 1584}
1585 1585
1586// Enables the sun-hour slider if the fixed-sun checkbox is set 1586// Enables the sun-hour slider if the fixed-sun checkbox is set
1587void LLPanelEstateInfo::onChangeFixedSun(LLUICtrl* ctrl, void* user_data) 1587void LLPanelEstateInfo::onChangeFixedSun(LLUICtrl* ctrl, void* user_data)
1588{ 1588{
1589 LLPanelEstateInfo* panel = (LLPanelEstateInfo*) user_data; 1589 LLPanelEstateInfo* panel = (LLPanelEstateInfo*) user_data;
1590 if (panel) 1590 if (panel)
1591 { 1591 {
1592 bool enabled = !panel->childGetValue("fixed_sun_check").asBoolean(); 1592 bool enabled = !panel->childGetValue("fixed_sun_check").asBoolean();
1593 panel->childSetEnabled("use_global_time_check", enabled); 1593 panel->childSetEnabled("use_global_time_check", enabled);
1594 panel->childSetValue("use_global_time_check", LLSD(FALSE)); 1594 panel->childSetValue("use_global_time_check", LLSD(FALSE));
1595 panel->enableButton("apply_btn"); 1595 panel->enableButton("apply_btn");
1596 } 1596 }
1597} 1597}
1598 1598
1599 1599
1600 1600
1601 1601
1602//--------------------------------------------------------------------------- 1602//---------------------------------------------------------------------------
1603// Add/Remove estate access button callbacks 1603// Add/Remove estate access button callbacks
1604//--------------------------------------------------------------------------- 1604//---------------------------------------------------------------------------
1605void LLPanelEstateInfo::onClickEditSky(void* user_data) 1605void LLPanelEstateInfo::onClickEditSky(void* user_data)
1606{ 1606{
1607 LLFloaterWindLight::show(); 1607 LLFloaterWindLight::show();
1608} 1608}
1609 1609
1610void LLPanelEstateInfo::onClickEditDayCycle(void* user_data) 1610void LLPanelEstateInfo::onClickEditDayCycle(void* user_data)
1611{ 1611{
1612 LLFloaterDayCycle::show(); 1612 LLFloaterDayCycle::show();
1613} 1613}
1614 1614
1615// static 1615// static
1616void LLPanelEstateInfo::onClickAddAllowedAgent(void* user_data) 1616void LLPanelEstateInfo::onClickAddAllowedAgent(void* user_data)
1617{ 1617{
1618 LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data; 1618 LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data;
1619 LLCtrlListInterface *list = self->childGetListInterface("allowed_avatar_name_list"); 1619 LLCtrlListInterface *list = self->childGetListInterface("allowed_avatar_name_list");
1620 if (!list) return; 1620 if (!list) return;
1621 if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) 1621 if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
1622 { 1622 {
1623 //args 1623 //args
1624 1624
1625 LLSD args; 1625 LLSD args;
1626 args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); 1626 args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
1627 LLNotifications::instance().add("MaxAllowedAgentOnRegion", args); 1627 LLNotifications::instance().add("MaxAllowedAgentOnRegion", args);
1628 return; 1628 return;
1629 } 1629 }
1630 accessAddCore(ESTATE_ACCESS_ALLOWED_AGENT_ADD, "EstateAllowedAgentAdd"); 1630 accessAddCore(ESTATE_ACCESS_ALLOWED_AGENT_ADD, "EstateAllowedAgentAdd");
1631} 1631}
1632 1632
1633// static 1633// static
1634void LLPanelEstateInfo::onClickRemoveAllowedAgent(void* user_data) 1634void LLPanelEstateInfo::onClickRemoveAllowedAgent(void* user_data)
1635{ 1635{
1636 accessRemoveCore(ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, "EstateAllowedAgentRemove", "allowed_avatar_name_list"); 1636 accessRemoveCore(ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, "EstateAllowedAgentRemove", "allowed_avatar_name_list");
1637} 1637}
1638 1638
1639// static 1639// static
1640void LLPanelEstateInfo::onClickAddAllowedGroup(void* user_data) 1640void LLPanelEstateInfo::onClickAddAllowedGroup(void* user_data)
1641{ 1641{
1642 LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data; 1642 LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data;
1643 LLCtrlListInterface *list = self->childGetListInterface("allowed_group_name_list"); 1643 LLCtrlListInterface *list = self->childGetListInterface("allowed_group_name_list");
1644 if (!list) return; 1644 if (!list) return;
1645 if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) 1645 if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
1646 { 1646 {
1647 LLSD args; 1647 LLSD args;
1648 args["MAX_GROUPS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); 1648 args["MAX_GROUPS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
1649 LLNotifications::instance().add("MaxAllowedGroupsOnRegion", args); 1649 LLNotifications::instance().add("MaxAllowedGroupsOnRegion", args);
1650 return; 1650 return;
1651 } 1651 }
1652 1652
1653 LLNotification::Params params("ChangeLindenAccess"); 1653 LLNotification::Params params("ChangeLindenAccess");
1654 params.functor(boost::bind(&LLPanelEstateInfo::addAllowedGroup, self, _1, _2)); 1654 params.functor(boost::bind(&LLPanelEstateInfo::addAllowedGroup, self, _1, _2));
1655 if (isLindenEstate()) 1655 if (isLindenEstate())
1656 { 1656 {
1657 LLNotifications::instance().add(params); 1657 LLNotifications::instance().add(params);
1658 } 1658 }
1659 else 1659 else
1660 { 1660 {
1661 LLNotifications::instance().forceResponse(params, 0); 1661 LLNotifications::instance().forceResponse(params, 0);
1662 } 1662 }
1663} 1663}
1664 1664
1665bool LLPanelEstateInfo::addAllowedGroup(const LLSD& notification, const LLSD& response) 1665bool LLPanelEstateInfo::addAllowedGroup(const LLSD& notification, const LLSD& response)
1666{ 1666{
1667 S32 option = LLNotification::getSelectedOption(notification, response); 1667 S32 option = LLNotification::getSelectedOption(notification, response);
1668 if (option != 0) return false; 1668 if (option != 0) return false;
1669 1669
1670 LLFloater* parent_floater = gFloaterView->getParentFloater(this); 1670 LLFloater* parent_floater = gFloaterView->getParentFloater(this);
1671 1671
1672 LLFloaterGroupPicker* widget; 1672 LLFloaterGroupPicker* widget;
1673 widget = LLFloaterGroupPicker::showInstance(LLSD(gAgent.getID())); 1673 widget = LLFloaterGroupPicker::showInstance(LLSD(gAgent.getID()));
1674 if (widget) 1674 if (widget)
1675 { 1675 {
1676 widget->setSelectCallback(addAllowedGroup2, NULL); 1676 widget->setSelectCallback(addAllowedGroup2, NULL);
1677 if (parent_floater) 1677 if (parent_floater)
1678 { 1678 {
1679 LLRect new_rect = gFloaterView->findNeighboringPosition(parent_floater, widget); 1679 LLRect new_rect = gFloaterView->findNeighboringPosition(parent_floater, widget);
1680 widget->setOrigin(new_rect.mLeft, new_rect.mBottom); 1680 widget->setOrigin(new_rect.mLeft, new_rect.mBottom);
1681 parent_floater->addDependentFloater(widget); 1681 parent_floater->addDependentFloater(widget);
1682 } 1682 }
1683 } 1683 }
1684 1684
1685 return false; 1685 return false;
1686} 1686}
1687 1687
1688// static 1688// static
1689void LLPanelEstateInfo::onClickRemoveAllowedGroup(void* user_data) 1689void LLPanelEstateInfo::onClickRemoveAllowedGroup(void* user_data)
1690{ 1690{
1691 accessRemoveCore(ESTATE_ACCESS_ALLOWED_GROUP_REMOVE, "EstateAllowedGroupRemove", "allowed_group_name_list"); 1691 accessRemoveCore(ESTATE_ACCESS_ALLOWED_GROUP_REMOVE, "EstateAllowedGroupRemove", "allowed_group_name_list");
1692} 1692}
1693 1693
1694// static 1694// static
1695void LLPanelEstateInfo::onClickAddBannedAgent(void* user_data) 1695void LLPanelEstateInfo::onClickAddBannedAgent(void* user_data)
1696{ 1696{
1697 LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data; 1697 LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data;
1698 LLCtrlListInterface *list = self->childGetListInterface("banned_avatar_name_list"); 1698 LLCtrlListInterface *list = self->childGetListInterface("banned_avatar_name_list");
1699 if (!list) return; 1699 if (!list) return;
1700 if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS) 1700 if (list->getItemCount() >= ESTATE_MAX_ACCESS_IDS)
1701 { 1701 {
1702 LLSD args; 1702 LLSD args;
1703 args["MAX_BANNED"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); 1703 args["MAX_BANNED"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
1704 LLNotifications::instance().add("MaxBannedAgentsOnRegion", args); 1704 LLNotifications::instance().add("MaxBannedAgentsOnRegion", args);
1705 return; 1705 return;
1706 } 1706 }
1707 accessAddCore(ESTATE_ACCESS_BANNED_AGENT_ADD, "EstateBannedAgentAdd"); 1707 accessAddCore(ESTATE_ACCESS_BANNED_AGENT_ADD, "EstateBannedAgentAdd");
1708} 1708}
1709 1709
1710// static 1710// static
1711void LLPanelEstateInfo::onClickRemoveBannedAgent(void* user_data) 1711void LLPanelEstateInfo::onClickRemoveBannedAgent(void* user_data)
1712{ 1712{
1713 accessRemoveCore(ESTATE_ACCESS_BANNED_AGENT_REMOVE, "EstateBannedAgentRemove", "banned_avatar_name_list"); 1713 accessRemoveCore(ESTATE_ACCESS_BANNED_AGENT_REMOVE, "EstateBannedAgentRemove", "banned_avatar_name_list");
1714} 1714}
1715 1715
1716// static 1716// static
1717void LLPanelEstateInfo::onClickAddEstateManager(void* user_data) 1717void LLPanelEstateInfo::onClickAddEstateManager(void* user_data)
1718{ 1718{
1719 LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data; 1719 LLPanelEstateInfo* self = (LLPanelEstateInfo*)user_data;
1720 LLCtrlListInterface *list = self->childGetListInterface("estate_manager_name_list"); 1720 LLCtrlListInterface *list = self->childGetListInterface("estate_manager_name_list");
1721 if (!list) return; 1721 if (!list) return;
1722 if (list->getItemCount() >= ESTATE_MAX_MANAGERS) 1722 if (list->getItemCount() >= ESTATE_MAX_MANAGERS)
1723 { // Tell user they can't add more managers 1723 { // Tell user they can't add more managers
1724 LLSD args; 1724 LLSD args;
1725 args["MAX_MANAGER"] = llformat("%d",ESTATE_MAX_MANAGERS); 1725 args["MAX_MANAGER"] = llformat("%d",ESTATE_MAX_MANAGERS);
1726 LLNotifications::instance().add("MaxManagersOnRegion", args); 1726 LLNotifications::instance().add("MaxManagersOnRegion", args);
1727 } 1727 }
1728 else 1728 else
1729 { // Go pick managers to add 1729 { // Go pick managers to add
1730 accessAddCore(ESTATE_ACCESS_MANAGER_ADD, "EstateManagerAdd"); 1730 accessAddCore(ESTATE_ACCESS_MANAGER_ADD, "EstateManagerAdd");
1731 } 1731 }
1732} 1732}
1733 1733
1734// static 1734// static
1735void LLPanelEstateInfo::onClickRemoveEstateManager(void* user_data) 1735void LLPanelEstateInfo::onClickRemoveEstateManager(void* user_data)
1736{ 1736{
1737 accessRemoveCore(ESTATE_ACCESS_MANAGER_REMOVE, "EstateManagerRemove", "estate_manager_name_list"); 1737 accessRemoveCore(ESTATE_ACCESS_MANAGER_REMOVE, "EstateManagerRemove", "estate_manager_name_list");
1738} 1738}
1739 1739
1740//--------------------------------------------------------------------------- 1740//---------------------------------------------------------------------------
1741// Kick from estate methods 1741// Kick from estate methods
1742//--------------------------------------------------------------------------- 1742//---------------------------------------------------------------------------
1743struct LLKickFromEstateInfo 1743struct LLKickFromEstateInfo
1744{ 1744{
1745 LLPanelEstateInfo *mEstatePanelp; 1745 LLPanelEstateInfo *mEstatePanelp;
1746 LLUUID mAgentID; 1746 LLUUID mAgentID;
1747}; 1747};
1748 1748
1749void LLPanelEstateInfo::onClickKickUser(void *user_data) 1749void LLPanelEstateInfo::onClickKickUser(void *user_data)
1750{ 1750{
1751 LLPanelEstateInfo* panelp = (LLPanelEstateInfo*)user_data; 1751 LLPanelEstateInfo* panelp = (LLPanelEstateInfo*)user_data;
1752 1752
1753 // this depends on the grandparent view being a floater 1753 // this depends on the grandparent view being a floater
1754 // in order to set up floater dependency 1754 // in order to set up floater dependency
1755 LLFloater* parent_floater = gFloaterView->getParentFloater(panelp); 1755 LLFloater* parent_floater = gFloaterView->getParentFloater(panelp);
1756 LLFloater* child_floater = LLFloaterAvatarPicker::show(LLPanelEstateInfo::onKickUserCommit, user_data, FALSE, TRUE); 1756 LLFloater* child_floater = LLFloaterAvatarPicker::show(LLPanelEstateInfo::onKickUserCommit, user_data, FALSE, TRUE);
1757 parent_floater->addDependentFloater(child_floater); 1757 parent_floater->addDependentFloater(child_floater);
1758} 1758}
1759 1759
1760void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata) 1760void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata)
1761{ 1761{
1762 if (names.empty() || ids.empty()) return; 1762 if (names.empty() || ids.empty()) return;
1763 1763
1764 //check to make sure there is one valid user and id 1764 //check to make sure there is one valid user and id
1765 if( (ids[0].isNull()) || 1765 if( (ids[0].isNull()) ||
1766 (names[0].length() == 0) ) 1766 (names[0].length() == 0) )
1767 { 1767 {
1768 return; 1768 return;
1769 } 1769 }
1770 1770
1771 LLPanelEstateInfo* self = (LLPanelEstateInfo*)userdata; 1771 LLPanelEstateInfo* self = (LLPanelEstateInfo*)userdata;
1772 if(!self) return; 1772 if(!self) return;
1773 1773
1774 //keep track of what user they want to kick and other misc info 1774 //keep track of what user they want to kick and other misc info
1775 LLKickFromEstateInfo *kick_info = new LLKickFromEstateInfo(); 1775 LLKickFromEstateInfo *kick_info = new LLKickFromEstateInfo();
1776 kick_info->mEstatePanelp = self; 1776 kick_info->mEstatePanelp = self;
1777 kick_info->mAgentID = ids[0]; 1777 kick_info->mAgentID = ids[0];
1778 1778
1779 //Bring up a confirmation dialog 1779 //Bring up a confirmation dialog
1780 LLSD args; 1780 LLSD args;
1781 args["EVIL_USER"] = names[0]; 1781 args["EVIL_USER"] = names[0];
1782 LLSD payload; 1782 LLSD payload;
1783 payload["agent_id"] = ids[0]; 1783 payload["agent_id"] = ids[0];
1784 LLNotifications::instance().add("EstateKickUser", args, payload, boost::bind(&LLPanelEstateInfo::kickUserConfirm, self, _1, _2)); 1784 LLNotifications::instance().add("EstateKickUser", args, payload, boost::bind(&LLPanelEstateInfo::kickUserConfirm, self, _1, _2));
1785 1785
1786} 1786}
1787 1787
1788bool LLPanelEstateInfo::kickUserConfirm(const LLSD& notification, const LLSD& response) 1788bool LLPanelEstateInfo::kickUserConfirm(const LLSD& notification, const LLSD& response)
1789{ 1789{
1790 S32 option = LLNotification::getSelectedOption(notification, response); 1790 S32 option = LLNotification::getSelectedOption(notification, response);
1791 switch(option) 1791 switch(option)
1792 { 1792 {
1793 case 0: 1793 case 0:
1794 { 1794 {
1795 //Kick User 1795 //Kick User
1796 strings_t strings; 1796 strings_t strings;
1797 strings.push_back(notification["payload"]["agent_id"].asString()); 1797 strings.push_back(notification["payload"]["agent_id"].asString());
1798 1798
1799 sendEstateOwnerMessage(gMessageSystem, "kickestate", LLFloaterRegionInfo::getLastInvoice(), strings); 1799 sendEstateOwnerMessage(gMessageSystem, "kickestate", LLFloaterRegionInfo::getLastInvoice(), strings);
1800 break; 1800 break;
1801 } 1801 }
1802 default: 1802 default:
1803 break; 1803 break;
1804 } 1804 }
1805 return false; 1805 return false;
1806} 1806}
1807 1807
1808//--------------------------------------------------------------------------- 1808//---------------------------------------------------------------------------
1809// Core Add/Remove estate access methods 1809// Core Add/Remove estate access methods
1810// TODO: INTERNATIONAL: don't build message text here; 1810// TODO: INTERNATIONAL: don't build message text here;
1811// instead, create multiple translatable messages and choose 1811// instead, create multiple translatable messages and choose
1812// one based on the status. 1812// one based on the status.
1813//--------------------------------------------------------------------------- 1813//---------------------------------------------------------------------------
1814std::string all_estates_text() 1814std::string all_estates_text()
1815{ 1815{
1816 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); 1816 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
1817 if (!panel) return "(error)"; 1817 if (!panel) return "(error)";
1818 1818
1819 std::string owner = panel->getOwnerName(); 1819 std::string owner = panel->getOwnerName();
1820 1820
1821 LLViewerRegion* region = gAgent.getRegion(); 1821 LLViewerRegion* region = gAgent.getRegion();
1822 if (gAgent.isGodlike()) 1822 if (gAgent.isGodlike())
1823 { 1823 {
1824 return llformat("all estates\nowned by %s", owner.c_str()); 1824 return llformat("all estates\nowned by %s", owner.c_str());
1825 } 1825 }
1826 else if (region && region->getOwner() == gAgent.getID()) 1826 else if (region && region->getOwner() == gAgent.getID())
1827 { 1827 {
1828 return "all estates you own"; 1828 return "all estates you own";
1829 } 1829 }
1830 else if (region && region->isEstateManager()) 1830 else if (region && region->isEstateManager())
1831 { 1831 {
1832 return llformat("all estates that\nyou manage for %s", owner.c_str()); 1832 return llformat("all estates that\nyou manage for %s", owner.c_str());
1833 } 1833 }
1834 else 1834 else
1835 { 1835 {
1836 return "(error)"; 1836 return "(error)";
1837 } 1837 }
1838} 1838}
1839 1839
1840// static 1840// static
1841bool LLPanelEstateInfo::isLindenEstate() 1841bool LLPanelEstateInfo::isLindenEstate()
1842{ 1842{
1843 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); 1843 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
1844 if (!panel) return false; 1844 if (!panel) return false;
1845 1845
1846 U32 estate_id = panel->getEstateID(); 1846 U32 estate_id = panel->getEstateID();
1847 return (estate_id <= ESTATE_LAST_LINDEN); 1847 return (estate_id <= ESTATE_LAST_LINDEN);
1848} 1848}
1849 1849
1850typedef std::vector<LLUUID> AgentOrGroupIDsVector; 1850typedef std::vector<LLUUID> AgentOrGroupIDsVector;
1851struct LLEstateAccessChangeInfo 1851struct LLEstateAccessChangeInfo
1852{ 1852{
1853 LLEstateAccessChangeInfo(const LLSD& sd) 1853 LLEstateAccessChangeInfo(const LLSD& sd)
1854 { 1854 {
1855 mDialogName = sd["dialog_name"].asString(); 1855 mDialogName = sd["dialog_name"].asString();
1856 mOperationFlag = (U32)sd["operation"].asInteger(); 1856 mOperationFlag = (U32)sd["operation"].asInteger();
1857 LLSD::array_const_iterator end_it = sd["allowed_ids"].endArray(); 1857 LLSD::array_const_iterator end_it = sd["allowed_ids"].endArray();
1858 for (LLSD::array_const_iterator id_it = sd["allowed_ids"].beginArray(); 1858 for (LLSD::array_const_iterator id_it = sd["allowed_ids"].beginArray();
1859 id_it != end_it; 1859 id_it != end_it;
1860 ++id_it) 1860 ++id_it)
1861 { 1861 {
1862 mAgentOrGroupIDs.push_back(id_it->asUUID()); 1862 mAgentOrGroupIDs.push_back(id_it->asUUID());
1863 } 1863 }
1864 } 1864 }
1865 1865
1866 const LLSD asLLSD() const 1866 const LLSD asLLSD() const
1867 { 1867 {
1868 LLSD sd; 1868 LLSD sd;
1869 sd["name"] = mDialogName; 1869 sd["name"] = mDialogName;
1870 sd["operation"] = (S32)mOperationFlag; 1870 sd["operation"] = (S32)mOperationFlag;
1871 for (AgentOrGroupIDsVector::const_iterator it = mAgentOrGroupIDs.begin(); 1871 for (AgentOrGroupIDsVector::const_iterator it = mAgentOrGroupIDs.begin();
1872 it != mAgentOrGroupIDs.end(); 1872 it != mAgentOrGroupIDs.end();
1873 ++it) 1873 ++it)
1874 { 1874 {
1875 sd["allowed_ids"].append(*it); 1875 sd["allowed_ids"].append(*it);
1876 } 1876 }
1877 return sd; 1877 return sd;
1878 } 1878 }
1879 1879
1880 U32 mOperationFlag; // ESTATE_ACCESS_BANNED_AGENT_ADD, _REMOVE, etc. 1880 U32 mOperationFlag; // ESTATE_ACCESS_BANNED_AGENT_ADD, _REMOVE, etc.
1881 std::string mDialogName; 1881 std::string mDialogName;
1882 AgentOrGroupIDsVector mAgentOrGroupIDs; // List of agent IDs to apply to this change 1882 AgentOrGroupIDsVector mAgentOrGroupIDs; // List of agent IDs to apply to this change
1883}; 1883};
1884 1884
1885// Special case callback for groups, since it has different callback format than names 1885// Special case callback for groups, since it has different callback format than names
1886// static 1886// static
1887void LLPanelEstateInfo::addAllowedGroup2(LLUUID id, void* user_data) 1887void LLPanelEstateInfo::addAllowedGroup2(LLUUID id, void* user_data)
1888{ 1888{
1889 LLSD payload; 1889 LLSD payload;
1890 payload["operation"] = (S32)ESTATE_ACCESS_ALLOWED_GROUP_ADD; 1890 payload["operation"] = (S32)ESTATE_ACCESS_ALLOWED_GROUP_ADD;
1891 payload["dialog_name"] = "EstateAllowedGroupAdd"; 1891 payload["dialog_name"] = "EstateAllowedGroupAdd";
1892 payload["allowed_ids"].append(id); 1892 payload["allowed_ids"].append(id);
1893 1893
1894 LLSD args; 1894 LLSD args;
1895 args["ALL_ESTATES"] = all_estates_text(); 1895 args["ALL_ESTATES"] = all_estates_text();
1896 1896
1897 LLNotification::Params params("EstateAllowedGroupAdd"); 1897 LLNotification::Params params("EstateAllowedGroupAdd");
1898 params.payload(payload) 1898 params.payload(payload)
1899 .substitutions(args) 1899 .substitutions(args)
1900 .functor(accessCoreConfirm); 1900 .functor(accessCoreConfirm);
1901 if (isLindenEstate()) 1901 if (isLindenEstate())
1902 { 1902 {
1903 LLNotifications::instance().forceResponse(params, 0); 1903 LLNotifications::instance().forceResponse(params, 0);
1904 } 1904 }
1905 else 1905 else
1906 { 1906 {
1907 LLNotifications::instance().add(params); 1907 LLNotifications::instance().add(params);
1908 } 1908 }
1909} 1909}
1910 1910
1911// static 1911// static
1912void LLPanelEstateInfo::accessAddCore(U32 operation_flag, const std::string& dialog_name) 1912void LLPanelEstateInfo::accessAddCore(U32 operation_flag, const std::string& dialog_name)
1913{ 1913{
1914 LLSD payload; 1914 LLSD payload;
1915 payload["operation"] = (S32)operation_flag; 1915 payload["operation"] = (S32)operation_flag;
1916 payload["dialog_name"] = dialog_name; 1916 payload["dialog_name"] = dialog_name;
1917 // agent id filled in after avatar picker 1917 // agent id filled in after avatar picker
1918 1918
1919 LLNotification::Params params("ChangeLindenAccess"); 1919 LLNotification::Params params("ChangeLindenAccess");
1920 params.payload(payload) 1920 params.payload(payload)
1921 .functor(accessAddCore2); 1921 .functor(accessAddCore2);
1922 1922
1923 if (isLindenEstate()) 1923 if (isLindenEstate())
1924 { 1924 {
1925 LLNotifications::instance().add(params); 1925 LLNotifications::instance().add(params);
1926 } 1926 }
1927 else 1927 else
1928 { 1928 {
1929 // same as clicking "OK" 1929 // same as clicking "OK"
1930 LLNotifications::instance().forceResponse(params, 0); 1930 LLNotifications::instance().forceResponse(params, 0);
1931 } 1931 }
1932} 1932}
1933 1933
1934// static 1934// static
1935bool LLPanelEstateInfo::accessAddCore2(const LLSD& notification, const LLSD& response) 1935bool LLPanelEstateInfo::accessAddCore2(const LLSD& notification, const LLSD& response)
1936{ 1936{
1937 S32 option = LLNotification::getSelectedOption(notification, response); 1937 S32 option = LLNotification::getSelectedOption(notification, response);
1938 if (option != 0) 1938 if (option != 0)
1939 { 1939 {
1940 // abort change 1940 // abort change
1941 return false; 1941 return false;
1942 } 1942 }
1943 1943
1944 LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo(notification["payload"]); 1944 LLEstateAccessChangeInfo* change_info = new LLEstateAccessChangeInfo(notification["payload"]);
1945 // avatar picker yes multi-select, yes close-on-select 1945 // avatar picker yes multi-select, yes close-on-select
1946 LLFloaterAvatarPicker::show(accessAddCore3, (void*)change_info, TRUE, TRUE); 1946 LLFloaterAvatarPicker::show(accessAddCore3, (void*)change_info, TRUE, TRUE);
1947 return false; 1947 return false;
1948} 1948}
1949 1949
1950// static 1950// static
1951void LLPanelEstateInfo::accessAddCore3(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data) 1951void LLPanelEstateInfo::accessAddCore3(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data)
1952{ 1952{
1953 LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data; 1953 LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data;
1954 if (!change_info) return; 1954 if (!change_info) return;
1955 if (ids.empty()) 1955 if (ids.empty())
1956 { 1956 {
1957 // User didn't select a name. 1957 // User didn't select a name.
1958 delete change_info; 1958 delete change_info;
1959 change_info = NULL; 1959 change_info = NULL;
1960 return; 1960 return;
1961 } 1961 }
1962 // User did select a name. 1962 // User did select a name.
1963 change_info->mAgentOrGroupIDs = ids; 1963 change_info->mAgentOrGroupIDs = ids;
1964 // Can't put estate owner on ban list 1964 // Can't put estate owner on ban list
1965 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); 1965 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
1966 if (!panel) return; 1966 if (!panel) return;
1967 LLViewerRegion* region = gAgent.getRegion(); 1967 LLViewerRegion* region = gAgent.getRegion();
1968 if (!region) return; 1968 if (!region) return;
1969 1969
1970 if (change_info->mOperationFlag & ESTATE_ACCESS_ALLOWED_AGENT_ADD) 1970 if (change_info->mOperationFlag & ESTATE_ACCESS_ALLOWED_AGENT_ADD)
1971 { 1971 {
1972 LLCtrlListInterface *list = panel->childGetListInterface("allowed_avatar_name_list"); 1972 LLCtrlListInterface *list = panel->childGetListInterface("allowed_avatar_name_list");
1973 int currentCount = (list ? list->getItemCount() : 0); 1973 int currentCount = (list ? list->getItemCount() : 0);
1974 if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS) 1974 if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS)
1975 { 1975 {
1976 LLSD args; 1976 LLSD args;
1977 args["NUM_ADDED"] = llformat("%d",ids.size()); 1977 args["NUM_ADDED"] = llformat("%d",ids.size());
1978 args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); 1978 args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
1979 args["LIST_TYPE"] = "Allowed Residents"; 1979 args["LIST_TYPE"] = "Allowed Residents";
1980 args["NUM_EXCESS"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS); 1980 args["NUM_EXCESS"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS);
1981 LLNotifications::instance().add("MaxAgentOnRegionBatch", args); 1981 LLNotifications::instance().add("MaxAgentOnRegionBatch", args);
1982 delete change_info; 1982 delete change_info;
1983 return; 1983 return;
1984 } 1984 }
1985 } 1985 }
1986 if (change_info->mOperationFlag & ESTATE_ACCESS_BANNED_AGENT_ADD) 1986 if (change_info->mOperationFlag & ESTATE_ACCESS_BANNED_AGENT_ADD)
1987 { 1987 {
1988 LLCtrlListInterface *list = panel->childGetListInterface("banned_avatar_name_list"); 1988 LLCtrlListInterface *list = panel->childGetListInterface("banned_avatar_name_list");
1989 int currentCount = (list ? list->getItemCount() : 0); 1989 int currentCount = (list ? list->getItemCount() : 0);
1990 if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS) 1990 if (ids.size() + currentCount > ESTATE_MAX_ACCESS_IDS)
1991 { 1991 {
1992 LLSD args; 1992 LLSD args;
1993 args["NUM_ADDED"] = llformat("%d",ids.size()); 1993 args["NUM_ADDED"] = llformat("%d",ids.size());
1994 args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); 1994 args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS);
1995 args["LIST_TYPE"] = "Banned Residents"; 1995 args["LIST_TYPE"] = "Banned Residents";
1996 args["NUM_EXCESS"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS); 1996 args["NUM_EXCESS"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS);
1997 LLNotifications::instance().add("MaxAgentOnRegionBatch", args); 1997 LLNotifications::instance().add("MaxAgentOnRegionBatch", args);
1998 delete change_info; 1998 delete change_info;
1999 return; 1999 return;
2000 } 2000 }
2001 } 2001 }
2002 2002
2003 LLSD args; 2003 LLSD args;
2004 args["ALL_ESTATES"] = all_estates_text(); 2004 args["ALL_ESTATES"] = all_estates_text();
2005 2005
2006 LLNotification::Params params(change_info->mDialogName); 2006 LLNotification::Params params(change_info->mDialogName);
2007 params.substitutions(args) 2007 params.substitutions(args)
2008 .payload(change_info->asLLSD()) 2008 .payload(change_info->asLLSD())
2009 .functor(accessCoreConfirm); 2009 .functor(accessCoreConfirm);
2010 2010
2011 if (isLindenEstate()) 2011 if (isLindenEstate())
2012 { 2012 {
2013 // just apply to this estate 2013 // just apply to this estate
2014 LLNotifications::instance().forceResponse(params, 0); 2014 LLNotifications::instance().forceResponse(params, 0);
2015 } 2015 }
2016 else 2016 else
2017 { 2017 {
2018 // ask if this estate or all estates with this owner 2018 // ask if this estate or all estates with this owner
2019 LLNotifications::instance().add(params); 2019 LLNotifications::instance().add(params);
2020 } 2020 }
2021} 2021}
2022 2022
2023// static 2023// static
2024void LLPanelEstateInfo::accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name) 2024void LLPanelEstateInfo::accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name)
2025{ 2025{
2026 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); 2026 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
2027 if (!panel) return; 2027 if (!panel) return;
2028 LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>(list_ctrl_name); 2028 LLNameListCtrl* name_list = panel->getChild<LLNameListCtrl>(list_ctrl_name);
2029 if (!name_list) return; 2029 if (!name_list) return;
2030 2030
2031 std::vector<LLScrollListItem*> list_vector = name_list->getAllSelected(); 2031 std::vector<LLScrollListItem*> list_vector = name_list->getAllSelected();
2032 if (list_vector.size() == 0) 2032 if (list_vector.size() == 0)
2033 return; 2033 return;
2034 2034
2035 LLSD payload; 2035 LLSD payload;
2036 payload["operation"] = (S32)operation_flag; 2036 payload["operation"] = (S32)operation_flag;
2037 payload["dialog_name"] = dialog_name; 2037 payload["dialog_name"] = dialog_name;
2038 2038
2039 for (std::vector<LLScrollListItem*>::const_iterator iter = list_vector.begin(); 2039 for (std::vector<LLScrollListItem*>::const_iterator iter = list_vector.begin();
2040 iter != list_vector.end(); 2040 iter != list_vector.end();
2041 iter++) 2041 iter++)
2042 { 2042 {
2043 LLScrollListItem *item = (*iter); 2043 LLScrollListItem *item = (*iter);
2044 payload["allowed_ids"].append(item->getUUID()); 2044 payload["allowed_ids"].append(item->getUUID());
2045 } 2045 }
2046 2046
2047 LLNotification::Params params("ChangeLindenAccess"); 2047 LLNotification::Params params("ChangeLindenAccess");
2048 params.payload(payload) 2048 params.payload(payload)
2049 .functor(accessRemoveCore2); 2049 .functor(accessRemoveCore2);
2050 2050
2051 if (isLindenEstate()) 2051 if (isLindenEstate())
2052 { 2052 {
2053 // warn on change linden estate 2053 // warn on change linden estate
2054 LLNotifications::instance().add(params); 2054 LLNotifications::instance().add(params);
2055 } 2055 }
2056 else 2056 else
2057 { 2057 {
2058 // just proceed, as if clicking OK 2058 // just proceed, as if clicking OK
2059 LLNotifications::instance().forceResponse(params, 0); 2059 LLNotifications::instance().forceResponse(params, 0);
2060 } 2060 }
2061} 2061}
2062 2062
2063// static 2063// static
2064bool LLPanelEstateInfo::accessRemoveCore2(const LLSD& notification, const LLSD& response) 2064bool LLPanelEstateInfo::accessRemoveCore2(const LLSD& notification, const LLSD& response)
2065{ 2065{
2066 S32 option = LLNotification::getSelectedOption(notification, response); 2066 S32 option = LLNotification::getSelectedOption(notification, response);
2067 if (option != 0) 2067 if (option != 0)
2068 { 2068 {
2069 // abort 2069 // abort
2070 return false; 2070 return false;
2071 } 2071 }
2072 2072
2073 // If Linden estate, can only apply to "this" estate, not all estates 2073 // If Linden estate, can only apply to "this" estate, not all estates
2074 // owned by NULL. 2074 // owned by NULL.
2075 if (isLindenEstate()) 2075 if (isLindenEstate())
2076 { 2076 {
2077 accessCoreConfirm(notification, response); 2077 accessCoreConfirm(notification, response);
2078 } 2078 }
2079 else 2079 else
2080 { 2080 {
2081 LLSD args; 2081 LLSD args;
2082 args["ALL_ESTATES"] = all_estates_text(); 2082 args["ALL_ESTATES"] = all_estates_text();
2083 LLNotifications::instance().add(notification["payload"]["dialog_name"], 2083 LLNotifications::instance().add(notification["payload"]["dialog_name"],
2084 args, 2084 args,
2085 notification["payload"], 2085 notification["payload"],
2086 accessCoreConfirm); 2086 accessCoreConfirm);
2087 } 2087 }
2088 return false; 2088 return false;
2089} 2089}
2090 2090
2091// Used for both access add and remove operations, depending on the mOperationFlag 2091// Used for both access add and remove operations, depending on the mOperationFlag
2092// passed in (ESTATE_ACCESS_BANNED_AGENT_ADD, ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, etc.) 2092// passed in (ESTATE_ACCESS_BANNED_AGENT_ADD, ESTATE_ACCESS_ALLOWED_AGENT_REMOVE, etc.)
2093// static 2093// static
2094bool LLPanelEstateInfo::accessCoreConfirm(const LLSD& notification, const LLSD& response) 2094bool LLPanelEstateInfo::accessCoreConfirm(const LLSD& notification, const LLSD& response)
2095{ 2095{
2096 S32 option = LLNotification::getSelectedOption(notification, response); 2096 S32 option = LLNotification::getSelectedOption(notification, response);
2097 const U32 originalFlags = (U32)notification["payload"]["operation"].asInteger(); 2097 const U32 originalFlags = (U32)notification["payload"]["operation"].asInteger();
2098 2098
2099 LLViewerRegion* region = gAgent.getRegion(); 2099 LLViewerRegion* region = gAgent.getRegion();
2100 2100
2101 LLSD::array_const_iterator end_it = notification["payload"]["allowed_ids"].endArray(); 2101 LLSD::array_const_iterator end_it = notification["payload"]["allowed_ids"].endArray();
2102 2102
2103 for (LLSD::array_const_iterator iter = notification["payload"]["allowed_ids"].beginArray(); 2103 for (LLSD::array_const_iterator iter = notification["payload"]["allowed_ids"].beginArray();
2104 iter != end_it; 2104 iter != end_it;
2105 iter++) 2105 iter++)
2106 { 2106 {
2107 U32 flags = originalFlags; 2107 U32 flags = originalFlags;
2108 if (iter + 1 != end_it) 2108 if (iter + 1 != end_it)
2109 flags |= ESTATE_ACCESS_NO_REPLY; 2109 flags |= ESTATE_ACCESS_NO_REPLY;
2110 2110
2111 const LLUUID id = iter->asUUID(); 2111 const LLUUID id = iter->asUUID();
2112 if (((U32)notification["payload"]["operation"].asInteger() & ESTATE_ACCESS_BANNED_AGENT_ADD) 2112 if (((U32)notification["payload"]["operation"].asInteger() & ESTATE_ACCESS_BANNED_AGENT_ADD)
2113 && region && (region->getOwner() == id)) 2113 && region && (region->getOwner() == id))
2114 { 2114 {
2115 LLNotifications::instance().add("OwnerCanNotBeDenied"); 2115 LLNotifications::instance().add("OwnerCanNotBeDenied");
2116 break; 2116 break;
2117 } 2117 }
2118 switch(option) 2118 switch(option)
2119 { 2119 {
2120 case 0: 2120 case 0:
2121 // This estate 2121 // This estate
2122 sendEstateAccessDelta(flags, id); 2122 sendEstateAccessDelta(flags, id);
2123 break; 2123 break;
2124 case 1: 2124 case 1:
2125 { 2125 {
2126 // All estates, either than I own or manage for this owner. 2126 // All estates, either than I own or manage for this owner.
2127 // This will be verified on simulator. JC 2127 // This will be verified on simulator. JC
2128 if (!region) break; 2128 if (!region) break;
2129 if (region->getOwner() == gAgent.getID() 2129 if (region->getOwner() == gAgent.getID()
2130 || gAgent.isGodlike()) 2130 || gAgent.isGodlike())
2131 { 2131 {
2132 flags |= ESTATE_ACCESS_APPLY_TO_ALL_ESTATES; 2132 flags |= ESTATE_ACCESS_APPLY_TO_ALL_ESTATES;
2133 sendEstateAccessDelta(flags, id); 2133 sendEstateAccessDelta(flags, id);
2134 } 2134 }
2135 else if (region->isEstateManager()) 2135 else if (region->isEstateManager())
2136 { 2136 {
2137 flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES; 2137 flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES;
2138 sendEstateAccessDelta(flags, id); 2138 sendEstateAccessDelta(flags, id);
2139 } 2139 }
2140 break; 2140 break;
2141 } 2141 }
2142 case 2: 2142 case 2:
2143 default: 2143 default:
2144 break; 2144 break;
2145 } 2145 }
2146 } 2146 }
2147 return false; 2147 return false;
2148} 2148}
2149 2149
2150// key = "estateaccessdelta" 2150// key = "estateaccessdelta"
2151// str(estate_id) will be added to front of list by forward_EstateOwnerRequest_to_dataserver 2151// str(estate_id) will be added to front of list by forward_EstateOwnerRequest_to_dataserver
2152// str[0] = str(agent_id) requesting the change 2152// str[0] = str(agent_id) requesting the change
2153// str[1] = str(flags) (ESTATE_ACCESS_DELTA_*) 2153// str[1] = str(flags) (ESTATE_ACCESS_DELTA_*)
2154// str[2] = str(agent_id) to add or remove 2154// str[2] = str(agent_id) to add or remove
2155// static 2155// static
2156void LLPanelEstateInfo::sendEstateAccessDelta(U32 flags, const LLUUID& agent_or_group_id) 2156void LLPanelEstateInfo::sendEstateAccessDelta(U32 flags, const LLUUID& agent_or_group_id)
2157{ 2157{
2158 LLMessageSystem* msg = gMessageSystem; 2158 LLMessageSystem* msg = gMessageSystem;
2159 msg->newMessage("EstateOwnerMessage"); 2159 msg->newMessage("EstateOwnerMessage");
2160 msg->nextBlockFast(_PREHASH_AgentData); 2160 msg->nextBlockFast(_PREHASH_AgentData);
2161 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); 2161 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
2162 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); 2162 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
2163 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used 2163 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
2164 2164
2165 msg->nextBlock("MethodData"); 2165 msg->nextBlock("MethodData");
2166 msg->addString("Method", "estateaccessdelta"); 2166 msg->addString("Method", "estateaccessdelta");
2167 msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice()); 2167 msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
2168 2168
2169 std::string buf; 2169 std::string buf;
2170 gAgent.getID().toString(buf); 2170 gAgent.getID().toString(buf);
2171 msg->nextBlock("ParamList"); 2171 msg->nextBlock("ParamList");
2172 msg->addString("Parameter", buf); 2172 msg->addString("Parameter", buf);
2173 2173
2174 buf = llformat("%u", flags); 2174 buf = llformat("%u", flags);
2175 msg->nextBlock("ParamList"); 2175 msg->nextBlock("ParamList");
2176 msg->addString("Parameter", buf); 2176 msg->addString("Parameter", buf);
2177 2177
2178 agent_or_group_id.toString(buf); 2178 agent_or_group_id.toString(buf);
2179 msg->nextBlock("ParamList"); 2179 msg->nextBlock("ParamList");
2180 msg->addString("Parameter", buf); 2180 msg->addString("Parameter", buf);
2181 2181
2182 2182
2183 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); 2183 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
2184 2184
2185 if (flags & (ESTATE_ACCESS_ALLOWED_AGENT_ADD | ESTATE_ACCESS_ALLOWED_AGENT_REMOVE | 2185 if (flags & (ESTATE_ACCESS_ALLOWED_AGENT_ADD | ESTATE_ACCESS_ALLOWED_AGENT_REMOVE |
2186 ESTATE_ACCESS_BANNED_AGENT_ADD | ESTATE_ACCESS_BANNED_AGENT_REMOVE)) 2186 ESTATE_ACCESS_BANNED_AGENT_ADD | ESTATE_ACCESS_BANNED_AGENT_REMOVE))
2187 { 2187 {
2188 2188
2189 panel->clearAccessLists(); 2189 panel->clearAccessLists();
2190 } 2190 }
2191 2191
2192 gAgent.sendReliableMessage(); 2192 gAgent.sendReliableMessage();
2193} 2193}
2194 2194
2195void LLPanelEstateInfo::updateControls(LLViewerRegion* region) 2195void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
2196{ 2196{
2197 BOOL god = gAgent.isGodlike(); 2197 BOOL god = gAgent.isGodlike();
2198 BOOL owner = (region && (region->getOwner() == gAgent.getID())); 2198 BOOL owner = (region && (region->getOwner() == gAgent.getID()));
2199 BOOL manager = (region && region->isEstateManager()); 2199 BOOL manager = (region && region->isEstateManager());
2200 setCtrlsEnabled(god || owner || manager); 2200 setCtrlsEnabled(god || owner || manager);
2201 2201
2202 childDisable("apply_btn"); 2202 childDisable("apply_btn");
2203 childSetEnabled("add_allowed_avatar_btn", god || owner || manager); 2203 childSetEnabled("add_allowed_avatar_btn", god || owner || manager);
2204 childSetEnabled("remove_allowed_avatar_btn", god || owner || manager); 2204 childSetEnabled("remove_allowed_avatar_btn", god || owner || manager);
2205 childSetEnabled("add_allowed_group_btn", god || owner || manager); 2205 childSetEnabled("add_allowed_group_btn", god || owner || manager);
2206 childSetEnabled("remove_allowed_group_btn", god || owner || manager); 2206 childSetEnabled("remove_allowed_group_btn", god || owner || manager);
2207 childSetEnabled("add_banned_avatar_btn", god || owner || manager); 2207 childSetEnabled("add_banned_avatar_btn", god || owner || manager);
2208 childSetEnabled("remove_banned_avatar_btn", god || owner || manager); 2208 childSetEnabled("remove_banned_avatar_btn", god || owner || manager);
2209 childSetEnabled("message_estate_btn", god || owner || manager); 2209 childSetEnabled("message_estate_btn", god || owner || manager);
2210 childSetEnabled("kick_user_from_estate_btn", god || owner || manager); 2210 childSetEnabled("kick_user_from_estate_btn", god || owner || manager);
2211 childSetEnabled("abuse_email_address", god || owner || manager); 2211 childSetEnabled("abuse_email_address", god || owner || manager);
2212 2212
2213 // estate managers can't add estate managers 2213 // estate managers can't add estate managers
2214 childSetEnabled("add_estate_manager_btn", god || owner); 2214 childSetEnabled("add_estate_manager_btn", god || owner);
2215 childSetEnabled("remove_estate_manager_btn", god || owner); 2215 childSetEnabled("remove_estate_manager_btn", god || owner);
2216 childSetEnabled("estate_manager_name_list", god || owner); 2216 childSetEnabled("estate_manager_name_list", god || owner);
2217} 2217}
2218 2218
2219bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region) 2219bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
2220{ 2220{
2221 updateControls(region); 2221 updateControls(region);
2222 2222
2223 // let the parent class handle the general data collection. 2223 // let the parent class handle the general data collection.
2224 bool rv = LLPanelRegionInfo::refreshFromRegion(region); 2224 bool rv = LLPanelRegionInfo::refreshFromRegion(region);
2225 2225
2226 // We want estate info. To make sure it works across region 2226 // We want estate info. To make sure it works across region
2227 // boundaries and multiple packets, we add a serial number to the 2227 // boundaries and multiple packets, we add a serial number to the
2228 // integers and track against that on update. 2228 // integers and track against that on update.
2229 strings_t strings; 2229 strings_t strings;
2230 //integers_t integers; 2230 //integers_t integers;
2231 //LLFloaterRegionInfo::incrementSerial(); 2231 //LLFloaterRegionInfo::incrementSerial();
2232 LLFloaterRegionInfo::nextInvoice(); 2232 LLFloaterRegionInfo::nextInvoice();
2233 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 2233 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
2234 //integers.push_back(LLFloaterRegionInfo::());::getPanelEstate(); 2234 //integers.push_back(LLFloaterRegionInfo::());::getPanelEstate();
2235 2235
2236 2236
2237 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); 2237 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
2238 panel->clearAccessLists(); 2238 panel->clearAccessLists();
2239 2239
2240 2240
2241 sendEstateOwnerMessage(gMessageSystem, "getinfo", invoice, strings); 2241 sendEstateOwnerMessage(gMessageSystem, "getinfo", invoice, strings);
2242 2242
2243 refresh(); 2243 refresh();
2244 2244
2245 return rv; 2245 return rv;
2246} 2246}
2247 2247
2248void LLPanelEstateInfo::updateChild(LLUICtrl* child_ctrl) 2248void LLPanelEstateInfo::updateChild(LLUICtrl* child_ctrl)
2249{ 2249{
2250 if (checkRemovalButton(child_ctrl->getName())) 2250 if (checkRemovalButton(child_ctrl->getName()))
2251 { 2251 {
2252 // do nothing 2252 // do nothing
2253 } 2253 }
2254 else if (checkSunHourSlider(child_ctrl)) 2254 else if (checkSunHourSlider(child_ctrl))
2255 { 2255 {
2256 // do nothing 2256 // do nothing
2257 } 2257 }
2258} 2258}
2259 2259
2260bool LLPanelEstateInfo::estateUpdate(LLMessageSystem* msg) 2260bool LLPanelEstateInfo::estateUpdate(LLMessageSystem* msg)
2261{ 2261{
2262 llinfos << "LLPanelEstateInfo::estateUpdate()" << llendl; 2262 llinfos << "LLPanelEstateInfo::estateUpdate()" << llendl;
2263 return false; 2263 return false;
2264} 2264}
2265 2265
2266 2266
2267BOOL LLPanelEstateInfo::postBuild() 2267BOOL LLPanelEstateInfo::postBuild()
2268{ 2268{
2269 // set up the callbacks for the generic controls 2269 // set up the callbacks for the generic controls
2270 initCtrl("externally_visible_check"); 2270 initCtrl("externally_visible_check");
2271 initCtrl("use_global_time_check"); 2271 initCtrl("use_global_time_check");
2272 initCtrl("fixed_sun_check"); 2272 initCtrl("fixed_sun_check");
2273 initCtrl("allow_direct_teleport"); 2273 initCtrl("allow_direct_teleport");
2274 initCtrl("limit_payment"); 2274 initCtrl("limit_payment");
2275 initCtrl("limit_age_verified"); 2275 initCtrl("limit_age_verified");
2276 initCtrl("voice_chat_check"); 2276 initCtrl("voice_chat_check");
2277 childSetCommitCallback("abuse_email_address", onChangeAnything, this); 2277 childSetCommitCallback("abuse_email_address", onChangeAnything, this);
2278 childSetKeystrokeCallback("abuse_email_address", onChangeText, this); 2278 childSetKeystrokeCallback("abuse_email_address", onChangeText, this);
2279 2279
2280 initHelpBtn("estate_manager_help", "HelpEstateEstateManager"); 2280 initHelpBtn("estate_manager_help", "HelpEstateEstateManager");
2281 initHelpBtn("use_global_time_help", "HelpEstateUseGlobalTime"); 2281 initHelpBtn("use_global_time_help", "HelpEstateUseGlobalTime");
2282 initHelpBtn("fixed_sun_help", "HelpEstateFixedSun"); 2282 initHelpBtn("fixed_sun_help", "HelpEstateFixedSun");
2283 initHelpBtn("WLEditSkyHelp", "HelpEditSky"); 2283 initHelpBtn("WLEditSkyHelp", "HelpEditSky");
2284 initHelpBtn("WLEditDayCycleHelp", "HelpEditDayCycle"); 2284 initHelpBtn("WLEditDayCycleHelp", "HelpEditDayCycle");
2285 2285
2286 initHelpBtn("externally_visible_help", "HelpEstateExternallyVisible"); 2286 initHelpBtn("externally_visible_help", "HelpEstateExternallyVisible");
2287 initHelpBtn("allow_direct_teleport_help", "HelpEstateAllowDirectTeleport"); 2287 initHelpBtn("allow_direct_teleport_help", "HelpEstateAllowDirectTeleport");
2288 initHelpBtn("allow_resident_help", "HelpEstateAllowResident"); 2288 initHelpBtn("allow_resident_help", "HelpEstateAllowResident");
2289 initHelpBtn("allow_group_help", "HelpEstateAllowGroup"); 2289 initHelpBtn("allow_group_help", "HelpEstateAllowGroup");
2290 initHelpBtn("ban_resident_help", "HelpEstateBanResident"); 2290 initHelpBtn("ban_resident_help", "HelpEstateBanResident");
2291 initHelpBtn("abuse_email_address_help", "HelpEstateAbuseEmailAddress"); 2291 initHelpBtn("abuse_email_address_help", "HelpEstateAbuseEmailAddress");
2292 initHelpBtn("voice_chat_help", "HelpEstateVoiceChat"); 2292 initHelpBtn("voice_chat_help", "HelpEstateVoiceChat");
2293 2293
2294 // set up the use global time checkbox 2294 // set up the use global time checkbox
2295 childSetCommitCallback("use_global_time_check", onChangeUseGlobalTime, this); 2295 childSetCommitCallback("use_global_time_check", onChangeUseGlobalTime, this);
2296 childSetCommitCallback("fixed_sun_check", onChangeFixedSun, this); 2296 childSetCommitCallback("fixed_sun_check", onChangeFixedSun, this);
2297 childSetCommitCallback("sun_hour_slider", onChangeChildCtrl, this); 2297 childSetCommitCallback("sun_hour_slider", onChangeChildCtrl, this);
2298 2298
2299 childSetCommitCallback("allowed_avatar_name_list", onChangeChildCtrl, this); 2299 childSetCommitCallback("allowed_avatar_name_list", onChangeChildCtrl, this);
2300 LLNameListCtrl *avatar_name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list"); 2300 LLNameListCtrl *avatar_name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list");
2301 if (avatar_name_list) 2301 if (avatar_name_list)
2302 { 2302 {
2303 avatar_name_list->setCommitOnSelectionChange(TRUE); 2303 avatar_name_list->setCommitOnSelectionChange(TRUE);
2304 avatar_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); 2304 avatar_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
2305 } 2305 }
2306 2306
2307 childSetAction("add_allowed_avatar_btn", onClickAddAllowedAgent, this); 2307 childSetAction("add_allowed_avatar_btn", onClickAddAllowedAgent, this);
2308 childSetAction("remove_allowed_avatar_btn", onClickRemoveAllowedAgent, this); 2308 childSetAction("remove_allowed_avatar_btn", onClickRemoveAllowedAgent, this);
2309 2309
2310 childSetCommitCallback("allowed_group_name_list", onChangeChildCtrl, this); 2310 childSetCommitCallback("allowed_group_name_list", onChangeChildCtrl, this);
2311 LLNameListCtrl* group_name_list = getChild<LLNameListCtrl>("allowed_group_name_list"); 2311 LLNameListCtrl* group_name_list = getChild<LLNameListCtrl>("allowed_group_name_list");
2312 if (group_name_list) 2312 if (group_name_list)
2313 { 2313 {
2314 group_name_list->setCommitOnSelectionChange(TRUE); 2314 group_name_list->setCommitOnSelectionChange(TRUE);
2315 group_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); 2315 group_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
2316 } 2316 }
2317 2317
2318 childSetAction("add_allowed_group_btn", onClickAddAllowedGroup, this); 2318 childSetAction("add_allowed_group_btn", onClickAddAllowedGroup, this);
2319 childSetAction("remove_allowed_group_btn", onClickRemoveAllowedGroup, this); 2319 childSetAction("remove_allowed_group_btn", onClickRemoveAllowedGroup, this);
2320 2320
2321 childSetCommitCallback("banned_avatar_name_list", onChangeChildCtrl, this); 2321 childSetCommitCallback("banned_avatar_name_list", onChangeChildCtrl, this);
2322 LLNameListCtrl* banned_name_list = getChild<LLNameListCtrl>("banned_avatar_name_list"); 2322 LLNameListCtrl* banned_name_list = getChild<LLNameListCtrl>("banned_avatar_name_list");
2323 if (banned_name_list) 2323 if (banned_name_list)
2324 { 2324 {
2325 banned_name_list->setCommitOnSelectionChange(TRUE); 2325 banned_name_list->setCommitOnSelectionChange(TRUE);
2326 banned_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS); 2326 banned_name_list->setMaxItemCount(ESTATE_MAX_ACCESS_IDS);
2327 } 2327 }
2328 2328
2329 childSetAction("add_banned_avatar_btn", onClickAddBannedAgent, this); 2329 childSetAction("add_banned_avatar_btn", onClickAddBannedAgent, this);
2330 childSetAction("remove_banned_avatar_btn", onClickRemoveBannedAgent, this); 2330 childSetAction("remove_banned_avatar_btn", onClickRemoveBannedAgent, this);
2331 2331
2332 childSetCommitCallback("estate_manager_name_list", onChangeChildCtrl, this); 2332 childSetCommitCallback("estate_manager_name_list", onChangeChildCtrl, this);
2333 LLNameListCtrl* manager_name_list = getChild<LLNameListCtrl>("estate_manager_name_list"); 2333 LLNameListCtrl* manager_name_list = getChild<LLNameListCtrl>("estate_manager_name_list");
2334 if (manager_name_list) 2334 if (manager_name_list)
2335 { 2335 {
2336 manager_name_list->setCommitOnSelectionChange(TRUE); 2336 manager_name_list->setCommitOnSelectionChange(TRUE);
2337 manager_name_list->setMaxItemCount(ESTATE_MAX_MANAGERS * 4); // Allow extras for dupe issue 2337 manager_name_list->setMaxItemCount(ESTATE_MAX_MANAGERS * 4); // Allow extras for dupe issue
2338 } 2338 }
2339 2339
2340 childSetAction("add_estate_manager_btn", onClickAddEstateManager, this); 2340 childSetAction("add_estate_manager_btn", onClickAddEstateManager, this);
2341 childSetAction("remove_estate_manager_btn", onClickRemoveEstateManager, this); 2341 childSetAction("remove_estate_manager_btn", onClickRemoveEstateManager, this);
2342 childSetAction("message_estate_btn", onClickMessageEstate, this); 2342 childSetAction("message_estate_btn", onClickMessageEstate, this);
2343 childSetAction("kick_user_from_estate_btn", onClickKickUser, this); 2343 childSetAction("kick_user_from_estate_btn", onClickKickUser, this);
2344 2344
2345 childSetAction("WLEditSky", onClickEditSky, this); 2345 childSetAction("WLEditSky", onClickEditSky, this);
2346 childSetAction("WLEditDayCycle", onClickEditDayCycle, this); 2346 childSetAction("WLEditDayCycle", onClickEditDayCycle, this);
2347 2347
2348 return LLPanelRegionInfo::postBuild(); 2348 return LLPanelRegionInfo::postBuild();
2349} 2349}
2350 2350
2351void LLPanelEstateInfo::refresh() 2351void LLPanelEstateInfo::refresh()
2352{ 2352{
2353 bool public_access = childGetValue("externally_visible_check").asBoolean(); 2353 bool public_access = childGetValue("externally_visible_check").asBoolean();
2354 childSetEnabled("Only Allow", public_access); 2354 childSetEnabled("Only Allow", public_access);
2355 childSetEnabled("limit_payment", public_access); 2355 childSetEnabled("limit_payment", public_access);
2356 childSetEnabled("limit_age_verified", public_access); 2356 childSetEnabled("limit_age_verified", public_access);
2357 // if this is set to false, then the limit fields are meaningless and should be turned off 2357 // if this is set to false, then the limit fields are meaningless and should be turned off
2358 if (public_access == false) 2358 if (public_access == false)
2359 { 2359 {
2360 childSetValue("limit_payment", false); 2360 childSetValue("limit_payment", false);
2361 childSetValue("limit_age_verified", false); 2361 childSetValue("limit_age_verified", false);
2362 } 2362 }
2363} 2363}
2364 2364
2365BOOL LLPanelEstateInfo::sendUpdate() 2365BOOL LLPanelEstateInfo::sendUpdate()
2366{ 2366{
2367 llinfos << "LLPanelEsateInfo::sendUpdate()" << llendl; 2367 llinfos << "LLPanelEsateInfo::sendUpdate()" << llendl;
2368 2368
2369 LLNotification::Params params("ChangeLindenEstate"); 2369 LLNotification::Params params("ChangeLindenEstate");
2370 params.functor(boost::bind(&LLPanelEstateInfo::callbackChangeLindenEstate, this, _1, _2)); 2370 params.functor(boost::bind(&LLPanelEstateInfo::callbackChangeLindenEstate, this, _1, _2));
2371 2371
2372 if (getEstateID() <= ESTATE_LAST_LINDEN) 2372 if (getEstateID() <= ESTATE_LAST_LINDEN)
2373 { 2373 {
2374 // trying to change reserved estate, warn 2374 // trying to change reserved estate, warn
2375 LLNotifications::instance().add(params); 2375 LLNotifications::instance().add(params);
2376 } 2376 }
2377 else 2377 else
2378 { 2378 {
2379 // for normal estates, just make the change 2379 // for normal estates, just make the change
2380 LLNotifications::instance().forceResponse(params, 0); 2380 LLNotifications::instance().forceResponse(params, 0);
2381 } 2381 }
2382 return TRUE; 2382 return TRUE;
2383} 2383}
2384 2384
2385bool LLPanelEstateInfo::callbackChangeLindenEstate(const LLSD& notification, const LLSD& response) 2385bool LLPanelEstateInfo::callbackChangeLindenEstate(const LLSD& notification, const LLSD& response)
2386{ 2386{
2387 S32 option = LLNotification::getSelectedOption(notification, response); 2387 S32 option = LLNotification::getSelectedOption(notification, response);
2388 switch(option) 2388 switch(option)
2389 { 2389 {
2390 case 0: 2390 case 0:
2391 // send the update 2391 // send the update
2392 if (!commitEstateInfoCaps()) 2392 if (!commitEstateInfoCaps())
2393 { 2393 {
2394 // the caps method failed, try the old way 2394 // the caps method failed, try the old way
2395 LLFloaterRegionInfo::nextInvoice(); 2395 LLFloaterRegionInfo::nextInvoice();
2396 commitEstateInfoDataserver(); 2396 commitEstateInfoDataserver();
2397 } 2397 }
2398 // we don't want to do this because we'll get it automatically from the sim 2398 // we don't want to do this because we'll get it automatically from the sim
2399 // after the spaceserver processes it 2399 // after the spaceserver processes it
2400// else 2400// else
2401// { 2401// {
2402// // caps method does not automatically send this info 2402// // caps method does not automatically send this info
2403// LLFloaterRegionInfo::requestRegionInfo(); 2403// LLFloaterRegionInfo::requestRegionInfo();
2404// } 2404// }
2405 break; 2405 break;
2406 case 1: 2406 case 1:
2407 default: 2407 default:
2408 // do nothing 2408 // do nothing
2409 break; 2409 break;
2410 } 2410 }
2411 return false; 2411 return false;
2412} 2412}
2413 2413
2414 2414
2415/* 2415/*
2416// Request = "getowner" 2416// Request = "getowner"
2417// SParam[0] = "" (empty string) 2417// SParam[0] = "" (empty string)
2418// IParam[0] = serial 2418// IParam[0] = serial
2419void LLPanelEstateInfo::getEstateOwner() 2419void LLPanelEstateInfo::getEstateOwner()
2420{ 2420{
2421 // TODO -- disable the panel 2421 // TODO -- disable the panel
2422 // and call this function whenever we cross a region boundary 2422 // and call this function whenever we cross a region boundary
2423 // re-enable when owner matches, and get new estate info 2423 // re-enable when owner matches, and get new estate info
2424 LLMessageSystem* msg = gMessageSystem; 2424 LLMessageSystem* msg = gMessageSystem;
2425 msg->newMessageFast(_PREHASH_EstateOwnerRequest); 2425 msg->newMessageFast(_PREHASH_EstateOwnerRequest);
2426 msg->nextBlockFast(_PREHASH_AgentData); 2426 msg->nextBlockFast(_PREHASH_AgentData);
2427 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); 2427 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
2428 2428
2429 msg->nextBlockFast(_PREHASH_RequestData); 2429 msg->nextBlockFast(_PREHASH_RequestData);
2430 msg->addStringFast(_PREHASH_Request, "getowner"); 2430 msg->addStringFast(_PREHASH_Request, "getowner");
2431 2431
2432 // we send an empty string so that the variable block is not empty 2432 // we send an empty string so that the variable block is not empty
2433 msg->nextBlockFast(_PREHASH_StringData); 2433 msg->nextBlockFast(_PREHASH_StringData);
2434 msg->addStringFast(_PREHASH_SParam, ""); 2434 msg->addStringFast(_PREHASH_SParam, "");
2435 2435
2436 msg->nextBlockFast(_PREHASH_IntegerData); 2436 msg->nextBlockFast(_PREHASH_IntegerData);
2437 msg->addS32Fast(_PREHASH_IParam, LLFloaterRegionInfo::getSerial()); 2437 msg->addS32Fast(_PREHASH_IParam, LLFloaterRegionInfo::getSerial());
2438 2438
2439 gAgent.sendMessage(); 2439 gAgent.sendMessage();
2440} 2440}
2441*/ 2441*/
2442 2442
2443class LLEstateChangeInfoResponder : public LLHTTPClient::Responder 2443class LLEstateChangeInfoResponder : public LLHTTPClient::Responder
2444{ 2444{
2445public: 2445public:
2446 LLEstateChangeInfoResponder(void* userdata) : mpPanel((LLPanelEstateInfo*)userdata) {}; 2446 LLEstateChangeInfoResponder(void* userdata) : mpPanel((LLPanelEstateInfo*)userdata) {};
2447 2447
2448 // if we get a normal response, handle it here 2448 // if we get a normal response, handle it here
2449 virtual void result(const LLSD& content) 2449 virtual void result(const LLSD& content)
2450 { 2450 {
2451 // refresh the panel from the database 2451 // refresh the panel from the database
2452 mpPanel->refresh(); 2452 mpPanel->refresh();
2453 } 2453 }
2454 2454
2455 // if we get an error response 2455 // if we get an error response
2456 virtual void error(U32 status, const std::string& reason) 2456 virtual void error(U32 status, const std::string& reason)
2457 { 2457 {
2458 llinfos << "LLEstateChangeInfoResponder::error " 2458 llinfos << "LLEstateChangeInfoResponder::error "
2459 << status << ": " << reason << llendl; 2459 << status << ": " << reason << llendl;
2460 } 2460 }
2461private: 2461private:
2462 LLPanelEstateInfo* mpPanel; 2462 LLPanelEstateInfo* mpPanel;
2463}; 2463};
2464 2464
2465// tries to send estate info using a cap; returns true if it succeeded 2465// tries to send estate info using a cap; returns true if it succeeded
2466bool LLPanelEstateInfo::commitEstateInfoCaps() 2466bool LLPanelEstateInfo::commitEstateInfoCaps()
2467{ 2467{
2468 std::string url = gAgent.getRegion()->getCapability("EstateChangeInfo"); 2468 std::string url = gAgent.getRegion()->getCapability("EstateChangeInfo");
2469 2469
2470 if (url.empty()) 2470 if (url.empty())
2471 { 2471 {
2472 // whoops, couldn't find the cap, so bail out 2472 // whoops, couldn't find the cap, so bail out
2473 return false; 2473 return false;
2474 } 2474 }
2475 2475
2476 LLSD body; 2476 LLSD body;
2477 body["estate_name"] = getEstateName(); 2477 body["estate_name"] = getEstateName();
2478 2478
2479 body["is_externally_visible"] = childGetValue("externally_visible_check").asBoolean(); 2479 body["is_externally_visible"] = childGetValue("externally_visible_check").asBoolean();
2480 body["allow_direct_teleport"] = childGetValue("allow_direct_teleport").asBoolean(); 2480 body["allow_direct_teleport"] = childGetValue("allow_direct_teleport").asBoolean();
2481 body["is_sun_fixed" ] = childGetValue("fixed_sun_check").asBoolean(); 2481 body["is_sun_fixed" ] = childGetValue("fixed_sun_check").asBoolean();
2482 body["deny_anonymous" ] = childGetValue("limit_payment").asBoolean(); 2482 body["deny_anonymous" ] = childGetValue("limit_payment").asBoolean();
2483 body["deny_age_unverified" ] = childGetValue("limit_age_verified").asBoolean(); 2483 body["deny_age_unverified" ] = childGetValue("limit_age_verified").asBoolean();
2484 body["allow_voice_chat" ] = childGetValue("voice_chat_check").asBoolean(); 2484 body["allow_voice_chat" ] = childGetValue("voice_chat_check").asBoolean();
2485 body["invoice" ] = LLFloaterRegionInfo::getLastInvoice(); 2485 body["invoice" ] = LLFloaterRegionInfo::getLastInvoice();
2486 2486
2487 // block fly is in estate database but not in estate UI, so we're not supporting it 2487 // block fly is in estate database but not in estate UI, so we're not supporting it
2488 //body["block_fly" ] = childGetValue("").asBoolean(); 2488 //body["block_fly" ] = childGetValue("").asBoolean();
2489 2489
2490 F32 sun_hour = getSunHour(); 2490 F32 sun_hour = getSunHour();
2491 if (childGetValue("use_global_time_check").asBoolean()) 2491 if (childGetValue("use_global_time_check").asBoolean())
2492 { 2492 {
2493 sun_hour = 0.f; // 0 = global time 2493 sun_hour = 0.f; // 0 = global time
2494 } 2494 }
2495 body["sun_hour"] = sun_hour; 2495 body["sun_hour"] = sun_hour;
2496 2496
2497 body["owner_abuse_email"] = childGetValue("abuse_email_address").asString(); 2497 body["owner_abuse_email"] = childGetValue("abuse_email_address").asString();
2498 2498
2499 // we use a responder so that we can re-get the data after committing to the database 2499 // we use a responder so that we can re-get the data after committing to the database
2500 LLHTTPClient::post(url, body, new LLEstateChangeInfoResponder((void*)this)); 2500 LLHTTPClient::post(url, body, new LLEstateChangeInfoResponder((void*)this));
2501 return true; 2501 return true;
2502} 2502}
2503 2503
2504/* This is the old way of doing things, is deprecated, and should be 2504/* This is the old way of doing things, is deprecated, and should be
2505 deleted when the dataserver model can be removed */ 2505 deleted when the dataserver model can be removed */
2506// key = "estatechangeinfo" 2506// key = "estatechangeinfo"
2507// strings[0] = str(estate_id) (added by simulator before relay - not here) 2507// strings[0] = str(estate_id) (added by simulator before relay - not here)
2508// strings[1] = estate_name 2508// strings[1] = estate_name
2509// strings[2] = str(estate_flags) 2509// strings[2] = str(estate_flags)
2510// strings[3] = str((S32)(sun_hour * 1024.f)) 2510// strings[3] = str((S32)(sun_hour * 1024.f))
2511void LLPanelEstateInfo::commitEstateInfoDataserver() 2511void LLPanelEstateInfo::commitEstateInfoDataserver()
2512{ 2512{
2513 LLMessageSystem* msg = gMessageSystem; 2513 LLMessageSystem* msg = gMessageSystem;
2514 msg->newMessage("EstateOwnerMessage"); 2514 msg->newMessage("EstateOwnerMessage");
2515 msg->nextBlockFast(_PREHASH_AgentData); 2515 msg->nextBlockFast(_PREHASH_AgentData);
2516 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); 2516 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
2517 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); 2517 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
2518 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used 2518 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
2519 2519
2520 msg->nextBlock("MethodData"); 2520 msg->nextBlock("MethodData");
2521 msg->addString("Method", "estatechangeinfo"); 2521 msg->addString("Method", "estatechangeinfo");
2522 msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice()); 2522 msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
2523 2523
2524 msg->nextBlock("ParamList"); 2524 msg->nextBlock("ParamList");
2525 msg->addString("Parameter", getEstateName()); 2525 msg->addString("Parameter", getEstateName());
2526 2526
2527 std::string buffer; 2527 std::string buffer;
2528 buffer = llformat("%u", computeEstateFlags()); 2528 buffer = llformat("%u", computeEstateFlags());
2529 msg->nextBlock("ParamList"); 2529 msg->nextBlock("ParamList");
2530 msg->addString("Parameter", buffer); 2530 msg->addString("Parameter", buffer);
2531 2531
2532 F32 sun_hour = getSunHour(); 2532 F32 sun_hour = getSunHour();
2533 if (childGetValue("use_global_time_check").asBoolean()) 2533 if (childGetValue("use_global_time_check").asBoolean())
2534 { 2534 {
2535 sun_hour = 0.f; // 0 = global time 2535 sun_hour = 0.f; // 0 = global time
2536 } 2536 }
2537 2537
2538 buffer = llformat("%d", (S32)(sun_hour*1024.0f)); 2538 buffer = llformat("%d", (S32)(sun_hour*1024.0f));
2539 msg->nextBlock("ParamList"); 2539 msg->nextBlock("ParamList");
2540 msg->addString("Parameter", buffer); 2540 msg->addString("Parameter", buffer);
2541 2541
2542 gAgent.sendMessage(); 2542 gAgent.sendMessage();
2543} 2543}
2544 2544
2545void LLPanelEstateInfo::setEstateFlags(U32 flags) 2545void LLPanelEstateInfo::setEstateFlags(U32 flags)
2546{ 2546{
2547 childSetValue("externally_visible_check", LLSD(flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE) ); 2547 childSetValue("externally_visible_check", LLSD(flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE) );
2548 childSetValue("fixed_sun_check", LLSD(flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE) ); 2548 childSetValue("fixed_sun_check", LLSD(flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE) );
2549 childSetValue( 2549 childSetValue(
2550 "voice_chat_check", 2550 "voice_chat_check",
2551 LLSD(flags & REGION_FLAGS_ALLOW_VOICE ? TRUE : FALSE)); 2551 LLSD(flags & REGION_FLAGS_ALLOW_VOICE ? TRUE : FALSE));
2552 childSetValue("allow_direct_teleport", LLSD(flags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT ? TRUE : FALSE) ); 2552 childSetValue("allow_direct_teleport", LLSD(flags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT ? TRUE : FALSE) );
2553 childSetValue("limit_payment", LLSD(flags & REGION_FLAGS_DENY_ANONYMOUS ? TRUE : FALSE) ); 2553 childSetValue("limit_payment", LLSD(flags & REGION_FLAGS_DENY_ANONYMOUS ? TRUE : FALSE) );
2554 childSetValue("limit_age_verified", LLSD(flags & REGION_FLAGS_DENY_AGEUNVERIFIED ? TRUE : FALSE) ); 2554 childSetValue("limit_age_verified", LLSD(flags & REGION_FLAGS_DENY_AGEUNVERIFIED ? TRUE : FALSE) );
2555 2555
2556 refresh(); 2556 refresh();
2557} 2557}
2558 2558
2559U32 LLPanelEstateInfo::computeEstateFlags() 2559U32 LLPanelEstateInfo::computeEstateFlags()
2560{ 2560{
2561 U32 flags = 0; 2561 U32 flags = 0;
2562 2562
2563 if (childGetValue("externally_visible_check").asBoolean()) 2563 if (childGetValue("externally_visible_check").asBoolean())
2564 { 2564 {
2565 flags |= REGION_FLAGS_EXTERNALLY_VISIBLE; 2565 flags |= REGION_FLAGS_EXTERNALLY_VISIBLE;
2566 } 2566 }
2567 2567
2568 if ( childGetValue("voice_chat_check").asBoolean() ) 2568 if ( childGetValue("voice_chat_check").asBoolean() )
2569 { 2569 {
2570 flags |= REGION_FLAGS_ALLOW_VOICE; 2570 flags |= REGION_FLAGS_ALLOW_VOICE;
2571 } 2571 }
2572 2572
2573 if (childGetValue("allow_direct_teleport").asBoolean()) 2573 if (childGetValue("allow_direct_teleport").asBoolean())
2574 { 2574 {
2575 flags |= REGION_FLAGS_ALLOW_DIRECT_TELEPORT; 2575 flags |= REGION_FLAGS_ALLOW_DIRECT_TELEPORT;
2576 } 2576 }
2577 2577
2578 if (childGetValue("fixed_sun_check").asBoolean()) 2578 if (childGetValue("fixed_sun_check").asBoolean())
2579 { 2579 {
2580 flags |= REGION_FLAGS_SUN_FIXED; 2580 flags |= REGION_FLAGS_SUN_FIXED;
2581 } 2581 }
2582 2582
2583 if (childGetValue("limit_payment").asBoolean()) 2583 if (childGetValue("limit_payment").asBoolean())
2584 { 2584 {
2585 flags |= REGION_FLAGS_DENY_ANONYMOUS; 2585 flags |= REGION_FLAGS_DENY_ANONYMOUS;
2586 } 2586 }
2587 2587
2588 if (childGetValue("limit_age_verified").asBoolean()) 2588 if (childGetValue("limit_age_verified").asBoolean())
2589 { 2589 {
2590 flags |= REGION_FLAGS_DENY_AGEUNVERIFIED; 2590 flags |= REGION_FLAGS_DENY_AGEUNVERIFIED;
2591 } 2591 }
2592 2592
2593 2593
2594 return flags; 2594 return flags;
2595} 2595}
2596 2596
2597BOOL LLPanelEstateInfo::getGlobalTime() 2597BOOL LLPanelEstateInfo::getGlobalTime()
2598{ 2598{
2599 return childGetValue("use_global_time_check").asBoolean(); 2599 return childGetValue("use_global_time_check").asBoolean();
2600} 2600}
2601 2601
2602void LLPanelEstateInfo::setGlobalTime(bool b) 2602void LLPanelEstateInfo::setGlobalTime(bool b)
2603{ 2603{
2604 childSetValue("use_global_time_check", LLSD(b)); 2604 childSetValue("use_global_time_check", LLSD(b));
2605 childSetEnabled("fixed_sun_check", LLSD(!b)); 2605 childSetEnabled("fixed_sun_check", LLSD(!b));
2606 childSetEnabled("sun_hour_slider", LLSD(!b)); 2606 childSetEnabled("sun_hour_slider", LLSD(!b));
2607 if (b) 2607 if (b)
2608 { 2608 {
2609 childSetValue("sun_hour_slider", LLSD(0.f)); 2609 childSetValue("sun_hour_slider", LLSD(0.f));
2610 } 2610 }
2611} 2611}
2612 2612
2613 2613
2614BOOL LLPanelEstateInfo::getFixedSun() 2614BOOL LLPanelEstateInfo::getFixedSun()
2615{ 2615{
2616 return childGetValue("fixed_sun_check").asBoolean(); 2616 return childGetValue("fixed_sun_check").asBoolean();
2617} 2617}
2618 2618
2619void LLPanelEstateInfo::setSunHour(F32 sun_hour) 2619void LLPanelEstateInfo::setSunHour(F32 sun_hour)
2620{ 2620{
2621 if(sun_hour < 6.0f) 2621 if(sun_hour < 6.0f)
2622 { 2622 {
2623 sun_hour = 24.0f + sun_hour; 2623 sun_hour = 24.0f + sun_hour;
2624 } 2624 }
2625 childSetValue("sun_hour_slider", LLSD(sun_hour)); 2625 childSetValue("sun_hour_slider", LLSD(sun_hour));
2626} 2626}
2627 2627
2628F32 LLPanelEstateInfo::getSunHour() 2628F32 LLPanelEstateInfo::getSunHour()
2629{ 2629{
2630 if (childIsEnabled("sun_hour_slider")) 2630 if (childIsEnabled("sun_hour_slider"))
2631 { 2631 {
2632 return (F32)childGetValue("sun_hour_slider").asReal(); 2632 return (F32)childGetValue("sun_hour_slider").asReal();
2633 } 2633 }
2634 return 0.f; 2634 return 0.f;
2635} 2635}
2636 2636
2637const std::string LLPanelEstateInfo::getEstateName() const 2637const std::string LLPanelEstateInfo::getEstateName() const
2638{ 2638{
2639 return childGetValue("estate_name").asString(); 2639 return childGetValue("estate_name").asString();
2640} 2640}
2641 2641
2642void LLPanelEstateInfo::setEstateName(const std::string& name) 2642void LLPanelEstateInfo::setEstateName(const std::string& name)
2643{ 2643{
2644 childSetValue("estate_name", LLSD(name)); 2644 childSetValue("estate_name", LLSD(name));
2645} 2645}
2646 2646
2647const std::string LLPanelEstateInfo::getOwnerName() const 2647const std::string LLPanelEstateInfo::getOwnerName() const
2648{ 2648{
2649 return childGetValue("estate_owner").asString(); 2649 return childGetValue("estate_owner").asString();
2650} 2650}
2651 2651
2652void LLPanelEstateInfo::setOwnerName(const std::string& name) 2652void LLPanelEstateInfo::setOwnerName(const std::string& name)
2653{ 2653{
2654 childSetValue("estate_owner", LLSD(name)); 2654 childSetValue("estate_owner", LLSD(name));
2655} 2655}
2656 2656
2657const std::string LLPanelEstateInfo::getAbuseEmailAddress() const 2657const std::string LLPanelEstateInfo::getAbuseEmailAddress() const
2658{ 2658{
2659 return childGetValue("abuse_email_address").asString(); 2659 return childGetValue("abuse_email_address").asString();
2660} 2660}
2661 2661
2662void LLPanelEstateInfo::setAbuseEmailAddress(const std::string& address) 2662void LLPanelEstateInfo::setAbuseEmailAddress(const std::string& address)
2663{ 2663{
2664 childSetValue("abuse_email_address", LLSD(address)); 2664 childSetValue("abuse_email_address", LLSD(address));
2665} 2665}
2666 2666
2667void LLPanelEstateInfo::setAccessAllowedEnabled(bool enable_agent, 2667void LLPanelEstateInfo::setAccessAllowedEnabled(bool enable_agent,
2668 bool enable_group, 2668 bool enable_group,
2669 bool enable_ban) 2669 bool enable_ban)
2670{ 2670{
2671 childSetEnabled("allow_resident_label", enable_agent); 2671 childSetEnabled("allow_resident_label", enable_agent);
2672 childSetEnabled("allowed_avatar_name_list", enable_agent); 2672 childSetEnabled("allowed_avatar_name_list", enable_agent);
2673 childSetVisible("allowed_avatar_name_list", enable_agent); 2673 childSetVisible("allowed_avatar_name_list", enable_agent);
2674 childSetEnabled("add_allowed_avatar_btn", enable_agent); 2674 childSetEnabled("add_allowed_avatar_btn", enable_agent);
2675 childSetEnabled("remove_allowed_avatar_btn", enable_agent); 2675 childSetEnabled("remove_allowed_avatar_btn", enable_agent);
2676 2676
2677 // Groups 2677 // Groups
2678 childSetEnabled("allow_group_label", enable_group); 2678 childSetEnabled("allow_group_label", enable_group);
2679 childSetEnabled("allowed_group_name_list", enable_group); 2679 childSetEnabled("allowed_group_name_list", enable_group);
2680 childSetVisible("allowed_group_name_list", enable_group); 2680 childSetVisible("allowed_group_name_list", enable_group);
2681 childSetEnabled("add_allowed_group_btn", enable_group); 2681 childSetEnabled("add_allowed_group_btn", enable_group);
2682 childSetEnabled("remove_allowed_group_btn", enable_group); 2682 childSetEnabled("remove_allowed_group_btn", enable_group);
2683 2683
2684 // Ban 2684 // Ban
2685 childSetEnabled("ban_resident_label", enable_ban); 2685 childSetEnabled("ban_resident_label", enable_ban);
2686 childSetEnabled("banned_avatar_name_list", enable_ban); 2686 childSetEnabled("banned_avatar_name_list", enable_ban);
2687 childSetVisible("banned_avatar_name_list", enable_ban); 2687 childSetVisible("banned_avatar_name_list", enable_ban);
2688 childSetEnabled("add_banned_avatar_btn", enable_ban); 2688 childSetEnabled("add_banned_avatar_btn", enable_ban);
2689 childSetEnabled("remove_banned_avatar_btn", enable_ban); 2689 childSetEnabled("remove_banned_avatar_btn", enable_ban);
2690 2690
2691 // Update removal buttons if needed 2691 // Update removal buttons if needed
2692 if (enable_agent) 2692 if (enable_agent)
2693 { 2693 {
2694 checkRemovalButton("allowed_avatar_name_list"); 2694 checkRemovalButton("allowed_avatar_name_list");
2695 } 2695 }
2696 2696
2697 if (enable_group) 2697 if (enable_group)
2698 { 2698 {
2699 checkRemovalButton("allowed_group_name_list"); 2699 checkRemovalButton("allowed_group_name_list");
2700 } 2700 }
2701 2701
2702 if (enable_ban) 2702 if (enable_ban)
2703 { 2703 {
2704 checkRemovalButton("banned_avatar_name_list"); 2704 checkRemovalButton("banned_avatar_name_list");
2705 } 2705 }
2706} 2706}
2707 2707
2708// static 2708// static
2709void LLPanelEstateInfo::callbackCacheName( 2709void LLPanelEstateInfo::callbackCacheName(
2710 const LLUUID& id, 2710 const LLUUID& id,
2711 const std::string& first, 2711 const std::string& first,
2712 const std::string& last, 2712 const std::string& last,
2713 BOOL is_group, 2713 BOOL is_group,
2714 void*) 2714 void*)
2715{ 2715{
2716 LLPanelEstateInfo* self = LLFloaterRegionInfo::getPanelEstate(); 2716 LLPanelEstateInfo* self = LLFloaterRegionInfo::getPanelEstate();
2717 if (!self) return; 2717 if (!self) return;
2718 2718
2719 std::string name; 2719 std::string name;
2720 2720
2721 if (id.isNull()) 2721 if (id.isNull())
2722 { 2722 {
2723 name = "(none)"; 2723 name = "(none)";
2724 } 2724 }
2725 else 2725 else
2726 { 2726 {
2727 name = first + " " + last; 2727 name = first + " " + last;
2728 } 2728 }
2729 2729
2730 self->setOwnerName(name); 2730 self->setOwnerName(name);
2731} 2731}
2732 2732
2733void LLPanelEstateInfo::clearAccessLists() 2733void LLPanelEstateInfo::clearAccessLists()
2734{ 2734{
2735 LLNameListCtrl* name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list"); 2735 LLNameListCtrl* name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list");
2736 if (name_list) 2736 if (name_list)
2737 { 2737 {
2738 name_list->deleteAllItems(); 2738 name_list->deleteAllItems();
2739 } 2739 }
2740 2740
2741 name_list = getChild<LLNameListCtrl>("banned_avatar_name_list"); 2741 name_list = getChild<LLNameListCtrl>("banned_avatar_name_list");
2742 if (name_list) 2742 if (name_list)
2743 { 2743 {
2744 name_list->deleteAllItems(); 2744 name_list->deleteAllItems();
2745 } 2745 }
2746} 2746}
2747 2747
2748// enables/disables the "remove" button for the various allow/ban lists 2748// enables/disables the "remove" button for the various allow/ban lists
2749BOOL LLPanelEstateInfo::checkRemovalButton(std::string name) 2749BOOL LLPanelEstateInfo::checkRemovalButton(std::string name)
2750{ 2750{
2751 std::string btn_name = ""; 2751 std::string btn_name = "";
2752 if (name == "allowed_avatar_name_list") 2752 if (name == "allowed_avatar_name_list")
2753 { 2753 {
2754 btn_name = "remove_allowed_avatar_btn"; 2754 btn_name = "remove_allowed_avatar_btn";
2755 } 2755 }
2756 else if (name == "allowed_group_name_list") 2756 else if (name == "allowed_group_name_list")
2757 { 2757 {
2758 btn_name = "remove_allowed_group_btn"; 2758 btn_name = "remove_allowed_group_btn";
2759 } 2759 }
2760 else if (name == "banned_avatar_name_list") 2760 else if (name == "banned_avatar_name_list")
2761 { 2761 {
2762 btn_name = "remove_banned_avatar_btn"; 2762 btn_name = "remove_banned_avatar_btn";
2763 } 2763 }
2764 else if (name == "estate_manager_name_list") 2764 else if (name == "estate_manager_name_list")
2765 { 2765 {
2766 //ONLY OWNER CAN ADD /DELET ESTATE MANAGER 2766 //ONLY OWNER CAN ADD /DELET ESTATE MANAGER
2767 LLViewerRegion* region = gAgent.getRegion(); 2767 LLViewerRegion* region = gAgent.getRegion();
2768 if (region && (region->getOwner() == gAgent.getID())) 2768 if (region && (region->getOwner() == gAgent.getID()))
2769 { 2769 {
2770 btn_name = "remove_estate_manager_btn"; 2770 btn_name = "remove_estate_manager_btn";
2771 } 2771 }
2772 } 2772 }
2773 2773
2774 // enable the remove button if something is selected 2774 // enable the remove button if something is selected
2775 LLNameListCtrl* name_list = getChild<LLNameListCtrl>(name); 2775 LLNameListCtrl* name_list = getChild<LLNameListCtrl>(name);
2776 childSetEnabled(btn_name, name_list && name_list->getFirstSelected() ? TRUE : FALSE); 2776 childSetEnabled(btn_name, name_list && name_list->getFirstSelected() ? TRUE : FALSE);
2777 2777
2778 return (btn_name != ""); 2778 return (btn_name != "");
2779} 2779}
2780 2780
2781BOOL LLPanelEstateInfo::checkSunHourSlider(LLUICtrl* child_ctrl) 2781BOOL LLPanelEstateInfo::checkSunHourSlider(LLUICtrl* child_ctrl)
2782{ 2782{
2783 BOOL found_child_ctrl = FALSE; 2783 BOOL found_child_ctrl = FALSE;
2784 if (child_ctrl->getName() == "sun_hour_slider") 2784 if (child_ctrl->getName() == "sun_hour_slider")
2785 { 2785 {
2786 enableButton("apply_btn"); 2786 enableButton("apply_btn");
2787 found_child_ctrl = TRUE; 2787 found_child_ctrl = TRUE;
2788 } 2788 }
2789 return found_child_ctrl; 2789 return found_child_ctrl;
2790} 2790}
2791 2791
2792// static 2792// static
2793void LLPanelEstateInfo::onClickMessageEstate(void* userdata) 2793void LLPanelEstateInfo::onClickMessageEstate(void* userdata)
2794{ 2794{
2795 llinfos << "LLPanelEstateInfo::onClickMessageEstate" << llendl; 2795 llinfos << "LLPanelEstateInfo::onClickMessageEstate" << llendl;
2796 LLNotifications::instance().add("MessageEstate", LLSD(), LLSD(), boost::bind(&LLPanelEstateInfo::onMessageCommit, (LLPanelEstateInfo*)userdata, _1, _2)); 2796 LLNotifications::instance().add("MessageEstate", LLSD(), LLSD(), boost::bind(&LLPanelEstateInfo::onMessageCommit, (LLPanelEstateInfo*)userdata, _1, _2));
2797} 2797}
2798 2798
2799bool LLPanelEstateInfo::onMessageCommit(const LLSD& notification, const LLSD& response) 2799bool LLPanelEstateInfo::onMessageCommit(const LLSD& notification, const LLSD& response)
2800{ 2800{
2801 S32 option = LLNotification::getSelectedOption(notification, response); 2801 S32 option = LLNotification::getSelectedOption(notification, response);
2802 std::string text = response["message"].asString(); 2802 std::string text = response["message"].asString();
2803 if(option != 0) return false; 2803 if(option != 0) return false;
2804 if(text.empty()) return false; 2804 if(text.empty()) return false;
2805 llinfos << "Message to everyone: " << text << llendl; 2805 llinfos << "Message to everyone: " << text << llendl;
2806 strings_t strings; 2806 strings_t strings;
2807 //integers_t integers; 2807 //integers_t integers;
2808 std::string name; 2808 std::string name;
2809 gAgent.buildFullname(name); 2809 gAgent.buildFullname(name);
2810 strings.push_back(strings_t::value_type(name)); 2810 strings.push_back(strings_t::value_type(name));
2811 strings.push_back(strings_t::value_type(text)); 2811 strings.push_back(strings_t::value_type(text));
2812 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 2812 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
2813 sendEstateOwnerMessage(gMessageSystem, "instantmessage", invoice, strings); 2813 sendEstateOwnerMessage(gMessageSystem, "instantmessage", invoice, strings);
2814 return false; 2814 return false;
2815} 2815}
2816 2816
2817LLPanelEstateCovenant::LLPanelEstateCovenant() 2817LLPanelEstateCovenant::LLPanelEstateCovenant()
2818: mCovenantID(LLUUID::null) 2818: mCovenantID(LLUUID::null)
2819{ 2819{
2820} 2820}
2821 2821
2822// virtual 2822// virtual
2823bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region) 2823bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region)
2824{ 2824{
2825 LLTextBox* region_name = getChild<LLTextBox>("region_name_text"); 2825 LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
2826 if (region_name) 2826 if (region_name)
2827 { 2827 {
2828 region_name->setText(region->getName()); 2828 region_name->setText(region->getName());
2829 } 2829 }
2830 2830
2831 LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause"); 2831 LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
2832 if (resellable_clause) 2832 if (resellable_clause)
2833 { 2833 {
2834 if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL) 2834 if (region->getRegionFlags() & REGION_FLAGS_BLOCK_LAND_RESELL)
2835 { 2835 {
2836 resellable_clause->setText(getString("can_not_resell")); 2836 resellable_clause->setText(getString("can_not_resell"));
2837 } 2837 }
2838 else 2838 else
2839 { 2839 {
2840 resellable_clause->setText(getString("can_resell")); 2840 resellable_clause->setText(getString("can_resell"));
2841 } 2841 }
2842 } 2842 }
2843 2843
2844 LLTextBox* changeable_clause = getChild<LLTextBox>("changeable_clause"); 2844 LLTextBox* changeable_clause = getChild<LLTextBox>("changeable_clause");
2845 if (changeable_clause) 2845 if (changeable_clause)
2846 { 2846 {
2847 if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES) 2847 if (region->getRegionFlags() & REGION_FLAGS_ALLOW_PARCEL_CHANGES)
2848 { 2848 {
2849 changeable_clause->setText(getString("can_change")); 2849 changeable_clause->setText(getString("can_change"));
2850 } 2850 }
2851 else 2851 else
2852 { 2852 {
2853 changeable_clause->setText(getString("can_not_change")); 2853 changeable_clause->setText(getString("can_not_change"));
2854 } 2854 }
2855 } 2855 }
2856 2856
2857 LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text"); 2857 LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");
2858 if (region_maturity) 2858 if (region_maturity)
2859 { 2859 {
2860 region_maturity->setText(region->getSimAccessString()); 2860 region_maturity->setText(region->getSimAccessString());
2861 } 2861 }
2862 2862
2863 LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text"); 2863 LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");
2864 if (region_landtype) 2864 if (region_landtype)
2865 { 2865 {
2866 region_landtype->setText(region->getSimProductName()); 2866 region_landtype->setText(region->getSimProductName());
2867 } 2867 }
2868 2868
2869 2869
2870 // let the parent class handle the general data collection. 2870 // let the parent class handle the general data collection.
2871 bool rv = LLPanelRegionInfo::refreshFromRegion(region); 2871 bool rv = LLPanelRegionInfo::refreshFromRegion(region);
2872 LLMessageSystem *msg = gMessageSystem; 2872 LLMessageSystem *msg = gMessageSystem;
2873 msg->newMessage("EstateCovenantRequest"); 2873 msg->newMessage("EstateCovenantRequest");
2874 msg->nextBlockFast(_PREHASH_AgentData); 2874 msg->nextBlockFast(_PREHASH_AgentData);
2875 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); 2875 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
2876 msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); 2876 msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
2877 msg->sendReliable(region->getHost()); 2877 msg->sendReliable(region->getHost());
2878 return rv; 2878 return rv;
2879} 2879}
2880 2880
2881// virtual 2881// virtual
2882bool LLPanelEstateCovenant::estateUpdate(LLMessageSystem* msg) 2882bool LLPanelEstateCovenant::estateUpdate(LLMessageSystem* msg)
2883{ 2883{
2884 llinfos << "LLPanelEstateCovenant::estateUpdate()" << llendl; 2884 llinfos << "LLPanelEstateCovenant::estateUpdate()" << llendl;
2885 return true; 2885 return true;
2886} 2886}
2887 2887
2888// virtual 2888// virtual
2889BOOL LLPanelEstateCovenant::postBuild() 2889BOOL LLPanelEstateCovenant::postBuild()
2890{ 2890{
2891 initHelpBtn("covenant_help", "HelpEstateCovenant"); 2891 initHelpBtn("covenant_help", "HelpEstateCovenant");
2892 mEstateNameText = getChild<LLTextBox>("estate_name_text"); 2892 mEstateNameText = getChild<LLTextBox>("estate_name_text");
2893 mEstateOwnerText = getChild<LLTextBox>("estate_owner_text"); 2893 mEstateOwnerText = getChild<LLTextBox>("estate_owner_text");
2894 mLastModifiedText = getChild<LLTextBox>("covenant_timestamp_text"); 2894 mLastModifiedText = getChild<LLTextBox>("covenant_timestamp_text");
2895 mEditor = getChild<LLViewerTextEditor>("covenant_editor"); 2895 mEditor = getChild<LLViewerTextEditor>("covenant_editor");
2896 if (mEditor) mEditor->setHandleEditKeysDirectly(TRUE); 2896 if (mEditor) mEditor->setHandleEditKeysDirectly(TRUE);
2897 LLButton* reset_button = getChild<LLButton>("reset_covenant"); 2897 LLButton* reset_button = getChild<LLButton>("reset_covenant");
2898 reset_button->setEnabled(gAgent.canManageEstate()); 2898 reset_button->setEnabled(gAgent.canManageEstate());
2899 reset_button->setClickedCallback(LLPanelEstateCovenant::resetCovenantID, NULL); 2899 reset_button->setClickedCallback(LLPanelEstateCovenant::resetCovenantID, NULL);
2900 2900
2901 return LLPanelRegionInfo::postBuild(); 2901 return LLPanelRegionInfo::postBuild();
2902} 2902}
2903 2903
2904// virtual 2904// virtual
2905void LLPanelEstateCovenant::updateChild(LLUICtrl* child_ctrl) 2905void LLPanelEstateCovenant::updateChild(LLUICtrl* child_ctrl)
2906{ 2906{
2907} 2907}
2908 2908
2909// virtual 2909// virtual
2910BOOL LLPanelEstateCovenant::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, 2910BOOL LLPanelEstateCovenant::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
2911 EDragAndDropType cargo_type, 2911 EDragAndDropType cargo_type,
2912 void* cargo_data, 2912 void* cargo_data,
2913 EAcceptance* accept, 2913 EAcceptance* accept,
2914 std::string& tooltip_msg) 2914 std::string& tooltip_msg)
2915{ 2915{
2916 LLInventoryItem* item = (LLInventoryItem*)cargo_data; 2916 LLInventoryItem* item = (LLInventoryItem*)cargo_data;
2917 2917
2918 if (!gAgent.canManageEstate()) 2918 if (!gAgent.canManageEstate())
2919 { 2919 {
2920 *accept = ACCEPT_NO; 2920 *accept = ACCEPT_NO;
2921 return TRUE; 2921 return TRUE;
2922 } 2922 }
2923 2923
2924 switch(cargo_type) 2924 switch(cargo_type)
2925 { 2925 {
2926 case DAD_NOTECARD: 2926 case DAD_NOTECARD:
2927 *accept = ACCEPT_YES_COPY_SINGLE; 2927 *accept = ACCEPT_YES_COPY_SINGLE;
2928 if (item && drop) 2928 if (item && drop)
2929 { 2929 {
2930 LLSD payload; 2930 LLSD payload;
2931 payload["item_id"] = item->getUUID(); 2931 payload["item_id"] = item->getUUID();
2932 LLNotifications::instance().add("EstateChangeCovenant", LLSD(), payload, 2932 LLNotifications::instance().add("EstateChangeCovenant", LLSD(), payload,
2933 LLPanelEstateCovenant::confirmChangeCovenantCallback); 2933 LLPanelEstateCovenant::confirmChangeCovenantCallback);
2934 } 2934 }
2935 break; 2935 break;
2936 default: 2936 default:
2937 *accept = ACCEPT_NO; 2937 *accept = ACCEPT_NO;
2938 break; 2938 break;
2939 } 2939 }
2940 2940
2941 return TRUE; 2941 return TRUE;
2942} 2942}
2943 2943
2944// static 2944// static
2945bool LLPanelEstateCovenant::confirmChangeCovenantCallback(const LLSD& notification, const LLSD& response) 2945bool LLPanelEstateCovenant::confirmChangeCovenantCallback(const LLSD& notification, const LLSD& response)
2946{ 2946{
2947 S32 option = LLNotification::getSelectedOption(notification, response); 2947 S32 option = LLNotification::getSelectedOption(notification, response);
2948 LLInventoryItem* item = gInventory.getItem(notification["payload"]["item_id"].asUUID()); 2948 LLInventoryItem* item = gInventory.getItem(notification["payload"]["item_id"].asUUID());
2949 LLPanelEstateCovenant* self = LLFloaterRegionInfo::getPanelCovenant(); 2949 LLPanelEstateCovenant* self = LLFloaterRegionInfo::getPanelCovenant();
2950 2950
2951 if (!item || !self) return false; 2951 if (!item || !self) return false;
2952 2952
2953 switch(option) 2953 switch(option)
2954 { 2954 {
2955 case 0: 2955 case 0:
2956 self->loadInvItem(item); 2956 self->loadInvItem(item);
2957 break; 2957 break;
2958 default: 2958 default:
2959 break; 2959 break;
2960 } 2960 }
2961 return false; 2961 return false;
2962} 2962}
2963 2963
2964// static 2964// static
2965void LLPanelEstateCovenant::resetCovenantID(void* userdata) 2965void LLPanelEstateCovenant::resetCovenantID(void* userdata)
2966{ 2966{
2967 LLNotifications::instance().add("EstateChangeCovenant", LLSD(), LLSD(), confirmResetCovenantCallback); 2967 LLNotifications::instance().add("EstateChangeCovenant", LLSD(), LLSD(), confirmResetCovenantCallback);
2968} 2968}
2969 2969
2970// static 2970// static
2971bool LLPanelEstateCovenant::confirmResetCovenantCallback(const LLSD& notification, const LLSD& response) 2971bool LLPanelEstateCovenant::confirmResetCovenantCallback(const LLSD& notification, const LLSD& response)
2972{ 2972{
2973 LLPanelEstateCovenant* self = LLFloaterRegionInfo::getPanelCovenant(); 2973 LLPanelEstateCovenant* self = LLFloaterRegionInfo::getPanelCovenant();
2974 if (!self) return false; 2974 if (!self) return false;
2975 2975
2976 S32 option = LLNotification::getSelectedOption(notification, response); 2976 S32 option = LLNotification::getSelectedOption(notification, response);
2977 switch(option) 2977 switch(option)
2978 { 2978 {
2979 case 0: 2979 case 0:
2980 self->loadInvItem(NULL); 2980 self->loadInvItem(NULL);
2981 break; 2981 break;
2982 default: 2982 default:
2983 break; 2983 break;
2984 } 2984 }
2985 return false; 2985 return false;
2986} 2986}
2987 2987
2988void LLPanelEstateCovenant::loadInvItem(LLInventoryItem *itemp) 2988void LLPanelEstateCovenant::loadInvItem(LLInventoryItem *itemp)
2989{ 2989{
2990 const BOOL high_priority = TRUE; 2990 const BOOL high_priority = TRUE;
2991 if (itemp) 2991 if (itemp)
2992 { 2992 {
2993 gAssetStorage->getInvItemAsset(gAgent.getRegionHost(), 2993 gAssetStorage->getInvItemAsset(gAgent.getRegionHost(),
2994 gAgent.getID(), 2994 gAgent.getID(),
2995 gAgent.getSessionID(), 2995 gAgent.getSessionID(),
2996 itemp->getPermissions().getOwner(), 2996 itemp->getPermissions().getOwner(),
2997 LLUUID::null, 2997 LLUUID::null,
2998 itemp->getUUID(), 2998 itemp->getUUID(),
2999 itemp->getAssetUUID(), 2999 itemp->getAssetUUID(),
3000 itemp->getType(), 3000 itemp->getType(),
3001 onLoadComplete, 3001 onLoadComplete,
3002 (void*)this, 3002 (void*)this,
3003 high_priority); 3003 high_priority);
3004 mAssetStatus = ASSET_LOADING; 3004 mAssetStatus = ASSET_LOADING;
3005 } 3005 }
3006 else 3006 else
3007 { 3007 {
3008 mAssetStatus = ASSET_LOADED; 3008 mAssetStatus = ASSET_LOADED;
3009 setCovenantTextEditor("There is no Covenant provided for this Estate."); 3009 setCovenantTextEditor("There is no Covenant provided for this Estate.");
3010 sendChangeCovenantID(LLUUID::null); 3010 sendChangeCovenantID(LLUUID::null);
3011 } 3011 }
3012} 3012}
3013 3013
3014// static 3014// static
3015void LLPanelEstateCovenant::onLoadComplete(LLVFS *vfs, 3015void LLPanelEstateCovenant::onLoadComplete(LLVFS *vfs,
3016 const LLUUID& asset_uuid, 3016 const LLUUID& asset_uuid,
3017 LLAssetType::EType type, 3017 LLAssetType::EType type,
3018 void* user_data, S32 status, LLExtStat ext_status) 3018 void* user_data, S32 status, LLExtStat ext_status)
3019{ 3019{
3020 llinfos << "LLPanelEstateCovenant::onLoadComplete()" << llendl; 3020 llinfos << "LLPanelEstateCovenant::onLoadComplete()" << llendl;
3021 LLPanelEstateCovenant* panelp = (LLPanelEstateCovenant*)user_data; 3021 LLPanelEstateCovenant* panelp = (LLPanelEstateCovenant*)user_data;
3022 if( panelp ) 3022 if( panelp )
3023 { 3023 {
3024 if(0 == status) 3024 if(0 == status)
3025 { 3025 {
3026 LLVFile file(vfs, asset_uuid, type, LLVFile::READ); 3026 LLVFile file(vfs, asset_uuid, type, LLVFile::READ);
3027 3027
3028 S32 file_length = file.getSize(); 3028 S32 file_length = file.getSize();
3029 3029
3030 char* buffer = new char[file_length+1]; 3030 char* buffer = new char[file_length+1];
3031 if (buffer == NULL) 3031 if (buffer == NULL)
3032 { 3032 {
3033 llerrs << "Memory Allocation Failed" << llendl; 3033 llerrs << "Memory Allocation Failed" << llendl;
3034 return; 3034 return;
3035 } 3035 }
3036 3036
3037 file.read((U8*)buffer, file_length); /* Flawfinder: ignore */ 3037 file.read((U8*)buffer, file_length); /* Flawfinder: ignore */
3038 // put a EOS at the end 3038 // put a EOS at the end
3039 buffer[file_length] = 0; 3039 buffer[file_length] = 0;
3040 3040
3041 if( (file_length > 19) && !strncmp( buffer, "Linden text version", 19 ) ) 3041 if( (file_length > 19) && !strncmp( buffer, "Linden text version", 19 ) )
3042 { 3042 {
3043 if( !panelp->mEditor->importBuffer( buffer, file_length+1 ) ) 3043 if( !panelp->mEditor->importBuffer( buffer, file_length+1 ) )
3044 { 3044 {
3045 llwarns << "Problem importing estate covenant." << llendl; 3045 llwarns << "Problem importing estate covenant." << llendl;
3046 LLNotifications::instance().add("ProblemImportingEstateCovenant"); 3046 LLNotifications::instance().add("ProblemImportingEstateCovenant");
3047 } 3047 }
3048 else 3048 else
3049 { 3049 {
3050 panelp->sendChangeCovenantID(asset_uuid); 3050 panelp->sendChangeCovenantID(asset_uuid);
3051 } 3051 }
3052 } 3052 }
3053 else 3053 else
3054 { 3054 {
3055 // Version 0 (just text, doesn't include version number) 3055 // Version 0 (just text, doesn't include version number)
3056 panelp->sendChangeCovenantID(asset_uuid); 3056 panelp->sendChangeCovenantID(asset_uuid);
3057 } 3057 }
3058 delete[] buffer; 3058 delete[] buffer;
3059 } 3059 }
3060 else 3060 else
3061 { 3061 {
3062 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED ); 3062 LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED );
3063 3063
3064 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status || 3064 if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ||
3065 LL_ERR_FILE_EMPTY == status) 3065 LL_ERR_FILE_EMPTY == status)
3066 { 3066 {
3067 LLNotifications::instance().add("MissingNotecardAssetID"); 3067 LLNotifications::instance().add("MissingNotecardAssetID");
3068 } 3068 }
3069 else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status) 3069 else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
3070 { 3070 {
3071 LLNotifications::instance().add("NotAllowedToViewNotecard"); 3071 LLNotifications::instance().add("NotAllowedToViewNotecard");
3072 } 3072 }
3073 else 3073 else
3074 { 3074 {
3075 LLNotifications::instance().add("UnableToLoadNotecardAsset"); 3075 LLNotifications::instance().add("UnableToLoadNotecardAsset");
3076 } 3076 }
3077 3077
3078 llwarns << "Problem loading notecard: " << status << llendl; 3078 llwarns << "Problem loading notecard: " << status << llendl;
3079 } 3079 }
3080 panelp->mAssetStatus = ASSET_LOADED; 3080 panelp->mAssetStatus = ASSET_LOADED;
3081 panelp->setCovenantID(asset_uuid); 3081 panelp->setCovenantID(asset_uuid);
3082 } 3082 }
3083} 3083}
3084 3084
3085// key = "estatechangecovenantid" 3085// key = "estatechangecovenantid"
3086// strings[0] = str(estate_id) (added by simulator before relay - not here) 3086// strings[0] = str(estate_id) (added by simulator before relay - not here)
3087// strings[1] = str(covenant_id) 3087// strings[1] = str(covenant_id)
3088void LLPanelEstateCovenant::sendChangeCovenantID(const LLUUID &asset_id) 3088void LLPanelEstateCovenant::sendChangeCovenantID(const LLUUID &asset_id)
3089{ 3089{
3090 if (asset_id != getCovenantID()) 3090 if (asset_id != getCovenantID())
3091 { 3091 {
3092 setCovenantID(asset_id); 3092 setCovenantID(asset_id);
3093 3093
3094 LLMessageSystem* msg = gMessageSystem; 3094 LLMessageSystem* msg = gMessageSystem;
3095 msg->newMessage("EstateOwnerMessage"); 3095 msg->newMessage("EstateOwnerMessage");
3096 msg->nextBlockFast(_PREHASH_AgentData); 3096 msg->nextBlockFast(_PREHASH_AgentData);
3097 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); 3097 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
3098 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); 3098 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
3099 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used 3099 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
3100 3100
3101 msg->nextBlock("MethodData"); 3101 msg->nextBlock("MethodData");
3102 msg->addString("Method", "estatechangecovenantid"); 3102 msg->addString("Method", "estatechangecovenantid");
3103 msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice()); 3103 msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
3104 3104
3105 msg->nextBlock("ParamList"); 3105 msg->nextBlock("ParamList");
3106 msg->addString("Parameter", getCovenantID().asString()); 3106 msg->addString("Parameter", getCovenantID().asString());
3107 gAgent.sendReliableMessage(); 3107 gAgent.sendReliableMessage();
3108 } 3108 }
3109} 3109}
3110 3110
3111// virtual 3111// virtual
3112BOOL LLPanelEstateCovenant::sendUpdate() 3112BOOL LLPanelEstateCovenant::sendUpdate()
3113{ 3113{
3114 return TRUE; 3114 return TRUE;
3115} 3115}
3116 3116
3117const std::string& LLPanelEstateCovenant::getEstateName() const 3117const std::string& LLPanelEstateCovenant::getEstateName() const
3118{ 3118{
3119 return mEstateNameText->getText(); 3119 return mEstateNameText->getText();
3120} 3120}
3121 3121
3122void LLPanelEstateCovenant::setEstateName(const std::string& name) 3122void LLPanelEstateCovenant::setEstateName(const std::string& name)
3123{ 3123{
3124 mEstateNameText->setText(name); 3124 mEstateNameText->setText(name);
3125} 3125}
3126 3126
3127// static 3127// static
3128void LLPanelEstateCovenant::updateCovenantText(const std::string& string, const LLUUID& asset_id) 3128void LLPanelEstateCovenant::updateCovenantText(const std::string& string, const LLUUID& asset_id)
3129{ 3129{
3130 LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant(); 3130 LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
3131 if( panelp ) 3131 if( panelp )
3132 { 3132 {
3133 panelp->mEditor->setText(string); 3133 panelp->mEditor->setText(string);
3134 panelp->setCovenantID(asset_id); 3134 panelp->setCovenantID(asset_id);
3135 } 3135 }
3136} 3136}
3137 3137
3138// static 3138// static
3139void LLPanelEstateCovenant::updateEstateName(const std::string& name) 3139void LLPanelEstateCovenant::updateEstateName(const std::string& name)
3140{ 3140{
3141 LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant(); 3141 LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
3142 if( panelp ) 3142 if( panelp )
3143 { 3143 {
3144 panelp->mEstateNameText->setText(name); 3144 panelp->mEstateNameText->setText(name);
3145 } 3145 }
3146} 3146}
3147 3147
3148// static 3148// static
3149void LLPanelEstateCovenant::updateLastModified(const std::string& text) 3149void LLPanelEstateCovenant::updateLastModified(const std::string& text)
3150{ 3150{
3151 LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant(); 3151 LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
3152 if( panelp ) 3152 if( panelp )
3153 { 3153 {
3154 panelp->mLastModifiedText->setText(text); 3154 panelp->mLastModifiedText->setText(text);
3155 } 3155 }
3156} 3156}
3157 3157
3158// static 3158// static
3159void LLPanelEstateCovenant::updateEstateOwnerName(const std::string& name) 3159void LLPanelEstateCovenant::updateEstateOwnerName(const std::string& name)
3160{ 3160{
3161 LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant(); 3161 LLPanelEstateCovenant* panelp = LLFloaterRegionInfo::getPanelCovenant();
3162 if( panelp ) 3162 if( panelp )
3163 { 3163 {
3164 panelp->mEstateOwnerText->setText(name); 3164 panelp->mEstateOwnerText->setText(name);
3165 } 3165 }
3166} 3166}
3167 3167
3168const std::string& LLPanelEstateCovenant::getOwnerName() const 3168const std::string& LLPanelEstateCovenant::getOwnerName() const
3169{ 3169{
3170 return mEstateOwnerText->getText(); 3170 return mEstateOwnerText->getText();
3171} 3171}
3172 3172
3173void LLPanelEstateCovenant::setOwnerName(const std::string& name) 3173void LLPanelEstateCovenant::setOwnerName(const std::string& name)
3174{ 3174{
3175 mEstateOwnerText->setText(name); 3175 mEstateOwnerText->setText(name);
3176} 3176}
3177 3177
3178void LLPanelEstateCovenant::setCovenantTextEditor(const std::string& text) 3178void LLPanelEstateCovenant::setCovenantTextEditor(const std::string& text)
3179{ 3179{
3180 mEditor->setText(text); 3180 mEditor->setText(text);
3181} 3181}
3182 3182
3183// key = "estateupdateinfo" 3183// key = "estateupdateinfo"
3184// strings[0] = estate name 3184// strings[0] = estate name
3185// strings[1] = str(owner_id) 3185// strings[1] = str(owner_id)
3186// strings[2] = str(estate_id) 3186// strings[2] = str(estate_id)
3187// strings[3] = str(estate_flags) 3187// strings[3] = str(estate_flags)
3188// strings[4] = str((S32)(sun_hour * 1024)) 3188// strings[4] = str((S32)(sun_hour * 1024))
3189// strings[5] = str(parent_estate_id) 3189// strings[5] = str(parent_estate_id)
3190// strings[6] = str(covenant_id) 3190// strings[6] = str(covenant_id)
3191// strings[7] = str(covenant_timestamp) 3191// strings[7] = str(covenant_timestamp)
3192// strings[8] = str(send_to_agent_only) 3192// strings[8] = str(send_to_agent_only)
3193// strings[9] = str(abuse_email_addr) 3193// strings[9] = str(abuse_email_addr)
3194bool LLDispatchEstateUpdateInfo::operator()( 3194bool LLDispatchEstateUpdateInfo::operator()(
3195 const LLDispatcher* dispatcher, 3195 const LLDispatcher* dispatcher,
3196 const std::string& key, 3196 const std::string& key,
3197 const LLUUID& invoice, 3197 const LLUUID& invoice,
3198 const sparam_t& strings) 3198 const sparam_t& strings)
3199{ 3199{
3200 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); 3200 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
3201 if (!panel) return true; 3201 if (!panel) return true;
3202 3202
3203 // NOTE: LLDispatcher extracts strings with an extra \0 at the 3203 // NOTE: LLDispatcher extracts strings with an extra \0 at the
3204 // end. If we pass the std::string direct to the UI/renderer 3204 // end. If we pass the std::string direct to the UI/renderer
3205 // it draws with a weird character at the end of the string. 3205 // it draws with a weird character at the end of the string.
3206 std::string estate_name = strings[0].c_str(); // preserve c_str() call! 3206 std::string estate_name = strings[0].c_str(); // preserve c_str() call!
3207 panel->setEstateName(estate_name); 3207 panel->setEstateName(estate_name);
3208 3208
3209 if (strings.size() > 3) 3209 if (strings.size() > 3)
3210 { 3210 {
3211 std::string abuse_email = strings[9].c_str(); // preserve c_str() call! 3211 std::string abuse_email = strings[9].c_str(); // preserve c_str() call!
3212 panel->setAbuseEmailAddress(abuse_email); 3212 panel->setAbuseEmailAddress(abuse_email);
3213 } 3213 }
3214 else 3214 else
3215 { 3215 {
3216 panel->setAbuseEmailAddress(panel->getString("email_unsupported")); 3216 panel->setAbuseEmailAddress(panel->getString("email_unsupported"));
3217 } 3217 }
3218 3218
3219 LLViewerRegion* regionp = gAgent.getRegion(); 3219 LLViewerRegion* regionp = gAgent.getRegion();
3220 3220
3221 LLUUID owner_id(strings[1]); 3221 LLUUID owner_id(strings[1]);
3222 regionp->setOwner(owner_id); 3222 regionp->setOwner(owner_id);
3223 // Update estate owner name in UI 3223 // Update estate owner name in UI
3224 const BOOL is_group = FALSE; 3224 const BOOL is_group = FALSE;
3225 gCacheName->get(owner_id, is_group, LLPanelEstateInfo::callbackCacheName); 3225 gCacheName->get(owner_id, is_group, LLPanelEstateInfo::callbackCacheName);
3226 3226
3227 U32 estate_id = strtoul(strings[2].c_str(), NULL, 10); 3227 U32 estate_id = strtoul(strings[2].c_str(), NULL, 10);
3228 panel->setEstateID(estate_id); 3228 panel->setEstateID(estate_id);
3229 3229
3230 U32 flags = strtoul(strings[3].c_str(), NULL, 10); 3230 U32 flags = strtoul(strings[3].c_str(), NULL, 10);
3231 panel->setEstateFlags(flags); 3231 panel->setEstateFlags(flags);
3232 3232
3233 F32 sun_hour = ((F32)(strtod(strings[4].c_str(), NULL)))/1024.0f; 3233 F32 sun_hour = ((F32)(strtod(strings[4].c_str(), NULL)))/1024.0f;
3234 if(sun_hour == 0 && (flags & REGION_FLAGS_SUN_FIXED ? FALSE : TRUE)) 3234 if(sun_hour == 0 && (flags & REGION_FLAGS_SUN_FIXED ? FALSE : TRUE))
3235 { 3235 {
3236 panel->setGlobalTime(TRUE); 3236 panel->setGlobalTime(TRUE);
3237 } 3237 }
3238 else 3238 else
3239 { 3239 {
3240 panel->setGlobalTime(FALSE); 3240 panel->setGlobalTime(FALSE);
3241 panel->setSunHour(sun_hour); 3241 panel->setSunHour(sun_hour);
3242 } 3242 }
3243 3243
3244 bool visible_from_mainland = (bool)(flags & REGION_FLAGS_EXTERNALLY_VISIBLE); 3244 bool visible_from_mainland = (bool)(flags & REGION_FLAGS_EXTERNALLY_VISIBLE);
3245 bool god = gAgent.isGodlike(); 3245 bool god = gAgent.isGodlike();
3246 bool linden_estate = (estate_id <= ESTATE_LAST_LINDEN); 3246 bool linden_estate = (estate_id <= ESTATE_LAST_LINDEN);
3247 3247
3248 // If visible from mainland, disable the access allowed 3248 // If visible from mainland, disable the access allowed
3249 // UI, as anyone can teleport there. 3249 // UI, as anyone can teleport there.
3250 // However, gods need to be able to edit the access list for 3250 // However, gods need to be able to edit the access list for
3251 // linden estates, regardless of visibility, to allow object 3251 // linden estates, regardless of visibility, to allow object
3252 // and L$ transfers. 3252 // and L$ transfers.
3253 bool enable_agent = (!visible_from_mainland || (god && linden_estate)); 3253 bool enable_agent = (!visible_from_mainland || (god && linden_estate));
3254 bool enable_group = enable_agent; 3254 bool enable_group = enable_agent;
3255 bool enable_ban = !linden_estate; 3255 bool enable_ban = !linden_estate;
3256 panel->setAccessAllowedEnabled(enable_agent, enable_group, enable_ban); 3256 panel->setAccessAllowedEnabled(enable_agent, enable_group, enable_ban);
3257 3257
3258 return true; 3258 return true;
3259} 3259}
3260 3260
3261 3261
3262// key = "setaccess" 3262// key = "setaccess"
3263// strings[0] = str(estate_id) 3263// strings[0] = str(estate_id)
3264// strings[1] = str(packed_access_lists) 3264// strings[1] = str(packed_access_lists)
3265// strings[2] = str(num allowed agent ids) 3265// strings[2] = str(num allowed agent ids)
3266// strings[3] = str(num allowed group ids) 3266// strings[3] = str(num allowed group ids)
3267// strings[4] = str(num banned agent ids) 3267// strings[4] = str(num banned agent ids)
3268// strings[5] = str(num estate manager agent ids) 3268// strings[5] = str(num estate manager agent ids)
3269// strings[6] = bin(uuid) 3269// strings[6] = bin(uuid)
3270// strings[7] = bin(uuid) 3270// strings[7] = bin(uuid)
3271// strings[8] = bin(uuid) 3271// strings[8] = bin(uuid)
3272// ... 3272// ...
3273bool LLDispatchSetEstateAccess::operator()( 3273bool LLDispatchSetEstateAccess::operator()(
3274 const LLDispatcher* dispatcher, 3274 const LLDispatcher* dispatcher,
3275 const std::string& key, 3275 const std::string& key,
3276 const LLUUID& invoice, 3276 const LLUUID& invoice,
3277 const sparam_t& strings) 3277 const sparam_t& strings)
3278{ 3278{
3279 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate(); 3279 LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
3280 if (!panel) return true; 3280 if (!panel) return true;
3281 3281
3282 S32 index = 1; // skip estate_id 3282 S32 index = 1; // skip estate_id
3283 U32 access_flags = strtoul(strings[index++].c_str(), NULL,10); 3283 U32 access_flags = strtoul(strings[index++].c_str(), NULL,10);
3284 S32 num_allowed_agents = strtol(strings[index++].c_str(), NULL, 10); 3284 S32 num_allowed_agents = strtol(strings[index++].c_str(), NULL, 10);
3285 S32 num_allowed_groups = strtol(strings[index++].c_str(), NULL, 10); 3285 S32 num_allowed_groups = strtol(strings[index++].c_str(), NULL, 10);
3286 S32 num_banned_agents = strtol(strings[index++].c_str(), NULL, 10); 3286 S32 num_banned_agents = strtol(strings[index++].c_str(), NULL, 10);
3287 S32 num_estate_managers = strtol(strings[index++].c_str(), NULL, 10); 3287 S32 num_estate_managers = strtol(strings[index++].c_str(), NULL, 10);
3288 3288
3289 // sanity ckecks 3289 // sanity ckecks
3290 if (num_allowed_agents > 0 3290 if (num_allowed_agents > 0
3291 && !(access_flags & ESTATE_ACCESS_ALLOWED_AGENTS)) 3291 && !(access_flags & ESTATE_ACCESS_ALLOWED_AGENTS))
3292 { 3292 {
3293 llwarns << "non-zero count for allowed agents, but no corresponding flag" << llendl; 3293 llwarns << "non-zero count for allowed agents, but no corresponding flag" << llendl;
3294 } 3294 }
3295 if (num_allowed_groups > 0 3295 if (num_allowed_groups > 0
3296 && !(access_flags & ESTATE_ACCESS_ALLOWED_GROUPS)) 3296 && !(access_flags & ESTATE_ACCESS_ALLOWED_GROUPS))
3297 { 3297 {
3298 llwarns << "non-zero count for allowed groups, but no corresponding flag" << llendl; 3298 llwarns << "non-zero count for allowed groups, but no corresponding flag" << llendl;
3299 } 3299 }
3300 if (num_banned_agents > 0 3300 if (num_banned_agents > 0
3301 && !(access_flags & ESTATE_ACCESS_BANNED_AGENTS)) 3301 && !(access_flags & ESTATE_ACCESS_BANNED_AGENTS))
3302 { 3302 {
3303 llwarns << "non-zero count for banned agents, but no corresponding flag" << llendl; 3303 llwarns << "non-zero count for banned agents, but no corresponding flag" << llendl;
3304 } 3304 }
3305 if (num_estate_managers > 0 3305 if (num_estate_managers > 0
3306 && !(access_flags & ESTATE_ACCESS_MANAGERS)) 3306 && !(access_flags & ESTATE_ACCESS_MANAGERS))
3307 { 3307 {
3308 llwarns << "non-zero count for managers, but no corresponding flag" << llendl; 3308 llwarns << "non-zero count for managers, but no corresponding flag" << llendl;
3309 } 3309 }
3310 3310
3311 // grab the UUID's out of the string fields 3311 // grab the UUID's out of the string fields
3312 if (access_flags & ESTATE_ACCESS_ALLOWED_AGENTS) 3312 if (access_flags & ESTATE_ACCESS_ALLOWED_AGENTS)
3313 { 3313 {
3314 LLNameListCtrl* allowed_agent_name_list; 3314 LLNameListCtrl* allowed_agent_name_list;
3315 allowed_agent_name_list = panel->getChild<LLNameListCtrl>("allowed_avatar_name_list"); 3315 allowed_agent_name_list = panel->getChild<LLNameListCtrl>("allowed_avatar_name_list");
3316 3316
3317 int totalAllowedAgents = num_allowed_agents; 3317 int totalAllowedAgents = num_allowed_agents;
3318 3318
3319 if (allowed_agent_name_list) 3319 if (allowed_agent_name_list)
3320 { 3320 {
3321 totalAllowedAgents += allowed_agent_name_list->getItemCount(); 3321 totalAllowedAgents += allowed_agent_name_list->getItemCount();
3322 } 3322 }
3323 3323
3324 std::string msg = llformat("Allowed residents: (%d, max %d)", 3324 std::string msg = llformat("Allowed residents: (%d, max %d)",
3325 totalAllowedAgents, 3325 totalAllowedAgents,
3326 ESTATE_MAX_ACCESS_IDS); 3326 ESTATE_MAX_ACCESS_IDS);
3327 panel->childSetValue("allow_resident_label", LLSD(msg)); 3327 panel->childSetValue("allow_resident_label", LLSD(msg));
3328 3328
3329 if (allowed_agent_name_list) 3329 if (allowed_agent_name_list)
3330 { 3330 {
3331 //allowed_agent_name_list->deleteAllItems(); 3331 //allowed_agent_name_list->deleteAllItems();
3332 for (S32 i = 0; i < num_allowed_agents && i < ESTATE_MAX_ACCESS_IDS; i++) 3332 for (S32 i = 0; i < num_allowed_agents && i < ESTATE_MAX_ACCESS_IDS; i++)
3333 { 3333 {
3334 LLUUID id; 3334 LLUUID id;
3335 memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ 3335 memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */
3336 allowed_agent_name_list->addNameItem(id); 3336 allowed_agent_name_list->addNameItem(id);
3337 } 3337 }
3338 panel->childSetEnabled("remove_allowed_avatar_btn", allowed_agent_name_list->getFirstSelected() ? TRUE : FALSE); 3338 panel->childSetEnabled("remove_allowed_avatar_btn", allowed_agent_name_list->getFirstSelected() ? TRUE : FALSE);
3339 allowed_agent_name_list->sortByColumnIndex(0, TRUE); 3339 allowed_agent_name_list->sortByColumnIndex(0, TRUE);
3340 } 3340 }
3341 } 3341 }
3342 3342
3343 if (access_flags & ESTATE_ACCESS_ALLOWED_GROUPS) 3343 if (access_flags & ESTATE_ACCESS_ALLOWED_GROUPS)
3344 { 3344 {
3345 LLNameListCtrl* allowed_group_name_list; 3345 LLNameListCtrl* allowed_group_name_list;
3346 allowed_group_name_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list"); 3346 allowed_group_name_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list");
3347 3347
3348 std::string msg = llformat("Allowed groups: (%d, max %d)", 3348 std::string msg = llformat("Allowed groups: (%d, max %d)",
3349 num_allowed_groups, 3349 num_allowed_groups,
3350 (S32) ESTATE_MAX_GROUP_IDS); 3350 (S32) ESTATE_MAX_GROUP_IDS);
3351 panel->childSetValue("allow_group_label", LLSD(msg)); 3351 panel->childSetValue("allow_group_label", LLSD(msg));
3352 3352
3353 if (allowed_group_name_list) 3353 if (allowed_group_name_list)
3354 { 3354 {
3355 allowed_group_name_list->deleteAllItems(); 3355 allowed_group_name_list->deleteAllItems();
3356 for (S32 i = 0; i < num_allowed_groups && i < ESTATE_MAX_GROUP_IDS; i++) 3356 for (S32 i = 0; i < num_allowed_groups && i < ESTATE_MAX_GROUP_IDS; i++)
3357 { 3357 {
3358 LLUUID id; 3358 LLUUID id;
3359 memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ 3359 memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */
3360 allowed_group_name_list->addGroupNameItem(id); 3360 allowed_group_name_list->addGroupNameItem(id);
3361 } 3361 }
3362 panel->childSetEnabled("remove_allowed_group_btn", allowed_group_name_list->getFirstSelected() ? TRUE : FALSE); 3362 panel->childSetEnabled("remove_allowed_group_btn", allowed_group_name_list->getFirstSelected() ? TRUE : FALSE);
3363 allowed_group_name_list->sortByColumnIndex(0, TRUE); 3363 allowed_group_name_list->sortByColumnIndex(0, TRUE);
3364 } 3364 }
3365 } 3365 }
3366 3366
3367 if (access_flags & ESTATE_ACCESS_BANNED_AGENTS) 3367 if (access_flags & ESTATE_ACCESS_BANNED_AGENTS)
3368 { 3368 {
3369 LLNameListCtrl* banned_agent_name_list; 3369 LLNameListCtrl* banned_agent_name_list;
3370 banned_agent_name_list = panel->getChild<LLNameListCtrl>("banned_avatar_name_list"); 3370 banned_agent_name_list = panel->getChild<LLNameListCtrl>("banned_avatar_name_list");
3371 3371
3372 int totalBannedAgents = num_banned_agents; 3372 int totalBannedAgents = num_banned_agents;
3373 3373
3374 if (banned_agent_name_list) 3374 if (banned_agent_name_list)
3375 { 3375 {
3376 totalBannedAgents += banned_agent_name_list->getItemCount(); 3376 totalBannedAgents += banned_agent_name_list->getItemCount();
3377 } 3377 }
3378 3378
3379 3379
3380 std::string msg = llformat("Banned residents: (%d, max %d)", 3380 std::string msg = llformat("Banned residents: (%d, max %d)",
3381 totalBannedAgents, 3381 totalBannedAgents,
3382 ESTATE_MAX_ACCESS_IDS); 3382 ESTATE_MAX_ACCESS_IDS);
3383 panel->childSetValue("ban_resident_label", LLSD(msg)); 3383 panel->childSetValue("ban_resident_label", LLSD(msg));
3384 3384
3385 if (banned_agent_name_list) 3385 if (banned_agent_name_list)
3386 { 3386 {
3387 //banned_agent_name_list->deleteAllItems(); 3387 //banned_agent_name_list->deleteAllItems();
3388 for (S32 i = 0; i < num_banned_agents && i < ESTATE_MAX_ACCESS_IDS; i++) 3388 for (S32 i = 0; i < num_banned_agents && i < ESTATE_MAX_ACCESS_IDS; i++)
3389 { 3389 {
3390 LLUUID id; 3390 LLUUID id;
3391 memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ 3391 memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */
3392 banned_agent_name_list->addNameItem(id); 3392 banned_agent_name_list->addNameItem(id);
3393 } 3393 }
3394 panel->childSetEnabled("remove_banned_avatar_btn", banned_agent_name_list->getFirstSelected() ? TRUE : FALSE); 3394 panel->childSetEnabled("remove_banned_avatar_btn", banned_agent_name_list->getFirstSelected() ? TRUE : FALSE);
3395 banned_agent_name_list->sortByColumnIndex(0, TRUE); 3395 banned_agent_name_list->sortByColumnIndex(0, TRUE);
3396 } 3396 }
3397 } 3397 }
3398 3398
3399 if (access_flags & ESTATE_ACCESS_MANAGERS) 3399 if (access_flags & ESTATE_ACCESS_MANAGERS)
3400 { 3400 {
3401 std::string msg = llformat("Estate Managers: (%d, max %d)", 3401 std::string msg = llformat("Estate Managers: (%d, max %d)",
3402 num_estate_managers, 3402 num_estate_managers,
3403 ESTATE_MAX_MANAGERS); 3403 ESTATE_MAX_MANAGERS);
3404 panel->childSetValue("estate_manager_label", LLSD(msg)); 3404 panel->childSetValue("estate_manager_label", LLSD(msg));
3405 3405
3406 LLNameListCtrl* estate_manager_name_list = 3406 LLNameListCtrl* estate_manager_name_list =
3407 panel->getChild<LLNameListCtrl>("estate_manager_name_list"); 3407 panel->getChild<LLNameListCtrl>("estate_manager_name_list");
3408 if (estate_manager_name_list) 3408 if (estate_manager_name_list)
3409 { 3409 {
3410 estate_manager_name_list->deleteAllItems(); // Clear existing entries 3410 estate_manager_name_list->deleteAllItems(); // Clear existing entries
3411 3411
3412 // There should be only ESTATE_MAX_MANAGERS people in the list, but if the database gets more (SL-46107) don't 3412 // There should be only ESTATE_MAX_MANAGERS people in the list, but if the database gets more (SL-46107) don't
3413 // truncate the list unless it's really big. Go ahead and show the extras so the user doesn't get confused, 3413 // truncate the list unless it's really big. Go ahead and show the extras so the user doesn't get confused,
3414 // and they can still remove them. 3414 // and they can still remove them.
3415 for (S32 i = 0; i < num_estate_managers && i < (ESTATE_MAX_MANAGERS * 4); i++) 3415 for (S32 i = 0; i < num_estate_managers && i < (ESTATE_MAX_MANAGERS * 4); i++)
3416 { 3416 {
3417 LLUUID id; 3417 LLUUID id;
3418 memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */ 3418 memcpy(id.mData, strings[index++].data(), UUID_BYTES); /* Flawfinder: ignore */
3419 estate_manager_name_list->addNameItem(id); 3419 estate_manager_name_list->addNameItem(id);
3420 } 3420 }
3421 panel->childSetEnabled("remove_estate_manager_btn", estate_manager_name_list->getFirstSelected() ? TRUE : FALSE); 3421 panel->childSetEnabled("remove_estate_manager_btn", estate_manager_name_list->getFirstSelected() ? TRUE : FALSE);
3422 estate_manager_name_list->sortByColumnIndex(0, TRUE); 3422 estate_manager_name_list->sortByColumnIndex(0, TRUE);
3423 } 3423 }
3424 } 3424 }
3425 3425
3426 return true; 3426 return true;
3427} 3427}
3428 3428
3429// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a) 3429// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
3430void LLFloaterRegionInfo::open() 3430void LLFloaterRegionInfo::open()
3431{ 3431{
3432 // We'll allow access to the estate tools for estate managers (and for the sim owner) 3432 // We'll allow access to the estate tools for estate managers (and for the sim owner)
3433 if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) 3433 if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
3434 { 3434 {
3435 LLViewerRegion* pRegion = gAgent.getRegion(); 3435 LLViewerRegion* pRegion = gAgent.getRegion();
3436 if (!pRegion) 3436 if (!pRegion)
3437 return; 3437 return;
3438 3438
3439 // Should be able to call LLRegion::canManageEstate() but then we can fake god like 3439 // Should be able to call LLRegion::canManageEstate() but then we can fake god like
3440 if ( (!pRegion->isEstateManager()) && (pRegion->getOwner() != gAgent.getID()) ) 3440 if ( (!pRegion->isEstateManager()) && (pRegion->getOwner() != gAgent.getID()) )
3441 return; 3441 return;
3442 } 3442 }
3443 3443
3444 LLFloater::open(); 3444 LLFloater::open();
3445} 3445}
3446// [/RLVa:KB] 3446// [/RLVa:KB]
diff --git a/linden/indra/newview/llfloatertos.cpp b/linden/indra/newview/llfloatertos.cpp
index ac4a06b..efc8bd6 100644
--- a/linden/indra/newview/llfloatertos.cpp
+++ b/linden/indra/newview/llfloatertos.cpp
@@ -1,305 +1,305 @@
1/** 1/**
2 * @file llfloatertos.cpp 2 * @file llfloatertos.cpp
3 * @brief Terms of Service Agreement dialog 3 * @brief Terms of Service Agreement dialog
4 * 4 *
5 * $LicenseInfo:firstyear=2003&license=viewergpl$ 5 * $LicenseInfo:firstyear=2003&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2003-2009, Linden Research, Inc. 7 * Copyright (c) 2003-2009, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0 11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement 12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of 13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or 14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 * 16 *
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception 21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 * 22 *
23 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations. 25 * and agree to abide by those obligations.
26 * 26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE. 29 * COMPLETENESS OR PERFORMANCE.
30 * $/LicenseInfo$ 30 * $/LicenseInfo$
31 */ 31 */
32 32
33#include "llviewerprecompiledheaders.h" 33#include "llviewerprecompiledheaders.h"
34 34
35#include "llfloatertos.h" 35#include "llfloatertos.h"
36 36
37// viewer includes 37// viewer includes
38#include "llagent.h" 38#include "llagent.h"
39#include "llappviewer.h" 39#include "llappviewer.h"
40#include "llstartup.h" 40#include "llstartup.h"
41#include "llviewerstats.h" 41#include "llviewerstats.h"
42#include "llviewertexteditor.h" 42#include "llviewertexteditor.h"
43#include "llviewerwindow.h" 43#include "llviewerwindow.h"
44 44
45// linden library includes 45// linden library includes
46#include "llbutton.h" 46#include "llbutton.h"
47#include "llhttpclient.h" 47#include "llhttpclient.h"
48#include "llhttpstatuscodes.h" // for HTTP_FOUND 48#include "llhttpstatuscodes.h" // for HTTP_FOUND
49#include "llradiogroup.h" 49#include "llradiogroup.h"
50#include "lltextbox.h" 50#include "lltextbox.h"
51#include "llui.h" 51#include "llui.h"
52#include "lluictrlfactory.h" 52#include "lluictrlfactory.h"
53#include "llvfile.h" 53#include "llvfile.h"
54#include "message.h" 54#include "message.h"
55#include "hippogridmanager.h" 55#include "hippogridmanager.h"
56 56
57 57
58// static 58// static
59LLFloaterTOS* LLFloaterTOS::sInstance = NULL; 59LLFloaterTOS* LLFloaterTOS::sInstance = NULL;
60 60
61// static 61// static
62LLFloaterTOS* LLFloaterTOS::show(ETOSType type, const std::string & message) 62LLFloaterTOS* LLFloaterTOS::show(ETOSType type, const std::string & message)
63{ 63{
64 if( !LLFloaterTOS::sInstance ) 64 if( !LLFloaterTOS::sInstance )
65 { 65 {
66 LLFloaterTOS::sInstance = new LLFloaterTOS(type, message); 66 LLFloaterTOS::sInstance = new LLFloaterTOS(type, message);
67 } 67 }
68 68
69 if (type == TOS_TOS) 69 if (type == TOS_TOS)
70 { 70 {
71 LLUICtrlFactory::getInstance()->buildFloater(LLFloaterTOS::sInstance, "floater_tos.xml"); 71 LLUICtrlFactory::getInstance()->buildFloater(LLFloaterTOS::sInstance, "floater_tos.xml");
72 } 72 }
73 else 73 else
74 { 74 {
75 LLUICtrlFactory::getInstance()->buildFloater(LLFloaterTOS::sInstance, "floater_critical.xml"); 75 LLUICtrlFactory::getInstance()->buildFloater(LLFloaterTOS::sInstance, "floater_critical.xml");
76 } 76 }
77 77
78 return LLFloaterTOS::sInstance; 78 return LLFloaterTOS::sInstance;
79} 79}
80 80
81 81
82LLFloaterTOS::LLFloaterTOS(ETOSType type, const std::string & message) 82LLFloaterTOS::LLFloaterTOS(ETOSType type, const std::string & message)
83: LLModalDialog( std::string(" "), 100, 100 ), 83: LLModalDialog( std::string(" "), 100, 100 ),
84 mType(type), 84 mType(type),
85 mMessage(message), 85 mMessage(message),
86 mWebBrowserWindowId( 0 ), 86 mWebBrowserWindowId( 0 ),
87 mLoadCompleteCount( 0 ) 87 mLoadCompleteCount( 0 )
88{ 88{
89} 89}
90 90
91// helper class that trys to download a URL from a web site and calls a method 91// helper class that trys to download a URL from a web site and calls a method
92// on parent class indicating if the web server is working or not 92// on parent class indicating if the web server is working or not
93class LLIamHereTOS : public LLHTTPClient::Responder 93class LLIamHereTOS : public LLHTTPClient::Responder
94{ 94{
95 private: 95 private:
96 LLIamHereTOS( LLFloaterTOS* parent ) : 96 LLIamHereTOS( LLFloaterTOS* parent ) :
97 mParent( parent ) 97 mParent( parent )
98 {} 98 {}
99 99
100 LLFloaterTOS* mParent; 100 LLFloaterTOS* mParent;
101 101
102 public: 102 public:
103 103
104 static boost::intrusive_ptr< LLIamHereTOS > build( LLFloaterTOS* parent ) 104 static boost::intrusive_ptr< LLIamHereTOS > build( LLFloaterTOS* parent )
105 { 105 {
106 return boost::intrusive_ptr< LLIamHereTOS >( new LLIamHereTOS( parent ) ); 106 return boost::intrusive_ptr< LLIamHereTOS >( new LLIamHereTOS( parent ) );
107 }; 107 };
108 108
109 virtual void setParent( LLFloaterTOS* parentIn ) 109 virtual void setParent( LLFloaterTOS* parentIn )
110 { 110 {
111 mParent = parentIn; 111 mParent = parentIn;
112 }; 112 };
113 113
114 virtual void result( const LLSD& content ) 114 virtual void result( const LLSD& content )
115 { 115 {
116 if ( mParent ) 116 if ( mParent )
117 mParent->setSiteIsAlive( true ); 117 mParent->setSiteIsAlive( true );
118 }; 118 };
119 119
120 virtual void error( U32 status, const std::string& reason ) 120 virtual void error( U32 status, const std::string& reason )
121 { 121 {
122 if ( mParent ) 122 if ( mParent )
123 { 123 {
124 // *HACK: For purposes of this alive check, 302 Found 124 // *HACK: For purposes of this alive check, 302 Found
125 // (aka Moved Temporarily) is considered alive. The web site 125 // (aka Moved Temporarily) is considered alive. The web site
126 // redirects this link to a "cache busting" temporary URL. JC 126 // redirects this link to a "cache busting" temporary URL. JC
127 bool alive = (status == HTTP_FOUND); 127 bool alive = (status == HTTP_FOUND);
128 mParent->setSiteIsAlive( alive ); 128 mParent->setSiteIsAlive( alive );
129 } 129 }
130 }; 130 };
131}; 131};
132 132
133// this is global and not a class member to keep crud out of the header file 133// this is global and not a class member to keep crud out of the header file
134namespace { 134namespace {
135 boost::intrusive_ptr< LLIamHereTOS > gResponsePtr = 0; 135 boost::intrusive_ptr< LLIamHereTOS > gResponsePtr = 0;
136}; 136};
137 137
138BOOL LLFloaterTOS::postBuild() 138BOOL LLFloaterTOS::postBuild()
139{ 139{
140 childSetAction("Continue", onContinue, this); 140 childSetAction("Continue", onContinue, this);
141 childSetAction("Cancel", onCancel, this); 141 childSetAction("Cancel", onCancel, this);
142 childSetCommitCallback("agree_chk", updateAgree, this); 142 childSetCommitCallback("agree_chk", updateAgree, this);
143 143
144 LLCheckBoxCtrl* tos_agreement = getChild<LLCheckBoxCtrl>("agree_chk"); 144 LLCheckBoxCtrl* tos_agreement = getChild<LLCheckBoxCtrl>("agree_chk");
145 tos_agreement->setEnabled( true ); 145 tos_agreement->setEnabled( true );
146 146
147 //Always set this so that the TOS is displayed whether the web browser pops up or not. 147 //Always set this so that the TOS is displayed whether the web browser pops up or not.
148 LLTextEditor *editor = getChild<LLTextEditor>("tos_text"); 148 LLTextEditor *editor = getChild<LLTextEditor>("tos_text");
149 editor->setHandleEditKeysDirectly( TRUE ); 149 editor->setHandleEditKeysDirectly( TRUE );
150 editor->setEnabled( FALSE ); 150 editor->setEnabled( FALSE );
151 editor->setWordWrap(TRUE); 151 editor->setWordWrap(TRUE);
152 editor->setFocus(TRUE); 152 editor->setFocus(TRUE);
153 editor->setValue(LLSD(mMessage)); 153 editor->setValue(LLSD(mMessage));
154 LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("tos_html"); 154 LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("tos_html");
155 if (web_browser) 155 if (web_browser)
156 { 156 {
157 //Disable for critical messages and text messages, it is reenabled later 157 //Disable for critical messages and text messages, it is reenabled later
158 web_browser->setVisible( FALSE ); 158 web_browser->setVisible( FALSE );
159 } 159 }
160 160
161 if ( mType != TOS_TOS ) 161 if ( mType != TOS_TOS )
162 { 162 {
163 // this displays the critical message only 163 // this displays the critical message only
164 return TRUE; 164 return TRUE;
165 } 165 }
166 bool use_web_browser = false; 166 bool use_web_browser = false;
167 167
168 //Check to see if the message is a link to display 168 //Check to see if the message is a link to display
169 std::string token = "http://"; 169 std::string token = "http://";
170 std::string::size_type iIndex = mMessage.rfind(token); 170 std::string::size_type iIndex = mMessage.rfind(token);
171 //IF it has http:// in it, we use the web browser 171 //IF it has http:// in it, we use the web browser
172 if(iIndex != std::string::npos && mMessage.length() >= 2) 172 if(iIndex != std::string::npos && mMessage.length() >= 2)
173 { 173 {
174 // it exists 174 // it exists
175 use_web_browser = true; 175 use_web_browser = true;
176 } 176 }
177 else if (gHippoGridManager->getConnectedGrid()->isSecondLife()) 177 else if (gHippoGridManager->getConnectedGrid()->isSecondLife())
178 { 178 {
179 //Its SL, use the browser for it as thats what it should do 179 //Its SL, use the browser for it as thats what it should do
180 use_web_browser = true; 180 use_web_browser = true;
181 } 181 }
182 182
183 if ( web_browser && use_web_browser) 183 if ( web_browser && use_web_browser)
184 { 184 {
185 // hide the SL text widget if we're displaying TOS with using a browser widget. 185 // hide the SL text widget if we're displaying TOS with using a browser widget.
186 LLTextEditor *editor = getChild<LLTextEditor>("tos_text"); 186 LLTextEditor *editor = getChild<LLTextEditor>("tos_text");
187 editor->setVisible( FALSE ); 187 editor->setVisible( FALSE );
188 188
189 // disable Agree to TOS radio button until the page has fully loaded 189 // disable Agree to TOS radio button until the page has fully loaded
190 tos_agreement->setEnabled( false ); 190 tos_agreement->setEnabled( false );
191 191
192 // Reenable the web browser 192 // Reenable the web browser
193 web_browser->setVisible( TRUE ); 193 web_browser->setVisible( TRUE );
194 194
195 web_browser->addObserver(this); 195 web_browser->addObserver(this);
196 gResponsePtr = LLIamHereTOS::build( this ); 196 gResponsePtr = LLIamHereTOS::build( this );
197 LLHTTPClient::head( getString( "real_url" ), gResponsePtr ); 197 LLHTTPClient::head( getString( "real_url" ), gResponsePtr );
198 } 198 }
199 199
200 return TRUE; 200 return TRUE;
201} 201}
202 202
203void LLFloaterTOS::setSiteIsAlive( bool alive ) 203void LLFloaterTOS::setSiteIsAlive( bool alive )
204{ 204{
205 // only do this for TOS pages 205 // only do this for TOS pages
206 if ( mType == TOS_TOS ) 206 if ( mType == TOS_TOS )
207 { 207 {
208 LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("tos_html"); 208 LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("tos_html");
209 // if the contents of the site was retrieved 209 // if the contents of the site was retrieved
210 if ( alive ) 210 if ( alive )
211 { 211 {
212 if ( web_browser ) 212 if ( web_browser )
213 { 213 {
214 // navigate to the "real" page 214 // navigate to the "real" page
215 web_browser->navigateTo( getString( "real_url" ) ); 215 web_browser->navigateTo( getString( "real_url" ) );
216 }; 216 };
217 } 217 }
218 else 218 else
219 { 219 {
220 // normally this is set when navigation to TOS page navigation completes (so you can't accept before TOS loads) 220 // normally this is set when navigation to TOS page navigation completes (so you can't accept before TOS loads)
221 // but if the page is unavailable, we need to do this now 221 // but if the page is unavailable, we need to do this now
222 LLCheckBoxCtrl* tos_agreement = getChild<LLCheckBoxCtrl>("agree_chk"); 222 LLCheckBoxCtrl* tos_agreement = getChild<LLCheckBoxCtrl>("agree_chk");
223 tos_agreement->setEnabled( true ); 223 tos_agreement->setEnabled( true );
224 }; 224 };
225 }; 225 };
226} 226}
227 227
228LLFloaterTOS::~LLFloaterTOS() 228LLFloaterTOS::~LLFloaterTOS()
229{ 229{
230 230
231 // tell the responder we're not here anymore 231 // tell the responder we're not here anymore
232 if ( gResponsePtr ) 232 if ( gResponsePtr )
233 gResponsePtr->setParent( 0 ); 233 gResponsePtr->setParent( 0 );
234 234
235 LLFloaterTOS::sInstance = NULL; 235 LLFloaterTOS::sInstance = NULL;
236} 236}
237 237
238// virtual 238// virtual
239void LLFloaterTOS::draw() 239void LLFloaterTOS::draw()
240{ 240{
241 // draw children 241 // draw children
242 LLModalDialog::draw(); 242 LLModalDialog::draw();
243} 243}
244 244
245// static 245// static
246void LLFloaterTOS::updateAgree(LLUICtrl*, void* userdata ) 246void LLFloaterTOS::updateAgree(LLUICtrl*, void* userdata )
247{ 247{
248 LLFloaterTOS* self = (LLFloaterTOS*) userdata; 248 LLFloaterTOS* self = (LLFloaterTOS*) userdata;
249 bool agree = self->childGetValue("agree_chk").asBoolean(); 249 bool agree = self->childGetValue("agree_chk").asBoolean();
250 self->childSetEnabled("Continue", agree); 250 self->childSetEnabled("Continue", agree);
251} 251}
252 252
253// static 253// static
254void LLFloaterTOS::onContinue( void* userdata ) 254void LLFloaterTOS::onContinue( void* userdata )
255{ 255{
256 LLFloaterTOS* self = (LLFloaterTOS*) userdata; 256 LLFloaterTOS* self = (LLFloaterTOS*) userdata;
257 llinfos << "User agrees with TOS." << llendl; 257 llinfos << "User agrees with TOS." << llendl;
258 if (self->mType == TOS_TOS) 258 if (self->mType == TOS_TOS)
259 { 259 {
260 gAcceptTOS = TRUE; 260 gAcceptTOS = TRUE;
261 } 261 }
262 else 262 else
263 { 263 {
264 gAcceptCriticalMessage = TRUE; 264 gAcceptCriticalMessage = TRUE;
265 } 265 }
266 266
267 // Testing TOS dialog 267 // Testing TOS dialog
268 #if ! LL_RELEASE_FOR_DOWNLOAD 268 #if ! LL_RELEASE_FOR_DOWNLOAD
269 if ( LLStartUp::getStartupState() == STATE_LOGIN_WAIT ) 269 if ( LLStartUp::getStartupState() == STATE_LOGIN_WAIT )
270 { 270 {
271 LLStartUp::setStartupState( STATE_LOGIN_SHOW ); 271 LLStartUp::setStartupState( STATE_LOGIN_SHOW );
272 } 272 }
273 else 273 else
274 #endif 274 #endif
275 275
276 LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT ); // Go back and finish authentication 276 LLStartUp::setStartupState( STATE_LOGIN_AUTH_INIT ); // Go back and finish authentication
277 self->close(); // destroys this object 277 self->close(); // destroys this object
278} 278}
279 279
280// static 280// static
281void LLFloaterTOS::onCancel( void* userdata ) 281void LLFloaterTOS::onCancel( void* userdata )
282{ 282{
283 LLFloaterTOS* self = (LLFloaterTOS*) userdata; 283 LLFloaterTOS* self = (LLFloaterTOS*) userdata;
284 llinfos << "User disagrees with TOS." << llendl; 284 llinfos << "User disagrees with TOS." << llendl;
285 LLNotifications::instance().add("MustAgreeToLogIn", LLSD(), LLSD(), login_alert_done); 285 LLNotifications::instance().add("MustAgreeToLogIn", LLSD(), LLSD(), login_alert_done);
286 LLStartUp::setStartupState( STATE_LOGIN_SHOW ); 286 LLStartUp::setStartupState( STATE_LOGIN_SHOW );
287 self->mLoadCompleteCount = 0; // reset counter for next time we come to TOS 287 self->mLoadCompleteCount = 0; // reset counter for next time we come to TOS
288 self->close(); // destroys this object 288 self->close(); // destroys this object
289} 289}
290 290
291//virtual 291//virtual
292void LLFloaterTOS::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent event) 292void LLFloaterTOS::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent event)
293{ 293{
294 if(event == MEDIA_EVENT_NAVIGATE_COMPLETE) 294 if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
295 { 295 {
296 // skip past the loading screen navigate complete 296 // skip past the loading screen navigate complete
297 if ( ++mLoadCompleteCount == 2 ) 297 if ( ++mLoadCompleteCount == 2 )
298 { 298 {
299 llinfos << "NAVIGATE COMPLETE" << llendl; 299 llinfos << "NAVIGATE COMPLETE" << llendl;
300 // enable Agree to TOS radio button now that page has loaded 300 // enable Agree to TOS radio button now that page has loaded
301 LLCheckBoxCtrl * tos_agreement = getChild<LLCheckBoxCtrl>("agree_chk"); 301 LLCheckBoxCtrl * tos_agreement = getChild<LLCheckBoxCtrl>("agree_chk");
302 tos_agreement->setEnabled( true ); 302 tos_agreement->setEnabled( true );
303 } 303 }
304 } 304 }
305} 305}
diff --git a/linden/indra/newview/llglsandbox.cpp b/linden/indra/newview/llglsandbox.cpp
index 98c4d06..96fd39b 100644
--- a/linden/indra/newview/llglsandbox.cpp
+++ b/linden/indra/newview/llglsandbox.cpp
@@ -710,7 +710,7 @@ void LLViewerParcelMgr::renderOneSegment(F32 x1, F32 y1, F32 x2, F32 y2, F32 hei
710{ 710{
711 // HACK: At edge of last region of world, we need to make sure the region 711 // HACK: At edge of last region of world, we need to make sure the region
712 // resolves correctly so we can get a height value. 712 // resolves correctly so we can get a height value.
713 const F32 BORDER = REGION_WIDTH_METERS - 0.1f; 713 const F32 BORDER = regionp->getWidth() - 0.1f;
714 714
715 F32 clamped_x1 = x1; 715 F32 clamped_x1 = x1;
716 F32 clamped_y1 = y1; 716 F32 clamped_y1 = y1;
diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp
index 8484c4e..3b78553 100644
--- a/linden/indra/newview/llmaniptranslate.cpp
+++ b/linden/indra/newview/llmaniptranslate.cpp
@@ -531,7 +531,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
531 // You can't move more than some distance from your original mousedown point. 531 // You can't move more than some distance from your original mousedown point.
532 F32 max_drag_distance = gHippoLimits->getMaxDragDistance(); 532 F32 max_drag_distance = gHippoLimits->getMaxDragDistance();
533 533
534 if (max_drag_distance != FLT_MAX && relative_move.magVecSquared() > max_drag_distance * max_drag_distance) 534 if (max_drag_distance != FLT_MAX && relative_move.magVecSquared() > max_drag_distance * max_drag_distance)
535 { 535 {
536 lldebugst(LLERR_USER_INPUT) << "hover handled by LLManipTranslate (too far)" << llendl; 536 lldebugst(LLERR_USER_INPUT) << "hover handled by LLManipTranslate (too far)" << llendl;
537 gViewerWindow->setCursor(UI_CURSOR_NOLOCKED); 537 gViewerWindow->setCursor(UI_CURSOR_NOLOCKED);
diff --git a/linden/indra/newview/llmapresponders.cpp b/linden/indra/newview/llmapresponders.cpp
index 9d974f2..31c04a3 100644
--- a/linden/indra/newview/llmapresponders.cpp
+++ b/linden/indra/newview/llmapresponders.cpp
@@ -120,6 +120,8 @@ void LLMapLayerResponder::result(const LLSD& result)
120 120
121 S32 x_regions = map_block["X"]; 121 S32 x_regions = map_block["X"];
122 S32 y_regions = map_block["Y"]; 122 S32 y_regions = map_block["Y"];
123 S32 size_x_regions = map_block["SizeX"];
124 S32 size_y_regions = map_block["SizeY"];
123 std::string name = map_block["Name"]; 125 std::string name = map_block["Name"];
124 S32 access = map_block["Access"]; 126 S32 access = map_block["Access"];
125 S32 region_flags = map_block["RegionFlags"]; 127 S32 region_flags = map_block["RegionFlags"];
@@ -168,6 +170,8 @@ void LLMapLayerResponder::result(const LLSD& result)
168 LLWorldMap::getInstance()->mSimInfoMap[handle] = siminfo; 170 LLWorldMap::getInstance()->mSimInfoMap[handle] = siminfo;
169 171
170 siminfo->mHandle = handle; 172 siminfo->mHandle = handle;
173 siminfo->msizeX = size_x_regions;
174 siminfo->msizeY = size_y_regions;
171 siminfo->mName.assign( name ); 175 siminfo->mName.assign( name );
172 siminfo->mAccess = access; /*Flawfinder: ignore*/ 176 siminfo->mAccess = access; /*Flawfinder: ignore*/
173 siminfo->mRegionFlags = region_flags; 177 siminfo->mRegionFlags = region_flags;
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index a74744b..c9cdc8f 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -368,6 +368,8 @@ bool idle_startup()
368 static U64 first_sim_handle = 0; 368 static U64 first_sim_handle = 0;
369 static LLHost first_sim; 369 static LLHost first_sim;
370 static std::string first_sim_seed_cap; 370 static std::string first_sim_seed_cap;
371 static U32 first_sim_size_x = 256;
372 static U32 first_sim_size_y = 256;
371 373
372 static LLVector3 initial_sun_direction(1.f, 0.f, 0.f); 374 static LLVector3 initial_sun_direction(1.f, 0.f, 0.f);
373 static LLVector3 agent_start_position_region(10.f, 10.f, 10.f); // default for when no space server 375 static LLVector3 agent_start_position_region(10.f, 10.f, 10.f); // default for when no space server
@@ -1620,6 +1622,16 @@ bool idle_startup()
1620 first_sim_handle = to_region_handle(region_x, region_y); 1622 first_sim_handle = to_region_handle(region_x, region_y);
1621 } 1623 }
1622 1624
1625 text = LLUserAuth::getInstance()->getResponse("region_size_x");
1626 if(!text.empty()) {
1627 first_sim_size_x = strtoul(text.c_str(), NULL, 10);
1628 LLViewerParcelMgr::getInstance()->init(first_sim_size_x);
1629 }
1630
1631 //region Y size is currently unused, major refactoring required. - Patrick Sapinski (2/10/2011)
1632 text = LLUserAuth::getInstance()->getResponse("region_size_y");
1633 if(!text.empty()) first_sim_size_y = strtoul(text.c_str(), NULL, 10);
1634
1623 const std::string look_at_str = LLUserAuth::getInstance()->getResponse("look_at"); 1635 const std::string look_at_str = LLUserAuth::getInstance()->getResponse("look_at");
1624 if (!look_at_str.empty()) 1636 if (!look_at_str.empty())
1625 { 1637 {
@@ -1915,7 +1927,7 @@ bool idle_startup()
1915 1927
1916 gAgent.initOriginGlobal(from_region_handle(first_sim_handle)); 1928 gAgent.initOriginGlobal(from_region_handle(first_sim_handle));
1917 1929
1918 LLWorld::getInstance()->addRegion(first_sim_handle, first_sim); 1930 LLWorld::getInstance()->addRegion(first_sim_handle, first_sim, first_sim_size_x, first_sim_size_y);
1919 1931
1920 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(first_sim_handle); 1932 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(first_sim_handle);
1921 LL_INFOS("AppInit") << "Adding initial simulator " << regionp->getOriginGlobal() << LL_ENDL; 1933 LL_INFOS("AppInit") << "Adding initial simulator " << regionp->getOriginGlobal() << LL_ENDL;
diff --git a/linden/indra/newview/llsurface.cpp b/linden/indra/newview/llsurface.cpp
index aaafe0d..5a99e66 100644
--- a/linden/indra/newview/llsurface.cpp
+++ b/linden/indra/newview/llsurface.cpp
@@ -303,7 +303,7 @@ void LLSurface::initTextures()
303 mWaterObjp = (LLVOWater *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_WATER, mRegionp); 303 mWaterObjp = (LLVOWater *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_WATER, mRegionp);
304 gPipeline.createObject(mWaterObjp); 304 gPipeline.createObject(mWaterObjp);
305 LLVector3d water_pos_global = from_region_handle(mRegionp->getHandle()); 305 LLVector3d water_pos_global = from_region_handle(mRegionp->getHandle());
306 water_pos_global += LLVector3d(128.0, 128.0, DEFAULT_WATER_HEIGHT); 306 water_pos_global += LLVector3d(mRegionp->getWidth()/2, mRegionp->getWidth()/2, DEFAULT_WATER_HEIGHT);
307 mWaterObjp->setPositionGlobal(water_pos_global); 307 mWaterObjp->setPositionGlobal(water_pos_global);
308 } 308 }
309} 309}
@@ -356,8 +356,8 @@ void LLSurface::setOriginGlobal(const LLVector3d &origin_global)
356 // Hack! 356 // Hack!
357 if (mWaterObjp.notNull() && mWaterObjp->mDrawable.notNull()) 357 if (mWaterObjp.notNull() && mWaterObjp->mDrawable.notNull())
358 { 358 {
359 const F64 x = origin_global.mdV[VX] + 128.0; 359 const F64 x = origin_global.mdV[VX] + (F64)mRegionp->getWidth()/2;
360 const F64 y = origin_global.mdV[VY] + 128.0; 360 const F64 y = origin_global.mdV[VY] + (F64)mRegionp->getWidth()/2;
361 const F64 z = mWaterObjp->getPositionGlobal().mdV[VZ]; 361 const F64 z = mWaterObjp->getPositionGlobal().mdV[VZ];
362 362
363 LLVector3d water_origin_global(x, y, z); 363 LLVector3d water_origin_global(x, y, z);
@@ -707,14 +707,22 @@ void LLSurface::decompressDCTPatch(LLBitPack &bitpack, LLGroupHeader *gopp, BOOL
707 707
708 while (1) 708 while (1)
709 { 709 {
710 decode_patch_header(bitpack, &ph); 710 decode_patch_header(bitpack, &ph, b_large_patch);
711 if (ph.quant_wbits == END_OF_PATCHES) 711 if (ph.quant_wbits == END_OF_PATCHES)
712 { 712 {
713 break; 713 break;
714 } 714 }
715 715
716 i = ph.patchids >> 5; 716 if (b_large_patch)
717 j = ph.patchids & 0x1F; 717 {
718 i = ph.patchids >> 16; //x
719 j = ph.patchids & 0xFFFF; //y
720 }
721 else
722 {
723 i = ph.patchids >> 5; //x
724 j = ph.patchids & 0x1F; //y
725 }
718 726
719 if ((i >= mPatchesPerEdge) || (j >= mPatchesPerEdge)) 727 if ((i >= mPatchesPerEdge) || (j >= mPatchesPerEdge))
720 { 728 {
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index 9ebfd04..f67f0dc 100755
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -3531,6 +3531,17 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
3531 U32 teleport_flags; 3531 U32 teleport_flags;
3532 msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags); 3532 msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags);
3533 3533
3534 U32 region_size_x = 256;
3535 msg->getU32Fast(_PREHASH_Info, _PREHASH_RegionSizeX, region_size_x);
3536 U32 region_size_y = 256;
3537 msg->getU32Fast(_PREHASH_Info, _PREHASH_RegionSizeY, region_size_y);
3538
3539 //and a little hack for Second Life compatibility
3540 if (region_size_y == 0 || region_size_x == 0)
3541 {
3542 region_size_x = 256;
3543 region_size_y = 256;
3544 }
3534 3545
3535 std::string seedCap; 3546 std::string seedCap;
3536 msg->getStringFast(_PREHASH_Info, _PREHASH_SeedCapability, seedCap); 3547 msg->getStringFast(_PREHASH_Info, _PREHASH_SeedCapability, seedCap);
@@ -3550,7 +3561,7 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
3550 3561
3551 // Viewer trusts the simulator. 3562 // Viewer trusts the simulator.
3552 gMessageSystem->enableCircuit(sim_host, TRUE); 3563 gMessageSystem->enableCircuit(sim_host, TRUE);
3553 LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host); 3564 LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host, region_size_x, region_size_y);
3554 3565
3555/* 3566/*
3556 // send camera update to new region 3567 // send camera update to new region
@@ -3866,9 +3877,21 @@ void process_crossed_region(LLMessageSystem* msg, void**)
3866 std::string seedCap; 3877 std::string seedCap;
3867 msg->getStringFast(_PREHASH_RegionData, _PREHASH_SeedCapability, seedCap); 3878 msg->getStringFast(_PREHASH_RegionData, _PREHASH_SeedCapability, seedCap);
3868 3879
3880 U32 region_size_x = 256;
3881 msg->getU32(_PREHASH_RegionData, _PREHASH_RegionSizeX, region_size_x);
3882 U32 region_size_y = 256;
3883 msg->getU32(_PREHASH_RegionData, _PREHASH_RegionSizeY, region_size_y);
3884
3885 //and a little hack for Second Life compatibility
3886 if (region_size_y == 0 || region_size_x == 0)
3887 {
3888 region_size_x = 256;
3889 region_size_y = 256;
3890 }
3891
3869 send_complete_agent_movement(sim_host); 3892 send_complete_agent_movement(sim_host);
3870 3893
3871 LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host); 3894 LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host, region_size_x, region_size_y);
3872 regionp->setSeedCapability(seedCap); 3895 regionp->setSeedCapability(seedCap);
3873 3896
3874 // Tell the LightShare handler that we have changed regions. 3897 // Tell the LightShare handler that we have changed regions.
diff --git a/linden/indra/newview/llviewerparcelmgr.cpp b/linden/indra/newview/llviewerparcelmgr.cpp
index 9db65c6..11ab647 100644
--- a/linden/indra/newview/llviewerparcelmgr.cpp
+++ b/linden/indra/newview/llviewerparcelmgr.cpp
@@ -137,17 +137,27 @@ LLViewerParcelMgr::LLViewerParcelMgr()
137 mHoverParcel = new LLParcel(); 137 mHoverParcel = new LLParcel();
138 mCollisionParcel = new LLParcel(); 138 mCollisionParcel = new LLParcel();
139 139
140 mParcelsPerEdge = S32( REGION_WIDTH_METERS / PARCEL_GRID_STEP_METERS ); 140 mBlockedImage = gImageList.getImageFromFile("noentrylines.j2c");
141 mPassImage = gImageList.getImageFromFile("noentrypasslines.j2c");
142
143 init(256);
144}
145
146//moved this stuff out of the constructor and into a function that we can call again after we get the region size.
147//LLViewerParcelMgr needs to be changed so we either get an instance per region, or it handles various region sizes
148//on a single grid properly - Patrick Sapinski (2/10/2011)
149void LLViewerParcelMgr::init(F32 region_size)
150{
151 mParcelsPerEdge = S32( region_size / PARCEL_GRID_STEP_METERS );
141 mHighlightSegments = new U8[(mParcelsPerEdge+1)*(mParcelsPerEdge+1)]; 152 mHighlightSegments = new U8[(mParcelsPerEdge+1)*(mParcelsPerEdge+1)];
142 resetSegments(mHighlightSegments); 153 resetSegments(mHighlightSegments);
143 154
144 mCollisionSegments = new U8[(mParcelsPerEdge+1)*(mParcelsPerEdge+1)]; 155 mCollisionSegments = new U8[(mParcelsPerEdge+1)*(mParcelsPerEdge+1)];
145 resetSegments(mCollisionSegments); 156 resetSegments(mCollisionSegments);
146 157
147 mBlockedImage = gImageList.getImageFromFile("noentrylines.j2c"); 158 S32 mParcelOverLayChunks = region_size * region_size / (128 * 128);
148 mPassImage = gImageList.getImageFromFile("noentrypasslines.j2c");
149 159
150 S32 overlay_size = mParcelsPerEdge * mParcelsPerEdge / PARCEL_OVERLAY_CHUNKS; 160 S32 overlay_size = mParcelsPerEdge * mParcelsPerEdge / mParcelOverLayChunks;
151 sPackedOverlay = new U8[overlay_size]; 161 sPackedOverlay = new U8[overlay_size];
152 162
153 mAgentParcelOverlay = new U8[mParcelsPerEdge * mParcelsPerEdge]; 163 mAgentParcelOverlay = new U8[mParcelsPerEdge * mParcelsPerEdge];
@@ -1351,8 +1361,7 @@ void LLViewerParcelMgr::processParcelOverlay(LLMessageSystem *msg, void **user)
1351 return; 1361 return;
1352 } 1362 }
1353 1363
1354 S32 parcels_per_edge = LLViewerParcelMgr::getInstance()->mParcelsPerEdge; 1364 S32 expected_size = 1024; //parcels_per_edge * parcels_per_edge / PARCEL_OVERLAY_CHUNKS;
1355 S32 expected_size = parcels_per_edge * parcels_per_edge / PARCEL_OVERLAY_CHUNKS;
1356 if (packed_overlay_size != expected_size) 1365 if (packed_overlay_size != expected_size)
1357 { 1366 {
1358 llwarns << "Got parcel overlay size " << packed_overlay_size 1367 llwarns << "Got parcel overlay size " << packed_overlay_size
diff --git a/linden/indra/newview/llviewerparcelmgr.h b/linden/indra/newview/llviewerparcelmgr.h
index 9bf6096..59e6186 100644
--- a/linden/indra/newview/llviewerparcelmgr.h
+++ b/linden/indra/newview/llviewerparcelmgr.h
@@ -82,6 +82,8 @@ public:
82 LLViewerParcelMgr(); 82 LLViewerParcelMgr();
83 ~LLViewerParcelMgr(); 83 ~LLViewerParcelMgr();
84 84
85 void init(F32 region_size);
86
85 static void cleanupGlobals(); 87 static void cleanupGlobals();
86 88
87 BOOL selectionEmpty() const; 89 BOOL selectionEmpty() const;
diff --git a/linden/indra/newview/llviewerparceloverlay.cpp b/linden/indra/newview/llviewerparceloverlay.cpp
index 0bcd8f3..4ae3253 100644
--- a/linden/indra/newview/llviewerparceloverlay.cpp
+++ b/linden/indra/newview/llviewerparceloverlay.cpp
@@ -58,6 +58,7 @@ const U8 OVERLAY_IMG_COMPONENTS = 4;
58LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_width_meters) 58LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_width_meters)
59: mRegion( region ), 59: mRegion( region ),
60 mParcelGridsPerEdge( S32( region_width_meters / PARCEL_GRID_STEP_METERS ) ), 60 mParcelGridsPerEdge( S32( region_width_meters / PARCEL_GRID_STEP_METERS ) ),
61 mRegionSize(S32(region_width_meters)),
61 mDirty( FALSE ), 62 mDirty( FALSE ),
62 mTimeSinceLastUpdate(), 63 mTimeSinceLastUpdate(),
63 mOverlayTextureIdx(-1), 64 mOverlayTextureIdx(-1),
@@ -299,7 +300,8 @@ void LLViewerParcelOverlay::uncompressLandOverlay(S32 chunk, U8 *packed_overlay)
299{ 300{
300 // Unpack the message data into the ownership array 301 // Unpack the message data into the ownership array
301 S32 size = mParcelGridsPerEdge * mParcelGridsPerEdge; 302 S32 size = mParcelGridsPerEdge * mParcelGridsPerEdge;
302 S32 chunk_size = size / PARCEL_OVERLAY_CHUNKS; 303 S32 mParcelOverLayChunks = mRegionSize * mRegionSize / (128 * 128);
304 S32 chunk_size = size / mParcelOverLayChunks;
303 305
304 memcpy(mOwnership + chunk*chunk_size, packed_overlay, chunk_size); /*Flawfinder: ignore*/ 306 memcpy(mOwnership + chunk*chunk_size, packed_overlay, chunk_size); /*Flawfinder: ignore*/
305 307
diff --git a/linden/indra/newview/llviewerparceloverlay.h b/linden/indra/newview/llviewerparceloverlay.h
index 9bed1dd..fc0db0a 100644
--- a/linden/indra/newview/llviewerparceloverlay.h
+++ b/linden/indra/newview/llviewerparceloverlay.h
@@ -98,6 +98,7 @@ private:
98 LLViewerRegion* mRegion; 98 LLViewerRegion* mRegion;
99 99
100 S32 mParcelGridsPerEdge; 100 S32 mParcelGridsPerEdge;
101 S32 mRegionSize;
101 102
102 LLPointer<LLImageGL> mTexture; 103 LLPointer<LLImageGL> mTexture;
103 LLPointer<LLImageRaw> mImageRaw; 104 LLPointer<LLImageRaw> mImageRaw;
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp
index a8047b8..eba0db7 100644
--- a/linden/indra/newview/llviewerregion.cpp
+++ b/linden/indra/newview/llviewerregion.cpp
@@ -65,6 +65,7 @@
65#include "llvoclouds.h" 65#include "llvoclouds.h"
66#include "llworld.h" 66#include "llworld.h"
67#include "llspatialpartition.h" 67#include "llspatialpartition.h"
68#include "llviewerparcelmgr.h"
68 69
69// Viewer object cache version, change if object update 70// Viewer object cache version, change if object update
70// format changes. JC 71// format changes. JC
@@ -199,6 +200,8 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
199 if (!gNoRender) 200 if (!gNoRender)
200 { 201 {
201 mParcelOverlay = new LLViewerParcelOverlay(this, region_width_meters); 202 mParcelOverlay = new LLViewerParcelOverlay(this, region_width_meters);
203 //Re-init the parcel mgr for this sim
204 LLViewerParcelMgr::getInstance()->init(region_width_meters);
202 } 205 }
203 else 206 else
204 { 207 {
diff --git a/linden/indra/newview/llvlmanager.cpp b/linden/indra/newview/llvlmanager.cpp
index 177093c..7f483ca 100644
--- a/linden/indra/newview/llvlmanager.cpp
+++ b/linden/indra/newview/llvlmanager.cpp
@@ -57,11 +57,13 @@ LLVLManager::~LLVLManager()
57 57
58void LLVLManager::addLayerData(LLVLData *vl_datap, const S32 mesg_size) 58void LLVLManager::addLayerData(LLVLData *vl_datap, const S32 mesg_size)
59{ 59{
60 if (LAND_LAYER_CODE == vl_datap->mType) 60 if (LAND_LAYER_CODE == vl_datap->mType ||
61 AURORA_LAND_LAYER_CODE == vl_datap->mType)
61 { 62 {
62 mLandBits += mesg_size * 8; 63 mLandBits += mesg_size * 8;
63 } 64 }
64 else if (WIND_LAYER_CODE == vl_datap->mType) 65 else if (WIND_LAYER_CODE == vl_datap->mType ||
66 AURORA_WIND_LAYER_CODE == vl_datap->mType)
65 { 67 {
66 mWindBits += mesg_size * 8; 68 mWindBits += mesg_size * 8;
67 } 69 }
@@ -94,12 +96,17 @@ void LLVLManager::unpackData(const S32 num_packets)
94 { 96 {
95 datap->mRegionp->getLand().decompressDCTPatch(bit_pack, &goph, FALSE); 97 datap->mRegionp->getLand().decompressDCTPatch(bit_pack, &goph, FALSE);
96 } 98 }
97 else if (WIND_LAYER_CODE == datap->mType) 99 else if (AURORA_LAND_LAYER_CODE == datap->mType)
100 {
101 datap->mRegionp->getLand().decompressDCTPatch(bit_pack, &goph, TRUE);
102 }
103 else if (WIND_LAYER_CODE == datap->mType ||
104 AURORA_WIND_LAYER_CODE == datap->mType)
98 { 105 {
99 datap->mRegionp->mWind.decompress(bit_pack, &goph); 106 datap->mRegionp->mWind.decompress(bit_pack, &goph);
100
101 } 107 }
102 else if (CLOUD_LAYER_CODE == datap->mType) 108 else if (CLOUD_LAYER_CODE == datap->mType ||
109 AURORA_CLOUD_LAYER_CODE == datap->mType)
103 { 110 {
104 datap->mRegionp->mCloudLayer.decompress(bit_pack, &goph); 111 datap->mRegionp->mCloudLayer.decompress(bit_pack, &goph);
105 } 112 }
diff --git a/linden/indra/newview/llvowater.cpp b/linden/indra/newview/llvowater.cpp
index c66295a..eb74520 100644
--- a/linden/indra/newview/llvowater.cpp
+++ b/linden/indra/newview/llvowater.cpp
@@ -74,7 +74,7 @@ LLVOWater::LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regi
74{ 74{
75 // Terrain must draw during selection passes so it can block objects behind it. 75 // Terrain must draw during selection passes so it can block objects behind it.
76 mbCanSelect = FALSE; 76 mbCanSelect = FALSE;
77 setScale(LLVector3(256.f, 256.f, 0.f)); // Hack for setting scale for bounding boxes/visibility. 77 setScale(LLVector3(mRegionp->getWidth(), mRegionp->getWidth(), 0.f)); // Hack for setting scale for bounding boxes/visibility.
78 78
79 mUseTexture = TRUE; 79 mUseTexture = TRUE;
80 mIsEdgePatch = FALSE; 80 mIsEdgePatch = FALSE;
diff --git a/linden/indra/newview/llwind.cpp b/linden/indra/newview/llwind.cpp
index ae98bea..3dcbdf6 100644
--- a/linden/indra/newview/llwind.cpp
+++ b/linden/indra/newview/llwind.cpp
@@ -120,12 +120,12 @@ void LLWind::decompress(LLBitPack &bitpack, LLGroupHeader *group_headerp)
120 set_group_of_patch_header(group_headerp); 120 set_group_of_patch_header(group_headerp);
121 121
122 // X component 122 // X component
123 decode_patch_header(bitpack, &patch_header); 123 decode_patch_header(bitpack, &patch_header, FALSE);
124 decode_patch(bitpack, buffer); 124 decode_patch(bitpack, buffer);
125 decompress_patch(mVelX, buffer, &patch_header); 125 decompress_patch(mVelX, buffer, &patch_header);
126 126
127 // Y component 127 // Y component
128 decode_patch_header(bitpack, &patch_header); 128 decode_patch_header(bitpack, &patch_header, FALSE);
129 decode_patch(bitpack, buffer); 129 decode_patch(bitpack, buffer);
130 decompress_patch(mVelY, buffer, &patch_header); 130 decompress_patch(mVelY, buffer, &patch_header);
131 131
diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp
index 7866bf8..13fc91c 100644
--- a/linden/indra/newview/llworld.cpp
+++ b/linden/indra/newview/llworld.cpp
@@ -80,12 +80,12 @@ const S32 WORLD_PATCH_SIZE = 16;
80 80
81extern LLColor4U MAX_WATER_COLOR; 81extern LLColor4U MAX_WATER_COLOR;
82 82
83const U32 LLWorld::mWidth = 256; 83U32 LLWorld::mWidth = 256;
84 84
85// meters/point, therefore mWidth * mScale = meters per edge 85// meters/point, therefore mWidth * mScale = meters per edge
86const F32 LLWorld::mScale = 1.f; 86const F32 LLWorld::mScale = 1.f;
87 87
88const F32 LLWorld::mWidthInMeters = mWidth * mScale; 88F32 LLWorld::mWidthInMeters = mWidth * mScale;
89 89
90// 90//
91// Functions 91// Functions
@@ -140,7 +140,7 @@ F32 LLWorld::getRegionMaxHeight() const
140 return gHippoLimits->getMaxHeight(); 140 return gHippoLimits->getMaxHeight();
141} 141}
142 142
143LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host) 143LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host, const U32 &region_size_x, const U32 &region_size_y)
144{ 144{
145 LLMemType mt(LLMemType::MTYPE_REGIONS); 145 LLMemType mt(LLMemType::MTYPE_REGIONS);
146 146
@@ -172,9 +172,11 @@ LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host)
172 172
173 U32 iindex = 0; 173 U32 iindex = 0;
174 U32 jindex = 0; 174 U32 jindex = 0;
175 mWidth = region_size_x;
176 mWidthInMeters = mWidth * mScale;
175 from_region_handle(region_handle, &iindex, &jindex); 177 from_region_handle(region_handle, &iindex, &jindex);
176 S32 x = (S32)(iindex/mWidth); 178 S32 x = (S32)(iindex/256);
177 S32 y = (S32)(jindex/mWidth); 179 S32 y = (S32)(jindex/256);
178 llinfos << "Adding new region (" << x << ":" << y << ")" << llendl; 180 llinfos << "Adding new region (" << x << ":" << y << ")" << llendl;
179 llinfos << "Host: " << host << llendl; 181 llinfos << "Host: " << host << llendl;
180 182
@@ -902,7 +904,7 @@ void LLWorld::updateWaterObjects()
902 } 904 }
903 905
904 // Region width in meters. 906 // Region width in meters.
905 S32 const rwidth = (S32)REGION_WIDTH_U32; 907 S32 const rwidth = (S32)getRegionWidthInMeters();
906 908
907 // The distance we might see into the void 909 // The distance we might see into the void
908 // when standing on the edge of a region, in meters. 910 // when standing on the edge of a region, in meters.
@@ -1256,9 +1258,20 @@ void process_enable_simulator(LLMessageSystem *msg, void **user_data)
1256 // which simulator should we modify? 1258 // which simulator should we modify?
1257 LLHost sim(ip_u32, port); 1259 LLHost sim(ip_u32, port);
1258 1260
1261 U32 region_size_x = 256;
1262 msg->getU32Fast(_PREHASH_SimulatorInfo, _PREHASH_RegionSizeX, region_size_x);
1263 U32 region_size_y = 256;
1264 msg->getU32Fast(_PREHASH_SimulatorInfo, _PREHASH_RegionSizeY, region_size_y);
1265
1266 if (region_size_y == 0 || region_size_x == 0)
1267 {
1268 region_size_x = 256;
1269 region_size_y = 256;
1270 }
1271
1259 // Viewer trusts the simulator. 1272 // Viewer trusts the simulator.
1260 msg->enableCircuit(sim, TRUE); 1273 msg->enableCircuit(sim, TRUE);
1261 LLWorld::getInstance()->addRegion(handle, sim); 1274 LLWorld::getInstance()->addRegion(handle, sim, region_size_x, region_size_y);
1262 1275
1263 // give the simulator a message it can use to get ip and port 1276 // give the simulator a message it can use to get ip and port
1264 llinfos << "simulator_enable() Enabling " << sim << " with code " << msg->getOurCircuitCode() << llendl; 1277 llinfos << "simulator_enable() Enabling " << sim << " with code " << msg->getOurCircuitCode() << llendl;
diff --git a/linden/indra/newview/llworld.h b/linden/indra/newview/llworld.h
index 964729d..5dbef6d 100644
--- a/linden/indra/newview/llworld.h
+++ b/linden/indra/newview/llworld.h
@@ -71,7 +71,7 @@ public:
71 LLWorld(); 71 LLWorld();
72 void destroyClass(); 72 void destroyClass();
73 73
74 LLViewerRegion* addRegion(const U64 &region_handle, const LLHost &host); 74 LLViewerRegion* addRegion(const U64 &region_handle, const LLHost &host, const U32 &region_size_x, const U32 &region_size_y);
75 // safe to call if already present, does the "right thing" if 75 // safe to call if already present, does the "right thing" if
76 // hosts are same, or if hosts are different, etc... 76 // hosts are same, or if hosts are different, etc...
77 void removeRegion(const LLHost &host); 77 void removeRegion(const LLHost &host);
@@ -171,12 +171,12 @@ private:
171 region_list_t mCulledRegionList; 171 region_list_t mCulledRegionList;
172 172
173 // Number of points on edge 173 // Number of points on edge
174 static const U32 mWidth; 174 static U32 mWidth;
175 175
176 // meters/point, therefore mWidth * mScale = meters per edge 176 // meters/point, therefore mWidth * mScale = meters per edge
177 static const F32 mScale; 177 static const F32 mScale;
178 178
179 static const F32 mWidthInMeters; 179 static F32 mWidthInMeters;
180 180
181 F32 mLandFarClip; // Far clip distance for land. 181 F32 mLandFarClip; // Far clip distance for land.
182 LLPatchVertexArray mLandPatch; 182 LLPatchVertexArray mLandPatch;
diff --git a/linden/indra/newview/llworldmap.cpp b/linden/indra/newview/llworldmap.cpp
index 3ada36f..bd3996d 100644
--- a/linden/indra/newview/llworldmap.cpp
+++ b/linden/indra/newview/llworldmap.cpp
@@ -237,15 +237,26 @@ LLSimInfo* LLWorldMap::simInfoFromPosGlobal(const LLVector3d& pos_global)
237 return simInfoFromHandle(handle); 237 return simInfoFromHandle(handle);
238} 238}
239 239
240LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 handle) 240LLSimInfo* LLWorldMap::simInfoFromHandle(const U64 findhandle)
241{ 241{
242 sim_info_map_t::iterator it = mSimInfoMap.find(handle); 242 std::map<U64, LLSimInfo*>::const_iterator it;
243 if (it != mSimInfoMap.end()) 243 for (it = LLWorldMap::getInstance()->mSimInfoMap.begin(); it != LLWorldMap::getInstance()->mSimInfoMap.end(); ++it)
244 { 244 {
245 LLSimInfo* sim_info = (*it).second; 245 const U64 handle = (*it).first;
246 if (sim_info) 246 LLSimInfo* info = (*it).second;
247 if(handle == findhandle)
248 {
249 return info;
250 }
251 U32 x = 0, y = 0;
252 from_region_handle(findhandle, &x, &y);
253 U32 checkRegionX, checkRegionY;
254 from_region_handle(handle, &checkRegionX, &checkRegionY);
255
256 if(x > checkRegionX && x < (checkRegionX + info->msizeX) &&
257 y > checkRegionY && y < (checkRegionY + info->msizeY))
247 { 258 {
248 return sim_info; 259 return info;
249 } 260 }
250 } 261 }
251 return NULL; 262 return NULL;
diff --git a/linden/indra/newview/llworldmap.h b/linden/indra/newview/llworldmap.h
index b7089f3..56b32a2 100644
--- a/linden/indra/newview/llworldmap.h
+++ b/linden/indra/newview/llworldmap.h
@@ -81,6 +81,8 @@ public:
81 81
82public: 82public:
83 U64 mHandle; 83 U64 mHandle;
84 S32 msizeX;
85 S32 msizeY;
84 std::string mName; 86 std::string mName;
85 87
86 F64 mAgentsUpdateTime; 88 F64 mAgentsUpdateTime;
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index 443ee74..8d9ed1b 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -471,8 +471,8 @@ void LLWorldMapView::draw()
471 // When the view isn't panned, 0,0 = center of rectangle 471 // When the view isn't panned, 0,0 = center of rectangle
472 F32 bottom = sPanY + half_height + relative_y; 472 F32 bottom = sPanY + half_height + relative_y;
473 F32 left = sPanX + half_width + relative_x; 473 F32 left = sPanX + half_width + relative_x;
474 F32 top = bottom + sMapScale ; 474 F32 top = bottom+ (sMapScale * info->msizeY / REGION_WIDTH_METERS);
475 F32 right = left + sMapScale ; 475 F32 right = left + (sMapScale * info->msizeY / REGION_WIDTH_METERS);
476 476
477 // Switch to world map texture (if available for this region) if either: 477 // Switch to world map texture (if available for this region) if either:
478 // 1. Tiles are zoomed out small enough, or 478 // 1. Tiles are zoomed out small enough, or
@@ -567,17 +567,21 @@ void LLWorldMapView::draw()
567 center_global.mdV[VX] += 128.0; 567 center_global.mdV[VX] += 128.0;
568 center_global.mdV[VY] += 128.0; 568 center_global.mdV[VY] += 128.0;
569 569
570 S32 draw_size = llround(sMapScale); 570 S32 x_draw_size = llround(sMapScale);
571 S32 y_draw_size = llround(sMapScale);
572 x_draw_size *= info->msizeX / REGION_WIDTH_METERS;
573 y_draw_size *= info->msizeY / REGION_WIDTH_METERS;
574
571 if (simimage != NULL) 575 if (simimage != NULL)
572 { 576 {
573 simimage->setBoostLevel(LLViewerImageBoostLevel::BOOST_MAP); 577 simimage->setBoostLevel(LLViewerImageBoostLevel::BOOST_MAP);
574 simimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY])); 578 simimage->setKnownDrawSize(llround(x_draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(y_draw_size * LLUI::sGLScaleFactor.mV[VY]));
575 } 579 }
576 580
577 if (overlayimage != NULL) 581 if (overlayimage != NULL)
578 { 582 {
579 overlayimage->setBoostLevel(LLViewerImageBoostLevel::BOOST_MAP); 583 overlayimage->setBoostLevel(LLViewerImageBoostLevel::BOOST_MAP);
580 overlayimage->setKnownDrawSize(llround(draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(draw_size * LLUI::sGLScaleFactor.mV[VY])); 584 overlayimage->setKnownDrawSize(llround(x_draw_size * LLUI::sGLScaleFactor.mV[VX]), llround(y_draw_size * LLUI::sGLScaleFactor.mV[VY]));
581 } 585 }
582 586
583// LLTextureView::addDebugImage(simimage); 587// LLTextureView::addDebugImage(simimage);
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index 8225b4c..86acaea 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -1018,7 +1018,8 @@ class Linux_i686Manifest(LinuxManifest):
1018 self.path("libELFIO.so") 1018 self.path("libELFIO.so")
1019 self.path("libopenjpeg.so.2") 1019 self.path("libopenjpeg.so.2")
1020 self.path("libxml2.so.2") 1020 self.path("libxml2.so.2")
1021 self.path("libz.so.1","libz.so") 1021 self.path("libz.so")
1022 self.path("libz.so.1")
1022 1023
1023 # OpenAL 1024 # OpenAL
1024 self.path("libopenal.so.1.12.854", "libopenal.so.1") 1025 self.path("libopenal.so.1.12.854", "libopenal.so.1")
diff --git a/linden/indra/newview/viewertime.cpp b/linden/indra/newview/viewertime.cpp
index 06436b6..5ed9465 100644
--- a/linden/indra/newview/viewertime.cpp
+++ b/linden/indra/newview/viewertime.cpp
@@ -28,6 +28,7 @@
28* $/LicenseInfo$ 28* $/LicenseInfo$
29*/ 29*/
30 30
31#include <sstream>
31#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
32 33
33#include "llappviewer.h" // for gPacificDaylightTime 34#include "llappviewer.h" // for gPacificDaylightTime
@@ -129,10 +130,19 @@ void ViewerTime::refresh()
129 if (hour == 0) hour = 12; 130 if (hour == 0) hour = 12;
130 } 131 }
131 132
132 mTZ = "PST"; 133 if (sUseTimeOffset)
133 if (gPacificDaylightTime)
134 { 134 {
135 mTZ = "PDT"; 135 std::stringstream myString;
136 myString << "UTC " << sTimeOffset;
137 mTZ = myString.str();
138 }
139 else
140 {
141 mTZ = "PST";
142 if (gPacificDaylightTime)
143 {
144 mTZ = "PDT";
145 }
136 } 146 }
137 } 147 }
138 else // just UTC 148 else // just UTC